aboutsummaryrefslogtreecommitdiff
path: root/mod/dokuwiki/languages/es.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/dokuwiki/languages/es.php')
-rw-r--r--mod/dokuwiki/languages/es.php18
1 files changed, 18 insertions, 0 deletions
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
1002966e33'>_graphics/walled_garden/one_column_bottom.pngbin522 -> 1336 bytes-rw-r--r--_graphics/walled_garden/one_column_top.pngbin517 -> 1345 bytes-rw-r--r--_graphics/walled_garden/two_column_bottom.pngbin532 -> 1353 bytes-rw-r--r--_graphics/walled_garden/two_column_top.pngbin547 -> 1366 bytes-rw-r--r--actions/admin/site/regenerate_secret.php11
-rw-r--r--actions/admin/site/unlock_upgrade.php10
-rw-r--r--actions/admin/site/update_advanced.php6
-rw-r--r--actions/admin/site/update_basic.php2
-rw-r--r--actions/avatar/remove.php52
-rw-r--r--actions/comments/delete.php5
-rw-r--r--actions/friends/collections/add.php2
-rw-r--r--actions/login.php9
-rw-r--r--actions/profile/edit.php49
-rw-r--r--actions/register.php7
-rw-r--r--documentation/info/manifest.xml2
-rw-r--r--engine/classes/ElggAccess.php4
-rw-r--r--engine/classes/ElggAnnotation.php5
-rw-r--r--engine/classes/ElggAttributeLoader.php248
-rw-r--r--engine/classes/ElggAutoP.php336
-rw-r--r--engine/classes/ElggBatch.php71
-rw-r--r--engine/classes/ElggCache.php4
-rw-r--r--engine/classes/ElggCrypto.php208
-rw-r--r--engine/classes/ElggData.php20
-rw-r--r--engine/classes/ElggDiskFilestore.php48
-rw-r--r--engine/classes/ElggEntity.php46
-rw-r--r--engine/classes/ElggExtender.php2
-rw-r--r--engine/classes/ElggFile.php21
-rw-r--r--engine/classes/ElggFileCache.php6
-rw-r--r--engine/classes/ElggGroup.php60
-rw-r--r--engine/classes/ElggGroupItemVisibility.php93
-rw-r--r--engine/classes/ElggLRUCache.php181
-rw-r--r--engine/classes/ElggMemcache.php2
-rw-r--r--engine/classes/ElggMenuBuilder.php63
-rw-r--r--engine/classes/ElggMenuItem.php3
-rw-r--r--engine/classes/ElggMetadata.php4
-rw-r--r--engine/classes/ElggObject.php56
-rw-r--r--engine/classes/ElggPAM.php8
-rw-r--r--engine/classes/ElggPlugin.php101
-rw-r--r--engine/classes/ElggPluginManifest.php2
-rw-r--r--engine/classes/ElggPluginManifestParser.php6
-rw-r--r--engine/classes/ElggPluginPackage.php6
-rw-r--r--engine/classes/ElggPriorityList.php30
-rw-r--r--engine/classes/ElggRelationship.php5
-rw-r--r--engine/classes/ElggSession.php14
-rw-r--r--engine/classes/ElggSite.php60
-rw-r--r--engine/classes/ElggStaticVariableCache.php8
-rw-r--r--engine/classes/ElggTranslit.php55
-rw-r--r--engine/classes/ElggUser.php57
-rw-r--r--engine/classes/ElggVolatileMetadataCache.php95
-rw-r--r--engine/classes/ElggWidget.php12
-rw-r--r--engine/classes/ElggXMLElement.php131
-rw-r--r--engine/classes/IncompleteEntityException.php10
-rw-r--r--engine/classes/ODDMetaData.php14
-rw-r--r--engine/classes/ODDRelationship.php8
-rw-r--r--engine/handlers/cache_handler.php19
-rw-r--r--engine/lib/access.php169
-rw-r--r--engine/lib/actions.php117
-rw-r--r--engine/lib/admin.php45
-rw-r--r--engine/lib/annotations.php100
-rw-r--r--engine/lib/cache.php11
-rw-r--r--engine/lib/calendar.php2
-rw-r--r--engine/lib/configuration.php55
-rw-r--r--engine/lib/cron.php4
-rw-r--r--engine/lib/database.php95
-rw-r--r--engine/lib/deprecated-1.7.php2
-rw-r--r--engine/lib/deprecated-1.8.php66
-rw-r--r--engine/lib/elgglib.php134
-rw-r--r--engine/lib/entities.php504
-rw-r--r--engine/lib/export.php29
-rw-r--r--engine/lib/extender.php29
-rw-r--r--engine/lib/filestore.php6
-rw-r--r--engine/lib/group.php63
-rw-r--r--engine/lib/input.php15
-rw-r--r--engine/lib/languages.php48
-rw-r--r--engine/lib/location.php4
-rw-r--r--engine/lib/mb_wrapper.php2
-rw-r--r--engine/lib/memcache.php20
-rw-r--r--engine/lib/metadata.php62
-rw-r--r--engine/lib/metastrings.php37
-rw-r--r--engine/lib/navigation.php41
-rw-r--r--engine/lib/notification.php45
-rw-r--r--engine/lib/objects.php7
-rw-r--r--engine/lib/opendd.php4
-rw-r--r--engine/lib/output.php187
-rw-r--r--engine/lib/pagehandler.php10
-rw-r--r--engine/lib/pageowner.php28
-rw-r--r--engine/lib/pam.php7
-rw-r--r--engine/lib/plugins.php112
-rw-r--r--engine/lib/private_settings.php5
-rw-r--r--engine/lib/relationships.php36
-rw-r--r--engine/lib/river.php65
-rw-r--r--engine/lib/sessions.php17
-rw-r--r--engine/lib/sites.php13
-rw-r--r--engine/lib/statistics.php11
-rw-r--r--engine/lib/system_log.php22
-rw-r--r--engine/lib/tags.php7
-rw-r--r--engine/lib/upgrade.php58
-rw-r--r--engine/lib/upgrades/2009102801.php5
-rw-r--r--engine/lib/upgrades/2010033101.php2
-rw-r--r--engine/lib/upgrades/2010052601.php12
-rw-r--r--engine/lib/upgrades/2010061501.php6
-rw-r--r--engine/lib/upgrades/2010071001.php5
-rw-r--r--engine/lib/upgrades/2010071002.php5
-rw-r--r--engine/lib/upgrades/2011010101.php2
-rw-r--r--engine/lib/upgrades/2011052801.php5
-rw-r--r--engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php2
-rw-r--r--engine/lib/upgrades/2013030600-1.8.13-update_user_location-8999eb8bf1bdd9a3.php24
-rw-r--r--engine/lib/upgrades/2013051700-1.8.15-add_missing_group_index-52a63a3a3ffaced2.php28
-rw-r--r--engine/lib/upgrades/2013052900-1.8.15-ipv6_in_syslog-f5c2cc0196e9e731.php12
-rw-r--r--engine/lib/upgrades/2013060900-1.8.15-site_secret-404fc165cf9e0ac9.php16
-rw-r--r--engine/lib/upgrades/create_upgrade.php5
-rw-r--r--engine/lib/user_settings.php7
-rw-r--r--engine/lib/users.php101
-rw-r--r--engine/lib/views.php195
-rw-r--r--engine/lib/web_services.php69
-rw-r--r--engine/lib/widgets.php3
-rw-r--r--engine/lib/xml.php40
-rw-r--r--engine/schema/mysql.sql2
-rw-r--r--engine/tests/api/access_collections.php25
-rw-r--r--engine/tests/api/annotations.php80
-rw-r--r--engine/tests/api/entity_getter_functions.php68
-rw-r--r--engine/tests/api/helpers.php103
-rw-r--r--engine/tests/api/metadata.php22
-rw-r--r--engine/tests/api/metadata_cache.php7
-rw-r--r--engine/tests/api/metastrings.php33
-rw-r--r--engine/tests/api/output.php74
-rw-r--r--engine/tests/api/plugins.php4
-rw-r--r--engine/tests/objects/entities.php2
-rw-r--r--engine/tests/objects/objects.php2
-rw-r--r--engine/tests/objects/users.php21
-rw-r--r--engine/tests/regression/trac_bugs.php190
-rw-r--r--engine/tests/test_files/output/autop/block-a.exp.norun.html6
-rw-r--r--engine/tests/test_files/output/autop/block-a.in.norun.html9
-rw-r--r--engine/tests/test_files/output/autop/domdoc_exp.html46
-rw-r--r--engine/tests/test_files/output/autop/domdoc_in.html80
-rw-r--r--engine/tests/test_files/output/autop/typical-post.exp.html84
-rw-r--r--engine/tests/test_files/output/autop/typical-post.in.html89
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.exp.html22
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.in.html25
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.exp.html31
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.in.html41
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.exp.html51
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.in.html79
-rw-r--r--engine/tests/test_files/plugin_18/manifest.xml2
-rw-r--r--engine/tests/test_files/xxe/external_entity.txt1
-rw-r--r--engine/tests/test_files/xxe/request.xml8
-rw-r--r--gpl-plugins20
-rw-r--r--htaccess_dist72
-rw-r--r--install/ElggInstaller.php39
-rw-r--r--install/ElggRewriteTester.php4
-rw-r--r--install/cli/sample_installer.php43
-rw-r--r--install/js/install.js21
-rw-r--r--install/languages/en.php5
-rw-r--r--js/lib/elgglib.js14
-rw-r--r--js/lib/languages.js15
-rw-r--r--js/lib/security.js33
-rw-r--r--js/lib/session.js32
-rw-r--r--js/lib/ui.js4
-rw-r--r--js/lib/ui.river.js26
-rw-r--r--js/lib/ui.userpicker.js4
-rw-r--r--js/tests/ElggLibTest.js13
-rw-r--r--js/tests/README5
-rw-r--r--languages/en.php43
m---------mod/admins0
m---------mod/assemblies0
m---------mod/audio_html50
m---------mod/beechat6
-rw-r--r--mod/beechat/README23
-rw-r--r--mod/beechat/actions/get_connection.php21
-rw-r--r--mod/beechat/actions/get_details.php21
-rw-r--r--mod/beechat/actions/get_icons.php52
-rw-r--r--mod/beechat/actions/get_state.php21
-rw-r--r--mod/beechat/actions/get_statuses.php41
-rw-r--r--mod/beechat/actions/join_groupchat.php15
-rw-r--r--mod/beechat/actions/leave_groupchat.php12
-rw-r--r--mod/beechat/actions/save_state.php29
-rw-r--r--mod/beechat/classes/BeechatSync.php37
-rw-r--r--mod/beechat/disablechat.php8
-rw-r--r--mod/beechat/enablechat.php8
-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_down.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_up.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_black.pngbin0 -> 211 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_blue.pngbin0 -> 289 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_delete.pngbin0 -> 308 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_error.pngbin0 -> 454 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_green.pngbin0 -> 295 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_orange.pngbin0 -> 283 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_pink.pngbin0 -> 286 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_purple.pngbin0 -> 294 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_red.pngbin0 -> 287 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_star.pngbin0 -> 331 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_white.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_yellow.pngbin0 -> 287 bytes-rw-r--r--mod/beechat/graphics/icons/chat_icon.pngbin0 -> 456 bytes-rw-r--r--mod/beechat/graphics/icons/cog_edit.pngbin0 -> 865 bytes-rw-r--r--mod/beechat/graphics/icons/comment_edit.pngbin0 -> 644 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_evilgrin.pngbin0 -> 727 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_grin.pngbin0 -> 714 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_happy.pngbin0 -> 731 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_smile.pngbin0 -> 725 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_surprised.pngbin0 -> 741 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_tongue.pngbin0 -> 727 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_unhappy.pngbin0 -> 723 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_waii.pngbin0 -> 737 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_wink.pngbin0 -> 712 bytes-rw-r--r--mod/beechat/graphics/icons/heart.pngbin0 -> 749 bytes-rw-r--r--mod/beechat/graphics/icons/house.pngbin0 -> 806 bytes-rw-r--r--mod/beechat/graphics/icons/muc_icon.pngbin0 -> 592 bytes-rw-r--r--mod/beechat/graphics/icons/notification_pink.pngbin0 -> 3140 bytes-rw-r--r--mod/beechat/graphics/icons/pointer.pngbin0 -> 2833 bytes-rw-r--r--mod/beechat/graphics/icons/resultset_next.pngbin0 -> 395 bytes-rw-r--r--mod/beechat/graphics/icons/resultset_previous.pngbin0 -> 389 bytes-rw-r--r--mod/beechat/graphics/icons/statuses.pngbin0 -> 5857 bytes-rw-r--r--mod/beechat/graphics/icons/vcard.pngbin0 -> 533 bytes-rw-r--r--mod/beechat/languages/en.php45
-rw-r--r--mod/beechat/languages/es.php43
-rw-r--r--mod/beechat/languages/fr.php32
-rw-r--r--mod/beechat/lib/beechat.php250
-rw-r--r--mod/beechat/manifest.xml15
-rw-r--r--mod/beechat/migrate.php88
-rw-r--r--mod/beechat/migrategroups.php18
-rw-r--r--mod/beechat/sounds/newmessage.wavbin0 -> 39440 bytes-rw-r--r--mod/beechat/start.php184
-rw-r--r--mod/beechat/views/default/beechat/beechat.js.php2498
-rw-r--r--mod/beechat/views/default/beechat/beechat.php84
-rw-r--r--mod/beechat/views/default/beechat/beechat.userjs.php54
-rw-r--r--mod/beechat/views/default/beechat/screen.css.php672
-rw-r--r--mod/beechat/views/default/js/b64.js.php74
-rw-r--r--mod/beechat/views/default/js/jquery.cookie.min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php9
-rwxr-xr-xmod/beechat/views/default/js/jquery.scrollTo-min.js.php11
-rwxr-xr-xmod/beechat/views/default/js/jquery.serialScroll-min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.tools.min.js.php49
-rw-r--r--mod/beechat/views/default/js/json2.js.php476
-rw-r--r--mod/beechat/views/default/js/md5.js.php261
-rw-r--r--mod/beechat/views/default/js/sha1.js.php207
-rw-r--r--mod/beechat/views/default/js/strophe.min.js.php1
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js300
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js.php300
-rwxr-xr-xmod/beechat/views/default/settings/beechat/edit.php31
-rw-r--r--mod/blog/actions/blog/save.php33
-rw-r--r--mod/blog/lib/blog.php99
-rw-r--r--mod/blog/start.php36
-rw-r--r--mod/blog/views/default/blog/sidebar/archives.php2
-rw-r--r--mod/blog/views/default/forms/blog/save.php13
-rw-r--r--mod/blog/views/default/river/object/blog/create.php6
-rw-r--r--mod/bookmarks/languages/en.php2
-rw-r--r--mod/bookmarks/pages/bookmarks/all.php3
-rw-r--r--mod/bookmarks/pages/bookmarks/friends.php2
-rw-r--r--mod/bookmarks/pages/bookmarks/owner.php3
-rw-r--r--mod/bookmarks/start.php26
-rw-r--r--mod/categories/pages/categories/listing.php4
m---------mod/colorbox6
-rw-r--r--mod/colorbox/COPYING661
-rw-r--r--mod/colorbox/languages/ca.php29
-rw-r--r--mod/colorbox/languages/en.php29
-rw-r--r--mod/colorbox/languages/es.php29
-rw-r--r--mod/colorbox/manifest.xml29
-rw-r--r--mod/colorbox/start.php36
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/README.md318
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox.ai1811
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js4
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js926
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ajax.html11
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/flash.html8
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/homer.jpgbin0 -> 8917 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/marylou.jpgbin0 -> 55125 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpgbin0 -> 74827 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpgbin0 -> 117411 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpgbin0 -> 71514 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css86
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/border.pngbin0 -> 112 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/controls.pngbin0 -> 2893 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.pngbin0 -> 111 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.pngbin0 -> 215 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.pngbin0 -> 217 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.pngbin0 -> 108 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.pngbin0 -> 108 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.pngbin0 -> 111 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.pngbin0 -> 216 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.pngbin0 -> 214 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.pngbin0 -> 157 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.pngbin0 -> 182 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css43
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/controls.pngbin0 -> 570 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css38
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/controls.pngbin0 -> 1633 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css82
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border1.pngbin0 -> 1057 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border2.pngbin0 -> 170 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.pngbin0 -> 153 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.pngbin0 -> 473 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.pngbin0 -> 470 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.pngbin0 -> 148 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.pngbin0 -> 139 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.pngbin0 -> 153 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.pngbin0 -> 359 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.pngbin0 -> 465 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css52
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/border.pngbin0 -> 163 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/controls.pngbin0 -> 2033 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.pngbin0 -> 166 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/index.html87
-rw-r--r--mod/colorbox/views/default/css/lightbox.php73
-rw-r--r--mod/colorbox/views/default/js/embed/embed.php171
-rw-r--r--mod/colorbox/views/default/js/lightbox.php81
m---------mod/crud0
-rw-r--r--mod/custom_index/index.php2
m---------mod/custom_index_widgets6
-rw-r--r--mod/custom_index_widgets/index.php66
-rw-r--r--mod/custom_index_widgets/languages/de.php78
-rw-r--r--mod/custom_index_widgets/languages/en.php82
-rw-r--r--mod/custom_index_widgets/languages/es.php78
-rw-r--r--mod/custom_index_widgets/languages/fr.php80
-rw-r--r--mod/custom_index_widgets/manifest.xml21
-rw-r--r--mod/custom_index_widgets/start.php159
-rw-r--r--mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php56
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/css.php347
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php3
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php61
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php29
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php28
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php30
-rw-r--r--mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php61
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php59
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php120
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php8
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php5
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php7
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php46
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php95
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php96
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php44
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php103
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php21
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php63
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php50
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php79
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php25
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php17
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php62
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/content.php15
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/edit.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php78
-rw-r--r--mod/developers/languages/en.php4
-rw-r--r--mod/developers/manifest.xml2
-rw-r--r--mod/developers/start.php10
-rw-r--r--mod/developers/views/default/developers/css.php4
-rw-r--r--mod/developers/views/default/forms/developers/settings.php6
-rw-r--r--mod/developers/views/default/page/theme_preview.php10
-rw-r--r--mod/developers/views/default/theme_preview/components.php2
-rw-r--r--mod/developers/views/default/theme_preview/components/image_block.php12
-rw-r--r--mod/developers/views/default/theme_preview/components/list.php38
-rw-r--r--mod/developers/views/default/theme_preview/components/messages.php10
-rw-r--r--mod/developers/views/default/theme_preview/components/table.php22
-rw-r--r--mod/developers/views/default/theme_preview/general.php23
-rw-r--r--mod/developers/views/default/theme_preview/icons/avatars.php72
-rw-r--r--mod/developers/views/default/theme_preview/icons/sprites.php120
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous.php22
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/lightbox.php19
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/popup.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/site_menu.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/system_messages.php35
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/toggle.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php16
-rw-r--r--mod/developers/views/default/theme_preview/modules.php2
-rw-r--r--mod/developers/views/default/theme_preview/modules/modules.php44
-rw-r--r--mod/developers/views/default/theme_preview/navigation/breadcrumbs.php20
-rw-r--r--mod/developers/views/default/theme_preview/navigation/default.php22
-rw-r--r--mod/developers/views/default/theme_preview/navigation/extras.php34
-rw-r--r--mod/developers/views/default/theme_preview/navigation/filter.php26
-rw-r--r--mod/developers/views/default/theme_preview/navigation/horizontal.php24
-rw-r--r--mod/developers/views/default/theme_preview/navigation/owner_block.php26
-rw-r--r--mod/developers/views/default/theme_preview/navigation/page.php38
-rw-r--r--mod/developers/views/default/theme_preview/navigation/pagination.php14
-rw-r--r--mod/developers/views/default/theme_preview/navigation/site.php36
-rw-r--r--mod/developers/views/default/theme_preview/navigation/tabs.php18
-rw-r--r--mod/developers/views/default/theme_preview/typography/headings.php10
-rw-r--r--mod/developers/views/default/theme_preview/typography/misc.php32
-rw-r--r--mod/developers/views/default/theme_preview/typography/paragraph.php36
m---------mod/dokuwiki6
-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
m---------mod/elgg-activitystreams0
m---------mod/elgg-ostatus0
m---------mod/elgg-push0
m---------mod/elgg-salmon0
m---------mod/elgg-webfinger0
m---------mod/elgg-xrds0
m---------mod/elggman0
m---------mod/elggpg0
m---------mod/email_revalidate0
-rw-r--r--mod/embed/start.php26
-rw-r--r--mod/embed/views/default/js/embed/embed.php13
m---------mod/etherpad0
m---------mod/event_calendar6
-rw-r--r--mod/event_calendar/CHANGES.txt154
-rw-r--r--mod/event_calendar/CONTRIBUTIONS.txt7
-rw-r--r--mod/event_calendar/README.txt89
-rw-r--r--mod/event_calendar/actions/event_calendar/add_personal.php17
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group.php10
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/addtocalendar.php33
-rw-r--r--mod/event_calendar/actions/event_calendar/delete.php21
-rw-r--r--mod/event_calendar/actions/event_calendar/edit.php55
-rw-r--r--mod/event_calendar/actions/event_calendar/join_conference.php20
-rw-r--r--mod/event_calendar/actions/event_calendar/killrequest.php23
-rw-r--r--mod/event_calendar/actions/event_calendar/manage_subscribers.php26
-rw-r--r--mod/event_calendar/actions/event_calendar/modify_full_calendar.php24
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group.php8
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_personal.php12
-rw-r--r--mod/event_calendar/actions/event_calendar/request_personal_calendar.php16
-rw-r--r--mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php40
-rw-r--r--mod/event_calendar/activate.php4
-rw-r--r--mod/event_calendar/images/calendar.gifbin0 -> 269 bytes-rw-r--r--mod/event_calendar/images/event_icon.gifbin0 -> 1254 bytes-rw-r--r--mod/event_calendar/images/event_icon_old.gifbin0 -> 1531 bytes-rw-r--r--mod/event_calendar/images/ics.pngbin0 -> 344 bytes-rw-r--r--mod/event_calendar/images/river_icon_event.gifbin0 -> 586 bytes-rw-r--r--mod/event_calendar/languages/ca.php143
-rw-r--r--mod/event_calendar/languages/en.php360
-rw-r--r--mod/event_calendar/languages/es.php215
-rw-r--r--mod/event_calendar/languages/fr.php124
-rw-r--r--mod/event_calendar/languages/ru.php365
-rw-r--r--mod/event_calendar/manifest.xml16
-rw-r--r--mod/event_calendar/models/model.php2518
-rw-r--r--mod/event_calendar/start.php414
-rw-r--r--mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php39
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_footer.php5
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_header.php12
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_item_view.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_view.php34
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar.php70
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar_toggle.php18
-rw-r--r--mod/event_calendar/views/default/event_calendar/conference_button.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/container.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/css.php264
-rw-r--r--mod/event_calendar/views/default/event_calendar/datetime_edit.php46
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/entity_list.php66
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery_item.php63
-rw-r--r--mod/event_calendar/views/default/event_calendar/filter_menu.php78
-rw-r--r--mod/event_calendar/views/default/event_calendar/forms/add_to_group.php74
-rw-r--r--mod/event_calendar/views/default/event_calendar/full_calendar_view.php200
-rw-r--r--mod/event_calendar/views/default/event_calendar/group_module.php37
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/input/date_local.php55
-rw-r--r--mod/event_calendar/views/default/event_calendar/metatags.php2
-rw-r--r--mod/event_calendar/views/default/event_calendar/nav.php38
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_footer.php4
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_header.php15
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_item_view.php27
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_view.php36
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_manage_section.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_toggle_js.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/region_select.php21
-rw-r--r--mod/event_calendar/views/default/event_calendar/reminder_section.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/repeat_form_element.php32
-rw-r--r--mod/event_calendar/views/default/event_calendar/review_requests.php30
-rw-r--r--mod/event_calendar/views/default/event_calendar/schedule_section.php22
-rw-r--r--mod/event_calendar/views/default/event_calendar/share_section.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/show_events.php64
-rw-r--r--mod/event_calendar/views/default/event_calendar/strapline.php18
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/edit.php233
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php14
-rw-r--r--mod/event_calendar/views/default/fullcalendar/css.php618
-rw-r--r--mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css61
-rw-r--r--mod/event_calendar/views/default/icon/object/event_calendar/small.php3
-rw-r--r--mod/event_calendar/views/default/input/datepicker_inline.php83
-rw-r--r--mod/event_calendar/views/default/input/timepicker.php51
-rw-r--r--mod/event_calendar/views/default/input/timepicker_old.php38
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/event_calendar.php171
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js114
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.php5227
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/gcal.js112
-rw-r--r--mod/event_calendar/views/default/object/event_calendar.php115
-rw-r--r--mod/event_calendar/views/default/plugins/event_calendar/settings.php474
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/create.php13
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/update.php13
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/content.php43
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/edit.php35
-rw-r--r--mod/event_calendar/views/ical/event_calendar/show_events.php7
-rw-r--r--mod/event_calendar/views/ical/object/event_calendar.php44
-rw-r--r--mod/event_calendar/views/ical/page/default.php17
-rw-r--r--mod/event_calendar/views/ical/page/layouts/default.php2
-rw-r--r--mod/event_calendar/views/rss/event_calendar/show_events.php24
-rw-r--r--mod/event_calendar/views/rss/object/event_calendar.php61
-rw-r--r--mod/externalpages/start.php8
m---------mod/favorites0
m---------mod/federated-objects0
-rw-r--r--mod/file/actions/file/upload.php23
-rw-r--r--mod/file/pages/file/friends.php2
-rw-r--r--mod/file/pages/file/owner.php7
-rw-r--r--mod/file/pages/file/search.php4
-rw-r--r--mod/file/pages/file/world.php7
-rw-r--r--mod/file/start.php5
-rw-r--r--mod/file/thumbnail.php2
-rw-r--r--mod/file/views/default/object/file.php2
m---------mod/friendly_time0
m---------mod/friendrequest6
-rw-r--r--mod/friendrequest/actions/friendrequest/decline.php12
-rw-r--r--mod/friendrequest/actions/friends/add.php53
-rw-r--r--mod/friendrequest/actions/friends/remove.php36
-rw-r--r--mod/friendrequest/languages/ca.php20
-rw-r--r--mod/friendrequest/languages/en.php31
-rw-r--r--mod/friendrequest/languages/es.php22
-rw-r--r--mod/friendrequest/languages/gl.php31
-rw-r--r--mod/friendrequest/languages/pt.php31
-rw-r--r--mod/friendrequest/languages/sr.php31
-rw-r--r--mod/friendrequest/manifest.xml16
-rw-r--r--mod/friendrequest/start.php151
-rw-r--r--mod/friendrequest/views/default/friendrequest/requests.php47
m---------mod/gifts0
m---------mod/group_alias0
m---------mod/group_operators0
-rw-r--r--mod/groups/actions/groups/edit.php171
-rw-r--r--mod/groups/actions/groups/membership/invite.php73
-rw-r--r--mod/groups/icon.php6
-rw-r--r--mod/groups/languages/en.php11
-rw-r--r--mod/groups/lib/discussion.php5
-rw-r--r--mod/groups/lib/groups.php63
-rw-r--r--mod/groups/start.php37
-rw-r--r--mod/groups/views/default/forms/groups/edit.php49
-rw-r--r--mod/groups/views/default/groups/css.php22
-rw-r--r--mod/groups/views/default/groups/js.php7
-rw-r--r--mod/groups/views/default/groups/profile/summary.php15
-rw-r--r--mod/groups/views/default/groups/sidebar/featured.php2
-rw-r--r--mod/groups/views/default/groups/sidebar/members.php2
-rw-r--r--mod/groups/views/default/groups/sidebar/my_status.php62
-rw-r--r--mod/groups/views/default/object/groupforumtopic.php5
-rw-r--r--mod/groups/views/rss/groups/profile/layout.php13
-rw-r--r--mod/groups/views/rss/object/groupforumtopic.php2
m---------mod/habitorio_theme6
-rw-r--r--mod/habitorio_theme/graphics/button.pngbin0 -> 1092 bytes-rw-r--r--mod/habitorio_theme/graphics/elgg_sprites.pngbin0 -> 19372 bytes-rw-r--r--mod/habitorio_theme/graphics/login.pngbin0 -> 537 bytes-rw-r--r--mod/habitorio_theme/graphics/logo.pngbin0 -> 3067 bytes-rw-r--r--mod/habitorio_theme/graphics/menu.gifbin0 -> 3008 bytes-rw-r--r--mod/habitorio_theme/graphics/menu.pngbin0 -> 2682 bytes-rw-r--r--mod/habitorio_theme/graphics/people.pngbin0 -> 143134 bytes-rw-r--r--mod/habitorio_theme/graphics/preset1.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset2.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset3.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset4.pngbin0 -> 125 bytes-rw-r--r--mod/habitorio_theme/graphics/preset5.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset6.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset7.pngbin0 -> 125 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_01.pngbin0 -> 5204 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_02.pngbin0 -> 550 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_03.pngbin0 -> 2480 bytes-rw-r--r--mod/habitorio_theme/graphics/search.gifbin0 -> 819 bytes-rw-r--r--mod/habitorio_theme/graphics/search.pngbin0 -> 1589 bytes-rw-r--r--mod/habitorio_theme/graphics/sidebar_background.gifbin0 -> 1355 bytes-rw-r--r--mod/habitorio_theme/graphics/spacer.gifbin0 -> 175 bytes-rw-r--r--mod/habitorio_theme/graphics/topbar.gifbin0 -> 2756 bytes-rw-r--r--mod/habitorio_theme/manifest.xml18
-rw-r--r--mod/habitorio_theme/start.php84
-rw-r--r--mod/habitorio_theme/views/default/css/admin.php1443
-rw-r--r--mod/habitorio_theme/views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--mod/habitorio_theme/views/default/css/elements/buttons.php132
-rw-r--r--mod/habitorio_theme/views/default/css/elements/components.php286
-rw-r--r--mod/habitorio_theme/views/default/css/elements/core.php117
-rw-r--r--mod/habitorio_theme/views/default/css/elements/forms.php298
-rw-r--r--mod/habitorio_theme/views/default/css/elements/grid.php54
-rw-r--r--mod/habitorio_theme/views/default/css/elements/helpers.php160
-rw-r--r--mod/habitorio_theme/views/default/css/elements/icons.php348
-rw-r--r--mod/habitorio_theme/views/default/css/elements/layout.php142
-rw-r--r--mod/habitorio_theme/views/default/css/elements/misc.php62
-rw-r--r--mod/habitorio_theme/views/default/css/elements/modules.php194
-rw-r--r--mod/habitorio_theme/views/default/css/elements/navigation.php559
-rw-r--r--mod/habitorio_theme/views/default/css/elements/reset.php79
-rw-r--r--mod/habitorio_theme/views/default/css/elements/typography.php155
-rw-r--r--mod/habitorio_theme/views/default/css/elgg.php68
-rw-r--r--mod/habitorio_theme/views/default/css/ie.php8
-rw-r--r--mod/habitorio_theme/views/default/css/ie6.php12
-rw-r--r--mod/habitorio_theme/views/default/css/ie7.php65
-rw-r--r--mod/habitorio_theme/views/default/css/lightbox.php371
-rw-r--r--mod/habitorio_theme/views/default/css/walled_garden.php81
-rw-r--r--mod/habitorio_theme/views/default/custom_index/css.php17
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/css.php178
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/leftside.php5
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/rightside.php5
-rw-r--r--mod/habitorio_theme/views/default/page/default.php58
-rw-r--r--mod/habitorio_theme/views/default/page/elements/footer.php12
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header.php22
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header_logo.php21
-rw-r--r--mod/habitorio_theme/views/default/page/elements/messages.php27
-rw-r--r--mod/habitorio_theme/views/default/page/elements/topbar.php25
-rw-r--r--mod/habitorio_theme/views/default/page/layouts/custom_index.php48
-rw-r--r--mod/habitorio_theme/views/default/plugins/purity_theme/settings.php24
-rw-r--r--mod/html5/.gitignore3
-rw-r--r--mod/html5/README7
-rw-r--r--mod/html5/manifest.xml15
-rw-r--r--mod/html5/start.php11
-rw-r--r--mod/html5/vendors/Modernizr-1.5.min.js28
-rw-r--r--mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js58
-rw-r--r--mod/html5/views/default/html/img.php11
-rw-r--r--mod/html5/views/default/html5/css.php2
-rw-r--r--mod/html5/views/default/html5/theme_preview/forms/inputs.php101
-rw-r--r--mod/html5/views/default/input/color.php12
-rw-r--r--mod/html5/views/default/input/datetime-local.php14
-rw-r--r--mod/html5/views/default/input/datetime.php15
-rw-r--r--mod/html5/views/default/input/image.php11
-rw-r--r--mod/html5/views/default/input/month.php16
-rw-r--r--mod/html5/views/default/input/number.php11
-rw-r--r--mod/html5/views/default/input/option.php13
-rw-r--r--mod/html5/views/default/input/range.php13
-rw-r--r--mod/html5/views/default/input/search.php13
-rw-r--r--mod/html5/views/default/input/tel.php12
-rw-r--r--mod/html5/views/default/input/time.php13
-rw-r--r--mod/html5/views/default/input/week.php13
-rw-r--r--mod/html5/views/default/output/friendlytime.php14
-rw-r--r--mod/html5/views/default/page/admin.php68
-rw-r--r--mod/html5/views/default/page/default.php78
-rw-r--r--mod/html5/views/default/page/elements/footer.php23
-rw-r--r--mod/html5/views/default/page/elements/head.php78
-rw-r--r--mod/html5/views/default/page/layouts/admin.php42
-rw-r--r--mod/html5/views/default/page/layouts/one_sidebar.php50
-rw-r--r--mod/html5/views/default/page/layouts/two_sidebar.php45
-rw-r--r--mod/html5/views/default/page/walled_garden.php42
-rw-r--r--mod/html5/views/default/search/search_box.php43
-rw-r--r--mod/htmlawed/start.php4
-rw-r--r--mod/htmlawed/tests/tags.php78
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed.php82
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawedTest.php89
-rwxr-xr-x[-rw-r--r--]mod/htmlawed/vendors/htmLawed/htmLawed_README.htm4336
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.txt3433
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt66
m---------mod/identica6
-rw-r--r--mod/identica/graphics/identica.pngbin0 -> 488 bytes-rw-r--r--mod/identica/graphics/thewire_speech_bubble.gif (renamed from mod/twitter/graphics/thewire_speech_bubble.gif)bin560 -> 560 bytes-rw-r--r--mod/identica/languages/ca.php10
-rw-r--r--mod/identica/languages/en.php16
-rw-r--r--mod/identica/languages/es.php12
-rw-r--r--mod/identica/manifest.xml17
-rw-r--r--mod/identica/start.php16
-rw-r--r--mod/identica/views/default/identica/css.php (renamed from mod/twitter/views/default/twitter/css.php)26
-rw-r--r--mod/identica/views/default/identica/js.php40
-rw-r--r--mod/identica/views/default/js/friendly_time.php50
-rw-r--r--mod/identica/views/default/widgets/identica/content.php30
-rw-r--r--mod/identica/views/default/widgets/identica/edit.php16
m---------mod/languages6
-rw-r--r--mod/languages/README.txt9
-rw-r--r--mod/languages/languages/ca/ca.blog.php54
-rw-r--r--mod/languages/languages/ca/ca.bookmarks.php51
-rw-r--r--mod/languages/languages/ca/ca.categories.php12
-rw-r--r--mod/languages/languages/ca/ca.core.php994
-rw-r--r--mod/languages/languages/ca/ca.custom_index.php11
-rw-r--r--mod/languages/languages/ca/ca.dashboard.php11
-rw-r--r--mod/languages/languages/ca/ca.developers.php47
-rw-r--r--mod/languages/languages/ca/ca.diagnostics.php30
-rw-r--r--mod/languages/languages/ca/ca.embed.php14
-rw-r--r--mod/languages/languages/ca/ca.externalpages.php15
-rw-r--r--mod/languages/languages/ca/ca.file.php74
-rw-r--r--mod/languages/languages/ca/ca.garbagecollector.php17
-rw-r--r--mod/languages/languages/ca/ca.groups.php219
-rw-r--r--mod/languages/languages/ca/ca.invitefriends.php26
-rw-r--r--mod/languages/languages/ca/ca.likes.php34
-rw-r--r--mod/languages/languages/ca/ca.logbrowser20
-rw-r--r--mod/languages/languages/ca/ca.logrotate.php20
-rw-r--r--mod/languages/languages/ca/ca.members.php13
-rw-r--r--mod/languages/languages/ca/ca.messageboard.php43
-rw-r--r--mod/languages/languages/ca/ca.messages.php64
-rw-r--r--mod/languages/languages/ca/ca.notifications.php16
-rw-r--r--mod/languages/languages/ca/ca.pages.php62
-rw-r--r--mod/languages/languages/ca/ca.profile.php8
-rw-r--r--mod/languages/languages/ca/ca.relatedgroups.php11
-rw-r--r--mod/languages/languages/ca/ca.reportedcontent.php34
-rw-r--r--mod/languages/languages/ca/ca.search.php18
-rw-r--r--mod/languages/languages/ca/ca.subgroups.php22
-rw-r--r--mod/languages/languages/ca/ca.tagcloud.php7
-rw-r--r--mod/languages/languages/ca/ca.thewire.php34
-rw-r--r--mod/languages/languages/ca/ca.tinymce.php8
-rw-r--r--mod/languages/languages/ca/ca.twitter.php10
-rw-r--r--mod/languages/languages/ca/ca.uservalidationbyemail.php48
-rw-r--r--mod/languages/languages/da/da.blog.php70
-rw-r--r--mod/languages/languages/da/da.bookmarks.php82
-rw-r--r--mod/languages/languages/da/da.categories.php15
-rw-r--r--mod/languages/languages/da/da.custom_index.php14
-rw-r--r--mod/languages/languages/da/da.developers.php60
-rw-r--r--mod/languages/languages/da/da.diagnostics.php70
-rw-r--r--mod/languages/languages/da/da.embed.php21
-rw-r--r--mod/languages/languages/da/da.event_manager.php302
-rw-r--r--mod/languages/languages/da/da.externalpages.php30
-rw-r--r--mod/languages/languages/da/da.file.php106
-rw-r--r--mod/languages/languages/da/da.garbagecollector.php26
-rw-r--r--mod/languages/languages/da/da.groups.php265
-rw-r--r--mod/languages/languages/da/da.image_captcha.php31
-rw-r--r--mod/languages/languages/da/da.invitefriends.php42
-rw-r--r--mod/languages/languages/da/da.likes.php25
-rw-r--r--mod/languages/languages/da/da.logbrowser.php27
-rw-r--r--mod/languages/languages/da/da.logrotate.php29
-rw-r--r--mod/languages/languages/da/da.market.php148
-rw-r--r--mod/languages/languages/da/da.members.php16
-rw-r--r--mod/languages/languages/da/da.menu_builder.php49
-rw-r--r--mod/languages/languages/da/da.messageboard.php73
-rw-r--r--mod/languages/languages/da/da.messages.php95
-rw-r--r--mod/languages/languages/da/da.notifications.php31
-rw-r--r--mod/languages/languages/da/da.pages.php104
-rw-r--r--mod/languages/languages/da/da.php1343
-rw-r--r--mod/languages/languages/da/da.profile.php13
-rw-r--r--mod/languages/languages/da/da.reportedcontent.php44
-rw-r--r--mod/languages/languages/da/da.river_activity_3C.php142
-rw-r--r--mod/languages/languages/da/da.roles_group_admins.php20
-rw-r--r--mod/languages/languages/da/da.search.php25
-rw-r--r--mod/languages/languages/da/da.tagcloud.php12
-rw-r--r--mod/languages/languages/da/da.tasks.php144
-rw-r--r--mod/languages/languages/da/da.thewire.php60
-rw-r--r--mod/languages/languages/da/da.tidypics.php190
-rw-r--r--mod/languages/languages/da/da.tinymce.php13
-rw-r--r--mod/languages/languages/da/da.twitter.php17
-rw-r--r--mod/languages/languages/da/da.twitter_api.php35
-rw-r--r--mod/languages/languages/da/da.uservalidationbyemail.php63
-rw-r--r--mod/languages/languages/de/de.blog.php50
-rw-r--r--mod/languages/languages/de/de.bookmarks.php46
-rw-r--r--mod/languages/languages/de/de.categories.php12
-rw-r--r--mod/languages/languages/de/de.core.php969
-rw-r--r--mod/languages/languages/de/de.custom_index.php11
-rw-r--r--mod/languages/languages/de/de.dashboard.php11
-rw-r--r--mod/languages/languages/de/de.developers.php43
-rw-r--r--mod/languages/languages/de/de.diagnostics.php39
-rw-r--r--mod/languages/languages/de/de.embed.php14
-rw-r--r--mod/languages/languages/de/de.externalpages.php15
-rw-r--r--mod/languages/languages/de/de.file.php69
-rw-r--r--mod/languages/languages/de/de.garbagecollector.php18
-rw-r--r--mod/languages/languages/de/de.groups.php204
-rw-r--r--mod/languages/languages/de/de.install.php156
-rw-r--r--mod/languages/languages/de/de.invitefriends.php30
-rw-r--r--mod/languages/languages/de/de.likes.php36
-rw-r--r--mod/languages/languages/de/de.logbrowser.php20
-rw-r--r--mod/languages/languages/de/de.logrotate.php22
-rw-r--r--mod/languages/languages/de/de.members.php13
-rw-r--r--mod/languages/languages/de/de.messageboard.php43
-rw-r--r--mod/languages/languages/de/de.messages.php60
-rw-r--r--mod/languages/languages/de/de.notifications.php18
-rw-r--r--mod/languages/languages/de/de.pages.php54
-rw-r--r--mod/languages/languages/de/de.profile.php8
-rw-r--r--mod/languages/languages/de/de.reportedcontent.php44
-rw-r--r--mod/languages/languages/de/de.search.php18
-rw-r--r--mod/languages/languages/de/de.tagcloud.php9
-rw-r--r--mod/languages/languages/de/de.thewire.php36
-rw-r--r--mod/languages/languages/de/de.tinymce.php9
-rw-r--r--mod/languages/languages/de/de.twitter.php12
-rw-r--r--mod/languages/languages/de/de.twitter_api.php60
-rw-r--r--mod/languages/languages/de/de.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/en/en.core.php39
-rw-r--r--mod/languages/languages/es/es.blog.php57
-rw-r--r--mod/languages/languages/es/es.bookmarks.php55
-rw-r--r--mod/languages/languages/es/es.categories.php12
-rw-r--r--mod/languages/languages/es/es.core.php1001
-rw-r--r--mod/languages/languages/es/es.custom_index.php11
-rw-r--r--mod/languages/languages/es/es.custom_keys.php5
-rw-r--r--mod/languages/languages/es/es.dashboard.php11
-rw-r--r--mod/languages/languages/es/es.developers.php49
-rw-r--r--mod/languages/languages/es/es.diagnostics.php40
-rw-r--r--mod/languages/languages/es/es.embed.php14
-rw-r--r--mod/languages/languages/es/es.externalpages.php15
-rw-r--r--mod/languages/languages/es/es.file.php76
-rw-r--r--mod/languages/languages/es/es.garbagecollector.php18
-rw-r--r--mod/languages/languages/es/es.groups.php213
-rw-r--r--mod/languages/languages/es/es.install.php156
-rw-r--r--mod/languages/languages/es/es.invitefriends.php29
-rw-r--r--mod/languages/languages/es/es.likes.php36
-rw-r--r--mod/languages/languages/es/es.logbrowser.php21
-rw-r--r--mod/languages/languages/es/es.logrotate.php22
-rw-r--r--mod/languages/languages/es/es.members.php13
-rw-r--r--mod/languages/languages/es/es.messageboard.php43
-rw-r--r--mod/languages/languages/es/es.messages.php66
-rw-r--r--mod/languages/languages/es/es.notifications.php18
-rw-r--r--mod/languages/languages/es/es.pages.php62
-rw-r--r--mod/languages/languages/es/es.profile.php8
-rw-r--r--mod/languages/languages/es/es.reportedcontent.php36
-rw-r--r--mod/languages/languages/es/es.search.php18
-rw-r--r--mod/languages/languages/es/es.tagcloud.php9
-rw-r--r--mod/languages/languages/es/es.thewire.php36
-rw-r--r--mod/languages/languages/es/es.tinymce.php9
-rw-r--r--mod/languages/languages/es/es.twitter.php12
-rw-r--r--mod/languages/languages/es/es.twitter_api.php58
-rw-r--r--mod/languages/languages/es/es.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/eu/eu.blog.php57
-rw-r--r--mod/languages/languages/eu/eu.bookmarks.php53
-rw-r--r--mod/languages/languages/eu/eu.categories.php11
-rw-r--r--mod/languages/languages/eu/eu.core.php996
-rw-r--r--mod/languages/languages/eu/eu.custom_index.php10
-rw-r--r--mod/languages/languages/eu/eu.dashboard.php10
-rw-r--r--mod/languages/languages/eu/eu.developers.php48
-rw-r--r--mod/languages/languages/eu/eu.diagnostics.php39
-rw-r--r--mod/languages/languages/eu/eu.embed.php13
-rw-r--r--mod/languages/languages/eu/eu.externalpages.php14
-rw-r--r--mod/languages/languages/eu/eu.file.php76
-rw-r--r--mod/languages/languages/eu/eu.garbagecollector.php17
-rw-r--r--mod/languages/languages/eu/eu.groups.php213
-rw-r--r--mod/languages/languages/eu/eu.install.php134
-rw-r--r--mod/languages/languages/eu/eu.invitefriends.php29
-rw-r--r--mod/languages/languages/eu/eu.likes.php35
-rw-r--r--mod/languages/languages/eu/eu.logbrowser.php21
-rw-r--r--mod/languages/languages/eu/eu.logrotate.php21
-rw-r--r--mod/languages/languages/eu/eu.members.php12
-rw-r--r--mod/languages/languages/eu/eu.messageboard.php42
-rw-r--r--mod/languages/languages/eu/eu.messages.php65
-rw-r--r--mod/languages/languages/eu/eu.notifications.php17
-rw-r--r--mod/languages/languages/eu/eu.pages.php62
-rw-r--r--mod/languages/languages/eu/eu.profile.php7
-rw-r--r--mod/languages/languages/eu/eu.reportedcontent.php35
-rw-r--r--mod/languages/languages/eu/eu.search.php17
-rw-r--r--mod/languages/languages/eu/eu.tagcloud.php8
-rw-r--r--mod/languages/languages/eu/eu.thewire.php35
-rw-r--r--mod/languages/languages/eu/eu.tinymce.php8
-rw-r--r--mod/languages/languages/eu/eu.twitter.php11
-rw-r--r--mod/languages/languages/eu/eu.twitter_api.php40
-rw-r--r--mod/languages/languages/eu/eu.uservalidationbyemail.php50
-rw-r--r--mod/languages/languages/fr/fr.blog.php69
-rw-r--r--mod/languages/languages/fr/fr.bookmarks.php82
-rw-r--r--mod/languages/languages/fr/fr.categories.php15
-rw-r--r--mod/languages/languages/fr/fr.custom_index.php14
-rw-r--r--mod/languages/languages/fr/fr.dashboard.php14
-rw-r--r--mod/languages/languages/fr/fr.developers.php61
-rw-r--r--mod/languages/languages/fr/fr.diagnostics.php70
-rw-r--r--mod/languages/languages/fr/fr.embed.php21
-rw-r--r--mod/languages/languages/fr/fr.externalpages.php27
-rw-r--r--mod/languages/languages/fr/fr.file.php110
-rw-r--r--mod/languages/languages/fr/fr.garbagecollector.php25
-rw-r--r--mod/languages/languages/fr/fr.groups.php265
-rw-r--r--mod/languages/languages/fr/fr.install.php156
-rw-r--r--mod/languages/languages/fr/fr.invitefriends.php43
-rw-r--r--mod/languages/languages/fr/fr.likes.php44
-rw-r--r--mod/languages/languages/fr/fr.logbrowser.php27
-rw-r--r--mod/languages/languages/fr/fr.logrotate.php28
-rw-r--r--mod/languages/languages/fr/fr.members.php16
-rw-r--r--mod/languages/languages/fr/fr.messageboard.php72
-rw-r--r--mod/languages/languages/fr/fr.messages.php96
-rw-r--r--mod/languages/languages/fr/fr.notifications.php26
-rw-r--r--mod/languages/languages/fr/fr.pages.php104
-rw-r--r--mod/languages/languages/fr/fr.php1310
-rw-r--r--mod/languages/languages/fr/fr.profile.php12
-rw-r--r--mod/languages/languages/fr/fr.reportedcontent.php44
-rw-r--r--mod/languages/languages/fr/fr.search.php21
-rw-r--r--mod/languages/languages/fr/fr.tagcloud.php12
-rw-r--r--mod/languages/languages/fr/fr.thewire.php61
-rw-r--r--mod/languages/languages/fr/fr.tinymce.php14
-rw-r--r--mod/languages/languages/fr/fr.twitter.php7
-rw-r--r--mod/languages/languages/fr/fr.twitter_api.php59
-rw-r--r--mod/languages/languages/fr/fr.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/gl/gl.blog.php16
-rw-r--r--mod/languages/languages/gl/gl.bookmarks.php40
-rw-r--r--mod/languages/languages/gl/gl.core.php664
-rw-r--r--mod/languages/languages/gl/gl.custom_index.php11
-rw-r--r--mod/languages/languages/gl/gl.embed.php8
-rw-r--r--mod/languages/languages/gl/gl.externalpages.php14
-rw-r--r--mod/languages/languages/gl/gl.file.php61
-rw-r--r--mod/languages/languages/gl/gl.groups.php143
-rw-r--r--mod/languages/languages/gl/gl.messageboard.php36
-rw-r--r--mod/languages/languages/gl/gl.messages.php52
-rw-r--r--mod/languages/languages/gl/gl.pages.php42
-rw-r--r--mod/languages/languages/gl/gl.profile.php8
-rw-r--r--mod/languages/languages/gl/gl.reportedcontent.php7
-rw-r--r--mod/languages/languages/gl/gl.uservalidationbyemail.php8
-rw-r--r--mod/languages/languages/it/it.blog.php12
-rw-r--r--mod/languages/languages/it/it.bookmarks.php31
-rw-r--r--mod/languages/languages/it/it.categories.php10
-rw-r--r--mod/languages/languages/it/it.core.php707
-rw-r--r--mod/languages/languages/it/it.custom_index.php11
-rw-r--r--mod/languages/languages/it/it.file.php53
-rw-r--r--mod/languages/languages/it/it.groups.php141
-rw-r--r--mod/languages/languages/it/it.messageboard.php39
-rw-r--r--mod/languages/languages/it/it.messages.php56
-rw-r--r--mod/languages/languages/it/it.pages.php41
-rw-r--r--mod/languages/languages/it/it.profile.php8
-rw-r--r--mod/languages/languages/it/it.reportedcontent.php7
-rw-r--r--mod/languages/languages/ja/ja.blog.php12
-rw-r--r--mod/languages/languages/ja/ja.bookmarks.php37
-rw-r--r--mod/languages/languages/ja/ja.categories.php11
-rw-r--r--mod/languages/languages/ja/ja.core.php661
-rw-r--r--mod/languages/languages/ja/ja.custom_index.php11
-rw-r--r--mod/languages/languages/ja/ja.embed.php8
-rw-r--r--mod/languages/languages/ja/ja.externalpages.php14
-rw-r--r--mod/languages/languages/ja/ja.file.php61
-rw-r--r--mod/languages/languages/ja/ja.groups.php155
-rw-r--r--mod/languages/languages/ja/ja.messageboard.php41
-rw-r--r--mod/languages/languages/ja/ja.messages.php55
-rw-r--r--mod/languages/languages/ja/ja.pages.php43
-rw-r--r--mod/languages/languages/ja/ja.reportedcontent.php30
-rw-r--r--mod/languages/languages/nl/nl.blog.php50
-rw-r--r--mod/languages/languages/nl/nl.bookmarks.php46
-rw-r--r--mod/languages/languages/nl/nl.categories.php12
-rw-r--r--mod/languages/languages/nl/nl.core.php947
-rw-r--r--mod/languages/languages/nl/nl.custom_index.php11
-rw-r--r--mod/languages/languages/nl/nl.dashboard.php11
-rw-r--r--mod/languages/languages/nl/nl.developers.php43
-rw-r--r--mod/languages/languages/nl/nl.diagnostics.php32
-rw-r--r--mod/languages/languages/nl/nl.embed.php14
-rw-r--r--mod/languages/languages/nl/nl.externalpages.php15
-rw-r--r--mod/languages/languages/nl/nl.file.php69
-rw-r--r--mod/languages/languages/nl/nl.garbagecollector.php18
-rw-r--r--mod/languages/languages/nl/nl.groups.php205
-rw-r--r--mod/languages/languages/nl/nl.invitefriends.php28
-rw-r--r--mod/languages/languages/nl/nl.likes.php31
-rw-r--r--mod/languages/languages/nl/nl.logbrowser.php20
-rw-r--r--mod/languages/languages/nl/nl.logrotate.php18
-rw-r--r--mod/languages/languages/nl/nl.members.php13
-rw-r--r--mod/languages/languages/nl/nl.messageboard.php41
-rw-r--r--mod/languages/languages/nl/nl.messages.php63
-rw-r--r--mod/languages/languages/nl/nl.notifications.php18
-rw-r--r--mod/languages/languages/nl/nl.pages.php54
-rw-r--r--mod/languages/languages/nl/nl.profile.php8
-rw-r--r--mod/languages/languages/nl/nl.reportedcontent.php36
-rw-r--r--mod/languages/languages/nl/nl.search.php18
-rw-r--r--mod/languages/languages/nl/nl.tagcloud.php9
-rw-r--r--mod/languages/languages/nl/nl.thewire.php36
-rw-r--r--mod/languages/languages/nl/nl.tinymce.php9
-rw-r--r--mod/languages/languages/nl/nl.twitter.php12
-rw-r--r--mod/languages/languages/nl/nl.twitter_api.php41
-rw-r--r--mod/languages/languages/nl/nl.uservalidationbyemail.php49
-rw-r--r--mod/languages/languages/pt/pt.blog.php50
-rw-r--r--mod/languages/languages/pt/pt.bookmarks.php46
-rw-r--r--mod/languages/languages/pt/pt.brainstorm.php63
-rw-r--r--mod/languages/languages/pt/pt.categories.php12
-rw-r--r--mod/languages/languages/pt/pt.core.php966
-rw-r--r--mod/languages/languages/pt/pt.custom_index.php11
-rw-r--r--mod/languages/languages/pt/pt.dashboard.php11
-rw-r--r--mod/languages/languages/pt/pt.developers.php43
-rw-r--r--mod/languages/languages/pt/pt.diagnostics.php34
-rw-r--r--mod/languages/languages/pt/pt.embed.php14
-rw-r--r--mod/languages/languages/pt/pt.externalpages.php15
-rw-r--r--mod/languages/languages/pt/pt.file.php69
-rw-r--r--mod/languages/languages/pt/pt.garbagecollector.php17
-rw-r--r--mod/languages/languages/pt/pt.groups.php204
-rw-r--r--mod/languages/languages/pt/pt.install.php132
-rw-r--r--mod/languages/languages/pt/pt.invitefriends.php36
-rw-r--r--mod/languages/languages/pt/pt.likes.php35
-rw-r--r--mod/languages/languages/pt/pt.logbrowser.php20
-rw-r--r--mod/languages/languages/pt/pt.logrotate.php20
-rw-r--r--mod/languages/languages/pt/pt.members.php13
-rw-r--r--mod/languages/languages/pt/pt.messageboard.php43
-rw-r--r--mod/languages/languages/pt/pt.messages.php66
-rw-r--r--mod/languages/languages/pt/pt.moderated_comments.php48
-rw-r--r--mod/languages/languages/pt/pt.notifications.php20
-rw-r--r--mod/languages/languages/pt/pt.pages.php55
-rw-r--r--mod/languages/languages/pt/pt.profile.php8
-rw-r--r--mod/languages/languages/pt/pt.reportedcontent.php36
-rw-r--r--mod/languages/languages/pt/pt.search.php18
-rw-r--r--mod/languages/languages/pt/pt.spam_login_filter.php80
-rw-r--r--mod/languages/languages/pt/pt.speak_freely.php55
-rw-r--r--mod/languages/languages/pt/pt.tagcloud.php9
-rw-r--r--mod/languages/languages/pt/pt.thewire.php37
-rw-r--r--mod/languages/languages/pt/pt.tinymce.php9
-rw-r--r--mod/languages/languages/pt/pt.twitter.php12
-rw-r--r--mod/languages/languages/pt/pt.twitter_api.php43
-rw-r--r--mod/languages/languages/pt/pt.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/sr/sr.blog.php12
-rw-r--r--mod/languages/languages/sr/sr.core.php389
-rw-r--r--mod/languages/languages/sr/sr.custom_index.php10
-rw-r--r--mod/languages/languages/sr/sr.externalpages.php10
-rw-r--r--mod/languages/languages/sr/sr.file.php7
-rw-r--r--mod/languages/languages/sr/sr.friendrequest.php20
-rw-r--r--mod/languages/languages/sr/sr.groups.php148
-rw-r--r--mod/languages/languages/sr/sr.messageboard.php38
-rw-r--r--mod/languages/languages/sr/sr.messages.php55
-rw-r--r--mod/languages/languages/sr/sr.pages.php7
-rw-r--r--mod/languages/languages/sr/sr.profile.php8
-rw-r--r--mod/languages/languages/sr/sr.reportedcontent.php30
-rw-r--r--mod/languages/languages/th/th.core.php651
-rw-r--r--mod/languages/languages/zh/zh.blog.php69
-rw-r--r--mod/languages/languages/zh/zh.core.php662
-rw-r--r--mod/languages/languages/zh/zh.profile.php8
-rw-r--r--mod/languages/manifest.xml16
-rw-r--r--mod/languages/start.php55
-rw-r--r--mod/languages/views/default/js/languages/ca.php2
-rw-r--r--mod/languages/views/default/js/languages/da.php2
-rw-r--r--mod/languages/views/default/js/languages/de.php2
-rw-r--r--mod/languages/views/default/js/languages/en.php2
-rw-r--r--mod/languages/views/default/js/languages/es.php2
-rw-r--r--mod/languages/views/default/js/languages/eu.php2
-rw-r--r--mod/languages/views/default/js/languages/fr.php2
-rw-r--r--mod/languages/views/default/js/languages/gl.php2
-rw-r--r--mod/languages/views/default/js/languages/it.php2
-rw-r--r--mod/languages/views/default/js/languages/ja.php2
-rw-r--r--mod/languages/views/default/js/languages/nl.php2
-rw-r--r--mod/languages/views/default/js/languages/pt.php2
-rw-r--r--mod/languages/views/default/js/languages/sr.php2
-rw-r--r--mod/languages/views/default/js/languages/th.php2
-rw-r--r--mod/languages/views/default/js/languages/zh.php2
m---------mod/lightpics6
-rw-r--r--mod/lightpics/CONFIG.txt73
-rw-r--r--mod/lightpics/FAQ.txt31
-rw-r--r--mod/lightpics/actions/photos/admin/create_thumbnails.php70
-rw-r--r--mod/lightpics/actions/photos/admin/imtest.php18
-rw-r--r--mod/lightpics/actions/photos/admin/settings.php29
-rw-r--r--mod/lightpics/actions/photos/admin/upgrade.php52
-rw-r--r--mod/lightpics/actions/photos/album/save.php48
-rw-r--r--mod/lightpics/actions/photos/album/set_cover.php23
-rw-r--r--mod/lightpics/actions/photos/album/sort.php21
-rw-r--r--mod/lightpics/actions/photos/batch/edit.php42
-rw-r--r--mod/lightpics/actions/photos/delete.php48
-rw-r--r--mod/lightpics/actions/photos/image/save.php40
-rw-r--r--mod/lightpics/actions/photos/image/upload.php147
-rw-r--r--mod/lightpics/activate.php51
-rw-r--r--mod/lightpics/classes/TidypicsAlbum.php375
-rw-r--r--mod/lightpics/classes/TidypicsImage.php406
-rw-r--r--mod/lightpics/contributions.txt442
-rw-r--r--mod/lightpics/deactivate.php10
-rw-r--r--mod/lightpics/fonts/LiberationSerif-Regular.ttfbin0 -> 172964 bytes-rw-r--r--mod/lightpics/fonts/License.txt13
-rw-r--r--mod/lightpics/graphics/empty_album.pngbin0 -> 1389 bytes-rw-r--r--mod/lightpics/graphics/icons/album.gifbin0 -> 1411 bytes-rw-r--r--mod/lightpics/graphics/icons/general.jpgbin0 -> 7036 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_album.gifbin0 -> 398 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_image.gifbin0 -> 945 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_tag.gifbin0 -> 184 bytes-rw-r--r--mod/lightpics/graphics/image_error_large.pngbin0 -> 2208 bytes-rw-r--r--mod/lightpics/graphics/image_error_small.pngbin0 -> 2351 bytes-rw-r--r--mod/lightpics/graphics/image_error_thumb.pngbin0 -> 759 bytes-rw-r--r--mod/lightpics/graphics/loader.gifbin0 -> 2545 bytes-rw-r--r--mod/lightpics/graphics/spacer.gifbin0 -> 43 bytes-rw-r--r--mod/lightpics/languages/ca.php210
-rw-r--r--mod/lightpics/languages/da.php169
-rw-r--r--mod/lightpics/languages/de.php248
-rw-r--r--mod/lightpics/languages/en.php262
-rw-r--r--mod/lightpics/languages/es.php210
-rw-r--r--mod/lightpics/languages/fr.php140
-rw-r--r--mod/lightpics/languages/he.php135
-rw-r--r--mod/lightpics/languages/it.php113
-rw-r--r--mod/lightpics/languages/pl.php96
-rw-r--r--mod/lightpics/languages/ru.php101
-rw-r--r--mod/lightpics/languages/tr.php86
-rw-r--r--mod/lightpics/lib/exif.php110
-rw-r--r--mod/lightpics/lib/migrate.php301
-rw-r--r--mod/lightpics/lib/resize.php522
-rw-r--r--mod/lightpics/lib/tidypics.php365
-rw-r--r--mod/lightpics/lib/upload.php119
-rw-r--r--mod/lightpics/manifest.xml30
-rw-r--r--mod/lightpics/pages/lists/highestrated.php65
-rw-r--r--mod/lightpics/pages/lists/highestvotecount.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimages.php42
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/mostrecentimages.php56
-rw-r--r--mod/lightpics/pages/lists/mostviewedimages.php79
-rw-r--r--mod/lightpics/pages/lists/mostviewedimageslastmonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthisyear.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/recentlycommented.php61
-rw-r--r--mod/lightpics/pages/lists/recentlyviewed.php60
-rw-r--r--mod/lightpics/pages/lists/recentvotes.php52
-rw-r--r--mod/lightpics/pages/photos/album/add.php34
-rw-r--r--mod/lightpics/pages/photos/album/edit.php48
-rw-r--r--mod/lightpics/pages/photos/album/sort.php56
-rw-r--r--mod/lightpics/pages/photos/album/view.php63
-rw-r--r--mod/lightpics/pages/photos/all.php38
-rw-r--r--mod/lightpics/pages/photos/batch/edit.php44
-rw-r--r--mod/lightpics/pages/photos/friends.php34
-rw-r--r--mod/lightpics/pages/photos/image/download.php41
-rw-r--r--mod/lightpics/pages/photos/image/edit.php54
-rw-r--r--mod/lightpics/pages/photos/image/thumbnail.php38
-rw-r--r--mod/lightpics/pages/photos/image/upload.php64
-rw-r--r--mod/lightpics/pages/photos/image/view.php61
-rw-r--r--mod/lightpics/pages/photos/owner.php56
-rw-r--r--mod/lightpics/start.php421
-rw-r--r--mod/lightpics/upgrades/2009082901.php29
-rw-r--r--mod/lightpics/upgrades/2010073101.php27
-rw-r--r--mod/lightpics/upgrades/2010102801.php26
-rw-r--r--mod/lightpics/upgrades/2012020901.php26
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/README.md73
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html75
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/result.html20
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css107
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/style.css92
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/loading.gifbin0 -> 3897 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/progressbar.gifbin0 -> 3323 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/index.html234
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js117
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js85
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js219
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js141
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js736
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js972
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js171
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/locale.js29
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/main.js93
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js282
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/package.json56
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml12
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go361
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go247
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.icobin0 -> 1150 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml16
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py149
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.icobin0 -> 1150 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/package.json41
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore0
-rwxr-xr-xmod/lightpics/vendors/jquery-file-upload/server/node/server.js285
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess4
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/index.php46
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php436
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/index.html146
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/test.js1279
-rw-r--r--mod/lightpics/version.php7
-rw-r--r--mod/lightpics/views/default/admin/settings/photos.php71
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/help.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/image_lib.php38
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_config.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_info.php120
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/settings.php18
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/thumbnail.php54
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings.php26
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/activity.php31
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php20
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/main.php39
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/album/save.php48
-rw-r--r--mod/lightpics/views/default/forms/photos/album/sort.php28
-rw-r--r--mod/lightpics/views/default/forms/photos/basic_upload.php63
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit/image.php35
-rw-r--r--mod/lightpics/views/default/forms/photos/image/save.php48
-rw-r--r--mod/lightpics/views/default/icon/object/album.php41
-rw-r--r--mod/lightpics/views/default/icon/object/image.php62
-rw-r--r--mod/lightpics/views/default/js/photos/tidypics.php43
-rw-r--r--mod/lightpics/views/default/js/photos/upload.php63
-rw-r--r--mod/lightpics/views/default/object/album.php22
-rw-r--r--mod/lightpics/views/default/object/album/full.php59
-rw-r--r--mod/lightpics/views/default/object/album/gallery.php36
-rw-r--r--mod/lightpics/views/default/object/album/list.php42
-rw-r--r--mod/lightpics/views/default/object/image.php211
-rw-r--r--mod/lightpics/views/default/object/image/full.php62
-rw-r--r--mod/lightpics/views/default/object/image/navigation.php34
-rw-r--r--mod/lightpics/views/default/object/image/summary.php41
-rw-r--r--mod/lightpics/views/default/photos/css.php470
-rw-r--r--mod/lightpics/views/default/photos/group_module.php45
-rw-r--r--mod/lightpics/views/default/photos/sidebar.php18
-rw-r--r--mod/lightpics/views/default/photos/sidebar/exif.php20
-rw-r--r--mod/lightpics/views/default/photos/sidebar/quota.php27
-rw-r--r--mod/lightpics/views/default/river/object/album/create.php40
-rw-r--r--mod/lightpics/views/default/river/object/image/create.php41
-rw-r--r--mod/lightpics/views/default/river/object/tidypics_batch/create.php66
-rw-r--r--mod/lightpics/views/default/widgets/album_view/content.php17
-rw-r--r--mod/lightpics/views/default/widgets/album_view/edit.php25
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/content.php18
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/edit.php25
-rw-r--r--mod/lightpics/views/rss/extensions/photos/xmlns.php9
-rw-r--r--mod/lightpics/views/rss/object/album.php17
-rw-r--r--mod/lightpics/views/rss/object/album/full.php19
-rw-r--r--mod/lightpics/views/rss/object/album/summary.php33
-rw-r--r--mod/lightpics/views/rss/object/image.php42
m---------[l---------]mod/linkup1
m---------mod/livestream0
-rw-r--r--mod/logbrowser/views/default/forms/logbrowser/refine.php4
-rw-r--r--mod/logbrowser/views/default/logbrowser/refine.php2
-rw-r--r--mod/logbrowser/views/default/logbrowser/table.php2
-rw-r--r--mod/logrotate/languages/en.php3
-rw-r--r--mod/logrotate/start.php51
-rw-r--r--mod/logrotate/views/default/plugins/logrotate/settings.php1
-rw-r--r--mod/members/pages/members/search.php8
-rw-r--r--mod/messageboard/pages/messageboard/owner.php1
-rw-r--r--mod/messageboard/views/default/river/object/messageboard/create.php23
-rw-r--r--mod/messages/pages/messages/read.php4
-rw-r--r--mod/messages/start.php117
m---------mod/microthemes0
m---------mod/n1_theme0
-rw-r--r--mod/notifications/actions/groupsave.php17
-rw-r--r--mod/notifications/groups.php4
-rw-r--r--mod/notifications/index.php4
-rw-r--r--mod/notifications/views/default/forms/notificationsettings/groupsave.php4
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/forminternals.php4
-rw-r--r--mod/oauth_api/start.php24
-rw-r--r--mod/oauth_api/vendors/oauth/LICENSE21
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/INSTALL53
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/init.php127
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/inc/footer.tpl2
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/inc/header.tpl2
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/index.tpl13
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/logon.tpl21
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/register.tpl41
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/hello.php65
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/index.php37
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/logon.php55
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/oauth.php77
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/register.php28
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/services.xrds.php71
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthDiscovery.php226
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthException.php50
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequest.php801
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestLogger.php274
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestSigner.php209
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestVerifier.php262
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequester.php508
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthServer.php232
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthStore.php86
-rw-r--r--mod/oauth_api/vendors/oauth/library/body/OAuthBodyContentDisposition.php129
-rw-r--r--mod/oauth_api/vendors/oauth/library/body/OAuthBodyMultipartFormdata.php143
-rw-r--r--mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.php304
-rw-r--r--mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.txt101
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod.class.php69
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php115
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_MD5.php95
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php80
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php136
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreAbstract.class.php149
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreAnyMeta.php265
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreMySQL.php1879
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/mysql/install.php32
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/mysql/mysql.sql219
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-fireeagle.xrds78
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-getsatisfaction.xrds73
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-magnolia.xrds81
-rw-r--r--mod/oauth_api/vendors/oauth/test/oauth_test.php188
m---------mod/online0
m---------mod/openid_api6
-rw-r--r--mod/openid_api/classes/OpenID_ElggStore.php420
-rw-r--r--mod/openid_api/lib/openid_consumer.php15
-rw-r--r--mod/openid_api/lib/openid_server.php13
-rw-r--r--mod/openid_api/manifest.xml (renamed from mod/twitter/manifest.xml)15
-rw-r--r--mod/openid_api/start.php22
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID.php563
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php1022
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php610
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php451
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php2234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php122
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php130
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php113
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php606
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php99
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php61
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php618
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php105
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php196
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php111
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php413
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php207
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php920
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php77
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php108
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php300
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php377
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php112
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php557
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php70
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php1765
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php36
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php461
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php249
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php174
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php58
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php245
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php258
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php248
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php352
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php478
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php72
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php382
-rw-r--r--mod/openid_api/vendors/php-openid/COPYING202
-rw-r--r--mod/openid_api/vendors/php-openid/README136
m---------mod/openid_client6
-rw-r--r--mod/openid_client/actions/openid_client/login.php32
-rw-r--r--mod/openid_client/actions/openid_client/register.php35
-rw-r--r--mod/openid_client/classes/ElggOpenIDConsumer.php238
-rw-r--r--mod/openid_client/graphics/openid_icon.pngbin0 -> 733 bytes-rw-r--r--mod/openid_client/languages/en.php28
-rw-r--r--mod/openid_client/lib/helpers.php114
-rw-r--r--mod/openid_client/manifest.xml (renamed from mod/oauth_api/manifest.xml)22
-rw-r--r--mod/openid_client/return.php69
-rw-r--r--mod/openid_client/start.php78
-rw-r--r--mod/openid_client/upgrade.php12
-rw-r--r--mod/openid_client/upgrades/2012100501.php53
-rw-r--r--mod/openid_client/views/default/core/account/login_box.php24
-rw-r--r--mod/openid_client/views/default/core/account/login_dropdown.php31
-rw-r--r--mod/openid_client/views/default/forms/openid_client/login.php43
-rw-r--r--mod/openid_client/views/default/forms/openid_client/register.php71
-rw-r--r--mod/openid_client/views/default/openid_client/css.php13
-rw-r--r--mod/openid_client/views/default/openid_client/icon.php8
-rw-r--r--mod/openid_client/views/default/openid_client/js.php26
-rw-r--r--mod/openid_client/views/default/openid_client/register.php11
m---------mod/openid_server6
-rw-r--r--mod/openid_server/Crypt/RSA.php524
-rw-r--r--mod/openid_server/Crypt/RSA/ErrorHandler.php234
-rw-r--r--mod/openid_server/Crypt/RSA/Key.php314
-rw-r--r--mod/openid_server/Crypt/RSA/KeyPair.php804
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BCMath.php482
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BigInt.php313
-rw-r--r--mod/openid_server/Crypt/RSA/Math/GMP.php361
-rw-r--r--mod/openid_server/Crypt/RSA/MathLoader.php135
-rwxr-xr-xmod/openid_server/actions/admin.php90
-rwxr-xr-xmod/openid_server/actions/autologin.php52
-rwxr-xr-xmod/openid_server/actions/autologout.php48
-rwxr-xr-xmod/openid_server/actions/trust.php93
-rw-r--r--mod/openid_server/languages/ca.php40
-rwxr-xr-xmod/openid_server/languages/en.php47
-rwxr-xr-xmod/openid_server/languages/es.php40
-rw-r--r--mod/openid_server/languages/gl.php40
-rw-r--r--mod/openid_server/languages/pt.php27
-rwxr-xr-xmod/openid_server/lib/actions.php173
-rwxr-xr-xmod/openid_server/lib/common.php164
-rwxr-xr-xmod/openid_server/lib/session.php140
-rwxr-xr-xmod/openid_server/manifest.xml20
-rwxr-xr-xmod/openid_server/openid_server_include.php340
-rwxr-xr-xmod/openid_server/server.php32
-rwxr-xr-xmod/openid_server/start.php65
-rwxr-xr-xmod/openid_server/views/default/forms/openid_server/trust.php34
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/admin.php154
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologin.php22
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologout.php24
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/trust.php35
-rwxr-xr-xmod/openid_server/views/default/openid_server/metatags.php6
-rw-r--r--mod/openid_server/views/xrds/openid_server/profile.php11
-rw-r--r--mod/openid_server/views/xrds/openid_server/service.php15
m---------mod/opensearch6
-rw-r--r--mod/opensearch/README21
-rw-r--r--mod/opensearch/languages/ca.php26
-rw-r--r--mod/opensearch/languages/en.php28
-rw-r--r--mod/opensearch/languages/es.php23
-rw-r--r--mod/opensearch/languages/eu.php11
-rwxr-xr-xmod/opensearch/languages/pl.php11
-rw-r--r--mod/opensearch/manifest.xml16
-rw-r--r--mod/opensearch/start.php33
-rw-r--r--mod/opensearch/views/default/opensearch/includes.php10
-rw-r--r--mod/opensearch/views/default/plugins/opensearch/settings.php97
-rw-r--r--mod/opensearch/views/opensearch_rss/page/default.php42
-rw-r--r--mod/opensearch/views/opensearch_rss/page/layouts/default.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/layout.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/list.php27
-rw-r--r--mod/opensearch/views/xml/opensearch/description.php75
-rw-r--r--mod/pages/actions/annotations/page/delete.php20
-rw-r--r--mod/pages/actions/pages/delete.php26
-rw-r--r--mod/pages/actions/pages/edit.php25
-rw-r--r--mod/pages/languages/en.php10
-rw-r--r--mod/pages/lib/pages.php60
-rw-r--r--mod/pages/pages/pages/edit.php13
-rw-r--r--mod/pages/pages/pages/friends.php2
-rw-r--r--mod/pages/pages/pages/history.php4
-rw-r--r--mod/pages/pages/pages/owner.php6
-rw-r--r--mod/pages/pages/pages/world.php4
-rw-r--r--mod/pages/start.php49
-rw-r--r--mod/pages/upgrades/2012061800.php49
-rw-r--r--mod/pages/views/default/annotation/page.php18
-rw-r--r--mod/pages/views/default/forms/pages/edit.php17
-rw-r--r--mod/pages/views/default/object/page_top.php26
-rw-r--r--mod/pages/views/default/pages/input/parent.php37
-rw-r--r--mod/pages/views/default/pages/sidebar/history.php1
m---------mod/powered0
-rw-r--r--mod/profile/icondirect.php18
-rw-r--r--mod/profile/views/default/profile/details.php18
-rw-r--r--mod/profile/views/default/profile/metatags.php4
-rw-r--r--mod/profile_widgets/languages/en.php7
-rw-r--r--mod/profile_widgets/languages/es.php7
-rwxr-xr-xmod/profile_widgets/manifest.xml16
-rw-r--r--mod/profile_widgets/start.php13
-rw-r--r--mod/profile_widgets/views/default/widgets/thewirewrite/view.php11
m---------mod/proposals0
m---------mod/registrationterms6
-rw-r--r--mod/registrationterms/.gitignore3
-rw-r--r--mod/registrationterms/README.md9
-rw-r--r--mod/registrationterms/languages/ca.php6
-rw-r--r--mod/registrationterms/languages/en.php6
-rw-r--r--mod/registrationterms/manifest.xml25
-rw-r--r--mod/registrationterms/screenshots/register-form.pngbin0 -> 8653 bytes-rw-r--r--mod/registrationterms/start.php18
-rw-r--r--mod/registrationterms/views/default/registrationterms/register.php17
m---------mod/relatedgroups0
-rw-r--r--mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php2
-rw-r--r--mod/reportedcontent/views/default/object/reported_content.php20
-rw-r--r--mod/reportedcontent/views/default/widgets/reportedcontent/content.php4
m---------mod/river_privacy6
-rw-r--r--mod/river_privacy/CHANGES.txt7
-rw-r--r--mod/river_privacy/README.md4
-rw-r--r--mod/river_privacy/languages/ca.php7
-rw-r--r--mod/river_privacy/languages/en.php13
-rw-r--r--mod/river_privacy/manifest.xml17
-rw-r--r--mod/river_privacy/start.php30
-rw-r--r--mod/river_privacy/views/default/plugins/river_privacy/settings.php17
-rw-r--r--mod/river_privacy/views_override/default/page/components/list.php89
-rw-r--r--mod/search/README.txt2
-rw-r--r--mod/search/pages/search/index.php12
-rw-r--r--mod/search/search_hooks.php197
-rw-r--r--mod/search/start.php6
-rw-r--r--mod/search/views/default/search/comments/entity.php11
-rw-r--r--mod/search/views/default/search/list.php14
-rw-r--r--mod/search/views/default/search/no_results.php2
-rw-r--r--mod/search/views/rss/search/comments/entity.php11
-rw-r--r--mod/simplepie/README19
-rw-r--r--mod/simplepie/actions/simplepie/save_group_feed.php14
-rw-r--r--mod/simplepie/languages/en.php14
-rw-r--r--mod/simplepie/languages/es.php14
-rw-r--r--mod/simplepie/manifest.xml36
-rw-r--r--mod/simplepie/start.php33
-rw-r--r--mod/simplepie/vendors/simplepie.inc15299
-rw-r--r--mod/simplepie/views/default/forms/simplepie/save_group_feed.php39
-rw-r--r--mod/simplepie/views/default/simplepie/css.php17
-rw-r--r--mod/simplepie/views/default/simplepie/group_module.php109
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/content.php81
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/edit.php62
m---------mod/spotlight0
m---------mod/subgroups0
m---------mod/suicide0
m---------mod/tasks0
-rw-r--r--mod/thewire/pages/thewire/everyone.php2
-rw-r--r--mod/thewire/pages/thewire/friends.php2
-rw-r--r--mod/thewire/pages/thewire/owner.php4
-rw-r--r--mod/thewire/start.php11
-rw-r--r--mod/thewire/upgrades/2012122701-fix_entity_class.php8
-rw-r--r--mod/thewire/views/default/thewire/profile_status.php4
-rw-r--r--mod/thewire/views/rss/object/thewire.php2
m---------mod/threads0
-rw-r--r--mod/tinymce/vendor/tinymce/changelog.txt1414
-rw-r--r--mod/tinymce/vendor/tinymce/examples/full.html4
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/media_list.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js36
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js58
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js6
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js4
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js41
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js10
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js166
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js38
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js101
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js556
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js20
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js22
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js80
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm7
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/readme.txt19
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js128
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js4
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js23
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm30
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js63
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js20
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js224
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gifbin11790 -> 11982 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js674
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js6
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js12
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js32
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css7
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css7
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css6
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css7
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js2
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js9038
-rw-r--r--mod/tinymce/views/default/js/tinymce.php14
-rw-r--r--mod/twitter/graphics/twitter16px.pngbin724 -> 0 bytes-rw-r--r--mod/twitter/languages/en.php16
-rw-r--r--mod/twitter/start.php14
-rw-r--r--mod/twitter/views/default/widgets/twitter/content.php31
-rw-r--r--mod/twitter/views/default/widgets/twitter/edit.php16
-rw-r--r--mod/twitter_api/languages/en.php4
-rw-r--r--mod/twitter_api/lib/twitter_api.php87
-rw-r--r--mod/twitter_api/manifest.xml10
-rw-r--r--mod/twitter_api/pages/twitter_api/interstitial.php4
-rw-r--r--mod/twitter_api/start.php42
-rw-r--r--mod/twitter_api/vendors/twitteroauth/OAuth.php391
-rw-r--r--mod/twitter_api/vendors/twitteroauth/README117
-rw-r--r--mod/twitter_api/vendors/twitteroauth/twitterOAuth.php20
-rw-r--r--mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php7
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/settings.php15
-rw-r--r--mod/twitter_api/views/default/twitter_api/css.php2
-rw-r--r--mod/twitter_api/views/default/twitter_api/js.php16
-rw-r--r--mod/twitter_api/views/default/twitter_api/login.php2
m---------mod/upgrade-tools0
-rw-r--r--mod/uservalidationbyemail/start.php16
-rw-r--r--mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php2
m---------mod/videolist10
-rw-r--r--mod/videolist/.gitignore15
-rw-r--r--mod/videolist/CHANGES.txt14
-rw-r--r--mod/videolist/actions/videolist/delete.php39
-rw-r--r--mod/videolist/actions/videolist/edit.php107
-rw-r--r--mod/videolist/graphics/_videolist_icon_medium.pngbin0 -> 4391 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_medium.pngbin0 -> 3840 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_small.pngbin0 -> 1960 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_tiny.pngbin0 -> 1295 bytes-rw-r--r--mod/videolist/languages/ca.php40
-rw-r--r--mod/videolist/languages/en.php78
-rw-r--r--mod/videolist/languages/es.php40
-rw-r--r--mod/videolist/languages/fr.php28
-rw-r--r--mod/videolist/languages/gl.php29
-rw-r--r--mod/videolist/languages/pt.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Bliptv.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Gisstv.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Metacafe.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Vimeo.php40
-rw-r--r--mod/videolist/lib/Videolist/Platform/Youtube.php49
-rw-r--r--mod/videolist/lib/Videolist/PlatformInterface.php23
-rw-r--r--mod/videolist/lib/videolist.php46
-rw-r--r--mod/videolist/manifest.xml18
-rw-r--r--mod/videolist/pages/videolist/add.php39
-rw-r--r--mod/videolist/pages/videolist/all.php34
-rw-r--r--mod/videolist/pages/videolist/edit.php49
-rw-r--r--mod/videolist/pages/videolist/friends.php33
-rw-r--r--mod/videolist/pages/videolist/owner.php54
-rw-r--r--mod/videolist/pages/videolist/watch.php42
-rw-r--r--mod/videolist/start.php328
-rw-r--r--mod/videolist/thumbnail.php64
-rw-r--r--mod/videolist/upgrades/2012022501.php82
-rw-r--r--mod/videolist/views/default/forms/videolist/edit.php55
-rw-r--r--mod/videolist/views/default/icon/object/videolist_item.php47
-rw-r--r--mod/videolist/views/default/object/videolist_item.php108
-rw-r--r--mod/videolist/views/default/page/elements/videolist_block.php36
-rw-r--r--mod/videolist/views/default/river/object/videolist_item/create.php15
-rw-r--r--mod/videolist/views/default/videolist/css.php23
-rw-r--r--mod/videolist/views/default/videolist/group_module.php43
-rw-r--r--mod/videolist/views/default/videolist/sidebar.php28
-rw-r--r--mod/videolist/views/default/videolist/watch.php8
-rw-r--r--mod/videolist/views/default/videolist/watch/bliptv.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/gisstv.php7
-rw-r--r--mod/videolist/views/default/videolist/watch/metacafe.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/vimeo.php5
-rw-r--r--mod/videolist/views/default/videolist/watch/youtube.php5
-rw-r--r--mod/videolist/views/default/widgets/videolist/content.php32
-rw-r--r--mod/videolist/views/default/widgets/videolist/edit.php24
-rw-r--r--mod/videolist/views/rss/object/videolist_item.php47
-rw-r--r--pages/account/forgotten_password.php11
-rw-r--r--pages/account/login.php14
-rw-r--r--pages/account/register.php11
-rw-r--r--pages/account/reset_password.php11
-rw-r--r--pages/avatar/edit.php5
-rw-r--r--pages/avatar/view.php2
-rw-r--r--pages/river.php1
-rw-r--r--pages/settings/account.php3
-rw-r--r--pages/settings/statistics.php3
-rw-r--r--pages/settings/tools.php5
-rwxr-xr-xsubtree.sh20
-rw-r--r--upgrade.php15
-rw-r--r--version.php6
-rw-r--r--views/default/admin/appearance/profile_fields.php12
-rw-r--r--views/default/admin/settings/advanced/site_secret.php11
-rw-r--r--views/default/admin/users/admins.php12
-rw-r--r--views/default/annotation/generic_comment.php4
-rw-r--r--views/default/core/settings/statistics/online.php9
-rw-r--r--views/default/css/admin.php33
-rw-r--r--views/default/css/elements/forms.php5
-rw-r--r--views/default/css/elements/layout.php2
-rw-r--r--views/default/css/elements/modules.php2
-rw-r--r--views/default/css/elements/navigation.php7
-rw-r--r--views/default/css/elements/typography.php3
-rw-r--r--views/default/css/ie.php8
-rw-r--r--views/default/css/ie7.php12
-rw-r--r--views/default/forms/admin/site/regenerate_secret.php24
-rw-r--r--views/default/forms/plugins/settings/save.php6
-rw-r--r--views/default/forms/profile/edit.php16
-rw-r--r--views/default/forms/profile/fields/add.php2
-rw-r--r--views/default/forms/profile/fields/reset.php12
-rw-r--r--views/default/forms/user/passwordreset.php2
-rw-r--r--views/default/icon/default.php30
-rw-r--r--views/default/input/pulldown.php2
-rw-r--r--views/default/input/userpicker.php8
-rw-r--r--views/default/js/admin.php11
-rw-r--r--views/default/js/elgg.php6
-rw-r--r--views/default/js/initialize_elgg.php1
-rw-r--r--views/default/js/languages.php24
-rw-r--r--views/default/js/lightbox.php4
-rw-r--r--views/default/js/walled_garden.php33
-rw-r--r--views/default/object/default.php1
-rw-r--r--views/default/object/elements/full.php4
-rw-r--r--views/default/object/elements/summary.php2
-rw-r--r--views/default/object/plugin/elements/dependencies.php2
-rw-r--r--views/default/output/access.php2
-rw-r--r--views/default/output/email.php4
-rw-r--r--views/default/output/longtext.php2
-rw-r--r--views/default/output/tag.php17
-rw-r--r--views/default/output/tagcloud.php2
-rw-r--r--views/default/output/tags.php19
-rw-r--r--views/default/page/components/list.php15
-rw-r--r--views/default/page/elements/head.php2
-rw-r--r--views/default/page/elements/messages.php2
-rw-r--r--views/default/page/walled_garden.php15
-rw-r--r--views/default/river/elements/image.php6
-rw-r--r--views/default/river/elements/summary.php3
-rw-r--r--views/default/widgets/control_panel/content.php26
-rw-r--r--views/installation/install/js_rewrite_check.php12
-rw-r--r--views/installation/install/pages/admin.php2
-rw-r--r--views/installation/install/pages/complete.php2
-rw-r--r--views/installation/install/pages/database.php4
-rw-r--r--views/installation/install/pages/requirements.php8
-rw-r--r--views/installation/install/pages/settings.php2
-rw-r--r--views/installation/install/pages/welcome.php2
-rw-r--r--views/installation/page/elements/messages.php2
-rw-r--r--views/opendd/messages/exceptions/exception.php2
-rw-r--r--views/rss/group/default.php4
-rw-r--r--views/rss/object/default.php2
-rw-r--r--views/rss/page/default.php2
-rw-r--r--views/rss/user/default.php2
-rw-r--r--views/xml/messages/exceptions/exception.php2
5325 files changed, 383656 insertions, 19828 deletions
diff --git a/.gitignore b/.gitignore
index c90f6b85b..2303faa0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,7 +40,7 @@
!/mod/uservalidationbyemail/
!/mod/zaudio/
-# ignore IDE/hidden/OS cache files
+# ignore IDE/hidden/testing/OS cache files
.*
*~
/nbproject
@@ -51,6 +51,7 @@ Session.vim
tmtags
Thumbs.db
Desktop.ini
+/JsTestDriver-*.jar
# don't ignore travis config
!/.travis.yml
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index f12d4506b..000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,156 +0,0 @@
-[submodule "mod/videolist"]
- path = mod/videolist
- url = git://gitorious.org/lorea/videolist.git
-[submodule "mod/dokuwiki"]
- path = mod/dokuwiki
- url = git://gitorious.org/lorea/dokuwiki.git
-[submodule "mod/group_operators"]
- path = mod/group_operators
- url = git://gitorious.org/lorea/group_operators.git
-[submodule "mod/powered"]
- path = mod/powered
- url = git://gitorious.org/lorea/powered.git
-[submodule "mod/group_alias"]
- path = mod/group_alias
- url = git://gitorious.org/lorea/group_alias.git
-[submodule "mod/etherpad"]
- path = mod/etherpad
- url = git://gitorious.org/lorea/elggpad.git
-[submodule "mod/spotlight"]
- path = mod/spotlight
- url = git://gitorious.org/lorea/spotlight.git
-[submodule "mod/suicide"]
- path = mod/suicide
- url = git://gitorious.org/lorea/suicide.git
-[submodule "mod/friendrequest"]
- path = mod/friendrequest
- url = git://gitorious.org/lorea/friendrequest.git
-[submodule "mod/admins"]
- path = mod/admins
- url = git://gitorious.org/lorea/admins.git
-[submodule "mod/opensearch"]
- path = mod/opensearch
- url = git://gitorious.org/lorea/opensearch.git
-[submodule "mod/audio_html5"]
- path = mod/audio_html5
- url = git://gitorious.org/lorea/audio_html5.git
-[submodule "mod/relatedgroups"]
- path = mod/relatedgroups
- url = git://gitorious.org/lorea/relatedgroups.git
-[submodule "mod/subgroups"]
- path = mod/subgroups
- url = git://gitorious.org/lorea/subgroups.git
-[submodule "mod/identica"]
- path = mod/identica
- url = git://gitorious.org/lorea/identica.git
-[submodule "mod/elggpg"]
- path = mod/elggpg
- url = git://gitorious.org/lorea/elggpg.git
-[submodule "mod/languages"]
- path = mod/languages
- url = git://gitorious.org/lorea/languages.git
-[submodule "mod/translation_editor"]
- path = mod/translation_editor
- url = git://gitorious.org/lorea/translation_editor.git
-[submodule "mod/gifts"]
- path = mod/gifts
- url = git://gitorious.org/lorea/gifts.git
-[submodule "mod/online"]
- path = mod/online
- url = git://gitorious.org/lorea/online.git
-[submodule "mod/registrationterms"]
- path = mod/registrationterms
- url = git://gitorious.org/lorea/registrationterms.git
-[submodule "mod/custom_index_widgets"]
- path = mod/custom_index_widgets
- url = git://gitorious.org/lorea/custom_index_widgets.git
-[submodule "mod/simple_faq"]
- path = mod/simple_faq
- url = git://gitorious.org/lorea/simple_faq.git
-[submodule "mod/river_privacy"]
- path = mod/river_privacy
- url = git://gitorious.org/lorea/river_privacy.git
-[submodule "mod/habitorio_theme"]
- path = mod/habitorio_theme
- url = git://gitorious.org/lorea/habitorio_theme.git
-[submodule "mod/purity_theme"]
- path = mod/purity_theme
- url = git://gitorious.org/lorea/purity_theme.git
-[submodule "mod/lightpics"]
- path = mod/lightpics
- url = git://gitorious.org/lorea/lightpics.git
-[submodule "mod/colorbox"]
- path = mod/colorbox
- url = git://gitorious.org/lorea/colorbox.git
-[submodule "mod/tasks"]
- path = mod/tasks
- url = git://gitorious.org/lorea/tasks.git
-[submodule "mod/n1_theme"]
- path = mod/n1_theme
- url = git://gitorious.org/lorea/n1_theme.git
-[submodule "mod/event_calendar"]
- path = mod/event_calendar
- url = git://gitorious.org/lorea/event_calendar.git
-[submodule "mod/threads"]
- path = mod/threads
- url = git://gitorious.org/lorea/threads.git
-[submodule "mod/elggman"]
- path = mod/elggman
- url = git://gitorious.org/lorea/elggman.git
-[submodule "mod/friendly_time"]
- path = mod/friendly_time
- url = git://gitorious.org/lorea/friendly_time.git
-[submodule "mod/crud"]
- path = mod/crud
- url = git://gitorious.org/lorea/crud.git
-[submodule "mod/assemblies"]
- path = mod/assemblies
- url = git://gitorious.org/lorea/assemblies.git
-[submodule "mod/proposals"]
- path = mod/proposals
- url = git://gitorious.org/lorea/proposals.git
-[submodule "mod/elgg-activitystreams"]
- path = mod/elgg-activitystreams
- url = git://gitorious.org/lorea/elgg-activitystreams.git
-[submodule "mod/elgg-push"]
- path = mod/elgg-push
- url = git://gitorious.org/lorea/elgg-push.git
-[submodule "mod/federated-objects"]
- path = mod/federated-objects
- url = git://gitorious.org/lorea/federated-objects.git
-[submodule "mod/elgg-xrds"]
- path = mod/elgg-xrds
- url = git://gitorious.org/lorea/elgg-xrds.git
-[submodule "mod/elgg-salmon"]
- path = mod/elgg-salmon
- url = git://gitorious.org/lorea/elgg-salmon.git
-[submodule "mod/openid_client"]
- path = mod/openid_client
- url = git://gitorious.org/lorea/openid_client.git
-[submodule "mod/openid_api"]
- path = mod/openid_api
- url = git://gitorious.org/lorea/openid_api.git
-[submodule "mod/openid_server"]
- path = mod/openid_server
- url = git://gitorious.org/lorea/openid_server.git
-[submodule "mod/email_revalidate"]
- path = mod/email_revalidate
- url = git://gitorious.org/lorea/email_revalidate.git
-[submodule "mod/linkup"]
- path = mod/linkup
- url = git://gitorious.org/lorea/linkup.git
-[submodule "mod/favorites"]
- path = mod/favorites
- url = git://gitorious.org/lorea/elgg-favorites.git
-[submodule "mod/elgg-ostatus"]
- path = mod/elgg-ostatus
- url = git@gitorious.org:lorea/elgg-ostatus.git
-[submodule "mod/elgg-webfinger"]
- path = mod/elgg-webfinger
- url = git@gitorious.org:lorea/elgg-webfinger.git
-[submodule "mod/beechat"]
- path = mod/beechat
- url = git@gitorious.org:lorea/beechat.git
-[submodule "mod/microthemes"]
- path = mod/microthemes
- url = git@gitorious.org:lorea/microthemes.git
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 000000000..b1600d70c
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,501 @@
+[main]
+host = https://www.transifex.com
+
+[lorea.engine]
+file_filter = languages/<lang>.php
+source_file = languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.blog]
+file_filter = mod/blog/languages/<lang>.php
+source_file = mod/blog/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.bookmarks]
+file_filter = mod/bookmarks/languages/<lang>.php
+source_file = mod/bookmarks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.categories]
+file_filter = mod/categories/languages/<lang>.php
+source_file = mod/categories/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.ckeditor]
+file_filter = mod/ckeditor/languages/<lang>.php
+source_file = mod/ckeditor/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index]
+file_filter = mod/custom_index/languages/<lang>.php
+source_file = mod/custom_index/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dashboard]
+file_filter = mod/dashboard/languages/<lang>.php
+source_file = mod/dashboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.developers]
+file_filter = mod/developers/languages/<lang>.php
+source_file = mod/developers/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.diagnostics]
+file_filter = mod/diagnostics/languages/<lang>.php
+source_file = mod/diagnostics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.embed]
+file_filter = mod/embed/languages/<lang>.php
+source_file = mod/embed/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.externalpages]
+file_filter = mod/externalpages/languages/<lang>.php
+source_file = mod/externalpages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.file]
+file_filter = mod/file/languages/<lang>.php
+source_file = mod/file/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.garbagecollector]
+file_filter = mod/garbagecollector/languages/<lang>.php
+source_file = mod/garbagecollector/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.groups]
+file_filter = mod/groups/languages/<lang>.php
+source_file = mod/groups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.invitefriends]
+file_filter = mod/invitefriends/languages/<lang>.php
+source_file = mod/invitefriends/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.likes]
+file_filter = mod/likes/languages/<lang>.php
+source_file = mod/likes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logbrowser]
+file_filter = mod/logbrowser/languages/<lang>.php
+source_file = mod/logbrowser/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logrotate]
+file_filter = mod/logrotate/languages/<lang>.php
+source_file = mod/logrotate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.members]
+file_filter = mod/members/languages/<lang>.php
+source_file = mod/members/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messageboard]
+file_filter = mod/messageboard/languages/<lang>.php
+source_file = mod/messageboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messages]
+file_filter = mod/messages/languages/<lang>.php
+source_file = mod/messages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.notifications]
+file_filter = mod/notifications/languages/<lang>.php
+source_file = mod/notifications/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.pages]
+file_filter = mod/pages/languages/<lang>.php
+source_file = mod/pages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile]
+file_filter = mod/profile/languages/<lang>.php
+source_file = mod/profile/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.reportedcontent]
+file_filter = mod/reportedcontent/languages/<lang>.php
+source_file = mod/reportedcontent/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.search]
+file_filter = mod/search/languages/<lang>.php
+source_file = mod/search/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tagcloud]
+file_filter = mod/tagcloud/languages/<lang>.php
+source_file = mod/tagcloud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.thewire]
+file_filter = mod/thewire/languages/<lang>.php
+source_file = mod/thewire/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter]
+file_filter = mod/twitter/languages/<lang>.php
+source_file = mod/twitter/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter_api]
+file_filter = mod/twitter_api/languages/<lang>.php
+source_file = mod/twitter_api/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyemail]
+file_filter = mod/uservalidationbyemail/languages/<lang>.php
+source_file = mod/uservalidationbyemail/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.install]
+file_filter = install/languages/<lang>.php
+source_file = install/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.admins]
+file_filter = mod/admins/languages/<lang>.php
+source_file = mod/admins/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.assemblies]
+file_filter = mod/assemblies/languages/<lang>.php
+source_file = mod/assemblies/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggman]
+file_filter = mod/elggman/languages/<lang>.php
+source_file = mod/elggman/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.autosubscribegroup]
+file_filter = mod/autosubscribegroup/languages/<lang>.php
+source_file = mod/autosubscribegroup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.beechat]
+file_filter = mod/beechat/languages/<lang>.php
+source_file = mod/beechat/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.captcha]
+file_filter = mod/captcha/languages/<lang>.php
+source_file = mod/captcha/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.cic_theme]
+file_filter = mod/cic_theme/languages/<lang>.php
+source_file = mod/cic_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.colorbox]
+file_filter = mod/colorbox/languages/<lang>.php
+source_file = mod/colorbox/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.crud]
+file_filter = mod/crud/languages/<lang>.php
+source_file = mod/crud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.curatedgroups]
+file_filter = mod/curatedgroups/languages/<lang>.php
+source_file = mod/curatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index_widgets]
+file_filter = mod/custom_index_widgets/languages/<lang>.php
+source_file = mod/custom_index_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dokuwiki]
+file_filter = mod/dokuwiki/languages/<lang>.php
+source_file = mod/dokuwiki/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-activitystreams]
+file_filter = mod/elgg-activitystreams/languages/<lang>.php
+source_file = mod/elgg-activitystreams/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-ostatus]
+file_filter = mod/elgg-ostatus/languages/<lang>.php
+source_file = mod/elgg-ostatus/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggpg]
+file_filter = mod/elggpg/languages/<lang>.php
+source_file = mod/elggpg/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-push]
+file_filter = mod/elgg-push/languages/<lang>.php
+source_file = mod/elgg-push/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.email_revalidate]
+file_filter = mod/email_revalidate/languages/<lang>.php
+source_file = mod/email_revalidate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.etherpad]
+file_filter = mod/etherpad/languages/<lang>.php
+source_file = mod/etherpad/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.favorites]
+file_filter = mod/favorites/languages/<lang>.php
+source_file = mod/favorites/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.federated-objects]
+file_filter = mod/federated-objects/languages/<lang>.php
+source_file = mod/federated-objects/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.friendrequest]
+file_filter = mod/friendrequest/languages/<lang>.php
+source_file = mod/friendrequest/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.gifts]
+file_filter = mod/gifts/languages/<lang>.php
+source_file = mod/gifts/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_alias]
+file_filter = mod/group_alias/languages/<lang>.php
+source_file = mod/group_alias/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_operators]
+file_filter = mod/group_operators/languages/<lang>.php
+source_file = mod/group_operators/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.identica]
+file_filter = mod/identica/languages/<lang>.php
+source_file = mod/identica/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.infinite_scroll]
+file_filter = mod/infinite_scroll/languages/<lang>.php
+source_file = mod/infinite_scroll/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.landing]
+file_filter = mod/landing/languages/<lang>.php
+source_file = mod/landing/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.lightpics]
+file_filter = mod/lightpics/languages/<lang>.php
+source_file = mod/lightpics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.linkup]
+file_filter = mod/linkup/languages/<lang>.php
+source_file = mod/linkup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.livestream]
+file_filter = mod/livestream/languages/<lang>.php
+source_file = mod/livestream/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.microthemes]
+file_filter = mod/microthemes/languages/<lang>.php
+source_file = mod/microthemes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.n1_theme]
+file_filter = mod/n1_theme/languages/<lang>.php
+source_file = mod/n1_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_client]
+file_filter = mod/openid_client/languages/<lang>.php
+source_file = mod/openid_client/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.opensearch]
+file_filter = mod/opensearch/languages/<lang>.php
+source_file = mod/opensearch/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile_widgets]
+file_filter = mod/profile_widgets/languages/<lang>.php
+source_file = mod/profile_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.proposals]
+file_filter = mod/proposals/languages/<lang>.php
+source_file = mod/proposals/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.registrationterms]
+file_filter = mod/registrationterms/languages/<lang>.php
+source_file = mod/registrationterms/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.relatedgroups]
+file_filter = mod/relatedgroups/languages/<lang>.php
+source_file = mod/relatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.river_privacy]
+file_filter = mod/river_privacy/languages/<lang>.php
+source_file = mod/river_privacy/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simple_faq]
+file_filter = mod/simple_faq/languages/<lang>.php
+source_file = mod/simple_faq/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simplepie]
+file_filter = mod/simplepie/languages/<lang>.php
+source_file = mod/simplepie/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.spotlight]
+file_filter = mod/spotlight/languages/<lang>.php
+source_file = mod/spotlight/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.subgroups]
+file_filter = mod/subgroups/languages/<lang>.php
+source_file = mod/subgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.suicide]
+file_filter = mod/suicide/languages/<lang>.php
+source_file = mod/suicide/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tasks]
+file_filter = mod/tasks/languages/<lang>.php
+source_file = mod/tasks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.threads]
+file_filter = mod/threads/languages/<lang>.php
+source_file = mod/threads/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tinymce]
+file_filter = mod/tinymce/languages/<lang>.php
+source_file = mod/tinymce/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyadmin]
+file_filter = mod/uservalidationbyadmin/languages/<lang>.php
+source_file = mod/uservalidationbyadmin/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.videolist]
+file_filter = mod/videolist/languages/<lang>.php
+source_file = mod/videolist/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_server]
+file_filter = mod/openid_server/languages/<lang>.php
+source_file = mod/openid_server/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.event_calendar]
+file_filter = mod/event_calendar/languages/<lang>.php
+source_file = mod/event_calendar/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
diff --git a/CHANGES.txt b/CHANGES.txt
index 7a3422d7d..f6974a3ae 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,287 @@
+Version 1.8.18
+(January 11, 2014 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Juho Jaakkola
+ * Steve Clay
+
+ Bugfixes:
+ * Fixes notify_user() broken in 1.8.17
+
+
+Version 1.8.17
+(January 1, 2014 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Ed Lyons
+ * Evan Winslow
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Juho Jaakkola
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Fixes:
+ * Specially-crafted request could return the contents of sensitive files.
+ * Reflected XSS attack was possible against 1.8 systems.
+ * The cryptographic key used for various purposes may have been generated with weak entropy, particularly on Windows.
+
+ Bugfixes:
+ * URLs with non-ASCII usernames again work
+ * Floated images are now properly cleared in content areas
+ * The activity page title now matches the document title
+ * Search again supports multiple comments on the same entity
+ * Blog archive sidebar now reverse chronological
+ * URLs with matching parens can now be auto-linked
+ * Log browser links for users now work
+ * Disabling over 50 objects should no longer result in an infinite loop
+ * Radio/checkbox inputs no longer have border radius (for IE10)
+ * User picker: the Only Friends checkbox again works
+ * Group bookmarklet no longer shown to non-members
+ * Widget reordering fixed when moving across columns
+ * Refuse to deactivate plugins needed as dependencies
+
+ Enhancements:
+ * Group member listings are ordered by name
+ * The system_log table can now store IPv6 addresses
+ * Web services auth_gettoken() now accepts email address
+ * List functions: no need to specify pagination for unlimited queries
+ * Htmlawed was upgraded to 1.1.16
+
+
+Version 1.8.16
+(June 25, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Jeff Tilson
+ * Jerome Bakker
+ * Paweł Sroka
+ * Steve Clay
+
+ Security Fixes:
+ * Fixed avatar removal bug (thanks to Jerome Bakker for the first report of this)
+
+ Bugfixes:
+ * Fixed infinite loop when deleting/disabling an entity with > 50 annotations
+ * Fixed deleting log tables in log rotate plugin
+ * Added full text index for groups if missing
+ * Added workaround for IE8 and jumping user avatar
+ * Fixed pagination for members pages
+ * Fixed several internal cache issues
+ * Plus many more bug fixes
+
+
+Version 1.8.15
+(April 23, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Cash Costello
+ * Ismayil Khayredinov
+ * Jeff Tilson
+ * Juho Jaakkola
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+ * Tom Voorneveld
+
+ Bugfixes:
+ * Not displaying http:// on profiles when website isn't set
+ * Fixed pagination display issue for small screens
+ * Not hiding subpages of top level pages that have been deleted
+ * Stop corrupting JavaScript views with elgg deprecation messages
+ * Fixed out of memory error due to query cache
+ * Fixed bug preventing users authorizing Twitter account access
+ * Fixed friends access level for editing pages
+ * Fixed uploading files within the embed dialog
+
+ Enhancements:
+ * Added browser caching of language JS files
+ * Adding nofollow on user posted URLs for spam deterrence (thanks to Hellekin)
+ * Auto-registering views for simplecache when their URL is requested
+ * Display helpful message for those who have site URL configuration issues
+ * Can revert to a previous revision with pages plugin
+ * Site owners can turn off posting wire messages to Twitter
+ * Search results are sorted by relevance
+
+ Dropped Plugins:
+ * Twitter widget due to changes in Twitter API and terms of service
+ * OAuth API plugin due to conflicts with the Twitter API plugin
+
+
+Version 1.8.14
+(March 12, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Aday Talavera
+ * Brett Profitt
+ * Cash Costello
+ * Ed Lyons
+ * German Bortoli
+ * Hellekin Wolf
+ * iionly
+ * Jerome Bakker
+ * Luciano Lima
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Fixes:
+ * Fixed a XSS vulnerability when accepting URLs on user profiles
+ * Fixed bug that exposed subject lines of messages in inbox
+ * Added requirement for CSRF token for login
+
+ Bugfixes:
+ * Strip html tags from tag input
+ * Fixed several display issues for IE7
+ * Fixed several issues with blog drafts
+ * Fixed repeated token timeout errors
+ * Fixed JavaScript localization for non-English languages
+
+ Enhancements:
+ * Web services fall back to json if the viewtype is invalid
+
+
+Version 1.8.13
+(January 29, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Cash Costello
+ * Juho Jaakkola
+ * Kevin Jardine
+ * Krzysztof Różalski
+ * Steve Clay
+
+ Security Fixes:
+ * Added validation of Twitter usernames in Twitter widget
+
+ Bugfixes:
+ * CLI usages with walled garden fixed
+ * Upgrading from < 1.8 to 1.8 fixed
+ * Default widgets fixed
+ * Quotes in object titles no longer result in "qout" in URLs
+ * List of my groups is ordered now
+ * Language string river:comment:object:default is defined now
+ * Added language string for comments: generic_comment:on
+
+ Enhancements:
+ * Added confirm dialog for resetting profile fields (adds language string profile:resetdefault:confirm)
+
+
+Version 1.8.12
+(January 4th, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Bugfixes:
+ * Added an AJAX workaround for the rewrite test.
+ * Code cleanup to prevent some notices and warnings.
+ * Removed "original_order" in menu item anchor tags.
+ * Site menu's selected item correctly persists through content pages.
+ * Static caches rewritten and improved to prevent stale data being returned.
+ * Installation: Invalid characters in admin username are handled correctly.
+ * Messages: Fixed inbox link in email notifications.
+ * The Wire: Fixed objects not displaying correctly when upgrading from 1.7.
+
+ Enhancements:
+ * Performance improvements and improved caching in entity loading.
+ * Added upgrade locking to prevent concurrent upgrade attempts.
+ * Replaced xml_to_object() and autop() with GPL / MIT-compatible code.
+ * Error messages (register_error()) only fade after being clicked.
+ * Groups: Added a sidebar entry to display membership status and a link to
+ group notification settings.
+ * Groups: Added pending membership and invitation requests to the sidebar.
+ * Groups: Better redirection for invisible and closed groups.
+ * Search: User profile fields are searched.
+ * Pages: Subpages can be reassigned to new parent pages.
+ * Twitter: Login with twitter supports persistent login and correctly forwards
+ after login.
+
+
+Version 1.8.11
+(December 5th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Bugfix:
+ * Fixed fatal error in group creation form
+
+
+Version 1.8.10
+(December 4th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Krzysztof Różalski
+ * Lars Hærvig
+ * Paweł Sroka
+ * RiverVanRain
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Cached metadata respects access restrictions to fix problems with profile
+ field display.
+ * Group RSS feeds are restricted to valid entities
+
+ Enhancements:
+ * UX: Added a list of Administrators in the admin area
+ * UX: Limiting message board activity stream entries to excerpts
+ * Performance: Prefetching river entries
+ * Performance: Plugin entities are cached
+
+ Bugfixes:
+ * Removed superfluous commas in JS files to fix IE compatibility.
+ * API: Fixed Twitter API.
+ * Performance: Outputting valid ETags and expires headers.
+
+
+Version 1.8.9
+(November 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Evan Winslow
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Sample CLI installer cannot break site
+ * Removed XSS vulnerabilities in titles and user profiles
+
+ Enhancements:
+ * UX: A group's owner can transfer ownership to another member
+ * UX: Search queries persist in the search box
+ * Several (X)HTML validation improvements
+ * Improved performance via more aggressive entity and metadata caching
+ * BC: 1.7 group profile URLs forward correctly
+
+ Bugfixes:
+ * UX: Titles containing HTML tokens are never mangled
+ * UX: Empty user profile values saved properly
+ * UX: Blog creator always mentioned in activity stream (not user who published it)
+ * UI: Fixed ordering of registered menu items in some cases
+ * UI: Embed dialog does not break file inputs
+ * UI: Datepicker now respects language
+ * UI: More reliable display of access input in widgets
+ * UI: Group edit form is sticky
+ * UI: Site categories are sticky in forms
+ * API: Language fallback works in Javascript
+ * API: Fallback to default viewtype if invalid one given
+ * API: Notices reported for missing language keys
+ * Memcache now safe to use; never bypasses access control
+ * BC: upgrade shows comments consistently in activity stream
+
+
Version 1.8.8
(July 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 0163757e7..a8e74d3a4 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -1,6 +1,7 @@
The following have made notable contributions to the Elgg Project.
(List in alphabetical order.)
+Steve Clay - http://www.mrclay.org/, https://twitter.com/mrclay_org
Cash Costello - cash@elgg.org, http://cashcostello.com/
@@ -20,10 +21,10 @@ Tom Read - MITRE http://mitre.org/
Justin Richer - MITRE http://mitre.org/
-Dave Tosh - davidgtosh@gmail.com, http://twitter.com/davetosh
+Dave Tosh - davidgtosh@gmail.com, http://twitter.com/davetosh
Ben Werdmuller - http://benwerd.com/
-Nicholas Whitt - nick.whitt@gmail.com, http://twitter.com/nogoodnick
+Nicholas Whitt - nick.whitt@gmail.com, http://twitter.com/nogoodnick
Evan Winslow - evan@elgg.org, http://evanwinslow.com/
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index 76781f25a..262515386 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -6,6 +6,7 @@ The MITRE Corportation (jricher@mitre.org)
Curverider Ltd (info@elgg.com)
Individuals:
+Steve Clay (steve@mrclay.org)
Cash Costello (cash.costello@gmail.com)
Brett Profitt (brett.profitt@gmail.com)
Dave Tosh (davidgtosh@gmail.com)
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..a1b3e1cbf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+Lorea
+=====
+
+(Re-)Taking the Networks!
+
+The [lorea](https://lorea.org) code aims at providing individuals and teams with privacy-aware, security-conscious, and user-controlled-data collaborative tools over the Web, and around it.
+
+The main application is based on [Elgg](http://elgg.org), a PHP-based social networking platform. Lorea extends it with plugins to provide better privacy features, including strong encryption, *OStatus-based federation* with other Lorea/Elgg installations and OStatus-compliant projects, etc.
+
+It also integrates other popular technologies such as [DokuWiki](http://www.dokuwiki.org), [Etherpad](http://etherpad.org), [XMPP](http://xmpp.org), etc., and provides *GPG-encrypted mailing-lists* to groups.
+
+### Installation
+
+Our code is divided in two git repositories: elgg and lorea-plugins. You can get it using the following commands.
+
+<pre>
+$ git clone git://gitorious.org/lorea/elgg.git
+$ cd elgg
+$ git remote add lorea-plugins git://gitorious.org/lorea/lorea-plugins.git
+$ git pull lorea-plugins master
+</pre>
+
+You can update the code to the latest release using:
+
+<pre>
+$ git pull origin master
+$ git pull lorea-plugins master
+</pre>
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 5d9261ee4..000000000
--- a/README.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-Elgg
-Copyright (c) 2008-2012 See COPYRIGHT.txt
-
-See CONTRIBUTORS.txt for development credits.
-
-Elgg is managed by the Elgg Foundation, a nonprofit organization that was
-founded to govern, protect, and promote the Elgg open source social network
-engine. The Foundation aims to provide a stable, commercially and
-individually independent organization that operates in the best interest of Elgg
-as an open source project.
-
-The project site can be found at http://elgg.org/
-
-The Elgg project was started in 2004 by:
-Ben Werdmuller <ben@benwerd.com, http://benwerd.com> and
-Dave Tosh <davidgtosh@gmail.com>
-
-Elgg is released under the GNU General Public License (GPL) Version 2 and the
-Massachusetts Institute of Technology (MIT) License. See LICENSE.txt
-in the root of the package you downloaded.
-
-For installation instructions, see INSTALL.txt.
-
-For upgrade instructions, see UPGRADE.txt. \ No newline at end of file
diff --git a/_graphics/walled_garden/one_column_bottom.png b/_graphics/walled_garden/one_column_bottom.png
index 1dfd7f8ad..bd2296896 100644
--- a/_graphics/walled_garden/one_column_bottom.png
+++ b/_graphics/walled_garden/one_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/one_column_top.png b/_graphics/walled_garden/one_column_top.png
index 429a88b75..dc8de438a 100644
--- a/_graphics/walled_garden/one_column_top.png
+++ b/_graphics/walled_garden/one_column_top.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_bottom.png b/_graphics/walled_garden/two_column_bottom.png
index 8aeceeeee..21e076991 100644
--- a/_graphics/walled_garden/two_column_bottom.png
+++ b/_graphics/walled_garden/two_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_top.png b/_graphics/walled_garden/two_column_top.png
index c28b3f630..cd71a4262 100644
--- a/_graphics/walled_garden/two_column_top.png
+++ b/_graphics/walled_garden/two_column_top.png
Binary files differ
diff --git a/actions/admin/site/regenerate_secret.php b/actions/admin/site/regenerate_secret.php
new file mode 100644
index 000000000..3112fb5f3
--- /dev/null
+++ b/actions/admin/site/regenerate_secret.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Generate a new site secret
+ */
+
+init_site_secret();
+elgg_reset_system_cache();
+
+system_message(elgg_echo('admin:site:secret_regenerated'));
+
+forward(REFERER);
diff --git a/actions/admin/site/unlock_upgrade.php b/actions/admin/site/unlock_upgrade.php
new file mode 100644
index 000000000..b625b1d26
--- /dev/null
+++ b/actions/admin/site/unlock_upgrade.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Unlocks the upgrade script
+ */
+
+if (_elgg_upgrade_is_locked()) {
+ _elgg_upgrade_unlock();
+}
+system_message(elgg_echo('upgrade:unlock:success'));
+forward(REFERER);
diff --git a/actions/admin/site/update_advanced.php b/actions/admin/site/update_advanced.php
index 0fd8d1f35..4888b0a8d 100644
--- a/actions/admin/site/update_advanced.php
+++ b/actions/admin/site/update_advanced.php
@@ -14,10 +14,10 @@ if ($site = elgg_get_site_entity()) {
throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
}
- $site->url = get_input('wwwroot');
+ $site->url = rtrim(get_input('wwwroot', '', false), '/') . '/';
- datalist_set('path', sanitise_filepath(get_input('path')));
- $dataroot = sanitise_filepath(get_input('dataroot'));
+ datalist_set('path', sanitise_filepath(get_input('path', '', false)));
+ $dataroot = sanitise_filepath(get_input('dataroot', '', false));
// check for relative paths
if (stripos(PHP_OS, 'win') === 0) {
diff --git a/actions/admin/site/update_basic.php b/actions/admin/site/update_basic.php
index 97d258b65..9765182cc 100644
--- a/actions/admin/site/update_basic.php
+++ b/actions/admin/site/update_basic.php
@@ -16,7 +16,7 @@ if ($site = elgg_get_site_entity()) {
}
$site->description = get_input('sitedescription');
- $site->name = get_input('sitename');
+ $site->name = strip_tags(get_input('sitename'));
$site->email = get_input('siteemail');
$site->save();
diff --git a/actions/avatar/remove.php b/actions/avatar/remove.php
index cd38e456a..9cb40a760 100644
--- a/actions/avatar/remove.php
+++ b/actions/avatar/remove.php
@@ -3,32 +3,34 @@
* Avatar remove action
*/
-$guid = get_input('guid');
-$user = get_entity($guid);
-if ($user) {
- // Delete all icons from diskspace
- $icon_sizes = elgg_get_config('icon_sizes');
- foreach ($icon_sizes as $name => $size_info) {
- $file = new ElggFile();
- $file->owner_guid = $guid;
- $file->setFilename("profile/{$guid}{$name}.jpg");
- $filepath = $file->getFilenameOnFilestore();
- if (!$file->delete()) {
- elgg_log("Avatar file remove failed. Remove $filepath manually, please.", 'WARNING');
- }
- }
-
- // Remove crop coords
- unset($user->x1);
- unset($user->x2);
- unset($user->y1);
- unset($user->y2);
-
- // Remove icon
- unset($user->icontime);
- system_message(elgg_echo('avatar:remove:success'));
-} else {
+$user_guid = get_input('guid');
+$user = get_user($user_guid);
+
+if (!$user || !$user->canEdit()) {
register_error(elgg_echo('avatar:remove:fail'));
+ forward(REFERER);
}
+// Delete all icons from diskspace
+$icon_sizes = elgg_get_config('icon_sizes');
+foreach ($icon_sizes as $name => $size_info) {
+ $file = new ElggFile();
+ $file->owner_guid = $user_guid;
+ $file->setFilename("profile/{$user_guid}{$name}.jpg");
+ $filepath = $file->getFilenameOnFilestore();
+ if (!$file->delete()) {
+ elgg_log("Avatar file remove failed. Remove $filepath manually, please.", 'WARNING');
+ }
+}
+
+// Remove crop coords
+unset($user->x1);
+unset($user->x2);
+unset($user->y1);
+unset($user->y2);
+
+// Remove icon
+unset($user->icontime);
+
+system_message(elgg_echo('avatar:remove:success'));
forward(REFERER);
diff --git a/actions/comments/delete.php b/actions/comments/delete.php
index f2c058ff4..c6b481da4 100644
--- a/actions/comments/delete.php
+++ b/actions/comments/delete.php
@@ -5,11 +5,6 @@
* @package Elgg
*/
-// Ensure we're logged in
-if (!elgg_is_logged_in()) {
- forward();
-}
-
// Make sure we can get the comment in question
$annotation_id = (int) get_input('annotation_id');
$comment = elgg_get_annotation_from_id($annotation_id);
diff --git a/actions/friends/collections/add.php b/actions/friends/collections/add.php
index 9dc17b37e..e63a149f7 100644
--- a/actions/friends/collections/add.php
+++ b/actions/friends/collections/add.php
@@ -6,7 +6,7 @@
* @subpackage Friends.Collections
*/
-$collection_name = get_input('collection_name');
+$collection_name = htmlspecialchars(get_input('collection_name', '', false), ENT_QUOTES, 'UTF-8');
$friends = get_input('friends_collection');
if (!$collection_name) {
diff --git a/actions/login.php b/actions/login.php
index ea7fb3508..bd7f91299 100644
--- a/actions/login.php
+++ b/actions/login.php
@@ -7,9 +7,8 @@
*/
// set forward url
-if (isset($_SESSION['last_forward_from']) && $_SESSION['last_forward_from']) {
+if (!empty($_SESSION['last_forward_from'])) {
$forward_url = $_SESSION['last_forward_from'];
- unset($_SESSION['last_forward_from']);
} elseif (get_input('returntoreferer')) {
$forward_url = REFERER;
} else {
@@ -19,7 +18,7 @@ if (isset($_SESSION['last_forward_from']) && $_SESSION['last_forward_from']) {
$username = get_input('username');
$password = get_input('password', null, false);
-$persistent = get_input("persistent", false);
+$persistent = (bool) get_input("persistent");
$result = false;
if (empty($username) || empty($password)) {
@@ -62,5 +61,9 @@ if ($user->language) {
$message = elgg_echo('loginok');
}
+if (isset($_SESSION['last_forward_from'])) {
+ unset($_SESSION['last_forward_from']);
+}
+
system_message($message);
forward($forward_url);
diff --git a/actions/profile/edit.php b/actions/profile/edit.php
index 8ca60f246..e1f066e82 100644
--- a/actions/profile/edit.php
+++ b/actions/profile/edit.php
@@ -4,6 +4,8 @@
*
*/
+elgg_make_sticky_form('profile:edit');
+
$guid = get_input('guid');
$owner = get_entity($guid);
@@ -25,7 +27,7 @@ if (!is_array($accesslevel)) {
* wrapper for recursive array walk decoding
*/
function profile_array_decoder(&$v) {
- $v = html_entity_decode($v, ENT_COMPAT, 'UTF-8');
+ $v = _elgg_html_decode($v);
}
$profile_fields = elgg_get_config('profile_fields');
@@ -37,7 +39,7 @@ foreach ($profile_fields as $shortname => $valuetype) {
if (is_array($value)) {
array_walk_recursive($value, 'profile_array_decoder');
} else {
- $value = html_entity_decode($value, ENT_COMPAT, 'UTF-8');
+ $value = _elgg_html_decode($value);
}
// limit to reasonable sizes
@@ -48,10 +50,14 @@ foreach ($profile_fields as $shortname => $valuetype) {
forward(REFERER);
}
+ if ($value && $valuetype == 'url' && !preg_match('~^https?\://~i', $value)) {
+ $value = "http://$value";
+ }
+
if ($valuetype == 'tags') {
$value = string_to_tag_array($value);
}
-
+
$input[$shortname] = $value;
}
@@ -71,24 +77,30 @@ if (sizeof($input) > 0) {
foreach ($input as $shortname => $value) {
$options = array(
'guid' => $owner->guid,
- 'metadata_name' => $shortname
+ 'metadata_name' => $shortname,
+ 'limit' => false
);
elgg_delete_metadata($options);
- if (isset($accesslevel[$shortname])) {
- $access_id = (int) $accesslevel[$shortname];
- } else {
- // this should never be executed since the access level should always be set
- $access_id = ACCESS_DEFAULT;
- }
- if (is_array($value)) {
- $i = 0;
- foreach ($value as $interval) {
- $i++;
- $multiple = ($i > 1) ? TRUE : FALSE;
- create_metadata($owner->guid, $shortname, $interval, 'text', $owner->guid, $access_id, $multiple);
+
+ if (!is_null($value) && ($value !== '')) {
+ // only create metadata for non empty values (0 is allowed) to prevent metadata records with empty string values #4858
+
+ if (isset($accesslevel[$shortname])) {
+ $access_id = (int) $accesslevel[$shortname];
+ } else {
+ // this should never be executed since the access level should always be set
+ $access_id = ACCESS_DEFAULT;
+ }
+ if (is_array($value)) {
+ $i = 0;
+ foreach ($value as $interval) {
+ $i++;
+ $multiple = ($i > 1) ? TRUE : FALSE;
+ create_metadata($owner->guid, $shortname, $interval, 'text', $owner->guid, $access_id, $multiple);
+ }
+ } else {
+ create_metadata($owner->getGUID(), $shortname, $value, 'text', $owner->getGUID(), $access_id);
}
- } else {
- create_metadata($owner->getGUID(), $shortname, $value, 'text', $owner->getGUID(), $access_id);
}
}
@@ -97,6 +109,7 @@ if (sizeof($input) > 0) {
// Notify of profile update
elgg_trigger_event('profileupdate', $owner->type, $owner);
+ elgg_clear_sticky_form('profile:edit');
system_message(elgg_echo("profile:saved"));
}
diff --git a/actions/register.php b/actions/register.php
index f23d5b381..73926232c 100644
--- a/actions/register.php
+++ b/actions/register.php
@@ -30,8 +30,6 @@ if (elgg_get_config('allow_registration')) {
$guid = register_user($username, $password, $name, $email, false, $friend_guid, $invitecode);
if ($guid) {
- elgg_clear_sticky_form('register');
-
$new_user = get_entity($guid);
// allow plugins to respond to self registration
@@ -47,13 +45,16 @@ if (elgg_get_config('allow_registration')) {
// @todo should registration be allowed no matter what the plugins return?
if (!elgg_trigger_plugin_hook('register', 'user', $params, TRUE)) {
+ $ia = elgg_set_ignore_access(true);
$new_user->delete();
+ elgg_set_ignore_access($ia);
// @todo this is a generic messages. We could have plugins
// throw a RegistrationException, but that is very odd
// for the plugin hooks system.
throw new RegistrationException(elgg_echo('registerbad'));
}
+ elgg_clear_sticky_form('register');
system_message(elgg_echo("registerok", array(elgg_get_site_entity()->name)));
// if exception thrown, this probably means there is a validation
@@ -76,4 +77,4 @@ if (elgg_get_config('allow_registration')) {
register_error(elgg_echo('registerdisabled'));
}
-forward(REFERER); \ No newline at end of file
+forward(REFERER);
diff --git a/documentation/info/manifest.xml b/documentation/info/manifest.xml
index 494158481..4fd4be8ce 100644
--- a/documentation/info/manifest.xml
+++ b/documentation/info/manifest.xml
@@ -7,7 +7,7 @@
<description>This is a longer, more interesting description of my plugin, its features, and other important information.</description>
<website>http://www.elgg.org/</website>
<repository>https://github.com/Elgg/Elgg</repository>
- <bugtracker>http://trac.elgg.org</bugtracker>
+ <bugtracker>https://github.com/Elgg/Elgg/issues</bugtracker>
<donations>http://elgg.org/supporter.php</donations>
<copyright>(C) Elgg 2011</copyright>
<license>GNU General Public License version 2</license>
diff --git a/engine/classes/ElggAccess.php b/engine/classes/ElggAccess.php
index 6f8d9bb4b..0aed477fc 100644
--- a/engine/classes/ElggAccess.php
+++ b/engine/classes/ElggAccess.php
@@ -16,6 +16,7 @@ class ElggAccess {
*/
private $ignore_access;
+ // @codingStandardsIgnoreStart
/**
* Get current ignore access setting.
*
@@ -26,6 +27,7 @@ class ElggAccess {
elgg_deprecated_notice('ElggAccess::get_ignore_access() is deprecated by ElggAccess::getIgnoreAccess()', 1.8);
return $this->getIgnoreAccess();
}
+ // @codingStandardsIgnoreEnd
/**
* Get current ignore access setting.
@@ -36,6 +38,7 @@ class ElggAccess {
return $this->ignore_access;
}
+ // @codingStandardsIgnoreStart
/**
* Set ignore access.
*
@@ -49,6 +52,7 @@ class ElggAccess {
elgg_deprecated_notice('ElggAccess::set_ignore_access() is deprecated by ElggAccess::setIgnoreAccess()', 1.8);
return $this->setIgnoreAccess($ignore);
}
+ // @codingStandardsIgnoreEnd
/**
* Set ignore access.
diff --git a/engine/classes/ElggAnnotation.php b/engine/classes/ElggAnnotation.php
index 511b5151f..175e7049d 100644
--- a/engine/classes/ElggAnnotation.php
+++ b/engine/classes/ElggAnnotation.php
@@ -11,6 +11,9 @@
* @package Elgg.Core
* @subpackage DataModel.Annotations
* @link http://docs.elgg.org/DataModel/Annotations
+ *
+ * @property string $value_type
+ * @property string $enabled
*/
class ElggAnnotation extends ElggExtender {
@@ -56,6 +59,8 @@ class ElggAnnotation extends ElggExtender {
* Save this instance
*
* @return int an object id
+ *
+ * @throws IOException
*/
function save() {
if ($this->id > 0) {
diff --git a/engine/classes/ElggAttributeLoader.php b/engine/classes/ElggAttributeLoader.php
new file mode 100644
index 000000000..ffc80b02d
--- /dev/null
+++ b/engine/classes/ElggAttributeLoader.php
@@ -0,0 +1,248 @@
+<?php
+
+/**
+ * Loads ElggEntity attributes from DB or validates those passed in via constructor
+ *
+ * @access private
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ */
+class ElggAttributeLoader {
+
+ /**
+ * @var array names of attributes in all entities
+ */
+ protected static $primary_attr_names = array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'owner_guid',
+ 'container_guid',
+ 'site_guid',
+ 'access_id',
+ 'time_created',
+ 'time_updated',
+ 'last_action',
+ 'enabled',
+ );
+
+ /**
+ * @var array names of secondary attributes required for the entity
+ */
+ protected $secondary_attr_names = array();
+
+ /**
+ * @var string entity type (not class) required for fetched primaries
+ */
+ protected $required_type;
+
+ /**
+ * @var array
+ */
+ protected $initialized_attributes;
+
+ /**
+ * @var string class of object being loaded
+ */
+ protected $class;
+
+ /**
+ * @var bool should access control be considered when fetching entity?
+ */
+ public $requires_access_control = true;
+
+ /**
+ * @var callable function used to load attributes from {prefix}entities table
+ */
+ public $primary_loader = 'get_entity_as_row';
+
+ /**
+ * @var callable function used to load attributes from secondary table
+ */
+ public $secondary_loader = '';
+
+ /**
+ * @var callable function used to load all necessary attributes
+ */
+ public $full_loader = '';
+
+ /**
+ * Constructor
+ *
+ * @param string $class class of object being loaded
+ * @param string $required_type entity type this is being used to populate
+ * @param array $initialized_attrs attributes after initializeAttributes() has been run
+ * @throws InvalidArgumentException
+ */
+ public function __construct($class, $required_type, array $initialized_attrs) {
+ if (!is_string($class)) {
+ throw new InvalidArgumentException('$class must be a class name.');
+ }
+ $this->class = $class;
+
+ if (!is_string($required_type)) {
+ throw new InvalidArgumentException('$requiredType must be a system entity type.');
+ }
+ $this->required_type = $required_type;
+
+ $this->initialized_attributes = $initialized_attrs;
+ unset($initialized_attrs['tables_split'], $initialized_attrs['tables_loaded']);
+ $all_attr_names = array_keys($initialized_attrs);
+ $this->secondary_attr_names = array_diff($all_attr_names, self::$primary_attr_names);
+ }
+
+ /**
+ * Get primary attributes missing that are missing
+ *
+ * @param stdClass $row Database row
+ * @return array
+ */
+ protected function isMissingPrimaries($row) {
+ return array_diff(self::$primary_attr_names, array_keys($row)) !== array();
+ }
+
+ /**
+ * Get secondary attributes that are missing
+ *
+ * @param stdClass $row Database row
+ * @return array
+ */
+ protected function isMissingSecondaries($row) {
+ return array_diff($this->secondary_attr_names, array_keys($row)) !== array();
+ }
+
+ /**
+ * Check that the type is correct
+ *
+ * @param stdClass $row Database row
+ * @return void
+ * @throws InvalidClassException
+ */
+ protected function checkType($row) {
+ if ($row['type'] !== $this->required_type) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($row['guid'], $this->class));
+ throw new InvalidClassException($msg);
+ }
+ }
+
+ /**
+ * Get all required attributes for the entity, validating any that are passed in. Returns empty array
+ * if can't be loaded (Check $failure_reason).
+ *
+ * This function splits loading between "primary" attributes (those in {prefix}entities table) and
+ * "secondary" attributes (e.g. those in {prefix}objects_entity), but can load all at once if a
+ * combined loader is available.
+ *
+ * @param mixed $row a row loaded from DB (array or stdClass) or a GUID
+ * @return array will be empty if failed to load all attributes (access control or entity doesn't exist)
+ *
+ * @throws InvalidArgumentException|LogicException|IncompleteEntityException
+ */
+ public function getRequiredAttributes($row) {
+ if (!is_array($row) && !($row instanceof stdClass)) {
+ // assume row is the GUID
+ $row = array('guid' => $row);
+ }
+ $row = (array) $row;
+ if (empty($row['guid'])) {
+ throw new InvalidArgumentException('$row must be or contain a GUID');
+ }
+
+ // these must be present to support isFullyLoaded()
+ foreach (array('tables_split', 'tables_loaded') as $key) {
+ if (isset($this->initialized_attributes[$key])) {
+ $row[$key] = $this->initialized_attributes[$key];
+ }
+ }
+
+ $was_missing_primaries = $this->isMissingPrimaries($row);
+ $was_missing_secondaries = $this->isMissingSecondaries($row);
+
+ // some types have a function to load all attributes at once, it should be faster
+ if (($was_missing_primaries || $was_missing_secondaries) && is_callable($this->full_loader)) {
+ $fetched = (array) call_user_func($this->full_loader, $row['guid']);
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ $this->checkType($row);
+ } else {
+ if ($was_missing_primaries) {
+ if (!is_callable($this->primary_loader)) {
+ throw new LogicException('Primary attribute loader must be callable');
+ }
+ if ($this->requires_access_control) {
+ $fetched = (array) call_user_func($this->primary_loader, $row['guid']);
+ } else {
+ $ignoring_access = elgg_set_ignore_access();
+ $fetched = (array) call_user_func($this->primary_loader, $row['guid']);
+ elgg_set_ignore_access($ignoring_access);
+ }
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ }
+
+ // We must test type before trying to load the secondaries so that InvalidClassException
+ // gets thrown. Otherwise the secondary loader will fail and return false.
+ $this->checkType($row);
+
+ if ($was_missing_secondaries) {
+ if (!is_callable($this->secondary_loader)) {
+ throw new LogicException('Secondary attribute loader must be callable');
+ }
+ $fetched = (array) call_user_func($this->secondary_loader, $row['guid']);
+ if (!$fetched) {
+ if ($row['type'] === 'site') {
+ // A special case is needed for sites: When vanilla ElggEntities are created and
+ // saved, these are stored w/ type "site", but with no sites_entity row. These
+ // are probably only created in the unit tests.
+ // @todo Don't save vanilla ElggEntities with type "site"
+
+ $row = $this->filterAddedColumns($row);
+ $row['guid'] = (int) $row['guid'];
+ return $row;
+ }
+ throw new IncompleteEntityException("Secondary loader failed to return row for {$row['guid']}");
+ }
+ $row = array_merge($row, $fetched);
+ }
+ }
+
+ $row = $this->filterAddedColumns($row);
+
+ // Note: If there are still missing attributes, we're running on a 1.7 or earlier schema. We let
+ // this pass so the upgrades can run.
+
+ // guid needs to be an int https://github.com/elgg/elgg/issues/4111
+ $row['guid'] = (int) $row['guid'];
+
+ return $row;
+ }
+
+ /**
+ * Filter out keys returned by the query which should not appear in the entity's attributes
+ *
+ * @param array $row All columns from the query
+ * @return array Columns acceptable for the entity's attributes
+ */
+ protected function filterAddedColumns($row) {
+ // make an array with keys as acceptable attribute names
+ $acceptable_attrs = self::$primary_attr_names;
+ array_splice($acceptable_attrs, count($acceptable_attrs), 0, $this->secondary_attr_names);
+ $acceptable_attrs = array_combine($acceptable_attrs, $acceptable_attrs);
+
+ // @todo remove these when #4584 is in place
+ $acceptable_attrs['tables_split'] = true;
+ $acceptable_attrs['tables_loaded'] = true;
+
+ foreach ($row as $key => $val) {
+ if (!isset($acceptable_attrs[$key])) {
+ unset($row[$key]);
+ }
+ }
+ return $row;
+ }
+}
diff --git a/engine/classes/ElggAutoP.php b/engine/classes/ElggAutoP.php
new file mode 100644
index 000000000..05842d1b2
--- /dev/null
+++ b/engine/classes/ElggAutoP.php
@@ -0,0 +1,336 @@
+<?php
+
+/**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV elements, Ps are only added when there would be at
+ * least two of them.
+ *
+ * @package Elgg.Core
+ * @subpackage Output
+ */
+class ElggAutoP {
+
+ public $encoding = 'UTF-8';
+
+ /**
+ * @var DOMDocument
+ */
+ protected $_doc = null;
+
+ /**
+ * @var DOMXPath
+ */
+ protected $_xpath = null;
+
+ protected $_blocks = 'address article area aside blockquote caption col colgroup dd
+ details div dl dt fieldset figure figcaption footer form h1 h2 h3 h4 h5 h6 header
+ hr hgroup legend map math menu nav noscript p pre section select style summary
+ table tbody td tfoot th thead tr ul ol option li';
+
+ /**
+ * @var array
+ */
+ protected $_inlines = 'a abbr audio b button canvas caption cite code command datalist
+ del dfn em embed i iframe img input ins kbd keygen label map mark meter object
+ output progress q rp rt ruby s samp script select small source span strong style
+ sub sup textarea time var video wbr';
+
+ /**
+ * Descend into these elements to add Ps
+ *
+ * @var array
+ */
+ protected $_descendList = 'article aside blockquote body details div footer form
+ header section';
+
+ /**
+ * Add Ps inside these elements
+ *
+ * @var array
+ */
+ protected $_alterList = 'article aside blockquote body details div footer header
+ section';
+
+ /** @var string */
+ protected $_unique = '';
+
+ /**
+ * Constructor
+ */
+ public function __construct() {
+ $this->_blocks = preg_split('@\\s+@', $this->_blocks);
+ $this->_descendList = preg_split('@\\s+@', $this->_descendList);
+ $this->_alterList = preg_split('@\\s+@', $this->_alterList);
+ $this->_inlines = preg_split('@\\s+@', $this->_inlines);
+ $this->_unique = md5(__FILE__);
+ }
+
+ /**
+ * Intance of class for singleton pattern.
+ * @var ElggAutoP
+ */
+ private static $instance;
+
+ /**
+ * Singleton pattern.
+ * @return ElggAutoP
+ */
+ public static function getInstance() {
+ $className = __CLASS__;
+ if (!(self::$instance instanceof $className)) {
+ self::$instance = new $className();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV, LI, TD, and TH elements, Ps are only added when their would be at
+ * least two of them.
+ *
+ * @param string $html snippet
+ * @return string|false output or false if parse error occurred
+ */
+ public function process($html) {
+ // normalize whitespace
+ $html = str_replace(array("\r\n", "\r"), "\n", $html);
+
+ // allows preserving entities untouched
+ $html = str_replace('&', $this->_unique . 'AMP', $html);
+
+ $this->_doc = new DOMDocument();
+
+ // parse to DOM, suppressing loadHTML warnings
+ // http://www.php.net/manual/en/domdocument.loadhtml.php#95463
+ libxml_use_internal_errors(true);
+
+ // Do not load entities. May be unnecessary, better safe than sorry
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ if (!$this->_doc->loadHTML("<html><meta http-equiv='content-type' "
+ . "content='text/html; charset={$this->encoding}'><body>{$html}</body>"
+ . "</html>")) {
+
+ libxml_disable_entity_loader($disable_load_entities);
+ return false;
+ }
+
+ libxml_disable_entity_loader($disable_load_entities);
+
+ $this->_xpath = new DOMXPath($this->_doc);
+ // start processing recursively at the BODY element
+ $nodeList = $this->_xpath->query('//body[1]');
+ $this->addParagraphs($nodeList->item(0));
+
+ // serialize back to HTML
+ $html = $this->_doc->saveHTML();
+
+ // Note: we create <autop> elements, which will later be converted to paragraphs
+
+ // split AUTOPs into multiples at /\n\n+/
+ $html = preg_replace('/(' . $this->_unique . 'NL){2,}/', '</autop><autop>', $html);
+ $html = str_replace(array($this->_unique . 'BR', $this->_unique . 'NL', '<br>'),
+ '<br />',
+ $html);
+ $html = str_replace('<br /></autop>', '</autop>', $html);
+
+ // re-parse so we can handle new AUTOP elements
+
+ // Do not load entities. May be unnecessary, better safe than sorry
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ if (!$this->_doc->loadHTML($html)) {
+ libxml_disable_entity_loader($disable_load_entities);
+ return false;
+ }
+
+ libxml_disable_entity_loader($disable_load_entities);
+
+ // must re-create XPath object after DOM load
+ $this->_xpath = new DOMXPath($this->_doc);
+
+ // strip AUTOPs that only have comments/whitespace
+ foreach ($this->_xpath->query('//autop') as $autop) {
+ /* @var DOMElement $autop */
+ $hasContent = false;
+ if (trim($autop->textContent) !== '') {
+ $hasContent = true;
+ } else {
+ foreach ($autop->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ $hasContent = true;
+ break;
+ }
+ }
+ }
+ if (!$hasContent) {
+ // mark to be later replaced w/ preg_replace (faster than moving nodes out)
+ $autop->setAttribute("r", "1");
+ }
+ }
+
+ // If a DIV contains a single AUTOP, remove it
+ foreach ($this->_xpath->query('//div') as $el) {
+ /* @var DOMElement $el */
+ $autops = $this->_xpath->query('./autop', $el);
+ if ($autops->length === 1) {
+ $firstAutop = $autops->item(0);
+ /* @var DOMElement $firstAutop */
+ $firstAutop->setAttribute("r", "1");
+ }
+ }
+
+ $html = $this->_doc->saveHTML();
+
+ // trim to the contents of BODY
+ $bodyStart = strpos($html, '<body>');
+ $bodyEnd = strpos($html, '</body>', $bodyStart + 6);
+ $html = substr($html, $bodyStart + 6, $bodyEnd - $bodyStart - 6);
+
+ // strip AUTOPs that should be removed
+ $html = preg_replace('@<autop r="1">(.*?)</autop>@', '\\1', $html);
+
+ // commit to converting AUTOPs to Ps
+ $html = str_replace('<autop>', "\n<p>", $html);
+ $html = str_replace('</autop>', "</p>\n", $html);
+
+ $html = str_replace('<br>', '<br />', $html);
+ $html = str_replace($this->_unique . 'AMP', '&', $html);
+ return $html;
+ }
+
+ /**
+ * Add P and BR elements as necessary
+ *
+ * @param DOMElement $el DOM element
+ * @return void
+ */
+ protected function addParagraphs(DOMElement $el) {
+ // no need to call recursively, just queue up
+ $elsToProcess = array($el);
+ $inlinesToProcess = array();
+ while ($el = array_shift($elsToProcess)) {
+ // if true, we can alter all child nodes, if not, we'll just call
+ // addParagraphs on each element in the descendInto list
+ $alterInline = in_array($el->nodeName, $this->_alterList);
+
+ // inside affected elements, we want to trim leading whitespace from
+ // the first text node
+ $ltrimFirstTextNode = true;
+
+ // should we open a new AUTOP element to move inline elements into?
+ $openP = true;
+ $autop = null;
+
+ // after BR, ignore a newline
+ $isFollowingBr = false;
+
+ $node = $el->firstChild;
+ while (null !== $node) {
+ if ($alterInline) {
+ if ($openP) {
+ $openP = false;
+ // create a P to move inline content into (this may be removed later)
+ $autop = $el->insertBefore($this->_doc->createElement('autop'), $node);
+ }
+ }
+
+ $isElement = ($node->nodeType === XML_ELEMENT_NODE);
+ if ($isElement) {
+ $isBlock = in_array($node->nodeName, $this->_blocks);
+ } else {
+ $isBlock = false;
+ }
+
+ if ($alterInline) {
+ $isText = ($node->nodeType === XML_TEXT_NODE);
+ $isLastInline = (! $node->nextSibling
+ || ($node->nextSibling->nodeType === XML_ELEMENT_NODE
+ && in_array($node->nextSibling->nodeName, $this->_blocks)));
+ if ($isElement) {
+ $isFollowingBr = ($node->nodeName === 'br');
+ }
+
+ if ($isText) {
+ $nodeText = $node->nodeValue;
+ if ($ltrimFirstTextNode) {
+ $nodeText = ltrim($nodeText);
+ $ltrimFirstTextNode = false;
+ }
+ if ($isFollowingBr && preg_match('@^[ \\t]*\\n[ \\t]*@', $nodeText, $m)) {
+ // if a user ends a line with <br>, don't add a second BR
+ $nodeText = substr($nodeText, strlen($m[0]));
+ }
+ if ($isLastInline) {
+ $nodeText = rtrim($nodeText);
+ }
+ $nodeText = str_replace("\n", $this->_unique . 'NL', $nodeText);
+ $tmpNode = $node;
+ $node = $node->nextSibling; // move loop to next node
+
+ // alter node in place, then move into AUTOP
+ $tmpNode->nodeValue = $nodeText;
+ $autop->appendChild($tmpNode);
+
+ continue;
+ }
+ }
+ if ($isBlock || ! $node->nextSibling) {
+ if ($isBlock) {
+ if (in_array($node->nodeName, $this->_descendList)) {
+ $elsToProcess[] = $node;
+ //$this->addParagraphs($node);
+ }
+ }
+ $openP = true;
+ $ltrimFirstTextNode = true;
+ }
+ if ($alterInline) {
+ if (! $isBlock) {
+ $tmpNode = $node;
+ if ($isElement && false !== strpos($tmpNode->textContent, "\n")) {
+ $inlinesToProcess[] = $tmpNode;
+ }
+ $node = $node->nextSibling;
+ $autop->appendChild($tmpNode);
+ continue;
+ }
+ }
+
+ $node = $node->nextSibling;
+ }
+ }
+
+ // handle inline nodes
+ // no need to recurse, just queue up
+ while ($el = array_shift($inlinesToProcess)) {
+ $ignoreLeadingNewline = false;
+ foreach ($el->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ if ($node->nodeValue === 'BR') {
+ $ignoreLeadingNewline = true;
+ } else {
+ $ignoreLeadingNewline = false;
+ if (false !== strpos($node->textContent, "\n")) {
+ $inlinesToProcess[] = $node;
+ }
+ }
+ continue;
+ } elseif ($node->nodeType === XML_TEXT_NODE) {
+ $text = $node->nodeValue;
+ if ($text[0] === "\n" && $ignoreLeadingNewline) {
+ $text = substr($text, 1);
+ $ignoreLeadingNewline = false;
+ }
+ $node->nodeValue = str_replace("\n", $this->_unique . 'BR', $text);
+ }
+ }
+ }
+ }
+}
diff --git a/engine/classes/ElggBatch.php b/engine/classes/ElggBatch.php
index c1a77a0d9..d810ea066 100644
--- a/engine/classes/ElggBatch.php
+++ b/engine/classes/ElggBatch.php
@@ -150,6 +150,20 @@ class ElggBatch
private $incrementOffset = true;
/**
+ * Entities that could not be instantiated during a fetch
+ *
+ * @var stdClass[]
+ */
+ private $incompleteEntities = array();
+
+ /**
+ * Total number of incomplete entities fetched
+ *
+ * @var int
+ */
+ private $totalIncompletes = 0;
+
+ /**
* Batches operations on any elgg_get_*() or compatible function that supports
* an options array.
*
@@ -222,16 +236,22 @@ class ElggBatch
}
/**
+ * Tell the process that an entity was incomplete during a fetch
+ *
+ * @param stdClass $row
+ *
+ * @access private
+ */
+ public function reportIncompleteEntity(stdClass $row) {
+ $this->incompleteEntities[] = $row;
+ }
+
+ /**
* Fetches the next chunk of results
*
* @return bool
*/
private function getNextResultsChunk() {
- // reset memory caches after first chunk load
- if ($this->chunkIndex > 0) {
- global $DB_QUERY_CACHE, $ENTITY_CACHE;
- $DB_QUERY_CACHE = $ENTITY_CACHE = array();
- }
// always reset results.
$this->results = array();
@@ -265,27 +285,47 @@ class ElggBatch
if ($this->incrementOffset) {
$offset = $this->offset + $this->retrievedResults;
} else {
- $offset = $this->offset;
+ $offset = $this->offset + $this->totalIncompletes;
}
$current_options = array(
'limit' => $limit,
- 'offset' => $offset
+ 'offset' => $offset,
+ '__ElggBatch' => $this,
);
$options = array_merge($this->options, $current_options);
- $getter = $this->getter;
- if (is_string($getter)) {
- $this->results = $getter($options);
- } else {
- $this->results = call_user_func_array($getter, array($options));
+ $this->incompleteEntities = array();
+ $this->results = call_user_func_array($this->getter, array($options));
+
+ $num_results = count($this->results);
+ $num_incomplete = count($this->incompleteEntities);
+
+ $this->totalIncompletes += $num_incomplete;
+
+ if ($this->incompleteEntities) {
+ // pad the front of the results with nulls representing the incompletes
+ array_splice($this->results, 0, 0, array_pad(array(), $num_incomplete, null));
+ // ...and skip past them
+ reset($this->results);
+ for ($i = 0; $i < $num_incomplete; $i++) {
+ next($this->results);
+ }
}
if ($this->results) {
$this->chunkIndex++;
- $this->resultIndex = 0;
- $this->retrievedResults += count($this->results);
+
+ // let the system know we've jumped past the nulls
+ $this->resultIndex = $num_incomplete;
+
+ $this->retrievedResults += ($num_results + $num_incomplete);
+ if ($num_results == 0) {
+ // This fetch was *all* incompletes! We need to fetch until we can either
+ // offer at least one row to iterate over, or give up.
+ return $this->getNextResultsChunk();
+ }
return true;
} else {
return false;
@@ -296,7 +336,8 @@ class ElggBatch
* Increment the offset from the original options array? Setting to
* false is required for callbacks that delete rows.
*
- * @param bool $increment
+ * @param bool $increment Set to false when deleting data
+ * @return void
*/
public function setIncrementOffset($increment = true) {
$this->incrementOffset = (bool) $increment;
diff --git a/engine/classes/ElggCache.php b/engine/classes/ElggCache.php
index 4317f4be9..909eab39b 100644
--- a/engine/classes/ElggCache.php
+++ b/engine/classes/ElggCache.php
@@ -21,6 +21,7 @@ abstract class ElggCache implements ArrayAccess {
$this->variables = array();
}
+ // @codingStandardsIgnoreStart
/**
* Set a cache variable.
*
@@ -35,6 +36,7 @@ abstract class ElggCache implements ArrayAccess {
elgg_deprecated_notice('ElggCache::set_variable() is deprecated by ElggCache::setVariable()', 1.8);
$this->setVariable($variable, $value);
}
+ // @codingStandardsIgnoreEnd
/**
* Set a cache variable.
@@ -52,6 +54,7 @@ abstract class ElggCache implements ArrayAccess {
$this->variables[$variable] = $value;
}
+ // @codingStandardsIgnoreStart
/**
* Get variables for this cache.
*
@@ -65,6 +68,7 @@ abstract class ElggCache implements ArrayAccess {
elgg_deprecated_notice('ElggCache::get_variable() is deprecated by ElggCache::getVariable()', 1.8);
return $this->getVariable($variable);
}
+ // @codingStandardsIgnoreEnd
/**
* Get variables for this cache.
diff --git a/engine/classes/ElggCrypto.php b/engine/classes/ElggCrypto.php
new file mode 100644
index 000000000..317d371e4
--- /dev/null
+++ b/engine/classes/ElggCrypto.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * ElggCrypto
+ *
+ * @package Elgg.Core
+ * @subpackage Crypto
+ *
+ * @access private
+ */
+class ElggCrypto {
+
+ /**
+ * Character set for temp passwords (no risk of embedded profanity/glyphs that look similar)
+ */
+ const CHARS_PASSWORD = 'bcdfghjklmnpqrstvwxyz2346789';
+
+ /**
+ * Generate a string of highly randomized bytes (over the full 8-bit range).
+ *
+ * @param int $length Number of bytes needed
+ * @return string Random bytes
+ *
+ * @author George Argyros <argyros.george@gmail.com>
+ * @copyright 2012, George Argyros. All rights reserved.
+ * @license Modified BSD
+ * @link https://github.com/GeorgeArgyros/Secure-random-bytes-in-PHP/blob/master/srand.php Original
+ *
+ * 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 <organization> 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 GEORGE ARGYROS 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.
+ */
+ public function getRandomBytes($length) {
+ /**
+ * Our primary choice for a cryptographic strong randomness function is
+ * openssl_random_pseudo_bytes.
+ */
+ $SSLstr = '4'; // http://xkcd.com/221/
+ if (function_exists('openssl_random_pseudo_bytes')
+ && (version_compare(PHP_VERSION, '5.3.4') >= 0 || substr(PHP_OS, 0, 3) !== 'WIN')) {
+ $SSLstr = openssl_random_pseudo_bytes($length, $strong);
+ if ($strong) {
+ return $SSLstr;
+ }
+ }
+
+ /**
+ * If mcrypt extension is available then we use it to gather entropy from
+ * the operating system's PRNG. This is better than reading /dev/urandom
+ * directly since it avoids reading larger blocks of data than needed.
+ * Older versions of mcrypt_create_iv may be broken or take too much time
+ * to finish so we only use this function with PHP 5.3.7 and above.
+ * @see https://bugs.php.net/bug.php?id=55169
+ */
+ if (function_exists('mcrypt_create_iv')
+ && (version_compare(PHP_VERSION, '5.3.7') >= 0 || substr(PHP_OS, 0, 3) !== 'WIN')) {
+ $str = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
+ if ($str !== false) {
+ return $str;
+ }
+ }
+
+ /**
+ * No build-in crypto randomness function found. We collect any entropy
+ * available in the PHP core PRNGs along with some filesystem info and memory
+ * stats. To make this data cryptographically strong we add data either from
+ * /dev/urandom or if its unavailable, we gather entropy by measuring the
+ * time needed to compute a number of SHA-1 hashes.
+ */
+ $str = '';
+ $bits_per_round = 2; // bits of entropy collected in each clock drift round
+ $msec_per_round = 400; // expected running time of each round in microseconds
+ $hash_len = 20; // SHA-1 Hash length
+ $total = $length; // total bytes of entropy to collect
+
+ $handle = @fopen('/dev/urandom', 'rb');
+ if ($handle && function_exists('stream_set_read_buffer')) {
+ @stream_set_read_buffer($handle, 0);
+ }
+
+ do {
+ $bytes = ($total > $hash_len) ? $hash_len : $total;
+ $total -= $bytes;
+
+ //collect any entropy available from the PHP system and filesystem
+ $entropy = rand() . uniqid(mt_rand(), true) . $SSLstr;
+ $entropy .= implode('', @fstat(@fopen(__FILE__, 'r')));
+ $entropy .= memory_get_usage() . getmypid();
+ $entropy .= serialize($_ENV) . serialize($_SERVER);
+ if (function_exists('posix_times')) {
+ $entropy .= serialize(posix_times());
+ }
+ if (function_exists('zend_thread_id')) {
+ $entropy .= zend_thread_id();
+ }
+
+ if ($handle) {
+ $entropy .= @fread($handle, $bytes);
+ } else {
+ // Measure the time that the operations will take on average
+ for ($i = 0; $i < 3; $i++) {
+ $c1 = microtime(true);
+ $var = sha1(mt_rand());
+ for ($j = 0; $j < 50; $j++) {
+ $var = sha1($var);
+ }
+ $c2 = microtime(true);
+ $entropy .= $c1 . $c2;
+ }
+
+ // Based on the above measurement determine the total rounds
+ // in order to bound the total running time.
+ $rounds = (int) ($msec_per_round * 50 / (int) (($c2 - $c1) * 1000000));
+
+ // Take the additional measurements. On average we can expect
+ // at least $bits_per_round bits of entropy from each measurement.
+ $iter = $bytes * (int) (ceil(8 / $bits_per_round));
+
+ for ($i = 0; $i < $iter; $i++) {
+ $c1 = microtime();
+ $var = sha1(mt_rand());
+ for ($j = 0; $j < $rounds; $j++) {
+ $var = sha1($var);
+ }
+ $c2 = microtime();
+ $entropy .= $c1 . $c2;
+ }
+ }
+
+ // We assume sha1 is a deterministic extractor for the $entropy variable.
+ $str .= sha1($entropy, true);
+
+ } while ($length > strlen($str));
+
+ if ($handle) {
+ @fclose($handle);
+ }
+
+ return substr($str, 0, $length);
+ }
+
+ /**
+ * Generate a random string of specified length.
+ *
+ * Uses supplied character list for generating the new string.
+ * If no character list provided - uses Base64 URL character set.
+ *
+ * @param int $length Desired length of the string
+ * @param string|null $chars Characters to be chosen from randomly. If not given, the Base64 URL
+ * charset will be used.
+ *
+ * @return string The random string
+ *
+ * @throws InvalidArgumentException
+ *
+ * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ *
+ * @see https://github.com/zendframework/zf2/blob/master/library/Zend/Math/Rand.php#L179
+ */
+ public static function getRandomString($length, $chars = null) {
+ if ($length < 1) {
+ throw new InvalidArgumentException('Length should be >= 1');
+ }
+
+ if (empty($chars)) {
+ $numBytes = ceil($length * 0.75);
+ $bytes = self::getRandomBytes($numBytes);
+ $string = substr(rtrim(base64_encode($bytes), '='), 0, $length);
+
+ // Base64 URL
+ return strtr($string, '+/', '-_');
+ }
+
+ $listLen = strlen($chars);
+
+ if ($listLen == 1) {
+ return str_repeat($chars, $length);
+ }
+
+ $bytes = self::getRandomBytes($length);
+ $pos = 0;
+ $result = '';
+ for ($i = 0; $i < $length; $i++) {
+ $pos = ($pos + ord($bytes[$i])) % $listLen;
+ $result .= $chars[$pos];
+ }
+
+ return $result;
+ }
+}
diff --git a/engine/classes/ElggData.php b/engine/classes/ElggData.php
index 3470ee1cf..4f843cde4 100644
--- a/engine/classes/ElggData.php
+++ b/engine/classes/ElggData.php
@@ -5,6 +5,9 @@
*
* @package Elgg.Core
* @subpackage DataModel
+ *
+ * @property int $owner_guid
+ * @property int $time_created
*/
abstract class ElggData implements
Loggable, // Can events related to this object class be logged
@@ -23,6 +26,7 @@ abstract class ElggData implements
*/
protected $attributes = array();
+ // @codingStandardsIgnoreStart
/**
* Initialise the attributes array.
*
@@ -33,16 +37,15 @@ abstract class ElggData implements
* Passing false returns false. Core constructors always pass false.
* Does nothing either way since attributes are initialized by the time
* this is called.
- * @return false|void False is
+ * @return void
* @deprecated 1.8 Use initializeAttributes()
*/
protected function initialise_attributes($pre18_api = true) {
if ($pre18_api) {
elgg_deprecated_notice('initialise_attributes() is deprecated by initializeAttributes()', 1.8);
- } else {
- return false;
}
}
+ // @codingStandardsIgnoreEnd
/**
* Initialize the attributes array.
@@ -111,7 +114,7 @@ abstract class ElggData implements
* @param string $name The attribute to set
* @param mixed $value The value to set it to
*
- * @return The success of your set funtion?
+ * @return bool The success of your set function?
*/
abstract protected function set($name, $value);
@@ -195,7 +198,7 @@ abstract class ElggData implements
*
* @see Iterator::current()
*
- * @return void
+ * @return mixed
*/
public function current() {
return current($this->attributes);
@@ -206,7 +209,7 @@ abstract class ElggData implements
*
* @see Iterator::key()
*
- * @return void
+ * @return string
*/
public function key() {
return key($this->attributes);
@@ -228,7 +231,7 @@ abstract class ElggData implements
*
* @see Iterator::valid()
*
- * @return void
+ * @return bool
*/
public function valid() {
return $this->valid;
@@ -266,12 +269,13 @@ abstract class ElggData implements
*
* @param mixed $key Name
*
- * @return void
+ * @return mixed
*/
public function offsetGet($key) {
if (array_key_exists($key, $this->attributes)) {
return $this->attributes[$key];
}
+ return null;
}
/**
diff --git a/engine/classes/ElggDiskFilestore.php b/engine/classes/ElggDiskFilestore.php
index f00376481..6e2354012 100644
--- a/engine/classes/ElggDiskFilestore.php
+++ b/engine/classes/ElggDiskFilestore.php
@@ -60,6 +60,7 @@ class ElggDiskFilestore extends ElggFilestore {
$path = substr($fullname, 0, $ls);
$name = substr($fullname, $ls);
+ // @todo $name is unused, remove it or do we need to fix something?
// Try and create the directory
try {
@@ -108,7 +109,7 @@ class ElggDiskFilestore extends ElggFilestore {
*
* @param resource $f File pointer resource
* @param int $length The number of bytes to read
- * @param inf $offset The number of bytes to start after
+ * @param int $offset The number of bytes to start after
*
* @return mixed Contents of file or false on fail.
*/
@@ -193,25 +194,33 @@ class ElggDiskFilestore extends ElggFilestore {
}
/**
- * Returns the filename as saved on disk for an ElggFile object
+ * Get the filename as saved on disk for an ElggFile object
+ *
+ * Returns an empty string if no filename set
*
* @param ElggFile $file File object
*
* @return string The full path of where the file is stored
+ * @throws InvalidParameterException
*/
public function getFilenameOnFilestore(ElggFile $file) {
- $owner = $file->getOwnerEntity();
- if (!$owner) {
- $owner = elgg_get_logged_in_user_entity();
+ $owner_guid = $file->getOwnerGuid();
+ if (!$owner_guid) {
+ $owner_guid = elgg_get_logged_in_user_guid();
}
- if (!$owner) {
+ if (!$owner_guid) {
$msg = elgg_echo('InvalidParameterException:MissingOwner',
array($file->getFilename(), $file->guid));
throw new InvalidParameterException($msg);
}
- return $this->dir_root . $this->makefileMatrix($owner->guid) . $file->getFilename();
+ $filename = $file->getFilename();
+ if (!$filename) {
+ return '';
+ }
+
+ return $this->dir_root . $this->makeFileMatrix($owner_guid) . $filename;
}
/**
@@ -219,7 +228,7 @@ class ElggDiskFilestore extends ElggFilestore {
*
* @param ElggFile $file File object
*
- * @return mixed
+ * @return string
*/
public function grabFile(ElggFile $file) {
return file_get_contents($file->getFilenameOnFilestore());
@@ -233,6 +242,9 @@ class ElggDiskFilestore extends ElggFilestore {
* @return bool
*/
public function exists(ElggFile $file) {
+ if (!$file->getFilename()) {
+ return false;
+ }
return file_exists($this->getFilenameOnFilestore($file));
}
@@ -246,12 +258,13 @@ class ElggDiskFilestore extends ElggFilestore {
*/
public function getSize($prefix = '', $container_guid) {
if ($container_guid) {
- return get_dir_size($this->dir_root . $this->makefileMatrix($container_guid) . $prefix);
+ return get_dir_size($this->dir_root . $this->makeFileMatrix($container_guid) . $prefix);
} else {
return false;
}
}
+ // @codingStandardsIgnoreStart
/**
* Create a directory $dirroot
*
@@ -266,6 +279,7 @@ class ElggDiskFilestore extends ElggFilestore {
return $this->makeDirectoryRoot($dirroot);
}
+ // @codingStandardsIgnoreEnd
/**
* Create a directory $dirroot
@@ -285,6 +299,7 @@ class ElggDiskFilestore extends ElggFilestore {
return true;
}
+ // @codingStandardsIgnoreStart
/**
* Multibyte string tokeniser.
*
@@ -315,30 +330,31 @@ class ElggDiskFilestore extends ElggFilestore {
} else {
return str_split($string);
}
-
- return false;
}
+ // @codingStandardsIgnoreEnd
+ // @codingStandardsIgnoreStart
/**
* Construct a file path matrix for an entity.
*
* @param int $identifier The guide of the entity to store the data under.
*
- * @return str The path where the entity's data will be stored.
+ * @return string The path where the entity's data will be stored.
* @deprecated 1.8 Use ElggDiskFilestore::makeFileMatrix()
*/
protected function make_file_matrix($identifier) {
elgg_deprecated_notice('ElggDiskFilestore::make_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
- return $this->makefileMatrix($identifier);
+ return $this->makeFileMatrix($identifier);
}
+ // @codingStandardsIgnoreEnd
/**
* Construct a file path matrix for an entity.
*
* @param int $guid The guide of the entity to store the data under.
*
- * @return str The path where the entity's data will be stored.
+ * @return string The path where the entity's data will be stored.
*/
protected function makeFileMatrix($guid) {
$entity = get_entity($guid);
@@ -352,6 +368,7 @@ class ElggDiskFilestore extends ElggFilestore {
return "$time_created/$entity->guid/";
}
+ // @codingStandardsIgnoreStart
/**
* Construct a filename matrix.
*
@@ -363,13 +380,14 @@ class ElggDiskFilestore extends ElggFilestore {
*
* @param int $guid The entity to contrust a matrix for
*
- * @return str The
+ * @return string The
*/
protected function user_file_matrix($guid) {
elgg_deprecated_notice('ElggDiskFilestore::user_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
return $this->makeFileMatrix($guid);
}
+ // @codingStandardsIgnoreEnd
/**
* Returns a list of attributes to save to the database when saving
diff --git a/engine/classes/ElggEntity.php b/engine/classes/ElggEntity.php
index 929abceb2..a563f6fad 100644
--- a/engine/classes/ElggEntity.php
+++ b/engine/classes/ElggEntity.php
@@ -24,7 +24,7 @@
*
* @package Elgg.Core
* @subpackage DataModel.Entities
- *
+ *
* @property string $type object, user, group, or site (read-only after save)
* @property string $subtype Further clarifies the nature of the entity (read-only after save)
* @property int $guid The unique identifier for this entity (read only)
@@ -34,6 +34,7 @@
* @property int $access_id Specifies the visibility level of this entity
* @property int $time_created A UNIX timestamp of when the entity was created (read-only, set on first save)
* @property int $time_updated A UNIX timestamp of when the entity was last updated (automatically updated on save)
+ * @property-read string $enabled
*/
abstract class ElggEntity extends ElggData implements
Notable, // Calendar interface
@@ -351,8 +352,8 @@ abstract class ElggEntity extends ElggData implements
'limit' => 0
);
// @todo in 1.9 make this return false if can't add metadata
- // http://trac.elgg.org/ticket/4520
- //
+ // https://github.com/elgg/elgg/issues/4520
+ //
// need to remove access restrictions right now to delete
// because this is the expected behavior
$ia = elgg_set_ignore_access(true);
@@ -374,12 +375,11 @@ abstract class ElggEntity extends ElggData implements
}
return $result;
- }
-
- // unsaved entity. store in temp array
- // returning single entries instead of an array of 1 element is decided in
- // getMetaData(), just like pulling from the db.
- else {
+ } else {
+ // unsaved entity. store in temp array
+ // returning single entries instead of an array of 1 element is decided in
+ // getMetaData(), just like pulling from the db.
+ //
// if overwrite, delete first
if (!$multiple || !isset($this->temp_metadata[$name])) {
$this->temp_metadata[$name] = array();
@@ -940,7 +940,7 @@ abstract class ElggEntity extends ElggData implements
* @param ElggMetadata $metadata The piece of metadata to specifically check
* @param int $user_guid The user GUID, optionally (default: logged in user)
*
- * @return true|false
+ * @return bool
*/
function canEditMetadata($metadata = null, $user_guid = 0) {
return can_edit_entity_metadata($this->getGUID(), $user_guid, $metadata);
@@ -964,7 +964,7 @@ abstract class ElggEntity extends ElggData implements
*
* @tip Can be overridden by registering for the permissions_check:comment,
* <entity type> plugin hook.
- *
+ *
* @param int $user_guid User guid (default is logged in user)
*
* @return bool
@@ -1270,15 +1270,23 @@ abstract class ElggEntity extends ElggData implements
public function save() {
$guid = $this->getGUID();
if ($guid > 0) {
- cache_entity($this);
- return update_entity(
+ // See #5600. This ensures the lower level can_edit_entity() check will use a
+ // fresh entity from the DB so it sees the persisted owner_guid
+ _elgg_disable_caching_for_entity($guid);
+
+ $ret = update_entity(
$guid,
$this->get('owner_guid'),
$this->get('access_id'),
$this->get('container_guid'),
$this->get('time_created')
);
+
+ _elgg_enable_caching_for_entity($guid);
+ _elgg_cache_entity($this);
+
+ return $ret;
} else {
// Create a new entity (nb: using attribute array directly
// 'cos set function does something special!)
@@ -1320,7 +1328,7 @@ abstract class ElggEntity extends ElggData implements
$this->attributes['subtype'] = get_subtype_id($this->attributes['type'],
$this->attributes['subtype']);
- cache_entity($this);
+ _elgg_cache_entity($this);
return $this->attributes['guid'];
}
@@ -1357,12 +1365,12 @@ abstract class ElggEntity extends ElggData implements
$this->attributes['tables_loaded']++;
}
- // guid needs to be an int http://trac.elgg.org/ticket/4111
+ // guid needs to be an int https://github.com/elgg/elgg/issues/4111
$this->attributes['guid'] = (int)$this->attributes['guid'];
// Cache object handle
if ($this->attributes['guid']) {
- cache_entity($this);
+ _elgg_cache_entity($this);
}
return true;
@@ -1668,9 +1676,11 @@ abstract class ElggEntity extends ElggData implements
/**
* Import data from an parsed ODD xml data array.
*
- * @param array $data XML data
+ * @param ODD $data XML data
*
* @return true
+ *
+ * @throws InvalidParameterException
*/
public function import(ODD $data) {
if (!($data instanceof ODDEntity)) {
@@ -1732,8 +1742,6 @@ abstract class ElggEntity extends ElggData implements
* @return array
*/
public function getTags($tag_names = NULL) {
- global $CONFIG;
-
if ($tag_names && !is_array($tag_names)) {
$tag_names = array($tag_names);
}
diff --git a/engine/classes/ElggExtender.php b/engine/classes/ElggExtender.php
index d94bad837..25aba354f 100644
--- a/engine/classes/ElggExtender.php
+++ b/engine/classes/ElggExtender.php
@@ -171,7 +171,7 @@ abstract class ElggExtender extends ElggData {
public function export() {
$uuid = get_uuid_from_object($this);
- $meta = new ODDMetadata($uuid, guid_to_uuid($this->entity_guid), $this->attributes['name'],
+ $meta = new ODDMetaData($uuid, guid_to_uuid($this->entity_guid), $this->attributes['name'],
$this->attributes['value'], $this->attributes['type'], guid_to_uuid($this->owner_guid));
$meta->setAttribute('published', date("r", $this->time_created));
diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php
index f21621ffd..23080834b 100644
--- a/engine/classes/ElggFile.php
+++ b/engine/classes/ElggFile.php
@@ -93,6 +93,7 @@ class ElggFile extends ElggObject {
$container_guid = $this->container_guid;
}
$fs = $this->getFilestore();
+ // @todo add getSize() to ElggFilestore
return $fs->getSize($prefix, $container_guid);
}
@@ -127,9 +128,11 @@ class ElggFile extends ElggObject {
* @param mixed $default A default. Useful to pass what the browser thinks it is.
* @since 1.7.12
*
+ * @note If $file is provided, this may be called statically
+ *
* @return mixed Detected type on success, false on failure.
*/
- static function detectMimeType($file = null, $default = null) {
+ public function detectMimeType($file = null, $default = null) {
if (!$file) {
if (isset($this) && $this->filename) {
$file = $this->filename;
@@ -178,6 +181,8 @@ class ElggFile extends ElggObject {
* @param string $mode Either read/write/append
*
* @return resource File handler
+ *
+ * @throws IOException|InvalidParameterException
*/
public function open($mode) {
if (!$this->getFilename()) {
@@ -270,9 +275,14 @@ class ElggFile extends ElggObject {
*/
public function delete() {
$fs = $this->getFilestore();
- if ($fs->delete($this)) {
- return parent::delete();
+
+ $result = $fs->delete($this);
+
+ if ($this->getGUID() && $result) {
+ $result = parent::delete();
}
+
+ return $result;
}
/**
@@ -285,6 +295,7 @@ class ElggFile extends ElggObject {
public function seek($position) {
$fs = $this->getFilestore();
+ // @todo add seek() to ElggFilestore
return $fs->seek($this->handle, $position);
}
@@ -347,6 +358,8 @@ class ElggFile extends ElggObject {
* a filestore as recorded in metadata or the system default.
*
* @return ElggFilestore
+ *
+ * @throws ClassNotFoundException
*/
protected function getFilestore() {
// Short circuit if already set.
@@ -359,7 +372,6 @@ class ElggFile extends ElggObject {
// need to get all filestore::* metadata because the rest are "parameters" that
// get passed to filestore::setParameters()
if ($this->guid) {
- $db_prefix = elgg_get_config('dbprefix');
$options = array(
'guid' => $this->guid,
'where' => array("n.string LIKE 'filestore::%'"),
@@ -388,6 +400,7 @@ class ElggFile extends ElggObject {
$this->filestore = new $filestore();
$this->filestore->setParameters($parameters);
+ // @todo explain why $parameters will always be set here (PhpStorm complains)
}
// this means the entity hasn't been saved so fallback to default
diff --git a/engine/classes/ElggFileCache.php b/engine/classes/ElggFileCache.php
index 34178d452..94143f777 100644
--- a/engine/classes/ElggFileCache.php
+++ b/engine/classes/ElggFileCache.php
@@ -13,6 +13,8 @@ class ElggFileCache extends ElggCache {
* @param string $cache_path The cache path.
* @param int $max_age Maximum age in seconds, 0 if no limit.
* @param int $max_size Maximum size of cache in seconds, 0 if no limit.
+ *
+ * @throws ConfigurationException
*/
function __construct($cache_path, $max_age = 0, $max_size = 0) {
$this->setVariable("cache_path", $cache_path);
@@ -24,6 +26,7 @@ class ElggFileCache extends ElggCache {
}
}
+ // @codingStandardsIgnoreStart
/**
* Create and return a handle to a file.
*
@@ -39,6 +42,7 @@ class ElggFileCache extends ElggCache {
return $this->createFile($filename, $rw);
}
+ // @codingStandardsIgnoreEnd
/**
* Create and return a handle to a file.
@@ -70,6 +74,7 @@ class ElggFileCache extends ElggCache {
return fopen($path . $filename, $rw);
}
+ // @codingStandardsIgnoreStart
/**
* Create a sanitised filename for the file.
*
@@ -84,6 +89,7 @@ class ElggFileCache extends ElggCache {
return $filename;
}
+ // @codingStandardsIgnoreEnd
/**
* Create a sanitised filename for the file.
diff --git a/engine/classes/ElggGroup.php b/engine/classes/ElggGroup.php
index 121186196..7e69b7a84 100644
--- a/engine/classes/ElggGroup.php
+++ b/engine/classes/ElggGroup.php
@@ -32,7 +32,7 @@ class ElggGroup extends ElggEntity
* @param mixed $guid If an int, load that GUID.
* If an entity table db row, then will load the rest of the data.
*
- * @throws Exception if there was a problem creating the group.
+ * @throws IOException|InvalidParameterException if there was a problem creating the group.
*/
function __construct($guid = null) {
$this->initializeAttributes();
@@ -48,21 +48,18 @@ class ElggGroup extends ElggEntity
$msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
throw new IOException($msg);
}
-
- // Is $guid is an ElggGroup? Use a copy constructor
} else if ($guid instanceof ElggGroup) {
+ // $guid is an ElggGroup so this is a copy constructor
elgg_deprecated_notice('This type of usage of the ElggGroup constructor was deprecated. Please use the clone method.', 1.7);
foreach ($guid->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
-
- // Is this is an ElggEntity but not an ElggGroup = ERROR!
} else if ($guid instanceof ElggEntity) {
+ // @todo why separate from else
throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggGroup'));
-
- // Is it a GUID
} else if (is_numeric($guid)) {
+ // $guid is a GUID so load entity
if (!$this->load($guid)) {
throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
}
@@ -220,6 +217,7 @@ class ElggGroup extends ElggEntity
* @return array|false
*/
public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ // @todo are we deprecating this method, too?
return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
}
@@ -233,6 +231,7 @@ class ElggGroup extends ElggEntity
* @return array|false
*/
public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
+ // @todo are we deprecating this method, too?
return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
}
@@ -244,6 +243,7 @@ class ElggGroup extends ElggEntity
* @return array|false
*/
public function countObjects($subtype = "") {
+ // @todo are we deprecating this method, too?
return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", 10, 0, true);
}
@@ -284,7 +284,7 @@ class ElggGroup extends ElggEntity
*
* @return bool
*/
- public function isMember($user = 0) {
+ public function isMember($user = null) {
if (!($user instanceof ElggUser)) {
$user = elgg_get_logged_in_user_entity();
}
@@ -324,37 +324,18 @@ class ElggGroup extends ElggEntity
* @return bool
*/
protected function load($guid) {
- // Test to see if we have the generic stuff
- if (!parent::load($guid)) {
- return false;
- }
-
- // Only work with GUID from here
- if ($guid instanceof stdClass) {
- $guid = $guid->guid;
- }
+ $attr_loader = new ElggAttributeLoader(get_class(), 'group', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_group_entity_as_row';
- // Check the type
- if ($this->attributes['type'] != 'group') {
- $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
- throw new InvalidClassException($msg);
- }
-
- // Load missing data
- $row = get_group_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) {
- // If $row isn't a cached copy then increment the counter
- $this->attributes['tables_loaded']++;
- }
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach ($objarray as $key => $value) {
- $this->attributes[$key] = $value;
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
}
- // guid needs to be an int http://trac.elgg.org/ticket/4111
- $this->attributes['guid'] = (int)$this->attributes['guid'];
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
return true;
}
@@ -371,7 +352,12 @@ class ElggGroup extends ElggEntity
}
// Now save specific stuff
- return create_group_entity($this->get('guid'), $this->get('name'), $this->get('description'));
+
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_group_entity($this->get('guid'), $this->get('name'), $this->get('description'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
}
// EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
diff --git a/engine/classes/ElggGroupItemVisibility.php b/engine/classes/ElggGroupItemVisibility.php
new file mode 100644
index 000000000..2c7e2abb4
--- /dev/null
+++ b/engine/classes/ElggGroupItemVisibility.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Determines if otherwise visible items should be hidden from a user due to group
+ * policy or visibility.
+ *
+ * @class ElggGroupItemVisibility
+ * @package Elgg.Core
+ * @subpackage Groups
+ *
+ * @access private
+ */
+class ElggGroupItemVisibility {
+
+ const REASON_MEMBERSHIP = 'membershiprequired';
+ const REASON_LOGGEDOUT = 'loggedinrequired';
+ const REASON_NOACCESS = 'noaccess';
+
+ /**
+ * @var bool
+ */
+ public $shouldHideItems = false;
+
+ /**
+ * @var string
+ */
+ public $reasonHidden = '';
+
+ /**
+ * Determine visibility of items within a container for the current user
+ *
+ * @param int $container_guid GUID of a container (may/may not be a group)
+ *
+ * @return ElggGroupItemVisibility
+ *
+ * @todo Make this faster, considering it must run for every river item.
+ */
+ static public function factory($container_guid) {
+ // cache because this may be called repeatedly during river display, and
+ // due to need to check group visibility, cache will be disabled for some
+ // get_entity() calls
+ static $cache = array();
+
+ $ret = new ElggGroupItemVisibility();
+
+ if (!$container_guid) {
+ return $ret;
+ }
+
+ $user = elgg_get_logged_in_user_entity();
+ $user_guid = $user ? $user->guid : 0;
+
+ $container_guid = (int) $container_guid;
+
+ $cache_key = "$container_guid|$user_guid";
+ if (empty($cache[$cache_key])) {
+ // compute
+
+ $container = get_entity($container_guid);
+ $is_visible = (bool) $container;
+
+ if (!$is_visible) {
+ // see if it *really* exists...
+ $prev_access = elgg_set_ignore_access();
+ $container = get_entity($container_guid);
+ elgg_set_ignore_access($prev_access);
+ }
+
+ if ($container && $container instanceof ElggGroup) {
+ /* @var ElggGroup $container */
+
+ if ($is_visible) {
+ if (!$container->isPublicMembership()) {
+ if ($user) {
+ if (!$container->isMember($user) && !$user->isAdmin()) {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_MEMBERSHIP;
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_LOGGEDOUT;
+ }
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_NOACCESS;
+ }
+ }
+ $cache[$cache_key] = $ret;
+ }
+ return $cache[$cache_key];
+ }
+}
diff --git a/engine/classes/ElggLRUCache.php b/engine/classes/ElggLRUCache.php
new file mode 100644
index 000000000..f51af2ed7
--- /dev/null
+++ b/engine/classes/ElggLRUCache.php
@@ -0,0 +1,181 @@
+<?php
+
+/**
+ * Least Recently Used Cache
+ *
+ * A fixed sized cache that removes the element used last when it reaches its
+ * size limit.
+ *
+ * Based on https://github.com/cash/LRUCache
+ *
+ * @access private
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+class ElggLRUCache implements ArrayAccess {
+ /** @var int */
+ protected $maximumSize;
+
+ /**
+ * The front of the array contains the LRU element
+ *
+ * @var array
+ */
+ protected $data = array();
+
+ /**
+ * Create a LRU Cache
+ *
+ * @param int $size The size of the cache
+ * @throws InvalidArgumentException
+ */
+ public function __construct($size) {
+ if (!is_int($size) || $size <= 0) {
+ throw new InvalidArgumentException();
+ }
+ $this->maximumSize = $size;
+ }
+
+ /**
+ * Get the value cached with this key
+ *
+ * @param int|string $key The key. Strings that are ints are cast to ints.
+ * @param mixed $default The value to be returned if key not found. (Optional)
+ * @return mixed
+ */
+ public function get($key, $default = null) {
+ if (isset($this->data[$key])) {
+ $this->recordAccess($key);
+ return $this->data[$key];
+ } else {
+ return $default;
+ }
+ }
+
+ /**
+ * Add something to the cache
+ *
+ * @param int|string $key The key. Strings that are ints are cast to ints.
+ * @param mixed $value The value to cache
+ * @return void
+ */
+ public function set($key, $value) {
+ if (isset($this->data[$key])) {
+ $this->data[$key] = $value;
+ $this->recordAccess($key);
+ } else {
+ $this->data[$key] = $value;
+ if ($this->size() > $this->maximumSize) {
+ // remove least recently used element (front of array)
+ reset($this->data);
+ unset($this->data[key($this->data)]);
+ }
+ }
+ }
+
+ /**
+ * Get the number of elements in the cache
+ *
+ * @return int
+ */
+ public function size() {
+ return count($this->data);
+ }
+
+ /**
+ * Does the cache contain an element with this key
+ *
+ * @param int|string $key The key
+ * @return boolean
+ */
+ public function containsKey($key) {
+ return isset($this->data[$key]);
+ }
+
+ /**
+ * Remove the element with this key.
+ *
+ * @param int|string $key The key
+ * @return mixed Value or null if not set
+ */
+ public function remove($key) {
+ if (isset($this->data[$key])) {
+ $value = $this->data[$key];
+ unset($this->data[$key]);
+ return $value;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Clear the cache
+ *
+ * @return void
+ */
+ public function clear() {
+ $this->data = array();
+ }
+
+ /**
+ * Moves the element from current position to end of array
+ *
+ * @param int|string $key The key
+ * @return void
+ */
+ protected function recordAccess($key) {
+ $value = $this->data[$key];
+ unset($this->data[$key]);
+ $this->data[$key] = $value;
+ }
+
+ /**
+ * Assigns a value for the specified key
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param int|string $key The key to assign the value to.
+ * @param mixed $value The value to set.
+ * @return void
+ */
+ public function offsetSet($key, $value) {
+ $this->set($key, $value);
+ }
+
+ /**
+ * Get the value for specified key
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param int|string $key The key to retrieve.
+ * @return mixed
+ */
+ public function offsetGet($key) {
+ return $this->get($key);
+ }
+
+ /**
+ * Unsets a key.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param int|string $key The key to unset.
+ * @return void
+ */
+ public function offsetUnset($key) {
+ $this->remove($key);
+ }
+
+ /**
+ * Does key exist?
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int|string $key A key to check for.
+ * @return boolean
+ */
+ public function offsetExists($key) {
+ return $this->containsKey($key);
+ }
+}
diff --git a/engine/classes/ElggMemcache.php b/engine/classes/ElggMemcache.php
index d9539b9cb..91d50ab89 100644
--- a/engine/classes/ElggMemcache.php
+++ b/engine/classes/ElggMemcache.php
@@ -32,6 +32,8 @@ class ElggMemcache extends ElggSharedMemoryCache {
*
* @param string $namespace The namespace for this cache to write to -
* note, namespaces of the same name are shared!
+ *
+ * @throws ConfigurationException
*/
function __construct($namespace = 'default') {
global $CONFIG;
diff --git a/engine/classes/ElggMenuBuilder.php b/engine/classes/ElggMenuBuilder.php
index de0017599..b463143d8 100644
--- a/engine/classes/ElggMenuBuilder.php
+++ b/engine/classes/ElggMenuBuilder.php
@@ -8,6 +8,9 @@
*/
class ElggMenuBuilder {
+ /**
+ * @var ElggMenuItem[]
+ */
protected $menu = array();
protected $selected = null;
@@ -15,7 +18,7 @@ class ElggMenuBuilder {
/**
* ElggMenuBuilder constructor
*
- * @param array $menu Array of ElggMenuItem objects
+ * @param ElggMenuItem[] $menu Array of ElggMenuItem objects
*/
public function __construct(array $menu) {
$this->menu = $menu;
@@ -107,6 +110,7 @@ class ElggMenuBuilder {
$children = array();
// divide base nodes from children
foreach ($section as $menu_item) {
+ /* @var ElggMenuItem $menu_item */
$parent_name = $menu_item->getParentName();
if (!$parent_name) {
$parents[$menu_item->getName()] = $menu_item;
@@ -118,13 +122,16 @@ class ElggMenuBuilder {
// attach children to parents
$iteration = 0;
$current_gen = $parents;
+ $next_gen = null;
while (count($children) && $iteration < 5) {
foreach ($children as $index => $menu_item) {
$parent_name = $menu_item->getParentName();
if (array_key_exists($parent_name, $current_gen)) {
$next_gen[$menu_item->getName()] = $menu_item;
- $current_gen[$parent_name]->addChild($menu_item);
- $menu_item->setParent($current_gen[$parent_name]);
+ if (!in_array($menu_item, $current_gen[$parent_name]->getData('children'))) {
+ $current_gen[$parent_name]->addChild($menu_item);
+ $menu_item->setParent($current_gen[$parent_name]);
+ }
unset($children[$index]);
}
}
@@ -158,7 +165,7 @@ class ElggMenuBuilder {
// scan looking for a selected item
foreach ($this->menu as $menu_item) {
if ($menu_item->getHref()) {
- if (elgg_http_url_is_identical(full_url(), $menu_item->getHref())) {
+ if (elgg_http_url_is_identical(current_page_url(), $menu_item->getHref())) {
$menu_item->setSelected(true);
return $menu_item;
}
@@ -204,6 +211,9 @@ class ElggMenuBuilder {
// sort each section
foreach ($this->menu as $index => $section) {
+ foreach ($section as $key => $node) {
+ $section[$key]->setData('original_order', $key);
+ }
usort($section, $sort_callback);
$this->menu[$index] = $section;
@@ -213,12 +223,12 @@ class ElggMenuBuilder {
array_push($stack, $root);
while (!empty($stack)) {
$node = array_pop($stack);
+ /* @var ElggMenuItem $node */
$node->sortChildren($sort_callback);
$children = $node->getChildren();
if ($children) {
$stack = array_merge($stack, $children);
}
- $p = count($stack);
}
}
}
@@ -227,42 +237,55 @@ class ElggMenuBuilder {
/**
* Compare two menu items by their display text
*
- * @param ElggMenuItem $a
- * @param ElggMenuItem $b
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
* @return bool
*/
public static function compareByText($a, $b) {
- $a = $a->getText();
- $b = $b->getText();
+ $at = $a->getText();
+ $bt = $b->getText();
- return strnatcmp($a, $b);
+ $result = strnatcmp($at, $bt);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
}
/**
* Compare two menu items by their identifiers
*
- * @param ElggMenuItem $a
- * @param ElggMenuItem $b
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
* @return bool
*/
public static function compareByName($a, $b) {
- $a = $a->getName();
- $b = $b->getName();
+ $an = $a->getName();
+ $bn = $b->getName();
- return strcmp($a, $b);
+ $result = strcmp($an, $bn);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
}
/**
* Compare two menu items by their priority
*
- * @param ElggMenuItem $a
- * @param ElggMenuItem $b
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
* @return bool
+ *
+ * @todo change name to compareByPriority
*/
public static function compareByWeight($a, $b) {
- $a = $a->getWeight();
- $b = $b->getWeight();
+ $aw = $a->getWeight();
+ $bw = $b->getWeight();
- return $a > $b;
+ if ($aw == $bw) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $aw - $bw;
}
}
diff --git a/engine/classes/ElggMenuItem.php b/engine/classes/ElggMenuItem.php
index 4bc9144d4..81ce6c099 100644
--- a/engine/classes/ElggMenuItem.php
+++ b/engine/classes/ElggMenuItem.php
@@ -542,6 +542,9 @@ class ElggMenuItem {
* @return void
*/
public function sortChildren($sortFunction) {
+ foreach ($this->data['children'] as $key => $node) {
+ $this->data['children'][$key]->data['original_order'] = $key;
+ }
usort($this->data['children'], $sortFunction);
}
diff --git a/engine/classes/ElggMetadata.php b/engine/classes/ElggMetadata.php
index 7f45dc3ea..3a8e2d817 100644
--- a/engine/classes/ElggMetadata.php
+++ b/engine/classes/ElggMetadata.php
@@ -6,6 +6,10 @@
*
* @package Elgg.Core
* @subpackage Metadata
+ *
+ * @property string $value_type
+ * @property int $owner_guid
+ * @property string $enabled
*/
class ElggMetadata extends ElggExtender {
diff --git a/engine/classes/ElggObject.php b/engine/classes/ElggObject.php
index b4bae6825..aeaa3ba5c 100644
--- a/engine/classes/ElggObject.php
+++ b/engine/classes/ElggObject.php
@@ -66,21 +66,18 @@ class ElggObject extends ElggEntity {
$msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
throw new IOException($msg);
}
-
- // Is $guid is an ElggObject? Use a copy constructor
} else if ($guid instanceof ElggObject) {
+ // $guid is an ElggObject so this is a copy constructor
elgg_deprecated_notice('This type of usage of the ElggObject constructor was deprecated. Please use the clone method.', 1.7);
foreach ($guid->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
-
- // Is this is an ElggEntity but not an ElggObject = ERROR!
} else if ($guid instanceof ElggEntity) {
+ // @todo remove - do not need separate exception
throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggObject'));
-
- // Is it a GUID
} else if (is_numeric($guid)) {
+ // $guid is a GUID so load
if (!$this->load($guid)) {
throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
}
@@ -99,37 +96,18 @@ class ElggObject extends ElggEntity {
* @throws InvalidClassException
*/
protected function load($guid) {
- // Load data from entity table if needed
- if (!parent::load($guid)) {
- return false;
- }
-
- // Only work with GUID from here
- if ($guid instanceof stdClass) {
- $guid = $guid->guid;
- }
+ $attr_loader = new ElggAttributeLoader(get_class(), 'object', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_object_entity_as_row';
- // Check the type
- if ($this->attributes['type'] != 'object') {
- $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
- throw new InvalidClassException($msg);
- }
-
- // Load missing data
- $row = get_object_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) {
- // If $row isn't a cached copy then increment the counter
- $this->attributes['tables_loaded']++;
- }
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach ($objarray as $key => $value) {
- $this->attributes[$key] = $value;
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
}
- // guid needs to be an int http://trac.elgg.org/ticket/4111
- $this->attributes['guid'] = (int)$this->attributes['guid'];
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
return true;
}
@@ -148,8 +126,12 @@ class ElggObject extends ElggEntity {
}
// Save ElggObject-specific attributes
- return create_object_entity($this->get('guid'), $this->get('title'),
- $this->get('description'), $this->get('container_guid'));
+
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_object_entity($this->get('guid'), $this->get('title'), $this->get('description'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
}
/**
@@ -223,7 +205,7 @@ class ElggObject extends ElggEntity {
// must be member of group
if (elgg_instanceof($this->getContainerEntity(), 'group')) {
- if (!$this->getContainerEntity()->canWriteToContainer(get_user($user_guid))) {
+ if (!$this->getContainerEntity()->canWriteToContainer($user_guid)) {
return false;
}
}
diff --git a/engine/classes/ElggPAM.php b/engine/classes/ElggPAM.php
index 0681a909b..f07095fc1 100644
--- a/engine/classes/ElggPAM.php
+++ b/engine/classes/ElggPAM.php
@@ -53,11 +53,17 @@ class ElggPAM {
foreach ($_PAM_HANDLERS[$this->policy] as $k => $v) {
$handler = $v->handler;
+ if (!is_callable($handler)) {
+ continue;
+ }
+ /* @var callable $handler */
+
$importance = $v->importance;
try {
// Execute the handler
- $result = $handler($credentials);
+ // @todo don't assume $handler is a global function
+ $result = call_user_func($handler, $credentials);
if ($result) {
$authenticated = true;
} elseif ($result === false) {
diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php
index 3e43c8e81..545b9a53c 100644
--- a/engine/classes/ElggPlugin.php
+++ b/engine/classes/ElggPlugin.php
@@ -36,8 +36,9 @@ class ElggPlugin extends ElggObject {
* @warning Unlike other ElggEntity objects, you cannot null instantiate
* ElggPlugin. You must point it to an actual plugin GUID or location.
*
- * @param mixed $plugin The GUID of the ElggPlugin object or the path of
- * the plugin to load.
+ * @param mixed $plugin The GUID of the ElggPlugin object or the path of the plugin to load.
+ *
+ * @throws PluginException
*/
public function __construct($plugin) {
if (!$plugin) {
@@ -76,64 +77,8 @@ class ElggPlugin extends ElggObject {
// load the rest of the plugin
parent::__construct($existing_guid);
}
- }
-
- /**
- * Overridden from ElggEntity and ElggObject::load(). Core always inits plugins with
- * a query joined to the objects_entity table, so all the info is there.
- *
- * @param mixed $guid GUID of an ElggObject or the stdClass object from entities table
- *
- * @return bool
- * @throws InvalidClassException
- */
- protected function load($guid) {
-
- $expected_attributes = $this->attributes;
- unset($expected_attributes['tables_split']);
- unset($expected_attributes['tables_loaded']);
-
- // this was loaded with a full join
- $needs_loaded = false;
-
- if ($guid instanceof stdClass) {
- $row = (array) $guid;
- $missing_attributes = array_diff_key($expected_attributes, $row);
- if ($missing_attributes) {
- $needs_loaded = true;
- $guid = $row['guid'];
- } else {
- $this->attributes = $row;
- }
- } else {
- $needs_loaded = true;
- }
-
- if ($needs_loaded) {
- $entity = (array) get_entity_as_row($guid);
- $object = (array) get_object_entity_as_row($guid);
-
- if (!$entity || !$object) {
- return false;
- }
-
- $this->attributes = array_merge($this->attributes, $entity, $object);
- }
-
- $this->attributes['tables_loaded'] = 2;
-
- // Check the type
- if ($this->attributes['type'] != 'object') {
- $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
- throw new InvalidClassException($msg);
- }
- // guid needs to be an int http://trac.elgg.org/ticket/4111
- $this->attributes['guid'] = (int)$this->attributes['guid'];
-
- cache_entity($this);
-
- return true;
+ _elgg_cache_plugin_by_id($this);
}
/**
@@ -200,7 +145,7 @@ class ElggPlugin extends ElggObject {
/**
* Sets the location of this plugin.
*
- * @param path $id The path to the plugin's dir.
+ * @param string $id The path to the plugin's dir.
* @return bool
*/
public function setID($id) {
@@ -354,20 +299,15 @@ class ElggPlugin extends ElggObject {
$private_settings = get_data($q);
- if ($private_settings) {
- $return = array();
+ $return = array();
+ if ($private_settings) {
foreach ($private_settings as $setting) {
- $name = substr($setting->name, $ps_prefix_len);
- $value = $setting->value;
-
- $return[$name] = $value;
+ $return[$setting->name] = $setting->value;
}
-
- return $return;
}
- return false;
+ return $return;
}
/**
@@ -408,11 +348,14 @@ class ElggPlugin extends ElggObject {
*/
public function unsetAllSettings() {
$db_prefix = get_config('dbprefix');
- $ps_prefix = elgg_namespace_plugin_private_setting('setting', '');
+
+ $us_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $is_prefix = elgg_namespace_plugin_private_setting('internal', '', $this->getID());
$q = "DELETE FROM {$db_prefix}private_settings
WHERE entity_guid = $this->guid
- AND name NOT LIKE '$ps_prefix%'";
+ AND name NOT LIKE '$us_prefix%'
+ AND name NOT LIKE '$is_prefix%'";
return delete_data($q);
}
@@ -478,20 +421,18 @@ class ElggPlugin extends ElggObject {
$private_settings = get_data($q);
- if ($private_settings) {
- $return = array();
+ $return = array();
+ if ($private_settings) {
foreach ($private_settings as $setting) {
$name = substr($setting->name, $ps_prefix_len);
$value = $setting->value;
$return[$name] = $value;
}
-
- return $return;
}
- return false;
+ return $return;
}
/**
@@ -604,7 +545,7 @@ class ElggPlugin extends ElggObject {
* Returns if the plugin is complete, meaning has all required files
* and Elgg can read them and they make sense.
*
- * @todo bad name? This could be confused with isValid() from ElggPackage.
+ * @todo bad name? This could be confused with isValid() from ElggPluginPackage.
*
* @return bool
*/
@@ -655,6 +596,8 @@ class ElggPlugin extends ElggObject {
* Checks if this plugin can be activated on the current
* Elgg installation.
*
+ * @todo remove $site_guid param or implement it
+ *
* @param mixed $site_guid Optional site guid
* @return bool
*/
@@ -705,8 +648,8 @@ class ElggPlugin extends ElggObject {
// Note: this will not run re-run the init hooks!
if ($return) {
if ($this->canReadFile('activate.php')) {
- $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES
- | ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS;
+ $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES |
+ ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS;
$this->start($flags);
diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php
index a4f5bb95d..6912c2b08 100644
--- a/engine/classes/ElggPluginManifest.php
+++ b/engine/classes/ElggPluginManifest.php
@@ -130,7 +130,7 @@ class ElggPluginManifest {
}
// see if we need to construct the xml object.
- if ($manifest instanceof XmlElement) {
+ if ($manifest instanceof ElggXMLElement) {
$manifest_obj = $manifest;
} else {
if (substr(trim($manifest), 0, 1) == '<') {
diff --git a/engine/classes/ElggPluginManifestParser.php b/engine/classes/ElggPluginManifestParser.php
index b0480d4d8..af152b561 100644
--- a/engine/classes/ElggPluginManifestParser.php
+++ b/engine/classes/ElggPluginManifestParser.php
@@ -53,10 +53,10 @@ abstract class ElggPluginManifestParser {
/**
* Loads the manifest XML to be parsed.
*
- * @param XmlElement $xml The Manifest XML object to be parsed
- * @param object $caller The object calling this parser.
+ * @param ElggXmlElement $xml The Manifest XML object to be parsed
+ * @param object $caller The object calling this parser.
*/
- public function __construct(XmlElement $xml, $caller) {
+ public function __construct(ElggXMLElement $xml, $caller) {
$this->manifestObject = $xml;
$this->caller = $caller;
}
diff --git a/engine/classes/ElggPluginPackage.php b/engine/classes/ElggPluginPackage.php
index 2dc4bdb3d..37eb4bf4d 100644
--- a/engine/classes/ElggPluginPackage.php
+++ b/engine/classes/ElggPluginPackage.php
@@ -100,7 +100,6 @@ class ElggPluginPackage {
* @param string $plugin The ID (directory name) or full path of the plugin.
* @param bool $validate Automatically run isValid()?
*
- * @return true
* @throws PluginException
*/
public function __construct($plugin, $validate = true) {
@@ -213,6 +212,7 @@ class ElggPluginPackage {
return false;
}
+ // Note: $conflicts and $requires are not unused. They're called dynamically
$conflicts = $this->getManifest()->getConflicts();
$requires = $this->getManifest()->getRequires();
$provides = $this->getManifest()->getProvides();
@@ -294,6 +294,7 @@ class ElggPluginPackage {
return true;
}
+ $this->errorMsg = elgg_echo('unknown_error');
return false;
}
@@ -330,8 +331,10 @@ class ElggPluginPackage {
* @return bool|array
*/
public function checkDependencies($full_report = false) {
+ // Note: $conflicts and $requires are not unused. They're called dynamically
$requires = $this->getManifest()->getRequires();
$conflicts = $this->getManifest()->getConflicts();
+
$enabled_plugins = elgg_get_plugins('active');
$this_id = $this->getID();
$report = array();
@@ -368,6 +371,7 @@ class ElggPluginPackage {
$check_types = array('requires', 'conflicts');
if ($full_report) {
+ // Note: $suggests is not unused. It's called dynamically
$suggests = $this->getManifest()->getSuggests();
$check_types[] = 'suggests';
}
diff --git a/engine/classes/ElggPriorityList.php b/engine/classes/ElggPriorityList.php
index 8a3b836a8..416df885c 100644
--- a/engine/classes/ElggPriorityList.php
+++ b/engine/classes/ElggPriorityList.php
@@ -89,7 +89,7 @@
* return true;
* }
*
- * @package Elgg.Core
+ * @package Elgg.Core
* @subpackage Helpers
*/
class ElggPriorityList
@@ -126,7 +126,9 @@ class ElggPriorityList
* maintains its priority and the new element is to the next available
* slot, taking into consideration all previously registered elements.
* Negative elements are accepted.
+ * @param bool $exact unused
* @return int The priority of the added element.
+ * @todo remove $exact or implement it. Note we use variable name strict below.
*/
public function add($element, $priority = null, $exact = false) {
if ($priority !== null && !is_numeric($priority)) {
@@ -146,7 +148,8 @@ class ElggPriorityList
* @warning The element must have the same attributes / values. If using $strict, it must have
* the same types. array(10) will fail in strict against array('10') (str vs int).
*
- * @param type $element
+ * @param mixed $element The element to remove from the list
+ * @param bool $strict Whether to check the type of the element match
* @return bool
*/
public function remove($element, $strict = false) {
@@ -162,10 +165,10 @@ class ElggPriorityList
/**
* Move an existing element to a new priority.
*
- * @param mixed $current_priority
- * @param int $new_priority
- *
- * @return int The new priority.
+ * @param mixed $element The element to move
+ * @param int $new_priority The new priority for the element
+ * @param bool $strict Whether to check the type of the element match
+ * @return bool
*/
public function move($element, $new_priority, $strict = false) {
$new_priority = (int) $new_priority;
@@ -200,12 +203,12 @@ class ElggPriorityList
*
* If no user function is provided the elements are sorted by priority registered.
*
- * The callback function should accept the array of elements as the first argument and should
- * return a sorted array.
+ * The callback function should accept the array of elements as the first
+ * argument and should return a sorted array.
*
* This function can be called multiple times.
*
- * @param type $callback
+ * @param callback $callback The callback for sorting. Numeric sorting is the default.
* @return bool
*/
public function sort($callback = null) {
@@ -268,7 +271,7 @@ class ElggPriorityList
/**
* Returns the element at $priority.
*
- * @param int $priority
+ * @param int $priority The priority
* @return mixed The element or false on fail.
*/
public function getElement($priority) {
@@ -351,7 +354,12 @@ class ElggPriorityList
return ($key !== NULL && $key !== FALSE);
}
- // Countable
+ /**
+ * Countable interface
+ *
+ * @see Countable::count()
+ * @return int
+ */
public function count() {
return count($this->elements);
}
diff --git a/engine/classes/ElggRelationship.php b/engine/classes/ElggRelationship.php
index efc0f7eff..d2e88882a 100644
--- a/engine/classes/ElggRelationship.php
+++ b/engine/classes/ElggRelationship.php
@@ -71,6 +71,7 @@ class ElggRelationship extends ElggData implements
* Save the relationship
*
* @return int the relationship id
+ * @throws IOException
*/
public function save() {
if ($this->id > 0) {
@@ -145,7 +146,7 @@ class ElggRelationship extends ElggData implements
* @param ODD $data ODD data
* @return bool
- * @throws ImportException
+ * @throws ImportException|InvalidParameterException
*/
public function import(ODD $data) {
if (!($data instanceof ODDRelationship)) {
@@ -179,6 +180,8 @@ class ElggRelationship extends ElggData implements
return true;
}
}
+
+ return false;
}
// SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
diff --git a/engine/classes/ElggSession.php b/engine/classes/ElggSession.php
index 13a33736c..9750f063e 100644
--- a/engine/classes/ElggSession.php
+++ b/engine/classes/ElggSession.php
@@ -54,7 +54,7 @@ class ElggSession implements ArrayAccess {
*
* @param mixed $key Name
*
- * @return void
+ * @return mixed
*/
function offsetGet($key) {
if (!ElggSession::$__localcache) {
@@ -98,7 +98,7 @@ class ElggSession implements ArrayAccess {
*
* @param int $offset Offset
*
- * @return int
+ * @return bool
*/
function offsetExists($offset) {
if (isset(ElggSession::$__localcache[$offset])) {
@@ -112,6 +112,8 @@ class ElggSession implements ArrayAccess {
if ($this->offsetGet($offset)) {
return true;
}
+
+ return false;
}
@@ -132,10 +134,10 @@ class ElggSession implements ArrayAccess {
* @param string $key Name
* @param mixed $value Value
*
- * @return mixed
+ * @return void
*/
function set($key, $value) {
- return $this->offsetSet($key, $value);
+ $this->offsetSet($key, $value);
}
/**
@@ -143,9 +145,9 @@ class ElggSession implements ArrayAccess {
*
* @param string $key Name
*
- * @return bool
+ * @return void
*/
function del($key) {
- return $this->offsetUnset($key);
+ $this->offsetUnset($key);
}
}
diff --git a/engine/classes/ElggSite.php b/engine/classes/ElggSite.php
index 401939005..dd996fe98 100644
--- a/engine/classes/ElggSite.php
+++ b/engine/classes/ElggSite.php
@@ -77,28 +77,24 @@ class ElggSite extends ElggEntity {
$msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
throw new IOException($msg);
}
-
- // Is $guid is an ElggSite? Use a copy constructor
} else if ($guid instanceof ElggSite) {
+ // $guid is an ElggSite so this is a copy constructor
elgg_deprecated_notice('This type of usage of the ElggSite constructor was deprecated. Please use the clone method.', 1.7);
foreach ($guid->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
-
- // Is this is an ElggEntity but not an ElggSite = ERROR!
} else if ($guid instanceof ElggEntity) {
+ // @todo remove and just use else clause
throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggSite'));
-
- // See if this is a URL
} else if (strpos($guid, "http") !== false) {
+ // url so retrieve by url
$guid = get_site_by_url($guid);
foreach ($guid->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
-
- // Is it a GUID
} else if (is_numeric($guid)) {
+ // $guid is a GUID so load
if (!$this->load($guid)) {
throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
}
@@ -117,37 +113,18 @@ class ElggSite extends ElggEntity {
* @throws InvalidClassException
*/
protected function load($guid) {
- // Test to see if we have the generic stuff
- if (!parent::load($guid)) {
- return false;
- }
-
- // Only work with GUID from here
- if ($guid instanceof stdClass) {
- $guid = $guid->guid;
- }
+ $attr_loader = new ElggAttributeLoader(get_class(), 'site', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_site_entity_as_row';
- // Check the type
- if ($this->attributes['type'] != 'site') {
- $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
- throw new InvalidClassException($msg);
- }
-
- // Load missing data
- $row = get_site_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) {
- // If $row isn't a cached copy then increment the counter
- $this->attributes['tables_loaded']++;
- }
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach ($objarray as $key => $value) {
- $this->attributes[$key] = $value;
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
}
- // guid needs to be an int http://trac.elgg.org/ticket/4111
- $this->attributes['guid'] = (int)$this->attributes['guid'];
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
return true;
}
@@ -381,6 +358,11 @@ class ElggSite extends ElggEntity {
public function checkWalledGarden() {
global $CONFIG;
+ // command line calls should not invoke the walled garden check
+ if (PHP_SAPI === 'cli') {
+ return;
+ }
+
if ($CONFIG->walled_garden) {
if ($CONFIG->default_access == ACCESS_PUBLIC) {
$CONFIG->default_access = ACCESS_LOGGED_IN;
@@ -395,7 +377,9 @@ class ElggSite extends ElggEntity {
elgg_register_plugin_hook_handler('index', 'system', 'elgg_walled_garden_index', 1);
if (!$this->isPublicPage()) {
- $_SESSION['last_forward_from'] = current_page_url();
+ if (!elgg_is_xhr()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ }
register_error(elgg_echo('loggedinrequired'));
forward();
}
@@ -457,8 +441,6 @@ class ElggSite extends ElggEntity {
// include a hook for plugin authors to include public pages
$plugins = elgg_trigger_plugin_hook('public_pages', 'walled_garden', NULL, array());
- // lookup admin-specific public pages
-
// allow public pages
foreach (array_merge($defaults, $plugins) as $public) {
$pattern = "`^{$CONFIG->url}$public/*$`i";
diff --git a/engine/classes/ElggStaticVariableCache.php b/engine/classes/ElggStaticVariableCache.php
index 787d35a32..9c14fdfba 100644
--- a/engine/classes/ElggStaticVariableCache.php
+++ b/engine/classes/ElggStaticVariableCache.php
@@ -11,7 +11,7 @@ class ElggStaticVariableCache extends ElggSharedMemoryCache {
/**
* The cache.
*
- * @var unknown_type
+ * @var array
*/
private static $__cache;
@@ -21,8 +21,8 @@ class ElggStaticVariableCache extends ElggSharedMemoryCache {
* This function creates a variable cache in a static variable in
* memory, optionally with a given namespace (to avoid overlap).
*
- * @param string $namespace The namespace for this cache to write to
- * note, namespaces of the same name are shared!
+ * @param string $namespace The namespace for this cache to write to.
+ * @warning namespaces of the same name are shared!
*/
function __construct($namespace = 'default') {
$this->setNamespace($namespace);
@@ -80,7 +80,7 @@ class ElggStaticVariableCache extends ElggSharedMemoryCache {
}
/**
- * This was probably meant to delete everything?
+ * Clears the cache for a particular namespace
*
* @return void
*/
diff --git a/engine/classes/ElggTranslit.php b/engine/classes/ElggTranslit.php
index 676c59fc8..b4bf87797 100644
--- a/engine/classes/ElggTranslit.php
+++ b/engine/classes/ElggTranslit.php
@@ -20,11 +20,10 @@
* and is licensed under the LGPL. For more information, see
* <http://www.doctrine-project.org>.
*
- * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
- * @author Jonathan H. Wage <jonwage@gmail.com>
- *
- * @author Steve Clay <steve@mrclay.org>
- * @package Elgg.Core
+ * @package Elgg.Core
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author Jonathan H. Wage <jonwage@gmail.com>
+ * @author Steve Clay <steve@mrclay.org>
*
* @access private Plugin authors should not use this directly
*/
@@ -32,8 +31,9 @@ class ElggTranslit {
/**
* Create a version of a string for embedding in a URL
- * @param string $string a UTF-8 string
- * @param string $separator
+ *
+ * @param string $string A UTF-8 string
+ * @param string $separator The character to separate words with
* @return string
*/
static public function urlize($string, $separator = '-') {
@@ -49,24 +49,29 @@ class ElggTranslit {
// Internationalization, AND 日本語!
$string = self::transliterateAscii($string);
- // more translation
+ // allow HTML tags in titles
+ $string = preg_replace('~<([a-zA-Z][^>]*)>~', ' $1 ', $string);
+
+ // more substitutions
+ // @todo put these somewhere else
$string = strtr($string, array(
- // Euro/GBP
- "\xE2\x82\xAC" /* € */ => 'E', "\xC2\xA3" /* £ */ => 'GBP',
+ // currency
+ "\xE2\x82\xAC" /* € */ => ' E ',
+ "\xC2\xA3" /* £ */ => ' GBP ',
));
// remove all ASCII except 0-9a-zA-Z, hyphen, underscore, and whitespace
// note: "x" modifier did not work with this pattern.
$string = preg_replace('~['
- . '\x00-\x08' # control chars
- . '\x0b\x0c' # vert tab, form feed
- . '\x0e-\x1f' # control chars
- . '\x21-\x2c' # ! ... ,
- . '\x2e\x2f' # . slash
- . '\x3a-\x40' # : ... @
- . '\x5b-\x5e' # [ ... ^
- . '\x60' # `
- . '\x7b-\x7f' # { ... DEL
+ . '\x00-\x08' // control chars
+ . '\x0b\x0c' // vert tab, form feed
+ . '\x0e-\x1f' // control chars
+ . '\x21-\x2c' // ! ... ,
+ . '\x2e\x2f' // . slash
+ . '\x3a-\x40' // : ... @
+ . '\x5b-\x5e' // [ ... ^
+ . '\x60' // `
+ . '\x7b-\x7f' // { ... DEL
. ']~', '', $string);
$string = strtr($string, '', '');
@@ -80,10 +85,10 @@ class ElggTranslit {
// note: we cannot use [^0-9a-zA-Z] because that matches multibyte chars.
// note: "x" modifier did not work with this pattern.
$pattern = '~['
- . '\x00-\x2f' # controls ... slash
- . '\x3a-\x40' # : ... @
- . '\x5b-\x60' # [ ... `
- . '\x7b-\x7f' # { ... DEL
+ . '\x00-\x2f' // controls ... slash
+ . '\x3a-\x40' // : ... @
+ . '\x5b-\x60' // [ ... `
+ . '\x7b-\x7f' // { ... DEL
. ']+~x';
// ['internationalization', 'and', '日本語']
@@ -98,6 +103,7 @@ class ElggTranslit {
/**
* Transliterate Western multibyte chars to ASCII
+ *
* @param string $utf8 a UTF-8 string
* @return string
*/
@@ -247,6 +253,7 @@ class ElggTranslit {
/**
* Tests that "normalizer_normalize" exists and works
+ *
* @return bool
*/
static public function hasNormalizerSupport() {
@@ -255,7 +262,7 @@ class ElggTranslit {
$form_c = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5)
$form_d = "A\xCC\x8A"; // A followed by 'COMBINING RING ABOVE' (U+030A)
$ret = (function_exists('normalizer_normalize')
- && $form_c === normalizer_normalize($form_d));
+ && $form_c === normalizer_normalize($form_d));
}
return $ret;
}
diff --git a/engine/classes/ElggUser.php b/engine/classes/ElggUser.php
index d7bb89265..6163f9b62 100644
--- a/engine/classes/ElggUser.php
+++ b/engine/classes/ElggUser.php
@@ -40,6 +40,9 @@ class ElggUser extends ElggEntity
$this->attributes['code'] = NULL;
$this->attributes['banned'] = "no";
$this->attributes['admin'] = 'no';
+ $this->attributes['prev_last_action'] = NULL;
+ $this->attributes['last_login'] = NULL;
+ $this->attributes['prev_last_login'] = NULL;
$this->attributes['tables_split'] = 2;
}
@@ -65,30 +68,26 @@ class ElggUser extends ElggEntity
$msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
throw new IOException($msg);
}
-
- // See if this is a username
} else if (is_string($guid)) {
+ // $guid is a username
$user = get_user_by_username($guid);
if ($user) {
foreach ($user->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
}
-
- // Is $guid is an ElggUser? Use a copy constructor
} else if ($guid instanceof ElggUser) {
+ // $guid is an ElggUser so this is a copy constructor
elgg_deprecated_notice('This type of usage of the ElggUser constructor was deprecated. Please use the clone method.', 1.7);
foreach ($guid->attributes as $key => $value) {
$this->attributes[$key] = $value;
}
-
- // Is this is an ElggEntity but not an ElggUser = ERROR!
} else if ($guid instanceof ElggEntity) {
+ // @todo why have a special case here
throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggUser'));
-
- // Is it a GUID
} else if (is_numeric($guid)) {
+ // $guid is a GUID so load entity
if (!$this->load($guid)) {
throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
}
@@ -106,37 +105,17 @@ class ElggUser extends ElggEntity
* @return bool
*/
protected function load($guid) {
- // Test to see if we have the generic stuff
- if (!parent::load($guid)) {
- return false;
- }
-
- // Only work with GUID from here
- if ($guid instanceof stdClass) {
- $guid = $guid->guid;
- }
-
- // Check the type
- if ($this->attributes['type'] != 'user') {
- $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
- throw new InvalidClassException($msg);
- }
+ $attr_loader = new ElggAttributeLoader(get_class(), 'user', $this->attributes);
+ $attr_loader->secondary_loader = 'get_user_entity_as_row';
- // Load missing data
- $row = get_user_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) {
- // If $row isn't a cached copy then increment the counter
- $this->attributes['tables_loaded']++;
- }
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach ($objarray as $key => $value) {
- $this->attributes[$key] = $value;
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
}
- // guid needs to be an int http://trac.elgg.org/ticket/4111
- $this->attributes['guid'] = (int)$this->attributes['guid'];
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
return true;
}
@@ -153,9 +132,13 @@ class ElggUser extends ElggEntity
}
// Now save specific stuff
- return create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'),
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'),
$this->get('password'), $this->get('salt'), $this->get('email'), $this->get('language'),
$this->get('code'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
}
/**
diff --git a/engine/classes/ElggVolatileMetadataCache.php b/engine/classes/ElggVolatileMetadataCache.php
index 24ae58d42..4acda7cee 100644
--- a/engine/classes/ElggVolatileMetadataCache.php
+++ b/engine/classes/ElggVolatileMetadataCache.php
@@ -33,9 +33,11 @@ class ElggVolatileMetadataCache {
protected $ignoreAccess = null;
/**
- * @param int $entity_guid
- *
- * @param array $values
+ * Cache metadata for an entity
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param array $values The metadata values to cache
+ * @return void
*/
public function saveAll($entity_guid, array $values) {
if (!$this->getIgnoreAccess()) {
@@ -45,8 +47,9 @@ class ElggVolatileMetadataCache {
}
/**
- * @param int $entity_guid
- *
+ * Get the metadata for an entity
+ *
+ * @param int $entity_guid The GUID of the entity
* @return array
*/
public function loadAll($entity_guid) {
@@ -61,15 +64,17 @@ class ElggVolatileMetadataCache {
* Declare that there may be fetch-able metadata names in storage that this
* cache doesn't know about
*
- * @param int $entity_guid
+ * @param int $entity_guid The GUID of the entity
+ * @return void
*/
public function markOutOfSync($entity_guid) {
unset($this->isSynchronized[$entity_guid]);
}
/**
- * @param $entity_guid
- *
+ * Have all the metadata for this entity been cached?
+ *
+ * @param int $entity_guid The GUID of the entity
* @return bool
*/
public function isSynchronized($entity_guid) {
@@ -77,13 +82,15 @@ class ElggVolatileMetadataCache {
}
/**
- * @param int $entity_guid
- *
- * @param string $name
- *
- * @param array|int|string|null $value null means it is known that there is no
- * fetch-able metadata under this name
- * @param bool $allow_multiple
+ * Cache a piece of metadata
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @param array|int|string|null $value The metadata value. null means it is
+ * known that there is no fetch-able
+ * metadata under this name
+ * @param bool $allow_multiple Can the metadata be an array
+ * @return void
*/
public function save($entity_guid, $name, $value, $allow_multiple = false) {
if ($this->getIgnoreAccess()) {
@@ -115,10 +122,8 @@ class ElggVolatileMetadataCache {
* function's return value should be trusted (otherwise a null return value
* is ambiguous).
*
- * @param int $entity_guid
- *
- * @param string $name
- *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
* @return array|string|int|null null = value does not exist
*/
public function load($entity_guid, $name) {
@@ -133,9 +138,9 @@ class ElggVolatileMetadataCache {
* Forget about this metadata entry. We don't want to try to guess what the
* next fetch from storage will return
*
- * @param int $entity_guid
- *
- * @param string $name
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @return void
*/
public function markUnknown($entity_guid, $name) {
unset($this->values[$entity_guid][$name]);
@@ -145,10 +150,8 @@ class ElggVolatileMetadataCache {
/**
* If true, load() will return an accurate value for this name
*
- * @param int $entity_guid
- *
- * @param string $name
- *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
* @return bool
*/
public function isKnown($entity_guid, $name) {
@@ -163,10 +166,8 @@ class ElggVolatileMetadataCache {
/**
* Declare that metadata under this name is known to be not fetch-able from storage
*
- * @param int $entity_guid
- *
- * @param string $name
- *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
* @return array
*/
public function markEmpty($entity_guid, $name) {
@@ -176,7 +177,8 @@ class ElggVolatileMetadataCache {
/**
* Forget about all metadata for an entity
*
- * @param int $entity_guid
+ * @param int $entity_guid The GUID of the entity
+ * @return void
*/
public function clear($entity_guid) {
$this->values[$entity_guid] = array();
@@ -185,6 +187,8 @@ class ElggVolatileMetadataCache {
/**
* Clear entire cache and mark all entities as out of sync
+ *
+ * @return void
*/
public function flush() {
$this->values = array();
@@ -197,7 +201,8 @@ class ElggVolatileMetadataCache {
*
* This setting makes this component a little more loosely-coupled.
*
- * @param bool $ignore
+ * @param bool $ignore Whether to ignore access or not
+ * @return void
*/
public function setIgnoreAccess($ignore) {
$this->ignoreAccess = (bool) $ignore;
@@ -205,12 +210,16 @@ class ElggVolatileMetadataCache {
/**
* Tell the cache to call elgg_get_ignore_access() to determing access status.
+ *
+ * @return void
*/
public function unsetIgnoreAccess() {
$this->ignoreAccess = null;
}
/**
+ * Get the ignore access value
+ *
* @return bool
*/
protected function getIgnoreAccess() {
@@ -225,12 +234,10 @@ class ElggVolatileMetadataCache {
* Invalidate based on options passed to the global *_metadata functions
*
* @param string $action Action performed on metadata. "delete", "disable", or "enable"
- *
- * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
- *
- * "guid" if given, invalidation will be limited to this entity
- *
- * "metadata_name" if given, invalidation will be limited to metadata with this name
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ * "guid" if given, invalidation will be limited to this entity
+ * "metadata_name" if given, invalidation will be limited to metadata with this name
+ * @return void
*/
public function invalidateByOptions($action, array $options) {
// remove as little as possible, optimizing for common cases
@@ -254,7 +261,10 @@ class ElggVolatileMetadataCache {
}
/**
- * @param int|array $guids
+ * Populate the cache from a set of entities
+ *
+ * @param int|array $guids Array of or single GUIDs
+ * @return void
*/
public function populateFromEntities($guids) {
if (empty($guids)) {
@@ -279,6 +289,9 @@ class ElggVolatileMetadataCache {
),
'selects' => array('n.string AS name', 'v.string AS value'),
'order_by' => 'n_table.entity_guid, n_table.time_created ASC',
+
+ // @todo don't know why this is necessary
+ 'wheres' => array(get_access_sql_suffix('n_table')),
);
$data = elgg_get_metadata($options);
@@ -315,9 +328,7 @@ class ElggVolatileMetadataCache {
* cache if RAM usage becomes an issue.
*
* @param array $guids GUIDs of entities to examine
- *
- * @param int $limit Limit in characters of all metadata (with ints casted to strings)
- *
+ * @param int $limit Limit in characters of all metadata (with ints casted to strings)
* @return array
*/
public function filterMetadataHeavyEntities(array $guids, $limit = 1024000) {
diff --git a/engine/classes/ElggWidget.php b/engine/classes/ElggWidget.php
index 99708f66a..66191bf47 100644
--- a/engine/classes/ElggWidget.php
+++ b/engine/classes/ElggWidget.php
@@ -7,6 +7,11 @@
*
* @package Elgg.Core
* @subpackage Widgets
+ *
+ * @property-read string $handler internal, do not use
+ * @property-read string $column internal, do not use
+ * @property-read string $order internal, do not use
+ * @property-read string $context internal, do not use
*/
class ElggWidget extends ElggObject {
@@ -141,10 +146,15 @@ class ElggWidget extends ElggObject {
}
}
+ $bottom_rank = count($widgets);
+ if ($column == $this->column) {
+ $bottom_rank--;
+ }
+
if ($rank == 0) {
// top of the column
$this->order = reset($widgets)->order - 10;
- } elseif ($rank == (count($widgets) - 1)) {
+ } elseif ($rank == $bottom_rank) {
// bottom of the column of active widgets
$this->order = end($widgets)->order + 10;
} else {
diff --git a/engine/classes/ElggXMLElement.php b/engine/classes/ElggXMLElement.php
new file mode 100644
index 000000000..cbd3fc5ce
--- /dev/null
+++ b/engine/classes/ElggXMLElement.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * A parser for XML that uses SimpleXMLElement
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+class ElggXMLElement {
+ /**
+ * @var SimpleXMLElement
+ */
+ private $_element;
+
+ /**
+ * Creates an ElggXMLParser from a string or existing SimpleXMLElement
+ *
+ * @param string|SimpleXMLElement $xml The XML to parse
+ */
+ public function __construct($xml) {
+ if ($xml instanceof SimpleXMLElement) {
+ $this->_element = $xml;
+ } else {
+ // do not load entities
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ $this->_element = new SimpleXMLElement($xml);
+
+ libxml_disable_entity_loader($disable_load_entities);
+ }
+ }
+
+ /**
+ * @return string The name of the element
+ */
+ public function getName() {
+ return $this->_element->getName();
+ }
+
+ /**
+ * @return string[] The attributes
+ */
+ public function getAttributes() {
+ //include namespace declarations as attributes
+ $xmlnsRaw = $this->_element->getNamespaces();
+ $xmlns = array();
+ foreach ($xmlnsRaw as $key => $val) {
+ $label = 'xmlns' . ($key ? ":$key" : $key);
+ $xmlns[$label] = $val;
+ }
+ //get attributes and merge with namespaces
+ $attrRaw = $this->_element->attributes();
+ $attr = array();
+ foreach ($attrRaw as $key => $val) {
+ $attr[$key] = $val;
+ }
+ $attr = array_merge((array) $xmlns, (array) $attr);
+ $result = array();
+ foreach ($attr as $key => $val) {
+ $result[$key] = (string) $val;
+ }
+ return $result;
+ }
+
+ /**
+ * @return string CData
+ */
+ public function getContent() {
+ return (string) $this->_element;
+ }
+
+ /**
+ * @return ElggXMLElement[] Child elements
+ */
+ public function getChildren() {
+ $children = $this->_element->children();
+ $result = array();
+ foreach ($children as $val) {
+ $result[] = new ElggXMLElement($val);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Override ->
+ *
+ * @param string $name Property name
+ * @return mixed
+ */
+ function __get($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName();
+ break;
+ case 'attributes':
+ return $this->getAttributes();
+ break;
+ case 'content':
+ return $this->getContent();
+ break;
+ case 'children':
+ return $this->getChildren();
+ break;
+ }
+ return null;
+ }
+
+ /**
+ * Override isset
+ *
+ * @param string $name Property name
+ * @return boolean
+ */
+ function __isset($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName() !== null;
+ break;
+ case 'attributes':
+ return $this->getAttributes() !== null;
+ break;
+ case 'content':
+ return $this->getContent() !== null;
+ break;
+ case 'children':
+ return $this->getChildren() !== null;
+ break;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/IncompleteEntityException.php b/engine/classes/IncompleteEntityException.php
new file mode 100644
index 000000000..8c86edcc6
--- /dev/null
+++ b/engine/classes/IncompleteEntityException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * IncompleteEntityException
+ * Thrown when constructing an entity that is missing its secondary entity table
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ * @access private
+ */
+class IncompleteEntityException extends Exception {}
diff --git a/engine/classes/ODDMetaData.php b/engine/classes/ODDMetaData.php
index 58862e0fb..09b653582 100644
--- a/engine/classes/ODDMetaData.php
+++ b/engine/classes/ODDMetaData.php
@@ -10,12 +10,12 @@ class ODDMetaData extends ODD {
/**
* New ODD metadata
*
- * @param unknown_type $uuid Unique ID
- * @param unknown_type $entity_uuid Another unique ID
- * @param unknown_type $name Name
- * @param unknown_type $value Value
- * @param unknown_type $type Type
- * @param unknown_type $owner_uuid Owner ID
+ * @param string $uuid Unique ID
+ * @param string $entity_uuid Another unique ID
+ * @param string $name Name
+ * @param string $value Value
+ * @param string $type Type
+ * @param string $owner_uuid Owner ID
*/
function __construct($uuid, $entity_uuid, $name, $value, $type = "", $owner_uuid = "") {
parent::__construct();
@@ -31,7 +31,7 @@ class ODDMetaData extends ODD {
/**
* Returns 'metadata'
*
- * @return 'metadata'
+ * @return string 'metadata'
*/
protected function getTagName() {
return "metadata";
diff --git a/engine/classes/ODDRelationship.php b/engine/classes/ODDRelationship.php
index 2906b1c73..8b1fe217b 100644
--- a/engine/classes/ODDRelationship.php
+++ b/engine/classes/ODDRelationship.php
@@ -10,9 +10,9 @@ class ODDRelationship extends ODD {
/**
* New ODD Relationship
*
- * @param unknown_type $uuid1 First UUID
- * @param unknown_type $type Type of telationship
- * @param unknown_type $uuid2 Second UUId
+ * @param string $uuid1 First UUID
+ * @param string $type Type of telationship
+ * @param string $uuid2 Second UUId
*/
function __construct($uuid1, $type, $uuid2) {
parent::__construct();
@@ -25,7 +25,7 @@ class ODDRelationship extends ODD {
/**
* Returns 'relationship'
*
- * @return 'relationship'
+ * @return string 'relationship'
*/
protected function getTagName() {
return "relationship";
diff --git a/engine/handlers/cache_handler.php b/engine/handlers/cache_handler.php
index b332ec379..36fc665bb 100644
--- a/engine/handlers/cache_handler.php
+++ b/engine/handlers/cache_handler.php
@@ -64,7 +64,7 @@ $ts = $matches[4];
// If is the same ETag, content didn't changed.
$etag = $ts;
-if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
+if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
header("HTTP/1.1 304 Not Modified");
exit;
}
@@ -80,23 +80,26 @@ switch ($type) {
break;
}
-header('Expires: ' . date('r', strtotime("+6 months")), true);
+header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
header("Pragma: public", true);
header("Cache-Control: public", true);
-header("ETag: $etag");
+header("ETag: \"$etag\"");
$filename = $dataroot . 'views_simplecache/' . md5($viewtype . $view);
if (file_exists($filename)) {
- $contents = file_get_contents($filename);
+ readfile($filename);
} else {
// someone trying to access a non-cached file or a race condition with cache flushing
mysql_close($mysql_dblink);
require_once(dirname(dirname(__FILE__)) . "/start.php");
- elgg_regenerate_simplecache();
+
+ global $CONFIG;
+ if (!in_array($view, $CONFIG->views->simplecache)) {
+ header("HTTP/1.1 404 Not Found");
+ exit;
+ }
elgg_set_viewtype($viewtype);
- $contents = elgg_view($view);
+ echo elgg_view($view);
}
-
-echo $contents;
diff --git a/engine/lib/access.php b/engine/lib/access.php
index e8b3b0d52..de0693ea8 100644
--- a/engine/lib/access.php
+++ b/engine/lib/access.php
@@ -12,6 +12,26 @@
*/
/**
+ * Return an ElggCache static variable cache for the access caches
+ *
+ * @staticvar ElggStaticVariableCache $access_cache
+ * @return \ElggStaticVariableCache
+ * @access private
+ */
+function _elgg_get_access_cache() {
+ /**
+ * A default filestore cache using the dataroot.
+ */
+ static $access_cache;
+
+ if (!$access_cache) {
+ $access_cache = new ElggStaticVariableCache('access');
+ }
+
+ return $access_cache;
+}
+
+/**
* Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause.
*
* @uses get_access_array
@@ -29,10 +49,10 @@
*/
function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
global $CONFIG, $init_finished;
- static $access_list;
-
- if (!isset($access_list)) {
- $access_list = array();
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
}
if ($user_id == 0) {
@@ -45,20 +65,20 @@ function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
$user_id = (int) $user_id;
$site_id = (int) $site_id;
- if (isset($access_list[$user_id]) && $flush == false) {
- return $access_list[$user_id];
- }
+ $hash = $user_id . $site_id . 'get_access_list';
- $access = "(" . implode(",", get_access_array($user_id, $site_id, $flush)) . ")";
+ if ($cache[$hash]) {
+ return $cache[$hash];
+ }
+
+ $access_array = get_access_array($user_id, $site_id, $flush);
+ $access = "(" . implode(",", $access_array) . ")";
- // only cache if done with init and access is enabled (unless admin user)
- // session is loaded before init is finished, so don't need to check for user session
- if ($init_finished && (elgg_is_admin_logged_in() || !elgg_get_ignore_access())) {
- $access_list[$user_id] = $access;
- return $access_list[$user_id];
- } else {
- return $access;
+ if ($init_finished) {
+ $cache[$hash] = $access;
}
+
+ return $access;
}
/**
@@ -86,12 +106,10 @@ function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
global $CONFIG, $init_finished;
- // @todo everything from the db is cached.
- // this cache might be redundant. But db cache is flushed on every db write.
- static $access_array;
+ $cache = _elgg_get_access_cache();
- if (!isset($access_array)) {
- $access_array = array();
+ if ($flush) {
+ $cache->clear();
}
if ($user_id == 0) {
@@ -105,35 +123,41 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
$user_id = (int) $user_id;
$site_id = (int) $site_id;
- if (empty($access_array[$user_id]) || $flush == true) {
- $tmp_access_array = array(ACCESS_PUBLIC);
+ $hash = $user_id . $site_id . 'get_access_array';
+
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ $access_array = array(ACCESS_PUBLIC);
// The following can only return sensible data if the user is logged in.
if (elgg_is_logged_in()) {
- $tmp_access_array[] = ACCESS_LOGGED_IN;
+ $access_array[] = ACCESS_LOGGED_IN;
// Get ACL memberships
$query = "SELECT am.access_collection_id"
. " FROM {$CONFIG->dbprefix}access_collection_membership am"
. " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id"
- . " WHERE am.user_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
+ . " WHERE am.user_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
- if ($collections = get_data($query)) {
+ $collections = get_data($query);
+ if ($collections) {
foreach ($collections as $collection) {
if (!empty($collection->access_collection_id)) {
- $tmp_access_array[] = (int)$collection->access_collection_id;
+ $access_array[] = (int)$collection->access_collection_id;
}
}
}
// Get ACLs owned.
$query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag ";
- $query .= "WHERE ag.owner_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
+ $query .= "WHERE ag.owner_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
- if ($collections = get_data($query)) {
+ $collections = get_data($query);
+ if ($collections) {
foreach ($collections as $collection) {
if (!empty($collection->id)) {
- $tmp_access_array[] = (int)$collection->id;
+ $access_array[] = (int)$collection->id;
}
}
}
@@ -141,21 +165,21 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
$ignore_access = elgg_check_access_overrides($user_id);
if ($ignore_access == true) {
- $tmp_access_array[] = ACCESS_PRIVATE;
+ $access_array[] = ACCESS_PRIVATE;
}
+ }
- // only cache if done with init and access is enabled (unless admin user)
- // session is loaded before init is finished, so don't need to check for user session
- if ($init_finished && (elgg_is_admin_logged_in() || !elgg_get_ignore_access())) {
- $access_array[$user_id] = $tmp_access_array;
- }
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
}
- } else {
- $tmp_access_array = $access_array[$user_id];
}
- $options = array('user_id' => $user_id, 'site_id' => $site_id);
- return elgg_trigger_plugin_hook('access:collections:read', 'user', $options, $tmp_access_array);
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+
+ return elgg_trigger_plugin_hook('access:collections:read', 'user', $options, $access_array);
}
/**
@@ -401,9 +425,12 @@ function has_access_to_entity($entity, $user = null) {
* @link http://docs.elgg.org/Access
*/
function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) {
- global $CONFIG;
- //@todo this is probably not needed since caching happens at the DB level.
- static $access_array;
+ global $CONFIG, $init_finished;
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
if ($user_id == 0) {
$user_id = elgg_get_logged_in_user_guid();
@@ -416,37 +443,41 @@ function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) {
$user_id = (int) $user_id;
$site_id = (int) $site_id;
- if (empty($access_array[$user_id]) || $flush == true) {
- $query = "SELECT ag.* FROM {$CONFIG->dbprefix}access_collections ag ";
- $query .= " WHERE (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
- $query .= " AND (ag.owner_guid = {$user_id})";
- // ACCESS_PRIVATE through ACCESS_PUBLIC take 0 through 2
- // @todo this AND clause is unnecessary because of id starts at 3 for table
- $query .= " AND ag.id >= 3";
+ $hash = $user_id . $site_id . 'get_write_access_array';
- $tmp_access_array = array(
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ // @todo is there such a thing as public write access?
+ $access_array = array(
ACCESS_PRIVATE => elgg_echo("PRIVATE"),
ACCESS_FRIENDS => elgg_echo("access:friends:label"),
ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
ACCESS_PUBLIC => elgg_echo("PUBLIC")
);
+
+ $query = "SELECT ag.* FROM {$CONFIG->dbprefix}access_collections ag ";
+ $query .= " WHERE (ag.site_guid = $site_id OR ag.site_guid = 0)";
+ $query .= " AND (ag.owner_guid = $user_id)";
+
$collections = get_data($query);
if ($collections) {
foreach ($collections as $collection) {
- $tmp_access_array[$collection->id] = $collection->name;
+ $access_array[$collection->id] = $collection->name;
}
}
- $access_array[$user_id] = $tmp_access_array;
- } else {
- $tmp_access_array = $access_array[$user_id];
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
+ }
}
- $options = array('user_id' => $user_id, 'site_id' => $site_id);
- $tmp_access_array = elgg_trigger_plugin_hook('access:collections:write', 'user',
- $options, $tmp_access_array);
-
- return $tmp_access_array;
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+ return elgg_trigger_plugin_hook('access:collections:write', 'user',
+ $options, $access_array);
}
/**
@@ -476,7 +507,7 @@ function can_edit_access_collection($collection_id, $user_guid = null) {
return false;
}
- $write_access = get_write_access_array($user->getGUID(), null, true);
+ $write_access = get_write_access_array($user->getGUID(), 0, true);
// don't ignore access when checking users.
if ($user_guid) {
@@ -560,8 +591,6 @@ function create_access_collection($name, $owner_guid = 0, $site_guid = 0) {
* @see remove_user_from_access_collection()
*/
function update_access_collection($collection_id, $members) {
- global $CONFIG;
-
$acl = get_access_collection($collection_id);
if (!$acl) {
@@ -877,6 +906,8 @@ function get_readable_access_level($entity_access_id) {
* @tip Use this to access entities in automated scripts
* when no user is logged in.
*
+ * @note This clears the access cache.
+ *
* @warning This will not show disabled entities.
* Use {@link access_show_hidden_entities()} to access disabled entities.
*
@@ -888,6 +919,8 @@ function get_readable_access_level($entity_access_id) {
* @see elgg_get_ignore_access()
*/
function elgg_set_ignore_access($ignore = true) {
+ $cache = _elgg_get_access_cache();
+ $cache->clear();
$elgg_access = elgg_get_access_object();
return $elgg_access->setIgnoreAccess($ignore);
}
@@ -982,6 +1015,10 @@ function access_init() {
*
* Returns true to override the access system or null if no change is needed.
*
+ * @param string $hook
+ * @param string $type
+ * @param bool $value
+ * @param array $params
* @return true|null
* @access private
*/
@@ -1014,10 +1051,18 @@ function elgg_override_permissions($hook, $type, $value, $params) {
/**
* Runs unit tests for the entities object.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
+ *
* @access private
*/
function access_test($hook, $type, $value, $params) {
global $CONFIG;
+
$value[] = $CONFIG->path . 'engine/tests/api/access_collections.php';
return $value;
}
diff --git a/engine/lib/actions.php b/engine/lib/actions.php
index 53b185dea..8047914ac 100644
--- a/engine/lib/actions.php
+++ b/engine/lib/actions.php
@@ -65,18 +65,16 @@ function action($action, $forwarder = "") {
// @todo REMOVE THESE ONCE #1509 IS IN PLACE.
// Allow users to disable plugins without a token in order to
// remove plugins that are incompatible.
- // Login and logout are for convenience.
+ // Logout for convenience.
// file/download (see #2010)
$exceptions = array(
'admin/plugins/disable',
'logout',
- 'login',
'file/download',
);
if (!in_array($action, $exceptions)) {
- // All actions require a token.
- action_gatekeeper();
+ action_gatekeeper($action);
}
$forwarder = str_replace(elgg_get_site_url(), "", $forwarder);
@@ -189,6 +187,26 @@ function elgg_unregister_action($action) {
}
/**
+ * Is the token timestamp within acceptable range?
+ *
+ * @param int $ts timestamp from the CSRF token
+ *
+ * @return bool
+ */
+function _elgg_validate_token_timestamp($ts) {
+ $action_token_timeout = elgg_get_config('action_token_timeout');
+ // default is 2 hours
+ $timeout = ($action_token_timeout !== null) ? $action_token_timeout : 2;
+
+ $hour = 60 * 60;
+ $timeout = $timeout * $hour;
+ $now = time();
+
+ // Validate time to ensure its not crazy
+ return ($timeout == 0 || ($ts > $now - $timeout) && ($ts < $now + $timeout));
+}
+
+/**
* Validate an action token.
*
* Calls to actions will automatically validate tokens. If tokens are not
@@ -206,8 +224,6 @@ function elgg_unregister_action($action) {
* @access private
*/
function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL) {
- global $CONFIG;
-
if (!$token) {
$token = get_input('__elgg_token');
}
@@ -216,29 +232,18 @@ function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL)
$ts = get_input('__elgg_ts');
}
- if (!isset($CONFIG->action_token_timeout)) {
- // default to 2 hours
- $timeout = 2;
- } else {
- $timeout = $CONFIG->action_token_timeout;
- }
-
$session_id = session_id();
if (($token) && ($ts) && ($session_id)) {
// generate token, check with input and forward if invalid
- $generated_token = generate_action_token($ts);
+ $required_token = generate_action_token($ts);
// Validate token
- if ($token == $generated_token) {
- $hour = 60 * 60;
- $timeout = $timeout * $hour;
- $now = time();
-
- // Validate time to ensure its not crazy
- if ($timeout == 0 || ($ts > $now - $timeout) && ($ts < $now + $timeout)) {
+ if ($token == $required_token) {
+
+ if (_elgg_validate_token_timestamp($ts)) {
// We have already got this far, so unless anything
- // else says something to the contry we assume we're ok
+ // else says something to the contrary we assume we're ok
$returnval = true;
$returnval = elgg_trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', array(
@@ -252,10 +257,20 @@ function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL)
register_error(elgg_echo('actiongatekeeper:pluginprevents'));
}
} else if ($visibleerrors) {
- register_error(elgg_echo('actiongatekeeper:timeerror'));
+ // this is necessary because of #5133
+ if (elgg_is_xhr()) {
+ register_error(elgg_echo('js:security:token_refresh_failed', array(elgg_get_site_url())));
+ } else {
+ register_error(elgg_echo('actiongatekeeper:timeerror'));
+ }
}
} else if ($visibleerrors) {
- register_error(elgg_echo('actiongatekeeper:tokeninvalid'));
+ // this is necessary because of #5133
+ if (elgg_is_xhr()) {
+ register_error(elgg_echo('js:security:token_refresh_failed', array(elgg_get_site_url())));
+ } else {
+ register_error(elgg_echo('actiongatekeeper:tokeninvalid'));
+ }
}
} else {
if (! empty($_SERVER['CONTENT_LENGTH']) && empty($_POST)) {
@@ -284,12 +299,33 @@ function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL)
* This function verifies form input for security features (like a generated token),
* and forwards if they are invalid.
*
+ * @param string $action The action being performed
+ *
* @return mixed True if valid or redirects.
* @access private
*/
-function action_gatekeeper() {
- if (validate_action_token()) {
- return TRUE;
+function action_gatekeeper($action) {
+ if ($action === 'login') {
+ if (validate_action_token(false)) {
+ return true;
+ }
+
+ $token = get_input('__elgg_token');
+ $ts = (int)get_input('__elgg_ts');
+ if ($token && _elgg_validate_token_timestamp($ts)) {
+ // The tokens are present and the time looks valid: this is probably a mismatch due to the
+ // login form being on a different domain.
+ register_error(elgg_echo('actiongatekeeper:crosssitelogin'));
+
+
+ forward('login', 'csrf');
+ }
+
+ // let the validator send an appropriate msg
+ validate_action_token();
+
+ } elseif (validate_action_token()) {
+ return true;
}
forward(REFERER, 'csrf');
@@ -328,16 +364,19 @@ function generate_action_token($timestamp) {
}
/**
- * Initialise the site secret hash.
+ * Initialise the site secret (32 bytes: "z" to indicate format + 186-bit key in Base64 URL).
*
* Used during installation and saves as a datalist.
*
+ * Note: Old secrets were hex encoded.
+ *
* @return mixed The site secret hash or false
* @access private
* @todo Move to better file.
*/
function init_site_secret() {
- $secret = md5(rand() . microtime());
+ $secret = 'z' . ElggCrypto::getRandomString(31);
+
if (datalist_set('__site_secret__', $secret)) {
return $secret;
}
@@ -364,6 +403,26 @@ function get_site_secret() {
}
/**
+ * Get the strength of the site secret
+ *
+ * @return string "strong", "moderate", or "weak"
+ * @access private
+ */
+function _elgg_get_site_secret_strength() {
+ $secret = get_site_secret();
+ if ($secret[0] !== 'z') {
+ $rand_max = getrandmax();
+ if ($rand_max < pow(2, 16)) {
+ return 'weak';
+ }
+ if ($rand_max < pow(2, 32)) {
+ return 'moderate';
+ }
+ }
+ return 'strong';
+}
+
+/**
* Check if an action is registered and its script exists.
*
* @param string $action Action name
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index b65d98c95..f36f29668 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -134,11 +134,11 @@ function elgg_delete_admin_notice($id) {
}
/**
- * List all admin messages.
+ * Get admin notices. An admin must be logged in since the notices are private.
*
* @param int $limit Limit
*
- * @return array List of admin notices
+ * @return array Array of admin notices
* @since 1.8.0
*/
function elgg_get_admin_notices($limit = 10) {
@@ -158,11 +158,13 @@ function elgg_get_admin_notices($limit = 10) {
* @since 1.8.0
*/
function elgg_admin_notice_exists($id) {
+ $old_ia = elgg_set_ignore_access(true);
$notice = elgg_get_entities_from_metadata(array(
'type' => 'object',
'subtype' => 'admin_notice',
'metadata_name_value_pair' => array('name' => 'admin_notice_id', 'value' => $id)
));
+ elgg_set_ignore_access($old_ia);
return ($notice) ? TRUE : FALSE;
}
@@ -233,6 +235,8 @@ function admin_init() {
elgg_register_action('admin/site/update_basic', '', 'admin');
elgg_register_action('admin/site/update_advanced', '', 'admin');
elgg_register_action('admin/site/flush_cache', '', 'admin');
+ elgg_register_action('admin/site/unlock_upgrade', '', 'admin');
+ elgg_register_action('admin/site/regenerate_secret', '', 'admin');
elgg_register_action('admin/menu/save', '', 'admin');
@@ -268,8 +272,9 @@ function admin_init() {
// users
elgg_register_admin_menu_item('administer', 'users', null, 20);
elgg_register_admin_menu_item('administer', 'online', 'users', 10);
- elgg_register_admin_menu_item('administer', 'newest', 'users', 20);
- elgg_register_admin_menu_item('administer', 'add', 'users', 30);
+ elgg_register_admin_menu_item('administer', 'admins', 'users', 20);
+ elgg_register_admin_menu_item('administer', 'newest', 'users', 30);
+ elgg_register_admin_menu_item('administer', 'add', 'users', 40);
// configure
// plugins
@@ -287,6 +292,7 @@ function admin_init() {
elgg_register_admin_menu_item('configure', 'settings', null, 100);
elgg_register_admin_menu_item('configure', 'basic', 'settings', 10);
elgg_register_admin_menu_item('configure', 'advanced', 'settings', 20);
+ elgg_register_admin_menu_item('configure', 'advanced/site_secret', 'settings', 25);
elgg_register_admin_menu_item('configure', 'menu_items', 'appearance', 30);
elgg_register_admin_menu_item('configure', 'profile_fields', 'appearance', 40);
// default widgets is added via an event handler elgg_default_widgets_init() in widgets.php
@@ -344,7 +350,7 @@ function elgg_admin_add_plugin_settings_menu() {
$active_plugins = elgg_get_plugins('active');
if (!$active_plugins) {
// nothing added because no items
- return FALSE;
+ return;
}
foreach ($active_plugins as $plugin) {
@@ -378,6 +384,7 @@ function elgg_admin_add_plugin_settings_menu() {
*/
function elgg_admin_sort_page_menu($hook, $type, $return, $params) {
$configure_items = $return['configure'];
+ /* @var ElggMenuItem[] $configure_items */
foreach ($configure_items as $menu_item) {
if ($menu_item->getName() == 'settings') {
$settings = $menu_item;
@@ -385,6 +392,7 @@ function elgg_admin_sort_page_menu($hook, $type, $return, $params) {
}
// keep the basic and advanced settings at the top
+ /* @var ElggMenuItem $settings */
$children = $settings->getChildren();
$site_settings = array_splice($children, 0, 2);
usort($children, array('ElggMenuBuilder', 'compareByText'));
@@ -421,7 +429,7 @@ function admin_pagesetup() {
elgg_register_menu_item('admin_footer', array(
'name' => 'community_forums',
'text' => elgg_echo('admin:footer:community_forums'),
- 'href' => 'http://community.elgg.org/pg/groups/world/',
+ 'href' => 'http://community.elgg.org/groups/all/',
));
elgg_register_menu_item('admin_footer', array(
@@ -464,14 +472,18 @@ function admin_page_handler($page) {
$vars = array('page' => $page);
// special page for plugin settings since we create the form for them
- if ($page[0] == 'plugin_settings' && isset($page[1]) &&
- (elgg_view_exists("settings/{$page[1]}/edit") || elgg_view_exists("plugins/{$page[1]}/settings"))) {
+ if ($page[0] == 'plugin_settings') {
+ if (isset($page[1]) && (elgg_view_exists("settings/{$page[1]}/edit") ||
+ elgg_view_exists("plugins/{$page[1]}/settings"))) {
- $view = 'admin/plugin_settings';
- $plugin = elgg_get_plugin_from_id($page[1]);
- $vars['plugin'] = $plugin;
+ $view = 'admin/plugin_settings';
+ $plugin = elgg_get_plugin_from_id($page[1]);
+ $vars['plugin'] = $plugin;
- $title = elgg_echo("admin:{$page[0]}");
+ $title = elgg_echo("admin:{$page[0]}");
+ } else {
+ forward('', '404');
+ }
} else {
$view = 'admin/' . implode('/', $page);
$title = elgg_echo("admin:{$page[0]}");
@@ -550,7 +562,7 @@ function admin_plugin_screenshot_page_handler($pages) {
* * COPYRIGHT.txt
* * LICENSE.txt
*
- * @param type $page
+ * @param array $pages
* @return bool
* @access private
*/
@@ -613,7 +625,11 @@ function admin_markdown_page_handler($pages) {
/**
* Adds default admin widgets to the admin dashboard.
*
- * @return void
+ * @param string $event
+ * @param string $type
+ * @param ElggUser $user
+ *
+ * @return null|true
* @access private
*/
function elgg_add_admin_widgets($event, $type, $user) {
@@ -635,6 +651,7 @@ function elgg_add_admin_widgets($event, $type, $user) {
$guid = elgg_create_widget($user->getGUID(), $handler, 'admin');
if ($guid) {
$widget = get_entity($guid);
+ /* @var ElggWidget $widget */
$widget->move($column, $position);
}
}
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php
index 2036ccd61..5e9b530de 100644
--- a/engine/lib/annotations.php
+++ b/engine/lib/annotations.php
@@ -17,6 +17,7 @@
*/
function row_to_elggannotation($row) {
if (!($row instanceof stdClass)) {
+ // @todo should throw in this case?
return $row;
}
@@ -30,7 +31,7 @@ function row_to_elggannotation($row) {
*
* @param int $id The id of the annotation object being retrieved.
*
- * @return false|ElggAnnotation
+ * @return ElggAnnotation|false
*/
function elgg_get_annotation_from_id($id) {
return elgg_get_metastring_based_object_from_id($id, 'annotations');
@@ -195,10 +196,22 @@ function update_annotation($annotation_id, $name, $value, $value_type, $owner_gu
* for the proper use of the "calculation" option.
*
*
- * @return mixed
+ * @return ElggAnnotation[]|mixed
* @since 1.8.0
*/
function elgg_get_annotations(array $options = array()) {
+
+ // @todo remove support for count shortcut - see #4393
+ if (isset($options['__egefac']) && $options['__egefac']) {
+ unset($options['__egefac']);
+ } else {
+ // support shortcut of 'count' => true for 'annotation_calculation' => 'count'
+ if (isset($options['count']) && $options['count']) {
+ $options['annotation_calculation'] = 'count';
+ unset($options['count']);
+ }
+ }
+
$options['metastring_type'] = 'annotations';
return elgg_get_metastring_based_objects($options);
}
@@ -211,7 +224,7 @@ function elgg_get_annotations(array $options = array()) {
* annotation_name(s), annotation_value(s), or guid(s) must be set.
*
* @param array $options An options array. {@See elgg_get_annotations()}
- * @return mixed Null if the metadata name is invalid. Bool on success or fail.
+ * @return bool|null true on success, false on failure, null if no annotations to delete.
* @since 1.8.0
*/
function elgg_delete_annotations(array $options) {
@@ -229,16 +242,20 @@ function elgg_delete_annotations(array $options) {
* @warning Unlike elgg_get_annotations() this will not accept an empty options array!
*
* @param array $options An options array. {@See elgg_get_annotations()}
- * @return mixed
+ * @return bool|null true on success, false on failure, null if no annotations disabled.
* @since 1.8.0
*/
function elgg_disable_annotations(array $options) {
if (!elgg_is_valid_options_for_batch_operation($options, 'annotations')) {
return false;
}
+
+ // if we can see hidden (disabled) we need to use the offset
+ // otherwise we risk an infinite loop if there are more than 50
+ $inc_offset = access_get_show_hidden_status();
$options['metastring_type'] = 'annotations';
- return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', false);
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', $inc_offset);
}
/**
@@ -246,8 +263,11 @@ function elgg_disable_annotations(array $options) {
*
* @warning Unlike elgg_get_annotations() this will not accept an empty options array!
*
+ * @warning In order to enable annotations, you must first use
+ * {@link access_show_hidden_entities()}.
+ *
* @param array $options An options array. {@See elgg_get_annotations()}
- * @return mixed
+ * @return bool|null true on success, false on failure, null if no metadata enabled.
* @since 1.8.0
*/
function elgg_enable_annotations(array $options) {
@@ -316,8 +336,6 @@ function elgg_list_annotations($options) {
*
* annotation_owner_guids => NULL|ARR guids for annotaiton owners
*
- * annotation_ids => NULL|ARR Annotation IDs
- *
* @return mixed If count, int. If not count, array. false on errors.
* @since 1.7.0
*/
@@ -336,8 +354,6 @@ function elgg_get_entities_from_annotations(array $options = array()) {
'annotation_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
- 'annotation_ids' => ELGG_ENTITIES_ANY_VALUE,
-
'order_by' => 'maxtime desc',
'group_by' => 'a.entity_guid'
);
@@ -345,12 +361,13 @@ function elgg_get_entities_from_annotations(array $options = array()) {
$options = array_merge($defaults, $options);
$singulars = array('annotation_name', 'annotation_value',
- 'annotation_name_value_pair', 'annotation_owner_guid', 'annotation_id');
+ 'annotation_name_value_pair', 'annotation_owner_guid');
$options = elgg_normalise_plural_options_array($options, $singulars);
+ $options = elgg_entities_get_metastrings_options('annotation', $options);
- if (!$options = elgg_entities_get_metastrings_options('annotation', $options)) {
- return FALSE;
+ if (!$options) {
+ return false;
}
// special sorting for annotations
@@ -406,8 +423,8 @@ function elgg_list_entities_from_annotations($options = array()) {
function elgg_get_entities_from_annotation_calculation($options) {
$db_prefix = elgg_get_config('dbprefix');
$defaults = array(
- 'calculation' => 'sum',
- 'order_by' => 'annotation_calculation desc'
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
);
$options = array_merge($defaults, $options);
@@ -427,6 +444,10 @@ function elgg_get_entities_from_annotation_calculation($options) {
$options['callback'] = 'entity_row_to_elggstar';
+ // see #4393
+ // @todo remove after the 'count' shortcut is removed from elgg_get_annotations()
+ $options['__egefac'] = true;
+
return elgg_get_annotations($options);
}
@@ -440,23 +461,30 @@ function elgg_get_entities_from_annotation_calculation($options) {
* @return string
*/
function elgg_list_entities_from_annotation_calculation($options) {
+ $defaults = array(
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
+ );
+ $options = array_merge($defaults, $options);
+
return elgg_list_entities($options, 'elgg_get_entities_from_annotation_calculation');
}
/**
- * Handler called by trigger_plugin_hook on the "export" event.
+ * Export the annotations for the specified entity
*
* @param string $hook 'export'
- * @param string $entity_type 'all'
+ * @param string $type 'all'
* @param mixed $returnvalue Default return value
- * @param mixed $params List of params to export
+ * @param mixed $params Parameters determining what annotations to export
*
* @elgg_plugin_hook export all
*
- * @return mixed
+ * @return array
+ * @throws InvalidParameterException
* @access private
*/
-function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+function export_annotation_plugin_hook($hook, $type, $returnvalue, $params) {
// Sanity check values
if ((!is_array($params)) && (!isset($params['guid']))) {
throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
@@ -467,12 +495,12 @@ function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $param
}
$guid = (int)$params['guid'];
- $name = $params['name'];
+ $options = array('guid' => $guid, 'limit' => 0);
+ if (isset($params['name'])) {
+ $options['annotation_name'] = $params['name'];
+ }
- $result = elgg_get_annotations(array(
- 'guid' => $guid,
- 'limit' => 0
- ));
+ $result = elgg_get_annotations($options);
if ($result) {
foreach ($result as $r) {
@@ -517,15 +545,16 @@ function elgg_annotation_exists($entity_guid, $annotation_type, $owner_guid = NU
return FALSE;
}
- $entity_guid = (int)$entity_guid;
- $annotation_type = sanitise_string($annotation_type);
+ $entity_guid = sanitize_int($entity_guid);
+ $owner_guid = sanitize_int($owner_guid);
+ $annotation_type = sanitize_string($annotation_type);
- $sql = "select a.id" .
- " FROM {$CONFIG->dbprefix}annotations a, {$CONFIG->dbprefix}metastrings m " .
- " WHERE a.owner_guid={$owner_guid} AND a.entity_guid={$entity_guid} " .
- " AND a.name_id=m.id AND m.string='{$annotation_type}'";
+ $sql = "SELECT a.id FROM {$CONFIG->dbprefix}annotations a" .
+ " JOIN {$CONFIG->dbprefix}metastrings m ON a.name_id = m.id" .
+ " WHERE a.owner_guid = $owner_guid AND a.entity_guid = $entity_guid" .
+ " AND m.string = '$annotation_type'";
- if ($check_annotation = get_data_row($sql)) {
+ if (get_data_row($sql)) {
return TRUE;
}
@@ -544,6 +573,7 @@ function elgg_comment_url_handler(ElggAnnotation $comment) {
if ($entity) {
return $entity->getURL() . '#item-annotation-' . $comment->id;
}
+ return "";
}
/**
@@ -560,6 +590,12 @@ function elgg_register_annotation_url_handler($extender_name = "all", $function_
/**
* Register annotation unit tests
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
* @access private
*/
function annotations_test($hook, $type, $value, $params) {
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index be1c43e14..3116c1a9b 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -125,7 +125,7 @@ function elgg_get_filepath_cache() {
* @access private
*/
function elgg_filepath_cache_reset() {
- return elgg_reset_system_cache();
+ elgg_reset_system_cache();
}
/**
* @access private
@@ -143,13 +143,13 @@ function elgg_filepath_cache_load($type) {
* @access private
*/
function elgg_enable_filepath_cache() {
- return elgg_enable_system_cache();
+ elgg_enable_system_cache();
}
/**
* @access private
*/
function elgg_disable_filepath_cache() {
- return elgg_disable_system_cache();
+ elgg_disable_system_cache();
}
/* Simplecache */
@@ -208,6 +208,7 @@ function elgg_get_simplecache_url($type, $view) {
global $CONFIG;
$lastcache = (int)$CONFIG->lastcache;
$viewtype = elgg_get_viewtype();
+ elgg_register_simplecache_view("$type/$view");// see #5302
if (elgg_is_simplecache_enabled()) {
$url = elgg_get_site_url() . "cache/$type/$viewtype/$view.$lastcache.$type";
} else {
@@ -222,7 +223,7 @@ function elgg_get_simplecache_url($type, $view) {
/**
* Regenerates the simple cache.
*
- * @warning This does not invalidate the cache, but actively resets it.
+ * @warning This does not invalidate the cache, but actively rebuilds it.
*
* @param string $viewtype Optional viewtype to regenerate. Defaults to all valid viewtypes.
*
@@ -444,7 +445,7 @@ function _elgg_cache_init() {
if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
reload_all_translations();
foreach ($CONFIG->translations as $lang => $map) {
- elgg_save_system_cache("$lang.php", serialize($map));
+ elgg_save_system_cache("$lang.lang", serialize($map));
}
}
}
diff --git a/engine/lib/calendar.php b/engine/lib/calendar.php
index 9a06c5292..e6f95934c 100644
--- a/engine/lib/calendar.php
+++ b/engine/lib/calendar.php
@@ -39,6 +39,8 @@ function get_day_end($day = null, $month = null, $year = null) {
/**
* Return the notable entities for a given time period.
*
+ * @todo this function also accepts an array(type => subtypes) for 3rd arg. Should we document this?
+ *
* @param int $start_time The start time as a unix timestamp.
* @param int $end_time The end time as a unix timestamp.
* @param string $type The type of entity (eg "user", "object" etc)
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
index 305aa00b6..55e5bbd36 100644
--- a/engine/lib/configuration.php
+++ b/engine/lib/configuration.php
@@ -36,6 +36,7 @@ function elgg_get_site_url($site_guid = 0) {
if (!$site instanceof ElggSite) {
return false;
}
+ /* @var ElggSite $site */
return $site->url;
}
@@ -91,23 +92,29 @@ function elgg_get_config($name, $site_guid = 0) {
return $CONFIG->$name;
}
- if ($site_guid === NULL) {
+ if ($site_guid === null) {
// installation wide setting
$value = datalist_get($name);
} else {
- // site specific setting
- if ($site_guid == 0) {
- $site_guid = (int) $CONFIG->site_id;
+ // hit DB only if we're not sure if value exists or not
+ if (!isset($CONFIG->site_config_loaded)) {
+ // site specific setting
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ $value = get_config($name, $site_guid);
+ } else {
+ $value = null;
}
- $value = get_config($name, $site_guid);
}
- if ($value !== false) {
- $CONFIG->$name = $value;
- return $value;
+ // @todo document why we don't cache false
+ if ($value === false) {
+ return null;
}
- return null;
+ $CONFIG->$name = $value;
+ return $value;
}
/**
@@ -132,7 +139,7 @@ function elgg_set_config($name, $value) {
/**
* Save a configuration setting
*
- * @param string $name Configuration name (cannot be greater than 32 characters)
+ * @param string $name Configuration name (cannot be greater than 255 characters)
* @param mixed $value Configuration value. Should be string for installation setting
* @param int $site_guid NULL for installation setting, 0 for default site
*
@@ -167,7 +174,7 @@ function elgg_save_config($name, $value, $site_guid = 0) {
/**
* Check that installation has completed and the database is populated.
*
- * @throws InstallationException
+ * @throws InstallationException|DatabaseException
* @return void
* @access private
*/
@@ -175,7 +182,7 @@ function verify_installation() {
global $CONFIG;
if (isset($CONFIG->installed)) {
- return $CONFIG->installed;
+ return;
}
try {
@@ -221,9 +228,9 @@ function datalist_get($name) {
$name = trim($name);
- // cannot store anything longer than 32 characters in db, so catch here
- if (elgg_strlen($name) > 32) {
- elgg_log("The name length for configuration variables cannot be greater than 32", "ERROR");
+ // cannot store anything longer than 255 characters in db, so catch here
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
return false;
}
@@ -280,7 +287,7 @@ function datalist_get($name) {
function datalist_set($name, $value) {
global $CONFIG, $DATALIST_CACHE;
- // cannot store anything longer than 32 characters in db, so catch before we set
+ // cannot store anything longer than 255 characters in db, so catch before we set
if (elgg_strlen($name) > 255) {
elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
return false;
@@ -326,7 +333,7 @@ function datalist_set($name, $value) {
* This will cause the run once function to be run on all installations. To perform
* additional upgrades, create new functions for each release.
*
- * @warning The function name cannot be longer than 32 characters long due to
+ * @warning The function name cannot be longer than 255 characters long due to
* the current schema for the datalist table.
*
* @internal A datalist entry $functioname is created with the value of time().
@@ -401,7 +408,7 @@ function unset_config($name, $site_guid = 0) {
* @param string $value Its value
* @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
*
- * @return 0
+ * @return bool
* @todo The config table doens't have numeric primary keys so insert_data returns 0.
* @todo Use "INSERT ... ON DUPLICATE KEY UPDATE" instead of trying to delete then add.
* @see unset_config()
@@ -413,9 +420,9 @@ function set_config($name, $value, $site_guid = 0) {
$name = trim($name);
- // cannot store anything longer than 32 characters in db, so catch before we set
- if (elgg_strlen($name) > 32) {
- elgg_log("The name length for configuration variables cannot be greater than 32", "ERROR");
+ // cannot store anything longer than 255 characters in db, so catch before we set
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
return false;
}
@@ -479,9 +486,9 @@ function get_config($name, $site_guid = 0) {
// @todo these haven't really been implemented in Elgg 1.8. Complete in 1.9.
// show dep message
if ($new_name) {
- // $msg = "Config value $name has been renamed as $new_name";
+ // $msg = "Config value $name has been renamed as $new_name";
$name = $new_name;
- // elgg_deprecated_notice($msg, $dep_version);
+ // elgg_deprecated_notice($msg, $dep_version);
}
// decide from where to return the value
@@ -558,6 +565,8 @@ function _elgg_load_site_config() {
$CONFIG->url = $CONFIG->wwwroot;
get_all_config();
+ // gives hint to elgg_get_config function how to approach missing values
+ $CONFIG->site_config_loaded = true;
}
/**
diff --git a/engine/lib/cron.php b/engine/lib/cron.php
index f7a032f4a..4f3d05b93 100644
--- a/engine/lib/cron.php
+++ b/engine/lib/cron.php
@@ -26,11 +26,10 @@ function cron_init() {
* @param array $page Pages
*
* @return bool
+ * @throws CronException
* @access private
*/
function cron_page_handler($page) {
- global $CONFIG;
-
if (!isset($page[0])) {
forward();
}
@@ -51,7 +50,6 @@ function cron_page_handler($page) {
$params['time'] = time();
// Data to return to
- $std_out = "";
$old_stdout = "";
ob_start();
diff --git a/engine/lib/database.php b/engine/lib/database.php
index 7d90b30b8..a7949788d 100644
--- a/engine/lib/database.php
+++ b/engine/lib/database.php
@@ -12,15 +12,19 @@
/**
* Query cache for all queries.
*
- * Each query and its results are stored in this array as:
+ * Each query and its results are stored in this cache as:
* <code>
- * $DB_QUERY_CACHE[$query] => array(result1, result2, ... resultN)
+ * $DB_QUERY_CACHE[query hash] => array(result1, result2, ... resultN)
* </code>
+ * @see elgg_query_runner() for details on the hash.
*
- * @global array $DB_QUERY_CACHE
+ * @warning Elgg used to set this as an empty array to turn off the cache
+ *
+ * @global ElggLRUCache|null $DB_QUERY_CACHE
+ * @access private
*/
global $DB_QUERY_CACHE;
-$DB_QUERY_CACHE = array();
+$DB_QUERY_CACHE = null;
/**
* Queries to be executed upon shutdown.
@@ -38,6 +42,7 @@ $DB_QUERY_CACHE = array();
* </code>
*
* @global array $DB_DELAYED_QUERIES
+ * @access private
*/
global $DB_DELAYED_QUERIES;
$DB_DELAYED_QUERIES = array();
@@ -48,7 +53,8 @@ $DB_DELAYED_QUERIES = array();
* Each database link created with establish_db_link($name) is stored in
* $dblink as $dblink[$name] => resource. Use get_db_link($name) to retrieve it.
*
- * @global array $dblink
+ * @global resource[] $dblink
+ * @access private
*/
global $dblink;
$dblink = array();
@@ -59,6 +65,7 @@ $dblink = array();
* Each call to the database increments this counter.
*
* @global integer $dbcalls
+ * @access private
*/
global $dbcalls;
$dbcalls = 0;
@@ -72,11 +79,12 @@ $dbcalls = 0;
* resource. eg "read", "write", or "readwrite".
*
* @return void
+ * @throws DatabaseException
* @access private
*/
function establish_db_link($dblinkname = "readwrite") {
// Get configuration, and globalise database link
- global $CONFIG, $dblink, $DB_QUERY_CACHE, $dbcalls;
+ global $CONFIG, $dblink, $DB_QUERY_CACHE;
if ($dblinkname != "readwrite" && isset($CONFIG->db[$dblinkname])) {
if (is_array($CONFIG->db[$dblinkname])) {
@@ -120,7 +128,8 @@ function establish_db_link($dblinkname = "readwrite") {
// Set up cache if global not initialized and query cache not turned off
if ((!$DB_QUERY_CACHE) && (!$db_cache_off)) {
- $DB_QUERY_CACHE = new ElggStaticVariableCache('db_query_cache');
+ // @todo if we keep this cache in 1.9, expose the size as a config parameter
+ $DB_QUERY_CACHE = new ElggLRUCache(200);
}
}
@@ -134,7 +143,7 @@ function establish_db_link($dblinkname = "readwrite") {
* @access private
*/
function setup_db_connections() {
- global $CONFIG, $dblink;
+ global $CONFIG;
if (!empty($CONFIG->db->split)) {
establish_db_link('read');
@@ -197,7 +206,7 @@ function db_delayedexecution_shutdown_hook() {
*
* @param string $dblinktype The type of link we want: "read", "write" or "readwrite".
*
- * @return object Database link
+ * @return resource Database link
* @access private
*/
function get_db_link($dblinktype) {
@@ -216,7 +225,7 @@ function get_db_link($dblinktype) {
/**
* Execute an EXPLAIN for $query.
*
- * @param str $query The query to explain
+ * @param string $query The query to explain
* @param mixed $link The database link resource to user.
*
* @return mixed An object of the query's result, or FALSE
@@ -240,14 +249,14 @@ function explain_query($query, $link) {
* {@link $dbcalls} is incremented and the query is saved into the {@link $DB_QUERY_CACHE}.
*
* @param string $query The query
- * @param link $dblink The DB link
+ * @param resource $dblink The DB link
*
- * @return The result of mysql_query()
+ * @return resource result of mysql_query()
* @throws DatabaseException
* @access private
*/
function execute_query($query, $dblink) {
- global $CONFIG, $dbcalls;
+ global $dbcalls;
if ($query == NULL) {
throw new DatabaseException(elgg_echo('DatabaseException:InvalidQuery'));
@@ -275,7 +284,7 @@ function execute_query($query, $dblink) {
* the raw result from {@link mysql_query()}.
*
* @param string $query The query to execute
- * @param resource $dblink The database link to use or the link type (read | write)
+ * @param resource|string $dblink The database link to use or the link type (read | write)
* @param string $handler A callback function to pass the results array to
*
* @return true
@@ -386,20 +395,18 @@ function get_data_row($query, $callback = "") {
* @access private
*/
function elgg_query_runner($query, $callback = null, $single = false) {
- global $CONFIG, $DB_QUERY_CACHE;
+ global $DB_QUERY_CACHE;
// Since we want to cache results of running the callback, we need to
// need to namespace the query with the callback and single result request.
- // http://trac.elgg.org/ticket/4049
+ // https://github.com/elgg/elgg/issues/4049
$hash = (string)$callback . (int)$single . $query;
// Is cached?
if ($DB_QUERY_CACHE) {
- $cached_query = $DB_QUERY_CACHE[$hash];
-
- if ($cached_query !== FALSE) {
+ if (isset($DB_QUERY_CACHE[$hash])) {
elgg_log("DB query $query results returned from cache (hash: $hash)", 'NOTICE');
- return $cached_query;
+ return $DB_QUERY_CACHE[$hash];
}
}
@@ -410,7 +417,7 @@ function elgg_query_runner($query, $callback = null, $single = false) {
// test for callback once instead of on each iteration.
// @todo check profiling to see if this needs to be broken out into
- // explicit cases instead of checking in the interation.
+ // explicit cases instead of checking in the iteration.
$is_callable = is_callable($callback);
while ($row = mysql_fetch_object($result)) {
if ($is_callable) {
@@ -451,18 +458,12 @@ function elgg_query_runner($query, $callback = null, $single = false) {
* @access private
*/
function insert_data($query) {
- global $CONFIG, $DB_QUERY_CACHE;
elgg_log("DB query $query", 'NOTICE');
$dblink = get_db_link('write');
- // Invalidate query cache
- if ($DB_QUERY_CACHE) {
- $DB_QUERY_CACHE->clear();
- }
-
- elgg_log("Query cache invalidated", 'NOTICE');
+ _elgg_invalidate_query_cache();
if (execute_query("$query", $dblink)) {
return mysql_insert_id($dblink);
@@ -472,7 +473,7 @@ function insert_data($query) {
}
/**
- * Update a row in the database.
+ * Update the database.
*
* @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
*
@@ -482,17 +483,12 @@ function insert_data($query) {
* @access private
*/
function update_data($query) {
- global $CONFIG, $DB_QUERY_CACHE;
elgg_log("DB query $query", 'NOTICE');
$dblink = get_db_link('write');
- // Invalidate query cache
- if ($DB_QUERY_CACHE) {
- $DB_QUERY_CACHE->clear();
- elgg_log("Query cache invalidated", 'NOTICE');
- }
+ _elgg_invalidate_query_cache();
if (execute_query("$query", $dblink)) {
return TRUE;
@@ -502,7 +498,7 @@ function update_data($query) {
}
/**
- * Remove a row from the database.
+ * Remove data from the database.
*
* @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
*
@@ -512,17 +508,12 @@ function update_data($query) {
* @access private
*/
function delete_data($query) {
- global $CONFIG, $DB_QUERY_CACHE;
elgg_log("DB query $query", 'NOTICE');
$dblink = get_db_link('write');
- // Invalidate query cache
- if ($DB_QUERY_CACHE) {
- $DB_QUERY_CACHE->clear();
- elgg_log("Query cache invalidated", 'NOTICE');
- }
+ _elgg_invalidate_query_cache();
if (execute_query("$query", $dblink)) {
return mysql_affected_rows($dblink);
@@ -531,6 +522,22 @@ function delete_data($query) {
return FALSE;
}
+/**
+ * Invalidate the query cache
+ *
+ * @access private
+ */
+function _elgg_invalidate_query_cache() {
+ global $DB_QUERY_CACHE;
+ if ($DB_QUERY_CACHE instanceof ElggLRUCache) {
+ $DB_QUERY_CACHE->clear();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ } elseif ($DB_QUERY_CACHE) {
+ // In case someone sets the cache to an array and primes it with data
+ $DB_QUERY_CACHE = array();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ }
+}
/**
* Return tables matching the database prefix {@link $CONFIG->dbprefix}% in the currently
@@ -638,7 +645,7 @@ function run_sql_script($scriptlocation) {
$statement = str_replace("prefix_", $CONFIG->dbprefix, $statement);
if (!empty($statement)) {
try {
- $result = update_data($statement);
+ update_data($statement);
} catch (DatabaseException $e) {
$errors[] = $e->getMessage();
}
@@ -661,7 +668,7 @@ function run_sql_script($scriptlocation) {
/**
* Format a query string for logging
- *
+ *
* @param string $query Query string
* @return string
* @access private
diff --git a/engine/lib/deprecated-1.7.php b/engine/lib/deprecated-1.7.php
index 519eea89d..ee95b5611 100644
--- a/engine/lib/deprecated-1.7.php
+++ b/engine/lib/deprecated-1.7.php
@@ -1137,6 +1137,7 @@ function make_register_object($register_name, $register_value, $children_array =
* @param int $guid GUID
*
* @return 1
+ * @deprecated 1.7
*/
function delete_object_entity($guid) {
system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
@@ -1154,6 +1155,7 @@ function delete_object_entity($guid) {
* @param int $guid User GUID
*
* @return 1
+ * @deprecated 1.7
*/
function delete_user_entity($guid) {
system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php
index 4b9d41543..91068d047 100644
--- a/engine/lib/deprecated-1.8.php
+++ b/engine/lib/deprecated-1.8.php
@@ -87,7 +87,7 @@ function list_entities_from_access_id($access_id, $entity_type = "", $entity_sub
elgg_deprecated_notice("All list_entities* functions were deprecated in 1.8. Use elgg_list_entities* instead.", 1.8);
echo elgg_list_entities_from_access_id(array('access_id' => $access_id,
- 'types' => $entity_type, 'subtypes' => $entity_subtype, 'owner_guids' => $owner_guid,
+ 'type' => $entity_type, 'subtype' => $entity_subtype, 'owner_guids' => $owner_guid,
'limit' => $limit, 'full_view' => $fullview, 'list_type_toggle' => $listtypetoggle,
'pagination' => $pagination,));
}
@@ -1314,8 +1314,8 @@ function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type
$options = array(
'metadata_name' => $meta_name,
'metadata_value' => $meta_value,
- 'types' => $entity_type,
- 'subtypes' => $entity_subtype,
+ 'type' => $entity_type,
+ 'subtype' => $entity_subtype,
'limit' => $limit,
'offset' => $offset,
'count' => TRUE,
@@ -2120,8 +2120,8 @@ $fullview = true, $listtypetoggle = false, $pagination = true, $order_by = '') {
'relationship' => $relationship,
'relationship_guid' => $relationship_guid,
'inverse_relationship' => $inverse_relationship,
- 'types' => $type,
- 'subtypes' => $subtype,
+ 'type' => $type,
+ 'subtype' => $subtype,
'owner_guid' => $owner_guid,
'order_by' => $order_by,
'limit' => $limit,
@@ -2566,9 +2566,9 @@ $owner_guid = "", $owner_relationship = "") {
'relationship' => $owner_relationship,
'relationship_guid' => $owner_guid[0],
'inverse_relationship' => FALSE,
- 'types' => 'user',
- 'subtypes' => $subtype,
- 'limit' => 9999))
+ 'type' => 'user',
+ 'subtype' => $subtype,
+ 'limit' => false))
) {
$friendsarray = array();
@@ -2721,8 +2721,8 @@ function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset =
'relationship' => 'member_of_site',
'relationship_guid' => $site_guid,
'inverse_relationship' => TRUE,
- 'types' => 'collection',
- 'subtypes' => $subtype,
+ 'type' => 'collection',
+ 'subtype' => $subtype,
'limit' => $limit,
'offset' => $offset
));
@@ -3414,6 +3414,7 @@ function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) {
* @param unknown_type $timeupper
* @param unknown_type $calculation
* @internal Don't use this at all.
+ * @deprecated 1.8 Use elgg_get_annotations()
*/
function elgg_deprecated_annotation_calculation($entity_guid = 0, $entity_type = "", $entity_subtype = "",
$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0,
@@ -4667,6 +4668,7 @@ function display_widget(ElggObject $widget) {
*
* @param ElggEntity $entity
* @return int Number of comments
+ * @deprecated 1.8 Use ElggEntity->countComments()
*/
function elgg_count_comments($entity) {
elgg_deprecated_notice('elgg_count_comments() is deprecated by ElggEntity->countComments()', 1.8);
@@ -4772,3 +4774,47 @@ function default_page_handler($page, $handler) {
return FALSE;
}
+
+/**
+ * Invalidate this class's entry in the cache.
+ *
+ * @param int $guid The entity guid
+ *
+ * @return void
+ * @access private
+ * @deprecated 1.8
+ */
+function invalidate_cache_for_entity($guid) {
+ elgg_deprecated_notice('invalidate_cache_for_entity() is a private function and should not be used.', 1.8);
+ _elgg_invalidate_cache_for_entity($guid);
+}
+
+/**
+ * Cache an entity.
+ *
+ * Stores an entity in $ENTITY_CACHE;
+ *
+ * @param ElggEntity $entity Entity to cache
+ *
+ * @return void
+ * @access private
+ * @deprecated 1.8
+ */
+function cache_entity(ElggEntity $entity) {
+ elgg_deprecated_notice('cache_entity() is a private function and should not be used.', 1.8);
+ _elgg_cache_entity($entity);
+}
+
+/**
+ * Retrieve a entity from the cache.
+ *
+ * @param int $guid The guid
+ *
+ * @return ElggEntity|bool false if entity not cached, or not fully loaded
+ * @access private
+ * @deprecated 1.8
+ */
+function retrieve_cached_entity($guid) {
+ elgg_deprecated_notice('retrieve_cached_entity() is a private function and should not be used.', 1.8);
+ return _elgg_retrieve_cached_entity($guid);
+}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 26c1cccfd..34111c69d 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -93,10 +93,17 @@ function elgg_register_library($name, $location) {
* @return void
* @throws InvalidParameterException
* @since 1.8.0
+ * @todo return boolean in 1.9 to indicate whether the library has been loaded
*/
function elgg_load_library($name) {
global $CONFIG;
+ static $loaded_libraries = array();
+
+ if (in_array($name, $loaded_libraries)) {
+ return;
+ }
+
if (!isset($CONFIG->libraries)) {
$CONFIG->libraries = array();
}
@@ -113,6 +120,8 @@ function elgg_load_library($name) {
);
throw new InvalidParameterException($error);
}
+
+ $loaded_libraries[] = $name;
}
/**
@@ -124,12 +133,11 @@ function elgg_load_library($name) {
* @param string $location URL to forward to browser to. Can be path relative to the network's URL.
* @param string $reason Short explanation for why we're forwarding
*
- * @return False False if headers have been sent. Terminates execution if forwarding.
+ * @return false False if headers have been sent. Terminates execution if forwarding.
+ * @throws SecurityException
*/
function forward($location = "", $reason = 'system') {
- global $CONFIG;
-
- if (!headers_sent()) {
+ if (!headers_sent($file, $line)) {
if ($location === REFERER) {
$location = $_SERVER['HTTP_REFERER'];
}
@@ -148,7 +156,7 @@ function forward($location = "", $reason = 'system') {
exit;
}
} else {
- throw new SecurityException(elgg_echo('SecurityException:ForwardFailedToRedirect'));
+ throw new SecurityException(elgg_echo('SecurityException:ForwardFailedToRedirect', array($file, $line)));
}
}
@@ -384,7 +392,7 @@ function elgg_load_external_file($type, $name) {
$item->url = '';
$item->location = '';
- $priority = $CONFIG->externals[$type]->add($item);
+ $CONFIG->externals[$type]->add($item);
$CONFIG->externals_map[$type][$name] = $item;
}
}
@@ -528,7 +536,7 @@ function sanitise_filepath($path, $append_slash = TRUE) {
* @param string $register Types of message: "error", "success" (default: success)
* @param bool $count Count the number of messages (default: false)
*
- * @return true|false|array Either the array of messages, or a response regarding
+ * @return bool|array Either the array of messages, or a response regarding
* whether the message addition was successful.
* @todo Clean up. Separate registering messages and retrieving them.
*/
@@ -562,7 +570,7 @@ function system_messages($message = null, $register = "success", $count = false)
return sizeof($_SESSION['msg'][$register]);
} else {
$count = 0;
- foreach ($_SESSION['msg'] as $register => $submessages) {
+ foreach ($_SESSION['msg'] as $submessages) {
$count += sizeof($submessages);
}
return $count;
@@ -671,7 +679,7 @@ function elgg_register_event_handler($event, $object_type, $callback, $priority
global $CONFIG;
if (empty($event) || empty($object_type)) {
- return FALSE;
+ return false;
}
if (!isset($CONFIG->events)) {
@@ -684,8 +692,8 @@ function elgg_register_event_handler($event, $object_type, $callback, $priority
$CONFIG->events[$event][$object_type] = array();
}
- if (!is_callable($callback)) {
- return FALSE;
+ if (!is_callable($callback, true)) {
+ return false;
}
$priority = max((int) $priority, 0);
@@ -695,7 +703,7 @@ function elgg_register_event_handler($event, $object_type, $callback, $priority
}
$CONFIG->events[$event][$object_type][$priority] = $callback;
ksort($CONFIG->events[$event][$object_type]);
- return TRUE;
+ return true;
}
/**
@@ -710,9 +718,12 @@ function elgg_register_event_handler($event, $object_type, $callback, $priority
*/
function elgg_unregister_event_handler($event, $object_type, $callback) {
global $CONFIG;
- foreach ($CONFIG->events[$event][$object_type] as $key => $event_callback) {
- if ($event_callback == $callback) {
- unset($CONFIG->events[$event][$object_type][$key]);
+
+ if (isset($CONFIG->events[$event]) && isset($CONFIG->events[$event][$object_type])) {
+ foreach ($CONFIG->events[$event][$object_type] as $key => $event_callback) {
+ if ($event_callback == $callback) {
+ unset($CONFIG->events[$event][$object_type][$key]);
+ }
}
}
}
@@ -735,7 +746,7 @@ function elgg_unregister_event_handler($event, $object_type, $callback) {
* @tip When referring to events, the preferred syntax is "event, type".
*
* @internal Only rarely should events be changed, added, or removed in core.
- * When making changes to events, be sure to first create a ticket in trac.
+ * When making changes to events, be sure to first create a ticket on Github.
*
* @internal @tip Think of $object_type as the primary namespace element, and
* $event as the secondary namespace.
@@ -770,14 +781,14 @@ function elgg_trigger_event($event, $object_type, $object = null) {
foreach ($events as $callback_list) {
if (is_array($callback_list)) {
foreach ($callback_list as $callback) {
- if (call_user_func_array($callback, $args) === FALSE) {
- return FALSE;
+ if (is_callable($callback) && (call_user_func_array($callback, $args) === false)) {
+ return false;
}
}
}
}
- return TRUE;
+ return true;
}
/**
@@ -836,7 +847,7 @@ function elgg_trigger_event($event, $object_type, $object = null) {
*
* @param string $hook The name of the hook
* @param string $type The type of the hook
- * @param callback $callback The name of a valid function or an array with object and method
+ * @param callable $callback The name of a valid function or an array with object and method
* @param int $priority The priority - 500 is default, lower numbers called first
*
* @return bool
@@ -850,7 +861,7 @@ function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority =
global $CONFIG;
if (empty($hook) || empty($type)) {
- return FALSE;
+ return false;
}
if (!isset($CONFIG->hooks)) {
@@ -863,8 +874,8 @@ function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority =
$CONFIG->hooks[$hook][$type] = array();
}
- if (!is_callable($callback)) {
- return FALSE;
+ if (!is_callable($callback, true)) {
+ return false;
}
$priority = max((int) $priority, 0);
@@ -874,7 +885,7 @@ function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority =
}
$CONFIG->hooks[$hook][$type][$priority] = $callback;
ksort($CONFIG->hooks[$hook][$type]);
- return TRUE;
+ return true;
}
/**
@@ -882,16 +893,19 @@ function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority =
*
* @param string $hook The name of the hook
* @param string $entity_type The name of the type of entity (eg "user", "object" etc)
- * @param callback $callback The PHP callback to be removed
+ * @param callable $callback The PHP callback to be removed
*
* @return void
* @since 1.8.0
*/
function elgg_unregister_plugin_hook_handler($hook, $entity_type, $callback) {
global $CONFIG;
- foreach ($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) {
- if ($hook_callback == $callback) {
- unset($CONFIG->hooks[$hook][$entity_type][$key]);
+
+ if (isset($CONFIG->hooks[$hook]) && isset($CONFIG->hooks[$hook][$entity_type])) {
+ foreach ($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) {
+ if ($hook_callback == $callback) {
+ unset($CONFIG->hooks[$hook][$entity_type][$key]);
+ }
}
}
}
@@ -970,10 +984,12 @@ function elgg_trigger_plugin_hook($hook, $type, $params = null, $returnvalue = n
foreach ($hooks as $callback_list) {
if (is_array($callback_list)) {
foreach ($callback_list as $hookcallback) {
- $args = array($hook, $type, $returnvalue, $params);
- $temp_return_value = call_user_func_array($hookcallback, $args);
- if (!is_null($temp_return_value)) {
- $returnvalue = $temp_return_value;
+ if (is_callable($hookcallback)) {
+ $args = array($hook, $type, $returnvalue, $params);
+ $temp_return_value = call_user_func_array($hookcallback, $args);
+ if (!is_null($temp_return_value)) {
+ $returnvalue = $temp_return_value;
+ }
}
}
}
@@ -1052,6 +1068,7 @@ function _elgg_php_exception_handler($exception) {
* @param array $vars An array that points to the active symbol table where error occurred
*
* @return true
+ * @throws Exception
* @access private
* @todo Replace error_log calls with elgg_log calls.
*/
@@ -1071,8 +1088,8 @@ function _elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
case E_USER_WARNING :
case E_RECOVERABLE_ERROR: // (e.g. type hint violation)
- // check if the error wasn't suppressed by @-functionname
- if(error_reporting()){
+ // check if the error wasn't suppressed by the error control operator (@)
+ if (error_reporting()) {
error_log("PHP WARNING: $error");
}
break;
@@ -1177,6 +1194,11 @@ function elgg_dump($value, $to_screen = TRUE, $level = 'NOTICE') {
$to_screen = FALSE;
}
+ // Do not want to write to JS or CSS pages
+ if (elgg_in_context('js') || elgg_in_context('css')) {
+ $to_screen = FALSE;
+ }
+
if ($to_screen == TRUE) {
echo '<pre>';
print_r($value);
@@ -1284,8 +1306,6 @@ function elgg_deprecated_notice($msg, $dep_version, $backtrace_level = 1) {
* @return string The current page URL.
*/
function current_page_url() {
- global $CONFIG;
-
$url = parse_url(elgg_get_site_url());
$page = $url['scheme'] . "://";
@@ -1330,7 +1350,7 @@ function full_url() {
"" : (":" . $_SERVER["SERVER_PORT"]);
// This is here to prevent XSS in poorly written browsers used by 80% of the population.
- // {@trac [5813]}
+ // https://github.com/Elgg/Elgg/commit/0c947e80f512cb0a482b1864fd0a6965c8a0cd4a
$quotes = array('\'', '"');
$encoded = array('%27', '%22');
@@ -1346,7 +1366,7 @@ function full_url() {
* @param array $parts Associative array of URL components like parse_url() returns
* @param bool $html_encode HTML Encode the url?
*
- * @return str Full URL
+ * @return string Full URL
* @since 1.7.0
*/
function elgg_http_build_url(array $parts, $html_encode = TRUE) {
@@ -1377,10 +1397,10 @@ function elgg_http_build_url(array $parts, $html_encode = TRUE) {
* add tokens to the action. The form view automatically handles
* tokens.
*
- * @param str $url Full action URL
- * @param bool $html_encode HTML encode the url? (default: false)
+ * @param string $url Full action URL
+ * @param bool $html_encode HTML encode the url? (default: false)
*
- * @return str URL with action tokens
+ * @return string URL with action tokens
* @since 1.7.0
* @link http://docs.elgg.org/Tutorials/Actions
*/
@@ -1432,17 +1452,17 @@ function elgg_http_remove_url_query_element($url, $element) {
}
$url_array['query'] = http_build_query($query);
- $string = elgg_http_build_url($url_array);
+ $string = elgg_http_build_url($url_array, false);
return $string;
}
/**
* Adds an element or elements to a URL's query string.
*
- * @param str $url The URL
- * @param array $elements Key/value pairs to add to the URL
+ * @param string $url The URL
+ * @param array $elements Key/value pairs to add to the URL
*
- * @return str The new URL with the query strings added
+ * @return string The new URL with the query strings added
* @since 1.7.0
*/
function elgg_http_add_url_query_elements($url, array $elements) {
@@ -1479,8 +1499,6 @@ function elgg_http_add_url_query_elements($url, array $elements) {
* @since 1.8.0
*/
function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset', 'limit')) {
- global $CONFIG;
-
// if the server portion is missing but it starts with / then add the url in.
// @todo use elgg_normalize_url()
if (elgg_substr($url1, 0, 1) == '/') {
@@ -1619,7 +1637,7 @@ $sort_type = SORT_LOCALE_STRING) {
$sort = array();
- foreach ($array as $k => $v) {
+ foreach ($array as $v) {
if (isset($v[$element])) {
$sort[] = strtolower($v[$element]);
} else {
@@ -1638,7 +1656,7 @@ $sort_type = SORT_LOCALE_STRING) {
*
* @param string $ini_get_arg The INI setting
*
- * @return true|false Depending on whether it's on or off
+ * @return bool Depending on whether it's on or off
*/
function ini_get_bool($ini_get_arg) {
$temp = strtolower(ini_get($ini_get_arg));
@@ -1654,7 +1672,7 @@ function ini_get_bool($ini_get_arg) {
*
* @tip Use this for arithmetic when determining if a file can be uploaded.
*
- * @param str $setting The php.ini setting
+ * @param string $setting The php.ini setting
*
* @return int
* @since 1.7.0
@@ -1669,8 +1687,10 @@ function elgg_get_ini_setting_in_bytes($setting) {
switch($last) {
case 'g':
$val *= 1024;
+ // fallthrough intentional
case 'm':
$val *= 1024;
+ // fallthrough intentional
case 'k':
$val *= 1024;
}
@@ -1827,7 +1847,7 @@ function elgg_ajax_page_handler($page) {
*
* @param array $page The page array
*
- * @return void
+ * @return bool
* @elgg_pagehandler css
* @access private
*/
@@ -1883,7 +1903,7 @@ function elgg_cacheable_view_page_handler($page, $type) {
header("Content-type: $content_type");
// @todo should js be cached when simple cache turned off
- //header('Expires: ' . date('r', time() + 864000));
+ //header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
//header("Pragma: public");
//header("Cache-Control: public");
//header("Content-Length: " . strlen($return));
@@ -1891,6 +1911,7 @@ function elgg_cacheable_view_page_handler($page, $type) {
echo $return;
return true;
}
+ return false;
}
/**
@@ -2212,7 +2233,7 @@ function elgg_init() {
* @param array $params empty
*
* @elgg_plugin_hook unit_tests system
- * @return void
+ * @return array
* @access private
*/
function elgg_api_test($hook, $type, $value, $params) {
@@ -2224,7 +2245,10 @@ function elgg_api_test($hook, $type, $value, $params) {
}
/**#@+
- * Controlls access levels on ElggEntity entities, metadata, and annotations.
+ * Controls access levels on ElggEntity entities, metadata, and annotations.
+ *
+ * @warning ACCESS_DEFAULT is a place holder for the input/access view. Do not
+ * use it when saving an entity.
*
* @var int
*/
@@ -2258,7 +2282,7 @@ define('ELGG_ENTITIES_NO_VALUE', 0);
* referring page.
*
* @see forward
- * @var unknown_type
+ * @var int -1
*/
define('REFERRER', -1);
diff --git a/engine/lib/entities.php b/engine/lib/entities.php
index a50567d9f..4fcf1c657 100644
--- a/engine/lib/entities.php
+++ b/engine/lib/entities.php
@@ -17,23 +17,60 @@ global $ENTITY_CACHE;
$ENTITY_CACHE = array();
/**
- * Cache subtypes and related class names once loaded.
+ * GUIDs of entities banned from the entity cache (during this request)
*
- * @global array $SUBTYPE_CACHE
+ * @global array $ENTITY_CACHE_DISABLED_GUIDS
+ * @access private
+ */
+global $ENTITY_CACHE_DISABLED_GUIDS;
+$ENTITY_CACHE_DISABLED_GUIDS = array();
+
+/**
+ * Cache subtypes and related class names.
+ *
+ * @global array|null $SUBTYPE_CACHE array once populated from DB, initially null
* @access private
*/
global $SUBTYPE_CACHE;
-$SUBTYPE_CACHE = NULL;
+$SUBTYPE_CACHE = null;
+
+/**
+ * Remove this entity from the entity cache and make sure it is not re-added
+ *
+ * @param int $guid The entity guid
+ *
+ * @access private
+ * @todo this is a workaround until #5604 can be implemented
+ */
+function _elgg_disable_caching_for_entity($guid) {
+ global $ENTITY_CACHE_DISABLED_GUIDS;
+
+ _elgg_invalidate_cache_for_entity($guid);
+ $ENTITY_CACHE_DISABLED_GUIDS[$guid] = true;
+}
+
+/**
+ * Allow this entity to be stored in the entity cache
+ *
+ * @param int $guid The entity guid
+ *
+ * @access private
+ */
+function _elgg_enable_caching_for_entity($guid) {
+ global $ENTITY_CACHE_DISABLED_GUIDS;
+
+ unset($ENTITY_CACHE_DISABLED_GUIDS[$guid]);
+}
/**
* Invalidate this class's entry in the cache.
*
* @param int $guid The entity guid
*
- * @return null
+ * @return void
* @access private
*/
-function invalidate_cache_for_entity($guid) {
+function _elgg_invalidate_cache_for_entity($guid) {
global $ENTITY_CACHE;
$guid = (int)$guid;
@@ -50,28 +87,41 @@ function invalidate_cache_for_entity($guid) {
*
* @param ElggEntity $entity Entity to cache
*
- * @return null
- * @see retrieve_cached_entity()
- * @see invalidate_cache_for_entity()
+ * @return void
+ * @see _elgg_retrieve_cached_entity()
+ * @see _elgg_invalidate_cache_for_entity()
* @access private
- * TODO(evan): Use an ElggCache object
+ * @todo Use an ElggCache object
*/
-function cache_entity(ElggEntity $entity) {
- global $ENTITY_CACHE;
+function _elgg_cache_entity(ElggEntity $entity) {
+ global $ENTITY_CACHE, $ENTITY_CACHE_DISABLED_GUIDS;
- // Don't cache entities while access control is off, otherwise they could be
+ // Don't cache non-plugin entities while access control is off, otherwise they could be
// exposed to users who shouldn't see them when control is re-enabled.
- if (elgg_get_ignore_access()) {
+ if (!($entity instanceof ElggPlugin) && elgg_get_ignore_access()) {
+ return;
+ }
+
+ $guid = $entity->getGUID();
+ if (isset($ENTITY_CACHE_DISABLED_GUIDS[$guid])) {
return;
}
// Don't store too many or we'll have memory problems
- // TODO(evan): Pick a less arbitrary limit
+ // @todo Pick a less arbitrary limit
if (count($ENTITY_CACHE) > 256) {
- unset($ENTITY_CACHE[array_rand($ENTITY_CACHE)]);
+ $random_guid = array_rand($ENTITY_CACHE);
+
+ unset($ENTITY_CACHE[$random_guid]);
+
+ // Purge separate metadata cache. Original idea was to do in entity destructor, but that would
+ // have caused a bunch of unnecessary purges at every shutdown. Doing it this way we have no way
+ // to know that the expunged entity will be GCed (might be another reference living), but that's
+ // OK; the metadata will reload if necessary.
+ elgg_get_metadata_cache()->clear($random_guid);
}
- $ENTITY_CACHE[$entity->guid] = $entity;
+ $ENTITY_CACHE[$guid] = $entity;
}
/**
@@ -80,15 +130,13 @@ function cache_entity(ElggEntity $entity) {
* @param int $guid The guid
*
* @return ElggEntity|bool false if entity not cached, or not fully loaded
- * @see cache_entity()
- * @see invalidate_cache_for_entity()
+ * @see _elgg_cache_entity()
+ * @see _elgg_invalidate_cache_for_entity()
* @access private
*/
-function retrieve_cached_entity($guid) {
+function _elgg_retrieve_cached_entity($guid) {
global $ENTITY_CACHE;
- $guid = (int)$guid;
-
if (isset($ENTITY_CACHE[$guid])) {
if ($ENTITY_CACHE[$guid]->isFullyLoaded()) {
return $ENTITY_CACHE[$guid];
@@ -99,31 +147,6 @@ function retrieve_cached_entity($guid) {
}
/**
- * As retrieve_cached_entity, but returns the result as a stdClass
- * (compatible with load functions that expect a database row.)
- *
- * @param int $guid The guid
- *
- * @return mixed
- * @todo unused
- * @access private
- */
-function retrieve_cached_entity_row($guid) {
- $obj = retrieve_cached_entity($guid);
- if ($obj) {
- $tmp = new stdClass;
-
- foreach ($obj as $k => $v) {
- $tmp->$k = $v;
- }
-
- return $tmp;
- }
-
- return false;
-}
-
-/**
* Return the id for a given subtype.
*
* ElggEntity objects have a type and a subtype. Subtypes
@@ -148,29 +171,23 @@ function retrieve_cached_entity_row($guid) {
* @access private
*/
function get_subtype_id($type, $subtype) {
- global $CONFIG, $SUBTYPE_CACHE;
+ global $SUBTYPE_CACHE;
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
-
- if ($subtype == "") {
- return FALSE;
+ if (!$subtype) {
+ return false;
}
- // @todo use the cache before hitting database
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes
- where type='$type' and subtype='$subtype'");
-
- if ($result) {
- if (!$SUBTYPE_CACHE) {
- $SUBTYPE_CACHE = array();
- }
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
- $SUBTYPE_CACHE[$result->id] = $result;
+ // use the cache before hitting database
+ $result = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($result !== null) {
return $result->id;
}
- return FALSE;
+ return false;
}
/**
@@ -178,35 +195,67 @@ function get_subtype_id($type, $subtype) {
*
* @param int $subtype_id Subtype ID
*
- * @return string Subtype name
+ * @return string|false Subtype name, false if subtype not found
* @link http://docs.elgg.org/DataModel/Entities/Subtypes
* @see get_subtype_from_id()
* @access private
*/
function get_subtype_from_id($subtype_id) {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $subtype_id = (int)$subtype_id;
+ global $SUBTYPE_CACHE;
if (!$subtype_id) {
return false;
}
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
if (isset($SUBTYPE_CACHE[$subtype_id])) {
return $SUBTYPE_CACHE[$subtype_id]->subtype;
}
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where id=$subtype_id");
- if ($result) {
- if (!$SUBTYPE_CACHE) {
- $SUBTYPE_CACHE = array();
- }
+ return false;
+}
- $SUBTYPE_CACHE[$subtype_id] = $result;
- return $result->subtype;
+/**
+ * Retrieve subtype from the cache.
+ *
+ * @param string $type
+ * @param string $subtype
+ * @return stdClass|null
+ *
+ * @access private
+ */
+function _elgg_retrieve_cached_subtype($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
}
- return false;
+ foreach ($SUBTYPE_CACHE as $obj) {
+ if ($obj->type === $type && $obj->subtype === $subtype) {
+ return $obj;
+ }
+ }
+ return null;
+}
+
+/**
+ * Fetch all suptypes from DB to local cache.
+ *
+ * @access private
+ */
+function _elgg_populate_subtype_cache() {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ $results = get_data("SELECT * FROM {$CONFIG->dbprefix}entity_subtypes");
+
+ $SUBTYPE_CACHE = array();
+ foreach ($results as $row) {
+ $SUBTYPE_CACHE[$row->id] = $row;
+ }
}
/**
@@ -225,25 +274,19 @@ function get_subtype_from_id($subtype_id) {
* @access private
*/
function get_subtype_class($type, $subtype) {
- global $CONFIG, $SUBTYPE_CACHE;
+ global $SUBTYPE_CACHE;
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
-
- // @todo use the cache before going to the database
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes
- where type='$type' and subtype='$subtype'");
-
- if ($result) {
- if (!$SUBTYPE_CACHE) {
- $SUBTYPE_CACHE = array();
- }
-
- $SUBTYPE_CACHE[$result->id] = $result;
- return $result->class;
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ // use the cache before going to the database
+ $obj = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($obj) {
+ return $obj->class;
}
- return NULL;
+ return null;
}
/**
@@ -257,29 +300,21 @@ function get_subtype_class($type, $subtype) {
* @access private
*/
function get_subtype_class_from_id($subtype_id) {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $subtype_id = (int)$subtype_id;
+ global $SUBTYPE_CACHE;
if (!$subtype_id) {
- return false;
+ return null;
}
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
if (isset($SUBTYPE_CACHE[$subtype_id])) {
return $SUBTYPE_CACHE[$subtype_id]->class;
}
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where id=$subtype_id");
-
- if ($result) {
- if (!$SUBTYPE_CACHE) {
- $SUBTYPE_CACHE = array();
- }
- $SUBTYPE_CACHE[$subtype_id] = $result;
- return $result->class;
- }
-
- return NULL;
+ return null;
}
/**
@@ -305,21 +340,32 @@ function get_subtype_class_from_id($subtype_id) {
* @see get_entity()
*/
function add_subtype($type, $subtype, $class = "") {
- global $CONFIG;
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
- $class = sanitise_string($class);
+ global $CONFIG, $SUBTYPE_CACHE;
- // Short circuit if no subtype is given
- if ($subtype == "") {
+ if (!$subtype) {
return 0;
}
$id = get_subtype_id($type, $subtype);
- if ($id == 0) {
- return insert_data("insert into {$CONFIG->dbprefix}entity_subtypes"
- . " (type, subtype, class) values ('$type','$subtype','$class')");
+ if (!$id) {
+ // In cache we store non-SQL-escaped strings because that's what's returned by query
+ $cache_obj = (object) array(
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'class' => $class,
+ );
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $class = sanitise_string($class);
+
+ $id = insert_data("INSERT INTO {$CONFIG->dbprefix}entity_subtypes"
+ . " (type, subtype, class) VALUES ('$type', '$subtype', '$class')");
+
+ // add entry to cache
+ $cache_obj->id = $id;
+ $SUBTYPE_CACHE[$id] = $cache_obj;
}
return $id;
@@ -361,22 +407,31 @@ function remove_subtype($type, $subtype) {
function update_subtype($type, $subtype, $class = '') {
global $CONFIG, $SUBTYPE_CACHE;
- if (!$id = get_subtype_id($type, $subtype)) {
- return FALSE;
+ $id = get_subtype_id($type, $subtype);
+ if (!$id) {
+ return false;
}
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ $unescaped_class = $class;
+
$type = sanitise_string($type);
$subtype = sanitise_string($subtype);
-
- $result = update_data("UPDATE {$CONFIG->dbprefix}entity_subtypes
+ $class = sanitise_string($class);
+
+ $success = update_data("UPDATE {$CONFIG->dbprefix}entity_subtypes
SET type = '$type', subtype = '$subtype', class = '$class'
WHERE id = $id
");
- if ($result && isset($SUBTYPE_CACHE[$id])) {
- $SUBTYPE_CACHE[$id]->class = $class;
+ if ($success && isset($SUBTYPE_CACHE[$id])) {
+ $SUBTYPE_CACHE[$id]->class = $unescaped_class;
}
- return $result;
+ return $success;
}
/**
@@ -394,7 +449,7 @@ function update_subtype($type, $subtype, $class = '') {
* @param int $time_created The time creation timestamp
*
* @return bool
- * @link http://docs.elgg.org/DataModel/Entities
+ * @throws InvalidParameterException
* @access private
*/
function update_entity($guid, $owner_guid, $access_id, $container_guid = null, $time_created = null) {
@@ -417,6 +472,10 @@ function update_entity($guid, $owner_guid, $access_id, $container_guid = null, $
$time_created = (int) $time_created;
}
+ if ($access_id == ACCESS_DEFAULT) {
+ throw new InvalidParameterException('ACCESS_DEFAULT is not a valid access level. See its documentation in elgglib.h');
+ }
+
if ($entity && $entity->canEdit()) {
if (elgg_trigger_event('update', $entity->type, $entity)) {
$ret = update_data("UPDATE {$CONFIG->dbprefix}entities
@@ -493,6 +552,7 @@ function can_write_to_container($user_guid = 0, $container_guid = 0, $type = 'al
// If still not approved, see if the user is a member of the group
// @todo this should be moved to the groups plugin/library
if (!$return && $user && $container instanceof ElggGroup) {
+ /* @var ElggGroup $container */
if ($container->isMember($user)) {
$return = true;
}
@@ -542,7 +602,6 @@ $container_guid = 0) {
$type = sanitise_string($type);
$subtype_id = add_subtype($type, $subtype);
$owner_guid = (int)$owner_guid;
- $access_id = (int)$access_id;
$time = time();
if ($site_guid == 0) {
$site_guid = $CONFIG->site_guid;
@@ -551,6 +610,10 @@ $container_guid = 0) {
if ($container_guid == 0) {
$container_guid = $owner_guid;
}
+ $access_id = (int)$access_id;
+ if ($access_id == ACCESS_DEFAULT) {
+ throw new InvalidParameterException('ACCESS_DEFAULT is not a valid access level. See its documentation in elgglib.h');
+ }
$user_guid = elgg_get_logged_in_user_guid();
if (!can_write_to_container($user_guid, $owner_guid, $type, $subtype)) {
@@ -698,7 +761,7 @@ function get_entity($guid) {
// @todo We need a single Memcache instance with a shared pool of namespace wrappers. This function would pull an instance from the pool.
static $shared_cache;
- // We could also use: if (!(int) $guid) { return FALSE },
+ // We could also use: if (!(int) $guid) { return FALSE },
// but that evaluates to a false positive for $guid = TRUE.
// This is a bit slower, but more thorough.
if (!is_numeric($guid) || $guid === 0 || $guid === '0') {
@@ -706,7 +769,7 @@ function get_entity($guid) {
}
// Check local cache first
- $new_entity = retrieve_cached_entity($guid);
+ $new_entity = _elgg_retrieve_cached_entity($guid);
if ($new_entity) {
return $new_entity;
}
@@ -728,16 +791,22 @@ function get_entity($guid) {
if ($shared_cache) {
$cached_entity = $shared_cache->load($guid);
- // @todo store ACLs in memcache http://trac.elgg.org/ticket/3018#comment:3
+ // @todo store ACLs in memcache https://github.com/elgg/elgg/issues/3018#issuecomment-13662617
if ($cached_entity) {
// @todo use ACL and cached entity access_id to determine if user can see it
return $cached_entity;
}
}
- $new_entity = entity_row_to_elggstar($entity_row);
+ // don't let incomplete entities cause fatal exceptions
+ try {
+ $new_entity = entity_row_to_elggstar($entity_row);
+ } catch (IncompleteEntityException $e) {
+ return false;
+ }
+
if ($new_entity) {
- cache_entity($new_entity);
+ _elgg_cache_entity($new_entity);
}
return $new_entity;
}
@@ -864,6 +933,8 @@ function elgg_get_entities(array $options = array()) {
'joins' => array(),
'callback' => 'entity_row_to_elggstar',
+
+ '__ElggBatch' => null,
);
$options = array_merge($defaults, $options);
@@ -980,14 +1051,19 @@ function elgg_get_entities(array $options = array()) {
$query .= " LIMIT $offset, $limit";
}
- $dt = get_data($query, $options['callback']);
+ if ($options['callback'] === 'entity_row_to_elggstar') {
+ $dt = _elgg_fetch_entities_from_sql($query, $options['__ElggBatch']);
+ } else {
+ $dt = get_data($query, $options['callback']);
+ }
+
if ($dt) {
// populate entity and metadata caches
$guids = array();
foreach ($dt as $item) {
// A custom callback could result in items that aren't ElggEntity's, so check for them
if ($item instanceof ElggEntity) {
- cache_entity($item);
+ _elgg_cache_entity($item);
// plugins usually have only settings
if (!$item instanceof ElggPlugin) {
$guids[] = $item->guid;
@@ -1009,6 +1085,104 @@ function elgg_get_entities(array $options = array()) {
}
/**
+ * Return entities from an SQL query generated by elgg_get_entities.
+ *
+ * @param string $sql
+ * @param ElggBatch $batch
+ * @return ElggEntity[]
+ *
+ * @access private
+ * @throws LogicException
+ */
+function _elgg_fetch_entities_from_sql($sql, ElggBatch $batch = null) {
+ static $plugin_subtype;
+ if (null === $plugin_subtype) {
+ $plugin_subtype = get_subtype_id('object', 'plugin');
+ }
+
+ // Keys are types, values are columns that, if present, suggest that the secondary
+ // table is already JOINed
+ $types_to_optimize = array(
+ 'object' => 'title',
+ 'user' => 'password',
+ 'group' => 'name',
+ );
+
+ $rows = get_data($sql);
+
+ // guids to look up in each type
+ $lookup_types = array();
+ // maps GUIDs to the $rows key
+ $guid_to_key = array();
+
+ if (isset($rows[0]->type, $rows[0]->subtype)
+ && $rows[0]->type === 'object'
+ && $rows[0]->subtype == $plugin_subtype) {
+ // Likely the entire resultset is plugins, which have already been optimized
+ // to JOIN the secondary table. In this case we allow retrieving from cache,
+ // but abandon the extra queries.
+ $types_to_optimize = array();
+ }
+
+ // First pass: use cache where possible, gather GUIDs that we're optimizing
+ foreach ($rows as $i => $row) {
+ if (empty($row->guid) || empty($row->type)) {
+ throw new LogicException('Entity row missing guid or type');
+ }
+ if ($entity = _elgg_retrieve_cached_entity($row->guid)) {
+ $rows[$i] = $entity;
+ continue;
+ }
+ if (isset($types_to_optimize[$row->type])) {
+ // check if row already looks JOINed.
+ if (isset($row->{$types_to_optimize[$row->type]})) {
+ // Row probably already contains JOINed secondary table. Don't make another query just
+ // to pull data that's already there
+ continue;
+ }
+ $lookup_types[$row->type][] = $row->guid;
+ $guid_to_key[$row->guid] = $i;
+ }
+ }
+ // Do secondary queries and merge rows
+ if ($lookup_types) {
+ $dbprefix = elgg_get_config('dbprefix');
+
+ foreach ($lookup_types as $type => $guids) {
+ $set = "(" . implode(',', $guids) . ")";
+ $sql = "SELECT * FROM {$dbprefix}{$type}s_entity WHERE guid IN $set";
+ $secondary_rows = get_data($sql);
+ if ($secondary_rows) {
+ foreach ($secondary_rows as $secondary_row) {
+ $key = $guid_to_key[$secondary_row->guid];
+ // cast to arrays to merge then cast back
+ $rows[$key] = (object)array_merge((array)$rows[$key], (array)$secondary_row);
+ }
+ }
+ }
+ }
+ // Second pass to finish conversion
+ foreach ($rows as $i => $row) {
+ if ($row instanceof ElggEntity) {
+ continue;
+ } else {
+ try {
+ $rows[$i] = entity_row_to_elggstar($row);
+ } catch (IncompleteEntityException $e) {
+ // don't let incomplete entities throw fatal errors
+ unset($rows[$i]);
+
+ // report incompletes to the batch process that spawned this query
+ if ($batch) {
+ $batch->reportIncompleteEntity($row);
+ }
+ }
+ }
+ }
+ return $rows;
+}
+
+/**
* Returns SQL where clause for type and subtype on main entity table
*
* @param string $table Entity table prefix as defined in SELECT...FROM entities $table
@@ -1077,13 +1251,24 @@ function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pair
$subtype_ids = array();
if ($subtypes) {
foreach ($subtypes as $subtype) {
- // check that the subtype is valid (with ELGG_ENTITIES_NO_VALUE being a valid subtype)
- if (ELGG_ENTITIES_NO_VALUE === $subtype || $subtype_id = get_subtype_id($type, $subtype)) {
- $subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $subtype) ? ELGG_ENTITIES_NO_VALUE : $subtype_id;
- } else {
- $valid_subtypes_count--;
- elgg_log("Type-subtype '$type:$subtype' does not exist!", 'NOTICE');
+ // check that the subtype is valid
+ if (!$subtype && ELGG_ENTITIES_NO_VALUE === $subtype) {
+ // subtype value is 0
+ $subtype_ids[] = ELGG_ENTITIES_NO_VALUE;
+ } elseif (!$subtype) {
+ // subtype is ignored.
+ // this handles ELGG_ENTITIES_ANY_VALUE, '', and anything falsy that isn't 0
continue;
+ } else {
+ $subtype_id = get_subtype_id($type, $subtype);
+
+ if ($subtype_id) {
+ $subtype_ids[] = $subtype_id;
+ } else {
+ $valid_subtypes_count--;
+ elgg_log("Type-subtype '$type:$subtype' does not exist!", 'NOTICE');
+ continue;
+ }
}
}
@@ -1288,8 +1473,10 @@ function elgg_list_entities(array $options = array(), $getter = 'elgg_get_entiti
global $autofeed;
$autofeed = true;
+ $offset_key = isset($options['offset_key']) ? $options['offset_key'] : 'offset';
+
$defaults = array(
- 'offset' => (int) max(get_input('offset', 0), 0),
+ 'offset' => (int) max(get_input($offset_key, 0), 0),
'limit' => (int) max(get_input('limit', 10), 0),
'full_view' => TRUE,
'list_type_toggle' => FALSE,
@@ -1319,11 +1506,13 @@ function elgg_list_entities(array $options = array(), $getter = 'elgg_get_entiti
*
* @tip Use this to generate a list of archives by month for when entities were added or updated.
*
+ * @todo document how to pass in array for $subtype
+ *
* @warning Months are returned in the form YYYYMM.
*
* @param string $type The type of entity
* @param string $subtype The subtype of entity
- * @param int $container_guid The container GUID that the entinties belong to
+ * @param int $container_guid The container GUID that the entities belong to
* @param int $site_guid The site GUID
* @param string $order_by Order_by SQL order by clause
*
@@ -1473,7 +1662,7 @@ function disable_entity($guid, $reason = "", $recursive = true) {
$entity->disableMetadata();
$entity->disableAnnotations();
- invalidate_cache_for_entity($guid);
+ _elgg_invalidate_cache_for_entity($guid);
$res = update_data("UPDATE {$CONFIG->dbprefix}entities
SET enabled = 'no'
@@ -1489,8 +1678,8 @@ function disable_entity($guid, $reason = "", $recursive = true) {
/**
* Enable an entity.
*
- * @warning In order to enable an entity using ElggEntity::enable(),
- * you must first use {@link access_show_hidden_entities()}.
+ * @warning In order to enable an entity, you must first use
+ * {@link access_show_hidden_entities()}.
*
* @param int $guid GUID of entity to enable
* @param bool $recursive Recursively enable all entities disabled with the entity?
@@ -1571,7 +1760,7 @@ function delete_entity($guid, $recursive = true) {
// delete cache
if (isset($ENTITY_CACHE[$guid])) {
- invalidate_cache_for_entity($guid);
+ _elgg_invalidate_cache_for_entity($guid);
}
// If memcache is available then delete this entry from the cache
@@ -1618,6 +1807,10 @@ function delete_entity($guid, $recursive = true) {
elgg_set_ignore_access($ia);
}
+ $entity_disable_override = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
// Now delete the entity itself
$entity->deleteMetadata();
$entity->deleteOwnedMetadata();
@@ -1625,6 +1818,9 @@ function delete_entity($guid, $recursive = true) {
$entity->deleteOwnedAnnotations();
$entity->deleteRelationships();
+ access_show_hidden_entities($entity_disable_override);
+ elgg_set_ignore_access($ia);
+
elgg_delete_river(array('subject_guid' => $guid));
elgg_delete_river(array('object_guid' => $guid));
remove_all_private_settings($guid);
@@ -1772,7 +1968,7 @@ function oddentity_to_elggentity(ODDEntity $element) {
if (!$tmp) {
// Construct new class with owner from session
$classname = get_subtype_class($class, $subclass);
- if ($classname != "") {
+ if ($classname) {
if (class_exists($classname)) {
$tmp = new $classname();
@@ -1838,7 +2034,7 @@ function oddentity_to_elggentity(ODDEntity $element) {
function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) {
$element = $params['element'];
- $tmp = NULL;
+ $tmp = null;
if ($element instanceof ODDEntity) {
$tmp = oddentity_to_elggentity($element);
@@ -1932,7 +2128,7 @@ function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null
$return = null;
- if ($metadata->owner_guid == 0) {
+ if ($metadata && ($metadata->owner_guid == 0)) {
$return = true;
}
if (is_null($return)) {
@@ -2011,7 +2207,7 @@ function get_entity_url($entity_guid) {
function elgg_register_entity_url_handler($entity_type, $entity_subtype, $function_name) {
global $CONFIG;
- if (!is_callable($function_name)) {
+ if (!is_callable($function_name, true)) {
return false;
}
@@ -2273,6 +2469,7 @@ function elgg_instanceof($entity, $type = NULL, $subtype = NULL, $class = NULL)
$return = ($entity instanceof ElggEntity);
if ($type) {
+ /* @var ElggEntity $entity */
$return = $return && ($entity->getType() == $type);
}
@@ -2332,11 +2529,18 @@ function update_entity_last_action($guid, $posted = NULL) {
function entities_gc() {
global $CONFIG;
- $tables = array ('sites_entity', 'objects_entity', 'groups_entity', 'users_entity');
+ $tables = array(
+ 'site' => 'sites_entity',
+ 'object' => 'objects_entity',
+ 'group' => 'groups_entity',
+ 'user' => 'users_entity'
+ );
- foreach ($tables as $table) {
- delete_data("DELETE from {$CONFIG->dbprefix}{$table}
- where guid NOT IN (SELECT guid from {$CONFIG->dbprefix}entities)");
+ foreach ($tables as $type => $table) {
+ delete_data("DELETE FROM {$CONFIG->dbprefix}{$table}
+ WHERE guid NOT IN (SELECT guid FROM {$CONFIG->dbprefix}entities)");
+ delete_data("DELETE FROM {$CONFIG->dbprefix}entities
+ WHERE type = '$type' AND guid NOT IN (SELECT guid FROM {$CONFIG->dbprefix}{$table})");
}
}
diff --git a/engine/lib/export.php b/engine/lib/export.php
index ae9be95ce..ecc894e63 100644
--- a/engine/lib/export.php
+++ b/engine/lib/export.php
@@ -11,7 +11,7 @@
*
* @param mixed $object The object either an ElggEntity, ElggRelationship or ElggExtender
*
- * @return the UUID or false
+ * @return string|false the UUID or false
*/
function get_uuid_from_object($object) {
if ($object instanceof ElggEntity) {
@@ -40,8 +40,6 @@ function get_uuid_from_object($object) {
* @return string
*/
function guid_to_uuid($guid) {
- global $CONFIG;
-
return elgg_get_site_url() . "export/opendd/$guid/";
}
@@ -53,8 +51,6 @@ function guid_to_uuid($guid) {
* @return bool
*/
function is_uuid_this_domain($uuid) {
- global $CONFIG;
-
if (strpos($uuid, elgg_get_site_url()) === 0) {
return true;
}
@@ -67,7 +63,7 @@ function is_uuid_this_domain($uuid) {
*
* @param string $uuid A unique ID
*
- * @return mixed
+ * @return ElggEntity|false
*/
function get_entity_from_uuid($uuid) {
$uuid = sanitise_string($uuid);
@@ -117,18 +113,19 @@ function _process_element(ODD $odd) {
global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
// See if anyone handles this element, return true if it is.
+ $to_be_serialised = null;
if ($odd) {
$handled = elgg_trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
- }
- // If not, then see if any of its sub elements are handled
- if ($handled) {
- // Increment validation counter
- $IMPORTED_OBJECT_COUNTER ++;
- // Return the constructed object
- $IMPORTED_DATA[] = $handled;
+ // If not, then see if any of its sub elements are handled
+ if ($handled) {
+ // Increment validation counter
+ $IMPORTED_OBJECT_COUNTER ++;
+ // Return the constructed object
+ $IMPORTED_DATA[] = $handled;
- return true;
+ return true;
+ }
}
return false;
@@ -167,7 +164,7 @@ function exportAsArray($guid) {
*
* @param int $guid The GUID.
*
- * @return xml
+ * @return string XML
* @see ElggEntity for an example of its usage.
* @access private
*/
@@ -184,7 +181,7 @@ function export($guid) {
* @param string $xml XML string
*
* @return bool
- * @throws Exception if there was a problem importing the data.
+ * @throws ImportException if there was a problem importing the data.
* @access private
*/
function import($xml) {
diff --git a/engine/lib/extender.php b/engine/lib/extender.php
index 43421342c..8323bd3ce 100644
--- a/engine/lib/extender.php
+++ b/engine/lib/extender.php
@@ -86,6 +86,7 @@ function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element) {
* @return null
* @elgg_plugin_hook_handler volatile metadata
* @todo investigate more.
+ * @throws ImportException
* @access private
*/
function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) {
@@ -94,6 +95,7 @@ function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params)
$tmp = NULL;
if ($element instanceof ODDMetaData) {
+ /* @var ODDMetaData $element */
// Recall entity
$entity_uuid = $element->getAttribute('entity_uuid');
$entity = get_entity_from_uuid($entity_uuid);
@@ -124,38 +126,45 @@ function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params)
* @return bool
*/
function can_edit_extender($extender_id, $type, $user_guid = 0) {
- if (!elgg_is_logged_in()) {
- return false;
+ // @todo Since Elgg 1.0, Elgg has returned false from can_edit_extender()
+ // if no user was logged in. This breaks the access override. This is a
+ // temporary work around. This function needs to be rewritten in Elgg 1.9
+ if (!elgg_check_access_overrides($user_guid)) {
+ if (!elgg_is_logged_in()) {
+ return false;
+ }
}
$user_guid = (int)$user_guid;
- $user = get_entity($user_guid);
+ $user = get_user($user_guid);
if (!$user) {
$user = elgg_get_logged_in_user_entity();
+ $user_guid = elgg_get_logged_in_user_guid();
}
$functionname = "elgg_get_{$type}_from_id";
if (is_callable($functionname)) {
- $extender = $functionname($extender_id);
+ $extender = call_user_func($functionname, $extender_id);
} else {
return false;
}
- if (!is_a($extender, "ElggExtender")) {
+ if (!($extender instanceof ElggExtender)) {
return false;
}
+ /* @var ElggExtender $extender */
// If the owner is the specified user, great! They can edit.
- if ($extender->getOwnerGUID() == $user->getGUID()) {
+ if ($extender->getOwnerGUID() == $user_guid) {
return true;
}
// If the user can edit the entity this is attached to, great! They can edit.
- if (can_edit_entity($extender->entity_guid, $user->getGUID())) {
+ if (can_edit_entity($extender->entity_guid, $user_guid)) {
return true;
}
- // Trigger plugin hooks
+ // Trigger plugin hook - note that $user may be null
$params = array('entity' => $extender->getEntity(), 'user' => $user);
return elgg_trigger_plugin_hook('permissions_check', $type, $params, false);
}
@@ -175,7 +184,7 @@ function elgg_register_extender_url_handler($extender_type, $extender_name, $fun
global $CONFIG;
- if (!is_callable($function_name)) {
+ if (!is_callable($function_name, true)) {
return false;
}
@@ -228,7 +237,7 @@ function get_extender_url(ElggExtender $extender) {
if ($url == "") {
$nameid = $extender->id;
if ($type == 'volatile') {
- $nameid == $extender->name;
+ $nameid = $extender->name;
}
$url = "export/$view/$guid/$type/$nameid/";
}
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
index 93a127257..a3c7ba439 100644
--- a/engine/lib/filestore.php
+++ b/engine/lib/filestore.php
@@ -308,8 +308,6 @@ function get_image_resize_parameters($width, $height, $options) {
function file_delete($guid) {
if ($file = get_entity($guid)) {
if ($file->canEdit()) {
- $container = get_entity($file->container_guid);
-
$thumbnail = $file->thumbnail;
$smallthumb = $file->smallthumb;
$largethumb = $file->largethumb;
@@ -383,7 +381,7 @@ function file_get_general_file_type($mimetype) {
/**
* Delete a directory and all its contents
*
- * @param str $directory Directory to delete
+ * @param string $directory Directory to delete
*
* @return bool
*/
@@ -500,7 +498,7 @@ function filestore_init() {
/**
* Unit tests for files
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
diff --git a/engine/lib/group.php b/engine/lib/group.php
index feb1f1e7f..6ded8a825 100644
--- a/engine/lib/group.php
+++ b/engine/lib/group.php
@@ -33,6 +33,7 @@ function get_group_entity_as_row($guid) {
* @param string $description Description
*
* @return bool
+ * @access private
*/
function create_group_entity($guid, $name, $description) {
global $CONFIG;
@@ -169,7 +170,7 @@ function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0
'relationship' => 'member',
'relationship_guid' => $group_guid,
'inverse_relationship' => TRUE,
- 'types' => 'user',
+ 'type' => 'user',
'limit' => $limit,
'offset' => $offset,
'count' => $count,
@@ -239,56 +240,52 @@ function leave_group($group_guid, $user_guid) {
*/
function get_users_membership($user_guid) {
$options = array(
+ 'type' => 'group',
'relationship' => 'member',
'relationship_guid' => $user_guid,
- 'inverse_relationship' => FALSE
+ 'inverse_relationship' => false,
+ 'limit' => false,
);
return elgg_get_entities_from_relationship($options);
}
/**
- * Checks access to a group.
+ * May the current user access item(s) on this page? If the page owner is a group,
+ * membership, visibility, and logged in status are taken into account.
*
* @param boolean $forward If set to true (default), will forward the page;
* if set to false, will return true or false.
*
- * @return true|false If $forward is set to false.
+ * @return bool If $forward is set to false.
*/
function group_gatekeeper($forward = true) {
- $allowed = true;
- $url = '';
-
- if ($group = elgg_get_page_owner_entity()) {
- if ($group instanceof ElggGroup) {
- $url = $group->getURL();
- if (!$group->isPublicMembership()) {
- // closed group so must be member or an admin
-
- if (!elgg_is_logged_in()) {
- $allowed = false;
- if ($forward == true) {
- $_SESSION['last_forward_from'] = current_page_url();
- register_error(elgg_echo('loggedinrequired'));
- forward('', 'login');
- }
- } else if (!$group->isMember(elgg_get_logged_in_user_entity())) {
- $allowed = false;
- }
- // Admin override
- if (elgg_is_admin_logged_in()) {
- $allowed = true;
- }
- }
- }
+ $page_owner_guid = elgg_get_page_owner_guid();
+ if (!$page_owner_guid) {
+ return true;
}
+ $visibility = ElggGroupItemVisibility::factory($page_owner_guid);
- if ($forward && $allowed == false) {
- register_error(elgg_echo('membershiprequired'));
- forward($url, 'member');
+ if (!$visibility->shouldHideItems) {
+ return true;
+ }
+ if ($forward) {
+ // only forward to group if user can see it
+ $group = get_entity($page_owner_guid);
+ $forward_url = $group ? $group->getURL() : '';
+
+ if (!elgg_is_logged_in()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ $forward_reason = 'login';
+ } else {
+ $forward_reason = 'member';
+ }
+
+ register_error(elgg_echo($visibility->reasonHidden));
+ forward($forward_url, $forward_reason);
}
- return $allowed;
+ return false;
}
/**
diff --git a/engine/lib/input.php b/engine/lib/input.php
index 6d1646e1a..80b0b8766 100644
--- a/engine/lib/input.php
+++ b/engine/lib/input.php
@@ -60,8 +60,8 @@ function get_input($variable, $default = NULL, $filter_result = TRUE) {
*
* Note: this function does not handle nested arrays (ex: form input of param[m][n])
*
- * @param string $variable The name of the variable
- * @param string $value The value of the variable
+ * @param string $variable The name of the variable
+ * @param string|string[] $value The value of the variable
*
* @return void
*/
@@ -226,6 +226,8 @@ function elgg_clear_sticky_value($form_name, $variable) {
/**
* Page handler for autocomplete endpoint.
*
+ * @todo split this into functions/objects, this is way too big
+ *
* /livesearch?q=<query>
*
* Other options include:
@@ -233,6 +235,7 @@ function elgg_clear_sticky_value($form_name, $variable) {
* match_owner int 0/1
* limit int default is 10
*
+ * @param array $page
* @return string JSON string is returned and then exit
* @access private
*/
@@ -265,10 +268,8 @@ function input_livesearch_page_handler($page) {
}
if (get_input('match_owner', false)) {
- $owner_guid = $user->getGUID();
$owner_where = 'AND e.owner_guid = ' . $user->getGUID();
} else {
- $owner_guid = null;
$owner_where = '';
}
@@ -289,7 +290,9 @@ function input_livesearch_page_handler($page) {
if ($entities = get_data($query)) {
foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
$entity = get_entity($entity->guid);
+ /* @var ElggUser $entity */
if (!$entity) {
continue;
}
@@ -338,7 +341,9 @@ function input_livesearch_page_handler($page) {
";
if ($entities = get_data($query)) {
foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
$entity = get_entity($entity->guid);
+ /* @var ElggGroup $entity */
if (!$entity) {
continue;
}
@@ -385,7 +390,9 @@ function input_livesearch_page_handler($page) {
if ($entities = get_data($query)) {
foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
$entity = get_entity($entity->guid);
+ /* @var ElggUser $entity */
if (!$entity) {
continue;
}
diff --git a/engine/lib/languages.php b/engine/lib/languages.php
index 98006f7cd..61ba91ddb 100644
--- a/engine/lib/languages.php
+++ b/engine/lib/languages.php
@@ -77,7 +77,7 @@ function elgg_echo($message_key, $args = array(), $language = "") {
* @param string $country_code Standard country code (eg 'en', 'nl', 'es')
* @param array $language_array Formatted array of strings
*
- * @return true|false Depending on success
+ * @return bool Depending on success
*/
function add_translation($country_code, $language_array) {
global $CONFIG;
@@ -104,8 +104,6 @@ function add_translation($country_code, $language_array) {
* @return string The language code for the site/user or "en" if not set
*/
function get_current_language() {
- global $CONFIG;
-
$language = get_language();
if (!$language) {
@@ -141,6 +139,9 @@ function get_language() {
return false;
}
+/**
+ * @access private
+ */
function _elgg_load_translations() {
global $CONFIG;
@@ -148,7 +149,7 @@ function _elgg_load_translations() {
$loaded = true;
$languages = array_unique(array('en', get_current_language()));
foreach ($languages as $language) {
- $data = elgg_load_system_cache("$language.php");
+ $data = elgg_load_system_cache("$language.lang");
if ($data) {
add_translation($language, unserialize($data));
} else {
@@ -177,7 +178,7 @@ function _elgg_load_translations() {
* @param bool $load_all If true all languages are loaded, if
* false only the current language + en are loaded
*
- * @return void
+ * @return bool success
*/
function register_translations($path, $load_all = false) {
global $CONFIG;
@@ -229,23 +230,37 @@ function register_translations($path, $load_all = false) {
/**
* Reload all translations from all registered paths.
*
- * This is only called by functions which need to know all possible translations, namely the
- * statistic gathering ones.
+ * This is only called by functions which need to know all possible translations.
*
* @todo Better on demand loading based on language_paths array
*
- * @return bool
+ * @return void
*/
function reload_all_translations() {
global $CONFIG;
static $LANG_RELOAD_ALL_RUN;
if ($LANG_RELOAD_ALL_RUN) {
- return null;
+ return;
}
- foreach ($CONFIG->language_paths as $path => $dummy) {
- register_translations($path, true);
+ if ($CONFIG->i18n_loaded_from_cache) {
+ $cache = elgg_get_system_cache();
+ $cache_dir = $cache->getVariable("cache_path");
+ $filenames = elgg_get_file_list($cache_dir, array(), array(), array(".lang"));
+ foreach ($filenames as $filename) {
+ if (preg_match('/([a-z]+)\.[^.]+$/', $filename, $matches)) {
+ $language = $matches[1];
+ $data = elgg_load_system_cache("$language.lang");
+ if ($data) {
+ add_translation($language, unserialize($data));
+ }
+ }
+ }
+ } else {
+ foreach ($CONFIG->language_paths as $path => $dummy) {
+ register_translations($path, true);
+ }
}
$LANG_RELOAD_ALL_RUN = true;
@@ -337,14 +352,3 @@ function get_missing_language_keys($language) {
return false;
}
-
-/**
- * Initialize the language library
- * @access private
- */
-function elgg_languages_init() {
- $lang = get_current_language();
- elgg_register_simplecache_view("js/languages/$lang");
-}
-
-elgg_register_event_handler('init', 'system', 'elgg_languages_init');
diff --git a/engine/lib/location.php b/engine/lib/location.php
index 5b889509b..1534c7d7b 100644
--- a/engine/lib/location.php
+++ b/engine/lib/location.php
@@ -101,7 +101,7 @@ function elgg_get_entities_from_location(array $options = array()) {
$long_min = $long - $long_distance;
$long_max = $long + $long_distance;
- $where = array();
+ $wheres = array();
$wheres[] = "lat_name.string='geo:lat'";
$wheres[] = "lat_value.string >= $lat_min";
$wheres[] = "lat_value.string <= $lat_max";
@@ -139,7 +139,7 @@ function elgg_get_entities_from_location(array $options = array()) {
/**
* Returns a viewable list of entities from location
*
- * @param array $options
+ * @param array $options Options array
*
* @see elgg_list_entities()
* @see elgg_get_entities_from_location()
diff --git a/engine/lib/mb_wrapper.php b/engine/lib/mb_wrapper.php
index c2f5503e0..68fa69005 100644
--- a/engine/lib/mb_wrapper.php
+++ b/engine/lib/mb_wrapper.php
@@ -11,7 +11,7 @@ if (is_callable('mb_internal_encoding')) {
* NOTE: This differs from parse_str() by returning the results
* instead of placing them in the local scope!
*
- * @param str $str The string
+ * @param string $str The string
*
* @return array
* @since 1.7.0
diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php
index f79fba4a9..79b87e850 100644
--- a/engine/lib/memcache.php
+++ b/engine/lib/memcache.php
@@ -35,3 +35,23 @@ function is_memcache_available() {
return $memcache_available;
}
+
+/**
+ * Invalidate an entity in memcache
+ *
+ * @param int $entity_guid The GUID of the entity to invalidate
+ *
+ * @return void
+ * @access private
+ */
+function _elgg_invalidate_memcache_for_entity($entity_guid) {
+ static $newentity_cache;
+
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($entity_guid);
+ }
+} \ No newline at end of file
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php
index f76c20f24..fdb1b85f6 100644
--- a/engine/lib/metadata.php
+++ b/engine/lib/metadata.php
@@ -191,19 +191,19 @@ function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_i
}
// Add the metastring
- $value = add_metastring($value);
- if (!$value) {
+ $value_id = add_metastring($value);
+ if (!$value_id) {
return false;
}
- $name = add_metastring($name);
- if (!$name) {
+ $name_id = add_metastring($name);
+ if (!$name_id) {
return false;
}
// If ok then add it
$query = "UPDATE {$CONFIG->dbprefix}metadata"
- . " set name_id='$name', value_id='$value', value_type='$value_type', access_id=$access_id,"
+ . " set name_id='$name_id', value_id='$value_id', value_type='$value_type', access_id=$access_id,"
. " owner_guid=$owner_guid where id=$id";
$result = update_data($query);
@@ -277,10 +277,18 @@ $access_id = ACCESS_PRIVATE, $allow_multiple = false) {
* all metadata that match the query instead of returning
* ElggMetadata objects.
*
- * @return mixed
+ * @return ElggMetadata[]|mixed
* @since 1.8.0
*/
function elgg_get_metadata(array $options = array()) {
+
+ // @todo remove support for count shortcut - see #4393
+ // support shortcut of 'count' => true for 'metadata_calculation' => 'count'
+ if (isset($options['count']) && $options['count']) {
+ $options['metadata_calculation'] = 'count';
+ unset($options['count']);
+ }
+
$options['metastring_type'] = 'metadata';
return elgg_get_metastring_based_objects($options);
}
@@ -292,21 +300,22 @@ function elgg_get_metadata(array $options = array()) {
* This requires at least one constraint: metadata_owner_guid(s),
* metadata_name(s), metadata_value(s), or guid(s) must be set.
*
- * @warning This returns null on no ops.
- *
* @param array $options An options array. {@see elgg_get_metadata()}
- * @return mixed Null if the metadata name is invalid. Bool on success or fail.
+ * @return bool|null true on success, false on failure, null if no metadata to delete.
* @since 1.8.0
*/
function elgg_delete_metadata(array $options) {
if (!elgg_is_valid_options_for_batch_operation($options, 'metadata')) {
return false;
}
+ $options['metastring_type'] = 'metadata';
+ $result = elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+ // This moved last in case an object's constructor sets metadata. Currently the batch
+ // delete process has to create the entity to delete its metadata. See #5214
elgg_get_metadata_cache()->invalidateByOptions('delete', $options);
- $options['metastring_type'] = 'metadata';
- return elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+ return $result;
}
/**
@@ -314,10 +323,8 @@ function elgg_delete_metadata(array $options) {
*
* @warning Unlike elgg_get_metadata() this will not accept an empty options array!
*
- * @warning This returns null on no ops.
- *
* @param array $options An options array. {@See elgg_get_metadata()}
- * @return mixed
+ * @return bool|null true on success, false on failure, null if no metadata disabled.
* @since 1.8.0
*/
function elgg_disable_metadata(array $options) {
@@ -326,9 +333,13 @@ function elgg_disable_metadata(array $options) {
}
elgg_get_metadata_cache()->invalidateByOptions('disable', $options);
+
+ // if we can see hidden (disabled) we need to use the offset
+ // otherwise we risk an infinite loop if there are more than 50
+ $inc_offset = access_get_show_hidden_status();
$options['metastring_type'] = 'metadata';
- return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', false);
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', $inc_offset);
}
/**
@@ -336,10 +347,11 @@ function elgg_disable_metadata(array $options) {
*
* @warning Unlike elgg_get_metadata() this will not accept an empty options array!
*
- * @warning This returns null on no ops.
+ * @warning In order to enable metadata, you must first use
+ * {@link access_show_hidden_entities()}.
*
* @param array $options An options array. {@See elgg_get_metadata()}
- * @return mixed
+ * @return bool|null true on success, false on failure, null if no metadata enabled.
* @since 1.8.0
*/
function elgg_enable_metadata(array $options) {
@@ -394,9 +406,11 @@ function elgg_enable_metadata(array $options) {
* 'operand' => '=',
* 'case_sensitive' => TRUE
* )
- * Currently if multiple values are sent via
+ * Currently if multiple values are sent via
* an array (value => array('value1', 'value2')
* the pair's operand will be forced to "IN".
+ * If passing "IN" as the operand and a string as the value,
+ * the value must be a properly quoted and escaped string.
*
* metadata_name_value_pairs_operator => NULL|STR The operator to use for combining
* (name = value) OPERATOR (name = value); default AND
@@ -412,7 +426,7 @@ function elgg_enable_metadata(array $options) {
*
* metadata_owner_guids => NULL|ARR guids for metadata owners
*
- * @return mixed If count, int. If not count, array. false on errors.
+ * @return ElggEntity[]|mixed If count, int. If not count, array. false on errors.
* @since 1.7.0
*/
function elgg_get_entities_from_metadata(array $options = array()) {
@@ -461,7 +475,7 @@ function elgg_get_entities_from_metadata(array $options = array()) {
* @param array|null $order_by_metadata Array of names / direction
* @param array|null $owner_guids Array of owner GUIDs
*
- * @return FALSE|array False on fail, array('joins', 'wheres')
+ * @return false|array False on fail, array('joins', 'wheres')
* @since 1.7.0
* @access private
*/
@@ -608,6 +622,8 @@ $owner_guids = NULL) {
// if the operand is IN don't quote it because quoting should be done already.
if (is_numeric($pair['value'])) {
$value = sanitise_string($pair['value']);
+ } else if (is_bool($pair['value'])) {
+ $value = (int) $pair['value'];
} else if (is_array($pair['value'])) {
$values_array = array();
@@ -774,10 +790,10 @@ function string_to_tag_array($string) {
$ar = explode(",", $string);
$ar = array_map('trim', $ar);
$ar = array_filter($ar, 'is_not_null');
+ $ar = array_map('strip_tags', $ar);
return $ar;
}
return false;
-
}
/**
@@ -909,8 +925,8 @@ function elgg_get_metadata_cache() {
* Invalidate the metadata cache based on options passed to various *_metadata functions
*
* @param string $action Action performed on metadata. "delete", "disable", or "enable"
- *
- * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ * @return void
*/
function elgg_invalidate_metadata_cache($action, array $options) {
// remove as little as possible, optimizing for common cases
diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php
index cf6dd4d98..57d876c06 100644
--- a/engine/lib/metastrings.php
+++ b/engine/lib/metastrings.php
@@ -67,7 +67,7 @@ function get_metastring_id($string, $case_sensitive = TRUE) {
}
$row = FALSE;
- $metaStrings = get_data($query, "entity_row_to_elggstar");
+ $metaStrings = get_data($query);
if (is_array($metaStrings)) {
if (sizeof($metaStrings) > 1) {
$ids = array();
@@ -389,11 +389,6 @@ function elgg_get_metastring_based_objects($options) {
$selects = $options['selects'];
- // allow count shortcut
- if ($options['count']) {
- $options['metastring_calculation'] = 'count';
- }
-
// For performance reasons we don't want the joins required for metadata / annotations
// unless we're going through one of their callbacks.
// this means we expect the functions passing different callbacks to pass their required joins.
@@ -426,9 +421,11 @@ function elgg_get_metastring_based_objects($options) {
if ($metastring_clauses) {
$wheres = array_merge($wheres, $metastring_clauses['wheres']);
$joins = array_merge($joins, $metastring_clauses['joins']);
+ } else {
+ $wheres[] = get_access_sql_suffix('n_table');
}
- if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE && !$options['count']) {
$selects = array_unique($selects);
// evalutate selects
$select_str = '';
@@ -439,6 +436,9 @@ function elgg_get_metastring_based_objects($options) {
}
$query = "SELECT DISTINCT n_table.*{$select_str} FROM {$db_prefix}$type n_table";
+ } elseif ($options['count']) {
+ // count is over the entities
+ $query = "SELECT count(DISTINCT e.guid) as calculation FROM {$db_prefix}$type n_table";
} else {
$query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";
}
@@ -467,7 +467,7 @@ function elgg_get_metastring_based_objects($options) {
$defaults['order_by']);
}
- if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE && !$options['count']) {
if (isset($options['group_by'])) {
$options['group_by'] = sanitise_string($options['group_by']);
$query .= " GROUP BY {$options['group_by']}";
@@ -515,21 +515,16 @@ function elgg_get_metastring_sql($table, $names = null, $values = null,
&& !$ids
&& (!$pairs && $pairs !== 0)) {
- return '';
+ return array();
}
$db_prefix = elgg_get_config('dbprefix');
- // join counter for incremental joins.
- $i = 1;
-
// binary forces byte-to-byte comparision of strings, making
// it case- and diacritical-mark- sensitive.
// only supported on values.
$binary = ($case_sensitive) ? ' BINARY ' : '';
- $access = get_access_sql_suffix($table);
-
$return = array (
'joins' => array (),
'wheres' => array()
@@ -594,13 +589,15 @@ function elgg_get_metastring_sql($table, $names = null, $values = null,
}
if ($names_where && $values_where) {
- $wheres[] = "($names_where AND $values_where AND $access)";
+ $wheres[] = "($names_where AND $values_where)";
} elseif ($names_where) {
- $wheres[] = "($names_where AND $access)";
+ $wheres[] = $names_where;
} elseif ($values_where) {
- $wheres[] = "($values_where AND $access)";
+ $wheres[] = $values_where;
}
+ $wheres[] = get_access_sql_suffix($table);
+
if ($where = implode(' AND ', $wheres)) {
$return['wheres'][] = "($where)";
}
@@ -663,9 +660,10 @@ function elgg_normalize_metastrings_options(array $options = array()) {
*
* @param int $id The object's ID
* @param string $enabled Value to set to: yes or no
- * @param string $type The type of table to use: metadata or anntations
+ * @param string $type The type of table to use: metadata or annotations
*
* @return bool
+ * @throws InvalidParameterException
* @since 1.8.0
* @access private
*/
@@ -740,7 +738,7 @@ function elgg_batch_metastring_based_objects(array $options, $callback, $inc_off
*
* @param int $id The metastring-based object's ID
* @param string $type The type: annotation or metadata
- * @return mixed
+ * @return ElggMetadata|ElggAnnotation
*
* @since 1.8.0
* @access private
@@ -806,6 +804,7 @@ function elgg_delete_metastring_based_object_by_id($id, $type) {
}
if ($metabyname_memcache) {
+ // @todo why name_id? is that even populated?
$metabyname_memcache->delete("{$obj->entity_guid}:{$obj->name_id}");
}
}
diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php
index 8c3952594..ab9cc05e8 100644
--- a/engine/lib/navigation.php
+++ b/engine/lib/navigation.php
@@ -126,6 +126,7 @@ function elgg_unregister_menu_item($menu_name, $item_name) {
}
foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
+ /* @var ElggMenuItem $menu_object */
if ($menu_object->getName() == $item_name) {
unset($CONFIG->menus[$menu_name][$index]);
return true;
@@ -151,7 +152,8 @@ function elgg_is_menu_item_registered($menu_name, $item_name) {
return false;
}
- foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
+ foreach ($CONFIG->menus[$menu_name] as $menu_object) {
+ /* @var ElggMenuItem $menu_object */
if ($menu_object->getName() == $item_name) {
return true;
}
@@ -216,7 +218,7 @@ function elgg_push_breadcrumb($title, $link = NULL) {
}
// avoid key collisions.
- $CONFIG->breadcrumbs[] = array('title' => $title, 'link' => $link);
+ $CONFIG->breadcrumbs[] = array('title' => elgg_get_excerpt($title, 100), 'link' => $link);
}
/**
@@ -308,6 +310,37 @@ function elgg_site_menu_setup($hook, $type, $return, $params) {
$return['more'] = array_splice($return['default'], $max_display_items);
}
}
+
+ // check if we have anything selected
+ $selected = false;
+ foreach ($return as $section) {
+ foreach ($section as $item) {
+ if ($item->getSelected()) {
+ $selected = true;
+ break 2;
+ }
+ }
+ }
+
+ if (!$selected) {
+ // nothing selected, match name to context or match url
+ $current_url = current_page_url();
+ foreach ($return as $section_name => $section) {
+ foreach ($section as $key => $item) {
+ // only highlight internal links
+ if (strpos($item->getHref(), elgg_get_site_url()) === 0) {
+ if ($item->getName() == elgg_get_context()) {
+ $return[$section_name][$key]->setSelected(true);
+ break 2;
+ }
+ if ($item->getHref() == $current_url) {
+ $return[$section_name][$key]->setSelected(true);
+ break 2;
+ }
+ }
+ }
+ }
+ }
return $return;
}
@@ -319,6 +352,7 @@ function elgg_site_menu_setup($hook, $type, $return, $params) {
function elgg_river_menu_setup($hook, $type, $return, $params) {
if (elgg_is_logged_in()) {
$item = $params['item'];
+ /* @var ElggRiverItem $item */
$object = $item->getObjectEntity();
// comments and non-objects cannot be commented on or liked
if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
@@ -362,6 +396,7 @@ function elgg_entity_menu_setup($hook, $type, $return, $params) {
}
$entity = $params['entity'];
+ /* @var ElggEntity $entity */
$handler = elgg_extract('handler', $params, false);
// access
@@ -407,6 +442,7 @@ function elgg_entity_menu_setup($hook, $type, $return, $params) {
function elgg_widget_menu_setup($hook, $type, $return, $params) {
$widget = $params['entity'];
+ /* @var ElggWidget $widget */
$show_edit = elgg_extract('show_edit', $params, true);
$collapse = array(
@@ -455,6 +491,7 @@ function elgg_widget_menu_setup($hook, $type, $return, $params) {
*/
function elgg_annotation_menu_setup($hook, $type, $return, $params) {
$annotation = $params['annotation'];
+ /* @var ElggAnnotation $annotation */
if ($annotation->name == 'generic_comment' && $annotation->canEdit()) {
$url = elgg_http_add_url_query_elements('action/comments/delete', array(
diff --git a/engine/lib/notification.php b/engine/lib/notification.php
index 18faff27f..be0c359d4 100644
--- a/engine/lib/notification.php
+++ b/engine/lib/notification.php
@@ -38,7 +38,7 @@ $NOTIFICATION_HANDLERS = array();
function register_notification_handler($method, $handler, $params = NULL) {
global $NOTIFICATION_HANDLERS;
- if (is_callable($handler)) {
+ if (is_callable($handler, true)) {
$NOTIFICATION_HANDLERS[$method] = new stdClass;
$NOTIFICATION_HANDLERS[$method]->handler = $handler;
@@ -86,7 +86,7 @@ function unregister_notification_handler($method) {
* @throws NotificationException
*/
function notify_user($to, $from, $subject, $message, array $params = NULL, $methods_override = "") {
- global $NOTIFICATION_HANDLERS, $CONFIG;
+ global $NOTIFICATION_HANDLERS;
// Sanitise
if (!is_array($to)) {
@@ -110,12 +110,15 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth
// Are we overriding delivery?
$methods = $methods_override;
if (!$methods) {
- $tmp = (array)get_user_notification_settings($guid);
+ $tmp = get_user_notification_settings($guid);
$methods = array();
- foreach ($tmp as $k => $v) {
- // Add method if method is turned on for user!
- if ($v) {
- $methods[] = $k;
+ // $tmp may be false. don't cast
+ if (is_object($tmp)) {
+ foreach ($tmp as $k => $v) {
+ // Add method if method is turned on for user!
+ if ($v) {
+ $methods[] = $k;
+ }
}
}
}
@@ -131,8 +134,9 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth
// Extract method details from list
$details = $NOTIFICATION_HANDLERS[$method];
$handler = $details->handler;
+ /* @var callable $handler */
- if ((!$NOTIFICATION_HANDLERS[$method]) || (!$handler)) {
+ if ((!$NOTIFICATION_HANDLERS[$method]) || (!$handler) || (!is_callable($handler))) {
error_log(elgg_echo('NotificationException:NoHandlerFound', array($method)));
}
@@ -140,7 +144,7 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth
// Trigger handler and retrieve result.
try {
- $result[$guid][$method] = $handler(
+ $result[$guid][$method] = call_user_func($handler,
$from ? get_entity($from) : NULL, // From entity
get_entity($guid), // To entity
$subject, // The subject
@@ -164,7 +168,7 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth
*
* @param int $user_guid The user id
*
- * @return stdClass
+ * @return stdClass|false
*/
function get_user_notification_settings($user_guid = 0) {
$user_guid = (int)$user_guid;
@@ -173,7 +177,8 @@ function get_user_notification_settings($user_guid = 0) {
$user_guid = elgg_get_logged_in_user_guid();
}
- // @todo: holy crap, really?
+ // @todo: there should be a better way now that metadata is cached. E.g. just query for MD names, then
+ // query user object directly
$all_metadata = elgg_get_metadata(array(
'guid' => $user_guid,
'limit' => 0
@@ -236,6 +241,7 @@ function set_user_notification_setting($user_guid, $method, $value) {
* @param array $params Optional parameters (none taken in this instance)
*
* @return bool
+ * @throws NotificationException
* @access private
*/
function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message,
@@ -262,7 +268,7 @@ array $params = NULL) {
$to = $to->email;
// From
- $site = get_entity($CONFIG->site_guid);
+ $site = elgg_get_site_entity();
// If there's an email address, use it - but only if its not from a user.
if (!($from instanceof ElggUser) && $from->email) {
$from = $from->email;
@@ -287,6 +293,7 @@ array $params = NULL) {
* @param array $params Optional parameters (none used in this function)
*
* @return bool
+ * @throws NotificationException
* @since 1.7.2
*/
function elgg_send_email($from, $to, $subject, $body, array $params = NULL) {
@@ -343,6 +350,8 @@ function elgg_send_email($from, $to, $subject, $body, array $params = NULL) {
// Sanitise subject by stripping line endings
$subject = preg_replace("/(\r\n|\r|\n)/", " ", $subject);
+ // this is because Elgg encodes everything and matches what is done with body
+ $subject = html_entity_decode($subject, ENT_COMPAT, 'UTF-8'); // Decode any html entities
if (is_callable('mb_encode_mimeheader')) {
$subject = mb_encode_mimeheader($subject, "UTF-8", "B");
}
@@ -421,7 +430,7 @@ function register_notification_object($entity_type, $object_subtype, $language_n
* @param int $user_guid The GUID of the user who wants to follow a user's content
* @param int $author_guid The GUID of the user whose content the user wants to follow
*
- * @return true|false Depending on success
+ * @return bool Depending on success
*/
function register_notification_interest($user_guid, $author_guid) {
return add_entity_relationship($user_guid, 'notify', $author_guid);
@@ -433,7 +442,7 @@ function register_notification_interest($user_guid, $author_guid) {
* @param int $user_guid The GUID of the user who is following a user's content
* @param int $author_guid The GUID of the user whose content the user wants to unfollow
*
- * @return true|false Depending on success
+ * @return bool Depending on success
*/
function remove_notification_interest($user_guid, $author_guid) {
return remove_entity_relationship($user_guid, 'notify', $author_guid);
@@ -449,12 +458,13 @@ function remove_notification_interest($user_guid, $author_guid) {
* @param string $object_type mixed
* @param mixed $object The object created
*
- * @return void
+ * @return bool
* @access private
*/
function object_notifications($event, $object_type, $object) {
// We only want to trigger notification events for ElggEntities
if ($object instanceof ElggEntity) {
+ /* @var ElggEntity $object */
// Get config data
global $CONFIG, $SESSION, $NOTIFICATION_HANDLERS;
@@ -491,9 +501,10 @@ function object_notifications($event, $object_type, $object) {
'relationship' => 'notify' . $method,
'relationship_guid' => $object->container_guid,
'inverse_relationship' => TRUE,
- 'types' => 'user',
- 'limit' => 99999
+ 'type' => 'user',
+ 'limit' => false
));
+ /* @var ElggUser[] $interested_users */
if ($interested_users && is_array($interested_users)) {
foreach ($interested_users as $user) {
diff --git a/engine/lib/objects.php b/engine/lib/objects.php
index f186c66cb..ff3cc733f 100644
--- a/engine/lib/objects.php
+++ b/engine/lib/objects.php
@@ -31,6 +31,7 @@ function get_object_entity_as_row($guid) {
* @param string $description The object's description
*
* @return bool
+ * @access private
*/
function create_object_entity($guid, $title, $description) {
global $CONFIG;
@@ -92,16 +93,16 @@ function get_object_sites($object_guid, $limit = 10, $offset = 0) {
return elgg_get_entities_from_relationship(array(
'relationship' => 'member_of_site',
'relationship_guid' => $object_guid,
- 'types' => 'site',
+ 'type' => 'site',
'limit' => $limit,
- 'offset' => $offset
+ 'offset' => $offset,
));
}
/**
* Runs unit tests for ElggObject
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
diff --git a/engine/lib/opendd.php b/engine/lib/opendd.php
index f00ea6aab..7d635a295 100644
--- a/engine/lib/opendd.php
+++ b/engine/lib/opendd.php
@@ -7,6 +7,8 @@
* @version 0.4
*/
+// @codingStandardsIgnoreStart
+
/**
* Attempt to construct an ODD object out of a XmlElement or sub-elements.
*
@@ -103,3 +105,5 @@ function ODD_Import($xml) {
function ODD_Export(ODDDocument $document) {
return "$document";
}
+
+// @codingStandardsIgnoreEnd
diff --git a/engine/lib/output.php b/engine/lib/output.php
index 7bfc4be6e..de4f911fb 100644
--- a/engine/lib/output.php
+++ b/engine/lib/output.php
@@ -12,29 +12,34 @@
*
* @param string $text The input string
*
- * @return string The output stirng with formatted links
- **/
+ * @return string The output string with formatted links
+ */
function parse_urls($text) {
+
+ // URI specification: http://www.ietf.org/rfc/rfc3986.txt
+ // This varies from the specification in the following ways:
+ // * Supports non-ascii characters
+ // * Does not allow parentheses and single quotes
+ // * Cuts off commas, exclamation points, and periods off as last character
+
// @todo this causes problems with <attr = "val">
- // must be ing <attr="val"> format (no space).
+ // must be in <attr="val"> format (no space).
// By default htmlawed rewrites tags to this format.
// if PHP supported conditional negative lookbehinds we could use this:
// $r = preg_replace_callback('/(?<!=)(?<![ ])?(?<!["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\),]+)/i',
- //
- // we can put , in the list of excluded char but need to keep . because of domain names.
- // it is removed in the callback.
- $r = preg_replace_callback('/(?<!=)(?<!["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\),]+)/i',
+ $r = preg_replace_callback('/(?<![=\/"\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\']+)/i',
create_function(
'$matches',
'
$url = $matches[1];
- $period = \'\';
- if (substr($url, -1, 1) == \'.\') {
- $period = \'.\';
- $url = trim($url, \'.\');
+ $punc = "";
+ $last = substr($url, -1, 1);
+ if (in_array($last, array(".", "!", ",", "(", ")"))) {
+ $punc = $last;
+ $url = rtrim($url, ".!,()");
}
$urltext = str_replace("/", "/<wbr />", $url);
- return "<a href=\"$url\">$urltext</a>$period";
+ return "<a href=\"$url\" rel=\"nofollow\">$urltext</a>$punc";
'
), $text);
@@ -43,51 +48,26 @@ function parse_urls($text) {
/**
* Create paragraphs from text with line spacing
- * Borrowed from Wordpress.
*
* @param string $pee The string
- * @param bool $br Add BRs?
+ * @deprecated Use elgg_autop instead
+ * @todo Add deprecation warning in 1.9
*
- * @todo Rewrite
* @return string
**/
-function autop($pee, $br = 1) {
- $pee = $pee . "\n"; // just to make things a little easier, pad the end
- $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
- // Space things out a little
- $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
- $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
- $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
- $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
- if (strpos($pee, '<object') !== false) {
- $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
- $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
- }
- $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
- $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end
- $pee = preg_replace('|<p>\s*?</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
- $pee = preg_replace('!<p>([^<]+)\s*?(</(?:div|address|form)[^>]*>)!', "<p>$1</p>$2", $pee);
- $pee = preg_replace('|<p>|', "$1<p>", $pee);
- $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
- $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
- $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
- $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
- $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
- $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
- if ($br) {
- $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', create_function('$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);'), $pee);
- $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
- $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
- }
- $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
- $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
- //if (strpos($pee, '<pre') !== false) {
- // mind the space between the ? and >. Only there because of the comment.
- // $pee = preg_replace_callback('!(<pre.*? >)(.*?)</pre>!is', 'clean_pre', $pee );
- //}
- $pee = preg_replace("|\n</p>$|", '</p>', $pee);
-
- return $pee;
+function autop($pee) {
+ return elgg_autop($pee);
+}
+
+/**
+ * Create paragraphs from text with line spacing
+ *
+ * @param string $string The string
+ *
+ * @return string
+ **/
+function elgg_autop($string) {
+ return ElggAutoP::getInstance()->process($string);
}
/**
@@ -249,7 +229,6 @@ function elgg_normalize_url($url) {
$php_5_3_0_to_5_3_2 = version_compare(PHP_VERSION, '5.3.0', '>=') &&
version_compare(PHP_VERSION, '5.3.3', '<');
- $validated = false;
if ($php_5_2_13_and_below || $php_5_3_0_to_5_3_2) {
$tmp_address = str_replace("-", "", $url);
$validated = filter_var($tmp_address, FILTER_VALIDATE_URL);
@@ -271,8 +250,8 @@ function elgg_normalize_url($url) {
// '?query=test', #target
return $url;
- } elseif (stripos($url, 'javascript:') === 0) {
- // 'javascript:'
+ } elseif (stripos($url, 'javascript:') === 0 || stripos($url, 'mailto:') === 0) {
+ // 'javascript:' and 'mailto:'
// Not covered in FILTER_VALIDATE_URL
return $url;
@@ -310,9 +289,9 @@ function elgg_get_friendly_title($title) {
return $result;
}
- // handle some special cases
- $title = str_replace('&amp;', 'and', $title);
-
+ // titles are often stored HTML encoded
+ $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
+
$title = ElggTranslit::urlize($title);
return $title;
@@ -384,7 +363,7 @@ function elgg_get_friendly_time($time) {
/**
* Strip tags and offer plugins the chance.
* Plugins register for output:strip_tags plugin hook.
- * Original string included in $params['original_string']
+ * Original string included in $params['original_string']
*
* @param string $string Formatted string
*
@@ -398,3 +377,93 @@ function elgg_strip_tags($string) {
return $string;
}
+
+/**
+ * Apply html_entity_decode() to a string while re-entitising HTML
+ * special char entities to prevent them from being decoded back to their
+ * unsafe original forms.
+ *
+ * This relies on html_entity_decode() not translating entities when
+ * doing so leaves behind another entity, e.g. &amp;gt; if decoded would
+ * create &gt; which is another entity itself. This seems to escape the
+ * usual behaviour where any two paired entities creating a HTML tag are
+ * usually decoded, i.e. a lone &gt; is not decoded, but &lt;foo&gt; would
+ * be decoded to <foo> since it creates a full tag.
+ *
+ * Note: This function is poorly explained in the manual - which is really
+ * bad given its potential for misuse on user input already escaped elsewhere.
+ * Stackoverflow is littered with advice to use this function in the precise
+ * way that would lead to user input being capable of injecting arbitrary HTML.
+ *
+ * @param string $string
+ *
+ * @return string
+ *
+ * @author Pádraic Brady
+ * @copyright Copyright (c) 2010 Pádraic Brady (http://blog.astrumfutura.com)
+ * @license Released under dual-license GPL2/MIT by explicit permission of Pádraic Brady
+ *
+ * @access private
+ */
+function _elgg_html_decode($string) {
+ $string = str_replace(
+ array('&gt;', '&lt;', '&amp;', '&quot;', '&#039;'),
+ array('&amp;gt;', '&amp;lt;', '&amp;amp;', '&amp;quot;', '&amp;#039;'),
+ $string
+ );
+ $string = html_entity_decode($string, ENT_NOQUOTES, 'UTF-8');
+ $string = str_replace(
+ array('&amp;gt;', '&amp;lt;', '&amp;amp;', '&amp;quot;', '&amp;#039;'),
+ array('&gt;', '&lt;', '&amp;', '&quot;', '&#039;'),
+ $string
+ );
+ return $string;
+}
+
+/**
+ * Prepares query string for output to prevent CSRF attacks.
+ *
+ * @param string $string
+ * @return string
+ *
+ * @access private
+ */
+function _elgg_get_display_query($string) {
+ //encode <,>,&, quotes and characters above 127
+ if (function_exists('mb_convert_encoding')) {
+ $display_query = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8');
+ } else {
+ // if no mbstring extension, we just strip characters
+ $display_query = preg_replace("/[^\x01-\x7F]/", "", $string);
+ }
+ return htmlspecialchars($display_query, ENT_QUOTES, 'UTF-8', false);
+}
+
+/**
+ * Unit tests for Output
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function output_unit_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/output.php';
+ return $value;
+}
+
+/**
+ * Initialise the Output subsystem.
+ *
+ * @return void
+ * @access private
+ */
+function output_init() {
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'output_unit_test');
+}
+
+elgg_register_event_handler('init', 'system', 'output_init');
diff --git a/engine/lib/pagehandler.php b/engine/lib/pagehandler.php
index ba7518a77..0cf99b6fe 100644
--- a/engine/lib/pagehandler.php
+++ b/engine/lib/pagehandler.php
@@ -45,7 +45,10 @@ function page_handler($handler, $page) {
$page = $request['segments'];
$result = false;
- if (isset($CONFIG->pagehandler) && !empty($handler) && isset($CONFIG->pagehandler[$handler])) {
+ if (isset($CONFIG->pagehandler)
+ && !empty($handler)
+ && isset($CONFIG->pagehandler[$handler])
+ && is_callable($CONFIG->pagehandler[$handler])) {
$function = $CONFIG->pagehandler[$handler];
$result = call_user_func($function, $page, $handler);
}
@@ -76,14 +79,15 @@ function page_handler($handler, $page) {
* @param string $handler The page type to handle
* @param string $function Your function name
*
- * @return true|false Depending on success
+ * @return bool Depending on success
*/
function elgg_register_page_handler($handler, $function) {
global $CONFIG;
+
if (!isset($CONFIG->pagehandler)) {
$CONFIG->pagehandler = array();
}
- if (is_callable($function)) {
+ if (is_callable($function, true)) {
$CONFIG->pagehandler[$handler] = $function;
return true;
}
diff --git a/engine/lib/pageowner.php b/engine/lib/pageowner.php
index 0cf0e0625..bd63d08c6 100644
--- a/engine/lib/pageowner.php
+++ b/engine/lib/pageowner.php
@@ -29,7 +29,9 @@ function elgg_get_page_owner_guid($guid = 0) {
// return guid of page owner entity
$guid = elgg_trigger_plugin_hook('page_owner', 'system', NULL, 0);
- $page_owner_guid = $guid;
+ if ($guid) {
+ $page_owner_guid = $guid;
+ }
return $guid;
}
@@ -37,17 +39,23 @@ function elgg_get_page_owner_guid($guid = 0) {
/**
* Gets the owner entity for the current page.
*
- * @return ElggEntity|false The current page owner or false if none.
+ * @note Access is disabled when getting the page owner entity.
+ *
+ * @return ElggUser|ElggGroup|false The current page owner or false if none.
*
* @since 1.8.0
*/
function elgg_get_page_owner_entity() {
$guid = elgg_get_page_owner_guid();
if ($guid > 0) {
- return get_entity($guid);
+ $ia = elgg_set_ignore_access(true);
+ $owner = get_entity($guid);
+ elgg_set_ignore_access($ia);
+
+ return $owner;
}
- return FALSE;
+ return false;
}
/**
@@ -75,6 +83,8 @@ function elgg_set_page_owner_guid($guid) {
* <handler>/edit/<entity guid>
* <handler>/group/<group guid>
*
+ * @note Access is disabled while finding the page owner for the group gatekeeper functions.
+ *
*
* @param string $hook 'page_owner'
* @param string $entity_type 'system'
@@ -90,6 +100,8 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
return $returnvalue;
}
+ $ia = elgg_set_ignore_access(true);
+
$username = get_input("username");
if ($username) {
// @todo using a username of group:<guid> is deprecated
@@ -97,11 +109,13 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
preg_match('/group\:([0-9]+)/i', $username, $matches);
$guid = $matches[1];
if ($entity = get_entity($guid)) {
+ elgg_set_ignore_access($ia);
return $entity->getGUID();
}
}
if ($user = get_user_by_username($username)) {
+ elgg_set_ignore_access($ia);
return $user->getGUID();
}
}
@@ -109,6 +123,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
$owner = get_input("owner_guid");
if ($owner) {
if ($user = get_entity($owner)) {
+ elgg_set_ignore_access($ia);
return $user->getGUID();
}
}
@@ -130,6 +145,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
case 'friends':
$user = get_user_by_username($segments[2]);
if ($user) {
+ elgg_set_ignore_access($ia);
return $user->getGUID();
}
break;
@@ -137,6 +153,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
case 'edit':
$entity = get_entity($segments[2]);
if ($entity) {
+ elgg_set_ignore_access($ia);
return $entity->getContainerGUID();
}
break;
@@ -144,6 +161,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
case 'group':
$entity = get_entity($segments[2]);
if ($entity) {
+ elgg_set_ignore_access($ia);
return $entity->getGUID();
}
break;
@@ -151,7 +169,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params)
}
}
- return $returnvalue;
+ elgg_set_ignore_access($ia);
}
/**
diff --git a/engine/lib/pam.php b/engine/lib/pam.php
index 4f9f44278..1c9c3bfe1 100644
--- a/engine/lib/pam.php
+++ b/engine/lib/pam.php
@@ -30,7 +30,9 @@ $_PAM_HANDLERS = array();
* failure, return false or throw an exception. Returning nothing indicates that
* the handler wants to be skipped.
*
- * @param string $handler The handler function in the format
+ * Note, $handler must be string callback (not an array/Closure).
+ *
+ * @param string $handler Callable global handler function in the format ()
* pam_handler($credentials = NULL);
* @param string $importance The importance - "sufficient" (default) or "required"
* @param string $policy The policy type, default is "user"
@@ -45,7 +47,8 @@ function register_pam_handler($handler, $importance = "sufficient", $policy = "u
$_PAM_HANDLERS[$policy] = array();
}
- if (is_callable($handler)) {
+ // @todo remove requirement that $handle be a global function
+ if (is_string($handler) && is_callable($handler, true)) {
$_PAM_HANDLERS[$policy][$handler] = new stdClass;
$_PAM_HANDLERS[$policy][$handler]->handler = $handler;
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index d5cd4fe76..d5d3db466 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -91,7 +91,9 @@ function elgg_get_plugin_ids_in_dir($dir = null) {
* @access private
*/
function elgg_generate_plugin_entities() {
+ // @todo $site unused, can remove?
$site = get_config('site');
+
$dir = elgg_get_plugins_path();
$db_prefix = elgg_get_config('dbprefix');
@@ -107,6 +109,7 @@ function elgg_generate_plugin_entities() {
$old_access = access_get_show_hidden_status();
access_show_hidden_entities(true);
$known_plugins = elgg_get_entities_from_relationship($options);
+ /* @var ElggPlugin[] $known_plugins */
if (!$known_plugins) {
$known_plugins = array();
@@ -138,7 +141,7 @@ function elgg_generate_plugin_entities() {
$index = $id_map[$plugin_id];
$plugin = $known_plugins[$index];
// was this plugin deleted and its entity disabled?
- if ($plugin->enabled != 'yes') {
+ if (!$plugin->isEnabled()) {
$plugin->enable();
$plugin->deactivate();
$plugin->setPriority('last');
@@ -176,13 +179,31 @@ function elgg_generate_plugin_entities() {
}
/**
+ * Cache a reference to this plugin by its ID
+ *
+ * @param ElggPlugin $plugin
+ *
+ * @access private
+ */
+function _elgg_cache_plugin_by_id(ElggPlugin $plugin) {
+ $map = (array) elgg_get_config('plugins_by_id_map');
+ $map[$plugin->getID()] = $plugin;
+ elgg_set_config('plugins_by_id_map', $map);
+}
+
+/**
* Returns an ElggPlugin object with the path $path.
*
* @param string $plugin_id The id (dir name) of the plugin. NOT the guid.
- * @return mixed ElggPlugin or false.
+ * @return ElggPlugin|false
* @since 1.8.0
*/
function elgg_get_plugin_from_id($plugin_id) {
+ $map = (array) elgg_get_config('plugins_by_id_map');
+ if (isset($map[$plugin_id])) {
+ return $map[$plugin_id];
+ }
+
$plugin_id = sanitize_string($plugin_id);
$db_prefix = get_config('dbprefix');
@@ -190,6 +211,7 @@ function elgg_get_plugin_from_id($plugin_id) {
'type' => 'object',
'subtype' => 'plugin',
'joins' => array("JOIN {$db_prefix}objects_entity oe on oe.guid = e.guid"),
+ 'selects' => array("oe.title", "oe.description"),
'wheres' => array("oe.title = '$plugin_id'"),
'limit' => 1
);
@@ -241,6 +263,8 @@ function elgg_get_max_plugin_priority() {
$data = get_data($q);
if ($data) {
$max = $data[0]->max;
+ } else {
+ $max = 1;
}
// can't have a priority of 0.
@@ -287,13 +311,11 @@ function elgg_is_active_plugin($plugin_id, $site_guid = null) {
* @access private
*/
function elgg_load_plugins() {
- global $CONFIG;
-
$plugins_path = elgg_get_plugins_path();
- $start_flags = ELGG_PLUGIN_INCLUDE_START
- | ELGG_PLUGIN_REGISTER_VIEWS
- | ELGG_PLUGIN_REGISTER_LANGUAGES
- | ELGG_PLUGIN_REGISTER_CLASSES;
+ $start_flags = ELGG_PLUGIN_INCLUDE_START |
+ ELGG_PLUGIN_REGISTER_VIEWS |
+ ELGG_PLUGIN_REGISTER_LANGUAGES |
+ ELGG_PLUGIN_REGISTER_CLASSES;
if (!$plugins_path) {
return false;
@@ -341,7 +363,7 @@ function elgg_load_plugins() {
*
* @param string $status The status of the plugins. active, inactive, or all.
* @param mixed $site_guid Optional site guid
- * @return array
+ * @return ElggPlugin[]
* @since 1.8.0
* @access private
*/
@@ -422,6 +444,7 @@ function elgg_set_plugin_priorities(array $order) {
// though we do start with 1
$order = array_values($order);
+ $missing_plugins = array();
foreach ($plugins as $plugin) {
$plugin_id = $plugin->getID();
@@ -512,6 +535,8 @@ function elgg_namespace_plugin_private_setting($type, $name, $id = null) {
* @return string|false Plugin name, or false if no plugin name was called
* @since 1.8.0
* @access private
+ *
+ * @todo get rid of this
*/
function elgg_get_calling_plugin_id($mainfilename = false) {
if (!$mainfilename) {
@@ -618,19 +643,18 @@ function elgg_get_plugins_provides($type = null, $name = null) {
* @access private
*/
function elgg_check_plugins_provides($type, $name, $version = null, $comparison = 'ge') {
- if (!$provided = elgg_get_plugins_provides($type, $name)) {
+ $provided = elgg_get_plugins_provides($type, $name);
+ if (!$provided) {
return array(
'status' => false,
'version' => ''
);
}
- if ($provided) {
- if ($version) {
- $status = version_compare($provided['version'], $version, $comparison);
- } else {
- $status = true;
- }
+ if ($version) {
+ $status = version_compare($provided['version'], $version, $comparison);
+ } else {
+ $status = true;
}
return array(
@@ -840,9 +864,9 @@ function elgg_set_plugin_user_setting($name, $value, $user_guid = null, $plugin_
/**
* Unsets a user-specific plugin setting
*
- * @param str $name Name of the setting
- * @param int $user_guid Defaults to logged in user
- * @param str $plugin_id Defaults to contextual plugin name
+ * @param string $name Name of the setting
+ * @param int $user_guid Defaults to logged in user
+ * @param string $plugin_id Defaults to contextual plugin name
*
* @return bool
* @since 1.8.0
@@ -920,6 +944,7 @@ function elgg_set_plugin_setting($name, $value, $plugin_id = null) {
*
* @return mixed
* @since 1.8.0
+ * @todo make $plugin_id required in future version
*/
function elgg_get_plugin_setting($name, $plugin_id = null) {
if ($plugin_id) {
@@ -1065,7 +1090,7 @@ function plugin_run_once() {
/**
* Runs unit tests for the entity objects.
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
@@ -1080,6 +1105,49 @@ function plugins_test($hook, $type, $value, $params) {
}
/**
+ * Checks on deactivate plugin event if disabling it won't create unmet dependencies and blocks disable in such case.
+ *
+ * @param string $event deactivate
+ * @param string $type plugin
+ * @param array $params Parameters array containing entry with ELggPlugin instance under 'plugin_entity' key
+ * @return bool false to block plugin deactivation action
+ *
+ * @access private
+ */
+function _plugins_deactivate_dependency_check($event, $type, $params) {
+ $plugin_id = $params['plugin_entity']->getManifest()->getPluginID();
+ $plugin_name = $params['plugin_entity']->getManifest()->getName();
+
+ $active_plugins = elgg_get_plugins();
+
+ $dependents = array();
+ foreach ($active_plugins as $plugin) {
+ $manifest = $plugin->getManifest();
+ $requires = $manifest->getRequires();
+
+ foreach ($requires as $required) {
+ if ($required['type'] == 'plugin' && $required['name'] == $plugin_id) {
+ // there are active dependents
+ $dependents[$manifest->getPluginID()] = $plugin;
+ }
+ }
+ }
+
+ if ($dependents) {
+ $list = '<ul>';
+ // construct error message and prevent disabling
+ foreach ($dependents as $dependent) {
+ $list .= '<li>' . $dependent->getManifest()->getName() . '</li>';
+ }
+ $list .= '</ul>';
+
+ register_error(elgg_echo('ElggPlugin:Dependencies:ActiveDependent', array($plugin_name, $list)));
+
+ return false;
+ }
+}
+
+/**
* Initialize the plugin system
* Listens to system init and registers actions
*
@@ -1090,6 +1158,10 @@ function plugin_init() {
run_function_once("plugin_run_once");
elgg_register_plugin_hook_handler('unit_test', 'system', 'plugins_test');
+
+ // note - plugins are booted by the time this handler is registered
+ // deactivation due to error may have already occurred
+ elgg_register_event_handler('deactivate', 'plugin', '_plugins_deactivate_dependency_check');
elgg_register_action("plugins/settings/save", '', 'admin');
elgg_register_action("plugins/usersettings/save");
diff --git a/engine/lib/private_settings.php b/engine/lib/private_settings.php
index 1fa9bdb66..7541f7b3b 100644
--- a/engine/lib/private_settings.php
+++ b/engine/lib/private_settings.php
@@ -349,11 +349,6 @@ function set_private_setting($entity_guid, $name, $value) {
$name = sanitise_string($name);
$value = sanitise_string($value);
- $entity = get_entity($entity_guid);
- if (!$entity instanceof ElggEntity) {
- return false;
- }
-
$result = insert_data("INSERT into {$CONFIG->dbprefix}private_settings
(entity_guid, name, value) VALUES
($entity_guid, '$name', '$value')
diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php
index 09d541e22..b0cd627fc 100644
--- a/engine/lib/relationships.php
+++ b/engine/lib/relationships.php
@@ -12,7 +12,7 @@
*
* @param stdClass $row Database row from the relationship table
*
- * @return stdClass or ElggMetadata
+ * @return ElggRelationship|stdClass
* @access private
*/
function row_to_elggrelationship($row) {
@@ -28,7 +28,7 @@ function row_to_elggrelationship($row) {
*
* @param int $id The ID of a relationship
*
- * @return mixed
+ * @return ElggRelationship|false
*/
function get_relationship($id) {
global $CONFIG;
@@ -109,7 +109,7 @@ function add_entity_relationship($guid_one, $relationship, $guid_two) {
* @param string $relationship The type of relationship
* @param int $guid_two The GUID of the entity the relationship is with
*
- * @return object|false Depending on success
+ * @return ElggRelationship|false Depending on success
*/
function check_entity_relationship($guid_one, $relationship, $guid_two) {
global $CONFIG;
@@ -123,7 +123,7 @@ function check_entity_relationship($guid_one, $relationship, $guid_two) {
AND relationship='$relationship'
AND guid_two=$guid_two limit 1";
- $row = get_data_row($query);
+ $row = row_to_elggrelationship(get_data_row($query));
if ($row) {
return $row;
}
@@ -220,7 +220,7 @@ function remove_entity_relationships($guid_one, $relationship = "", $inverse = f
* @param int $guid The GUID of the relationship owner
* @param bool $inverse_relationship Inverse relationship owners?
*
- * @return mixed
+ * @return ElggRelationship[]
*/
function get_entity_relationships($guid, $inverse_relationship = FALSE) {
global $CONFIG;
@@ -259,7 +259,7 @@ function get_entity_relationships($guid, $inverse_relationship = FALSE) {
*
* inverse_relationship => BOOL Inverse the relationship
*
- * @return mixed If count, int. If not count, array. false on errors.
+ * @return ElggEntity[]|mixed If count, int. If not count, array. false on errors.
* @since 1.7.0
*/
function elgg_get_entities_from_relationship($options) {
@@ -316,7 +316,7 @@ function elgg_get_entities_from_relationship($options) {
* Provide in table.column format.
* @param string $relationship Relationship string
* @param int $relationship_guid Entity guid to check
- * @param string $inverse_relationship Inverse relationship check?
+ * @param bool $inverse_relationship Inverse relationship check?
*
* @return mixed
* @since 1.7.0
@@ -363,7 +363,7 @@ $relationship_guid = NULL, $inverse_relationship = FALSE) {
/**
* Returns a viewable list of entities by relationship
*
- * @param array $options
+ * @param array $options Options array for retrieval of entities
*
* @see elgg_list_entities()
* @see elgg_get_entities_from_relationship()
@@ -381,7 +381,7 @@ function elgg_list_entities_from_relationship(array $options = array()) {
*
* @param array $options An options array compatible with
* elgg_get_entities_from_relationship()
- * @return mixed int If count, int. If not count, array. false on errors.
+ * @return ElggEntity[]|mixed int If count, int. If not count, array. false on errors.
* @since 1.8.0
*/
function elgg_get_entities_from_relationship_count(array $options = array()) {
@@ -398,7 +398,7 @@ function elgg_get_entities_from_relationship_count(array $options = array()) {
*
* @param array $options Options array
*
- * @return array
+ * @return string
* @since 1.8.0
*/
function elgg_list_entities_from_relationship_count($options) {
@@ -416,7 +416,7 @@ function elgg_list_entities_from_relationship_count($options) {
function elgg_register_relationship_url_handler($relationship_type, $function_name) {
global $CONFIG;
- if (!is_callable($function_name)) {
+ if (!is_callable($function_name, true)) {
return false;
}
@@ -499,7 +499,7 @@ function already_attached($guid_one, $guid_two) {
* @param int $guid Entity GUID
* @param string $type The type of object to return e.g. 'file', 'friend_of' etc
*
- * @return an array of objects
+ * @return ElggEntity[]
* @access private
*/
function get_attachments($guid, $type = "") {
@@ -507,7 +507,7 @@ function get_attachments($guid, $type = "") {
'relationship' => 'attached',
'relationship_guid' => $guid,
'inverse_relationship' => false,
- 'types' => $type,
+ 'type' => $type,
'subtypes' => '',
'owner_guid' => 0,
'order_by' => 'time_created desc',
@@ -571,9 +571,8 @@ function import_relationship_plugin_hook($hook, $entity_type, $returnvalue, $par
if ($element instanceof ODDRelationship) {
$tmp = new ElggRelationship();
$tmp->import($element);
-
- return $tmp;
}
+ return $tmp;
}
/**
@@ -586,11 +585,10 @@ function import_relationship_plugin_hook($hook, $entity_type, $returnvalue, $par
*
* @elgg_event_handler export all
* @return mixed
+ * @throws InvalidParameterException
* @access private
*/
function export_relationship_plugin_hook($hook, $entity_type, $returnvalue, $params) {
- global $CONFIG;
-
// Sanity check values
if ((!is_array($params)) && (!isset($params['guid']))) {
throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
@@ -624,9 +622,9 @@ function export_relationship_plugin_hook($hook, $entity_type, $returnvalue, $par
* @access private
*/
function relationship_notification_hook($event, $type, $object) {
-
+ /* @var ElggRelationship $object */
$user_one = get_entity($object->guid_one);
- $user_two = get_entity($object->guid_two);
+ /* @var ElggUser $user_one */
return notify_user($object->guid_two,
$object->guid_one,
diff --git a/engine/lib/river.php b/engine/lib/river.php
index b717a7756..e92040eb7 100644
--- a/engine/lib/river.php
+++ b/engine/lib/river.php
@@ -120,7 +120,7 @@ $posted = 0, $annotation_id = 0) {
* subtypes => STR|ARR Entity subtype string(s)
* type_subtype_pairs => ARR Array of type => subtype pairs where subtype
* can be an array of subtype strings
- *
+ *
* posted_time_lower => INT The lower bound on the time posted
* posted_time_upper => INT The upper bound on the time posted
*
@@ -361,6 +361,7 @@ function elgg_get_river(array $options = array()) {
}
$river_items = get_data($query, 'elgg_row_to_elgg_river_item');
+ _elgg_prefetch_river_entities($river_items);
return $river_items;
} else {
@@ -370,11 +371,56 @@ function elgg_get_river(array $options = array()) {
}
/**
+ * Prefetch entities that will be displayed in the river.
+ *
+ * @param ElggRiverItem[] $river_items
+ * @access private
+ */
+function _elgg_prefetch_river_entities(array $river_items) {
+ // prefetch objects and subjects
+ $guids = array();
+ foreach ($river_items as $item) {
+ if ($item->subject_guid && !_elgg_retrieve_cached_entity($item->subject_guid)) {
+ $guids[$item->subject_guid] = true;
+ }
+ if ($item->object_guid && !_elgg_retrieve_cached_entity($item->object_guid)) {
+ $guids[$item->object_guid] = true;
+ }
+ }
+ if ($guids) {
+ // avoid creating oversized query
+ // @todo how to better handle this?
+ $guids = array_slice($guids, 0, 300, true);
+ // return value unneeded, just priming cache
+ elgg_get_entities(array(
+ 'guids' => array_keys($guids),
+ 'limit' => 0,
+ ));
+ }
+
+ // prefetch object containers
+ $guids = array();
+ foreach ($river_items as $item) {
+ $object = $item->getObjectEntity();
+ if ($object->container_guid && !_elgg_retrieve_cached_entity($object->container_guid)) {
+ $guids[$object->container_guid] = true;
+ }
+ }
+ if ($guids) {
+ $guids = array_slice($guids, 0, 300, true);
+ elgg_get_entities(array(
+ 'guids' => array_keys($guids),
+ 'limit' => 0,
+ ));
+ }
+}
+
+/**
* List river items
*
* @param array $options Any options from elgg_get_river() plus:
* pagination => BOOL Display pagination links (true)
-
+ *
* @return string
* @since 1.8.0
*/
@@ -388,8 +434,13 @@ function elgg_list_river(array $options = array()) {
'pagination' => TRUE,
'list_class' => 'elgg-list-river elgg-river', // @todo remove elgg-river in Elgg 1.9
);
-
+
$options = array_merge($defaults, $options);
+
+ if (!$options["limit"] && !$options["offset"]) {
+ // no need for pagination if listing is unlimited
+ $options["pagination"] = false;
+ }
$options['count'] = TRUE;
$count = elgg_get_river($options);
@@ -399,6 +450,7 @@ function elgg_list_river(array $options = array()) {
$options['count'] = $count;
$options['items'] = $items;
+
return elgg_view('page/components/list', $options);
}
@@ -454,6 +506,7 @@ function elgg_get_river_type_subtype_where_sql($table, $types, $subtypes, $pairs
return '';
}
+ $wheres = array();
$types_wheres = array();
$subtypes_wheres = array();
@@ -598,7 +651,7 @@ function update_river_access_by_object($object_guid, $access_id) {
}
/**
- * Page handler for activiy
+ * Page handler for activity
*
* @param array $page
* @return bool
@@ -617,10 +670,6 @@ function elgg_river_page_handler($page) {
}
set_input('page_type', $page_type);
- // content filter code here
- $entity_type = '';
- $entity_subtype = '';
-
require_once("{$CONFIG->path}pages/river.php");
return true;
}
diff --git a/engine/lib/sessions.php b/engine/lib/sessions.php
index 72ca0a1c2..e3d5ce9cd 100644
--- a/engine/lib/sessions.php
+++ b/engine/lib/sessions.php
@@ -87,6 +87,9 @@ function elgg_is_admin_logged_in() {
*/
function elgg_is_admin_user($user_guid) {
global $CONFIG;
+
+ $user_guid = (int)$user_guid;
+
// cannot use magic metadata here because of recursion
// must support the old way of getting admin from metadata
@@ -286,8 +289,6 @@ function check_rate_limit_exceeded($user_guid) {
* @throws LoginException
*/
function login(ElggUser $user, $persistent = false) {
- global $CONFIG;
-
// User is banned, return false.
if ($user->isBanned()) {
throw new LoginException(elgg_echo('LoginException:BannedUser'));
@@ -325,6 +326,12 @@ function login(ElggUser $user, $persistent = false) {
set_last_login($_SESSION['guid']);
reset_login_failure_count($user->guid); // Reset any previous failed login attempts
+ // if memcache is enabled, invalidate the user in memcache @see https://github.com/Elgg/Elgg/issues/3143
+ if (is_memcache_available()) {
+ // this needs to happen with a shutdown function because of the timing with set_last_login()
+ register_shutdown_function("_elgg_invalidate_memcache_for_entity", $_SESSION['guid']);
+ }
+
return true;
}
@@ -334,8 +341,6 @@ function login(ElggUser $user, $persistent = false) {
* @return bool
*/
function logout() {
- global $CONFIG;
-
if (isset($_SESSION['user'])) {
if (!elgg_trigger_event('logout', 'user', $_SESSION['user'])) {
return false;
@@ -616,10 +621,8 @@ function _elgg_session_destroy($id) {
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
- return(@unlink($sess_file));
+ return @unlink($sess_file);
}
-
- return false;
}
/**
diff --git a/engine/lib/sites.php b/engine/lib/sites.php
index 8b772668d..3de0eccc2 100644
--- a/engine/lib/sites.php
+++ b/engine/lib/sites.php
@@ -26,7 +26,7 @@ function elgg_get_site_entity($site_guid = 0) {
$site = get_entity($site_guid);
}
- if($site instanceof ElggSite){
+ if ($site instanceof ElggSite) {
$result = $site;
}
@@ -58,6 +58,7 @@ function get_site_entity_as_row($guid) {
* @param string $url URL of the site
*
* @return bool
+ * @access private
*/
function create_site_entity($guid, $name, $description, $url) {
global $CONFIG;
@@ -117,8 +118,6 @@ function create_site_entity($guid, $name, $description, $url) {
* @return bool
*/
function add_site_user($site_guid, $user_guid) {
- global $CONFIG;
-
$site_guid = (int)$site_guid;
$user_guid = (int)$user_guid;
@@ -149,8 +148,6 @@ function remove_site_user($site_guid, $user_guid) {
* @return mixed
*/
function add_site_object($site_guid, $object_guid) {
- global $CONFIG;
-
$site_guid = (int)$site_guid;
$object_guid = (int)$object_guid;
@@ -191,8 +188,8 @@ function get_site_objects($site_guid, $subtype = "", $limit = 10, $offset = 0) {
'relationship' => 'member_of_site',
'relationship_guid' => $site_guid,
'inverse_relationship' => TRUE,
- 'types' => 'object',
- 'subtypes' => $subtype,
+ 'type' => 'object',
+ 'subtype' => $subtype,
'limit' => $limit,
'offset' => $offset
));
@@ -241,7 +238,7 @@ function get_site_domain($guid) {
/**
* Unit tests for sites
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
diff --git a/engine/lib/statistics.php b/engine/lib/statistics.php
index 5ee640549..4cb0bb0b8 100644
--- a/engine/lib/statistics.php
+++ b/engine/lib/statistics.php
@@ -95,15 +95,20 @@ function get_number_users($show_deactivated = false) {
* @return string
*/
function get_online_users() {
- $count = find_active_users(600, 10, 0, true);
- $objects = find_active_users(600, 10);
+ $limit = max(0, (int) get_input("limit", 10));
+ $offset = max(0, (int) get_input("offset", 0));
+
+ $count = find_active_users(600, $limit, $offset, true);
+ $objects = find_active_users(600, $limit, $offset);
if ($objects) {
return elgg_view_entity_list($objects, array(
'count' => $count,
- 'limit' => 10
+ 'limit' => $limit,
+ 'offset' => $offset
));
}
+ return '';
}
/**
diff --git a/engine/lib/system_log.php b/engine/lib/system_log.php
index 53fa24557..84302632e 100644
--- a/engine/lib/system_log.php
+++ b/engine/lib/system_log.php
@@ -10,6 +10,8 @@
/**
* Retrieve the system log based on a number of parameters.
*
+ * @todo too many args, and the first arg is too confusing
+ *
* @param int|array $by_user The guid(s) of the user(s) who initiated the event.
* Use 0 for unowned entries. Anything else falsey means anyone.
* @param string $event The event you are searching on.
@@ -22,12 +24,12 @@
* @param int $timebefore Lower time limit
* @param int $timeafter Upper time limit
* @param int $object_id GUID of an object
- * @param str $ip_address The IP address.
+ * @param string $ip_address The IP address.
* @return mixed
*/
-function get_system_log($by_user = "", $event = "", $class = "", $type = "", $subtype = "",
-$limit = 10, $offset = 0, $count = false, $timebefore = 0, $timeafter = 0, $object_id = 0,
-$ip_address = false) {
+function get_system_log($by_user = "", $event = "", $class = "", $type = "", $subtype = "", $limit = 10,
+ $offset = 0, $count = false, $timebefore = 0, $timeafter = 0, $object_id = 0,
+ $ip_address = "") {
global $CONFIG;
@@ -166,6 +168,7 @@ function system_log($object, $event) {
if ($object instanceof Loggable) {
+ /* @var ElggEntity|ElggExtender $object */
if (datalist_get('version') < 2012012000) {
// this is a site that doesn't have the ip_address column yet
return;
@@ -184,7 +187,16 @@ function system_log($object, $event) {
$object_subtype = $object->getSubtype();
$event = sanitise_string($event);
$time = time();
- $ip_address = sanitise_string($_SERVER['REMOTE_ADDR']);
+
+ if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+ $ip_address = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
+ } elseif (!empty($_SERVER['HTTP_X_REAL_IP'])) {
+ $ip_address = array_pop(explode(',', $_SERVER['HTTP_X_REAL_IP']));
+ } else {
+ $ip_address = $_SERVER['REMOTE_ADDR'];
+ }
+ $ip_address = sanitise_string($ip_address);
+
$performed_by = elgg_get_logged_in_user_guid();
if (isset($object->access_id)) {
diff --git a/engine/lib/tags.php b/engine/lib/tags.php
index a0887d0f3..586a9b9e4 100644
--- a/engine/lib/tags.php
+++ b/engine/lib/tags.php
@@ -48,7 +48,7 @@ function calculate_tag_size($min, $max, $number_of_tags, $buckets = 6) {
* @param array $tags The array of tags.
* @param int $buckets The number of buckets
*
- * @return An associated array of tags with a weighting, this can then be mapped to a display class.
+ * @return array An associated array of tags with a weighting, this can then be mapped to a display class.
* @access private
*/
function generate_tag_cloud(array $tags, $buckets = 6) {
@@ -114,8 +114,8 @@ function generate_tag_cloud(array $tags, $buckets = 6) {
*
* joins => array() Additional joins
*
- * @return false/array - if no tags or error, false
- * otherwise, array of objects with ->tag and ->total values
+ * @return object[]|false If no tags or error, false
+ * otherwise, array of objects with ->tag and ->total values
* @since 1.7.1
*/
function elgg_get_tags(array $options = array()) {
@@ -172,6 +172,7 @@ function elgg_get_tags(array $options = array()) {
// catch for tags that were spaces
$wheres[] = "msv.string != ''";
+ $sanitised_tags = array();
foreach ($options['tag_names'] as $tag) {
$sanitised_tags[] = '"' . sanitise_string($tag) . '"';
}
diff --git a/engine/lib/upgrade.php b/engine/lib/upgrade.php
index f0874a483..158ec9ec1 100644
--- a/engine/lib/upgrade.php
+++ b/engine/lib/upgrade.php
@@ -17,8 +17,9 @@
* @access private
*/
function upgrade_code($version, $quiet = FALSE) {
+ // do not remove - upgrade scripts depend on this
global $CONFIG;
-
+
$version = (int) $version;
$upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/';
$processed_upgrades = elgg_get_processed_upgrades();
@@ -244,7 +245,7 @@ function version_upgrade() {
// No version number? Oh snap...this is an upgrade from a clean installation < 1.7.
// Run all upgrades without error reporting and hope for the best.
- // See http://trac.elgg.org/elgg/ticket/1432 for more.
+ // See https://github.com/elgg/elgg/issues/1432 for more.
$quiet = !$dbversion;
// Note: Database upgrades are deprecated as of 1.8. Use code upgrades. See #1433
@@ -291,7 +292,6 @@ function elgg_upgrade_bootstrap_17_to_18() {
'2011010101.php',
);
- $upgrades_17 = array();
$upgrade_files = elgg_get_upgrade_files();
$processed_upgrades = array();
@@ -311,3 +311,55 @@ function elgg_upgrade_bootstrap_17_to_18() {
return elgg_set_processed_upgrades($processed_upgrades);
}
+
+/**
+ * Creates a table {prefix}upgrade_lock that is used as a mutex for upgrades.
+ *
+ * @see _elgg_upgrade_lock()
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_upgrade_lock() {
+ global $CONFIG;
+
+ if (!_elgg_upgrade_is_locked()) {
+ // lock it
+ insert_data("create table {$CONFIG->dbprefix}upgrade_lock (id INT)");
+ elgg_log('Locked for upgrade.', 'NOTICE');
+ return true;
+ }
+
+ elgg_log('Cannot lock for upgrade: already locked.', 'WARNING');
+ return false;
+}
+
+/**
+ * Unlocks upgrade.
+ *
+ * @see _elgg_upgrade_lock()
+ *
+ * @access private
+ */
+function _elgg_upgrade_unlock() {
+ global $CONFIG;
+ delete_data("drop table {$CONFIG->dbprefix}upgrade_lock");
+ elgg_log('Upgrade unlocked.', 'NOTICE');
+}
+
+/**
+ * Checks if upgrade is locked
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_upgrade_is_locked() {
+ global $CONFIG;
+
+ $is_locked = count(get_data("show tables like '{$CONFIG->dbprefix}upgrade_lock'"));
+
+ // @todo why?
+ _elgg_invalidate_query_cache();
+
+ return $is_locked;
+}
diff --git a/engine/lib/upgrades/2009102801.php b/engine/lib/upgrades/2009102801.php
index cab9a6835..3ad113fb2 100644
--- a/engine/lib/upgrades/2009102801.php
+++ b/engine/lib/upgrades/2009102801.php
@@ -203,14 +203,15 @@ function user_file_matrix($guid) {
return "$time_created/$user->guid/";
}
-global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE;
+global $ENTITY_CACHE, $CONFIG;
/**
* Upgrade file locations
*/
$users = mysql_query("SELECT guid, username
FROM {$CONFIG->dbprefix}users_entity WHERE username != ''");
while ($user = mysql_fetch_object($users)) {
- $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+ $ENTITY_CACHE = array();
+ _elgg_invalidate_query_cache();
$to = $CONFIG->dataroot . user_file_matrix($user->guid);
foreach (array('1_0', '1_1', '1_6') as $version) {
diff --git a/engine/lib/upgrades/2010033101.php b/engine/lib/upgrades/2010033101.php
index 0bffee001..4779295fd 100644
--- a/engine/lib/upgrades/2010033101.php
+++ b/engine/lib/upgrades/2010033101.php
@@ -1,7 +1,7 @@
<?php
/**
- * Conditional upgrade for UTF8 as described in http://trac.elgg.org/ticket/1928
+ * Conditional upgrade for UTF8 as described in https://github.com/elgg/elgg/issues/1928
*/
// get_version() returns the code version.
diff --git a/engine/lib/upgrades/2010052601.php b/engine/lib/upgrades/2010052601.php
index 5b477910f..a9cca6dc5 100644
--- a/engine/lib/upgrades/2010052601.php
+++ b/engine/lib/upgrades/2010052601.php
@@ -9,14 +9,14 @@ $params = array('type' => 'group',
$groups = elgg_get_entities($params);
if ($groups) {
foreach ($groups as $group) {
- $group->name = html_entity_decode($group->name, ENT_COMPAT, 'UTF-8');
- $group->description = html_entity_decode($group->description, ENT_COMPAT, 'UTF-8');
- $group->briefdescription = html_entity_decode($group->briefdescription, ENT_COMPAT, 'UTF-8');
- $group->website = html_entity_decode($group->website, ENT_COMPAT, 'UTF-8');
+ $group->name = _elgg_html_decode($group->name);
+ $group->description = _elgg_html_decode($group->description);
+ $group->briefdescription = _elgg_html_decode($group->briefdescription);
+ $group->website = _elgg_html_decode($group->website);
if ($group->interests) {
$tags = $group->interests;
- foreach ($tags as $index=>$tag) {
- $tags[$index] = html_entity_decode($tag, ENT_COMPAT, 'UTF-8');
+ foreach ($tags as $index => $tag) {
+ $tags[$index] = _elgg_html_decode($tag);
}
$group->interests = $tags;
}
diff --git a/engine/lib/upgrades/2010061501.php b/engine/lib/upgrades/2010061501.php
index 9ff7d3102..744c28fd5 100644
--- a/engine/lib/upgrades/2010061501.php
+++ b/engine/lib/upgrades/2010061501.php
@@ -45,7 +45,7 @@ if ($dbversion < 2009100701) {
}
}
- global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE;
+ global $ENTITY_CACHE;
/**
Upgrade file locations
@@ -60,7 +60,9 @@ if ($dbversion < 2009100701) {
$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
WHERE username != ''", $link);
while ($user = mysql_fetch_object($users)) {
- $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+ $ENTITY_CACHE = array();
+ _elgg_invalidate_query_cache();
+
$to = $CONFIG->dataroot . user_file_matrix($user->guid);
foreach (array('1_0', '1_1', '1_6') as $version) {
diff --git a/engine/lib/upgrades/2010071001.php b/engine/lib/upgrades/2010071001.php
index 1b5d379d8..5594493a8 100644
--- a/engine/lib/upgrades/2010071001.php
+++ b/engine/lib/upgrades/2010071001.php
@@ -30,11 +30,12 @@ function user_file_matrix_2010071001($guid) {
$sizes = array('large', 'medium', 'small', 'tiny', 'master', 'topbar');
-global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+global $ENTITY_CACHE, $CONFIG;
$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
WHERE username != ''");
while ($user = mysql_fetch_object($users)) {
- $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+ $ENTITY_CACHE = array();
+ _elgg_invalidate_query_cache();
$user_directory = user_file_matrix_2010071001($user->guid);
if (!$user_directory) {
diff --git a/engine/lib/upgrades/2010071002.php b/engine/lib/upgrades/2010071002.php
index 30bd6538c..52aa15ef5 100644
--- a/engine/lib/upgrades/2010071002.php
+++ b/engine/lib/upgrades/2010071002.php
@@ -4,12 +4,13 @@
*/
// loop through all users checking collections and notifications
-global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+global $ENTITY_CACHE, $CONFIG;
global $NOTIFICATION_HANDLERS;
$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
WHERE username != ''");
while ($user = mysql_fetch_object($users)) {
- $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+ $ENTITY_CACHE = array();
+ _elgg_invalidate_query_cache();
$user = get_entity($user->guid);
foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
diff --git a/engine/lib/upgrades/2011010101.php b/engine/lib/upgrades/2011010101.php
index a1ee92622..f4411ee20 100644
--- a/engine/lib/upgrades/2011010101.php
+++ b/engine/lib/upgrades/2011010101.php
@@ -93,4 +93,6 @@ $processed_upgrades[] = '2011010101.php';
$processed_upgrades = array_unique($processed_upgrades);
elgg_set_processed_upgrades($processed_upgrades);
+_elgg_upgrade_unlock();
+
forward('upgrade.php');
diff --git a/engine/lib/upgrades/2011052801.php b/engine/lib/upgrades/2011052801.php
index 8084bc06c..b5a8e1018 100644
--- a/engine/lib/upgrades/2011052801.php
+++ b/engine/lib/upgrades/2011052801.php
@@ -2,7 +2,7 @@
/**
* Make sure all users have the relationship member_of_site
*/
-global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+global $ENTITY_CACHE;
$db_prefix = get_config('dbprefix');
$limit = 100;
@@ -17,7 +17,8 @@ $q = "SELECT e.* FROM {$db_prefix}entities e
$users = get_data($q);
while ($users) {
- $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+ $ENTITY_CACHE = array();
+ _elgg_invalidate_query_cache();
// do manually to not trigger any events because these aren't new users.
foreach ($users as $user) {
diff --git a/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php b/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php
index 07732f261..780038c32 100644
--- a/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php
+++ b/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php
@@ -3,7 +3,7 @@
* Elgg 1.8.3 upgrade 2012041801
* multiple_user_tokens
*
- * Fixes http://trac.elgg.org/ticket/4291
+ * Fixes https://github.com/elgg/elgg/issues/4291
* Removes the unique index on users_apisessions for user_guid and site_guid
*/
diff --git a/engine/lib/upgrades/2013030600-1.8.13-update_user_location-8999eb8bf1bdd9a3.php b/engine/lib/upgrades/2013030600-1.8.13-update_user_location-8999eb8bf1bdd9a3.php
new file mode 100644
index 000000000..8eccf05e2
--- /dev/null
+++ b/engine/lib/upgrades/2013030600-1.8.13-update_user_location-8999eb8bf1bdd9a3.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg 1.8.14 upgrade 2013030600
+ * update_user_location
+ *
+ * Before Elgg 1.8, a location like "London, England" would be stored as an array.
+ * This script turns that back into a string.
+ */
+
+$ia = elgg_set_ignore_access(true);
+$options = array(
+ 'type' => 'user',
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options);
+
+foreach ($batch as $entity) {
+ _elgg_invalidate_query_cache();
+
+ if (is_array($entity->location)) {
+ $entity->location = implode(', ', $entity->location);
+ }
+}
+elgg_set_ignore_access($ia);
diff --git a/engine/lib/upgrades/2013051700-1.8.15-add_missing_group_index-52a63a3a3ffaced2.php b/engine/lib/upgrades/2013051700-1.8.15-add_missing_group_index-52a63a3a3ffaced2.php
new file mode 100644
index 000000000..ee99bdbc8
--- /dev/null
+++ b/engine/lib/upgrades/2013051700-1.8.15-add_missing_group_index-52a63a3a3ffaced2.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg 1.8.15 upgrade 2013051700
+ * add_missing_group_index
+ *
+ * Some Elgg sites are missing the groups_entity full text index on name and
+ * description. This checks if it exists and adds it if it does not.
+ */
+
+$db_prefix = elgg_get_config('dbprefix');
+
+$full_text_index_exists = false;
+$results = get_data("SHOW INDEX FROM {$db_prefix}groups_entity");
+if ($results) {
+ foreach ($results as $result) {
+ if ($result->Index_type === 'FULLTEXT') {
+ $full_text_index_exists = true;
+ }
+ }
+}
+
+if ($full_text_index_exists == false) {
+ $query = "ALTER TABLE {$db_prefix}groups_entity
+ ADD FULLTEXT name_2 (name, description)";
+ if (!update_data($query)) {
+ elgg_log("Failed to add full text index to groups_entity table", 'ERROR');
+ }
+}
diff --git a/engine/lib/upgrades/2013052900-1.8.15-ipv6_in_syslog-f5c2cc0196e9e731.php b/engine/lib/upgrades/2013052900-1.8.15-ipv6_in_syslog-f5c2cc0196e9e731.php
new file mode 100644
index 000000000..d333a6cd2
--- /dev/null
+++ b/engine/lib/upgrades/2013052900-1.8.15-ipv6_in_syslog-f5c2cc0196e9e731.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg 1.8.15 upgrade 2013052900
+ * ipv6_in_syslog
+ *
+ * Upgrade the ip column in system_log to be able to store ipv6 addresses
+ */
+
+$db_prefix = elgg_get_config('dbprefix');
+$q = "ALTER TABLE {$db_prefix}system_log MODIFY COLUMN ip_address varchar(46) NOT NULL";
+
+update_data($q); \ No newline at end of file
diff --git a/engine/lib/upgrades/2013060900-1.8.15-site_secret-404fc165cf9e0ac9.php b/engine/lib/upgrades/2013060900-1.8.15-site_secret-404fc165cf9e0ac9.php
new file mode 100644
index 000000000..538d74dd6
--- /dev/null
+++ b/engine/lib/upgrades/2013060900-1.8.15-site_secret-404fc165cf9e0ac9.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Elgg 1.8.15 upgrade 2013060900
+ * site_secret
+ *
+ * Description
+ */
+
+$strength = _elgg_get_site_secret_strength();
+
+if ($strength !== 'strong') {
+ // a new key is needed immediately
+ register_translations(elgg_get_root_path() . 'languages/');
+
+ elgg_add_admin_notice('weak_site_key', elgg_echo("upgrade:site_secret_warning:$strength"));
+}
diff --git a/engine/lib/upgrades/create_upgrade.php b/engine/lib/upgrades/create_upgrade.php
index 3652e18a2..b34f31b7e 100644
--- a/engine/lib/upgrades/create_upgrade.php
+++ b/engine/lib/upgrades/create_upgrade.php
@@ -93,7 +93,7 @@ if (!$h) {
die("Could not open file $upgrade_file");
}
-if (!fputs($h, $upgrade_code)) {
+if (!fwrite($h, $upgrade_code)) {
die("Could not write to $upgrade_file");
} else {
elgg_set_version_dot_php_version($upgrade_version);
@@ -128,8 +128,9 @@ function elgg_set_version_dot_php_version($version) {
rewind($h);
- fputs($h, $out);
+ fwrite($h, $out);
fclose($h);
+ return true;
}
/**
diff --git a/engine/lib/user_settings.php b/engine/lib/user_settings.php
index e4069fb53..0e36dc46d 100644
--- a/engine/lib/user_settings.php
+++ b/engine/lib/user_settings.php
@@ -265,9 +265,9 @@ function elgg_set_user_default_access() {
* @access private
*/
function usersettings_pagesetup() {
- if (elgg_get_context() == "settings") {
- $user = elgg_get_page_owner_entity();
+ $user = elgg_get_page_owner_entity();
+ if ($user && elgg_get_context() == "settings") {
$params = array(
'name' => '1_account',
'text' => elgg_echo('usersettings:user:opt:linktext'),
@@ -308,7 +308,7 @@ function usersettings_page_handler($page) {
$user = get_user_by_username($page[1]);
elgg_set_page_owner_guid($user->guid);
} else {
- $user = elgg_get_logged_in_user_guid();
+ $user = elgg_get_logged_in_user_entity();
elgg_set_page_owner_guid($user->guid);
}
@@ -332,6 +332,7 @@ function usersettings_page_handler($page) {
require $path;
return true;
}
+ return false;
}
/**
diff --git a/engine/lib/users.php b/engine/lib/users.php
index 527eff3cd..a8fb9121c 100644
--- a/engine/lib/users.php
+++ b/engine/lib/users.php
@@ -44,6 +44,7 @@ function get_user_entity_as_row($guid) {
* @param string $code A code
*
* @return bool
+ * @access private
*/
function create_user_entity($guid, $name, $username, $password, $salt, $email, $language, $code) {
global $CONFIG;
@@ -236,7 +237,7 @@ function make_user_admin($user_guid) {
}
$r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='yes' where guid=$user_guid");
- invalidate_cache_for_entity($user_guid);
+ _elgg_invalidate_cache_for_entity($user_guid);
return $r;
}
@@ -272,7 +273,7 @@ function remove_user_admin($user_guid) {
}
$r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='no' where guid=$user_guid");
- invalidate_cache_for_entity($user_guid);
+ _elgg_invalidate_cache_for_entity($user_guid);
return $r;
}
@@ -289,7 +290,7 @@ function remove_user_admin($user_guid) {
* @param int $limit Number of results to return
* @param int $offset Any indexing offset
*
- * @return false|array On success, an array of ElggSites
+ * @return ElggSite[]|false On success, an array of ElggSites
*/
function get_user_sites($user_guid, $limit = 10, $offset = 0) {
$user_guid = (int)$user_guid;
@@ -301,7 +302,7 @@ function get_user_sites($user_guid, $limit = 10, $offset = 0) {
'relationship' => 'member_of_site',
'relationship_guid' => $user_guid,
'inverse_relationship' => FALSE,
- 'types' => 'site',
+ 'type' => 'site',
'limit' => $limit,
'offset' => $offset,
));
@@ -342,8 +343,6 @@ function user_add_friend($user_guid, $friend_guid) {
* @return bool Depending on success
*/
function user_remove_friend($user_guid, $friend_guid) {
- global $CONFIG;
-
$user_guid = (int) $user_guid;
$friend_guid = (int) $friend_guid;
@@ -378,7 +377,7 @@ function user_is_friend($user_guid, $friend_guid) {
* @param int $limit Number of results to return (default 10)
* @param int $offset Indexing offset, if any
*
- * @return false|array Either an array of ElggUsers or false, depending on success
+ * @return ElggUser[]|false Either an array of ElggUsers or false, depending on success
*/
function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
$offset = 0) {
@@ -386,8 +385,8 @@ $offset = 0) {
return elgg_get_entities_from_relationship(array(
'relationship' => 'friend',
'relationship_guid' => $user_guid,
- 'types' => 'user',
- 'subtypes' => $subtype,
+ 'type' => 'user',
+ 'subtype' => $subtype,
'limit' => $limit,
'offset' => $offset
));
@@ -401,7 +400,7 @@ $offset = 0) {
* @param int $limit Number of results to return (default 10)
* @param int $offset Indexing offset, if any
*
- * @return false|array Either an array of ElggUsers or false, depending on success
+ * @return ElggUser[]|false Either an array of ElggUsers or false, depending on success
*/
function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
$offset = 0) {
@@ -410,8 +409,8 @@ $offset = 0) {
'relationship' => 'friend',
'relationship_guid' => $user_guid,
'inverse_relationship' => TRUE,
- 'types' => 'user',
- 'subtypes' => $subtype,
+ 'type' => 'user',
+ 'subtype' => $subtype,
'limit' => $limit,
'offset' => $offset
));
@@ -427,7 +426,7 @@ $offset = 0) {
* @param int $timelower The earliest time the entity can have been created. Default: all
* @param int $timeupper The latest time the entity can have been created. Default: all
*
- * @return false|array An array of ElggObjects or false, depending on success
+ * @return ElggObject[]|false An array of ElggObjects or false, depending on success
*/
function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
$offset = 0, $timelower = 0, $timeupper = 0) {
@@ -554,13 +553,18 @@ function get_user($guid) {
function get_user_by_username($username) {
global $CONFIG, $USERNAME_TO_GUID_MAP_CACHE;
+ // Fixes #6052. Username is frequently sniffed from the path info, which,
+ // unlike $_GET, is not URL decoded. If the username was not URL encoded,
+ // this is harmless.
+ $username = rawurldecode($username);
+
$username = sanitise_string($username);
$access = get_access_sql_suffix('e');
// Caching
if ((isset($USERNAME_TO_GUID_MAP_CACHE[$username]))
- && (retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) {
- return retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]);
+ && (_elgg_retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) {
+ return _elgg_retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]);
}
$query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u
@@ -593,9 +597,9 @@ function get_user_by_code($code) {
// Caching
if ((isset($CODE_TO_GUID_MAP_CACHE[$code]))
- && (retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) {
+ && (_elgg_retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) {
- return retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]);
+ return _elgg_retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]);
}
$query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u
@@ -674,25 +678,22 @@ function find_active_users($seconds = 600, $limit = 10, $offset = 0, $count = fa
* @return bool
*/
function send_new_password_request($user_guid) {
- global $CONFIG;
-
$user_guid = (int)$user_guid;
$user = get_entity($user_guid);
- if ($user) {
+ if ($user instanceof ElggUser) {
// generate code
$code = generate_random_cleartext_password();
$user->setPrivateSetting('passwd_conf_code', $code);
-
// generate link
- $link = $CONFIG->site->url . "resetpassword?u=$user_guid&c=$code";
+ $link = elgg_get_site_url() . "resetpassword?u=$user_guid&c=$code";
// generate email
$email = elgg_echo('email:resetreq:body', array($user->name, $_SERVER['REMOTE_ADDR'], $link));
- return notify_user($user->guid, $CONFIG->site->guid,
- elgg_echo('email:resetreq:subject'), $email, NULL, 'email');
+ return notify_user($user->guid, elgg_get_site_entity()->guid,
+ elgg_echo('email:resetreq:subject'), $email, array(), 'email');
}
return false;
@@ -709,19 +710,18 @@ function send_new_password_request($user_guid) {
* @return bool
*/
function force_user_password_reset($user_guid, $password) {
- global $CONFIG;
-
$user = get_entity($user_guid);
+ if ($user instanceof ElggUser) {
+ $ia = elgg_set_ignore_access();
- if ($user) {
- $salt = generate_random_cleartext_password(); // Reset the salt
- $user->salt = $salt;
+ $user->salt = generate_random_cleartext_password();
+ $hash = generate_user_password($user, $password);
+ $user->password = $hash;
+ $result = (bool)$user->save();
- $hash = generate_user_password($user, $password);
+ elgg_set_ignore_access($ia);
- $query = "UPDATE {$CONFIG->dbprefix}users_entity
- set password='$hash', salt='$salt' where guid=$user_guid";
- return update_data($query);
+ return $result;
}
return false;
@@ -741,7 +741,7 @@ function execute_new_password_request($user_guid, $conf_code) {
$user_guid = (int)$user_guid;
$user = get_entity($user_guid);
- if ($user) {
+ if ($user instanceof ElggUser) {
$saved_code = $user->getPrivateSetting('passwd_conf_code');
if ($saved_code && $saved_code == $conf_code) {
@@ -755,7 +755,7 @@ function execute_new_password_request($user_guid, $conf_code) {
$email = elgg_echo('email:resetpassword:body', array($user->name, $password));
return notify_user($user->guid, $CONFIG->site->guid,
- elgg_echo('email:resetpassword:subject'), $email, NULL, 'email');
+ elgg_echo('email:resetpassword:subject'), $email, array(), 'email');
}
}
}
@@ -840,7 +840,7 @@ function validate_username($username) {
for ($n = 0; $n < strlen($blacklist2); $n++) {
if (strpos($username, $blacklist2[$n]) !== false) {
$msg = elgg_echo('registration:invalidchars', array($blacklist2[$n], $blacklist2));
- $msg = htmlentities($msg, ENT_COMPAT, 'UTF-8');
+ $msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8');
throw new RegistrationException($msg);
}
}
@@ -907,13 +907,11 @@ function validate_email_address($address) {
* @param string $invitecode An invite code from a friend
*
* @return int|false The new user's GUID; false on failure
+ * @throws RegistrationException
*/
function register_user($username, $password, $name, $email,
$allow_multiple_emails = false, $friend_guid = 0, $invitecode = '') {
- // Load the configuration
- global $CONFIG;
-
// no need to trim password.
$username = trim($username);
$name = trim(strip_tags($name));
@@ -1030,7 +1028,7 @@ function elgg_get_user_validation_status($user_guid) {
'metadata_name' => 'validated'
));
if ($md == false) {
- return;
+ return null;
}
if ($md[0]->value) {
@@ -1066,10 +1064,10 @@ function collections_submenu_items() {
* @return bool
* @access private
*/
-function friends_page_handler($page_elements, $handler) {
+function friends_page_handler($segments, $handler) {
elgg_set_context('friends');
- if (isset($page_elements[0]) && $user = get_user_by_username($page_elements[0])) {
+ if (isset($segments[0]) && $user = get_user_by_username($segments[0])) {
elgg_set_page_owner_guid($user->getGUID());
}
if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
@@ -1098,6 +1096,7 @@ function friends_page_handler($page_elements, $handler) {
* @access private
*/
function collections_page_handler($page_elements) {
+ gatekeeper();
elgg_set_context('friends');
$base = elgg_get_config('path');
if (isset($page_elements[0])) {
@@ -1196,13 +1195,11 @@ function set_last_login($user_guid) {
* @param string $object_type user
* @param ElggUser $object User object
*
- * @return bool
+ * @return void
* @access private
*/
function user_create_hook_add_site_relationship($event, $object_type, $object) {
- global $CONFIG;
-
- add_entity_relationship($object->getGUID(), 'member_of_site', $CONFIG->site->getGUID());
+ add_entity_relationship($object->getGUID(), 'member_of_site', elgg_get_site_entity()->guid);
}
/**
@@ -1232,6 +1229,7 @@ function user_avatar_hook($hook, $entity_type, $returnvalue, $params) {
*/
function elgg_user_hover_menu($hook, $type, $return, $params) {
$user = $params['entity'];
+ /* @var ElggUser $user */
if (elgg_is_logged_in()) {
if (elgg_get_logged_in_user_guid() != $user->guid) {
@@ -1308,7 +1306,12 @@ function elgg_user_hover_menu($hook, $type, $return, $params) {
/**
* Setup the menu shown with an entity
*
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
* @return array
+ *
* @access private
*/
function elgg_users_setup_entity_menu($hook, $type, $return, $params) {
@@ -1320,6 +1323,7 @@ function elgg_users_setup_entity_menu($hook, $type, $return, $params) {
if (!elgg_instanceof($entity, 'user')) {
return $return;
}
+ /* @var ElggUser $entity */
if ($entity->isBanned()) {
$banned = elgg_echo('banned');
@@ -1333,9 +1337,10 @@ function elgg_users_setup_entity_menu($hook, $type, $return, $params) {
} else {
$return = array();
if (isset($entity->location)) {
+ $location = htmlspecialchars($entity->location, ENT_QUOTES, 'UTF-8', false);
$options = array(
'name' => 'location',
- 'text' => "<span>$entity->location</span>",
+ 'text' => "<span>$location</span>",
'href' => false,
'priority' => 150,
);
@@ -1586,7 +1591,7 @@ function users_init() {
/**
* Runs unit tests for ElggObject
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
diff --git a/engine/lib/views.php b/engine/lib/views.php
index 6135026a7..1142461fe 100644
--- a/engine/lib/views.php
+++ b/engine/lib/views.php
@@ -101,15 +101,15 @@ function elgg_get_viewtype() {
return $CURRENT_SYSTEM_VIEWTYPE;
}
- $viewtype = get_input('view', NULL);
- if ($viewtype) {
+ $viewtype = get_input('view', '', false);
+ if (is_string($viewtype) && $viewtype !== '') {
// only word characters allowed.
- if (!preg_match('[\W]', $viewtype)) {
+ if (!preg_match('/\W/', $viewtype)) {
return $viewtype;
}
}
- if (isset($CONFIG->view) && !empty($CONFIG->view)) {
+ if (!empty($CONFIG->view)) {
return $CONFIG->view;
}
@@ -218,7 +218,7 @@ function elgg_register_ajax_view($view) {
/**
* Unregister a view for ajax calls
- *
+ *
* @param string $view The view name
* @return void
* @since 1.8.3
@@ -258,8 +258,6 @@ function elgg_get_view_location($view, $viewtype = '') {
} else {
return $CONFIG->views->locations[$viewtype][$view];
}
-
- return false;
}
/**
@@ -329,7 +327,7 @@ function elgg_view_exists($view, $viewtype = '', $recurse = true) {
$location = $CONFIG->views->locations[$viewtype][$view];
}
- if (file_exists($location . "{$viewtype}/{$view}.php")) {
+ if (file_exists("{$location}{$viewtype}/{$view}.php")) {
return true;
}
@@ -371,14 +369,14 @@ function elgg_view_exists($view, $viewtype = '', $recurse = true) {
* view, $view_name plugin hook.
*
* @warning Any variables in $_SESSION will override passed vars
- * upon name collision. See {@trac #2124}.
+ * upon name collision. See https://github.com/Elgg/Elgg/issues/2124
*
* @param string $view The name and location of the view to use
* @param array $vars Variables to pass to the view.
* @param boolean $bypass If set to true, elgg_view will bypass any specified
* alternative template handler; by default, it will
* hand off to this if requested (see set_template_handler)
- * @param boolean $debug If set to true, the viewer will complain if it can't find a view
+ * @param boolean $ignored This argument is ignored and will be removed eventually
* @param string $viewtype If set, forces the viewtype for the elgg_view call to be
* this value (default: standard detection)
*
@@ -386,18 +384,30 @@ function elgg_view_exists($view, $viewtype = '', $recurse = true) {
* @see set_template_handler()
* @example views/elgg_view.php
* @link http://docs.elgg.org/View
- * @todo $debug isn't used.
- * @todo $usercache is redundant.
*/
-function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $viewtype = '') {
+function elgg_view($view, $vars = array(), $bypass = false, $ignored = false, $viewtype = '') {
global $CONFIG;
- static $usercache;
-
- $view = (string)$view;
+ if (!is_string($view) || !is_string($viewtype)) {
+ elgg_log("View and Viewtype in views must be a strings: $view", 'NOTICE');
+ return '';
+ }
// basic checking for bad paths
if (strpos($view, '..') !== false) {
- return false;
+ return '';
+ }
+
+ if (!is_array($vars)) {
+ elgg_log("Vars in views must be an array: $view", 'ERROR');
+ $vars = array();
+ }
+
+ // Get the current viewtype
+ if ($viewtype === '') {
+ $viewtype = elgg_get_viewtype();
+ } elseif (preg_match('/\W/', $viewtype)) {
+ // Viewtypes can only be alphanumeric
+ return '';
}
$view_orig = $view;
@@ -408,19 +418,6 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
elgg_trigger_event('pagesetup', 'system');
}
- if (!is_array($usercache)) {
- $usercache = array();
- }
-
- if (!is_array($vars)) {
- elgg_log("Vars in views must be an array: $view", 'ERROR');
- $vars = array();
- }
-
- if (empty($vars)) {
- $vars = array();
- }
-
// @warning - plugin authors: do not expect user, config, and url to be
// set by elgg_view() in the future. Instead, use elgg_get_logged_in_user_entity(),
// elgg_get_config(), and elgg_get_site_url() in your views.
@@ -475,16 +472,6 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
}
}
- // Get the current viewtype
- if (empty($viewtype)) {
- $viewtype = elgg_get_viewtype();
- }
-
- // Viewtypes can only be alphanumeric
- if (preg_match('[\W]', $viewtype)) {
- return '';
- }
-
// Set up any extensions to the requested view
if (isset($CONFIG->views->extensions[$view])) {
$viewlist = $CONFIG->views->extensions[$view];
@@ -496,19 +483,21 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
ob_start();
foreach ($viewlist as $priority => $view) {
+
$view_location = elgg_get_view_location($view, $viewtype);
$view_file = "$view_location$viewtype/$view.php";
- $default_location = elgg_get_view_location($view, 'default');
- $default_view_file = "{$default_location}default/$view.php";
-
// try to include view
if (!file_exists($view_file) || !include($view_file)) {
// requested view does not exist
$error = "$viewtype/$view view does not exist.";
// attempt to load default view
- if ($viewtype != 'default' && elgg_does_viewtype_fallback($viewtype)) {
+ if ($viewtype !== 'default' && elgg_does_viewtype_fallback($viewtype)) {
+
+ $default_location = elgg_get_view_location($view, 'default');
+ $default_view_file = "{$default_location}default/$view.php";
+
if (file_exists($default_view_file) && include($default_view_file)) {
// default view found
$error .= " Using default/$view instead.";
@@ -533,7 +522,7 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
// backward compatibility with less granular hook will be gone in 2.0
$content_tmp = elgg_trigger_plugin_hook('display', 'view', $params, $content);
- if ($content_tmp != $content) {
+ if ($content_tmp !== $content) {
$content = $content_tmp;
elgg_deprecated_notice('The display:view plugin hook is deprecated by view:view_name', 1.8);
}
@@ -559,33 +548,32 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
* @param string $view_extension This view is added to $view
* @param int $priority The priority, from 0 to 1000,
* to add at (lowest numbers displayed first)
- * @param string $viewtype Not used
*
* @return void
* @since 1.7.0
* @link http://docs.elgg.org/Views/Extend
* @example views/extend.php
*/
-function elgg_extend_view($view, $view_extension, $priority = 501, $viewtype = '') {
+function elgg_extend_view($view, $view_extension, $priority = 501) {
global $CONFIG;
if (!isset($CONFIG->views)) {
- $CONFIG->views = new stdClass;
- }
-
- if (!isset($CONFIG->views->extensions)) {
- $CONFIG->views->extensions = array();
- }
-
- if (!isset($CONFIG->views->extensions[$view])) {
- $CONFIG->views->extensions[$view][500] = "{$view}";
+ $CONFIG->views = (object) array(
+ 'extensions' => array(),
+ );
+ $CONFIG->views->extensions[$view][500] = (string)$view;
+ } else {
+ if (!isset($CONFIG->views->extensions[$view])) {
+ $CONFIG->views->extensions[$view][500] = (string)$view;
+ }
}
+ // raise priority until it doesn't match one already registered
while (isset($CONFIG->views->extensions[$view][$priority])) {
$priority++;
}
- $CONFIG->views->extensions[$view][$priority] = "{$view_extension}";
+ $CONFIG->views->extensions[$view][$priority] = (string)$view_extension;
ksort($CONFIG->views->extensions[$view]);
}
@@ -601,14 +589,6 @@ function elgg_extend_view($view, $view_extension, $priority = 501, $viewtype = '
function elgg_unextend_view($view, $view_extension) {
global $CONFIG;
- if (!isset($CONFIG->views)) {
- return FALSE;
- }
-
- if (!isset($CONFIG->views->extensions)) {
- return FALSE;
- }
-
if (!isset($CONFIG->views->extensions[$view])) {
return FALSE;
}
@@ -815,7 +795,7 @@ function elgg_view_menu($menu_name, array $vars = array()) {
* - bool 'full_view' Whether to show a full or condensed view.
*
* @tip This function can automatically appends annotations to entities if in full
- * view and a handler is registered for the entity:annotate. See {@trac 964} and
+ * view and a handler is registered for the entity:annotate. See https://github.com/Elgg/Elgg/issues/964 and
* {@link elgg_view_entity_annotations()}.
*
* @param ElggEntity $entity The entity to display
@@ -1012,6 +992,11 @@ function elgg_view_annotation(ElggAnnotation $annotation, array $vars = array(),
function elgg_view_entity_list($entities, $vars = array(), $offset = 0, $limit = 10, $full_view = true,
$list_type_toggle = true, $pagination = true) {
+ if (!$vars["limit"] && !$vars["offset"]) {
+ // no need for pagination if listing is unlimited
+ $vars["pagination"] = false;
+ }
+
if (!is_int($offset)) {
$offset = (int)get_input('offset', 0);
}
@@ -1084,8 +1069,13 @@ function elgg_view_annotation_list($annotations, array $vars = array()) {
'full_view' => true,
'offset_key' => 'annoff',
);
-
+
$vars = array_merge($defaults, $vars);
+
+ if (!$vars["limit"] && !$vars["offset"]) {
+ // no need for pagination if listing is unlimited
+ $vars["pagination"] = false;
+ }
return elgg_view('page/components/list', $vars);
}
@@ -1105,10 +1095,6 @@ function elgg_view_annotation_list($annotations, array $vars = array()) {
* @todo Change the hook name.
*/
function elgg_view_entity_annotations(ElggEntity $entity, $full_view = true) {
- if (!$entity) {
- return false;
- }
-
if (!($entity instanceof ElggEntity)) {
return false;
}
@@ -1131,7 +1117,7 @@ function elgg_view_entity_annotations(ElggEntity $entity, $full_view = true) {
* This is a shortcut for {@elgg_view page/elements/title}.
*
* @param string $title The page title
- * @param string $vars View variables (was submenu be displayed? (deprecated))
+ * @param array $vars View variables (was submenu be displayed? (deprecated))
*
* @return string The HTML (etc)
*/
@@ -1203,7 +1189,7 @@ function elgg_view_comments($entity, $add_comment = true, array $vars = array())
*
* @param string $image The icon and other information
* @param string $body Description content
- * @param string $vars Additional parameters for the view
+ * @param array $vars Additional parameters for the view
*
* @return string
* @since 1.8.0
@@ -1230,7 +1216,6 @@ function elgg_view_image_block($image, $body, $vars = array()) {
* @since 1.8.0
*/
function elgg_view_module($type, $title, $body, array $vars = array()) {
-
$vars['class'] = elgg_extract('class', $vars, '') . " elgg-module-$type";
$vars['title'] = $title;
$vars['body'] = $body;
@@ -1243,11 +1228,15 @@ function elgg_view_module($type, $title, $body, array $vars = array()) {
* @param ElggRiverItem $item A river item object
* @param array $vars An array of variables for the view
*
- * @return string|false Depending on success
+ * @return string returns empty string if could not be rendered
*/
function elgg_view_river_item($item, array $vars = array()) {
+ if (!($item instanceof ElggRiverItem)) {
+ return '';
+ }
// checking default viewtype since some viewtypes do not have unique views per item (rss)
- if (!$item || !$item->getView() || !elgg_view_exists($item->getView(), 'default')) {
+ $view = $item->getView();
+ if (!$view || !elgg_view_exists($view, 'default')) {
return '';
}
@@ -1258,6 +1247,17 @@ function elgg_view_river_item($item, array $vars = array()) {
return '';
}
+ // @todo this needs to be cleaned up
+ // Don't hide objects in closed groups that a user can see.
+ // see https://github.com/elgg/elgg/issues/4789
+ // else {
+ // // hide based on object's container
+ // $visibility = ElggGroupItemVisibility::factory($object->container_guid);
+ // if ($visibility->shouldHideItems) {
+ // return '';
+ // }
+ // }
+
$vars['item'] = $item;
return elgg_view('river/item', $vars);
@@ -1320,7 +1320,7 @@ function elgg_view_form($action, $form_vars = array(), $body_vars = array()) {
/**
* View an item in a list
*
- * @param object $item ElggEntity or ElggAnnotation
+ * @param ElggEntity|ElggAnnotation $item
* @param array $vars Additional parameters for the rendering
*
* @return string
@@ -1339,22 +1339,22 @@ function elgg_view_list_item($item, array $vars = array()) {
return elgg_view_river_item($item, $vars);
}
- return false;
+ return '';
}
/**
* View one of the elgg sprite icons
- *
+ *
* Shorthand for <span class="elgg-icon elgg-icon-$name"></span>
- *
+ *
* @param string $name The specific icon to display
* @param string $class Additional class: float, float-alt, or custom class
- *
+ *
* @return string The html for displaying an icon
*/
function elgg_view_icon($name, $class = '') {
// @todo deprecate boolean in Elgg 1.9
- if (is_bool($class) && $class === true) {
+ if ($class === true) {
$class = 'float';
}
return "<span class=\"elgg-icon elgg-icon-$name $class\"></span>";
@@ -1403,7 +1403,8 @@ function elgg_view_access_collections($owner_guid) {
*/
function set_template_handler($function_name) {
global $CONFIG;
- if (!empty($function_name) && is_callable($function_name)) {
+
+ if (is_callable($function_name)) {
$CONFIG->template_handler = $function_name;
return true;
}
@@ -1462,17 +1463,13 @@ function elgg_get_views($dir, $base) {
*/
function elgg_view_tree($view_root, $viewtype = "") {
global $CONFIG;
- static $treecache;
+ static $treecache = array();
// Get viewtype
if (!$viewtype) {
$viewtype = elgg_get_viewtype();
}
- // Has the treecache been initialised?
- if (!isset($treecache)) {
- $treecache = array();
- }
// A little light internal caching
if (!empty($treecache[$view_root])) {
return $treecache[$view_root];
@@ -1516,17 +1513,13 @@ function elgg_view_tree($view_root, $viewtype = "") {
* @param string $base_location_path The base views directory to use with elgg_set_view_location()
* @param string $viewtype The type of view we're looking at (default, rss, etc)
*
- * @return void
+ * @return bool returns false if folder can't be read
* @since 1.7.0
* @see elgg_set_view_location()
* @todo This seems overly complicated.
* @access private
*/
function autoregister_views($view_base, $folder, $base_location_path, $viewtype) {
- if (!isset($i)) {
- $i = 0;
- }
-
if ($handle = opendir($folder)) {
while ($view = readdir($handle)) {
if (!in_array($view, array('.', '..', '.svn', 'CVS')) && !is_dir($folder . "/" . $view)) {
@@ -1567,7 +1560,7 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype)
function elgg_views_add_rss_link() {
global $autofeed;
if (isset($autofeed) && $autofeed == true) {
- $url = full_url();
+ $url = current_page_url();
if (substr_count($url, '?')) {
$url .= "&view=rss";
} else {
@@ -1608,16 +1601,15 @@ function elgg_views_handle_deprecated_views() {
function elgg_views_boot() {
global $CONFIG;
- elgg_register_simplecache_view('css/elgg');
elgg_register_simplecache_view('css/ie');
elgg_register_simplecache_view('css/ie6');
elgg_register_simplecache_view('css/ie7');
- elgg_register_simplecache_view('js/elgg');
elgg_register_js('jquery', '/vendors/jquery/jquery-1.6.4.min.js', 'head');
elgg_register_js('jquery-ui', '/vendors/jquery/jquery-ui-1.8.16.min.js', 'head');
elgg_register_js('jquery.form', '/vendors/jquery/jquery.form.js');
-
+
+ elgg_register_simplecache_view('js/elgg');
$elgg_js_url = elgg_get_simplecache_url('js', 'elgg');
elgg_register_js('elgg', $elgg_js_url, 'head');
@@ -1626,14 +1618,17 @@ function elgg_views_boot() {
elgg_load_js('elgg');
elgg_register_simplecache_view('js/lightbox');
- elgg_register_simplecache_view('css/lightbox');
$lightbox_js_url = elgg_get_simplecache_url('js', 'lightbox');
elgg_register_js('lightbox', $lightbox_js_url);
+
+ elgg_register_simplecache_view('css/lightbox');
$lightbox_css_url = elgg_get_simplecache_url('css', 'lightbox');
elgg_register_css('lightbox', $lightbox_css_url);
+ elgg_register_simplecache_view('css/elgg');
$elgg_css_url = elgg_get_simplecache_url('css', 'elgg');
elgg_register_css('elgg', $elgg_css_url);
+
elgg_load_css('elgg');
elgg_register_ajax_view('js/languages');
@@ -1647,13 +1642,13 @@ function elgg_views_boot() {
$views = scandir($view_path);
foreach ($views as $view) {
- if ('.' !== substr($view, 0, 1) && is_dir($view_path . $view)) {
+ if ($view[0] !== '.' && is_dir($view_path . $view)) {
elgg_register_viewtype($view);
}
}
// set default icon sizes - can be overridden in settings.php or with plugin
- if (!$CONFIG->icon_sizes) {
+ if (!isset($CONFIG->icon_sizes)) {
$icon_sizes = array(
'topbar' => array('w' => 16, 'h' => 16, 'square' => TRUE, 'upscale' => TRUE),
'tiny' => array('w' => 25, 'h' => 25, 'square' => TRUE, 'upscale' => TRUE),
diff --git a/engine/lib/web_services.php b/engine/lib/web_services.php
index da3ed76a9..51cad6f39 100644
--- a/engine/lib/web_services.php
+++ b/engine/lib/web_services.php
@@ -178,7 +178,7 @@ function authenticate_method($method) {
// check if user authentication is required
if ($API_METHODS[$method]["require_user_auth"] == true) {
if ($user_auth_result == false) {
- throw new APIException($user_pam->getFailureMessage());
+ throw new APIException($user_pam->getFailureMessage(), ErrorResult::$RESULT_FAIL_AUTHTOKEN);
}
}
@@ -232,6 +232,7 @@ function execute_method($method) {
$function = $API_METHODS[$method]["function"];
$serialised_parameters = trim($serialised_parameters, ", ");
+ // @todo document why we cannot use call_user_func_array here
$result = eval("return $function($serialised_parameters);");
// Sanity check result
@@ -1165,6 +1166,17 @@ function list_all_apis() {
* @access private
*/
function auth_gettoken($username, $password) {
+ // check if username is an email address
+ if (is_email_address($username)) {
+ $users = get_user_by_email($username);
+
+ // check if we have a unique user
+ if (is_array($users) && (count($users) == 1)) {
+ $username = $users[0]->username;
+ }
+ }
+
+ // validate username and password
if (true === elgg_authenticate($username, $password)) {
$token = create_user_token($username);
if ($token) {
@@ -1194,6 +1206,8 @@ $ERRORS = array();
*
* @return void
* @access private
+ *
+ * @throws Exception
*/
function _php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
global $ERRORS;
@@ -1264,25 +1278,23 @@ function service_handler($handler, $request) {
$request = explode('/', $request);
// after the handler, the first identifier is response format
- // ex) http://example.org/services/api/rest/xml/?method=test
- $reponse_format = array_shift($request);
+ // ex) http://example.org/services/api/rest/json/?method=test
+ $response_format = array_shift($request);
// Which view - xml, json, ...
- if ($reponse_format) {
- elgg_set_viewtype($reponse_format);
+ if ($response_format && elgg_is_valid_view_type($response_format)) {
+ elgg_set_viewtype($response_format);
} else {
- // default to xml
- elgg_set_viewtype("xml");
+ // default to json
+ elgg_set_viewtype("json");
}
if (!isset($CONFIG->servicehandler) || empty($handler)) {
// no handlers set or bad url
header("HTTP/1.0 404 Not Found");
exit;
- } else if (isset($CONFIG->servicehandler[$handler])
- && is_callable($CONFIG->servicehandler[$handler])) {
-
+ } else if (isset($CONFIG->servicehandler[$handler]) && is_callable($CONFIG->servicehandler[$handler])) {
$function = $CONFIG->servicehandler[$handler];
- $function($request, $handler);
+ call_user_func($function, $request, $handler);
} else {
// no handler for this web service
header("HTTP/1.0 404 Not Found");
@@ -1301,10 +1313,11 @@ function service_handler($handler, $request) {
*/
function register_service_handler($handler, $function) {
global $CONFIG;
+
if (!isset($CONFIG->servicehandler)) {
$CONFIG->servicehandler = array();
}
- if (is_callable($function)) {
+ if (is_callable($function, true)) {
$CONFIG->servicehandler[$handler] = $function;
return true;
}
@@ -1319,11 +1332,13 @@ function register_service_handler($handler, $function) {
*
* @param string $handler web services type
*
- * @return 1.7.0
+ * @return void
+ * @since 1.7.0
*/
function unregister_service_handler($handler) {
global $CONFIG;
- if (isset($CONFIG->servicehandler) && isset($CONFIG->servicehandler[$handler])) {
+
+ if (isset($CONFIG->servicehandler, $CONFIG->servicehandler[$handler])) {
unset($CONFIG->servicehandler[$handler]);
}
}
@@ -1333,6 +1348,8 @@ function unregister_service_handler($handler) {
*
* @return void
* @access private
+ *
+ * @throws SecurityException|APIException
*/
function rest_handler() {
global $CONFIG;
@@ -1387,7 +1404,7 @@ function rest_handler() {
/**
* Unit tests for API
*
- * @param sting $hook unit_test
+ * @param string $hook unit_test
* @param string $type system
* @param mixed $value Array of tests
* @param mixed $params Params
@@ -1397,6 +1414,7 @@ function rest_handler() {
*/
function api_unit_test($hook, $type, $value, $params) {
global $CONFIG;
+
$value[] = $CONFIG->path . 'engine/tests/services/api.php';
return $value;
}
@@ -1418,15 +1436,18 @@ function api_init() {
elgg_echo("system.api.list"), "GET", false, false);
// The authentication token api
- expose_function("auth.gettoken",
- "auth_gettoken", array(
- 'username' => array ('type' => 'string'),
- 'password' => array ('type' => 'string'),
- ),
- elgg_echo('auth.gettoken'),
- 'POST',
- false,
- false);
+ expose_function(
+ "auth.gettoken",
+ "auth_gettoken",
+ array(
+ 'username' => array ('type' => 'string'),
+ 'password' => array ('type' => 'string'),
+ ),
+ elgg_echo('auth.gettoken'),
+ 'POST',
+ false,
+ false
+ );
}
diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php
index d73dd6330..699462a1b 100644
--- a/engine/lib/widgets.php
+++ b/engine/lib/widgets.php
@@ -336,7 +336,7 @@ function elgg_default_widgets_init() {
*
* @param string $event The event
* @param string $type The type of object
- * @param object $entity The entity being created
+ * @param ElggEntity $entity The entity being created
* @return void
* @access private
*/
@@ -372,6 +372,7 @@ function elgg_create_default_widgets($event, $type, $entity) {
);
$widgets = elgg_get_entities_from_private_settings($options);
+ /* @var ElggWidget[] $widgets */
foreach ($widgets as $widget) {
// change the container and owner
diff --git a/engine/lib/xml.php b/engine/lib/xml.php
index 813bc4ee0..497459d83 100644
--- a/engine/lib/xml.php
+++ b/engine/lib/xml.php
@@ -101,47 +101,11 @@ function serialise_array_to_xml(array $data, $n = 0) {
/**
* Parse an XML file into an object.
- * Based on code from http://de.php.net/manual/en/function.xml-parse-into-struct.php by
- * efredricksen at gmail dot com
*
* @param string $xml The XML
*
- * @return object
+ * @return ElggXMLElement
*/
function xml_to_object($xml) {
- $parser = xml_parser_create();
-
- // Parse $xml into a structure
- xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
- xml_parse_into_struct($parser, $xml, $tags);
-
- xml_parser_free($parser);
-
- $elements = array();
- $stack = array();
-
- foreach ($tags as $tag) {
- $index = count($elements);
-
- if ($tag['type'] == "complete" || $tag['type'] == "open") {
- $elements[$index] = new XmlElement;
- $elements[$index]->name = $tag['tag'];
- $elements[$index]->attributes = elgg_extract('attributes', $tag, '');
- $elements[$index]->content = elgg_extract('value', $tag, '');
-
- if ($tag['type'] == "open") {
- $elements[$index]->children = array();
- $stack[count($stack)] = &$elements;
- $elements = &$elements[$index]->children;
- }
- }
-
- if ($tag['type'] == "close") {
- $elements = &$stack[count($stack) - 1];
- unset($stack[count($stack) - 1]);
- }
- }
-
- return $elements[0];
+ return new ElggXMLElement($xml);
}
diff --git a/engine/schema/mysql.sql b/engine/schema/mysql.sql
index 6c6e9db89..4714b71bb 100644
--- a/engine/schema/mysql.sql
+++ b/engine/schema/mysql.sql
@@ -361,7 +361,7 @@ CREATE TABLE `prefix_system_log` (
`access_id` int(11) NOT NULL,
`enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
`time_created` int(11) NOT NULL,
- `ip_address` varchar(15) NOT NULL,
+ `ip_address` varchar(46) NOT NULL,
PRIMARY KEY (`id`),
KEY `object_id` (`object_id`),
KEY `object_class` (`object_class`),
diff --git a/engine/tests/api/access_collections.php b/engine/tests/api/access_collections.php
index bea995a6e..4acfae596 100644
--- a/engine/tests/api/access_collections.php
+++ b/engine/tests/api/access_collections.php
@@ -54,7 +54,6 @@ class ElggCoreAccessCollectionsTest extends ElggCoreUnitTest {
}
public function testCreateGetDeleteACL() {
- global $DB_QUERY_CACHE;
$acl_name = 'test access collection';
$acl_id = create_access_collection($acl_name);
@@ -67,8 +66,6 @@ class ElggCoreAccessCollectionsTest extends ElggCoreUnitTest {
$this->assertEqual($acl->id, $acl_id);
if ($acl) {
- $DB_QUERY_CACHE = array();
-
$this->assertEqual($acl->name, $acl_name);
$result = delete_access_collection($acl_id);
@@ -268,4 +265,26 @@ class ElggCoreAccessCollectionsTest extends ElggCoreUnitTest {
$group->delete();
}
+
+ public function testAccessCaching() {
+ // create a new user to check against
+ $user = new ElggUser();
+ $user->username = 'access_test_user';
+ $user->save();
+
+ foreach (array('get_access_list', 'get_access_array') as $func) {
+ $cache = _elgg_get_access_cache();
+ $cache->clear();
+
+ // admin users run tests, so disable access
+ elgg_set_ignore_access(true);
+ $access = $func($user->getGUID());
+
+ elgg_set_ignore_access(false);
+ $access2 = $func($user->getGUID());
+ $this->assertNotEqual($access, $access2, "Access test for $func");
+ }
+
+ $user->delete();
+ }
}
diff --git a/engine/tests/api/annotations.php b/engine/tests/api/annotations.php
index 947292970..c0b0687cc 100644
--- a/engine/tests/api/annotations.php
+++ b/engine/tests/api/annotations.php
@@ -65,6 +65,86 @@ class ElggCoreAnnotationAPITest extends ElggCoreUnitTest {
$annotations = elgg_get_annotations($options);
$this->assertTrue(empty($annotations));
+ // nothing to delete so null returned
+ $this->assertNull(elgg_delete_annotations($options));
+
+ $this->assertTrue($e->delete());
+ }
+
+ public function testElggDisableAnnotations() {
+ $e = new ElggObject();
+ $e->save();
+
+ for ($i=0; $i<30; $i++) {
+ $e->annotate('test_annotation', rand(0,10000));
+ }
+
+ $options = array(
+ 'guid' => $e->getGUID(),
+ 'limit' => 0
+ );
+
+ $this->assertTrue(elgg_disable_annotations($options));
+
+ $annotations = elgg_get_annotations($options);
+ $this->assertTrue(empty($annotations));
+
+ access_show_hidden_entities(true);
+ $annotations = elgg_get_annotations($options);
+ $this->assertIdentical(30, count($annotations));
+ access_show_hidden_entities(false);
+
+ $this->assertTrue($e->delete());
+ }
+
+ public function testElggEnableAnnotations() {
+ $e = new ElggObject();
+ $e->save();
+
+ for ($i=0; $i<30; $i++) {
+ $e->annotate('test_annotation', rand(0,10000));
+ }
+
+ $options = array(
+ 'guid' => $e->getGUID(),
+ 'limit' => 0
+ );
+
+ $this->assertTrue(elgg_disable_annotations($options));
+
+ // cannot see any annotations so returns null
+ $this->assertNull(elgg_enable_annotations($options));
+
+ access_show_hidden_entities(true);
+ $this->assertTrue(elgg_enable_annotations($options));
+ access_show_hidden_entities(false);
+
+ $annotations = elgg_get_annotations($options);
+ $this->assertIdentical(30, count($annotations));
+
+ $this->assertTrue($e->delete());
+ }
+
+ public function testElggAnnotationExists() {
+ $e = new ElggObject();
+ $e->save();
+ $guid = $e->getGUID();
+
+ $this->assertFalse(elgg_annotation_exists($guid, 'test_annotation'));
+
+ $e->annotate('test_annotation', rand(0, 10000));
+ $this->assertTrue(elgg_annotation_exists($guid, 'test_annotation'));
+ // this metastring should always exist but an annotation of this name should not
+ $this->assertFalse(elgg_annotation_exists($guid, 'email'));
+
+ $options = array(
+ 'guid' => $guid,
+ 'limit' => 0
+ );
+ $this->assertTrue(elgg_disable_annotations($options));
+ $this->assertTrue(elgg_annotation_exists($guid, 'test_annotation'));
+
$this->assertTrue($e->delete());
+ $this->assertFalse(elgg_annotation_exists($guid, 'test_annotation'));
}
}
diff --git a/engine/tests/api/entity_getter_functions.php b/engine/tests/api/entity_getter_functions.php
index 9db248de9..fef9dc0c5 100644
--- a/engine/tests/api/entity_getter_functions.php
+++ b/engine/tests/api/entity_getter_functions.php
@@ -2648,7 +2648,7 @@ class ElggCoreEntityGetterFunctionsTest extends ElggCoreUnitTest {
$name = 'test_annotation_' . rand(0, 9999);
$values = array();
$options = array(
- 'types' => 'object',
+ 'type' => 'object',
'subtypes' => $subtypes,
'limit' => 5
);
@@ -2687,7 +2687,7 @@ class ElggCoreEntityGetterFunctionsTest extends ElggCoreUnitTest {
$order = array_keys($values);
$options = array(
- 'types' => 'object',
+ 'type' => 'object',
'subtypes' => $subtypes,
'limit' => 5,
'annotation_name' => $name,
@@ -2729,6 +2729,36 @@ class ElggCoreEntityGetterFunctionsTest extends ElggCoreUnitTest {
}
}
+ public function testElggGetEntitiesFromAnnotationCalculationCount() {
+ // add two annotations with a unique name to an entity
+ // then count the number of entities with that annotation name
+
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $name = 'test_annotation_' . rand(0, 9999);
+ $values = array();
+ $options = array(
+ 'type' => 'object',
+ 'subtypes' => $subtypes,
+ 'limit' => 1
+ );
+ $es = elgg_get_entities($options);
+ $entity = $es[0];
+ $value = rand(0, 9999);
+ $entity->annotate($name, $value);
+ $value = rand(0, 9999);
+ $entity->annotate($name, $value);
+
+ $options = array(
+ 'type' => 'object',
+ 'subtypes' => $subtypes,
+ 'annotation_name' => $name,
+ 'calculation' => 'count',
+ 'count' => true,
+ );
+ $count = elgg_get_entities_from_annotation_calculation($options);
+ $this->assertEqual(1, $count);
+ }
+
public function testElggGetAnnotationsAnnotationNames() {
$options = array('annotation_names' => array());
$a_e_map = array();
@@ -2817,4 +2847,38 @@ class ElggCoreEntityGetterFunctionsTest extends ElggCoreUnitTest {
$entities = elgg_get_entities($options);
$this->assertFalse($entities);
}
+
+ public function testEGEEmptySubtypePlurality() {
+ $options = array(
+ 'type' => 'user',
+ 'subtypes' => ''
+ );
+
+ $entities = elgg_get_entities($options);
+ $this->assertTrue(is_array($entities));
+
+ $options = array(
+ 'type' => 'user',
+ 'subtype' => ''
+ );
+
+ $entities = elgg_get_entities($options);
+ $this->assertTrue(is_array($entities));
+
+ $options = array(
+ 'type' => 'user',
+ 'subtype' => array('')
+ );
+
+ $entities = elgg_get_entities($options);
+ $this->assertTrue(is_array($entities));
+
+ $options = array(
+ 'type' => 'user',
+ 'subtypes' => array('')
+ );
+
+ $entities = elgg_get_entities($options);
+ $this->assertTrue(is_array($entities));
+ }
}
diff --git a/engine/tests/api/helpers.php b/engine/tests/api/helpers.php
index 62e4471e0..414fb4145 100644
--- a/engine/tests/api/helpers.php
+++ b/engine/tests/api/helpers.php
@@ -519,7 +519,7 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
$this->assertIdentical($elements_sorted_string, $test_elements);
}
- // see http://trac.elgg.org/ticket/4288
+ // see https://github.com/elgg/elgg/issues/4288
public function testElggBatchIncOffset() {
// normal increment
$options = array(
@@ -578,6 +578,107 @@ class ElggCoreHelpersTest extends ElggCoreUnitTest {
$this->assertEqual(11, $j);
}
+ public function testElggBatchReadHandlesBrokenEntities() {
+ $num_test_entities = 8;
+ $guids = array();
+ for ($i = $num_test_entities; $i > 0; $i--) {
+ $entity = new ElggObject();
+ $entity->type = 'object';
+ $entity->subtype = 'test_5357_subtype';
+ $entity->access_id = ACCESS_PUBLIC;
+ $entity->save();
+ $guids[] = $entity->guid;
+ _elgg_invalidate_cache_for_entity($entity->guid);
+ }
+
+ // break entities such that the first fetch has one incomplete
+ // and the second and third fetches have only incompletes!
+ $db_prefix = elgg_get_config('dbprefix');
+ delete_data("
+ DELETE FROM {$db_prefix}objects_entity
+ WHERE guid IN ({$guids[1]}, {$guids[2]}, {$guids[3]}, {$guids[4]}, {$guids[5]})
+ ");
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'test_5357_subtype',
+ 'order_by' => 'e.guid',
+ );
+
+ $entities_visited = array();
+ $batch = new ElggBatch('elgg_get_entities', $options, null, 2);
+ /* @var ElggEntity[] $batch */
+ foreach ($batch as $entity) {
+ $entities_visited[] = $entity->guid;
+ }
+
+ // The broken entities should not have been visited
+ $this->assertEqual($entities_visited, array($guids[0], $guids[6], $guids[7]));
+
+ // cleanup (including leftovers from previous tests)
+ $entity_rows = elgg_get_entities(array_merge($options, array(
+ 'callback' => '',
+ 'limit' => false,
+ )));
+ $guids = array();
+ foreach ($entity_rows as $row) {
+ $guids[] = $row->guid;
+ }
+ delete_data("DELETE FROM {$db_prefix}entities WHERE guid IN (" . implode(',', $guids) . ")");
+ delete_data("DELETE FROM {$db_prefix}objects_entity WHERE guid IN (" . implode(',', $guids) . ")");
+ }
+
+ public function testElggBatchDeleteHandlesBrokenEntities() {
+ $num_test_entities = 8;
+ $guids = array();
+ for ($i = $num_test_entities; $i > 0; $i--) {
+ $entity = new ElggObject();
+ $entity->type = 'object';
+ $entity->subtype = 'test_5357_subtype';
+ $entity->access_id = ACCESS_PUBLIC;
+ $entity->save();
+ $guids[] = $entity->guid;
+ _elgg_invalidate_cache_for_entity($entity->guid);
+ }
+
+ // break entities such that the first fetch has one incomplete
+ // and the second and third fetches have only incompletes!
+ $db_prefix = elgg_get_config('dbprefix');
+ delete_data("
+ DELETE FROM {$db_prefix}objects_entity
+ WHERE guid IN ({$guids[1]}, {$guids[2]}, {$guids[3]}, {$guids[4]}, {$guids[5]})
+ ");
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'test_5357_subtype',
+ 'order_by' => 'e.guid',
+ );
+
+ $entities_visited = array();
+ $batch = new ElggBatch('elgg_get_entities', $options, null, 2, false);
+ /* @var ElggEntity[] $batch */
+ foreach ($batch as $entity) {
+ $entities_visited[] = $entity->guid;
+ $entity->delete();
+ }
+
+ // The broken entities should not have been visited
+ $this->assertEqual($entities_visited, array($guids[0], $guids[6], $guids[7]));
+
+ // cleanup (including leftovers from previous tests)
+ $entity_rows = elgg_get_entities(array_merge($options, array(
+ 'callback' => '',
+ 'limit' => false,
+ )));
+ $guids = array();
+ foreach ($entity_rows as $row) {
+ $guids[] = $row->guid;
+ }
+ delete_data("DELETE FROM {$db_prefix}entities WHERE guid IN (" . implode(',', $guids) . ")");
+ delete_data("DELETE FROM {$db_prefix}objects_entity WHERE guid IN (" . implode(',', $guids) . ")");
+ }
+
static function elgg_batch_callback_test($options, $reset = false) {
static $count = 1;
diff --git a/engine/tests/api/metadata.php b/engine/tests/api/metadata.php
index 9933263d1..d23510c6a 100644
--- a/engine/tests/api/metadata.php
+++ b/engine/tests/api/metadata.php
@@ -102,14 +102,14 @@ class ElggCoreMetadataAPITest extends ElggCoreUnitTest {
$e = new ElggObject();
$e->save();
- for ($i=0; $i<30; $i++) {
- $name = "test_metadata" . rand(0, 10000);
+ for ($i = 0; $i < 30; $i++) {
+ $name = "test_metadata$i";
$e->$name = rand(0, 10000);
}
$options = array(
'guid' => $e->getGUID(),
- 'limit' => 0
+ 'limit' => 0,
);
$md = elgg_get_metadata($options);
@@ -123,9 +123,23 @@ class ElggCoreMetadataAPITest extends ElggCoreUnitTest {
$e->delete();
}
+ /**
+ * https://github.com/Elgg/Elgg/issues/4867
+ */
+ public function testElggGetEntityMetadataWhereSqlWithFalseValue() {
+ $pair = array('name' => 'test' , 'value' => false);
+ $result = elgg_get_entity_metadata_where_sql('e', 'metadata', null, null, $pair);
+ $where = preg_replace( '/\s+/', ' ', $result['wheres'][0]);
+ $this->assertTrue(strpos($where, "msn1.string = 'test' AND BINARY msv1.string = 0") > 0);
+
+ $result = elgg_get_entity_metadata_where_sql('e', 'metadata', array('test'), array(false));
+ $where = preg_replace( '/\s+/', ' ', $result['wheres'][0]);
+ $this->assertTrue(strpos($where, "msn.string IN ('test')) AND ( BINARY msv.string IN ('0')"));
+ }
+
// Make sure metadata with multiple values is correctly deleted when re-written
// by another user
- // http://trac.elgg.org/ticket/2776
+ // https://github.com/elgg/elgg/issues/2776
public function test_elgg_metadata_multiple_values() {
$u1 = new ElggUser();
$u1->username = rand();
diff --git a/engine/tests/api/metadata_cache.php b/engine/tests/api/metadata_cache.php
index 846116a7b..7fb328169 100644
--- a/engine/tests/api/metadata_cache.php
+++ b/engine/tests/api/metadata_cache.php
@@ -166,4 +166,11 @@ class ElggCoreMetadataCacheTest extends ElggCoreUnitTest {
$actual = $this->cache->filterMetadataHeavyEntities($guids, 6000);
$this->assertIdentical($actual, $expected);
}
+
+ public function testCreateMetadataInvalidates() {
+ $this->obj1->foo = 1;
+ create_metadata($this->guid1, 'foo', 2, '', elgg_get_logged_in_user_guid(), ACCESS_FRIENDS);
+
+ $this->assertEqual($this->obj1->foo, 2);
+ }
}
diff --git a/engine/tests/api/metastrings.php b/engine/tests/api/metastrings.php
index 0a8945084..5efdab972 100644
--- a/engine/tests/api/metastrings.php
+++ b/engine/tests/api/metastrings.php
@@ -55,8 +55,11 @@ class ElggCoreMetastringsTest extends ElggCoreUnitTest {
* Called after each test method.
*/
public function tearDown() {
- // do not allow SimpleTest to interpret Elgg notices as exceptions
- $this->swallowErrors();
+ access_show_hidden_entities(true);
+ elgg_delete_annotations(array(
+ 'guid' => $this->object->guid,
+ ));
+ access_show_hidden_entities(false);
}
/**
@@ -98,6 +101,31 @@ class ElggCoreMetastringsTest extends ElggCoreUnitTest {
}
}
+ public function testGetMetastringObjectFromIDWithDisabledAnnotation() {
+ $name = 'test_annotation_name' . rand();
+ $value = 'test_annotation_value' . rand();
+ $id = create_annotation($this->object->guid, $name, $value);
+ $annotation = elgg_get_annotation_from_id($id);
+ $this->assertTrue($annotation->disable());
+
+ $test = elgg_get_metastring_based_object_from_id($id, 'annotation');
+ $this->assertEqual(false, $test);
+ }
+
+ public function testGetMetastringBasedObjectWithDisabledAnnotation() {
+ $name = 'test_annotation_name' . rand();
+ $value = 'test_annotation_value' . rand();
+ $id = create_annotation($this->object->guid, $name, $value);
+ $annotation = elgg_get_annotation_from_id($id);
+ $this->assertTrue($annotation->disable());
+
+ $test = elgg_get_metastring_based_objects(array(
+ 'metastring_type' => 'annotations',
+ 'guid' => $this->object->guid,
+ ));
+ $this->assertEqual(array(), $test);
+ }
+
public function testEnableDisableByID() {
$db_prefix = elgg_get_config('dbprefix');
$annotations = $this->createAnnotations(1);
@@ -119,7 +147,6 @@ class ElggCoreMetastringsTest extends ElggCoreUnitTest {
// enable
$ashe = access_get_show_hidden_status();
access_show_hidden_entities(true);
- flush();
$this->assertTrue(elgg_set_metastring_based_object_enabled_by_id($id, 'yes', $type));
$test = get_data($q);
diff --git a/engine/tests/api/output.php b/engine/tests/api/output.php
new file mode 100644
index 000000000..c3d5aa8c6
--- /dev/null
+++ b/engine/tests/api/output.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Test case for ElggAutoP functionality.
+ */
+class ElggCoreOutputAutoPTest extends ElggCoreUnitTest {
+
+ /**
+ * @var ElggAutoP
+ */
+ protected $_autop;
+
+ public function setUp() {
+ $this->_autop = new ElggAutoP();
+ }
+
+ public function testDomRoundtrip() {
+ $d = dir(dirname(dirname(__FILE__)) . '/test_files/output/autop');
+ $in = file_get_contents($d->path . "/domdoc_in.html");
+ $exp = file_get_contents($d->path . "/domdoc_exp.html");
+ $exp = $this->flattenString($exp);
+
+ $doc = new DOMDocument();
+ libxml_use_internal_errors(true);
+ $doc->loadHTML("<html><meta http-equiv='content-type' content='text/html; charset=utf-8'><body>"
+ . $in . '</body></html>');
+ $serialized = $doc->saveHTML();
+ list(,$out) = explode('<body>', $serialized, 2);
+ list($out) = explode('</body>', $out, 2);
+ $out = $this->flattenString($out);
+
+ $this->assertEqual($exp, $out, "DOMDocument's parsing/serialization roundtrip");
+ }
+
+ public function testProcess() {
+ $data = $this->provider();
+ foreach ($data as $row) {
+ list($test, $in, $exp) = $row;
+ $exp = $this->flattenString($exp);
+ $out = $this->_autop->process($in);
+ $out = $this->flattenString($out);
+
+ $this->assertEqual($exp, $out, "Equality case {$test}");
+ }
+ }
+
+ public function provider() {
+ $d = dir(dirname(dirname(__FILE__)) . '/test_files/output/autop');
+ $tests = array();
+ while (false !== ($entry = $d->read())) {
+ if (preg_match('/^([a-z\\-]+)\.in\.html$/i', $entry, $m)) {
+ $tests[] = $m[1];
+ }
+ }
+
+ $data = array();
+ foreach ($tests as $test) {
+ $data[] = array(
+ $test,
+ file_get_contents($d->path . '/' . "{$test}.in.html"),
+ file_get_contents($d->path . '/' . "{$test}.exp.html"),
+ );
+ }
+ return $data;
+ }
+
+ /**
+ * Different versions of PHP return different whitespace between tags.
+ * Removing all line breaks normalizes that.
+ */
+ public function flattenString($string) {
+ $r = preg_replace('/[\n\r]+/', '', $string);
+ return $r;
+ }
+} \ No newline at end of file
diff --git a/engine/tests/api/plugins.php b/engine/tests/api/plugins.php
index 114f3991b..d0f111c48 100644
--- a/engine/tests/api/plugins.php
+++ b/engine/tests/api/plugins.php
@@ -69,7 +69,7 @@ class ElggCorePluginsAPITest extends ElggCoreUnitTest {
'description' => 'A longer, more interesting description.',
'website' => 'http://www.elgg.org/',
'repository' => 'https://github.com/Elgg/Elgg',
- 'bugtracker' => 'http://trac.elgg.org',
+ 'bugtracker' => 'https://github.com/elgg/elgg/issues',
'donations' => 'http://elgg.org/supporter.php',
'copyright' => '(C) Elgg Foundation 2011',
'license' => 'GNU General Public License version 2',
@@ -174,7 +174,7 @@ class ElggCorePluginsAPITest extends ElggCoreUnitTest {
}
public function testElggPluginManifestGetBugtracker() {
- $this->assertEqual($this->manifest18->getBugTrackerURL(), 'http://trac.elgg.org');
+ $this->assertEqual($this->manifest18->getBugTrackerURL(), 'https://github.com/elgg/elgg/issues');
$this->assertEqual($this->manifest17->getBugTrackerURL(), '');
}
diff --git a/engine/tests/objects/entities.php b/engine/tests/objects/entities.php
index 248b85c9e..bac72079e 100644
--- a/engine/tests/objects/entities.php
+++ b/engine/tests/objects/entities.php
@@ -271,7 +271,7 @@ class ElggCoreEntityTest extends ElggCoreUnitTest {
$this->save_entity();
// test deleting incorrectly
- // @link http://trac.elgg.org/ticket/2273
+ // @link https://github.com/elgg/elgg/issues/2273
$this->assertNull($this->entity->deleteMetadata('impotent'));
$this->assertEqual($this->entity->important, 'indeed!');
diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php
index 915594e0a..263ab2414 100644
--- a/engine/tests/objects/objects.php
+++ b/engine/tests/objects/objects.php
@@ -194,7 +194,7 @@ class ElggCoreObjectTest extends ElggCoreUnitTest {
$old = elgg_set_ignore_access(true);
}
- // see http://trac.elgg.org/ticket/1196
+ // see https://github.com/elgg/elgg/issues/1196
public function testElggEntityRecursiveDisableWhenLoggedOut() {
$e1 = new ElggObject();
$e1->access_id = ACCESS_PUBLIC;
diff --git a/engine/tests/objects/users.php b/engine/tests/objects/users.php
index a3573acb6..8a1033ac4 100644
--- a/engine/tests/objects/users.php
+++ b/engine/tests/objects/users.php
@@ -65,6 +65,9 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
$attributes['code'] = NULL;
$attributes['banned'] = 'no';
$attributes['admin'] = 'no';
+ $attributes['prev_last_action'] = NULL;
+ $attributes['last_login'] = NULL;
+ $attributes['prev_last_login'] = NULL;
ksort($attributes);
$entity_attributes = $this->user->expose_attributes();
@@ -142,7 +145,7 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
}
public function testElggUserNameCache() {
- // Trac #1305
+ // issue https://github.com/elgg/elgg/issues/1305
// very unlikely a user would have this username
$name = (string)time();
@@ -156,6 +159,22 @@ class ElggCoreUserTest extends ElggCoreUnitTest {
$this->assertFalse($user);
}
+ public function testGetUserByUsernameAcceptsUrlEncoded() {
+ $username = (string)time();
+ $this->user->username = $username;
+ $guid = $this->user->save();
+
+ // percent encode first letter
+ $first_letter = $username[0];
+ $first_letter = str_pad('%' . dechex(ord($first_letter)), 2, '0', STR_PAD_LEFT);
+ $username = $first_letter . substr($username, 1);
+
+ $user = get_user_by_username($username);
+ $this->assertTrue((bool) $user);
+ $this->assertEqual($guid, $user->guid);
+
+ $this->user->delete();
+ }
public function testElggUserMakeAdmin() {
global $CONFIG;
diff --git a/engine/tests/regression/trac_bugs.php b/engine/tests/regression/trac_bugs.php
index 691433a41..689275661 100644
--- a/engine/tests/regression/trac_bugs.php
+++ b/engine/tests/regression/trac_bugs.php
@@ -1,7 +1,7 @@
<?php
/**
- * Elgg Regression Tests -- Trac Bugfixes
- * Any bugfixes from Trac that require testing belong here.
+ * Elgg Regression Tests -- GitHub Bugfixes
+ * Any bugfixes from GitHub that require testing belong here.
*
* @package Elgg
* @subpackage Test
@@ -201,26 +201,28 @@ class ElggCoreRegressionBugsTest extends ElggCoreUnitTest {
}
/**
- * http://trac.elgg.org/ticket/3210 - Don't remove -s in friendly titles
- * http://trac.elgg.org/ticket/2276 - improve char encoding
+ * https://github.com/elgg/elgg/issues/3210 - Don't remove -s in friendly titles
+ * https://github.com/elgg/elgg/issues/2276 - improve char encoding
*/
public function test_friendly_title() {
$cases = array(
+ // acid test
+ "B&N > Amazon, OK? <bold> 'hey!' $34"
+ => "bn-amazon-ok-bold-hey-34",
+
// hyphen, underscore and ASCII whitespace replaced by separator,
// other non-alphanumeric ASCII removed
- "a-a_a a\na\ra\ta\va!a\"a#a\$a%a&a'a(a)a*a+a,a.a/a:a;a<a=a>a?a@a[a\\a]a^a`a{a|a}a~a"
- => "a-a-a-a-a-a-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-
+ "a-a_a a\na\ra\ta\va!a\"a#a\$a%aa'a(a)a*a+a,a.a/a:a;a=a?a@a[a\\a]a^a`a{a|a}a~a"
+ => "a-a-a-a-a-a-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+
// separators trimmed
- "-_ hello _-" => "hello",
+ "-_ hello _-"
+ => "hello",
// accents removed, lower case, other multibyte chars are URL encoded
"I\xC3\xB1t\xC3\xABrn\xC3\xA2ti\xC3\xB4n\xC3\xA0liz\xC3\xA6ti\xC3\xB8n, AND \xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E"
// Iñtërnâtiônàlizætiøn, AND 日本語
=> 'internationalizaetion-and-%E6%97%A5%E6%9C%AC%E8%AA%9E',
-
- // some HTML entity replacements
- "Me &amp; You" => 'me-and-you',
);
// where available, string is converted to NFC before transliteration
@@ -234,4 +236,170 @@ class ElggCoreRegressionBugsTest extends ElggCoreUnitTest {
$this->assertIdentical($expected, $friendly_title);
}
}
+
+ /**
+ * Test #5369 -- parse_urls()
+ * https://github.com/Elgg/Elgg/issues/5369
+ */
+ public function test_parse_urls() {
+
+ $cases = array(
+ 'no.link.here' =>
+ 'no.link.here',
+ 'simple link http://example.org test' =>
+ 'simple link <a href="http://example.org" rel="nofollow">http:/<wbr />/<wbr />example.org</a> test',
+ 'non-ascii http://ñew.org/ test' =>
+ 'non-ascii <a href="http://ñew.org/" rel="nofollow">http:/<wbr />/<wbr />ñew.org/<wbr /></a> test',
+
+ // section 2.1
+ 'percent encoded http://example.org/a%20b test' =>
+ 'percent encoded <a href="http://example.org/a%20b" rel="nofollow">http:/<wbr />/<wbr />example.org/<wbr />a%20b</a> test',
+ // section 2.2: skipping single quote and parenthese
+ 'reserved characters http://example.org/:/?#[]@!$&*+,;= test' =>
+ 'reserved characters <a href="http://example.org/:/?#[]@!$&*+,;=" rel="nofollow">http:/<wbr />/<wbr />example.org/<wbr />:/<wbr />?#[]@!$&*+,;=</a> test',
+ // section 2.3
+ 'unreserved characters http://example.org/a1-._~ test' =>
+ 'unreserved characters <a href="http://example.org/a1-._~" rel="nofollow">http:/<wbr />/<wbr />example.org/<wbr />a1-._~</a> test',
+
+ 'parameters http://example.org/?val[]=1&val[]=2 test' =>
+ 'parameters <a href="http://example.org/?val[]=1&val[]=2" rel="nofollow">http:/<wbr />/<wbr />example.org/<wbr />?val[]=1&val[]=2</a> test',
+ 'port http://example.org:80/ test' =>
+ 'port <a href="http://example.org:80/" rel="nofollow">http:/<wbr />/<wbr />example.org:80/<wbr /></a> test',
+
+ 'parentheses (http://www.google.com) test' =>
+ 'parentheses (<a href="http://www.google.com" rel="nofollow">http:/<wbr />/<wbr />www.google.com</a>) test',
+ 'comma http://elgg.org, test' =>
+ 'comma <a href="http://elgg.org" rel="nofollow">http:/<wbr />/<wbr />elgg.org</a>, test',
+ 'period http://elgg.org. test' =>
+ 'period <a href="http://elgg.org" rel="nofollow">http:/<wbr />/<wbr />elgg.org</a>. test',
+ 'exclamation http://elgg.org! test' =>
+ 'exclamation <a href="http://elgg.org" rel="nofollow">http:/<wbr />/<wbr />elgg.org</a>! test',
+
+ 'already anchor <a href="http://twitter.com/">twitter</a> test' =>
+ 'already anchor <a href="http://twitter.com/">twitter</a> test',
+
+ 'ssl https://example.org/ test' =>
+ 'ssl <a href="https://example.org/" rel="nofollow">https:/<wbr />/<wbr />example.org/<wbr /></a> test',
+ 'ftp ftp://example.org/ test' =>
+ 'ftp <a href="ftp://example.org/" rel="nofollow">ftp:/<wbr />/<wbr />example.org/<wbr /></a> test',
+
+ 'web archive anchor <a href="http://web.archive.org/web/20000229040250/http://www.google.com/">google</a>' =>
+ 'web archive anchor <a href="http://web.archive.org/web/20000229040250/http://www.google.com/">google</a>',
+
+ 'single quotes already anchor <a href=\'http://www.yahoo.com\'>yahoo</a>' =>
+ 'single quotes already anchor <a href=\'http://www.yahoo.com\'>yahoo</a>',
+
+ 'unquoted already anchor <a href=http://www.yahoo.com>yahoo</a>' =>
+ 'unquoted already anchor <a href=http://www.yahoo.com>yahoo</a>',
+
+ 'parens in uri http://thedailywtf.com/Articles/A-(Long-Overdue)-BuildMaster-Introduction.aspx' =>
+ 'parens in uri <a href="http://thedailywtf.com/Articles/A-(Long-Overdue)-BuildMaster-Introduction.aspx" rel="nofollow">http:/<wbr />/<wbr />thedailywtf.com/<wbr />Articles/<wbr />A-(Long-Overdue)-BuildMaster-Introduction.aspx</a>'
+ );
+ foreach ($cases as $input => $output) {
+ $this->assertEqual($output, parse_urls($input));
+ }
+ }
+
+ /**
+ * Ensure additional select columns do not end up in entity attributes.
+ *
+ * https://github.com/Elgg/Elgg/issues/5538
+ */
+ public function test_extra_columns_dont_appear_in_attributes() {
+ global $ENTITY_CACHE;
+
+ // may not have groups in DB - let's create one
+ $group = new ElggGroup();
+ $group->name = 'test_group';
+ $group->access_id = ACCESS_PUBLIC;
+ $this->assertTrue($group->save() !== false);
+
+ // entity cache interferes with our test
+ $ENTITY_CACHE = array();
+
+ foreach (array('site', 'user', 'group', 'object') as $type) {
+ $entities = elgg_get_entities(array(
+ 'type' => $type,
+ 'selects' => array('1 as _nonexistent_test_column'),
+ 'limit' => 1,
+ ));
+ if (!$this->assertTrue($entities, "Query for '$type' did not return an entity.")) {
+ continue;
+ }
+ $entity = $entities[0];
+ $this->assertNull($entity->_nonexistent_test_column, "Additional select columns are leaking to attributes for '$type'");
+ }
+
+ $group->delete();
+ }
+
+ /**
+ * Ensure that ElggBatch doesn't go into infinite loop when disabling annotations recursively when show hidden is enabled.
+ *
+ * https://github.com/Elgg/Elgg/issues/5952
+ */
+ public function test_disabling_annotations_infinite_loop() {
+
+ //let's have some entity
+ $group = new ElggGroup();
+ $group->name = 'test_group';
+ $group->access_id = ACCESS_PUBLIC;
+ $this->assertTrue($group->save() !== false);
+
+ $total = 51;
+ //add some annotations
+ for ($cnt = 0; $cnt < $total; $cnt++) {
+ $group->annotate('test_annotation', 'value_' . $total);
+ }
+
+ //disable them
+ $show_hidden = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $options = array(
+ 'guid' => $group->guid,
+ 'limit' => $total, //using strict limit to avoid real infinite loop and just see ElggBatch limiting on it before finishing the work
+ );
+ elgg_disable_annotations($options);
+ access_show_hidden_entities($show_hidden);
+
+ //confirm all being disabled
+ $annotations = $group->getAnnotations(array(
+ 'limit' => $total,
+ ));
+ foreach ($annotations as $annotation) {
+ $this->assertTrue($annotation->enabled == 'no');
+ }
+
+ //delete group and annotations
+ $group->delete();
+ }
+
+ public function test_ElggXMLElement_does_not_load_external_entities() {
+ $elLast = libxml_disable_entity_loader(false);
+
+ // build payload that should trigger loading of external entity
+ $payload = file_get_contents(dirname(dirname(__FILE__)) . '/test_files/xxe/request.xml');
+ $path = realpath(dirname(dirname(__FILE__)) . '/test_files/xxe/external_entity.txt');
+ $path = str_replace('\\', '/', $path);
+ if ($path[0] != '/') {
+ $path = '/' . $path;
+ }
+ $path = 'file://' . $path;
+ $payload = sprintf($payload, $path);
+
+ // make sure we can actually this in this environment
+ $element = new SimpleXMLElement($payload);
+ $can_load_entity = preg_match('/secret/', (string)$element->methodName);
+
+ $this->skipUnless($can_load_entity, "XXE vulnerability cannot be tested on this system");
+
+ if ($can_load_entity) {
+ $el = new ElggXMLElement($payload);
+ $chidren = $el->getChildren();
+ $content = $chidren[0]->getContent();
+ $this->assertNoPattern('/secret/', $content);
+ }
+
+ libxml_disable_entity_loader($elLast);
+ }
}
diff --git a/engine/tests/test_files/output/autop/block-a.exp.norun.html b/engine/tests/test_files/output/autop/block-a.exp.norun.html
new file mode 100644
index 000000000..addf29dec
--- /dev/null
+++ b/engine/tests/test_files/output/autop/block-a.exp.norun.html
@@ -0,0 +1,6 @@
+
+<p>HTML5 allows A to contain block-level content</p>
+<a href="foo"><h3>A treated as block</h3>
+<p>Read more</p>
+</a>
+<p><a href="foo">A treated as<br /> inline</a></p>
diff --git a/engine/tests/test_files/output/autop/block-a.in.norun.html b/engine/tests/test_files/output/autop/block-a.in.norun.html
new file mode 100644
index 000000000..fc2dac43a
--- /dev/null
+++ b/engine/tests/test_files/output/autop/block-a.in.norun.html
@@ -0,0 +1,9 @@
+HTML5 allows A to contain block-level content
+<a href="foo">
+
+ <h3>A treated as block</h3>
+
+ Read more
+</a>
+<a href="foo">A treated as
+ inline</a>
diff --git a/engine/tests/test_files/output/autop/domdoc_exp.html b/engine/tests/test_files/output/autop/domdoc_exp.html
new file mode 100644
index 000000000..8480c1083
--- /dev/null
+++ b/engine/tests/test_files/output/autop/domdoc_exp.html
@@ -0,0 +1,46 @@
+›
+Vietnamese - Tiếng Việt
+
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em> <span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+ <p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul><li>Unordered</li>
+ <li>List</li>
+</ul><p>Paragraph between lists</p>
+<ol><li>Ordered</li>
+ <li>List</li>
+</ol><p>Paragraph between lists</p>
+<ul><li>OL list</li>
+ <li>nested<ol><li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul><p>Paragraph between lists</p>
+<table border="0"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=0</td>
+ </tr></tbody></table><p>Paragraph</p>
+<ol><li>UL list</li>
+ <li>nested
+ <ul><li>inside a</li>
+ <li>OL list</li>
+ </ul></li>
+</ol><p>Paragraph between tables</p>
+<table border="1" cellpadding="5"><tbody><tr><td>Table with border=1</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>cellpadding = 5</td>
+ </tr></tbody></table><p>Paragraph between tables</p>
+<table border="2"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=2</td>
+ </tr></tbody></table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/domdoc_in.html b/engine/tests/test_files/output/autop/domdoc_in.html
new file mode 100644
index 000000000..4c465b435
--- /dev/null
+++ b/engine/tests/test_files/output/autop/domdoc_in.html
@@ -0,0 +1,80 @@
+&#8250;
+&nbsp;
+Vietnamese - Tiếng Việt
+
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+ <p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul>
+ <li>Unordered</li>
+ <li>List</li>
+</ul>
+<p>Paragraph between lists</p>
+<ol>
+ <li>Ordered</li>
+ <li>List</li>
+</ol>
+<p>Paragraph between lists</p>
+<ul>
+ <li>OL list</li>
+ <li>nested<ol>
+ <li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+<p>Paragraph between lists</p>
+<table border="0">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=0</td>
+ </tr>
+ </tbody>
+</table>
+<p>Paragraph</p>
+<ol>
+ <li>UL list</li>
+ <li>nested
+ <ul>
+ <li>inside a</li>
+ <li>OL list</li>
+ </ul>
+ </li>
+</ol>
+<p>Paragraph between tables</p>
+<table border="1" cellpadding="5">
+ <tbody>
+ <tr>
+ <td>Table with border=1</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>cellpadding = 5</td>
+ </tr>
+ </tbody>
+</table>
+<p>Paragraph between tables</p>
+<table border="2">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=2</td>
+ </tr>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/typical-post.exp.html b/engine/tests/test_files/output/autop/typical-post.exp.html
new file mode 100644
index 000000000..f9d75a114
--- /dev/null
+++ b/engine/tests/test_files/output/autop/typical-post.exp.html
@@ -0,0 +1,84 @@
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<p><img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150">Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.</p>
+
+<p>Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.</p>
+<h3>Donec at massa ante, sagittis fermentum urna.</h3><blockquote>
+<p>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.</p>
+
+<p>[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150">[/caption]</p>
+
+<p>Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.</p>
+
+<p>Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</p>
+</blockquote>
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.</p>
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre><ul><li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+<p>Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.</p>
+
+<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<p><img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150">Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.</p>
+
+<p>Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.</p>
+<h3>Donec at massa ante, sagittis fermentum urna.</h3><blockquote>
+<p>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.</p>
+
+<p>[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150">[/caption]</p>
+
+<p>Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.</p>
+
+<p>Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</p>
+</blockquote>
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.</p>
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre><ul><li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+<p>Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.</p>
+
+<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
diff --git a/engine/tests/test_files/output/autop/typical-post.in.html b/engine/tests/test_files/output/autop/typical-post.in.html
new file mode 100644
index 000000000..6e4984cc4
--- /dev/null
+++ b/engine/tests/test_files/output/autop/typical-post.in.html
@@ -0,0 +1,89 @@
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150" />Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.
+
+Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.
+<h3>Donec at massa ante, sagittis fermentum urna.</h3>
+<blockquote>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.
+
+[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150" />[/caption]
+
+Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.
+
+Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</blockquote>
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.
+
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre>
+<ul>
+ <li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.
+
+<object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object>
+
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150" />Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.
+
+Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.
+<h3>Donec at massa ante, sagittis fermentum urna.</h3>
+<blockquote>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.
+
+[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150" />[/caption]
+
+Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.
+
+Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</blockquote>
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.
+
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre>
+<ul>
+ <li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.
+
+<object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wp-welcome.exp.html b/engine/tests/test_files/output/autop/wp-welcome.exp.html
new file mode 100644
index 000000000..2f612e3dd
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wp-welcome.exp.html
@@ -0,0 +1,22 @@
+
+<p>Welcome to WordPress! This post contains important information. After you read it, you can make it private to hide it from visitors but still have the information handy for future reference.</p>
+
+<p>First things first:</p>
+<ul><li><a href="%1%24s" title="Subscribe to the WordPress mailing list for Release Notifications">Subscribe to the WordPress mailing list for release notifications</a></li>
+</ul>
+<p>As a subscriber, you will receive an email every time an update is available (and only then). This will make it easier to keep your site up to date, and secure from evildoers.<br />When a new version is released, <a href="%2%24s" title="If you are already logged in, this will take you directly to the Dashboard">log in to the Dashboard</a> and follow the instructions.<br />Upgrading is a couple of clicks!</p>
+
+<p>Then you can start enjoying the WordPress experience:</p>
+<ul><li>Edit your personal information at <a href="%3%24s" title="Edit settings like your password, your display name and your contact information">Users &#8250; Your Profile</a></li>
+ <li>Start publishing at <a href="%4%24s" title="Create a new post">Posts &#8250; Add New</a> and at <a href="%5%24s" title="Create a new page">Pages &#8250; Add New</a></li>
+ <li>Browse and install plugins at <a href="%6%24s" title="Browse and install plugins at the official WordPress repository directly from your Dashboard">Plugins &#8250; Add New</a></li>
+ <li>Browse and install themes at <a href="%7%24s" title="Browse and install themes at the official WordPress repository directly from your Dashboard">Appearance &#8250; Add New Themes</a></li>
+ <li>Modify and prettify your website&#8217;s links at <a href="%8%24s" title="For example, select a link structure like: http://example.com/1999/12/post-name">Settings &#8250; Permalinks</a></li>
+ <li>Import content from another system or WordPress site at <a href="%9%24s" title="WordPress comes with importers for the most common publishing systems">Tools &#8250; Import</a></li>
+ <li>Find answers to your questions at the <a href="%10%24s" title="The official WordPress documentation, maintained by the WordPress community">WordPress Codex</a></li>
+</ul>
+<p>To keep this post for reference, <a href="%11%24s" title="Click to edit the content and settings of this post">click to edit it</a>, go to the Publish box and change its Visibility from Public to Private.</p>
+
+<p>Thank you for selecting WordPress. We wish you happy publishing!</p>
+
+<p>PS. Not yet subscribed for update notifications? <a href="%1%24s" title="Subscribe to the WordPress mailing list for Release Notifications">Do it now!</a></p>
diff --git a/engine/tests/test_files/output/autop/wp-welcome.in.html b/engine/tests/test_files/output/autop/wp-welcome.in.html
new file mode 100644
index 000000000..338ede73f
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wp-welcome.in.html
@@ -0,0 +1,25 @@
+Welcome to WordPress! This post contains important information. After you read it, you can make it private to hide it from visitors but still have the information handy for future reference.
+
+First things first:
+<ul>
+ <li><a href="%1$s" title="Subscribe to the WordPress mailing list for Release Notifications">Subscribe to the WordPress mailing list for release notifications</a></li>
+</ul>
+As a subscriber, you will receive an email every time an update is available (and only then). This will make it easier to keep your site up to date, and secure from evildoers.
+When a new version is released, <a href="%2$s" title="If you are already logged in, this will take you directly to the Dashboard">log in to the Dashboard</a> and follow the instructions.
+Upgrading is a couple of clicks!
+
+Then you can start enjoying the WordPress experience:
+<ul>
+ <li>Edit your personal information at <a href="%3$s" title="Edit settings like your password, your display name and your contact information">Users &#8250; Your Profile</a></li>
+ <li>Start publishing at <a href="%4$s" title="Create a new post">Posts &#8250; Add New</a> and at <a href="%5$s" title="Create a new page">Pages &#8250; Add New</a></li>
+ <li>Browse and install plugins at <a href="%6$s" title="Browse and install plugins at the official WordPress repository directly from your Dashboard">Plugins &#8250; Add New</a></li>
+ <li>Browse and install themes at <a href="%7$s" title="Browse and install themes at the official WordPress repository directly from your Dashboard">Appearance &#8250; Add New Themes</a></li>
+ <li>Modify and prettify your website&#8217;s links at <a href="%8$s" title="For example, select a link structure like: http://example.com/1999/12/post-name">Settings &#8250; Permalinks</a></li>
+ <li>Import content from another system or WordPress site at <a href="%9$s" title="WordPress comes with importers for the most common publishing systems">Tools &#8250; Import</a></li>
+ <li>Find answers to your questions at the <a href="%10$s" title="The official WordPress documentation, maintained by the WordPress community">WordPress Codex</a></li>
+</ul>
+To keep this post for reference, <a href="%11$s" title="Click to edit the content and settings of this post">click to edit it</a>, go to the Publish box and change its Visibility from Public to Private.
+
+Thank you for selecting WordPress. We wish you happy publishing!
+
+PS. Not yet subscribed for update notifications? <a href="%1$s" title="Subscribe to the WordPress mailing list for Release Notifications">Do it now!</a>
diff --git a/engine/tests/test_files/output/autop/wpautop-fails.exp.html b/engine/tests/test_files/output/autop/wpautop-fails.exp.html
new file mode 100644
index 000000000..d018db4ff
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wpautop-fails.exp.html
@@ -0,0 +1,31 @@
+
+<p>paragraph</p>
+
+<p>paragraph</p>
+<div class="whatever"><blockquote>
+<p>paragraph</p>
+</blockquote>
+<p>line</p>
+</div>
+<p>paragraph</p>
+<ul><li>line</li>
+<li>paragraph
+
+paragraph</li>
+</ul>
+<p>paragraph<br />line<br />line</p>
+<pre>Honor
+this whitespace
+</pre>
+<p>paragraph</p>
+<style><!--
+Do not alter!
+--></style>
+<p>paragraph <!-- do not alter --></p>
+<dl><dt>term</dt> <dd>paragraph
+
+<a href="xx"> <img src="yy"></a>
+
+paragraph</dd> </dl><div><a href="xx"> <img src="yy"></a></div>
+<p>Hello <a href="link"><br /><br />World</a></p>
+<p id="abc">Paragraph</p><div>Line</div> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wpautop-fails.in.html b/engine/tests/test_files/output/autop/wpautop-fails.in.html
new file mode 100644
index 000000000..9aa24be59
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wpautop-fails.in.html
@@ -0,0 +1,41 @@
+
+paragraph
+
+paragraph <div class="whatever"><blockquote>
+ paragraph
+ </blockquote>
+ line
+</div>
+
+paragraph
+<ul>
+<li>line</li>
+<li>paragraph
+
+paragraph</li>
+</ul>
+paragraph
+line<br>
+ line
+<pre>Honor
+this whitespace
+</pre>
+paragraph
+<style><!--
+Do not alter!
+--></style>
+paragraph <!-- do not alter -->
+<dl> <dt>term</dt> <dd>paragraph
+
+<a href="xx"> <img src="yy" /> </a>
+
+paragraph</dd> </dl>
+<div><a href="xx"> <img src="yy" /> </a></div>
+
+Hello <a href="link">
+
+World</a>
+
+<p id="abc">Paragraph</p>
+
+<div>Line</div> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wysiwyg-test.exp.html b/engine/tests/test_files/output/autop/wysiwyg-test.exp.html
new file mode 100644
index 000000000..1f23d6154
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wysiwyg-test.exp.html
@@ -0,0 +1,51 @@
+
+<p>&nbps;<br />&#8820;</p>
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+<p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul><li>Unordered</li>
+ <li>List</li>
+</ul>
+<p>Paragraph between lists</p>
+<ol><li>Ordered</li>
+ <li>List</li>
+</ol>
+<p>Paragraph between lists</p>
+<ul><li>OL list</li>
+ <li>nested
+ <ol><li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+<p>Paragraph between lists</p>
+<table border="0"><tbody><tr></tr><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=0</td>
+ </tr></tbody></table>
+<p>Paragraph</p>
+<ol><li>UL list</li>
+ <li>nested
+ <ul><li>inside a</li>
+ <li>OL list</li>
+ </ul></li>
+</ol>
+<p>Paragraph between tables</p>
+<table border="1" cellpadding="5"><tbody><tr><td>Table with border=1</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>cellpadding = 5</td>
+ </tr></tbody></table>
+<p>Paragraph between tables</p>
+<table border="2"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=2</td>
+ </tr></tbody></table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wysiwyg-test.in.html b/engine/tests/test_files/output/autop/wysiwyg-test.in.html
new file mode 100644
index 000000000..733b0e2ec
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wysiwyg-test.in.html
@@ -0,0 +1,79 @@
+&nbps;
+&#8820;
+<h1>h1</h1>
+Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span>
+<h2>h2</h2>
+Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span>
+<h3>h3</h3>
+Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span>
+<blockquote>Blockquoted paragraph</blockquote>
+Paragraph following blockquote
+<ul>
+ <li>Unordered</li>
+ <li>List</li>
+</ul>
+Paragraph between lists
+<ol>
+ <li>Ordered</li>
+ <li>List</li>
+</ol>
+Paragraph between lists
+<ul>
+ <li>OL list</li>
+ <li>nested
+ <ol>
+ <li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+Paragraph between lists
+<table border="0">
+ <tbody>
+ <tr>
+ </tr>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=0</td>
+ </tr>
+ </tbody>
+</table>
+Paragraph
+<ol>
+ <li>UL list</li>
+ <li>nested
+ <ul>
+ <li>inside a</li>
+ <li>OL list</li>
+ </ul>
+ </li>
+</ol>
+Paragraph between tables
+<table border="1" cellpadding="5">
+ <tbody>
+ <tr>
+ <td>Table with border=1</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>cellpadding = 5</td>
+ </tr>
+ </tbody>
+</table>
+Paragraph between tables
+<table border="2">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=2</td>
+ </tr>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/engine/tests/test_files/plugin_18/manifest.xml b/engine/tests/test_files/plugin_18/manifest.xml
index 5d788616a..c8b407511 100644
--- a/engine/tests/test_files/plugin_18/manifest.xml
+++ b/engine/tests/test_files/plugin_18/manifest.xml
@@ -7,7 +7,7 @@
<description>A longer, more interesting description.</description>
<website>http://www.elgg.org/</website>
<repository>https://github.com/Elgg/Elgg</repository>
- <bugtracker>http://trac.elgg.org</bugtracker>
+ <bugtracker>https://github.com/elgg/elgg/issues</bugtracker>
<donations>http://elgg.org/supporter.php</donations>
<copyright>(C) Elgg Foundation 2011</copyright>
<license>GNU General Public License version 2</license>
diff --git a/engine/tests/test_files/xxe/external_entity.txt b/engine/tests/test_files/xxe/external_entity.txt
new file mode 100644
index 000000000..536aca34d
--- /dev/null
+++ b/engine/tests/test_files/xxe/external_entity.txt
@@ -0,0 +1 @@
+secret \ No newline at end of file
diff --git a/engine/tests/test_files/xxe/request.xml b/engine/tests/test_files/xxe/request.xml
new file mode 100644
index 000000000..4390f9db2
--- /dev/null
+++ b/engine/tests/test_files/xxe/request.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE foo [
+<!ELEMENT methodName ANY >
+<!ENTITY xxe SYSTEM "%s" >
+]>
+<methodCall>
+ <methodName>test&xxe;test</methodName>
+</methodCall>
diff --git a/gpl-plugins b/gpl-plugins
new file mode 100644
index 000000000..925ca6ec2
--- /dev/null
+++ b/gpl-plugins
@@ -0,0 +1,20 @@
+videolist
+dokuwiki
+friendrequest
+opensearch
+identica
+languages
+registrationterms
+custom_index_widgets
+river_privacy
+habitorio_theme
+lightpics
+colorbox
+event_calendar
+openid_client
+openid_server
+openid_api
+beechat
+simplepie
+profile_widgets
+html5
diff --git a/htaccess_dist b/htaccess_dist
index bf163c69e..44d129475 100644
--- a/htaccess_dist
+++ b/htaccess_dist
@@ -1,14 +1,11 @@
# Elgg htaccess directives
-# Copyright Curverider Ltd 2008-2009
-# License http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
-# Link http://elgg.org/
<Files "htaccess_dist">
order allow,deny
deny from all
</Files>
-# Don't listing directory
+# Don't allow listing directories
Options -Indexes
# Follow symbolic links
@@ -17,13 +14,28 @@ Options +FollowSymLinks
# Default handler
DirectoryIndex index.php
-# Turn on expiry
+
+############################
+# BROWSER CACHING
+
+# The expires module controls the Expires and Cache-Control headers. Elgg sets
+# these for dynamically generated files so this is just for static files.
<IfModule mod_expires.c>
ExpiresActive On
- ExpiresDefault "access plus 10 years"
+ ExpiresDefault "access plus 1 year"
</IfModule>
-# php 5, apache 1 and 2
+# Conditional requests are controlled through Last-Modified and ETag headers.
+# Elgg sets these on dynamically generated cacheable files so this is just for
+# static files. Note: Apache sends Last-Modified by default on static files so
+# I don't think we need to be sending ETag for these files.
+<FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|css|ico)$">
+ FileETag MTime Size
+</FilesMatch>
+
+
+############################
+# PHP SETTINGS
<IfModule mod_php5.c>
# limit the maximum memory consumed by the php script to 64 MB
php_value memory_limit 64M
@@ -37,6 +49,10 @@ DirectoryIndex index.php
php_value display_errors 0
</IfModule>
+
+############################
+# COMPRESSION
+
# Turn on mod_gzip if available
<IfModule mod_gzip.c>
mod_gzip_on yes
@@ -75,13 +91,9 @@ DirectoryIndex index.php
</IfModule>
-# Configure ETags
-<FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|ico)$">
- FileETag MTime Size
-</FilesMatch>
-# Add Proper MIME-Type for Favicon to allow expires to work
-AddType image/vnd.microsoft.icon .ico
+############################
+# REWRITE RULES
<IfModule mod_rewrite.c>
@@ -100,36 +112,44 @@ RewriteEngine on
#
#RewriteBase /
+
+# If your users receive the message "Sorry, logging in from a different domain is not permitted"
+# you must make sure your login form is served from the same hostname as your site pages.
+# See http://docs.elgg.org/wiki/Login_token_mismatch_error for more info.
+#
+# If you must add RewriteRules to change hostname, add them directly below (above all the others)
+
+
# In for backwards compatibility
-RewriteRule ^pg\/([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1&%{QUERY_STRING}
-RewriteRule ^pg\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2&%{QUERY_STRING}
-RewriteRule ^tag\/(.+)\/?$ engine/handlers/page_handler.php?handler=search&page=$1
+RewriteRule ^pg\/([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1&%{QUERY_STRING} [L]
+RewriteRule ^pg\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2&%{QUERY_STRING} [L]
+RewriteRule ^tag\/(.+)\/?$ engine/handlers/page_handler.php?handler=search&page=$1 [L]
-RewriteRule ^action\/([A-Za-z0-9\_\-\/]+)$ engine/handlers/action_handler.php?action=$1&%{QUERY_STRING}
+RewriteRule ^action\/([A-Za-z0-9\_\-\/]+)$ engine/handlers/action_handler.php?action=$1&%{QUERY_STRING} [L]
-RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING}
+RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING} [L]
-RewriteRule ^services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/service_handler.php?handler=$1&request=$2&%{QUERY_STRING}
+RewriteRule ^services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/service_handler.php?handler=$1&request=$2&%{QUERY_STRING} [L]
-RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2
-RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4
+RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2 [L]
+RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4 [L]
-RewriteRule xml-rpc.php engine/handlers/xml-rpc_handler.php
-RewriteRule mt/mt-xmlrpc.cgi engine/handlers/xml-rpc_handler.php
+RewriteRule xml-rpc.php engine/handlers/xml-rpc_handler.php [L]
+RewriteRule mt/mt-xmlrpc.cgi engine/handlers/xml-rpc_handler.php [L]
# rule for rewrite module test during install - can be removed after installation
-RewriteRule ^rewrite.php$ install.php
+RewriteRule ^rewrite.php$ install.php [L]
# Everything else that isn't a file gets routed through the page handler
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1 [QSA]
+RewriteRule ^([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2 [QSA]
+RewriteRule ^([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2 [QSA,L]
</IfModule>
diff --git a/install/ElggInstaller.php b/install/ElggInstaller.php
index 03c84a43e..78cdde90f 100644
--- a/install/ElggInstaller.php
+++ b/install/ElggInstaller.php
@@ -157,7 +157,7 @@ class ElggInstaller {
'password',
);
foreach ($requiredParams as $key) {
- if (!array_key_exists($key, $params)) {
+ if (empty($params[$key])) {
$msg = elgg_echo('install:error:requiredfield', array($key));
throw new InstallationException($msg);
}
@@ -1148,11 +1148,21 @@ class ElggInstaller {
foreach ($formVars as $field => $info) {
if ($info['required'] == TRUE && !$submissionVars[$field]) {
$name = elgg_echo("install:database:label:$field");
- register_error("$name is required");
+ register_error(elgg_echo('install:error:requiredfield', array($name)));
return FALSE;
}
}
+ // according to postgres documentation: SQL identifiers and key words must
+ // begin with a letter (a-z, but also letters with diacritical marks and
+ // non-Latin letters) or an underscore (_). Subsequent characters in an
+ // identifier or key word can be letters, underscores, digits (0-9), or dollar signs ($).
+ // Refs #4994
+ if (!preg_match("/^[a-zA-Z_][\w]*$/", $submissionVars['dbprefix'])) {
+ register_error(elgg_echo('install:error:database_prefix'));
+ return FALSE;
+ }
+
return $this->checkDatabaseSettings(
$submissionVars['dbuser'],
$submissionVars['dbpassword'],
@@ -1404,7 +1414,7 @@ class ElggInstaller {
$submissionVars['wwwroot'] = sanitise_filepath($submissionVars['wwwroot']);
$site = new ElggSite();
- $site->name = $submissionVars['sitename'];
+ $site->name = strip_tags($submissionVars['sitename']);
$site->url = $submissionVars['wwwroot'];
$site->access_id = ACCESS_PUBLIC;
$site->email = $submissionVars['siteemail'];
@@ -1519,22 +1529,27 @@ class ElggInstaller {
protected function createAdminAccount($submissionVars, $login = FALSE) {
global $CONFIG;
- $guid = register_user(
- $submissionVars['username'],
- $submissionVars['password1'],
- $submissionVars['displayname'],
- $submissionVars['email']
- );
+ try {
+ $guid = register_user(
+ $submissionVars['username'],
+ $submissionVars['password1'],
+ $submissionVars['displayname'],
+ $submissionVars['email']
+ );
+ } catch (Exception $e) {
+ register_error($e->getMessage());
+ return false;
+ }
if (!$guid) {
register_error(elgg_echo('install:admin:cannot_create'));
- return FALSE;
+ return false;
}
$user = get_entity($guid);
if (!$user) {
register_error(elgg_echo('install:error:loadadmin'));
- return FALSE;
+ return false;
}
elgg_set_ignore_access(TRUE);
@@ -1543,7 +1558,7 @@ class ElggInstaller {
} else {
datalist_set('admin_registered', 1);
}
- elgg_set_ignore_access(FALSE);
+ elgg_set_ignore_access(false);
// add validation data to satisfy user validation plugins
create_metadata($guid, 'validated', TRUE, '', 0, ACCESS_PUBLIC);
diff --git a/install/ElggRewriteTester.php b/install/ElggRewriteTester.php
index c01510f60..ab68da2b7 100644
--- a/install/ElggRewriteTester.php
+++ b/install/ElggRewriteTester.php
@@ -154,6 +154,8 @@ class ElggRewriteTester {
if ($this->serverSupportsRemoteRead == FALSE) {
$msg = elgg_echo('install:warning:rewrite:unknown', array($url));
+ $msg .= elgg_view('install/js_rewrite_check', array('url' => $url));
+
return array(
'severity' => 'warning',
'message' => $msg,
@@ -165,6 +167,8 @@ class ElggRewriteTester {
$msg = "$serverString\n\n";
if (!isset($this->htaccessIssue)) {
$msg .= elgg_echo('install:error:rewrite:allowoverride');
+ $msg .= elgg_view('install/js_rewrite_check', array('url' => $url));
+
return array(
'severity' => 'failure',
'message' => $msg,
diff --git a/install/cli/sample_installer.php b/install/cli/sample_installer.php
index 954169a6a..a51f9aae4 100644
--- a/install/cli/sample_installer.php
+++ b/install/cli/sample_installer.php
@@ -1,12 +1,13 @@
<?php
+
/**
* Sample cli installer script
*/
-require_once(dirname(dirname(__FILE__)) . "/ElggInstaller.php");
-
-$installer = new ElggInstaller();
+// change to true to run this script. Change back to false when done.
+$enabled = false;
+// none of the following may be empty
$params = array(
// database parameters
'dbuser' => '',
@@ -26,5 +27,41 @@ $params = array(
'password' => '',
);
+
+// Do not edit below this line. //////////////////////////////
+
+
+if (!$enabled) {
+ echo "To enable this script, change \$enabled to true.\n";
+ echo "You *must* disable this script after a successful installation.\n";
+ exit;
+}
+
+if (PHP_SAPI !== 'cli') {
+ echo "You must use the command line to run this script.";
+ exit;
+}
+
+require_once(dirname(dirname(__FILE__)) . "/ElggInstaller.php");
+
+$installer = new ElggInstaller();
+
// install and create the .htaccess file
$installer->batchInstall($params, TRUE);
+
+// at this point installation has completed (otherwise an exception halted execution).
+// try to rewrite the script to disable it.
+if (is_writable(__FILE__)) {
+ $code = file_get_contents(__FILE__);
+ if (preg_match('~\\$enabled\\s*=\\s*(true|1)\\s*;~i', $code)) {
+ // looks safe to rewrite
+ $code = preg_replace('~\\$enabled\\s*=\\s*(true|1)\\s*;~i', '$enabled = false;', $code);
+ file_put_contents(__FILE__, $code);
+
+ echo "\nNote: This script has been disabled for your safety.\n";
+ exit;
+ }
+}
+
+echo "\nWarning: You *must* disable this script by setting \$enabled = false;.\n";
+echo "Leaving this script enabled could endanger your installation.\n";
diff --git a/install/js/install.js b/install/js/install.js
index 49b2be10c..37e5b0dc3 100644
--- a/install/js/install.js
+++ b/install/js/install.js
@@ -19,3 +19,24 @@ $(function() {
}
});
});
+
+elgg = {
+ installer: {}
+};
+
+/**
+ * Check the rewrite address for "success" and then allows the installation to proceed.
+ */
+elgg.installer.rewriteTest = function(url, success_msg, nextURL) {
+ $.ajax(url, {
+ success: function(data, status, xhr) {
+ if (data == 'success') {
+ $('.elgg-require-rewrite li').attr('class', 'pass');
+ $('.elgg-require-rewrite li').html('<p>' + success_msg + '</p>');
+ $('.elgg-install-nav a.elgg-state-disabled')
+ .removeClass('elgg-state-disabled')
+ .attr('href', nextURL);
+ }
+ }
+ });
+}
diff --git a/install/languages/en.php b/install/languages/en.php
index 3a692e020..531379b1e 100644
--- a/install/languages/en.php
+++ b/install/languages/en.php
@@ -124,6 +124,7 @@ If you are ready to proceed, click the Next button.",
'install:error:htaccess' => 'Unable to create an .htaccess',
'install:error:settings' => 'Unable to create the settings file',
'install:error:databasesettings' => 'Unable to connect to the database with these settings.',
+ 'install:error:database_prefix' => 'Invalid characters in database prefix',
'install:error:oldmysql' => 'MySQL must be version 5.0 or above. Your server is using %s.',
'install:error:nodatabase' => 'Unable to use database %s. It may not exist.',
'install:error:cannotloadtables' => 'Cannot load the database tables',
@@ -131,7 +132,7 @@ If you are ready to proceed, click the Next button.",
'install:error:readsettingsphp' => 'Unable to read engine/settings.example.php',
'install:error:writesettingphp' => 'Unable to write engine/settings.php',
'install:error:requiredfield' => '%s is required',
- 'install:error:relative_path' => 'We don\'t think "%s" is an absoluate path for your data directory',
+ 'install:error:relative_path' => 'We don\'t think "%s" is an absolute path for your data directory',
'install:error:datadirectoryexists' => 'Your data directory %s does not exist.',
'install:error:writedatadirectory' => 'Your data directory %s is not writable by the web server.',
'install:error:locationdatadirectory' => 'Your data directory %s must be outside of your install path for security.',
@@ -154,7 +155,7 @@ If you are ready to proceed, click the Next button.",
'install:error:rewrite:htaccess:cannot_copy' => 'A unknown error occurred while creating the .htaccess file. You need to manually copy htaccess_dist to .htaccess in Elgg\'s directory.',
'install:error:rewrite:altserver' => 'The rewrite rules test failed. You need to configure your web server with Elgg\'s rewrite rules and try again.',
'install:error:rewrite:unknown' => 'Oof. We couldn\'t figure out what kind of web server is running on your server and it failed the rewrite rules. We cannot offer any specific advice. Please check the troubleshooting link.',
- 'install:warning:rewrite:unknown' => 'Your server does not support automatic testing of the rewrite rules. You can continue the installation, but you may experience problems with your site. You can manually test the rewrite rules by clicking this link: <a href="%s" target="_blank">test</a>. You will see the word success if the rules are working.',
+ 'install:warning:rewrite:unknown' => 'Your server does not support automatic testing of the rewrite rules and your browser does not support checking via JavaScript. You can continue the installation, but you may experience problems with your site. You can manually test the rewrite rules by clicking this link: <a href="%s" target="_blank">test</a>. You will see the word success if the rules are working.',
);
add_translation("en", $english);
diff --git a/js/lib/elgglib.js b/js/lib/elgglib.js
index 81209ebd0..a8e187f1d 100644
--- a/js/lib/elgglib.js
+++ b/js/lib/elgglib.js
@@ -283,7 +283,7 @@ elgg.normalize_url = function(url) {
}
// 'javascript:'
- else if (url.indexOf('javascript:') === 0) {
+ else if (url.indexOf('javascript:') === 0 || url.indexOf('mailto:') === 0 ) {
return url;
}
@@ -347,8 +347,12 @@ elgg.system_messages = function(msgs, delay, type) {
msgs.forEach(appendMessage);
- $(messages_html.join('')).appendTo(systemMessages)
- .animate({opacity: '1.0'}, delay).fadeOut('slow');
+ if (type != 'error') {
+ $(messages_html.join('')).appendTo(systemMessages)
+ .animate({opacity: '1.0'}, delay).fadeOut('slow');
+ } else {
+ $(messages_html.join('')).appendTo(systemMessages);
+ }
};
/**
@@ -470,8 +474,8 @@ elgg.parse_str = function(string) {
re = /([^&=]+)=?([^&]*)/g;
while (result = re.exec(string)) {
- key = decodeURIComponent(result[1])
- value = decodeURIComponent(result[2])
+ key = decodeURIComponent(result[1].replace(/\+/g, ' '));
+ value = decodeURIComponent(result[2].replace(/\+/g, ' '));
params[key] = value;
}
diff --git a/js/lib/languages.js b/js/lib/languages.js
index a8ba72c31..d218cbc4f 100644
--- a/js/lib/languages.js
+++ b/js/lib/languages.js
@@ -4,6 +4,9 @@
*/
elgg.provide('elgg.config.translations');
+// default language - required by unit tests
+elgg.config.language = 'en';
+
/**
* Analagous to the php version. Merges translations for a
* given language into the current translations map.
@@ -25,13 +28,11 @@ elgg.reload_all_translations = function(language) {
var lang = language || elgg.get_language();
var url, options;
- if (elgg.config.simplecache_enabled) {
- url = 'cache/js/default/languages/' + lang + '.' + elgg.config.lastcache + '.js';
- options = {};
- } else {
- url = 'ajax/view/js/languages';
- options = {data: {language: lang}};
- }
+ url = 'ajax/view/js/languages';
+ options = {data: {language: lang}};
+ if (elgg.config.simplecache_enabled) {
+ options.data.lc = elgg.config.lastcache;
+ }
options['success'] = function(json) {
elgg.add_translation(lang, json);
diff --git a/js/lib/security.js b/js/lib/security.js
index 61aa1cfcd..9c12f8586 100644
--- a/js/lib/security.js
+++ b/js/lib/security.js
@@ -7,6 +7,8 @@ elgg.security.token = {};
elgg.security.tokenRefreshFailed = false;
+elgg.security.tokenRefreshTimer = null;
+
/**
* Sets the currently active security token and updates all forms and links on the current page.
*
@@ -30,31 +32,17 @@ elgg.security.setToken = function(json) {
};
/**
- * Security tokens time out, so lets refresh those every so often.
+ * Security tokens time out so we refresh those every so often.
*
- * @todo handle error and bad return data
+ * @private
*/
elgg.security.refreshToken = function() {
elgg.action('security/refreshtoken', function(data) {
-
- // @todo might want to move this to setToken() once http://trac.elgg.org/ticket/3127
- // is implemented. It's here right now to avoid soggy code.
- if (!data || !(data.output.__elgg_ts && data.output.__elgg_token)) {
- elgg.register_error(elgg.echo('js:security:token_refresh_failed', [elgg.get_site_url()]));
- elgg.security.tokenRefreshFailed = true;
-
- // don't setToken because we refresh every 5 minutes and tokens are good for 1
- // hour by default
- return;
- }
-
- // if had problems last time, let them know it's working now
- if (elgg.security.tokenRefreshFailed) {
- elgg.system_message(elgg.echo('js:security:token_refreshed', [elgg.get_site_url()]));
- elgg.security.tokenRefreshFailed = false;
+ if (data && data.output.__elgg_ts && data.output.__elgg_token) {
+ elgg.security.setToken(data.output);
+ } else {
+ clearInterval(elgg.security.tokenRefreshTimer);
}
-
- elgg.security.setToken(data.output);
});
};
@@ -112,9 +100,8 @@ elgg.security.addToken = function(data) {
};
elgg.security.init = function() {
- //refresh security token every 5 minutes
- //this is set in the js/elgg PHP view.
- setInterval(elgg.security.refreshToken, elgg.security.interval);
+ // elgg.security.interval is set in the js/elgg PHP view.
+ elgg.security.tokenRefreshTimer = setInterval(elgg.security.refreshToken, elgg.security.interval);
};
elgg.register_hook_handler('boot', 'system', elgg.security.init); \ No newline at end of file
diff --git a/js/lib/session.js b/js/lib/session.js
index fa3d60aa9..a8d52733c 100644
--- a/js/lib/session.js
+++ b/js/lib/session.js
@@ -14,9 +14,9 @@ elgg.provide('elgg.session');
* {string} options[domain]
* {boolean} options[secure]
*
- * @return {string} The value of the cookie, if only name is specified
+ * @return {string|undefined} The value of the cookie, if only name is specified. Undefined if no value set
*/
-elgg.session.cookie = function (name, value, options) {
+elgg.session.cookie = function(name, value, options) {
var cookies = [], cookie = [], i = 0, date, valid = true;
//elgg.session.cookie()
@@ -47,21 +47,19 @@ elgg.session.cookie = function (name, value, options) {
}
cookies.push(name + '=' + value);
-
- if (elgg.isNumber(options.expires)) {
- if (elgg.isNumber(options.expires)) {
- date = new Date();
- date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
- } else if (options.expires.toUTCString) {
- date = options.expires;
- } else {
- valid = false;
- }
-
- if (valid) {
- cookies.push('expires=' + date.toUTCString());
- }
- }
+
+ if (options.expires) {
+ if (elgg.isNumber(options.expires)) {
+ date = new Date();
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
+ } else if (options.expires.toUTCString) {
+ date = options.expires;
+ }
+
+ if (date) {
+ cookies.push('expires=' + date.toUTCString());
+ }
+ }
// CAUTION: Needed to parenthesize options.path and options.domain
// in the following expressions, otherwise they evaluate to undefined
diff --git a/js/lib/ui.js b/js/lib/ui.js
index 616e71d54..413078b4f 100644
--- a/js/lib/ui.js
+++ b/js/lib/ui.js
@@ -10,7 +10,7 @@ elgg.ui.init = function () {
});
$('.elgg-system-messages li').animate({opacity: 0.9}, 6000);
- $('.elgg-system-messages li').fadeOut('slow');
+ $('.elgg-system-messages li.elgg-state-success').fadeOut('slow');
$('[rel=toggle]').live('click', elgg.ui.toggles);
@@ -283,7 +283,7 @@ elgg.ui.initDatePicker = function() {
dataType: "script",
cache: true,
success: loadDatePicker,
- error: loadDatePicker, // english language is already loaded.
+ error: loadDatePicker // english language is already loaded.
});
}
};
diff --git a/js/lib/ui.river.js b/js/lib/ui.river.js
index a56a664a4..c103fabb3 100644
--- a/js/lib/ui.river.js
+++ b/js/lib/ui.river.js
@@ -1,14 +1,14 @@
-elgg.provide('elgg.ui.river');
-
-elgg.ui.river.init = function() {
- $('#elgg-river-selector').change(function() {
- var url = window.location.href;
- if (window.location.search.length) {
- url = url.substring(0, url.indexOf('?'));
- }
- url += '?' + $(this).val();
- elgg.forward(url);
- });
-};
-
+elgg.provide('elgg.ui.river');
+
+elgg.ui.river.init = function() {
+ $('#elgg-river-selector').change(function() {
+ var url = window.location.href;
+ if (window.location.search.length) {
+ url = url.substring(0, url.indexOf('?'));
+ }
+ url += '?' + $(this).val();
+ elgg.forward(url);
+ });
+};
+
elgg.register_hook_handler('init', 'system', elgg.ui.river.init); \ No newline at end of file
diff --git a/js/lib/ui.userpicker.js b/js/lib/ui.userpicker.js
index 7298da114..669b84cdb 100644
--- a/js/lib/ui.userpicker.js
+++ b/js/lib/ui.userpicker.js
@@ -107,11 +107,11 @@ elgg.userpicker.viewUser = function(info) {
* @return Object
*/
elgg.userpicker.getSearchParams = function(obj) {
- if (obj.element.siblings('[name=match_on]').attr('checked')) {
+ if (obj.element.parent('.elgg-user-picker').find('input[name=match_on]').attr('checked')) {
return {'match_on[]': 'friends', 'term' : obj.term};
} else {
return {'match_on[]': 'users', 'term' : obj.term};
}
};
-elgg.register_hook_handler('init', 'system', elgg.userpicker.init); \ No newline at end of file
+elgg.register_hook_handler('init', 'system', elgg.userpicker.init);
diff --git a/js/tests/ElggLibTest.js b/js/tests/ElggLibTest.js
index a29ebf743..bd39e7fb3 100644
--- a/js/tests/ElggLibTest.js
+++ b/js/tests/ElggLibTest.js
@@ -78,6 +78,7 @@ ElggLibTest.prototype.testNormalizeUrl = function() {
['https://example.com', 'https://example.com'],
['http://example-time.com', 'http://example-time.com'],
['//example.com', '//example.com'],
+ ['mod/my_plugin/graphics/image.jpg', elgg.config.wwwroot + 'mod/my_plugin/graphics/image.jpg'],
['ftp://example.com/file', 'ftp://example.com/file'],
['mailto:brett@elgg.org', 'mailto:brett@elgg.org'],
@@ -99,7 +100,7 @@ ElggLibTest.prototype.testNormalizeUrl = function() {
['/mod/plugin/file.php', elgg.config.wwwroot + 'mod/plugin/file.php'],
['/mod/plugin/file.php?p=v&p2=v2', elgg.config.wwwroot + 'mod/plugin/file.php?p=v&p2=v2'],
['/rootfile.php', elgg.config.wwwroot + 'rootfile.php'],
- ['/rootfile.php?p=v&p2=v2', elgg.config.wwwroot + 'rootfile.php?p=v&p2=v2'],
+ ['/rootfile.php?p=v&p2=v2', elgg.config.wwwroot + 'rootfile.php?p=v&p2=v2']
].forEach(function(args) {
assertEquals(args[1], elgg.normalize_url(args[0]));
@@ -127,3 +128,13 @@ ElggLibTest.prototype.testParseUrl = function() {
});
};
+ElggLibTest.prototype.testParseStr = function() {
+
+ [
+ ["A+%2B+B=A+%2B+B", {"A + B": "A + B"}]
+
+ ].forEach(function(args) {
+ assertEquals(args[1], elgg.parse_str(args[0]));
+ });
+};
+
diff --git a/js/tests/README b/js/tests/README
index 4f86b27c6..f43c0c89d 100644
--- a/js/tests/README
+++ b/js/tests/README
@@ -12,9 +12,10 @@ based debuggers. Visit its wiki at the Google Code site for more information.
Sample Usage
============
1. Put jar file in the base directory of Elgg
- 2. Run the server: java -jar JsTestDriver-1.3.3d.jar --port 4224
+ 2. Run the server: java -jar JsTestDriver-1.3.5.jar --port 4224
3. Point a web browser at http://localhost:4224
- 4. Run the tests: java -jar JsTestDriver-1.3.3d.jar --config js/tests/jsTestDriver.conf --basePath . --tests all
+ 4. Click "Capture this browser"
+ 5. Run the tests: java -jar JsTestDriver-1.3.5.jar --config js/tests/jsTestDriver.conf --basePath . --tests all
Configuration Hints
diff --git a/languages/en.php b/languages/en.php
index bb5376a44..07407d1e1 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -105,6 +105,8 @@ $english = array(
'ElggPlugin:Dependencies:Priority:Before' => 'Before %s',
'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s is not installed',
'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Missing',
+
+ 'ElggPlugin:Dependencies:ActiveDependent' => 'There are other plugins that list %s as a dependency. You must disable the following plugins before disabling this one: %s',
'ElggPlugin:InvalidAndDeactivated' => '%s is an invalid plugin and has been deactivated.',
@@ -175,7 +177,7 @@ $english = array(
'ConfigurationException:NoSiteID' => "No site ID has been specified.",
'SecurityException:APIAccessDenied' => "Sorry, API access has been disabled by the administrator.",
'SecurityException:NoAuthMethods' => "No authentication methods were found that could authenticate this API request.",
- 'SecurityException:ForwardFailedToRedirect' => 'Redirect could not be issued due to headers already being sent. Halting execution for security. Search http://docs.elgg.org/ for more information.',
+ 'SecurityException:ForwardFailedToRedirect' => 'Redirect could not be issued due to headers already being sent. Halting execution for security. Output started in file %s at line %d. Search http://docs.elgg.org/ for more information.',
'InvalidParameterException:APIMethodOrFunctionNotSet' => "Method or function not set in call in expose_method()",
'InvalidParameterException:APIParametersArrayStructure' => "Parameters array structure is incorrect for call to expose method '%s'",
'InvalidParameterException:UnrecognisedHttpMethod' => "Unrecognised http method %s for api method '%s'",
@@ -229,6 +231,7 @@ $english = array(
'LoginException:PasswordFailure' => 'We could not log you in. Please check your username/email and password.',
'LoginException:AccountLocked' => 'Your account has been locked for too many log in failures.',
'LoginException:ChangePasswordFailure' => 'Failed current password check.',
+ 'LoginException:Unknown' => 'We could not log you in due to an unknown error.',
'deprecatedfunction' => 'Warning: This code uses the deprecated function \'%s\' and is not compatible with this version of Elgg',
@@ -358,6 +361,7 @@ $english = array(
'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'avatar' => 'Avatar',
+ 'avatar:noaccess' => "You're not allowed to edit this user's avatar",
'avatar:create' => 'Create your avatar',
'avatar:edit' => 'Edit avatar',
'avatar:preview' => 'Preview',
@@ -404,7 +408,8 @@ $english = array(
'profile:editdefault:delete:fail' => 'Removed default profile item field failed',
'profile:editdefault:delete:success' => 'Profile field deleted',
'profile:defaultprofile:reset' => 'Profile fields reset to the system default',
- 'profile:resetdefault' => 'Reset default profile',
+ 'profile:resetdefault' => 'Reset profile fields to system defaults',
+ 'profile:resetdefault:confirm' => 'Are you sure you want to delete your custom profile fields?',
'profile:explainchangefields' => "You can replace the existing profile fields with your own using the form below. \n\n Give the new profile field a label, for example, 'Favorite team', then select the field type (eg. text, url, tags), and click the 'Add' button. To re-order the fields drag on the handle next to the field label. To edit a field label - click on the label's text to make it editable. \n\n At any time you can revert back to the default profile set up, but you will lose any information already entered into custom fields on profile pages.",
'profile:editdefault:success' => 'New profile field added',
'profile:editdefault:fail' => 'Default profile could not be saved',
@@ -581,6 +586,7 @@ $english = array(
'admin:users' => "Users",
'admin:users:online' => 'Currently Online',
'admin:users:newest' => 'Newest',
+ 'admin:users:admins' => 'Administrators',
'admin:users:add' => 'Add New User',
'admin:users:description' => "This admin panel allows you to control user settings for your site. Choose an option below to get started.",
'admin:users:adduser:label' => "Click here to add a new user...",
@@ -591,10 +597,24 @@ $english = array(
'admin:settings' => 'Settings',
'admin:settings:basic' => 'Basic Settings',
'admin:settings:advanced' => 'Advanced Settings',
+ 'admin:settings:advanced/site_secret' => 'Site Secret',
'admin:site:description' => "This admin panel allows you to control global settings for your site. Choose an option below to get started.",
+ 'admin:settings:advanced:site_secret' => 'Site Secret',
'admin:site:opt:linktext' => "Configure site...",
'admin:site:access:warning' => "Changing the access setting only affects the permissions on content created in the future.",
+ 'admin:site:secret:intro' => 'Elgg uses a key to create security tokens for various purposes.',
+ 'admin:site:secret_regenerated' => "Your site secret has been regenerated.",
+ 'admin:site:secret:regenerate' => "Regenerate site secret",
+ 'admin:site:secret:regenerate:help' => "Note: This may inconvenience some users by invalidating tokens used in \"remember me\" cookies, e-mail validation requests, invitation codes, etc.",
+ 'site_secret:current_strength' => 'Key Strength',
+ 'site_secret:strength:weak' => "Weak",
+ 'site_secret:strength_msg:weak' => "We strongly recommend that you regenerate your site secret.",
+ 'site_secret:strength:moderate' => "Moderate",
+ 'site_secret:strength_msg:moderate' => "We recommend you regenerate your site secret for the best site security.",
+ 'site_secret:strength:strong' => "Strong",
+ 'site_secret:strength_msg:strong' => "&#x2713; Your site secret is sufficiently strong.",
+
'admin:dashboard' => 'Dashboard',
'admin:widget:online_users' => 'Online users',
'admin:widget:online_users:help' => 'Lists the users currently on the site',
@@ -661,6 +681,7 @@ $english = array(
'admin:notices:could_not_delete' => 'Could not delete notice.',
+ 'item:object:admin_notice' => 'Admin notice',
'admin:options' => 'Admin options',
@@ -686,7 +707,7 @@ $english = array(
'admin:plugins:label:author' => "Author",
'admin:plugins:label:copyright' => "Copyright",
'admin:plugins:label:categories' => 'Categories',
- 'admin:plugins:label:licence' => "Licence",
+ 'admin:plugins:label:licence' => "License",
'admin:plugins:label:website' => "URL",
'admin:plugins:label:repository' => "Code",
'admin:plugins:label:bugtracker' => "Report issue",
@@ -732,6 +753,7 @@ $english = array(
'admin:statistics:label:numusers' => "Number of users",
'admin:statistics:label:numonline' => "Number of users online",
'admin:statistics:label:onlineusers' => "Users online now",
+ 'admin:statistics:label:admins'=>"Admins",
'admin:statistics:label:version' => "Elgg version",
'admin:statistics:label:version:release' => "Release",
'admin:statistics:label:version:version' => "Version",
@@ -897,6 +919,7 @@ $english = array(
'total' => 'Total',
'learnmore' => "Click here to learn more.",
+ 'unknown_error' => 'Unknown error',
'content' => "content",
'content:latest' => 'Latest activity',
@@ -1052,6 +1075,10 @@ Once you have logged in, we highly recommend that you change your password.
'upgrading' => 'Upgrading...',
'upgrade:db' => 'Your database was upgraded.',
'upgrade:core' => 'Your Elgg installation was upgraded.',
+ 'upgrade:unlock' => 'Unlock upgrade',
+ 'upgrade:unlock:confirm' => "The database is locked for another upgrade. Running concurrent upgrades is dangerous. You should only continue if you know there is not another upgrade running. Unlock?",
+ 'upgrade:locked' => "Cannot upgrade. Another upgrade is running. To clear the upgrade lock, visit the Admin section.",
+ 'upgrade:unlock:success' => "Upgrade unlocked successfully.",
'upgrade:unable_to_upgrade' => 'Unable to upgrade.',
'upgrade:unable_to_upgrade_info' =>
'This installation cannot be upgraded because legacy views
@@ -1066,6 +1093,8 @@ Once you have logged in, we highly recommend that you change your password.
'update:twitter_api:deactivated' => 'Twitter API (previously Twitter Service) was deactivated during the upgrade. Please activate it manually if required.',
'update:oauth_api:deactivated' => 'OAuth API (previously OAuth Lib) was deactivated during the upgrade. Please activate it manually if required.',
+ 'upgrade:site_secret_warning:moderate' => "You are encouraged to regenerate your site key to improve system security. See Configure &gt; Settings &gt; Site Secret",
+ 'upgrade:site_secret_warning:weak' => "You are strongly encouraged to regenerate your site key to improve system security. See Configure &gt; Settings &gt; Site Secret",
'deprecated:function' => '%s() was deprecated by %s()',
@@ -1132,7 +1161,7 @@ If you requested this, click on the link below. Otherwise ignore this email.
'comments:count' => "%s comments",
- 'riveraction:annotation:generic_comment' => '%s commented on %s',
+ 'river:comment:object:default' => '%s commented on %s',
'generic_comments:add' => "Leave a comment",
'generic_comments:post' => "Post comment",
@@ -1146,6 +1175,7 @@ If you requested this, click on the link below. Otherwise ignore this email.
'generic_comment:failure' => "An unexpected error occurred when adding your comment.",
'generic_comment:none' => 'No comments',
'generic_comment:title' => 'Comment by %s',
+ 'generic_comment:on' => '%s on %s',
'generic_comment:email:subject' => 'You have a new comment!',
'generic_comment:email:body' => "You have a new comment on your item \"%s\" from %s. It reads:
@@ -1179,10 +1209,11 @@ You cannot reply to this email.",
* Action gatekeeper
*/
'actiongatekeeper:missingfields' => 'Form is missing __token or __ts fields',
- 'actiongatekeeper:tokeninvalid' => "We encountered an error (token mismatch). This probably means that the page you were using expired.",
+ 'actiongatekeeper:tokeninvalid' => "The page you were using had expired. Please try again.",
'actiongatekeeper:timeerror' => 'The page you were using has expired. Please refresh and try again.',
'actiongatekeeper:pluginprevents' => 'A extension has prevented this form from being submitted.',
'actiongatekeeper:uploadexceeded' => 'The size of file(s) uploaded exceeded the limit set by your site administrator',
+ 'actiongatekeeper:crosssitelogin' => "Sorry, logging in from a different domain is not permitted. Please try again.",
/**
@@ -1201,7 +1232,7 @@ You cannot reply to this email.",
* Javascript
*/
- 'js:security:token_refresh_failed' => 'Cannot contact %s. You may experience problems saving content.',
+ 'js:security:token_refresh_failed' => 'Failed to contact %s. You may experience problems saving content. Please refresh this page.',
'js:security:token_refreshed' => 'Connection to %s restored!',
/**
diff --git a/mod/admins b/mod/admins
deleted file mode 160000
-Subproject f4dc616708e41fa44dcb1e73e4fb399db596797
diff --git a/mod/assemblies b/mod/assemblies
deleted file mode 160000
-Subproject 6287dae7ae1018b455ccf622cf2f9cbeeff5283
diff --git a/mod/audio_html5 b/mod/audio_html5
deleted file mode 160000
-Subproject fdc3e162bb551ef0b5f961cef9ec838a38f672a
diff --git a/mod/beechat b/mod/beechat
deleted file mode 160000
-Subproject 8ed0cede5e2422b49327d3e47333032b2b66673
diff --git a/mod/beechat/README b/mod/beechat/README
new file mode 100644
index 000000000..5ff3f8467
--- /dev/null
+++ b/mod/beechat/README
@@ -0,0 +1,23 @@
+Beechat the first XMPP chat for Elgg
+====================================
+
+Beechat is a facebook like chat for elgg using the XMPP protocol. It requires the XMPP serveur ejabberd.
+
+Installation
+------------
+
+French Documentation
+
+http://github.com/beechannels/beechat/wikis/guide-dinstallation
+
+English Documentation
+
+http://github.com/beechannels/beechat/wikis/setup-guide
+
+Feedback
+--------
+
+We are relying on the [GitHub issues tracker][issues] linked from above for
+feedback. File bugs or other issues [here][issues].
+
+[issues]: http://github.com/beechannels/beechat/issues
diff --git a/mod/beechat/actions/get_connection.php b/mod/beechat/actions/get_connection.php
new file mode 100644
index 000000000..a31174179
--- /dev/null
+++ b/mod/beechat/actions/get_connection.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+
+ global $SESSION;
+
+ if ($SESSION->offsetExists('beechat_conn'))
+ echo $SESSION->offsetGet('beechat_conn');
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_details.php b/mod/beechat/actions/get_details.php
new file mode 100644
index 000000000..4944fc4a9
--- /dev/null
+++ b/mod/beechat/actions/get_details.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ gatekeeper();
+ header('Content-type: application/json');
+ $user = $_SESSION['user'];
+ $t = array('username' => $user->username,
+ 'password' => $user->password);
+
+ echo json_encode($t);
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_icons.php b/mod/beechat/actions/get_icons.php
new file mode 100644
index 000000000..33d447e2e
--- /dev/null
+++ b/mod/beechat/actions/get_icons.php
@@ -0,0 +1,52 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+ global $CONFIG;
+
+ if (!empty($_POST['beechat_roster_items_usernames']))
+ {
+ $rosterItemsUsernames = explode(',', $_POST['beechat_roster_items_usernames']);
+ /*foreach ($rosterItemsUsernames as $rosterItem)
+ {
+ }*/
+ $userFriendsEntities = $_SESSION['user']->getFriends('', 0, 0);
+
+ $res = array();
+ foreach ($rosterItemsUsernames as $value)
+ {
+ $found = false;
+ $splitjid = explode('@', $value);
+ $jid_name = $splitjid[0];
+ $jid_host = $splitjid[1];
+ foreach ($userFriendsEntities as $friend)
+ {
+ if ((strtolower($friend->username) == strtolower($jid_name) && $jid_host == elgg_get_plugin_setting("domain", "beechat")))
+ {
+ $res[$value] = array('small' => $friend->getIcon('small'), 'tiny' => $friend->getIcon('tiny'));
+ $found = true;
+ break;
+ }
+ }
+ if (!$found) {
+ $base = $CONFIG->wwwroot."mod/profile/graphics/default";
+ $res[$value] = array('small' => $base."small.gif", 'tiny' => $base."tiny.gif");
+ }
+ }
+ echo json_encode($res);
+ }
+ else
+ echo json_encode(null);
+
+ exit();
+
+?>
diff --git a/mod/beechat/actions/get_state.php b/mod/beechat/actions/get_state.php
new file mode 100644
index 000000000..6cfd2f725
--- /dev/null
+++ b/mod/beechat/actions/get_state.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+
+ global $SESSION;
+
+ if ($SESSION->offsetExists('beechat_state'))
+ echo $SESSION->offsetGet('beechat_state');
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_statuses.php b/mod/beechat/actions/get_statuses.php
new file mode 100644
index 000000000..6f7620beb
--- /dev/null
+++ b/mod/beechat/actions/get_statuses.php
@@ -0,0 +1,41 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+ $usernames = get_input('beechat_roster_items_usernames');
+ if (!empty($usernames))
+ {
+ $iconSize = 'small';
+ $rosterItemsUsernames = explode(',', $usernames);
+ $userFriendsEntities = $_SESSION['user']->getFriends('', 1000000000, 0);
+
+ $res = array();
+ foreach ($rosterItemsUsernames as $value)
+ {
+ foreach ($userFriendsEntities as $friend)
+ {
+ if (strtolower($friend->username) == strtolower($value))
+ {
+ $status = get_entities_from_metadata("state", "current", "object", "status", $friend->get('guid'));
+ $res[$value] = ($status != false) ? $status[0]->description : '';
+ break;
+ }
+ }
+ }
+ echo json_encode($res);
+ }
+ else
+ echo json_encode(null);
+
+ exit();
+
+?>
diff --git a/mod/beechat/actions/join_groupchat.php b/mod/beechat/actions/join_groupchat.php
new file mode 100644
index 000000000..c694d7957
--- /dev/null
+++ b/mod/beechat/actions/join_groupchat.php
@@ -0,0 +1,15 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$group = get_entity(get_input('group_guid'));
+
+if ($user && $group) {
+ if (!check_entity_relationship($user->guid, 'groupchat', $group->guid)) {
+ error_log("joinen ok");
+ add_entity_relationship($user->guid, 'groupchat', $group->guid);
+}
+}
+echo "OK";
+error_log("join ok");
+
+?>
diff --git a/mod/beechat/actions/leave_groupchat.php b/mod/beechat/actions/leave_groupchat.php
new file mode 100644
index 000000000..e04ab8846
--- /dev/null
+++ b/mod/beechat/actions/leave_groupchat.php
@@ -0,0 +1,12 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$group = get_entity(get_input('group_guid'));
+
+if ($user && $group) {
+ if (check_entity_relationship($user->guid, 'groupchat', $group->guid))
+ remove_entity_relationship($user->guid, 'groupchat', $group->guid);
+}
+error_log("leave ok");
+echo "OK";
+?>
diff --git a/mod/beechat/actions/save_state.php b/mod/beechat/actions/save_state.php
new file mode 100644
index 000000000..f8a61c580
--- /dev/null
+++ b/mod/beechat/actions/save_state.php
@@ -0,0 +1,29 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+// gatekeeper();
+
+ if (elgg_is_logged_in())
+ {
+
+ global $SESSION;
+
+ if (!empty($_POST['beechat_state']))
+ {
+ $SESSION->offsetSet('beechat_state', $_POST['beechat_state']);
+ }
+ elseif (!empty($_POST['beechat_conn']))
+ {
+ $SESSION->offsetSet('beechat_conn', get_input('beechat_conn'));
+ }
+ }
+ exit();
+?>
diff --git a/mod/beechat/classes/BeechatSync.php b/mod/beechat/classes/BeechatSync.php
new file mode 100644
index 000000000..e0a2f90b8
--- /dev/null
+++ b/mod/beechat/classes/BeechatSync.php
@@ -0,0 +1,37 @@
+<?php
+
+class BeechatSync {
+ static function onFriendCreate($event, $object_type, $relationship) {
+ if ($relationship->relationship == 'friendrequest') {
+ elgg_load_library('elgg:beechat');
+ $friend = get_entity($relationship->guid_two);
+ // create friend request
+ ejabberd_friend_request(elgg_get_logged_in_user_entity(), $friend);
+ }
+ }
+ static function onFriendDelete($event, $object_type, $relationship) {
+ if ($relationship->relationship == 'friendrequest') {
+ elgg_load_library('elgg:beechat');
+ $subject = get_entity($relationship->guid_two);
+ // here friend is guid_one because is the one initiating
+ $friend = get_entity($relationship->guid_one);
+ $friends = $friend->isFriendsWith($subject->guid);
+ if ($friends) {
+ // accept friend request
+ ejabberd_friend_accept(elgg_get_logged_in_user_entity(), $friend);
+ } else {
+ // decline friend request
+ ejabberd_friend_deny(elgg_get_logged_in_user_entity(), $friend);
+ }
+ }
+ elseif ($relationship->relationship == 'friend') {
+ elgg_load_library('elgg:beechat');
+ $subject = get_entity($relationship->guid_one);
+ $friend = get_entity($relationship->guid_two);
+ // delete friendship
+ ejabberd_friend_remove(elgg_get_logged_in_user_entity(), $friend);
+ }
+
+ }
+
+}
diff --git a/mod/beechat/disablechat.php b/mod/beechat/disablechat.php
new file mode 100644
index 000000000..490fb327b
--- /dev/null
+++ b/mod/beechat/disablechat.php
@@ -0,0 +1,8 @@
+<?php
+ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+ if (elgg_is_logged_in()) {
+ elgg_get_logged_in_user_entity()->chatenabled = false;
+ system_message(elgg_echo("beechat:disabled"));
+ }
+ forward($_SERVER['HTTP_REFERER']);
+?>
diff --git a/mod/beechat/enablechat.php b/mod/beechat/enablechat.php
new file mode 100644
index 000000000..5d3de7e2a
--- /dev/null
+++ b/mod/beechat/enablechat.php
@@ -0,0 +1,8 @@
+<?php
+ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+ if (elgg_is_logged_in()) {
+ elgg_get_logged_in_user_entity()->chatenabled = true;
+ system_message(elgg_echo("beechat:enabled"));
+ }
+ forward($_SERVER['HTTP_REFERER']);
+?>
diff --git a/mod/beechat/graphics/icons/bullet_arrow_down.png b/mod/beechat/graphics/icons/bullet_arrow_down.png
new file mode 100644
index 000000000..9b23c06d7
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_arrow_down.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_arrow_up.png b/mod/beechat/graphics/icons/bullet_arrow_up.png
new file mode 100644
index 000000000..24df0f421
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_arrow_up.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_black.png b/mod/beechat/graphics/icons/bullet_black.png
new file mode 100644
index 000000000..57619706d
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_black.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_blue.png b/mod/beechat/graphics/icons/bullet_blue.png
new file mode 100644
index 000000000..a7651ec8a
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_blue.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_delete.png b/mod/beechat/graphics/icons/bullet_delete.png
new file mode 100644
index 000000000..bd6271b24
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_delete.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_error.png b/mod/beechat/graphics/icons/bullet_error.png
new file mode 100644
index 000000000..bca2b491f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_error.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_green.png b/mod/beechat/graphics/icons/bullet_green.png
new file mode 100644
index 000000000..058ad261f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_green.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_orange.png b/mod/beechat/graphics/icons/bullet_orange.png
new file mode 100644
index 000000000..fa63024e5
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_orange.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_pink.png b/mod/beechat/graphics/icons/bullet_pink.png
new file mode 100644
index 000000000..0c9f73e3f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_pink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_purple.png b/mod/beechat/graphics/icons/bullet_purple.png
new file mode 100644
index 000000000..52ba5036b
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_purple.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_red.png b/mod/beechat/graphics/icons/bullet_red.png
new file mode 100644
index 000000000..0cd803115
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_red.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_star.png b/mod/beechat/graphics/icons/bullet_star.png
new file mode 100644
index 000000000..fab774a32
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_star.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_white.png b/mod/beechat/graphics/icons/bullet_white.png
new file mode 100644
index 000000000..a9af8d44b
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_white.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_yellow.png b/mod/beechat/graphics/icons/bullet_yellow.png
new file mode 100644
index 000000000..6469cea7e
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_yellow.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/chat_icon.png b/mod/beechat/graphics/icons/chat_icon.png
new file mode 100644
index 000000000..0e6d844bd
--- /dev/null
+++ b/mod/beechat/graphics/icons/chat_icon.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/cog_edit.png b/mod/beechat/graphics/icons/cog_edit.png
new file mode 100644
index 000000000..47b75a456
--- /dev/null
+++ b/mod/beechat/graphics/icons/cog_edit.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/comment_edit.png b/mod/beechat/graphics/icons/comment_edit.png
new file mode 100644
index 000000000..73db110df
--- /dev/null
+++ b/mod/beechat/graphics/icons/comment_edit.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_evilgrin.png b/mod/beechat/graphics/icons/emoticon_evilgrin.png
new file mode 100644
index 000000000..817bd509b
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_evilgrin.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_grin.png b/mod/beechat/graphics/icons/emoticon_grin.png
new file mode 100644
index 000000000..fc60c5e1c
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_grin.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_happy.png b/mod/beechat/graphics/icons/emoticon_happy.png
new file mode 100644
index 000000000..6b7336e17
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_happy.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_smile.png b/mod/beechat/graphics/icons/emoticon_smile.png
new file mode 100644
index 000000000..ade431851
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_smile.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_surprised.png b/mod/beechat/graphics/icons/emoticon_surprised.png
new file mode 100644
index 000000000..4520cfc55
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_surprised.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_tongue.png b/mod/beechat/graphics/icons/emoticon_tongue.png
new file mode 100644
index 000000000..ecafd2ffc
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_tongue.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_unhappy.png b/mod/beechat/graphics/icons/emoticon_unhappy.png
new file mode 100644
index 000000000..fd5d030ef
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_unhappy.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_waii.png b/mod/beechat/graphics/icons/emoticon_waii.png
new file mode 100644
index 000000000..458f93611
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_waii.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_wink.png b/mod/beechat/graphics/icons/emoticon_wink.png
new file mode 100644
index 000000000..a631949b5
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_wink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/heart.png b/mod/beechat/graphics/icons/heart.png
new file mode 100644
index 000000000..d9ee53e59
--- /dev/null
+++ b/mod/beechat/graphics/icons/heart.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/house.png b/mod/beechat/graphics/icons/house.png
new file mode 100644
index 000000000..fed62219f
--- /dev/null
+++ b/mod/beechat/graphics/icons/house.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/muc_icon.png b/mod/beechat/graphics/icons/muc_icon.png
new file mode 100644
index 000000000..efdd60f12
--- /dev/null
+++ b/mod/beechat/graphics/icons/muc_icon.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/notification_pink.png b/mod/beechat/graphics/icons/notification_pink.png
new file mode 100644
index 000000000..f40c184f9
--- /dev/null
+++ b/mod/beechat/graphics/icons/notification_pink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/pointer.png b/mod/beechat/graphics/icons/pointer.png
new file mode 100644
index 000000000..4e50a0f9a
--- /dev/null
+++ b/mod/beechat/graphics/icons/pointer.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/resultset_next.png b/mod/beechat/graphics/icons/resultset_next.png
new file mode 100644
index 000000000..e252606d3
--- /dev/null
+++ b/mod/beechat/graphics/icons/resultset_next.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/resultset_previous.png b/mod/beechat/graphics/icons/resultset_previous.png
new file mode 100644
index 000000000..18f9cc109
--- /dev/null
+++ b/mod/beechat/graphics/icons/resultset_previous.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/statuses.png b/mod/beechat/graphics/icons/statuses.png
new file mode 100644
index 000000000..e409f61a9
--- /dev/null
+++ b/mod/beechat/graphics/icons/statuses.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/vcard.png b/mod/beechat/graphics/icons/vcard.png
new file mode 100644
index 000000000..c02f315d2
--- /dev/null
+++ b/mod/beechat/graphics/icons/vcard.png
Binary files differ
diff --git a/mod/beechat/languages/en.php b/mod/beechat/languages/en.php
new file mode 100644
index 000000000..38f03be98
--- /dev/null
+++ b/mod/beechat/languages/en.php
@@ -0,0 +1,45 @@
+<?php
+
+$en_array = array(
+ 'beechat:icons:home' => 'Home',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Available',
+ 'beechat:availability:dnd' => 'Do not disturb',
+ 'beechat:availability:away' => 'Away',
+ 'beechat:availability:xa' => 'Extended away',
+ 'beechat:availability:offline' => 'Offline',
+
+ 'beechat:connection:state:offline' => 'Offline',
+ 'beechat:connection:state:connecting' => 'Connecting...',
+ 'beechat:connection:state:authenticating' => 'Authenticating...',
+ 'beechat:connection:state:online' => 'Online',
+ 'beechat:connection:state:failed' => 'Failed',
+ 'beechat:connection:state:disconnecting' => 'Disconnecting...',
+
+ 'beechat:chat:self' => 'Me',
+ 'beechat:chat:composing' => ' is typing.',
+
+ 'beechat:box:minimize' => 'Minimize',
+ 'beechat:box:close' => 'Close',
+ 'beechat:box:showhide' => 'Show/Hide this chat window',
+ 'beechat:enabled' => 'Chat enabled',
+ 'beechat:disabled' => 'Chat disabled',
+ 'beechat:enablechat' => 'Enable chat',
+ 'beechat:disablechat' => 'Disable chat',
+ 'beechat:domain' => 'Chat domain',
+ 'beechat:groupdomain' => 'MUC domain',
+ 'beechat:chatroom' => 'Group chat',
+ 'beechat:dbname' => 'Database name',
+ 'beechat:dbhost' => 'Database host',
+ 'beechat:dbuser' => 'Database user',
+ 'beechat:dbuser' => 'notification:method:xmpp',
+ 'notification:method:xmpp' => 'Xmpp/Jabber',
+ 'beechat:dbpassword' => 'Database password',
+ 'beechat:xmlrpcip' => 'Ejabberd IP'
+ );
+
+add_translation('en', $en_array);
+
+?>
diff --git a/mod/beechat/languages/es.php b/mod/beechat/languages/es.php
new file mode 100644
index 000000000..78f009ce9
--- /dev/null
+++ b/mod/beechat/languages/es.php
@@ -0,0 +1,43 @@
+<?php
+
+$es_array = array(
+ 'beechat:icons:home' => 'Home',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Disponible',
+ 'beechat:availability:dnd' => 'No molestar',
+ 'beechat:availability:away' => 'Fuera',
+ 'beechat:availability:xa' => 'Fuera bastante tiempo',
+ 'beechat:availability:offline' => 'Desconectado',
+
+ 'beechat:connection:state:offline' => 'Desconectado',
+ 'beechat:connection:state:connecting' => 'Conectando...',
+ 'beechat:connection:state:authenticating' => 'Iniciando...',
+ 'beechat:connection:state:online' => 'Conectado',
+ 'beechat:connection:state:failed' => 'Fallo',
+ 'beechat:connection:state:disconnecting' => 'Desconectando...',
+
+ 'beechat:chat:self' => 'Yo',
+ 'beechat:chat:composing' => ' esta escribiendo.',
+
+ 'beechat:box:minimize' => 'Minimizar',
+ 'beechat:box:close' => 'Cerrar',
+ 'beechat:box:showhide' => 'Mostrar/Ocultar esta ventana de chat',
+ 'beechat:enabled' => 'Chat activado',
+ 'beechat:disabled' => 'Chat desactivado',
+ 'beechat:enablechat' => 'Activar chat',
+ 'beechat:disablechat' => 'Desactivar chat',
+ 'beechat:domain' => 'Dominio Chat',
+ 'beechat:groupdomain' => 'Dominio MUC',
+ 'beechat:chatroom' => 'Chat del grupo',
+ 'beechat:dbname' => 'Database name',
+ 'beechat:dbhost' => 'Database host',
+ 'beechat:dbuser' => 'Database user',
+ 'beechat:dbpassword' => 'Database password',
+ 'beechat:xmlrpcip' => 'Ejabberd IP'
+ );
+
+add_translation('es', $es_array);
+
+?>
diff --git a/mod/beechat/languages/fr.php b/mod/beechat/languages/fr.php
new file mode 100644
index 000000000..58b0eac3a
--- /dev/null
+++ b/mod/beechat/languages/fr.php
@@ -0,0 +1,32 @@
+<?php
+
+$fr_array = array(
+ 'beechat:icons:home' => 'Accueil',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Disponible',
+ 'beechat:availability:dnd' => 'Ne pas déranger',
+ 'beechat:availability:away' => 'Absent',
+ 'beechat:availability:xa' => 'Absence prolongée',
+ 'beechat:availability:offline' => 'Hors ligne',
+
+ 'beechat:connection:state:offline' => 'Hors ligne',
+ 'beechat:connection:state:connecting' => 'Connexion...',
+ 'beechat:connection:state:authenticating' => 'Authentification...',
+ 'beechat:connection:state:online' => 'En ligne',
+ 'beechat:connection:state:failed' => 'Échec',
+ 'beechat:connection:state:disconnecting' => 'Déconnexion...',
+
+ 'beechat:chat:self' => 'Moi',
+ 'beechat:chat:composing' => ' est en train d\'écrire.',
+
+ 'beechat:box:minimize' => 'Diminuer',
+ 'beechat:box:close' => 'Fermer',
+ 'beechat:box:showhide' => 'Montrer/Cacher cette fenêtre de chat'
+
+ );
+
+add_translation('fr', $fr_array);
+
+?>
diff --git a/mod/beechat/lib/beechat.php b/mod/beechat/lib/beechat.php
new file mode 100644
index 000000000..bf002d648
--- /dev/null
+++ b/mod/beechat/lib/beechat.php
@@ -0,0 +1,250 @@
+<?
+/*
+ allow_change_subj
+ allow_private_messages
+ allow_query_users
+ allow_user_invites
+ anonymous
+ logging
+ max_users
+ members_by_default
+ members_only
+ moderated
+ password
+ password_protected
+ persistent
+ public
+ public_list
+ title
+
+muc_room_set_affiliation struct[{name, String}, {service, String},
+ {jid, String}, {affiliation, Affiliation}] Integer
+
+
+*/
+ //$request = xmlrpc_encode_request('muc_online_rooms', "global", (array('encoding' => 'utf-8')));
+
+
+function ejabberd_xmlrpc_send($request)
+{
+ $context = stream_context_create(array('http' => array(
+ 'method' => "POST",
+ 'header' => "User-Agent: XMLRPC::Client mod_xmlrpc\r\n" .
+ "Content-Type: text/xml\r\n" .
+ "Content-Length: ".strlen($request),
+ 'content' => $request
+ )));
+
+ $file = file_get_contents("http://".elgg_get_plugin_setting("xmlrpcip", "beechat").":4560/RPC2", false, $context);
+
+ $response = xmlrpc_decode($file);
+ if (is_array($response) && xmlrpc_is_fault($response)) {
+ trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
+ } else {
+ // print_r($response);
+ }
+}
+
+function ejabberd_xmlrpc_command($command, $params)
+{
+ //error_log("send xmlrpc: ".$command);
+ $request = xmlrpc_encode_request($command, $params, (array('encoding' => 'utf-8')));
+ return ejabberd_xmlrpc_send($request);
+}
+
+function xmpp_escape($name) {
+ // http://xmpp.org/extensions/xep-0106.html#escaping
+ $name = str_replace(' ', '\\20', $name);
+ $name = str_replace('"', '\\22', $name);
+ $name = str_replace('&', '\\26', $name);
+ $name = str_replace("'", '\\27', $name);
+ $name = str_replace('/', '\\2f', $name);
+ $name = str_replace(';', '\\3a', $name);
+ $name = str_replace('<', '\\3c', $name);
+ $name = str_replace('>', '\\3e', $name);
+ $name = str_replace('@', '\\40', $name);
+ $name = str_replace('\\', '\\5c', $name);
+ return $name;
+}
+
+class EjabberdMucRoom {
+ function __construct($group) {
+ $this->group = $group;
+ }
+ function setOption($name, $value) {
+ $group = $this->group;
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "option"=>$name,
+ "value"=>$value);
+ ejabberd_xmlrpc_command('muc_room_change_option', $param);
+ }
+ function addMember($member) {
+ //"outcast" | "none" | "member" | "admin" | "owner"
+ $group = $this->group;
+ if ($member->guid === $group->owner_guid)
+ $affiliation = "owner";
+ elseif ($group->canEdit($member->guid))
+ $affiliation = "admin";
+ else
+ $affiliation = "member";
+ $this->setAffiliation($member, $affiliation);
+ }
+
+ function setAffiliation($member, $affiliation) {
+ $group = $this->group;
+ $param = array("name" => elgg_get_friendly_title($group->name),
+ "service" => elgg_get_plugin_setting("groupdomain", "beechat"),
+ "jid" => xmpp_escape($member->username) . '@' . elgg_get_plugin_setting("domain", "beechat"),
+ "affiliation" => $affiliation);
+ ejabberd_xmlrpc_command('muc_room_set_affiliation', $param);
+ //echo "set affiliation ".$member->username."<br/>";
+ }
+}
+
+function ejabberd_create_group($group)
+{
+ //echo "creating " . $group->name . "<br/>";
+ // create room
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "server"=>elgg_get_plugin_setting("domain", "beechat"));
+ ejabberd_xmlrpc_command('create_muc_room', $param);
+
+ // persistency
+
+ $room = new EjabberdMucRoom($group);
+ $room->setOption("persistent", true);
+ $room->setOption("title", $group->name);
+ // open to public?
+ if ($group->isPublicMembership()) {
+ $room->setOption("members_only", false);
+ }
+ else
+ $room->setOption("members_only", true);
+
+ if ($group->access_id === ACCESS_PUBLIC) {
+ $room->setOption("public_list", true);
+ $room->setOption("public", true);
+ }
+ else {
+ $room->setOption("public_list", false);
+ $room->setOption("public", false);
+ }
+ $members = $group->getMembers(0);
+ foreach($members as $member) {
+ $room->addMember($member);
+ }
+ $room->addMember(get_entity($group->owner_guid));
+}
+
+function ejabberd_destroy_group($group)
+{
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "server"=>elgg_get_plugin_setting("domain", "beechat"));
+ ejabberd_xmlrpc_command('delete_muc_room', $param);
+}
+
+function ejabberd_getjid($user, $do_external=false)
+{
+ if ($user->foreign || ($do_external && $user->alias && get_plugin_usersetting("usealias", $user->guid,"openid_client"))) {
+ if ($user->foreign)
+ $webid = $user->webid;
+ else
+ $webid = $user->alias;
+ if (strpos($webid, 'http') === 0) {
+ // http or https addresses
+ $hostparts = parse_url($webid);
+ $urlparts = explode('/', $webid);
+ $host = $hostparts['host'];
+ $username = $urlparts[count($urlparts)-1];
+ } else {
+ if (strpos($webid, ':') > 0) {
+ $webidparts = explode(':', $webid);
+ $hostparts = explode('@',$webidparts[1]);
+ } else {
+ $hostparts = explode('@',$webid);
+ }
+ $username = $hostparts[0];
+ $host = $hostparts[1];
+ }
+ }
+ else {
+ $username = $user->username;
+ $host = elgg_get_plugin_setting("domain", "beechat");
+ }
+ return xmpp_escape($username) . '@' . $host;
+}
+
+function ejabberd_friend_command($user, $friend, $command, $is_out) // $user adds $friend
+{
+ error_log(" * ".$friend->username."->".ejabberd_getjid($user)." ".$command);
+ if ($friend->foreign) {
+ error_log(" * beechat: friend is foreign!");
+ return;
+ }
+ $param = array("user" => elgg_get_friendly_title($friend->username),
+ "server" => elgg_get_plugin_setting("domain", "beechat"),
+ "from" => ejabberd_getjid($user),
+ "subs" => $command);
+ if ($is_out) {
+ error_log("out");
+ ejabberd_xmlrpc_command('send_roster_request_out', $param);
+ }
+ else {
+ $param['reason'] = 'unknown';
+ ejabberd_xmlrpc_command('send_roster_request_in', $param);
+ }
+}
+
+
+function ejabberd_friend_request($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_request');
+ ejabberd_friend_command($friend, $user, 'subscribe', true); // out:$user : $friend
+ error_log('ejabberd_friend_requested');
+}
+function ejabberd_friend_accept($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_accept');
+ ejabberd_friend_command($friend, $user, 'subscribed', true);
+ // following might be needed to have symmetry (and important for remote)
+ if ($friend->foreign) {
+ // following is needed for xmpp nodes
+ ejabberd_friend_command($friend, $user, 'subscribe', true);
+ }
+ // ejabberd_friend_command($friend, $user, 'subscribed', false);
+ // following can't be faked
+ if (!$friend->foreign)
+ ejabberd_friend_command($user, $friend, 'subscribed', true);
+ error_log('ejabberd_friend_accepted');
+}
+function ejabberd_friend_deny($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friedeny');
+ ejabberd_friend_command($friend, $user, 'unsubscribed', true);
+}
+function ejabberd_friend_remove($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_remove');
+ if ($friend->foreign) {
+ ejabberd_friend_command($friend, $user, 'unsubscribed', true);
+ ejabberd_friend_command($friend, $user, 'unsubscribed', false);
+ }
+ else
+ ejabberd_friend_command($friend, $user, 'unsubscribed', false);
+ if (!$friend->foreign)
+ ejabberd_friend_command($user, $friend, 'unsubscribed', false);
+ error_log('ejabberd_friend_removed');
+}
+
+/*function ejabberd_send_chat($from, $to, $body) { // $user adds $friend
+ $param = array("body"=>$body,
+ "from"=>$from,
+ "to"=>$to);
+ ejabberd_xmlrpc_command('send_chat_message', $param);
+}*/
+
+
+?>
diff --git a/mod/beechat/manifest.xml b/mod/beechat/manifest.xml
new file mode 100644
index 000000000..ad948fdb4
--- /dev/null
+++ b/mod/beechat/manifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Beechat</name>
+ <author>Beechannels + Lorea dev</author>
+ <version>1.8.0</version>
+ <category>widget</category>
+ <description>XMPP chat for Elgg.</description>
+ <website>https://lorea.org</website>
+ <copyright>(C) Beechanels 2009, Lorea 2009-2013</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/beechat/migrate.php b/mod/beechat/migrate.php
new file mode 100644
index 000000000..20bee7973
--- /dev/null
+++ b/mod/beechat/migrate.php
@@ -0,0 +1,88 @@
+<?php
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+global $CONFIG;
+admin_gatekeeper();
+
+// It's possible large upgrades could exceed the max execution time.
+set_time_limit(0);
+
+// get ejabberd db settings from elgg.
+$domain = elgg_get_plugin_setting("domain", "beechat");
+$dbname = elgg_get_plugin_setting("dbname", "beechat");
+$dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+$dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+$dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");
+
+$jabber_domain = $domain;
+
+$dbh_elgg = null;
+$dbh_ejabberd = null;
+
+$dsn_elgg = 'mysql:dbname='.$CONFIG->dbname.';host='.$CONFIG->dbhost;
+$dsn_ejabberd = 'mysql:dbname='.$dbname.';host='.$dbhost;
+
+$dbprefix = $CONFIG->dbprefix;
+
+$user = $dbuser;
+$password = $dbpassword;
+
+$relationship_type = 'friend';
+
+$counter = 0;
+
+try {
+ $dbh_elgg = new PDO($dsn_elgg, $CONFIG->dbuser, $CONFIG->dbpass);
+
+ $sql = 'SELECT guid, name, username FROM '.$dbprefix.'users_entity';
+ $sth = $dbh_elgg->prepare($sql);
+ $sth->execute();
+
+ $users = array();
+ while ($row = $sth->fetch(PDO::FETCH_ASSOC))
+ $users[$row['guid']] = $row;
+
+ $sql = 'SELECT guid_one, guid_two FROM '.$dbprefix.'entity_relationships ';
+ $sql .= 'WHERE relationship = ?;';
+ $sth = $dbh_elgg->prepare($sql);
+
+ $sth->bindParam(1, $relationship_type);
+ $sth->execute();
+
+ $dbh_ejabberd = new PDO($dsn_ejabberd, $user, $password);
+ $dbh_ejabberd->beginTransaction();
+
+ while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
+ $sql = 'INSERT INTO rosterusers (username, jid, nick, subscription, ask, server, type) VALUES (?, ?, ?, ?, ?, ?, ?);';
+ $sth_ejabberd = $dbh_ejabberd->prepare($sql);
+
+
+ $username = $users[$row['guid_one']]['username'];
+ $jid = $users[$row['guid_two']]['username'] . '@' . $jabber_domain;
+ $nick = $users[$row['guid_two']]['name'];
+ $subscription = 'B';
+ $ask = 'N';
+ $server = 'N';
+ $type = 'item';
+
+ $sth_ejabberd->execute(array($username, $jid, $nick, $subscription, $ask, $server, $type));
+
+ $counter += 1;
+ if ($counter % 1000 == 0) {
+ //error_log( $username . ' registered ' . $jid . ' as a friend in his roster.' . "\n");
+ error_log("importing relations into jabber: $counter");
+ }
+ }
+
+ $dbh_ejabberd->commit();
+
+ $dbh_elgg = null;
+ $dbh_ejabberd = null;
+} catch (PDOException $e) {
+ if ($dbh_ejabberd != null)
+ $dbh_ejabberd->rollBack();
+ echo $e->getMessage();
+}
+?>
+
+
diff --git a/mod/beechat/migrategroups.php b/mod/beechat/migrategroups.php
new file mode 100644
index 000000000..4e3ef3f2b
--- /dev/null
+++ b/mod/beechat/migrategroups.php
@@ -0,0 +1,18 @@
+<?
+require_once(dirname(__FILE__) . "/lib.php");
+
+admin_gatekeeper();
+
+// groups disabled for now
+exit();
+
+$groups = elgg_get_entities(array('types'=>'group','limit'=>0));
+elgg_set_ignore_access(true);
+foreach($groups as $group) {
+ echo "migrating " . $group->name . "<br/>";
+ ejabberd_create_group($group);
+}
+echo "done!";
+elgg_set_ignore_access(false);
+
+?>
diff --git a/mod/beechat/sounds/newmessage.wav b/mod/beechat/sounds/newmessage.wav
new file mode 100644
index 000000000..58cccd0e6
--- /dev/null
+++ b/mod/beechat/sounds/newmessage.wav
Binary files differ
diff --git a/mod/beechat/start.php b/mod/beechat/start.php
new file mode 100644
index 000000000..4e4e4bb40
--- /dev/null
+++ b/mod/beechat/start.php
@@ -0,0 +1,184 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ GLOBAL $CONFIG;
+
+ function beechat_create_group($event, $object_type, $object)
+ {
+ elgg_load_library('elgg:beechat');
+ ejabberd_create_group($object);
+ }
+
+ function beechat_delete_group($event, $object_type, $object)
+ {
+ elgg_load_library('elgg:beechat');
+ ejabberd_destroy_group($object);
+ }
+
+ function beechat_member_add($event, $object_type, $object)
+ {
+ if ($object->relationship === "member") {
+ elgg_load_library('elgg:beechat');
+ $user = get_entity($object->guid_one);
+ $group = get_entity($object->guid_two);
+ $room = new EjabberdMucRoom($group);
+ $room->addMember($user);
+ }
+ }
+
+ function beechat_member_delete($event, $object_type, $object)
+ {
+ if ($object->relationship === "member") {
+ elgg_load_library('elgg:beechat');
+ $user = get_entity($object->guid_one);
+ $group = get_entity($object->guid_two);
+ $room = new EjabberdMucRoom($group);
+ $room->setAffiliation($user, "none");
+ }
+ }
+
+ function beechat_init()
+ {
+ $pluginspath = elgg_get_plugins_path();
+ elgg_register_library('elgg:beechat', $pluginspath . 'beechat/lib/beechat.php');
+
+ elgg_register_event_handler('pagesetup', 'system', 'beechat_pagesetup');
+ // group actions disabled for now
+ /*if (elgg_get_plugin_setting("groupdomain", "beechat")) {
+ register_elgg_event_handler('create', 'group', 'beechat_create_group');
+ register_elgg_event_handler('delete', 'group', 'beechat_delete_group');
+ }
+ register_elgg_event_handler('create', 'member', 'beechat_member_add');
+ register_elgg_event_handler('delete', 'relationship', 'beechat_member_delete');*/
+
+
+ $actions_path = $pluginspath . 'beechat/actions/';
+ //elgg_register_action('beechat/join_groupchat', $actions_path . 'join_groupchat.php');
+ //elgg_register_action('beechat/leave_groupchat', $actions_path . 'leave_groupchat.php');
+ elgg_register_action('beechat/get_statuses', $actions_path . 'get_statuses.php');
+ elgg_register_action('beechat/get_icons', $actions_path . 'get_icons.php');
+ elgg_register_action('beechat/get_details', $actions_path . 'get_details.php');
+ elgg_register_action('beechat/get_connection', $actions_path . 'get_connection.php');
+ elgg_register_action('beechat/get_state', $actions_path . 'get_state.php');
+ elgg_register_action('beechat/save_state', $actions_path . 'save_state.php');
+
+ /*register_elgg_event_handler('create', 'friendrequest', 'beechat_xmpp_add_friendx');
+ #register_plugin_hook('action', 'friends/add', 'beechat_xmpp_add_friend', 1000);
+ register_plugin_hook('river_update', 'river_update', 'beechat_xmpp_approve_friendx');
+ register_plugin_hook('river_update_foreign', 'river_update', 'beechat_xmpp_approve_friendx');
+ #register_plugin_hook('action', 'friendrequest/approve', 'beechat_xmpp_approve_friend', 1000);
+
+
+ register_plugin_hook('action', 'friendrequest/decline', 'beechat_xmpp_decline_friend', 1000);
+ register_plugin_hook('action', 'friends/remove', 'beechat_xmpp_remove_friend', 1000);*/
+
+ // new friend sync
+ elgg_register_event_handler('delete', 'friend', array('BeechatSync', 'onFriendDelete'));
+ //elgg_register_event_handler('create', 'friendrequest', array('BeechatSync', 'onFriendCreate'));
+ elgg_register_event_handler('delete', 'friendrequest', array('BeechatSync', 'onFriendDelete'));
+
+
+
+ elgg_extend_view('js/initialise_elgg', 'js/json2.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.cookie.min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.scrollTo-min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.serialScroll-min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/b64.js');
+ elgg_extend_view('js/initialise_elgg', 'js/sha1.js');
+ elgg_extend_view('js/initialise_elgg', 'js/md5.js');
+ elgg_extend_view('js/initialise_elgg', 'js/strophe.min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/strophe.muc.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.tools.min.js');
+ elgg_extend_view('css', 'beechat/screen.css');
+ elgg_extend_view('js/initialise_elgg', 'beechat/beechat.js');
+ elgg_extend_view('page/elements/head', 'beechat/beechat.userjs');
+
+ elgg_extend_view('page/elements/foot', 'beechat/beechat');
+
+ $domain = elgg_get_plugin_setting("domain", "beechat");
+ //$group_domain = elgg_get_plugin_setting("groupdomain", "beechat");
+ /*$dbname = elgg_get_plugin_setting("dbname", "beechat");
+ $dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+ $dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+ $dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");*/
+
+ global $CONFIG;
+ $CONFIG->chatsettings['domain'] = $domain;
+ //$CONFIG->chatsettings['groupdomain'] = $group_domain;
+
+ register_notification_handler('xmpp', 'beechat_notifications');
+ // register_plugin_hook('notify:entity:message','object','beechat_notifications_msg');
+ }
+
+ function beechat_notifications($from, $to, $subject, $topic, $params = array()) {
+ ejabberd_send_chat($to, "<div>".$topic."</div>");
+ }
+
+
+ function beechat_friendly_title($title) {
+ // need this because otherwise seems elgg
+ // gets in some problem trying to call the view
+ //$title = iconv('UTF-8', 'ASCII//TRANSLIT', $title);
+ $title = preg_replace("/[^\w ]/","",$title);
+ $title = str_replace(" ","-",$title);
+ $title = str_replace("--","-",$title);
+ $title = trim($title);
+ $title = strtolower($title);
+ return $title;
+ }
+
+ function beechat_pagesetup()
+ {
+ global $CONFIG;
+ /*if (elgg_get_context() == 'group_profile' && elgg_is_logged_in()) {
+ if (elgg_get_plugin_setting("groupdomain", "beechat")) {
+ $user = elgg_get_logged_in_user_entity();
+ $group = elgg_get_page_owner_entity();
+ if (!$group || !($group instanceof ElggGroup))
+ return;
+ if ($user->chatenabled && elgg_get_plugin_setting("groupdomain", "beechat")) {
+ if ($group->isPublicMembership() || $group->isMember($user)) {
+ $item = new ElggMenuItem('chatroom', elgg_echo('beechat:chatroom'), "javascript:g_beechat_user.joinRoom('".beechat_friendly_title($group->name)."@".$CONFIG->chatsettings['groupdomain']."', '".$group->guid."')");
+ elgg_register_menu_item('page', 'item');
+ }
+ }
+ }
+ }
+ else*/if (elgg_get_context() == 'settings' && elgg_is_logged_in()) {
+ $is_enabled = elgg_get_logged_in_user_entity()->chatenabled;
+ $action = $is_enabled ? 'disable' : 'enable';
+ elgg_register_menu_item('page', array(
+ 'name' => 'beechat',
+ 'text'=> elgg_echo("beechat:{$action}chat"),
+ 'href' => $CONFIG->wwwroot . "mod/beechat/{$action}chat.php",
+ ));
+ }
+ }
+
+
+ function ejabberd_send_chat($user, $body) { // $user adds $friend
+ $from = 'notify@'.elgg_get_plugin_setting("domain", "beechat").'/net';
+ if ($user->alias) {
+
+ }
+ elgg_load_library('elgg:beechat');
+ $to = ejabberd_getjid($user, true);
+ //xmlrpc_set_type(&$body, "base64");
+ $param = array("body" => $body,
+ "from" => $from,
+ "to" => $to);
+ ejabberd_xmlrpc_command('send_html_message', $param);
+ }
+
+
+
+
+elgg_register_event_handler('init', 'system', 'beechat_init');
diff --git a/mod/beechat/views/default/beechat/beechat.js.php b/mod/beechat/views/default/beechat/beechat.js.php
new file mode 100644
index 000000000..09f4e8852
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.js.php
@@ -0,0 +1,2498 @@
+/**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+/** Globals
+ *
+ */
+g_beechat_user = null;
+g_beechat_roster_items = null;
+g_beechat_rooms = new Array();
+
+function debugXMPP(msg) {
+ try {
+ //console.log(msg)
+ }
+ catch (err) {
+ }
+ //$('#layout_footer').html($('#layout_footer').html()+'<br/>'+msg);
+}
+
+/** Class: BeeChat
+ * An object container for all BeeChat mod functions
+ *
+ */
+BeeChat = {
+ BOSH_SERVICE: '/http-bind/',
+ DOMAIN: '<?php echo $vars['config']->chatsettings['domain'] ?>',
+ RESOURCE: 'beebac',
+ INACTIVITY_PERIOD_LENGTH: 60,
+
+ NS: {
+ CHAT_STATES: 'http://jabber.org/protocol/chatstates'
+ },
+
+ Message: {
+ Types: {
+ NORMAL: 'normal',
+ CHAT: 'chat',
+ GROUPCHAT: 'groupchat',
+ HEADLINE: 'headline',
+ ERROR: 'error'
+ },
+
+ ChatStates: {
+ COMPOSING: 'composing',
+ PAUSED: 'paused',
+ ACTIVE: 'active',
+ INACTIVE: 'inactive',
+ GONE: 'gone'
+ }
+ },
+
+ IQ: {
+ Types: {
+ GET: 'get',
+ RESULT: 'result',
+ SET: 'set',
+ ERROR: 'error'
+ }
+ },
+
+ Presence: {
+ Types: {
+ UNAVAILABLE: 'unavailable',
+ SUBSCRIBE: 'subscribe',
+ SUBSCRIBED: 'subscribed',
+ UNSUBSCRIBE: 'unsubscribe',
+ UNSUBSCRIBED: 'unsubscribed',
+ PROBE: 'probe',
+ ERROR: 'error'
+ },
+
+ ChildElements: {
+ SHOW: 'show',
+ STATUS: 'status',
+ PRIORITY: 'priority'
+ },
+
+ ShowElements: {
+ CHAT: 'chat',
+ DND: 'dnd',
+ AWAY: 'away',
+ XA: 'xa'
+ }
+ },
+
+ Roster: {
+ DEFAULT_GROUP: 'Contacts'
+ },
+
+
+ Events: {
+ Identifiers: {
+ UPDATE_CONNECTION_STATE: 0,
+ UPDATE_ROSTER: 1,
+ RECV_PRESENCE: 2,
+ RECV_CHAT_MESSAGE: 3
+ },
+ Messages: {
+ ConnectionStates: {
+ CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>",
+ AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>",
+ FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>",
+ DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>"
+ }
+ }
+ }
+};
+
+
+/** Class: BeeChat.Core
+ * An object container for all BeeChat Core functions
+ *
+ */
+BeeChat.Core = {
+ ReferenceTables: {
+ AvailabilityRates: {
+ AVAILABLE: 0,
+ ONLINE: 0,
+ CHAT: 0,
+ DND: 1,
+ AWAY: 2,
+ XA: 3,
+ UNAVAILABLE: 10,
+ OFFLINE: 10
+ }
+ }
+};
+
+
+/** Class: BeeChat.Core.User
+ * Create a BeeChat.Core.User object
+ *
+ * Parameters:
+ * (String) jid - The user's jabber id
+ *
+ * Returns:
+ * A new BeeChat.Core.User.
+ */
+BeeChat.Core.User = function(jid)
+{
+ if (!(this instanceof arguments.callee))
+ return new BeeChat.Core.User(jid);
+
+ /** Private members
+ *
+ */
+ var _connection = null;
+ var _attached = false;
+ var _initialized = false;
+ var _jid = null;
+ var _roster = null;
+ var _msgTemp = [];
+ var _funcs = [];
+
+ /** Constructor
+ *
+ */
+ this.init = function(jid)
+ {
+ _jid = jid;
+ _roster = new BeeChat.Core.Roster();
+ }
+
+ /** Accessors
+ *
+ */
+ this.getConnection = function()
+ {
+ return _connection;
+ }
+
+ this.getJid = function()
+ {
+ return _jid;
+ }
+
+ this.getRoster = function()
+ {
+ return _roster;
+ }
+
+ this.isAttached = function()
+ {
+ return _attached;
+ }
+
+ this.isInitialized = function()
+ {
+ return _initialized;
+ }
+
+ /** Mutators
+ *
+ */
+ this.setInitialized = function(isInitialized)
+ {
+ _initialized = isInitialized;
+ }
+
+ /** Function: addObserver
+ * Add an observer for a specified type of event
+ *
+ * Parameters:
+ * (BeeChat.Events.Identifiers) eventType - The type of event to observer
+ * (Object) pFunc - A function to call when the event will be triggered
+ */
+ this.addObserver = function(eventType, pFunc)
+ {
+ if (jQuery.inArray(pFunc, _funcs) == -1) {
+ if (!_funcs[eventType])
+ _funcs[eventType] = [];
+ _funcs[eventType].push(pFunc);
+ }
+ }
+
+ /** Function: removeObserver
+ * Remove an observer
+ *
+ * Parameters:
+ * (Object) pFunc - The registered function
+ */
+ this.removeObserver = function(pFunc)
+ {
+ var index = null;
+
+ for (var key in _funcs) {
+ if (typeof _funcs[key] != 'object')
+ continue;
+ if ((index = jQuery.inArray(pFunc, _funcs[key])) != -1)
+ _funcs.splice(index, 1);
+ }
+ }
+
+ /** Function: connect
+ * Connect the user to the BOSH service
+ *
+ * Parameters:
+ * (String) password - The user's password
+ *
+ */
+ this.connect = function(password)
+ {
+ debugXMPP('connect');
+ if (_connection == null)
+ _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE);
+ _connection.connect(_jid, password, _onConnect);
+ }
+
+ /** Function: attach
+ * Attach user's connection to an existing XMPP session
+ *
+ * Parameters:
+ * (String) sid - The SID of the existing XMPP session
+ * (String) rid - The RID of the existing XMPP session
+ */
+ this.attach = function(sid, rid)
+ {
+ if (_connection == null) {
+ _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE);
+ }
+ _connection.attach(_jid, sid, rid, _onConnect);
+ _attached = true;
+ _onConnect(Strophe.Status.CONNECTED);
+ }
+
+ /** Function: disconnect
+ * Disconnect the user from the BOSH service
+ *
+ */
+ this.disconnect = function()
+ {
+ debugXMPP('disconnect');
+ if (_connection != null) {
+ _connection.disconnect();
+ _connection = null;
+ }
+ }
+
+ /** Function: requestSessionPause
+ * Request a session pause to the server connection manager
+ *
+ */
+ this.requestSessionPause = function()
+ {
+ var req = $build('body', {
+ rid: _connection.rid,
+ sid: _connection.sid,
+ pause: BeeChat.INACTIVITY_PERIOD_LENGTH,
+ xmlns: Strophe.NS.HTTPBIND
+ });
+
+ _attached = false;
+ _connection.send(req.tree());
+ }
+
+ /** Function: requestRoster
+ * Request a new roster to the server
+ *
+ */
+ this.requestRoster = function()
+ {
+ var req = $iq({from: _jid, type: BeeChat.IQ.Types.GET})
+ .c('query', {xmlns: Strophe.NS.ROSTER});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendInitialPresence
+ * Send initial presence to the server in order to signal availability for communications
+ *
+ */
+ this.sendInitialPresence = function()
+ {
+ _connection.send($pres().tree());
+ _initialized = true;
+ }
+
+ /** Function: sendChatMessage
+ * Send a chat message to the server
+ *
+ * Parameters:
+ * (String) addressee - The addressee of the chat message
+ * (String) msg - The chat message
+ *
+ */
+ this.sendChatMessage = function(addressee, msg, msgtype)
+ {
+ if (msgtype == null)
+ msgtype = BeeChat.Message.Types.CHAT;
+ var req = $msg({
+ type: msgtype,
+ to: addressee,
+ from: _connection.jid
+ }).c('body').t(msg).up().c(BeeChat.Message.ChatStates.ACTIVE, {xmlns: BeeChat.NS.CHAT_STATES});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendChatStateMessage
+ * Send a chat state message to the server
+ *
+ * Parameters:
+ * (String) addressee - The addressee of the chat state message
+ * (BeeChat.Message.ChatsState) state - The chat state that will be send
+ *
+ */
+ this.sendChatStateMessage = function(addressee, state)
+ {
+ var req = $msg({
+ type: BeeChat.Message.Types.CHAT,
+ to: addressee,
+ from: _connection.jid
+ }).c(state, {xmlns: BeeChat.NS.CHAT_STATES});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendPresenceAvailabiliy
+ * Send a detailed presence stanza to the server
+ *
+ * Parameters:
+ * (BeeChat.Presence.ShowElements) availability - The availability status
+ * (String) details - Detailed status information
+ *
+ */
+ this.sendPresenceAvailability = function(availability, details)
+ {
+ var req = $pres()
+ .c(BeeChat.Presence.ChildElements.SHOW).t(availability).up()
+ .c(BeeChat.Presence.ChildElements.STATUS).t(details).up()
+ .c(BeeChat.Presence.ChildElements.PRIORITY).t('1');
+
+ _connection.send(req.tree());
+ }
+
+ /** PrivateFunction: _fire
+ * Triggers registered funcs of registered observers for a specified type of event
+ *
+ */
+ function _fire(eventType, data, scope)
+ {
+ if (_funcs[eventType] != undefined) {
+ for (var i = 0; i < _funcs[eventType].length; i++)
+ _funcs[eventType][i].call((scope || window), data);
+ }
+ }
+ this.joinRoom = function(roomname, room_guid) {
+ var roomJid = roomname;
+ _connection['muc'].join(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, '');
+ if (!(roomJid in g_beechat_rooms)) {
+ g_beechat_rooms[roomJid] = room_guid;
+ $.ajax({
+ url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/join_groupchat?group_guid="; ?>'+room_guid, '&'),
+ async: true });
+ }
+
+
+ }
+
+ this.reconnectRooms = function() {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ if (roomJid in g_beechat_rooms)
+ delete g_beechat_rooms[roomJid];
+ var contactBareJid = $(this).attr('bareJid');
+ var isroom = ($(this).attr('isroom')=='true')?true:false;
+ if (isroom) {
+ _connection['muc'].join(contactBareJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, '');
+ }
+ });
+ }
+
+ this.leaveRoom = function(roomJid) {
+ if (roomJid in g_beechat_rooms) {
+ $.ajax({
+ url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/leave_groupchat?group_guid="; ?>'+g_beechat_rooms[roomJid], '&'),
+ async: true });
+
+ }
+ _connection['muc'].leave(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, function(){});
+ }
+
+ /** PrivateFunction: _onConnect
+ * Connection state manager
+ *
+ * Parameters:
+ * (Strophe.Status) status - A Strophe connection status constant
+ *
+ */
+ function _onConnect(status)
+ {
+ var msg = null;
+
+ if (status == Strophe.Status.CONNECTING)
+{
+ msg = BeeChat.Events.Messages.ConnectionStates.CONNECTING;
+ }
+ else if (status == Strophe.Status.AUTHENTICATING) {
+ msg = BeeChat.Events.Messages.ConnectionStates.AUTHENTICATING;
+ }
+ else if (status == Strophe.Status.AUTHFAIL)
+ msg = BeeChat.Events.Messages.ConnectionStates.FAILED;
+ else if (status == Strophe.Status.CONNFAIL)
+ msg = BeeChat.Events.Messages.ConnectionStates.FAILED;
+ else if (status == Strophe.Status.DISCONNECTING)
+ msg = BeeChat.Events.Messages.ConnectionStates.DISCONNECTING;
+ else if (status == Strophe.Status.DISCONNECTED)
+ msg = BeeChat.Events.Messages.ConnectionStates.OFFLINE;
+ else if (status == Strophe.Status.CONNECTED) {
+ msg = BeeChat.Events.Messages.ConnectionStates.ONLINE;
+ _connection.addHandler(_onIQResult, null, 'iq', BeeChat.IQ.Types.RESULT, null, null);
+ _connection.addHandler(_onPresence, null, 'presence', null, null, null);
+ _connection.addHandler(_onMessageChat, null, 'message', BeeChat.Message.Types.CHAT, null, null);
+ _connection.addHandler(_onMessageChatRoom, null, 'message', BeeChat.Message.Types.GROUPCHAT, null, null);
+ }
+
+ _fire(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, msg);
+ }
+
+ /** PrivateFunction: _onIQResult
+ * Manage received IQ stanza of 'result' type
+ *
+ * Parameters:
+ * (XMLElement) iq - The iq stanza received
+ *
+ */
+ function _onIQResult(iq)
+ {
+ _roster.updateFromIQResult(iq);
+ _fire(BeeChat.Events.Identifiers.UPDATE_ROSTER, _roster.getItems());
+
+ return true;
+ }
+
+ /** PrivateFunction: _onPresence
+ * Manage received presence stanza
+ *
+ * Parameters:
+ * (XMLElement) presence - The presence stanza received
+ *
+ */
+ function _onPresence(presence)
+ {
+ var xquery = presence.getElementsByTagName("x");
+ debugXMPP('_onPresence'+xquery);
+ if (xquery.length > 0)
+ {
+ //Ignore MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+ if (xmlns && xmlns.match(Strophe.NS.MUC + '#user'))
+ {
+ var contactBareJid = $(presence).attr('from').split('/')[0];
+ var userNick = $(presence).attr('from').split('/')[1];
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ if ($(presence).attr('type') != 'unavailable') {
+ BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence);
+ }
+ else {
+ if (chatBoxElm.length) {
+ BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence);
+ }
+ }
+ return true;
+ }
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ var contactBareJid = $(presence).attr('from').split('/')[0];
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+
+ if ($(presence).attr('type') != 'unavailable' && $(presence).attr('type') != 'error') {
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ }
+ }
+ return true;
+ }
+
+ }
+ }
+
+ if (Strophe.getBareJidFromJid($(presence).attr('from')).toLowerCase() != Strophe.getBareJidFromJid(_jid).toLowerCase()) {
+ _roster.updateFromPresence(presence);
+ }
+ _fire(BeeChat.Events.Identifiers.RECV_PRESENCE, _roster.getOnlineItems());
+ return true;
+ }
+
+ /** PrivateFunction: _onMessageChat
+ * Manage received message stanza of 'chat' type
+ *
+ * Parameters:
+ * (XMLElement) message - The message stanza received
+ *
+ */
+ function _onMessageChatRoom(message)
+ {
+ var roomJid = $(message).attr('from').split('/');
+
+// BeeChat.UI.ChatBoxes.updateChatState($(message).attr('from'), message);
+ BeeChat.UI.ChatBoxes.update(roomJid[0], roomJid[1], Strophe.getText($(message).find('body')[0]), true);
+
+ return true;
+ }
+
+ function _onMessageChat(message)
+ {
+ var data = {
+ contactBareJid: Strophe.getBareJidFromJid($(message).attr('from')),
+ msg: message
+ };
+ _msgTemp.push(data);
+ //alert("message");
+ if (_initialized == true) {
+ for (var key in _msgTemp) {
+ if (typeof _msgTemp[key] != 'object')
+ continue;
+ _fire(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, _msgTemp[key]);
+ _msgTemp.shift();
+ }
+ }
+
+ return true;
+ }
+
+ this.init(jid);
+};
+
+
+/** Constructor: BeeChat.Core.Roster
+ * Create a BeeChat.Core.Roster object
+ *
+ * Parameters:
+ * (Object) items - The roster's items in object notation
+ *
+ * Returns:
+ * A new BeeChat.Core.Roster.
+ */
+BeeChat.Core.Roster = function()
+{
+ if (!(this instanceof arguments.callee))
+ return new BeeChat.Core.Roster();
+
+ /** Private members
+ *
+ */
+ _items = null;
+
+
+ /** Constructor
+ *
+ */
+ this.init = function()
+ {
+ _items = (arguments.length > 0) ? arguments[0] : {};
+ }
+
+ /** Accessors
+ *
+ */
+ this.getItems = function()
+ {
+ return _items;
+ }
+
+ /** Mutators
+ *
+ */
+ this.setItems = function(items)
+ {
+ for (var key in items) {
+ _items[key] = new BeeChat.Core.RosterItem(items[key]);
+ var contactBareJid = items[key].bareJid;
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ var status = items[key].status;
+ /*if (status != 'unavailable' && status != 'error') {
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ }
+ }*/
+
+ }
+ }
+
+ this.setIcons = function(icons)
+ {
+ if (_items) {
+ for (var key in icons) {
+ if (_items[key]) {
+ _items[key].icon_small = icons[key].small;
+ _items[key].icon_tiny = icons[key].tiny;
+ }
+ }
+ }
+ }
+
+ this.setStatuses = function(statuses)
+ {
+ if (_items) {
+ for (var key in statuses) {
+ if (_items[key]) {
+ _items[key].status = statuses[key];
+ }
+ }
+ }
+ }
+
+ /** Function: updateFromIQResult
+ * Update the roster items from an IQ result stanza
+ *
+ * Parameters:
+ * (XMLElement) iq - The IQ result stanza
+ */
+ this.updateFromIQResult = function(iq)
+ {
+ $(iq).find('item').each(function() {
+ var attr = {
+ bareJid: Strophe.getBareJidFromJid($(this).attr('jid')).toLowerCase(),
+ name: $(this).attr('name'),
+ subscription: $(this).attr('subscription'),
+ groups: [],
+ presences: {}
+ };
+
+ $(this).find('group').each(function() {
+ attr['groups'].push($(this).text());
+ });
+
+ if (attr['groups'].length == 0)
+ attr['groups'].push(BeeChat.Roster.DEFAULT_GROUP);
+
+ if (!_items[attr.bareJid])
+ _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr);
+ else {
+ _items[attr.bareJid].bareJid = attr.bareJid;
+ _items[attr.bareJid].name = attr.name;
+ _items[attr.bareJid].subscription = attr.subscription;
+ _items[attr.bareJid].groups = attr.groups;
+ }
+ });
+ }
+
+ /** Function: updateFromPresence
+ * Update the roster items from a presence stanza
+ *
+ * Parameters:
+ * (XMLElement) presence - The presence stanza
+ *
+ * Returns:
+ * (String) The bare jid of the roster item who updated his presence
+ */
+ this.updateFromPresence = function(presence)
+ {
+ var jid = $(presence).attr('from').toLowerCase();
+ var attr = {
+ bareJid: Strophe.getBareJidFromJid(jid),
+ name: null,
+ subscription: null,
+ groups: null,
+ presences: {}
+ };
+
+ attr.presences[jid] = {};
+ attr.presences[jid].type = (!$(presence).attr('type')) ? 'available' : $(presence).attr('type');
+ //alert($(presence).attr('from')+presence.toString());
+ //alert("presencetype"+attr.presences[jid].type);
+
+ if (attr.presences[jid].type == 'available') {
+ $(presence).children().each(function() {
+ if (this.tagName == BeeChat.Presence.ChildElements.SHOW)
+ attr.presences[jid].show = $(this).text();
+ if (this.tagName == BeeChat.Presence.ChildElements.STATUS)
+ attr.presences[jid].status = $(this).text();
+ });
+
+ if (!attr.presences[jid].show)
+ attr.presences[jid].show = 'chat';
+ } else {
+ attr.presences[jid].show = 'offline';
+ }
+
+ if (!_items[attr.bareJid])
+ _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr);
+ else
+ _items[attr.bareJid].presences[jid] = attr.presences[jid];
+ }
+
+ /** Function: getOnlineItems
+ *
+ *
+ */
+ this.getOnlineItems = function()
+ {
+ var sortedOnlineBareJid = [];
+ var sortedOnlineItems = {};
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+
+ var pres = _items[key].getStrongestPresence();
+
+ if (pres != null && pres.type == 'available') {
+ sortedOnlineBareJid.push(key);
+ }
+ }
+
+ if (sortedOnlineBareJid.length > 1) {
+ sortedOnlineBareJid.sort();
+ sortedOnlineBareJid.sort(statusSort);
+ }
+
+ for (var key in sortedOnlineBareJid) {
+ sortedOnlineItems[sortedOnlineBareJid[key]] = _items[sortedOnlineBareJid[key]];
+ }
+
+ return (sortedOnlineItems);
+ }
+
+ /** Function: getSizeOnlineItems
+ * Return the number of available items
+ *
+ * Returns:
+ * (int) The number of available items
+ */
+ this.getSizeOnlineItems = function()
+ {
+ var n = 0;
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+
+ var pres = _items[key].getStrongestPresence();
+
+ if (pres != null && pres.type == 'available')
+ ++n;
+ }
+ return (n);
+ }
+
+ /** Function: getItemsUsernamesAsList
+ *
+ */
+ this.getItemsUsernamesAsList = function()
+ {
+ var data = '';
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+ data = data + Strophe.getBareJidFromJid(key) + ',';
+ // data = data + Strophe.getNodeFromJid(key) + ',';
+ }
+
+ return (data);
+ }
+
+ /** PrivateFunction: statusSort
+ *
+ */
+ function statusSort(x, y)
+ {
+ var xPres = _items[x].getStrongestPresence();
+ var yPres = _items[y].getStrongestPresence();
+
+ if (xPres != null && yPres != null)
+ return (BeeChat.Core.Roster.Utils.comparePresences(xPres, yPres));
+ return (0);
+ }
+
+ this.init();
+};
+
+BeeChat.Core.Roster.Utils = {
+
+ /** Function: comparePresences
+ * Compare the two presences x and y
+ *
+ * Parameters:
+ * (Object) xPres - The x presence in object notation
+ * (Object) yPres - The y presence in object notation
+ *
+ * Returns:
+ * 0 if presence are equal, 1 if x > y, -1 if y > x
+ *
+ * Note:
+ * Presences are tagged in the following order:
+ * ONLINE < DND < AWAY < XA < OFFLINE
+ *
+ */
+ comparePresences: function(xPres, yPres)
+ {
+ var xRate = 0;
+ var yRate = 0;
+
+ if (xPres.type == 'unavailable')
+ xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.type.toUpperCase()];
+ if (yPres.type == 'unavailable')
+ yRate += BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.type.toUpperCase()];
+
+ if (xPres.show != null)
+ xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.show.toUpperCase()];
+ if (yPres.show != null)
+ yRate =+ BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.show.toUpperCase()];
+
+ if (xRate > yRate)
+ return (1);
+ else if (xRate == yRate)
+ return (0);
+ return (-1);
+ }
+};
+
+
+/** Constructor: BeeChat.Core.RosterItem
+ * Create a BeeChat.Core.RosterItem object
+ *
+ * Parameters:
+ * (Object) attr - The RosterItem's attributes in object notation
+ *
+ * Returns:
+ * A new BeeChat.Core.RosterItem.
+ */
+BeeChat.Core.RosterItem = function()
+{
+ this.bareJid = (arguments.length > 0) ? arguments[0].bareJid : null;
+ this.name = (arguments.length > 0) ? arguments[0].name : null;
+ this.subscription = (arguments.length > 0) ? arguments[0].subscription : null;
+ this.groups = (arguments.length > 0) ? arguments[0].groups : null;
+ this.presences = (arguments.length > 0) ? arguments[0].presences : null;
+ this.icon_small = (arguments.length > 0) ? arguments[0].icon_small : null;
+ this.icon_tiny = (arguments.length > 0) ? arguments[0].icon_tiny : null;
+ this.status = (arguments.length > 0) ? arguments[0].status : null;
+};
+BeeChat.Core.RosterItem.prototype = {
+ /** Function: getStrongestPresence
+ * Return the strongest presence of the RosterItem
+ *
+ */
+ getStrongestPresence: function()
+ {
+ var res = null;
+
+ for (var key in this.presences) {
+ if (typeof this.presences[key] != 'object')
+ continue;
+ if (res == null)
+ res = this.presences[key];
+ else
+ if (BeeChat.Core.Roster.Utils.comparePresences(this.presences[key], res) == -1)
+ res = this.presences[key];
+ }
+ return (res);
+ }
+};
+
+
+/** Class: BeeChat.UI
+ * An object container for all BeeChat UI functions
+ *
+ */
+BeeChat.UI = {
+ HAS_FOCUS: true,
+
+ Resources: {
+ Paths: {
+ ICONS: '<?php echo $vars['config']->url; ?>mod/beechat/graphics/icons/',
+ MEMBER_PROFILE: '<?php echo $vars['url']; ?>profile/'
+ },
+
+ Sounds: {
+ NEW_MESSAGE: 'beechat_sounds_new_message'
+ },
+
+ /*
+ Cookies: {
+ DOMAIN: 'beechannels.com',
+ FILENAME_CONN: 'beechat_conn'
+ },
+ */
+
+ Emoticons: {
+ FILENAME_SMILE: 'emoticon_smile.png',
+ FILENAME_UNHAPPY: 'emoticon_unhappy.png',
+ FILENAME_GRIN: 'emoticon_grin.png',
+ FILENAME_EVILGRIN: 'emoticon_evilgrin.png',
+ FILENAME_SURPRISED: 'emoticon_surprised.png',
+ FILENAME_TONGUE: 'emoticon_tongue.png',
+ FILENAME_WINK: 'emoticon_wink.png'
+ },
+
+ Strings: {
+ Availability: {
+ AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>",
+ AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>",
+ XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>"
+ },
+
+ Contacts: {
+ BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>"
+ },
+
+ ChatMessages: {
+ SELF: "<?php echo $_SESSION['user']->name; ?>",
+ COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>"
+ },
+
+ Box: {
+ MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>",
+ CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>",
+ SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>"
+ }
+ },
+
+ StyleClasses: {
+ Availability: {
+ Left: {
+ ONLINE: 'beechat_left_availability_chat',
+ DND: 'beechat_left_availability_dnd',
+ AWAY: 'beechat_left_availability_away',
+ XA: 'beechat_left_availability_xa',
+ OFFLINE: 'beechat_left_availability_offline',
+ ROOM: 'beechat_left_availability_room'
+ },
+
+ Right: {
+ ONLINE: 'beechat_right_availability_chat',
+ DND: 'beechat_right_availability_dnd',
+ AWAY: 'beechat_right_availability_away',
+ XA: 'beechat_right_availability_xa',
+ OFFLINE: 'beechat_right_availability_offline',
+ ROOM: 'beechat_right_availability_room'
+ },
+
+ Control: {
+ UP: 'beechat_availability_switcher_control_up',
+ DOWN: 'beechat_availability_switcher_control_down'
+ }
+ },
+
+ ChatBox: {
+ MAIN: 'beechat_chatbox',
+ MAINROOM: 'beechat_chatbox_room',
+ TOP: 'beechat_chatbox_top',
+ SUBTOP: 'beechat_chatbox_subtop',
+ TOP_ICON: 'beechat_chatbox_top_icon',
+ TOP_CONTROLS: 'beechat_chatbox_top_controls',
+ CONTENT: 'beechat_chatbox_content',
+ INPUT: 'beechat_chatbox_input',
+ BOTTOM: 'beechat_chatbox_bottom',
+ CONTROL: 'beechat_chatbox_control',
+ STATE: 'beechat_chatbox_state',
+ MESSAGE: 'beechat_chatbox_message',
+ MESSAGE_SENDER: 'beechat_chatbox_message_sender',
+ MESSAGE_DATE: 'beechat_chatbox_message_date',
+ CHATROOM: 'beechat_chatbox_chatroom',
+ ROOMROSTER: 'beechat_chatbox_roomroster',
+ ROSTER_ITEM: 'beechat_chatbox_roomrosteritem'
+ },
+
+ ScrollBox: {
+ SELECTED: 'beechat_scrollbox_selected'
+ },
+
+ BOX_CONTROL: 'beechat_box_control',
+ LABEL: 'beechat_label',
+ UNREAD_COUNT: 'beechat_unread_count'
+ },
+
+ Elements: {
+ ID_DIV_BAR: 'beechat',
+ ID_DIV_BAR_CENTER: 'beechat_center',
+ ID_DIV_BAR_RIGHT: 'beechat_right',
+
+ ID_TOOLTIP_TRIGGER: 'beechat_tooltip_trigger',
+
+ ID_SPAN_CONTACTS_BUTTON: 'beechat_contacts_button',
+ ID_SPAN_CLOSE_BOX: 'beechat_box_control_close',
+
+ ID_DIV_CONTACTS: 'beechat_contacts',
+ ID_DIV_CONTACTS_CONTROLS: 'beechat_contacts_controls',
+ ID_SPAN_CONTACTS_CONTROL_MINIMIZE: 'beechat_contacts_control_minimize',
+ ID_DIV_CONTACTS_CONTENT: 'beechat_contacts_content',
+ ID_UL_CONTACTS_LIST: 'beechat_contacts_list',
+
+ ID_DIV_AVAILABILITY_SWITCHER: 'beechat_availability_switcher',
+ ID_SPAN_AVAILABILITY_SWITCHER_CONTROL: 'beechat_availability_switcher_control',
+ ID_SPAN_CURRENT_AVAILABILITY: 'beechat_current_availability',
+ ID_UL_AVAILABILITY_SWITCHER_LIST: 'beechat_availability_switcher_list',
+
+ ID_DIV_CHATBOXES: 'beechat_chatboxes',
+
+ ID_DIV_SCROLLBOXES: 'beechat_scrollboxes'
+ }
+ },
+
+
+ /** Function: initialize
+ * Initialize the BeeChat UI
+ *
+ */
+ initialize: function(ts, token)
+ {
+ this.ts = ts;
+ this.token = token;
+ $('#' + BeeChat.UI.Resources.Elements.ID_TOOLTIP_TRIGGER).tooltip({
+ offset: [-3, 8],
+ effect: 'fade'
+ });
+
+ $('#accountlinks').find('li').filter('[class=last]').bind('click', function() {
+ if (g_beechat_user != null)
+ g_beechat_user.disconnect();
+ });
+
+ BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT);
+ BeeChat.UI.ContactsList.initialize();
+ BeeChat.UI.ScrollBoxes.initialize();
+ BeeChat.UI.loadConnection();
+ },
+
+ /** Function: getUserDetails
+ * Retrieve user details
+ *
+ * Returns:
+ * User details in object notation.
+ *
+ */
+ addActionTokens: function(url_string, sep)
+ {
+ if (sep == null)
+ sep = "?";
+ return url_string + sep + "__elgg_ts="+this.ts + "&__elgg_token=" + this.token;
+ },
+
+ getUserDetails: function(cb_func)
+ {
+ var json = null;
+ var self = this;
+
+ $.ajax({
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_details"; ?>'),
+ async: true,
+ dataType: 'json',
+ success: function(data) {
+ cb_func(data);
+ }
+ });
+
+ return (json);
+ },
+
+ /** Function: connect
+ * Create the user and connect him to the BOSH service
+ *
+ * Parameters:
+ * (Object) conn - Running connection informations in object notation
+ */
+ connect: function()
+ {
+ var conn = (arguments.length > 0) ? arguments[0] : null;
+ var userDetails = {
+ jid: (conn != null) ? conn.jid : null,
+ password: null
+ }
+ var self = this;
+ //alert("connect");
+ if (conn == null || (conn != null && conn.attached)) {
+ BeeChat.UI.getUserDetails(function(retrievedUserDetails) {
+ userDetails.jid = retrievedUserDetails.username + '@' + BeeChat.DOMAIN + '/' + BeeChat.RESOURCE;
+ userDetails.password = retrievedUserDetails.password;
+ self.connect_end(conn, userDetails)
+ });
+ }
+ else
+ this.connect_end(conn, userDetails)
+ },
+
+ connect_end: function(conn, userDetails)
+ {
+ g_beechat_user = new BeeChat.Core.User(userDetails.jid);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, BeeChat.UI.updateConnectionStatus);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_ROSTER, BeeChat.UI.onRosterUpdate);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_PRESENCE, BeeChat.UI.ContactsList.update);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, BeeChat.UI.onChatMessage);
+
+ if (conn == null || (conn != null && conn.attached))
+ g_beechat_user.connect(userDetails.password);
+ else
+ g_beechat_user.attach(conn.sid, conn.rid);
+ },
+
+ /** Function: disconnect
+ * Terminate the user's XMPP session
+ *
+ */
+ disconnect: function()
+ {
+ g_beechat_user.disconnect();
+ },
+
+ /** Function: updateConnectionStatus
+ *
+ */
+ updateConnectionStatus: function(connStatusMsg)
+ {
+ BeeChat.UI.ContactsList.updateButtonText(connStatusMsg);
+ if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.ONLINE) {
+ if (!g_beechat_user.isAttached()) {
+ debugXMPP("not attached");
+ BeeChat.UI.ScrollBoxes.isOpened = true;
+ g_beechat_user.requestRoster();
+ g_beechat_user.reconnectRooms();
+ //BeeChat.UI.ContactsList.toggleDisplay();
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show();
+ $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').removeAttr('disabled');
+ for (room_idx in g_user_rooms) {
+ var room = g_user_rooms[room_idx];
+ var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]);
+ if (chatBox.length == 0) {
+ g_beechat_user.joinRoom(room[0], room[1])
+ }
+ }
+
+ }
+ if (g_beechat_user.isAttached()) {
+ debugXMPP("attached");
+ BeeChat.UI.loadState();
+ }
+
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online');
+ BeeChat.UI.saveConnection();
+ }
+ else if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.OFFLINE) {
+ var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS);
+
+ if (!contactsBoxElm.is(':hidden'))
+ BeeChat.UI.ContactsList.toggleDisplay();
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).empty();
+ BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT);
+ BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON);
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'offline');
+ $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').attr('disabled', 'true');
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().hide();
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children()
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()]);
+ g_beechat_user = null;
+ BeeChat.UI.saveConnection();
+ }
+ },
+
+ /** Function: saveConnection
+ * Save connection informations (non sensible data) in $_SESSION.
+ *
+ */
+ saveConnection: function()
+ {
+ var conn = null;
+
+ if (g_beechat_user != null) {
+ var userConn = g_beechat_user.getConnection();
+
+ conn = {
+ 'jid': userConn.jid,
+ 'sid': userConn.sid,
+ 'rid': userConn.rid,
+ 'attached': g_beechat_user.isAttached()
+ };
+ }
+ var self = this;
+
+ $.ajax({
+ type: 'POST',
+ async: false,
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'),
+ data: { beechat_conn: JSON.stringify(conn) }
+ });
+
+ /*
+ $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, null);
+ $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, JSON.stringify(conn), {path: '/', domain: BeeChat.UI.Resources.Cookies.DOMAIN});
+ */
+ },
+
+ /** Function: loadConnection
+ * Check if a connection already exists. In the case that a connection exists,
+ * this function triggers the connection process.
+ *
+ */
+ loadConnection: function()
+ {
+ var self = this;
+ $.ajax({
+ type: 'GET',
+ async: false,
+ cache: false,
+ dataType: 'json',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_connection"; ?>'),
+ success: function(conn) {
+ if (conn != null) {
+ if (conn.attached)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.connect(conn);
+ }
+ },
+ error: function() {
+ BeeChat.UI.connect();
+ }
+ });
+
+ /*
+ var conn = JSON.parse($.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN));
+
+ if (conn != null) {
+ if (conn.attached)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.connect(conn);
+ } else
+ BeeChat.UI.connect();
+ */
+ },
+
+ /** Function: saveState
+ * Save app state in $_SESSION
+ *
+ */
+ saveState: function()
+ {
+ var self = this;
+ var currentAvailabilityClass = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).attr('class');
+ var currentAvailability = currentAvailabilityClass.substr(currentAvailabilityClass.lastIndexOf('_') + 1);
+
+ var data = {
+ availability: currentAvailability,
+ contacts: g_beechat_roster_items,
+ chats: {},
+ contacts_list: {
+ minimized: $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).is(':hidden')
+ }
+ };
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ var contactBareJid = $(this).attr('bareJid');
+ //var contactBareJid = $(this).data('bareJid');
+ var isroom = ($(this).attr('isroom') == 'true');
+ if (isroom)
+ var roster = $(this).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ var html_content = $(this).children().filter('[bareJid="' + contactBareJid + '"]').html();
+ data.chats[contactBareJid] = {
+ 'html_content': escape(html_content),
+ 'roster_content': isroom?escape(roster.html()):'',
+ 'isroom': $(this).attr('isroom'),
+ 'group_guid': (contactBareJid in g_beechat_rooms)?g_beechat_rooms[contactBareJid]:0,
+ 'minimized': $(this).is(':hidden'),
+ 'unread': BeeChat.UI.UnreadCountBox.getElm(contactBareJid).text()
+ };
+ });
+
+ $.ajax({
+ type: 'POST',
+ async: false,
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'),
+ data: { beechat_state: JSON.stringify(data) }
+ });
+ },
+
+ /** Function: loadState
+ * Load app state from $_SESSION
+ *
+ */
+ loadState: function()
+ {
+ var self = this;
+ $.ajax({
+ type: 'GET',
+ async: true,
+ cache: false,
+ dataType: 'json',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_state"; ?>'),
+ error: function() {
+ alert('error getting state');
+ },
+ success: function(json) {
+ debugXMPP('loadState');
+ BeeChat.UI.AvailabilitySwitcher.initialize(json.availability);
+
+ if (!json.contacts_list.minimized) {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).show();
+ BeeChat.UI.ContactsList.showedStyle();
+ }
+
+ g_beechat_user.getRoster().setItems(json.contacts);
+ self.loadRosterItemsIcons(false);
+ self.loadRosterItemsStatuses(false);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ g_beechat_user.setInitialized(true);
+
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElmToShow = null;
+
+ // Load saved chats
+ for (var key in json.chats) {
+ var isroom = (json.chats[key].isroom == 'true');
+ if (isroom)
+ BeeChat.UI.ScrollBoxes.addRoom(key);
+ else
+ BeeChat.UI.ScrollBoxes.add(key);
+
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(key);
+ debugXMPP("load chat " + key);
+ chatBoxElm.hide();
+
+ if (!json.chats[key].minimized) {
+ scrollBoxElmToShow = BeeChat.UI.ScrollBoxes.getScrollBoxElm(key);
+ }
+
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + key + '"]');
+
+ chatBoxContentElm.append(unescape(json.chats[key].html_content));
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ if (isroom) {
+ g_beechat_rooms[key] = json.chats[key].room_guid;
+ var rosterElm = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ rosterElm.append(unescape(json.chats[key].roster_content));
+ }
+
+ BeeChat.UI.UnreadCountBox.update(key, json.chats[key].unread);
+ }
+ if (scrollBoxElmToShow != null)
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElmToShow));
+ else
+ scrollBoxesElm.trigger('goto', 0);
+
+ // g_beechat_user.sendPresenceAvailability(json.availability, '');
+ BeeChat.UI.ScrollBoxes.isInitialized = true;
+ BeeChat.UI.ScrollBoxes.isOpened = true;
+
+ for (var key in json.chats) {
+ if (json.chats[key].minimized) {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(key).hide();
+ BeeChat.UI.ScrollBoxes.unselect(key);
+ }
+ else {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(key).show();
+ BeeChat.UI.ScrollBoxes.select(key);
+ }
+ }
+ for (room_idx in g_user_rooms) {
+ var room = g_user_rooms[room_idx];
+ var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]);
+ if (chatBox.length == 0) {
+ g_beechat_user.joinRoom(room[0], room[1])
+ }
+ }
+
+ },
+ error: function() {
+ BeeChat.UI.ContactsList.initialize();
+ }
+ });
+ },
+
+ /** Function: loadRosterItemsIcons
+ *
+ */
+ loadRosterItemsIcons: function(is_async, cb)
+ {
+ var data = g_beechat_user.getRoster().getItemsUsernamesAsList();
+ var self = this;
+
+ $.ajax({
+ type: 'POST',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_icons"; ?>'),
+ async: is_async,
+ cache: false,
+ data: {'beechat_roster_items_usernames': data},
+ dataType: 'json',
+ success: function(json) {
+ g_beechat_user.getRoster().setIcons(json);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ if (cb) {
+ cb();
+ }
+ }
+ });
+ },
+
+ /** Function: loadRosterItemsStatuses
+ *
+ */
+ loadRosterItemsStatuses: function(is_async, cb)
+ {
+ var data = g_beechat_user.getRoster().getItemsUsernamesAsList();
+//alert(data)
+ var self = this;
+ $.ajax({
+ type: 'POST',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_statuses"; ?>'),
+ async: true, // force
+ cache: false,
+ data: {'beechat_roster_items_usernames': data},
+ dataType: 'json',
+ success: function(json) {
+ g_beechat_user.getRoster().setStatuses(json);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ if (cb) {
+ cb();
+ }
+ }
+ });
+ },
+
+ /** Function: onRosterUpdate
+ * Notified by core on a roster update
+ *
+ */
+ onRosterUpdate: function(rosterItems)
+ {
+ g_beechat_roster_items = rosterItems;
+ //alert("get roster");
+ if (!g_beechat_user.isInitialized()) {
+ //alert("load roster" + rosterItems.length);
+ BeeChat.UI.loadRosterItemsStatuses(true,
+ function() { BeeChat.UI.loadRosterItemsIcons(true,
+ function() {g_beechat_user.sendInitialPresence();}); });
+ //BeeChat.UI.loadRosterItemsIcons(false);
+ //g_beechat_user.sendInitialPresence();
+ }
+ },
+
+ /** Function: onChatMessage
+ *
+ */
+ onChatMessage: function(data)
+ {
+ if ($(data.msg).find('body').length == 0) {
+ BeeChat.UI.ChatBoxes.updateChatState(data.contactBareJid, data.msg);
+ }
+ else {
+ BeeChat.UI.ChatBoxes.update(data.contactBareJid, BeeChat.UI.Utils.getContactName(data.contactBareJid), Strophe.getText($(data.msg).find('body')[0]));
+ }
+ }
+};
+
+
+/** Class: BeeChat.UI.Resources.ReferenceTables
+ * An object container for all reference tables
+ *
+ */
+BeeChat.UI.Resources.ReferenceTables = {
+ Styles: {
+ Availability: {
+ Left: {
+ AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE,
+ CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE,
+ DND: BeeChat.UI.Resources.StyleClasses.Availability.Left.DND,
+ AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Left.AWAY,
+ XA: BeeChat.UI.Resources.StyleClasses.Availability.Left.XA,
+ UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE,
+ OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE,
+ ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM
+ },
+
+ Right: {
+ AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE,
+ CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE,
+ DND: BeeChat.UI.Resources.StyleClasses.Availability.Right.DND,
+ AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Right.AWAY,
+ XA: BeeChat.UI.Resources.StyleClasses.Availability.Right.XA,
+ UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE,
+ OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE,
+ ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Right.ROOM
+ }
+ }
+ }
+};
+
+
+/** Class: BeeChat.UI.ContactsList
+ * An object container for all ContactsList functions
+ *
+ */
+BeeChat.UI.ContactsList = {
+ /** Function: initialize
+ * Initialize the contacts list by binding elements
+ *
+ */
+ initialize: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_CONTROL_MINIMIZE).unbind('click').bind('click', BeeChat.UI.ContactsList.toggleDisplay);
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).unbind('click').bind('click', function() {
+ if (g_beechat_user == null)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.ContactsList.toggleDisplay();
+ });
+ },
+
+ /** Function: update
+ * Update the contacts list content
+ *
+ * Parameters:
+ * (Object)(BeeChat.Core.RosterItem) onlineRosterItems - A hash of RosterItems in object notation
+ *
+ */
+ update: function(onlineRosterItems)
+ {
+ var contactsListElm = $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST);
+
+ contactsListElm.children().each(function() {
+ var contactBareJid = $(this).attr('bareJid');
+
+ if (g_beechat_roster_items != null) {
+ if ($.inArray(contactBareJid, onlineRosterItems) == -1) {
+ BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid);
+ $(this).remove();
+ }
+ }
+ });
+
+ for (var key in onlineRosterItems) {
+ if (typeof onlineRosterItems[key] != 'object')
+ continue;
+
+ var contactElm = contactsListElm.find('li').filter('[bareJid="' + key + '"]');
+
+ if (contactElm.length == 0) {
+ contactElm = $('<li></li>')
+ .attr('bareJid', key)
+ .append($('<img />')
+ .attr('src', g_beechat_roster_items[key].icon_tiny))
+ .append(BeeChat.UI.Utils.getTruncatedContactName(key, 25))
+ .appendTo(contactsListElm)
+ .bind('click', function() {
+ if (!BeeChat.UI.ChatBoxes.getChatBoxElm($(this).attr('bareJid')).is(':visible')) {
+ BeeChat.UI.ContactsList.toggleDisplay();
+ }
+
+ BeeChat.UI.ScrollBoxes.add($(this).attr('bareJid'), false, true);
+ });
+ }
+
+ BeeChat.UI.ContactsList.updateContactAvailability(contactElm, key);
+ }
+
+ BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON + ' (<strong>' + g_beechat_user.getRoster().getSizeOnlineItems() + '</strong>)');
+ },
+
+ /** Function: updateContactAvailability
+ *
+ */
+ updateContactAvailability: function(contactElm, contactBareJid)
+ {
+ // Update from contactsList
+ contactElm.attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Right[g_beechat_roster_items[contactBareJid].getStrongestPresence().show.toUpperCase()]);
+
+ // Update from scrollBoxes
+ BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid);
+ },
+
+ /** Function: updateButtonText
+ *
+ *
+ */
+ updateButtonText: function(msg)
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).html(msg);
+ },
+
+ /** Function: toggleDisplay
+ * Toggle the contacts box display (hide | show)
+ *
+ */
+ toggleDisplay: function()
+ {
+ var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS);
+
+ contactsBoxElm.toggle();
+ if (contactsBoxElm.is(':hidden')) {
+ BeeChat.UI.ContactsList.hiddenStyle();
+ } else {
+ BeeChat.UI.ContactsList.showedStyle();
+ }
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide();
+ },
+
+ /** Function: hiddenStyle
+ *
+ */
+ hiddenStyle: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #BBBBBB', 'border-right': '1px solid #BBBBBB', 'background-color': '#DDDDDD'});
+ },
+
+ /** Function: showedStyle
+ *
+ */
+ showedStyle: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #666666', 'border-right': '1px solid #666666', 'background-color': 'white'});
+ }
+};
+
+
+/** Class: BeeChat.UI.AvailabilitySwitcher
+ * An object container for all AvailabilitySwitcher functions
+ *
+ */
+BeeChat.UI.AvailabilitySwitcher = {
+ /** Function: initialize
+ * Initialize the availability switcher by setting the current user's availability
+ * and binding actions
+ *
+ */
+ initialize: function(availability)
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay);
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay);
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).find('li').each(function() {
+ $(this).unbind('click').bind('click', function() {
+ var availabilityClass = $(this).attr('class');
+ var availability = availabilityClass.substr(availabilityClass.lastIndexOf('_') + 1);
+
+ if (availability == 'offline')
+ BeeChat.UI.disconnect();
+ else {
+ g_beechat_user.sendPresenceAvailability(availability, '');
+ BeeChat.UI.AvailabilitySwitcher.update(availability);
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide('slow');
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show('slow');
+ }
+ });
+ });
+ BeeChat.UI.AvailabilitySwitcher.update(availability);
+ },
+
+ /** Function: update
+ * Update the current user's availability
+ *
+ * Parameters:
+ * (BeeChat.Presence.ShowElements) availability - The current user's availability
+ */
+ update: function(availability)
+ {
+ var upperCasedAvailability = availability.toUpperCase();
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY)
+ .attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[upperCasedAvailability])
+ .text(BeeChat.UI.Resources.Strings.Availability[upperCasedAvailability]);
+
+ if (availability == 'chat')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online');
+ else if (availability == 'xa' || availability == 'away')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'away');
+ else if (availability == 'dnd')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'dnd');
+ },
+
+ /** Function: switchControlClass
+ *
+ */
+ switchControlClass: function()
+ {
+ var switcherControlElm = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL);
+
+ if (switcherControlElm.attr('class') == BeeChat.UI.Resources.StyleClasses.Availability.Control.UP)
+ switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.DOWN);
+ else
+ switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.UP);
+ },
+
+ /** Function: toggleListDisplay
+ *
+ */
+ toggleListDisplay: function()
+ {
+ BeeChat.UI.AvailabilitySwitcher.switchControlClass();
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).toggle('slow');
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).toggle('slow');
+ }
+};
+
+
+/** Class: BeeChat.UI.ScrollBoxes
+ * An object container for all ScrollBoxes related functions
+ *
+ */
+BeeChat.UI.ScrollBoxes = {
+ isInitialized: false,
+ isOpened: false,
+
+ /** Function: initialize
+ *
+ */
+ initialize: function() {
+ var $prev = $('#beechat_center_prev'),
+ $next = $('#beechat_center_next');
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_CENTER).serialScroll({
+ target: '#beechat_scrollboxes',
+ items: 'li',
+ prev: '#beechat_center_prev',
+ next: '#beechat_center_next',
+ axys: 'x',
+ start: 2,
+ step: -1,
+ interval: 0,
+ duration: 0,
+ cycle: false,
+ force: true,
+ jump: true,
+ lock: true,
+ lazy: true,
+ constant: true,
+
+ onBefore: function(e, elem, $pane, $items, pos) {
+ $next.add($prev).hide();
+ $prev.add($next).hide();
+ if (pos != 0) {
+ $next.show();
+ }
+ if (pos != $items.length - 1)
+ $prev.show();
+ },
+
+ onAfter: function(elem) {
+ BeeChat.UI.ChatBoxes.takeStand($(elem).attr('bareJid'));
+ BeeChat.UI.ScrollBoxes.isInitialized = true;
+ }
+ });
+ },
+
+ /** Function: add
+ * Add a scrollbox to the scrollboxes bar
+ *
+ */
+ addRoom: function(contactBareJid)
+ {
+ debugXMPP('addRoom' + contactBareJid);
+ BeeChat.UI.ScrollBoxes.add(contactBareJid, true);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM);
+ },
+
+ add: function(contactBareJid, isroom)
+ {
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = scrollBoxesElm.find('ul').children().filter('[bareJid="' + contactBareJid + '"]');
+ debugXMPP("add " + contactBareJid + " " + scrollBoxElm.length);
+ if (scrollBoxElm.length == 0) {
+ var availClass = null;
+ var pres = null;
+ if (g_beechat_roster_items != undefined)
+ pres = g_beechat_roster_items[contactBareJid] != null ? g_beechat_roster_items[contactBareJid].getStrongestPresence() : null;
+
+ if (pres != null)
+ availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()];
+ else
+ availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()];
+
+ scrollBoxElm = $('<li></li>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + availClass)
+ .attr('bareJid', contactBareJid)
+ .attr('isroom', isroom?'true':'false')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.SHOWHIDE)
+ .text(BeeChat.UI.Utils.getTruncatedContactName(contactBareJid, 11))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.BOX_CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('X')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE)
+ .bind('click', function() {
+ if (isroom)
+ g_beechat_user.leaveRoom(contactBareJid);
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+
+ BeeChat.UI.ChatBoxes.remove($(this).parent().attr('bareJid'));
+ BeeChat.UI.UnreadCountBox.remove($(this).parent().attr('bareJid'));
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(BeeChat.UI.ScrollBoxes.getSelectedScrollBoxElm()));
+ BeeChat.UI.saveState();
+ }));
+
+ scrollBoxesElm.find('ul').append(scrollBoxElm);
+ BeeChat.UI.ChatBoxes.add(contactBareJid, isroom);
+ if (arguments.length == 3 && arguments[2])
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ if (!isroom) {
+ BeeChat.UI.loadRosterItemsStatuses(true, function () { BeeChat.UI.loadRosterItemsIcons(true); });
+ }
+ } else {
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ }
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove();
+ },
+
+ /** Function: unselect
+ *
+ */
+ unselect: function(contactBareJid)
+ {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ scrollBoxElm.attr('class', (scrollBoxElm.attr('class')).replace(/beechat_scrollbox_selected/, ''));
+ },
+
+ /** Function: select
+ *
+ */
+ select: function(contactBareJid)
+ {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ var scrollBoxElmClasses = scrollBoxElm.attr('class');
+
+ if (scrollBoxElmClasses.search(/beechat_scrollbox_selected/) == -1)
+ scrollBoxElm.attr('class', scrollBoxElmClasses + ' ' + BeeChat.UI.Resources.StyleClasses.ScrollBox.SELECTED);
+ },
+
+ /** Function: updateAvailability
+ *
+ */
+ updateAvailability: function(contactBareJid)
+ {
+ var pres = g_beechat_roster_items[contactBareJid].getStrongestPresence();
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ var scrollBoxElmClasses = scrollBoxElm.attr('class');
+ var updatedAvailability = null;
+
+ if (pres != null)
+ updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()];
+ else
+ updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()];
+
+ if (scrollBoxElmClasses == undefined || scrollBoxElmClasses.search(/(beechat_left_availability_)/g) == -1) {
+ scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + updatedAvailability);
+ } else {
+ updatedAvailability = updatedAvailability.replace(/(beechat_left_availability)/g, '');
+
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_chat)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_dnd)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_away)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_xa)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_offline)/g, updatedAvailability);
+
+ scrollBoxElm.attr('class', scrollBoxElmClasses);
+ }
+ },
+
+ /** Function: getSelectedScrollBoxElm
+ *
+ */
+ getSelectedScrollBoxElm: function(contactBareJid)
+ {
+ var elm = undefined;
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().each(function() {
+ if ($(this).attr('class').search(/beechat_scrollbox_selected/) != -1)
+ elm = $(this);
+ });
+
+ return (elm);
+ },
+
+ /** Function: getScrollBoxElm
+ *
+ */
+ getScrollBoxElm: function(contactBareJid)
+ {
+ return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().filter('[bareJid="' + contactBareJid + '"]');
+ }
+};
+
+
+/** Class: BeeChat.UI.ChatBoxes
+ * An object container for all ChatBoxes related functions
+ *
+ */
+BeeChat.UI.ChatBoxes = {
+ dateLastComposing: {},
+ lastTimedPauses: {},
+
+ /** Function: add
+ *
+ */
+ add: function(contactBareJid, isroom)
+ {
+ var chatBoxes = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES);
+
+ if ($(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]').length == 0) {
+ debugXMPP("create chatbox " + contactBareJid);
+ var chatBox = $('<div></div>')
+ .attr('class', isroom ? BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN : BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN)
+ .attr('bareJid', contactBareJid)
+ .attr('isroom', isroom ? 'true' : 'false')
+ .hide();
+
+ var chatBoxTop = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP);
+ if (!isroom)
+ chatBoxTop.append($('<a></a>')
+ .attr('href', BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid))
+ .append($('<img />')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_ICON)
+ .attr('src', (g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined)?g_beechat_roster_items[contactBareJid].icon_small:'')))
+ chatBoxTop.append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL)
+ .html(isroom?BeeChat.UI.Utils.getTruncatedContactName(contactBareJid).split('@')[0]:'<a href="' + BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid) + '">' + BeeChat.UI.Utils.getTruncatedContactName(contactBareJid) + '</a>'))
+ .append($('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_CONTROLS)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('X')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE)
+ .bind('click', function() {
+ if (isroom)
+ g_beechat_user.leaveRoom(contactBareJid);
+ BeeChat.UI.ChatBoxes.remove(contactBareJid);
+ }))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('_')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.MINIMIZE)
+ .css({'font-size': '1.6em', 'position': 'relative', 'line-height': '4px'})
+ .bind('click', function() {
+ BeeChat.UI.ScrollBoxes.unselect($(this).parent().parent().parent().attr('bareJid'));
+ $(this).parent().parent().parent().fadeOut('slow');
+ })));
+
+ var chatBoxSubTop = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.SUBTOP)
+ .append(BeeChat.UI.Utils.getTruncatedContactStatus((g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined && g_beechat_roster_items[contactBareJid].status != undefined) ? g_beechat_roster_items[contactBareJid].status : ''));
+
+ var chatBoxContent = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTENT)
+ .attr('bareJid', contactBareJid);
+
+ var chatBoxInput = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT)
+ .append($('<textarea></textarea>')
+ .attr('bareJid', contactBareJid)
+ .bind('keypress', isroom?BeeChat.UI.ChatBoxes.onRoomTypingMessage:BeeChat.UI.ChatBoxes.onTypingMessage)
+ .bind('keyup', function(e) {
+ if ((e.keyCode ? e.keyCode : e.which) == 13)
+ $(this).attr('value', '');
+ }));
+
+ var chatBoxBottom = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.BOTTOM)
+ .append($('<span></span>')
+ .append($('<span></span>')));
+ if (isroom) {
+ //var chatBoxBox = $('<div></div>')
+ // .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CHATROOM)
+ var chatBoxRoster = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER)
+ //chatBoxBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom)
+ //chatBox.append(chatBoxRoster).append(chatBoxBox).appendTo(chatBoxes);
+ chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).append(chatBoxRoster).appendTo(chatBoxes);
+ }
+ else
+ chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).appendTo(chatBoxes);
+ }
+ else {
+ /*debugXMPP("show chatbox " + contactBareJid);
+ var chatBox = $(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]');
+ chatBox.show();*/
+ }
+ },
+
+ /** Function: takeStand
+ *
+ */
+ takeStand: function(contactBareJid)
+ {
+ var chatBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children();
+ var chatBoxElm = chatBoxesElm.filter('[bareJid="' + contactBareJid + '"]');
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+
+ if (!chatBoxElm.is(':hidden')) {
+ BeeChat.UI.ScrollBoxes.unselect(contactBareJid);
+ chatBoxElm.hide();
+ } else {
+ // Hide all other chatboxes
+ $.each(chatBoxesElm.filter('[bareJid!="' + contactBareJid + '"]'), function() {
+ BeeChat.UI.ScrollBoxes.unselect($(this).attr('bareJid'));
+ $(this).hide();
+ });
+ // Add selected scrollbox style
+ BeeChat.UI.ScrollBoxes.select(contactBareJid);
+ // Remove UnreadCountBox
+ BeeChat.UI.UnreadCountBox.remove(contactBareJid);
+ // Position the chatbox
+ var pos = scrollBoxElm.position().left - (chatBoxElm.width() - scrollBoxElm.width()) + 24;
+ chatBoxElm.css({'left': pos});
+ if (!BeeChat.UI.ScrollBoxes.isOpened)
+ return;
+ chatBoxElm.show().css({'left': pos});
+ // Scroll down the content of the chatbox
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ // Focus textarea
+ chatBoxElm.children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea').focus();
+ }
+ },
+
+ /** Function: onTypingMessage
+ *
+ */
+ onRoomTypingMessage: function(e) {
+ BeeChat.UI.ChatBoxes._onTypingMessage(e, true, this);
+ },
+
+ onTypingMessage: function(e) {
+ BeeChat.UI.ChatBoxes._onTypingMessage(e, false, this);
+ },
+
+ _onTypingMessage: function(e, isroom, self)
+ {
+ var keyCode = (e.keyCode) ? e.keyCode : e.which;
+ var contactBareJid = $(self).attr('bareJid');
+
+ var msgtype = BeeChat.Message.Types.CHAT;
+ if (isroom)
+ msgtype = BeeChat.Message.Types.GROUPCHAT;
+
+ if (keyCode == 13 && $(self).val() != '') {
+ g_beechat_user.sendChatMessage(contactBareJid, jQuery.trim($(self).val()), msgtype);
+ if (!isroom)
+ BeeChat.UI.ChatBoxes.update(contactBareJid, BeeChat.UI.Utils.truncateString(BeeChat.UI.Resources.Strings.ChatMessages.SELF, 24), $(self).val(), isroom);
+ clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]);
+ BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = null;
+ } else {
+ var nowTime = new Date().getTime();
+
+ if (BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] == null || BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] + 2000 < nowTime) {
+ BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] = nowTime;
+ g_beechat_user.sendChatStateMessage(contactBareJid, BeeChat.Message.ChatStates.COMPOSING);
+ }
+
+ clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]);
+ BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = setTimeout('g_beechat_user.sendChatStateMessage(\'' + contactBareJid + '\', BeeChat.Message.ChatStates.PAUSED)', 2000);
+
+ var chatBoxTextAreaElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea');
+ chatBoxTextAreaElm.attr({scrollTop: chatBoxTextAreaElm.attr('scrollHeight')});
+ }
+ },
+
+ updateRoster: function(contactBareJid, fromName, presence)
+ {
+ var availability = $(presence).attr('type');
+ var item = $(presence).find('item');
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ //BeeChat.UI.ScrollBoxes.addRoom(contactBareJid);
+ chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ }
+
+ //var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+
+ var roster = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ if (availability == 'unavailable') {
+ roster.find('div').filter('[contactName='+fromName+']').remove();
+ }
+ else {
+ var hasName = roster.find('div').filter('[contactName='+fromName+']');
+ if (hasName.length == 0) {
+ roster.append($('<div>' + fromName + '</div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROSTER_ITEM)
+ .attr('title', item.attr('affiliation') + '/' + item.attr('role'))
+ .attr('contactName', fromName))
+ }
+ }
+ },
+
+
+ /** Function: update
+ *
+ */
+ update: function(contactBareJid, fromName, msg, isroom)
+ {
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ debugXMPP(contactBareJid + " " + msg + " " + chatBoxElm.length);
+ if (chatBoxElm.length == 0) {
+ if (isroom) {
+ BeeChat.UI.ScrollBoxes.addRoom(contactBareJid);
+ BeeChat.UI.ChatBoxes.show(contactBareJid);
+ BeeChat.UI.ChatBoxes.takeStand(contactBareJid);
+ }
+ else {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid,false,true);
+ // BeeChat.UI.ChatBoxes.show(contactBareJid);
+ BeeChat.UI.ChatBoxes.takeStand(contactBareJid);
+ }
+ chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ }
+
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+
+ chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove();
+
+ var chatBoxLastMessageElm = $(chatBoxContentElm).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE + ']').filter(':last');
+
+ if (chatBoxLastMessageElm && chatBoxLastMessageElm.find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER + ']').text() == fromName) {
+ chatBoxLastMessageElm.append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>');
+ } else {
+ chatBoxContentElm.append($('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER)
+ .text(fromName))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_DATE)
+ .text(BeeChat.UI.Utils.getNowFormattedTime()))
+ .append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>'));
+ }
+
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+
+ if (BeeChat.UI.ScrollBoxes.isInitialized == false) {
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ }
+
+ debugXMPP("about to update number!");
+ if (chatBoxElm.is(':hidden')) {
+ debugXMPP("update number!");
+ BeeChat.UI.UnreadCountBox.update(contactBareJid);
+// if (BeeChat.UI.HAS_FOCUS)
+// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play();
+ }
+
+// if (!BeeChat.UI.HAS_FOCUS)
+// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play();
+ },
+
+ /** Function: updateChatState
+ *
+ */
+ updateChatState: function(contactBareJid, msg)
+ {
+ var chatBoxContentElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[bareJid="' + contactBareJid + '"]');
+
+ $(msg).children().each(function() {
+ if (this.tagName == BeeChat.Message.ChatStates.COMPOSING) {
+ if (chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').length == 0) {
+ $('<p></p>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.STATE)
+ .html(BeeChat.UI.Utils.getContactName(contactBareJid) + BeeChat.UI.Resources.Strings.ChatMessages.COMPOSING + "</br />")
+ .appendTo(chatBoxContentElm);
+ }
+ } else if (this.tagName == BeeChat.Message.ChatStates.PAUSED) {
+ chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove();
+ }
+ });
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).remove();
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove();
+ },
+
+ /** Function: show
+ *
+ */
+ show: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).show();
+ },
+
+ /** Function: hide
+ *
+ */
+ hide: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).hide();
+ },
+
+ /** Function: getChatBoxElm
+ *
+ */
+ getChatBoxElm: function(contactBareJid)
+ {
+ return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().filter('[bareJid="' + contactBareJid + '"]');
+ }
+};
+
+BeeChat.UI.UnreadCountBox = {
+ /** Function: add
+ *
+ */
+ add: function(contactBareJid)
+ {
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT));
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.UnreadCountBox.getElm(contactBareJid).remove();
+ },
+
+ /** Function: update
+ *
+ */
+ update: function(contactBareJid)
+ {
+ if (arguments.length > 1 && !arguments[1])
+ return;
+
+ var unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid);
+ if (unreadCountBoxElm.length == 0) {
+ BeeChat.UI.UnreadCountBox.add(contactBareJid);
+ unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid);
+ }
+ if (arguments.length == 1) {
+ var unreadCount = unreadCountBoxElm.text();
+ unreadCountBoxElm.text(++unreadCount);
+ } else
+ unreadCountBoxElm.text(arguments[1]);
+ },
+
+ /** Function: getElm
+ *
+ */
+ getElm: function(contactBareJid)
+ {
+ return BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT +' ]');
+ }
+};
+
+/** Class: BeeChat.UI.Utils
+ * An object container for all UI utilities functions
+ *
+ */
+BeeChat.UI.Utils = {
+ /** Function: getTruncatedContactName
+ *
+ */
+ getTruncatedContactName: function(bareJid)
+ {
+ return (BeeChat.UI.Utils.truncateString(BeeChat.UI.Utils.getContactName(bareJid), (arguments.length == 2) ? arguments[1] : 21));
+ },
+
+ /** Function: getTruncatedContactStatus
+ *
+ */
+ getTruncatedContactStatus: function(contactStatus)
+ {
+ return (BeeChat.UI.Utils.truncateString(contactStatus, (arguments.length == 2 ? arguments[1] : 50)));
+ },
+
+ /** Function: getContactName
+ *
+ */
+ getContactName: function(bareJid)
+ {
+ var contactName = bareJid;
+
+ if (g_beechat_roster_items != null && g_beechat_roster_items[bareJid])
+ contactName = g_beechat_roster_items[bareJid].name;
+ // no contact name so we show bareJid
+ if (!contactName || contactName == '')
+ contactName = bareJid;
+
+ return (contactName);
+ },
+
+ /** Function: getPrintableChatMessage
+ *
+ */
+ getPrintableChatMessage: function(msg)
+ {
+ var val = new String;
+ val = $('<div>' + msg + '</div>');
+ msg = val.text();
+
+ msg = jQuery.trim(msg);
+ msg = BeeChat.UI.Utils.replaceLinks(msg);
+ msg = BeeChat.UI.Utils.replaceSmileys(msg);
+
+ return msg;
+ },
+
+ /** Function: getNowFormattedTime
+ *
+ */
+ getNowFormattedTime: function()
+ {
+ var date = new Date();
+
+ var hours = date.getHours();
+ var minutes = date.getMinutes();
+ var seconds = date.getSeconds();
+
+ if (hours < 10)
+ hours = '0' + hours;
+ if (minutes < 10)
+ minutes = '0' + minutes;
+ if (seconds < 10)
+ seconds = '0' + seconds;
+ return (hours + ':' + minutes + ':' + seconds);
+ },
+
+
+ /** Function: replaceSmileys
+ * Replace smileys founded in a string to beautiful icons :)
+ *
+ * Parameters:
+ * (String) str - The string containing smileys
+ *
+ */
+ replaceSmileys: function(str)
+ {
+ str = str.replace(/(;\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_WINK + '" />');
+ str = str.replace(/(:\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SMILE + '" />');
+ str = str.replace(/(:\()/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_UNHAPPY + '" />');
+ str = str.replace(/(:D)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_GRIN + '" />');
+ str = str.replace(/(:o)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SURPRISED + '" />');
+ str = str.replace(/(xD)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_EVILGRIN + '" />');
+ str = str.replace(/(:p)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_TONGUE + '" />');
+
+ return (str);
+ },
+
+ /** Function: replaceLinks
+ * Transform links founded in a string to clickable links
+ *
+ * Parameters:
+ * (String) str - The string where will be replaced links
+ */
+ replaceLinks: function(str)
+ {
+ var xpr =
+ /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
+
+ return (str.replace(xpr, '<a href="$1" target="_blank">$1</a>'));
+ },
+
+ /** Function: truncateString
+ * Truncate a string at a specified length
+ *
+ * Parameters:
+ * (String) str - The string to truncate
+ * (int) len - The maximum length of str
+ */
+ truncateString: function(str, len)
+ {
+ if (str != null && str.length > len)
+ return ((str.substr(0, len) + '...'));
+ return (str);
+ }
+};
+
+
+/** Executed when the DOM is ready
+ *
+ */
+function init_beechat(ts, token) {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ BeeChat.UI.initialize(ts, token);
+}
+
+/** Window resizing
+ *
+ */
+$(window).resize(function() {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm($(this).attr('bareJid'));
+ var pos = scrollBoxElm.position().left - ($(this).width() - scrollBoxElm.width()) + 24;
+
+ $(this).css({'left': pos});
+ });
+});
+
+
+/** Executed when the page is unloaded
+ *
+ */
+$(window).unload(function() {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ if (!$('#beechat').length)
+ return;
+
+ if (g_beechat_user != null) {
+ g_beechat_user.requestSessionPause();
+ BeeChat.UI.saveState();
+ }
+
+ BeeChat.UI.saveConnection();
+ });
+
+
+/** Check whether the BeeChat tab is active or not
+ *
+ */
+$(window).bind('blur', function() {
+ BeeChat.UI.HAS_FOCUS = false;
+ });
+
+$(window).bind('focus', function() {
+ BeeChat.UI.HAS_FOCUS = true;
+ });
diff --git a/mod/beechat/views/default/beechat/beechat.php b/mod/beechat/views/default/beechat/beechat.php
new file mode 100644
index 000000000..397d35f74
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.php
@@ -0,0 +1,84 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+if (elgg_is_logged_in() && elgg_get_logged_in_user_entity()->chatenabled && elgg_get_context() != 'admin') {
+?>
+<div id="beechat">
+ <div id="beechat_left">
+ <a id="beechat_tooltip_trigger" href="<?php echo $vars['url']; ?>"><img src="<?php echo $vars['config']->wwwroot; ?>favicon.ico" /></a>
+ <div class="tooltip tooltipchat">
+ <h3><?php echo elgg_echo('beechat:icons:home'); ?></h3>
+ </div>
+ </div>
+ <div id="beechat_center">
+ <span id="beechat_center_prev" class="prev"></span>
+ <div id="beechat_scrollboxes"><ul></ul></div>
+ <span id="beechat_center_next" class="next"></span>
+ </div>
+ <div id="beechat_right">
+ <span id="beechat_contacts_button" class="offline">
+ <?php echo elgg_echo('beechat:contacts:button'); ?>
+ </span>
+ </div>
+ <div id="beechat_contacts">
+ <div id="beechat_contacts_top">
+ <span class="beechat_label"><?php echo elgg_echo('beechat:contacts:button'); ?></span>
+ <div id="beechat_contacts_controls">
+ <span id="beechat_contacts_control_minimize" class="beechat_control" title="<?php echo elgg_echo('beechat:box:minimize'); ?>">_</span>
+ </div>
+ <br clear="all" />
+ </div>
+ <div id="beechat_availability_switcher">
+ <span id="beechat_current_availability"></span>
+ <span class="beechat_availability_switcher_control_down" id="beechat_availability_switcher_control"></span>
+ </div>
+ <div id="beechat_contacts_content">
+ <ul id="beechat_contacts_list"></ul>
+ <ul id="beechat_availability_switcher_list">
+ <li class="beechat_left_availability_chat"><?php echo elgg_echo('beechat:availability:available'); ?></li>
+ <li class="beechat_left_availability_dnd"><?php echo elgg_echo('beechat:availability:dnd'); ?></li>
+ <li class="beechat_left_availability_away"><?php echo elgg_echo('beechat:availability:away'); ?></li>
+ <li class="beechat_left_availability_xa"><?php echo elgg_echo('beechat:availability:xa'); ?></li>
+ <li class="beechat_left_availability_offline"><?php echo elgg_echo('beechat:availability:offline'); ?></li>
+ </ul>
+ </div>
+ <div id="beechat_contacts_bottom">
+ <span id="beechat_contacts_bottom_bar"></span>
+ </div>
+ </div>
+ <div id="beechat_chatboxes"></div>
+</div>
+<!-- SOUNDS -->
+<!--
+<embed src="<?php echo $vars['config']->staticurl; ?>mod/beechat/sounds/newmessage.wav" autostart=false width=0 height=0
+ id="beechat_sounds_new_message"
+ enablejavascript="true" />
+-->
+
+<?php
+ $ts = time();
+ $token = generate_action_token($ts);
+?>
+
+<script>
+ $(function () {
+ var e = document.createElement('script');
+ e.async = true;
+ e.type = 'text/javascript';
+ e.text = 'init_beechat("<?php echo $ts; ?>","<?php echo $token; ?>");';
+ document.getElementById('beechat').appendChild(e);
+
+ })
+</script>
+
+<?php
+ }
+?>
diff --git a/mod/beechat/views/default/beechat/beechat.userjs.php b/mod/beechat/views/default/beechat/beechat.userjs.php
new file mode 100644
index 000000000..ed59b683f
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.userjs.php
@@ -0,0 +1,54 @@
+<script type="text/javascript">
+BeeChat.Events.Messages = {
+ ConnectionStates: {
+ CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>",
+ AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>",
+ FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>",
+ DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>"
+ }
+ }
+
+BeeChat.UI.Resources.Strings = {
+ Availability: {
+ AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>",
+ AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>",
+ XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>"
+ },
+
+ Contacts: {
+ BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>"
+ },
+
+ ChatMessages: {
+ SELF: "<?php echo $_SESSION['user']->name; ?>",
+ COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>"
+ },
+
+ Box: {
+ MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>",
+ CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>",
+ SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>"
+ }
+ }
+g_user_rooms = new Array();
+<?php
+if (elgg_is_logged_in()) {
+ $user = elgg_get_logged_in_user_entity();
+ $chatrooms = elgg_get_entities_from_relationship(array('relationship' => 'groupchat',
+ 'relationship_guid' => $user->guid,
+ 'inverse_relationship' => false,
+ 'limit' => 0));
+ if (!empty($chatrooms)) {
+ foreach($chatrooms as $chatroom) {
+ echo "g_user_rooms.push(['".beechat_friendly_title($chatroom->name)."@".elgg_get_plugin_setting("groupdomain", "beechat")."', '".$chatroom->guid."']);";
+ }
+ }
+}
+?>
+</script>
diff --git a/mod/beechat/views/default/beechat/screen.css.php b/mod/beechat/views/default/beechat/screen.css.php
new file mode 100644
index 000000000..930e60089
--- /dev/null
+++ b/mod/beechat/views/default/beechat/screen.css.php
@@ -0,0 +1,672 @@
+<?php
+ global $CONFIG;
+ $url = $CONFIG->wwwroot;
+
+?>
+/**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+div#beechat {
+ display: block !important;
+ display: none;
+ position: fixed;
+ left: 1%;
+ right: 1%;
+ bottom: 0;
+ margin: 0;
+ padding: 0;
+ height: 20px;
+ z-index: 999;
+
+ font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
+ font-size: 0.9em;
+ color: #222222;
+ background-color: #DDDDDD;
+ border-top: 1px solid #BBBBBB;
+ border-left: 1px solid #BBBBBB;
+}
+div#beechat a img {
+ border: none;
+}
+div#beechat a {
+ text-decoration: none;
+}
+div#beechat img {
+ vertical-align: middle;
+}
+div#beechat a:hover {
+ text-decoration: underline;
+}
+.beechat_control {
+ cursor: pointer;
+ color: #CCCCFF;
+ font-size: 1.6em;
+}
+.beechat_control:hover {
+ color: white;
+}
+.beechat_box_control {
+ cursor: pointer;
+ color: #888888;
+ font-size: 1em;
+}
+.beechat_box_control:hover {
+ color: #222222;
+}
+.beechat_chatbox_control {
+ cursor: pointer;
+ color: #CCCCFF;
+ font-size: 1.6em;
+}
+.beechat_chatbox_control:hover {
+ color: white;
+}
+.beechat_label {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+/*
+** -
+** left side
+** -
+*/
+div#beechat_left {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 116px;
+ height: 18px;
+ margin: 0;
+ padding: 1px 2px;
+}
+
+
+/*
+** -
+** right side
+** -
+*/
+div#beechat_right {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 220px;
+ height: 20px;
+ margin: 0;
+ padding: 0 0 0 0;
+
+ border-left: 1px solid #BBBBBB;
+ border-right: 1px solid #BBBBBB;
+}
+div#beechat_contacts {
+ position: absolute;
+ right: 0px;
+ bottom: 0;
+ width: 222px;
+ height: 240px;
+ margin: 0 auto 20px auto;
+ padding: 0;
+ display: none;
+
+ background-color: white;
+}
+div#beechat_contacts_top {
+ color: white;
+ background-color: #193C60;
+ width: 220px;
+ height: 32px;
+
+ border-top: 1px solid #0B2C4F;
+ border-left: 1px solid #0B2C4F;
+ border-right: 1px solid #0B2C4F;
+}
+div#beechat_contacts_top .beechat_label {
+ float: left;
+ height: 20px;
+ padding: 6px;
+}
+div#beechat_contacts_controls {
+ margin: 0;
+ padding: 0;
+}
+div#beechat_contacts_controls span#beechat_contacts_control_minimize {
+ position: relative;
+ top: -7px;
+ float: right;
+ display: block;
+ width: 20px;
+ height: 20px;
+ padding: 2px;
+
+ font-size: 1.6em;
+ font-weight: bold;
+ text-align: center;
+}
+span#beechat_contacts_button {
+ display: block;
+ width: 190px;
+ padding: 2px 6px 0 24px;
+ height: 18px;
+ cursor: pointer;
+ font-size: 1.1em;
+ font-weight: normal;
+
+ background-image: url('<?php echo $url; ?>mod/beechat/graphics/icons/statuses.png');
+}
+span#beechat_contacts_button.online {
+ background-position: 4px -750px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.dnd {
+ background-position: 4px -796px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.away {
+ background-position: 4px -842px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.offline {
+ background-position: 4px -888px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button:hover {
+ background-color: white;
+}
+div#beechat_availability_switcher {
+ width: 218px;
+ height: 24px;
+ margin: 0;
+ padding: 0 0 0 2px;
+
+ background-color: #EEEEEE;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #BBBBBB;
+}
+span#beechat_current_availability {
+ float: left;
+ padding: 4px 4px 4px 22px;
+
+ font-weight: bold;
+ cursor: pointer;
+}
+span#beechat_current_availability:hover {
+ text-decoration: underline;
+}
+span#beechat_availability_switcher_control {
+ float: right;
+ width: 24px;
+ height: 20px;
+ cursor: pointer;
+}
+span.beechat_availability_switcher_control_up {
+ background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_up.png');
+}
+span.beechat_availability_switcher_control_down {
+ background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_down.png');
+}
+ul#beechat_availability_switcher_list {
+ display: none;
+ padding:0;
+ margin:0;
+ list-style:none;
+}
+ul#beechat_availability_switcher_list li {
+ margin: 0;
+ padding: 4px 4px 4px 24px;
+
+ cursor: pointer;
+}
+ul#beechat_availability_switcher_list li:hover {
+ background-color: #EEEEEE;
+}
+div#beechat_contacts_content {
+ width: 220px;
+ height: 164px;
+ overflow: auto;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+ul#beechat_contacts_list {
+ background-color: white;
+ padding:0;
+ margin:0;
+ list-style:none;
+}
+ul#beechat_contacts_list li img {
+ margin: 0 4px 0 0;
+ width: 25px;
+ height: 25px;
+}
+ul#beechat_contacts_list li {
+ margin: 0;
+ padding: 4px 4px 4px 6px;
+
+ cursor: pointer;
+ color: #333;
+}
+ul#beechat_contacts_list li:hover {
+ background-color: #F5F6F8;
+ color: #333;
+}
+div#beechat_contacts_bottom {
+ width: 220px;
+ height: 18px;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+}
+span#beechat_contacts_bottom_bar {
+ position: absolute;
+ display: block;
+ bottom: 0;
+ width: 210px;
+ height: 1px;
+
+ background-color: #BBBBBB;
+ margin: auto 4px;
+}
+
+
+/*
+** -
+** center area
+** -
+*/
+div#beechat_center {
+ float: right;
+ display: block;
+ width: 586px;
+ height: 20px;
+ margin: 0 220px 0 100px;
+ *margin: 0 312px 0 100px;
+ padding: 0;
+}
+div#beechat_center .next, div#beechat_center .prev {
+ display: none;
+
+ border-left: 1px solid #BBBBBB;
+ cursor: pointer;
+}
+div#beechat_center .next {
+ position: absolute;
+ right: 220px;
+ width: 24px;
+ height: 20px;
+
+ background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_next.png");
+}
+div#beechat_center .prev {
+ position: absolute;
+ right: 872px;
+ width: 24px;
+ height: 20px;
+
+ background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_previous.png");
+}
+div#beechat_scrollboxes {
+ float: right;
+ overflow: hidden;
+ width: 628px;
+ height: 21px;
+ margin: 0 24px 0 24px;
+ text-align: left;
+}
+div#beechat_scrollboxes ul {
+ width: 200000em;
+ list-style: none;
+ padding:0;
+ margin:0;
+}
+div#beechat_scrollboxes ul li {
+ float: right;
+ display: block;
+ width: 130px;
+ height: 20px;
+ padding: 1px 0 0 22px;
+
+ cursor: pointer;
+ border-left: 1px solid #BBBBBB;
+}
+div#beechat_scrollboxes ul li:hover {
+ color: #000000;
+ background-color: white;
+}
+div#beechat_scrollboxes ul li.beechat_scrollbox_selected {
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+div#beechat_scrollboxes ul li span.beechat_unread_count {
+ float: right;
+ display: block;
+ width: 16px;
+ height: 14px;
+ padding-top: 2px;
+ margin: 0 6px 0 0;
+
+ text-align: center;
+ font-size: 0.7em;
+ color: white;
+ background: no-repeat 0% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/notification_pink.png');
+}
+div#beechat_scrollboxes ul li span#beechat_box_control_close {
+ float: right;
+ width: auto;
+ padding: 1px 4px;
+ height: 20px;
+}
+
+/*
+** --
+** availability classes
+** --
+*/
+.beechat_left_availability_chat {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png');
+}
+.beechat_left_availability_dnd {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png');
+}
+.beechat_left_availability_away {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png');
+}
+.beechat_left_availability_xa {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png');
+}
+.beechat_left_availability_offline {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png');
+}
+.beechat_left_availability_room {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png');
+}
+
+
+
+.beechat_right_availability_chat {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png');
+}
+.beechat_right_availability_dnd {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png');
+}
+.beechat_right_availability_away {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png');
+}
+.beechat_right_availability_xa {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png');
+}
+.beechat_right_availability_offline {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png');
+}
+.beechat_right_availability_room {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png');
+}
+
+/*
+** --
+** tooltips
+** --
+*/
+div.tooltip.tooltipchat {
+ display: none;
+ padding: 4px;
+ width: auto;
+ background: transparent no-repeat left bottom url('<?php echo $url; ?>mod/beechat/graphics/icons/pointer.png');
+}
+div.tooltip.tooltipchat h3 {
+ margin: 0;
+ padding: 4px;
+
+ font-weight: normal;
+ font-size: 0.9em;
+ color: white;
+ background-color: #222222;
+}
+
+
+/*
+** --
+** chatboxes
+** --
+*/
+div.beechat_chatbox {
+ position: absolute;
+ width: 240px;
+ height: 300px;
+ bottom: 25px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox a {
+ color: white;
+}
+div.beechat_chatbox a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_roomroster {
+ position: absolute;
+ width: 100px;
+ height: 276px;
+ left: -101px;
+ bottom: -2px;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+
+ border: 1px solid #4B6C8F;
+
+ background-color: #EEEEEE;
+}
+div.beechat_chatbox_roomrosteritem {
+ background-color: #FFFFFF;
+ margin: 3px;
+ padding-left: 2px;
+}
+div.beechat_chatbox_chatroom {
+ position: absolute;
+ width: 240px;
+ height: 300px;
+ left: 100px;
+ bottom: 0px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_chatroom a {
+ color: white;
+}
+div.beechat_chatbox_chatroom a:hover {
+ text-decoration: underline;
+}
+
+div.beechat_chatbox_room {
+ position: absolute;
+ width: 340px;
+ height: 300px;
+ bottom: 25px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_room a {
+ color: white;
+}
+div.beechat_chatbox_room a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_top {
+ width: 238px;
+ height: 24px;
+ margin: 0;
+ padding: 0;
+
+ font-size: 0.9em;
+ color: white;
+ background-color: #193C60;
+ border-top: 1px solid #0B2C4F;
+ border-left: 1px solid #0B2C4F;
+ border-right: 1px solid #0B2C4F;
+}
+div.beechat_chatbox_top .beechat_chatbox_top_icon {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ z-index: 2;
+
+ width: 50px;
+ height: 50px;
+}
+div.beechat_chatbox_top .beechat_label {
+ float: left;
+ height: 13px;
+ padding: 4px 6px 6px 6px;
+
+ margin-left: 54px;
+}
+div.beechat_chatbox_top_controls {
+ margin: 0;
+ padding: 0;
+}
+div.beechat_chatbox_top_controls .beechat_chatbox_control {
+ float: right;
+ display: block;
+ width: 20px;
+ height: 19px;
+ padding: 2px;
+ margin: 0;
+
+ font-size: 1.2em;
+ font-weight: bold;
+ text-align: center;
+}
+div.beechat_chatbox_subtop {
+ width: 172px;
+ height: 30px;
+ padding: 2px 6px 2px 60px;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #CCCCCC;
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_content {
+ width: 238px;
+ height: 202px;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+div.beechat_chatbox_content div.beechat_chatbox_message {
+ width: auto;
+ height: auto;
+ margin: 0;
+ padding: 2px;
+ border-top: 1px solid #DDDDDD;
+}
+div.beechat_chatbox_message span.beechat_chatbox_message_sender {
+ position: relative;
+ top: 0;
+ left: 6px;
+ font-weight: bold;
+ font-size: 1em;
+}
+div.beechat_chatbox_message span.beechat_chatbox_message_date {
+ float: right;
+ margin: 0 6px 0 0;
+}
+div.beechat_chatbox_content a {
+ color: #003399;
+}
+div.beechat_chatbox_content a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_content p {
+ margin: 0;
+ padding: 2px 6px;
+}
+div.beechat_chatbox_content p.beechat_chatbox_state {
+ font-size: 1em;
+ color: #888888;
+}
+div.beechat_chatbox_input {
+ width: 238px;
+ height: 40px;
+ margin: 0;
+ padding: 0;
+
+ border-top: 2px solid #BBBBBB;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_input textarea {
+ width: 204px;
+ height: 32px;
+ max-width: 240px;
+ max-height: 40px;
+ padding: 4px 4px 4px 30px;
+ margin: auto;
+ overflow: hidden;
+ vertical-align: top;
+ resize: none;
+
+ font-size: 1em;
+ font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
+ outline: none;
+ border: none;
+ background: white no-repeat 4px 3px url('<?php echo $url; ?>mod/beechat/graphics/icons/chat_icon.png');
+}
+div.beechat_chatbox_input textarea:focus {
+ outline: none;
+ border: none;
+ background-color: white;
+}
+div.beechat_chatbox_bottom {
+ position: absolute;
+ width: 238px;
+ height: 1px;
+
+ background-color: white;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #666666;
+ z-index: 2;
+}
+div.beechat_chatbox_bottom span {
+ position: absolute;
+ display: block;
+ right: 0;
+ top: 0;
+ width: 152px;
+ height: 1px;
+
+ border-bottom: 1px solid white;
+}
+div.beechat_chatbox_bottom span span {
+ position: absolute;
+ display: block;
+ width: 146px;
+ height: 1px;
+ right: 4px;
+ top: 0;
+
+ border-bottom: 1px solid #BBBBBB;
+}
diff --git a/mod/beechat/views/default/js/b64.js.php b/mod/beechat/views/default/js/b64.js.php
new file mode 100644
index 000000000..201bdbd7c
--- /dev/null
+++ b/mod/beechat/views/default/js/b64.js.php
@@ -0,0 +1,74 @@
+// This code was written by Tyler Akins and has been placed in the
+// public domain. It would be nice if you left this header intact.
+// Base64 code from Tyler Akins -- http://rumkin.com
+
+var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+/**
+ * Encodes a string in base64
+ * @param {String} input The string to encode in base64.
+ */
+function encode64(input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
+ } while (i < input.length);
+
+ return output;
+}
+
+/**
+ * Decodes a base64 string.
+ * @param {String} input The string to decode.
+ */
+function decode64(input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ do {
+ enc1 = keyStr.indexOf(input.charAt(i++));
+ enc2 = keyStr.indexOf(input.charAt(i++));
+ enc3 = keyStr.indexOf(input.charAt(i++));
+ enc4 = keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+ } while (i < input.length);
+
+ return output;
+}
diff --git a/mod/beechat/views/default/js/jquery.cookie.min.js.php b/mod/beechat/views/default/js/jquery.cookie.min.js.php
new file mode 100644
index 000000000..cb09af984
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.cookie.min.js.php
@@ -0,0 +1,10 @@
+/**
+ * Cookie plugin
+ *
+ * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ */
+jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}}; \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php b/mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php
new file mode 100644
index 000000000..fa583a451
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php
@@ -0,0 +1,9 @@
+/**
+ * jQuery.LocalScroll - Animated scrolling navigation, using anchors.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 3/11/2009
+ * @author Ariel Flesler
+ * @version 1.2.7
+ **/
+;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.scrollTo-min.js.php b/mod/beechat/views/default/js/jquery.scrollTo-min.js.php
new file mode 100755
index 000000000..5e7877810
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.scrollTo-min.js.php
@@ -0,0 +1,11 @@
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ */
+;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.serialScroll-min.js.php b/mod/beechat/views/default/js/jquery.serialScroll-min.js.php
new file mode 100755
index 000000000..d716124f9
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.serialScroll-min.js.php
@@ -0,0 +1,10 @@
+/*
+ * jQuery.SerialScroll - Animated scrolling of series
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 06/14/2009
+ * @author Ariel Flesler
+ * @version 1.2.2
+ * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
+ */
+;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.tools.min.js.php b/mod/beechat/views/default/js/jquery.tools.min.js.php
new file mode 100644
index 000000000..1574af45b
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.tools.min.js.php
@@ -0,0 +1,49 @@
+/*
+ * jQuery Tools 1.2.2 - The missing UI library for the Web
+ *
+ * [tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay]
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/
+ *
+ * File generated: Mon Jun 07 08:32:38 GMT 2010
+ */
+(function(c){function p(d,a,b){var e=this,l=d.add(this),h=d.find(b.tabs),j=a.jquery?a:d.children(a),i;h.length||(h=d.children());j.length||(j=d.parent().find(a));j.length||(j=c(a));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(b.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(i>=0)return e;f=b.initialIndex;k=h.eq(f)}if(f===i)return e;
+g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[b.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});i=f;h.removeClass(b.current);k.addClass(b.current);return e}},getConf:function(){return b},getTabs:function(){return h},getPanes:function(){return j},getCurrentPane:function(){return j.eq(i)},getCurrentTab:function(){return h.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)}});c.each("onBeforeClick,onClick".split(","),
+function(f,g){c.isFunction(b[g])&&c(e).bind(g,b[g]);e[g]=function(k){c(e).bind(g,k);return e}});if(b.history&&c.fn.history){c.tools.history.init(h);b.event="history"}h.each(function(f){c(this).bind(b.event,function(g){e.click(f,g);return g.preventDefault()})});j.find("a[href^=#]").click(function(f){e.click(c(this).attr("href"),f)});if(location.hash)e.click(location.hash);else if(b.initialIndex===0||b.initialIndex>0)e.click(b.initialIndex)}c.tools=c.tools||{version:"1.2.2"};c.tools.tabs={conf:{tabs:"a",
+current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,a){o[d]=a}};var o={"default":function(d,a){this.getPanes().hide().eq(d).show();a.call()},fade:function(d,a){var b=this.getConf(),e=b.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(b.fadeInSpeed,a)},slide:function(d,a){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,a)},ajax:function(d,a){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),
+a)}},m;c.tools.tabs.addEffect("horizontal",function(d,a){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();a.call()})});c.fn.tabs=function(d,a){var b=this.data("tabs");if(b)return b;if(c.isFunction(a))a={onBeforeClick:a};a=c.extend({},c.tools.tabs.conf,a);this.each(function(){b=new p(c(this),d,a);c(this).data("tabs",b)});return a.api?b:this}})(jQuery);
+(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,l,m,n=false,o=p(a.next).click(function(){b.next()}),k=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h)return c;
+var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);m=clearInterval(m);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(k).add(b.getPanes());t.hover(function(){c.pause();l=clearInterval(l)},function(){n||(l=setTimeout(c.play,a.interval))})}if(a.autoplay)m=
+setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||k.addClass(i);b.onBeforeClick(function(f,e){if(e){k.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else k.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
+this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
+(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function t(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=n[b.effect],k,r=a.is(":input"),u=r&&a.is(":checkbox, :radio, select, :button"),
+s=a.attr("type"),l=b.events[s]||b.events[r?u?"widget":"input":"def"];if(!q)throw'Nonexistent effect "'+b.effect+'"';l=l.split(/,\s*/);if(l.length!=2)throw"Tooltip: bad events configuration for "+s;a.bind(l[0],function(d){if(b.predelay){clearTimeout(i);j=setTimeout(function(){c.show(d)},b.predelay)}else c.show(d)}).bind(l[1],function(d){if(b.delay){clearTimeout(j);i=setTimeout(function(){c.hide(d)},b.delay)}else c.hide(d)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,
+{show:function(d){if(!e){if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",top:g.top,left:g.left});k=true;q[0].call(c,function(){d.type="onShow";k="full";h.trigger(d)});
+g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(l[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){k=false;n[b.effect][1].call(c,function(){d.type="onHide";k=false;h.trigger(d)});return c}},isShown:function(d){return d?k=="full":k},getConf:function(){return b},
+getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.2"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",
+tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,
+{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new t(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
+(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
+b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
+(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
+g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
+a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
+(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
+b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){e(".cloned:last").before(b);e(".cloned:first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){if(c.circular&&b===0&&k==-1&&d!==0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;
+var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),
+s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0)}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,d){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-
+1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});e(a).trigger("onBeforeSeek",[c.initialIndex])}e.tools=e.tools||
+{version:"1.2.2"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
+(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
+clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
+(function(d){function p(c,g){var h=d(g);return h.length<2?h:c.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(c){if(typeof c=="string")c={navi:c};c=d.extend({},m.navigator.conf,c);var g;this.each(function(){function h(a,b,i){e.seekTo(b);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(c.naviItem||
+"> *")}function n(a){var b=d("<"+(c.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&b.addClass(l);c.indexed&&b.text(a+1);c.idPrefix&&b.attr("id",c.idPrefix+a);return b.appendTo(k)}function o(a,b){a=f().eq(b.replace("#",""));a.length||(a=f().filter("[href="+b+"]"));a.click()}var e=d(this).data("scrollable"),k=p(e.getRoot(),c.navi),q=e.getNaviButtons(),l=c.activeClass,j=c.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};f().length?f().each(function(a){d(this).click(function(b){h(d(this),
+a,b)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,b){var i=f().eq(b);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(b).addClass(l)});e.onAddItem(function(a,b){b=n(e.getItems().index(b));j&&b.history(o)});j&&f().history(o)});return c.api?g:this}})(jQuery);
+(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
+'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
+c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
+getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<div class="close"></div>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.2"};a.tools.overlay={addEffect:function(d,
+b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
+d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
diff --git a/mod/beechat/views/default/js/json2.js.php b/mod/beechat/views/default/js/json2.js.php
new file mode 100644
index 000000000..7ae503202
--- /dev/null
+++ b/mod/beechat/views/default/js/json2.js.php
@@ -0,0 +1,476 @@
+/*
+ http://www.JSON.org/json2.js
+ 2009-06-29
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or '&nbsp;'),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the object holding the key.
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date ?
+ 'Date(' + this[key] + ')' : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+*/
+
+/*jslint evil: true */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+ call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+var JSON = JSON || {};
+
+(function () {
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function (key) {
+
+ return isFinite(this.valueOf()) ?
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' : null;
+ };
+
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ },
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ escapable.lastIndex = 0;
+ return escapable.test(string) ?
+ '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' :
+ '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0 ? '[]' :
+ gap ? '[\n' + gap +
+ partial.join(',\n' + gap) + '\n' +
+ mind + ']' :
+ '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ k = rep[i];
+ if (typeof k === 'string') {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0 ? '{}' :
+ gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+ mind + '}' : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ cx.lastIndex = 0;
+ if (cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/.
+test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function' ?
+ walk({'': j}, '') : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
diff --git a/mod/beechat/views/default/js/md5.js.php b/mod/beechat/views/default/js/md5.js.php
new file mode 100644
index 000000000..4284f62bb
--- /dev/null
+++ b/mod/beechat/views/default/js/md5.js.php
@@ -0,0 +1,261 @@
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
+function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
+function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
+function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
+function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
+function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function md5_vm_test()
+{
+ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, and a bit length
+ */
+function core_md5(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << ((len) % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ var olda, oldb, oldc, oldd;
+ for(var i = 0; i < x.length; i += 16)
+ {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
+ d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
+ c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
+ b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
+ a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
+ d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
+ c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
+ b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
+ a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
+ d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
+ c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
+ b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
+ a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
+ d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
+ c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
+ b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
+
+ a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
+ d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
+ c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
+ b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
+ a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
+ d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
+ c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
+ b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
+ a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
+ d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
+ c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
+ b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
+ a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
+ d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
+ c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
+ b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
+
+ a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
+ d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
+ c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
+ b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
+ a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
+ d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
+ c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
+ b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
+ a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
+ d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
+ c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
+ b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
+ a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
+ d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
+ c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
+ b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
+
+ a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
+ d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
+ c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
+ b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
+ a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
+ d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
+ c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
+ b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
+ a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
+ d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
+ c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
+ b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
+ a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
+ d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
+ c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
+ b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function md5_cmn(q, a, b, x, s, t)
+{
+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
+}
+function md5_ff(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5_gg(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5_hh(a, b, c, d, x, s, t)
+{
+ return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5_ii(a, b, c, d, x, s, t)
+{
+ return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+/*
+ * Calculate the HMAC-MD5, of a key and some data
+ */
+function core_hmac_md5(key, data)
+{
+ var bkey = str2binl(key);
+ if(bkey.length > 16) { bkey = core_md5(bkey, key.length * chrsz); }
+
+ var ipad = new Array(16), opad = new Array(16);
+ for(var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
+ return core_md5(opad.concat(hash), 512 + 128);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert a string to an array of little-endian words
+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
+ */
+function str2binl(str)
+{
+ var bin = [];
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
+ {
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
+ }
+ return bin;
+}
+
+/*
+ * Convert an array of little-endian words to a string
+ */
+function binl2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < bin.length * 32; i += chrsz)
+ {
+ str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a base-64 string
+ */
+function binl2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ var triplet, j;
+ for(var i = 0; i < binarray.length * 4; i += 3)
+ {
+ triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) |
+ (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) |
+ ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
+ for(j = 0; j < 4; j++)
+ {
+ if(i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
+ else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
+ }
+ }
+ return str;
+}
diff --git a/mod/beechat/views/default/js/sha1.js.php b/mod/beechat/views/default/js/sha1.js.php
new file mode 100644
index 000000000..db3bf0544
--- /dev/null
+++ b/mod/beechat/views/default/js/sha1.js.php
@@ -0,0 +1,207 @@
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
+ * in FIPS PUB 180-1
+ * Version 2.1a Copyright Paul Johnston 2000 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for details.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
+function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
+function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
+function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function sha1_vm_test()
+{
+ return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+
+/*
+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
+ */
+function core_sha1(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << (24 - len % 32);
+ x[((len + 64 >> 9) << 4) + 15] = len;
+
+ var w = new Array(80);
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+ var e = -1009589776;
+
+ var i, j, t, olda, oldb, oldc, oldd, olde;
+ for (i = 0; i < x.length; i += 16)
+ {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+ olde = e;
+
+ for (j = 0; j < 80; j++)
+ {
+ if (j < 16) { w[j] = x[i + j]; }
+ else { w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); }
+ t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = t;
+ }
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ e = safe_add(e, olde);
+ }
+ return [a, b, c, d, e];
+}
+
+/*
+ * Perform the appropriate triplet combination function for the current
+ * iteration
+ */
+function sha1_ft(t, b, c, d)
+{
+ if (t < 20) { return (b & c) | ((~b) & d); }
+ if (t < 40) { return b ^ c ^ d; }
+ if (t < 60) { return (b & c) | (b & d) | (c & d); }
+ return b ^ c ^ d;
+}
+
+/*
+ * Determine the appropriate additive constant for the current iteration
+ */
+function sha1_kt(t)
+{
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
+ (t < 60) ? -1894007588 : -899497514;
+}
+
+/*
+ * Calculate the HMAC-SHA1 of a key and some data
+ */
+function core_hmac_sha1(key, data)
+{
+ var bkey = str2binb(key);
+ if (bkey.length > 16) { bkey = core_sha1(bkey, key.length * chrsz); }
+
+ var ipad = new Array(16), opad = new Array(16);
+ for (var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
+ return core_sha1(opad.concat(hash), 512 + 160);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert an 8-bit or 16-bit string to an array of big-endian words
+ * In 8-bit function, characters >255 have their hi-byte silently ignored.
+ */
+function str2binb(str)
+{
+ var bin = [];
+ var mask = (1 << chrsz) - 1;
+ for (var i = 0; i < str.length * chrsz; i += chrsz)
+ {
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
+ }
+ return bin;
+}
+
+/*
+ * Convert an array of big-endian words to a string
+ */
+function binb2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for (var i = 0; i < bin.length * 32; i += chrsz)
+ {
+ str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a hex string.
+ */
+function binb2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for (var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a base-64 string
+ */
+function binb2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ var triplet, j;
+ for (var i = 0; i < binarray.length * 4; i += 3)
+ {
+ triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) |
+ (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |
+ ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
+ for (j = 0; j < 4; j++)
+ {
+ if (i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
+ else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
+ }
+ }
+ return str;
+}
diff --git a/mod/beechat/views/default/js/strophe.min.js.php b/mod/beechat/views/default/js/strophe.min.js.php
new file mode 100644
index 000000000..f0eb17906
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.min.js.php
@@ -0,0 +1 @@
+var Base64=(function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var obj={encode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}while(i<input.length);return output},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output}};return obj})();var MD5=(function(){var hexcase=0;var b64pad="";var chrsz=8;var safe_add=function(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&65535)};var bit_rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt))};var str2binl=function(str){var bin=[];var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz){bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32)}return bin};var binl2str=function(bin){var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz){str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask)}return str};var binl2hex=function(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++){str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&15)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&15)}return str};var binl2b64=function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";var triplet,j;for(var i=0;i<binarray.length*4;i+=3){triplet=(((binarray[i>>2]>>8*(i%4))&255)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&255)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&255);for(j=0;j<4;j++){if(i*8+j*6>binarray.length*32){str+=b64pad}else{str+=tab.charAt((triplet>>6*(3-j))&63)}}}return str};var md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)};var md5_ff=function(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t)};var md5_gg=function(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t)};var md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)};var md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t)};var core_md5=function(x,len){x[len>>5]|=128<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var olda,oldb,oldc,oldd;for(var i=0;i<x.length;i+=16){olda=a;oldb=b;oldc=c;oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd)}return[a,b,c,d]};var core_hmac_md5=function(key,data){var bkey=str2binl(key);if(bkey.length>16){bkey=core_md5(bkey,key.length*chrsz)}var ipad=new Array(16),opad=new Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128)};var obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz))},b64digest:function(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz))},hash:function(s){return binl2str(core_md5(str2binl(s),s.length*chrsz))},hmac_hexdigest:function(key,data){return binl2hex(core_hmac_md5(key,data))},hmac_b64digest:function(key,data){return binl2b64(core_hmac_md5(key,data))},hmac_hash:function(key,data){return binl2str(core_hmac_md5(key,data))},test:function(){return MD5.hexdigest("abc")==="900150983cd24fb0d6963f7d28e17f72"}};return obj})();if(!Function.prototype.bind){Function.prototype.bind=function(obj){var func=this;return function(){return func.apply(obj,arguments)}}}if(!Function.prototype.prependArg){Function.prototype.prependArg=function(arg){var func=this;return function(){var newargs=[arg];for(var i=0;i<arguments.length;i++){newargs.push(arguments[i])}return func.apply(this,newargs)}}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt){var len=this.length;var from=Number(arguments[1])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len}for(;from<len;from++){if(from in this&&this[from]===elt){return from}}return -1}}(function(callback){var Strophe;function $build(name,attrs){return new Strophe.Builder(name,attrs)}function $msg(attrs){return new Strophe.Builder("message",attrs)}function $iq(attrs){return new Strophe.Builder("iq",attrs)}function $pres(attrs){return new Strophe.Builder("presence",attrs)}Strophe={VERSION:"1.0.1",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas"},addNamespace:function(name,value){Strophe.NS[name]=value},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3},TIMEOUT:1.1,SECONDARY_TIMEOUT:0.1,forEachChild:function(elem,elemName,func){var i,childNode;for(i=0;i<elem.childNodes.length;i++){childNode=elem.childNodes[i];if(childNode.nodeType==Strophe.ElementType.NORMAL&&(!elemName||this.isTagEqual(childNode,elemName))){func(childNode)}}},isTagEqual:function(el,name){return el.tagName.toLowerCase()==name.toLowerCase()},_xmlGenerator:null,_makeGenerator:function(){var doc;if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM");doc.appendChild(doc.createElement("strophe"))}else{doc=document.implementation.createDocument("jabber:client","strophe",null)}return doc},xmlElement:function(name){if(!name){return null}var node=null;if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}node=Strophe._xmlGenerator.createElement(name);var a,i,k;for(a=1;a<arguments.length;a++){if(!arguments[a]){continue}if(typeof(arguments[a])=="string"||typeof(arguments[a])=="number"){node.appendChild(Strophe.xmlTextNode(arguments[a]))}else{if(typeof(arguments[a])=="object"&&typeof(arguments[a].sort)=="function"){for(i=0;i<arguments[a].length;i++){if(typeof(arguments[a][i])=="object"&&typeof(arguments[a][i].sort)=="function"){node.setAttribute(arguments[a][i][0],arguments[a][i][1])}}}else{if(typeof(arguments[a])=="object"){for(k in arguments[a]){if(arguments[a].hasOwnProperty(k)){node.setAttribute(k,arguments[a][k])}}}}}}return node},xmlescape:function(text){text=text.replace(/\&/g,"&amp;");text=text.replace(/</g,"&lt;");text=text.replace(/>/g,"&gt;");return text},xmlTextNode:function(text){text=Strophe.xmlescape(text);if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}return Strophe._xmlGenerator.createTextNode(text)},getText:function(elem){if(!elem){return null}var str="";if(elem.childNodes.length===0&&elem.nodeType==Strophe.ElementType.TEXT){str+=elem.nodeValue}for(var i=0;i<elem.childNodes.length;i++){if(elem.childNodes[i].nodeType==Strophe.ElementType.TEXT){str+=elem.childNodes[i].nodeValue}}return str},copyElement:function(elem){var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){el=Strophe.xmlElement(elem.tagName);for(i=0;i<elem.attributes.length;i++){el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value)}for(i=0;i<elem.childNodes.length;i++){el.appendChild(Strophe.copyElement(elem.childNodes[i]))}}else{if(elem.nodeType==Strophe.ElementType.TEXT){el=Strophe.xmlTextNode(elem.nodeValue)}}return el},escapeNode:function(node){return node.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){if(jid.indexOf("@")<0){return null}return jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0){return bare}else{var parts=bare.split("@");parts.splice(0,1);return parts.join("@")}},getResourceFromJid:function(jid){var s=jid.split("/");if(s.length<2){return null}s.splice(0,1);return s.join("/")},getBareJidFromJid:function(jid){return jid.split("/")[0]},log:function(level,msg){return},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem){return null}if(typeof(elem.tree)==="function"){elem=elem.tree()}var nodeName=elem.nodeName;var i,child;if(elem.getAttribute("_realname")){nodeName=elem.getAttribute("_realname")}result="<"+nodeName;for(i=0;i<elem.attributes.length;i++){if(elem.attributes[i].nodeName!="_realname"){result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace("&","&amp;").replace("'","&apos;").replace("<","&lt;")+"'"}}if(elem.childNodes.length>0){result+=">";for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeType==Strophe.ElementType.NORMAL){result+=Strophe.serialize(child)}else{if(child.nodeType==Strophe.ElementType.TEXT){result+=child.nodeValue}}}result+="</"+nodeName+">"}else{result+="/>"}return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}};Strophe.Builder=function(name,attrs){if(name=="presence"||name=="message"||name=="iq"){if(attrs&&!attrs.xmlns){attrs.xmlns=Strophe.NS.CLIENT}else{if(!attrs){attrs={xmlns:Strophe.NS.CLIENT}}}}this.nodeTree=Strophe.xmlElement(name,attrs);this.node=this.nodeTree};Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){this.node=this.node.parentNode;return this},attrs:function(moreattrs){for(var k in moreattrs){if(moreattrs.hasOwnProperty(k)){this.node.setAttribute(k,moreattrs[k])}}return this},c:function(name,attrs){var child=Strophe.xmlElement(name,attrs);this.node.appendChild(child);this.node=child;return this},cnode:function(elem){this.node.appendChild(elem);this.node=elem;return this},t:function(text){var child=Strophe.xmlTextNode(text);this.node.appendChild(child);return this}};Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler;this.ns=ns;this.name=name;this.type=type;this.id=id;this.options=options||{matchbare:false};if(!this.options.matchBare){this.options.matchBare=false}if(this.options.matchBare){this.from=Strophe.getBareJidFromJid(from)}else{this.from=from}this.user=true};Strophe.Handler.prototype={isMatch:function(elem){var nsMatch;var from=null;if(this.options.matchBare){from=Strophe.getBareJidFromJid(elem.getAttribute("from"))}else{from=elem.getAttribute("from")}nsMatch=false;if(!this.ns){nsMatch=true}else{var self=this;Strophe.forEachChild(elem,null,function(elem){if(elem.getAttribute("xmlns")==self.ns){nsMatch=true}});nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}if(nsMatch&&(!this.name||Strophe.isTagEqual(elem,this.name))&&(!this.type||elem.getAttribute("type")===this.type)&&(!this.id||elem.getAttribute("id")===this.id)&&(!this.from||from===this.from)){return true}return false},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){if(e.sourceURL){Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message)}else{if(e.fileName){if(typeof(console)!="undefined"){console.trace();console.error(this.handler," - error - ",e,e.message)}Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)}else{Strophe.fatal("error: "+this.handler)}}throw e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}};Strophe.TimedHandler=function(period,handler){this.period=period;this.handler=handler;this.lastCalled=new Date().getTime();this.user=true};Strophe.TimedHandler.prototype={run:function(){this.lastCalled=new Date().getTime();return this.handler()},reset:function(){this.lastCalled=new Date().getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}};Strophe.Request=function(elem,func,rid,sends){this.id=++Strophe._requestId;this.xmlData=elem;this.data=Strophe.serialize(elem);this.origFunc=func;this.func=func;this.rid=rid;this.date=NaN;this.sends=sends||0;this.abort=false;this.dead=null;this.age=function(){if(!this.date){return 0}var now=new Date();return(now-this.date)/1000};this.timeDead=function(){if(!this.dead){return 0}var now=new Date();return(now-this.dead)/1000};this.xhr=this._newXHR()};Strophe.Request.prototype={getResponse:function(){var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){node=this.xhr.responseXML.documentElement;if(node.tagName=="parsererror"){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML));throw"parsererror"}}else{if(this.xhr.responseText){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML))}}return node},_newXHR:function(){var xhr=null;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(xhr.overrideMimeType){xhr.overrideMimeType("text/xml")}}else{if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP")}}xhr.onreadystatechange=this.func.prependArg(this);return xhr}};Strophe.Connection=function(service){this.service=service;this.jid="";this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this._idleTimeout=null;this._disconnectTimeout=null;this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this.paused=false;this.hold=1;this.wait=60;this.window=5;this._data=[];this._requests=[];this._uniqueId=Math.round(Math.random()*10000);this._sasl_success_handler=null;this._sasl_failure_handler=null;this._sasl_challenge_handler=null;this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k];var F=function(){};F.prototype=ptype;this[k]=new F();this[k].init(this)}}};Strophe.Connection.prototype={reset:function(){this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this._requests=[];this._uniqueId=Math.round(Math.random()*10000)},pause:function(){this.paused=true},resume:function(){this.paused=false},getUniqueId:function(suffix){if(typeof(suffix)=="string"||typeof(suffix)=="number"){return ++this._uniqueId+":"+suffix}else{return ++this._uniqueId+""}},connect:function(jid,pass,callback,wait,hold){this.jid=jid;this.pass=pass;this.connect_callback=callback;this.disconnecting=false;this.connected=false;this.authenticated=false;this.errors=0;this.wait=wait||this.wait;this.hold=hold||this.hold;this.domain=Strophe.getDomainFromJid(this.jid);var body=this._buildBody().attrs({to:this.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});this._changeConnectStatus(Strophe.Status.CONNECTING,null);this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler()},attach:function(jid,sid,rid,callback,wait,hold,wind){this.jid=jid;this.sid=sid;this.rid=rid;this.connect_callback=callback;this.domain=Strophe.getDomainFromJid(this.jid);this.authenticated=true;this.connected=true;this.wait=wait||this.wait;this.hold=hold||this.hold;this.window=wind||this.window;this._changeConnectStatus(Strophe.Status.ATTACHED,null)},xmlInput:function(elem){return},xmlOutput:function(elem){return},rawInput:function(data){return},rawOutput:function(data){return},send:function(elem){if(elem===null){return}if(typeof(elem.sort)==="function"){for(var i=0;i<elem.length;i++){this._queueData(elem[i])}}else{if(typeof(elem.tree)==="function"){this._queueData(elem.tree())}else{this._queueData(elem)}}this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},flush:function(){clearTimeout(this._idleTimeout);this._onIdle()},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null;var that=this;if(typeof(elem.tree)==="function"){elem=elem.tree()}var id=elem.getAttribute("id");if(!id){id=this.getUniqueId("sendIQ");elem.setAttribute("id",id)}var handler=this.addHandler(function(stanza){if(timeoutHandler){that.deleteTimedHandler(timeoutHandler)}var iqtype=stanza.getAttribute("type");if(iqtype==="result"){if(callback){callback(stanza)}}else{if(iqtype==="error"){if(errback){errback(stanza)}}else{throw {name:"StropheError",message:"Got bad IQ type of "+iqtype}}}},null,"iq",null,id);if(timeout){timeoutHandler=this.addTimedHandler(timeout,function(){that.deleteHandler(handler);if(errback){errback(null)}return false})}this.send(elem);return id},_queueData:function(element){if(element===null||!element.tagName||!element.childNodes){throw {name:"StropheError",message:"Cannot queue non-DOMElement."}}this._data.push(element)},_sendRestart:function(){this._data.push("restart");this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},addTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);this.addTimeds.push(thand);return thand},deleteTimedHandler:function(handRef){this.removeTimeds.push(handRef)},addHandler:function(handler,ns,name,type,id,from,options){var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);this.addHandlers.push(hand);return hand},deleteHandler:function(handRef){this.removeHandlers.push(handRef)},disconnect:function(reason){this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason);Strophe.info("Disconnect was called because: "+reason);if(this.connected){this._disconnectTimeout=this._addSysTimedHandler(3000,this._onDisconnectTimeout.bind(this));this._sendTerminate()}},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged){try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}}}if(this.connect_callback){try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}}},_buildBody:function(){var bodyWrap=$build("body",{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});if(this.sid!==null){bodyWrap.attrs({sid:this.sid})}return bodyWrap},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--){if(req==this._requests[i]){this._requests.splice(i,1)}}req.xhr.onreadystatechange=function(){};this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];if(req.dead===null){req.dead=new Date()}this._processRequest(i)},_processRequest:function(i){var req=this._requests[i];var reqStatus=-1;try{if(req.xhr.readyState==4){reqStatus=req.xhr.status}}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if(typeof(reqStatus)=="undefined"){reqStatus=-1}var time_elapsed=req.age();var primaryTimeout=(!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait));var secondaryTimeout=(req.dead!==null&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait));var requestCompletedWithServerError=(req.xhr.readyState==4&&(reqStatus<1||reqStatus>=500));if(primaryTimeout||secondaryTimeout||requestCompletedWithServerError){if(secondaryTimeout){Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting")}req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){};this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends);req=this._requests[i]}if(req.xhr.readyState===0){Strophe.debug("request id "+req.id+"."+req.sends+" posting");req.date=new Date();try{req.xhr.open("POST",this.service,true)}catch(e2){Strophe.error("XHR open failed.");if(!this.connected){this._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service")}this.disconnect();return}var sendFunc=function(){req.xhr.send(req.data)};if(req.sends>1){var backoff=Math.pow(req.sends,3)*1000;setTimeout(sendFunc,backoff)}else{sendFunc()}req.sends++;this.xmlOutput(req.xmlData);this.rawOutput(req.data)}else{Strophe.debug("_processRequest: "+(i===0?"first":"second")+" request has readyState of "+req.xhr.readyState)}},_throttledRequestHandler:function(){if(!this._requests){Strophe.debug("_throttledRequestHandler called with undefined requests")}else{Strophe.debug("_throttledRequestHandler called with "+this._requests.length+" requests")}if(!this._requests||this._requests.length===0){return}if(this._requests.length>0){this._processRequest(0)}if(this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window-1){this._processRequest(1)}},_onRequestStateChange:function(func,req){Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState);if(req.abort){req.abort=false;return}var reqStatus;if(req.xhr.readyState==4){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if(typeof(reqStatus)=="undefined"){reqStatus=0}if(this.disconnecting){if(reqStatus>=400){this._hitError(reqStatus);return}}var reqIs0=(this._requests[0]==req);var reqIs1=(this._requests[1]==req);if((reqStatus>0&&reqStatus<500)||req.sends>5){this._removeRequest(req);Strophe.debug("request id "+req.id+" should now be removed")}if(reqStatus==200){if(reqIs1||(reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))){this._restartRequest(0)}Strophe.debug("request id "+req.id+"."+req.sends+" got 200");func(req);this.errors=0}else{Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened");if(reqStatus===0||(reqStatus>=400&&reqStatus<600)||reqStatus>=12000){this._hitError(reqStatus);if(reqStatus>=400&&reqStatus<500){this._changeConnectStatus(Strophe.Status.DISCONNECTING,null);this._doDisconnect()}}}if(!((reqStatus>0&&reqStatus<10000)||req.sends>5)){this._throttledRequestHandler()}}},_hitError:function(reqStatus){this.errors++;Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors);if(this.errors>4){this._onDisconnectTimeout()}},_doDisconnect:function(){Strophe.info("_doDisconnect was called");this.authenticated=false;this.disconnecting=false;this.sid=null;this.streamId=null;this.rid=Math.floor(Math.random()*4294967295);if(this.connected){this._changeConnectStatus(Strophe.Status.DISCONNECTED,null);this.connected=false}this.handlers=[];this.timedHandlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[]},_dataRecv:function(req){try{var elem=req.getResponse()}catch(e){if(e!="parsererror"){throw e}this.disconnect("strophe-parsererror")}if(elem===null){return}this.xmlInput(elem);this.rawInput(Strophe.serialize(elem));var i,hand;while(this.removeHandlers.length>0){hand=this.removeHandlers.pop();i=this.handlers.indexOf(hand);if(i>=0){this.handlers.splice(i,1)}}while(this.addHandlers.length>0){this.handlers.push(this.addHandlers.pop())}if(this.disconnecting&&this._requests.length===0){this.deleteTimedHandler(this._disconnectTimeout);this._disconnectTimeout=null;this._doDisconnect();return}var typ=elem.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=elem.getAttribute("condition");conflict=elem.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}this.disconnect();return}var self=this;Strophe.forEachChild(elem,null,function(child){var i,newList;newList=self.handlers;self.handlers=[];for(i=0;i<newList.length;i++){var hand=newList[i];if(hand.isMatch(child)&&(self.authenticated||!hand.user)){if(hand.run(child)){self.handlers.push(hand)}}else{self.handlers.push(hand)}}})},_sendTerminate:function(){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});if(this.authenticated){body.c("presence",{xmlns:Strophe.NS.CLIENT,type:"unavailable"})}this.disconnecting=true;var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid"));this._requests.push(req);this._throttledRequestHandler()},_connect_cb:function(req){Strophe.info("_connect_cb was called");this.connected=true;var bodyWrap=req.getResponse();if(!bodyWrap){return}this.xmlInput(bodyWrap);this.rawInput(Strophe.serialize(bodyWrap));var typ=bodyWrap.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=bodyWrap.getAttribute("condition");conflict=bodyWrap.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}return}if(!this.sid){this.sid=bodyWrap.getAttribute("sid")}if(!this.stream_id){this.stream_id=bodyWrap.getAttribute("authid")}var wind=bodyWrap.getAttribute("requests");if(wind){this.window=parseInt(wind,10)}var hold=bodyWrap.getAttribute("hold");if(hold){this.hold=parseInt(hold,10)}var wait=bodyWrap.getAttribute("wait");if(wait){this.wait=parseInt(wait,10)}var do_sasl_plain=false;var do_sasl_digest_md5=false;var do_sasl_anonymous=false;var mechanisms=bodyWrap.getElementsByTagName("mechanism");var i,mech,auth_str,hashed_auth_str;if(mechanisms.length>0){for(i=0;i<mechanisms.length;i++){mech=Strophe.getText(mechanisms[i]);if(mech=="DIGEST-MD5"){do_sasl_digest_md5=true}else{if(mech=="PLAIN"){do_sasl_plain=true}else{if(mech=="ANONYMOUS"){do_sasl_anonymous=true}}}}}else{var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler();return}if(Strophe.getNodeFromJid(this.jid)===null&&do_sasl_anonymous){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"ANONYMOUS"}).tree())}else{if(Strophe.getNodeFromJid(this.jid)===null){this._changeConnectStatus(Strophe.Status.CONNFAIL,"x-strophe-bad-non-anon-jid");this.disconnect()}else{if(do_sasl_digest_md5){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge1_cb.bind(this),null,"challenge",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"DIGEST-MD5"}).tree())}else{if(do_sasl_plain){auth_str=Strophe.getBareJidFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+Strophe.getNodeFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+this.pass;this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);hashed_auth_str=Base64.encode(auth_str);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"PLAIN"}).t(hashed_auth_str).tree())}else{this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1");this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree())}}}}},_sasl_challenge1_cb:function(elem){var attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;var challenge=Base64.decode(Strophe.getText(elem));var cnonce=MD5.hexdigest(Math.random()*1234567890);var realm="";var host=null;var nonce="";var qop="";var matches;this.deleteHandler(this._sasl_failure_handler);while(challenge.match(attribMatch)){matches=challenge.match(attribMatch);challenge=challenge.replace(matches[0],"");matches[2]=matches[2].replace(/^"(.+)"$/,"$1");switch(matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2];break}}var digest_uri="xmpp/"+this.domain;if(host!==null){digest_uri=digest_uri+"/"+host}var A1=MD5.hash(Strophe.getNodeFromJid(this.jid)+":"+realm+":"+this.pass)+":"+nonce+":"+cnonce;var A2="AUTHENTICATE:"+digest_uri;var responseText="";responseText+="username="+this._quote(Strophe.getNodeFromJid(this.jid))+",";responseText+="realm="+this._quote(realm)+",";responseText+="nonce="+this._quote(nonce)+",";responseText+="cnonce="+this._quote(cnonce)+",";responseText+='nc="00000001",';responseText+='qop="auth",';responseText+="digest-uri="+this._quote(digest_uri)+",";responseText+="response="+this._quote(MD5.hexdigest(MD5.hexdigest(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+MD5.hexdigest(A2)))+",";responseText+='charset="utf-8"';this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge2_cb.bind(this),null,"challenge",null,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).t(Base64.encode(responseText)).tree());return false},_quote:function(str){return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'},_sasl_challenge2_cb:function(elem){this.deleteHandler(this._sasl_success_handler);this.deleteHandler(this._sasl_failure_handler);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).tree());return false},_auth1_cb:function(elem){var iq=$iq({type:"set",id:"_auth_2"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).up().c("password").t(this.pass);if(!Strophe.getResourceFromJid(this.jid)){this.jid=Strophe.getBareJidFromJid(this.jid)+"/strophe"}iq.up().c("resource",{}).t(Strophe.getResourceFromJid(this.jid));this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2");this.send(iq.tree());return false},_sasl_success_cb:function(elem){Strophe.info("SASL authentication succeeded.");this.deleteHandler(this._sasl_failure_handler);this._sasl_failure_handler=null;if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null);this._sendRestart();return false},_sasl_auth1_cb:function(elem){var i,child;for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeName=="bind"){this.do_bind=true}if(child.nodeName=="session"){this.do_session=true}}if(!this.do_bind){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}else{this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);if(resource){this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).c("resource",{}).t(resource).tree())}else{this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).tree())}}return false},_sasl_bind_cb:function(elem){if(elem.getAttribute("type")=="error"){Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}var bind=elem.getElementsByTagName("bind");var jidNode;if(bind.length>0){jidNode=bind[0].getElementsByTagName("jid");if(jidNode.length>0){this.jid=Strophe.getText(jidNode[0]);if(this.do_session){this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2");this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())}else{this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}}}else{Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}},_sasl_session_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){Strophe.info("Session creation failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}}return false},_sasl_failure_cb:function(elem){if(this._sasl_success_handler){this.deleteHandler(this._sasl_success_handler);this._sasl_success_handler=null}if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false},_auth2_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);this.disconnect()}}return false},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);thand.user=false;this.addTimeds.push(thand);return thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);hand.user=false;this.addHandlers.push(hand);return hand},_onDisconnectTimeout:function(){Strophe.info("_onDisconnectTimeout was called");var req;while(this._requests.length>0){req=this._requests.pop();req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){}}this._doDisconnect();return false},_onIdle:function(){var i,thand,since,newList;while(this.removeTimeds.length>0){thand=this.removeTimeds.pop();i=this.timedHandlers.indexOf(thand);if(i>=0){this.timedHandlers.splice(i,1)}}while(this.addTimeds.length>0){this.timedHandlers.push(this.addTimeds.pop())}var now=new Date().getTime();newList=[];for(i=0;i<this.timedHandlers.length;i++){thand=this.timedHandlers[i];if(this.authenticated||!thand.user){since=thand.lastCalled+thand.period;if(since-now<=0){if(thand.run()){newList.push(thand)}}else{newList.push(thand)}}}this.timedHandlers=newList;var body,time_elapsed;if(this.authenticated&&this._requests.length===0&&this._data.length===0&&!this.disconnecting){Strophe.info("no requests during idle cycle, sending blank request");this._data.push(null)}if(this._requests.length<2&&this._data.length>0&&!this.paused){body=this._buildBody();for(i=0;i<this._data.length;i++){if(this._data[i]!==null){if(this._data[i]==="restart"){body.attrs({to:this.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH})}else{body.cnode(this._data[i]).up()}}}delete this._data;this._data=[];this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid")));this._processRequest(this._requests.length-1)}if(this._requests.length>0){time_elapsed=this._requests[0].age();if(this._requests[0].dead!==null){if(this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)){this._throttledRequestHandler()}}if(time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)){Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity");this._throttledRequestHandler()}}clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)}};if(callback){callback(Strophe,$build,$msg,$iq,$pres)}})(function(){window.Strophe=arguments[0];window.$build=arguments[1];window.$msg=arguments[2];window.$iq=arguments[3];window.$pres=arguments[4]}); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/strophe.muc.js b/mod/beechat/views/default/js/strophe.muc.js
new file mode 100644
index 000000000..954ca8730
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.muc.js
@@ -0,0 +1,300 @@
+/*
+Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html
+*/
+/* jslint configuration: */
+/* global document, window, setTimeout, clearTimeout, console,
+ XMLHttpRequest, ActiveXObject,
+ Base64, MD5,
+ Strophe, $build, $msg, $iq, $pres
+*/
+
+Strophe.addConnectionPlugin('muc', {
+ _connection: null,
+ // The plugin must have the init function
+ /***Function
+ Initialize the MUC plugin. Sets the correct connection object and
+ extends the namesace.
+ */
+ init: function(conn) {
+ this._connection = conn;
+ /* extend name space
+ * NS.MUC - XMPP Multi-user chat namespace
+ * from XEP 45.
+ *
+ */
+ Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner");
+ Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin");
+ },
+ /***Function
+ Join a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to join.
+ (String) nick - The nickname to use in the chat room. Optional
+ (Function) msg_handler_cb - The function call to handle messages from the
+ specified chat room.
+ (Function) pres_handler_cb - The function call back to handle presence
+ in the chat room.
+ (String) password - The optional password to use. (password protected
+ rooms only)
+ */
+ join: function(room, nick, msg_handler_cb, pres_handler_cb, password) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msg = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ if (password)
+ {
+ var password_elem = Strophe.xmlElement("password",
+ [],
+ password);
+ msg.cnode(password_elem);
+ }
+ if (msg_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var from = stanza.getAttribute('from');
+ var roomname = from.split("/");
+ // filter on room name
+ if (roomname.length > 1 && roomname[0] == room)
+ {
+ return msg_handler_cb(stanza);
+ }
+ else
+ {
+ return true;
+ }
+ },
+ null,
+ "message",
+ null,
+ null,
+ null);
+ }
+ if (pres_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var xquery = stanza.getElementsByTagName("x");
+ if (xquery.length > 0)
+ {
+ //Handle only MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ return pres_handler_cb(stanza);
+ }
+ }
+ }
+ return true;
+ },
+ null,
+ "presence",
+ null,
+ null,
+ null);
+ }
+ this._connection.send(msg);
+ },
+ /***Function
+ Leave a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to leave.
+ (String) nick - The nick name used in the room.
+ (Function) handler_cb - Optional function to handle the successful leave.
+ Returns:
+ iqid - The unique id for the room leave.
+ */
+ leave: function(room, nick, handler_cb) {
+ var room_nick = this.test_append_nick(room, nick);
+ var presenceid = this._connection.getUniqueId();
+ var presence = $pres({type: "unavailable",
+ id: presenceid,
+ from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.addHandler(handler_cb,
+ null,
+ "presence",
+ null,
+ presenceid,
+ null);
+ this._connection.send(presence);
+ return presenceid;
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name used in the chat room.
+ (String) message - The message to send to the room.
+ Returns:
+ msgiq - the unique id used to send the message
+ */
+ message: function(room, nick, message) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msgid = this._connection.getUniqueId();
+ var msg = $msg({to: room_nick,
+ from: this._connection.jid,
+ type: "groupchat",
+ id: msgid}).c("body",
+ {xmlns: Strophe.NS.CLIENT}).t(message);
+ msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing");
+ this._connection.send(msg);
+ return msgid;
+ },
+ /***Function
+ Start a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to send the configuration request
+ */
+ configure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to:room,
+ type: "get"}).c("query",
+ {xmlns: Strophe.NS.MUC_OWNER});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Cancel the room configuration
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to cancel the configuration.
+ */
+ cancelConfigure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "cancel"});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Save a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (Array) configarray - an array of form elements used to configure the room.
+ Returns:
+ id - the unique id used to save the configuration.
+ */
+ saveConfiguration: function(room, configarray) {
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "submit"});
+ for (var i = 0; i >= configarray.length; i++) {
+ config.cnode(configarray[i]);
+ }
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to create the chat room.
+ */
+ createInstantRoom: function(room) {
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data",
+ type: "submit"});
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***
+ Set the topic of the chat room.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) topic - Topic message.
+ */
+ setTopic: function(room, topic) {
+ var msg = $msg({to: room,
+ from: this._connection.jid,
+ type: "groupchat"})
+ .c("subject", {xmlns: "jabber:client"}).t(topic);
+ this._connection.send(msg.tree());
+ },
+ /***Function
+ Changes the role and affiliation of a member of a MUC room.
+ The modification can only be done by a room moderator. An error will be
+ returned if the user doesn't have permission.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name of the user to modify.
+ (String) role - The new role of the user.
+ (String) affiliation - The new affiliation of the user.
+ (String) reason - The reason for the change.
+ Returns:
+ iq - the id of the mode change request.
+ */
+ modifyUser: function(room, nick, role, affiliation, reason) {
+ var item_attrs = {nick: Strophe.escapeNode(nick)};
+ if (role !== null)
+ {
+ item_attrs.role = role;
+ }
+ if (affiliation !== null)
+ {
+ item_attrs.affiliation = affiliation;
+ }
+ var item = $build("item", item_attrs);
+ if (reason !== null)
+ {
+ item.cnode(Strophe.xmlElement("reason", reason));
+ }
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree());
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***Function
+ Change the current users nick name.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) user - The new nick name.
+ */
+ changeNick: function(room, user) {
+ var room_nick = this.test_append_nick(room, user);
+ var presence = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.send(presence.tree());
+ },
+ /***Function
+ List all chat room available on a server.
+ Parameters:
+ (String) server - name of chat server.
+ (String) handle_cb - Function to call for room list return.
+ */
+ listRooms: function(server, handle_cb) {
+ var iq = $iq({to: server,
+ from: this._connection.jid,
+ type: "get"})
+ .c("query",{xmlns: Strophe.NS.DISCO_ITEMS});
+ this._connection.sendIQ(iq, handle_cb, function(){});
+ },
+ test_append_nick: function(room, nick) {
+ var room_nick = room;
+ if (nick)
+ {
+ room_nick += "/" + Strophe.escapeNode(nick);
+ }
+ return room_nick;
+ }
+}); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/strophe.muc.js.php b/mod/beechat/views/default/js/strophe.muc.js.php
new file mode 100644
index 000000000..e10750d02
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.muc.js.php
@@ -0,0 +1,300 @@
+/*
+Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html
+*/
+/* jslint configuration: */
+/* global document, window, setTimeout, clearTimeout, console,
+ XMLHttpRequest, ActiveXObject,
+ Base64, MD5,
+ Strophe, $build, $msg, $iq, $pres
+*/
+
+Strophe.addConnectionPlugin('muc', {
+ _connection: null,
+ // The plugin must have the init function
+ /***Function
+ Initialize the MUC plugin. Sets the correct connection object and
+ extends the namesace.
+ */
+ init: function(conn) {
+ this._connection = conn;
+ /* extend name space
+ * NS.MUC - XMPP Multi-user chat namespace
+ * from XEP 45.
+ *
+ */
+ Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner");
+ Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin");
+ },
+ /***Function
+ Join a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to join.
+ (String) nick - The nickname to use in the chat room. Optional
+ (Function) msg_handler_cb - The function call to handle messages from the
+ specified chat room.
+ (Function) pres_handler_cb - The function call back to handle presence
+ in the chat room.
+ (String) password - The optional password to use. (password protected
+ rooms only)
+ */
+ join: function(room, nick, msg_handler_cb, pres_handler_cb, password) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msg = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ if (password)
+ {
+ var password_elem = Strophe.xmlElement("password",
+ [],
+ password);
+ msg.cnode(password_elem);
+ }
+ if (msg_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var from = stanza.getAttribute('from');
+ var roomname = from.split("/");
+ // filter on room name
+ if (roomname.length > 1 && roomname[0] == room)
+ {
+ return msg_handler_cb(stanza);
+ }
+ else
+ {
+ return true;
+ }
+ },
+ null,
+ "message",
+ null,
+ null,
+ null);
+ }
+ if (pres_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var xquery = stanza.getElementsByTagName("x");
+ if (xquery.length > 0)
+ {
+ //Handle only MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ return pres_handler_cb(stanza);
+ }
+ }
+ }
+ return true;
+ },
+ null,
+ "presence",
+ null,
+ null,
+ null);
+ }
+ this._connection.send(msg);
+ },
+ /***Function
+ Leave a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to leave.
+ (String) nick - The nick name used in the room.
+ (Function) handler_cb - Optional function to handle the successful leave.
+ Returns:
+ iqid - The unique id for the room leave.
+ */
+ leave: function(room, nick, handler_cb) {
+ var room_nick = this.test_append_nick(room, nick);
+ var presenceid = this._connection.getUniqueId();
+ var presence = $pres({type: "unavailable",
+ id: presenceid,
+ from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.addHandler(handler_cb,
+ null,
+ "presence",
+ null,
+ presenceid,
+ null);
+ this._connection.send(presence);
+ return presenceid;
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name used in the chat room.
+ (String) message - The message to send to the room.
+ Returns:
+ msgiq - the unique id used to send the message
+ */
+ message: function(room, nick, message) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msgid = this._connection.getUniqueId();
+ var msg = $msg({to: room_nick,
+ from: this._connection.jid,
+ type: "groupchat",
+ id: msgid}).c("body",
+ {xmlns: Strophe.NS.CLIENT}).t(message);
+ msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing");
+ this._connection.send(msg);
+ return msgid;
+ },
+ /***Function
+ Start a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to send the configuration request
+ */
+ configure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to:room,
+ type: "get"}).c("query",
+ {xmlns: Strophe.NS.MUC_OWNER});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Cancel the room configuration
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to cancel the configuration.
+ */
+ cancelConfigure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "cancel"});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Save a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (Array) configarray - an array of form elements used to configure the room.
+ Returns:
+ id - the unique id used to save the configuration.
+ */
+ saveConfiguration: function(room, configarray) {
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "submit"});
+ for (var i = 0; i >= configarray.length; i++) {
+ config.cnode(configarray[i]);
+ }
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to create the chat room.
+ */
+ createInstantRoom: function(room) {
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data",
+ type: "submit"});
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***
+ Set the topic of the chat room.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) topic - Topic message.
+ */
+ setTopic: function(room, topic) {
+ var msg = $msg({to: room,
+ from: this._connection.jid,
+ type: "groupchat"})
+ .c("subject", {xmlns: "jabber:client"}).t(topic);
+ this._connection.send(msg.tree());
+ },
+ /***Function
+ Changes the role and affiliation of a member of a MUC room.
+ The modification can only be done by a room moderator. An error will be
+ returned if the user doesn't have permission.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name of the user to modify.
+ (String) role - The new role of the user.
+ (String) affiliation - The new affiliation of the user.
+ (String) reason - The reason for the change.
+ Returns:
+ iq - the id of the mode change request.
+ */
+ modifyUser: function(room, nick, role, affiliation, reason) {
+ var item_attrs = {nick: Strophe.escapeNode(nick)};
+ if (role !== null)
+ {
+ item_attrs.role = role;
+ }
+ if (affiliation !== null)
+ {
+ item_attrs.affiliation = affiliation;
+ }
+ var item = $build("item", item_attrs);
+ if (reason !== null)
+ {
+ item.cnode(Strophe.xmlElement("reason", reason));
+ }
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree());
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***Function
+ Change the current users nick name.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) user - The new nick name.
+ */
+ changeNick: function(room, user) {
+ var room_nick = this.test_append_nick(room, user);
+ var presence = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.send(presence.tree());
+ },
+ /***Function
+ List all chat room available on a server.
+ Parameters:
+ (String) server - name of chat server.
+ (String) handle_cb - Function to call for room list return.
+ */
+ listRooms: function(server, handle_cb) {
+ var iq = $iq({to: server,
+ from: this._connection.jid,
+ type: "get"})
+ .c("query",{xmlns: Strophe.NS.DISCO_ITEMS});
+ this._connection.sendIQ(iq, handle_cb, function(){});
+ },
+ test_append_nick: function(room, nick) {
+ var room_nick = room;
+ if (nick)
+ {
+ room_nick += "/" + Strophe.escapeNode(nick);
+ }
+ return room_nick;
+ }
+});
diff --git a/mod/beechat/views/default/settings/beechat/edit.php b/mod/beechat/views/default/settings/beechat/edit.php
new file mode 100755
index 000000000..ec4ab08de
--- /dev/null
+++ b/mod/beechat/views/default/settings/beechat/edit.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Barter Plugin
+ * @package Barters
+ **/
+ $domain = elgg_get_plugin_setting("domain", "beechat");
+ //$group_domain = elgg_get_plugin_setting("groupdomain", "beechat");
+ $xmlrpc_ip = elgg_get_plugin_setting("xmlrpcip", "beechat");
+ $dbname = elgg_get_plugin_setting("dbname", "beechat");
+ $dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+ $dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+ $dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");
+?>
+<p>
+ <?php echo elgg_echo('beechat:domain'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[domain]','value' => $domain)); ?>
+ <!--<?php echo elgg_echo('beechat:groupdomain'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[groupdomain]','value' => $group_domain)); ?>-->
+ <?php echo elgg_echo('beechat:xmlrpcip'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[xmlrpcip]','value' => $xmlrpc_ip)); ?>
+ <?php echo elgg_echo('beechat:dbname'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbname]','value' => $dbname)); ?>
+ <?php echo elgg_echo('beechat:dbhost'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbhost]','value' => $dbhost)); ?>
+ <?php echo elgg_echo('beechat:dbuser'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbuser]','value' => $dbuser)); ?>
+ <?php echo elgg_echo('beechat:dbpassword'); ?>
+ <?php echo elgg_view('input/password', array('internalname' => 'params[dbpassword]','value' => $dbpassword)); ?>
+
+</p>
+
diff --git a/mod/blog/actions/blog/save.php b/mod/blog/actions/blog/save.php
index 070c96398..82a9e6c51 100644
--- a/mod/blog/actions/blog/save.php
+++ b/mod/blog/actions/blog/save.php
@@ -2,6 +2,12 @@
/**
* Save blog entity
*
+ * Can be called by clicking save button or preview button. If preview button,
+ * we automatically save as draft. The preview button is only available for
+ * non-published drafts.
+ *
+ * Drafts are saved with the access set to private.
+ *
* @package Blog
*/
@@ -73,11 +79,7 @@ foreach ($values as $name => $default) {
switch ($name) {
case 'tags':
- if ($value) {
- $values[$name] = string_to_tag_array($value);
- } else {
- unset ($values[$name]);
- }
+ $values[$name] = string_to_tag_array($value);
break;
case 'excerpt':
@@ -99,11 +101,6 @@ foreach ($values as $name => $default) {
}
break;
- // don't try to set the guid
- case 'guid':
- unset($values['guid']);
- break;
-
default:
$values[$name] = $value;
break;
@@ -115,13 +112,16 @@ if ($save == false) {
$values['status'] = 'draft';
}
+// if draft, set access to private and cache the future access
+if ($values['status'] == 'draft') {
+ $values['future_access'] = $values['access_id'];
+ $values['access_id'] = ACCESS_PRIVATE;
+}
+
// assign values to the entity, stopping on error.
if (!$error) {
foreach ($values as $name => $value) {
- if (FALSE === ($blog->$name = $value)) {
- $error = elgg_echo('blog:error:cannot_save' . "$name=$value");
- break;
- }
+ $blog->$name = $value;
}
}
@@ -151,6 +151,11 @@ if (!$error) {
if (($new_post || $old_status == 'draft') && $status == 'published') {
add_to_river('river/object/blog/create', 'create', $blog->owner_guid, $blog->getGUID());
+ // we only want notifications sent when post published
+ register_notification_object('object', 'blog', elgg_echo('blog:newpost'));
+ elgg_trigger_event('publish', 'object', $blog);
+
+ // reset the creation time for posts that move from draft to published
if ($guid) {
$blog->time_created = time();
$blog->save();
diff --git a/mod/blog/lib/blog.php b/mod/blog/lib/blog.php
index 4622a9e7e..9753f27a8 100644
--- a/mod/blog/lib/blog.php
+++ b/mod/blog/lib/blog.php
@@ -39,8 +39,8 @@ function blog_get_page_content_read($guid = NULL) {
elgg_push_breadcrumb($blog->title);
$return['content'] = elgg_view_entity($blog, array('full_view' => true));
- //check to see if comment are on
- if ($blog->comments_on != 'Off') {
+ // check to see if we should allow comments
+ if ($blog->comments_on != 'Off' && $blog->status == 'published') {
$return['content'] .= elgg_view_comments($blog);
}
@@ -50,7 +50,7 @@ function blog_get_page_content_read($guid = NULL) {
/**
* Get page components to list a user's or all blogs.
*
- * @param int $owner_guid The GUID of the page owner or NULL for all blogs
+ * @param int $container_guid The GUID of the page owner or NULL for all blogs
* @return array
*/
function blog_get_page_content_list($container_guid = NULL) {
@@ -62,10 +62,11 @@ function blog_get_page_content_list($container_guid = NULL) {
$options = array(
'type' => 'object',
'subtype' => 'blog',
- 'full_view' => FALSE,
+ 'full_view' => false,
);
- $loggedin_userid = elgg_get_logged_in_user_guid();
+ $current_user = elgg_get_logged_in_user_entity();
+
if ($container_guid) {
// access check for closed groups
group_gatekeeper();
@@ -80,7 +81,7 @@ function blog_get_page_content_list($container_guid = NULL) {
$crumbs_title = $container->name;
elgg_push_breadcrumb($crumbs_title);
- if ($container_guid == $loggedin_userid) {
+ if ($current_user && ($container_guid == $current_user->guid)) {
$return['filter_context'] = 'mine';
} else if (elgg_instanceof($container, 'group')) {
$return['filter'] = false;
@@ -99,7 +100,13 @@ function blog_get_page_content_list($container_guid = NULL) {
// show all posts for admin or users looking at their own blogs
// show only published posts for other users.
- if (!(elgg_is_admin_logged_in() || (elgg_is_logged_in() && $container_guid == $loggedin_userid))) {
+ $show_only_published = true;
+ if ($current_user) {
+ if (($current_user->guid == $container_guid) || $current_user->isAdmin()) {
+ $show_only_published = false;
+ }
+ }
+ if ($show_only_published) {
$options['metadata_name_value_pairs'] = array(
array('name' => 'status', 'value' => 'published'),
);
@@ -155,11 +162,14 @@ function blog_get_page_content_friends($user_guid) {
// admin / owners can see any posts
// everyone else can only see published posts
- if (!(elgg_is_admin_logged_in() || (elgg_is_logged_in() && $owner_guid == elgg_get_logged_in_user_guid()))) {
- if ($upper > $now) {
- $upper = $now;
+ $show_only_published = true;
+ $current_user = elgg_get_logged_in_user_entity();
+ if ($current_user) {
+ if (($user_guid == $current_user->guid) || $current_user->isAdmin()) {
+ $show_only_published = false;
}
-
+ }
+ if ($show_only_published) {
$options['metadata_name_value_pairs'][] = array(
array('name' => 'status', 'value' => 'published')
);
@@ -240,9 +250,9 @@ function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) {
$list = elgg_list_entities_from_metadata($options);
if (!$list) {
- $content .= elgg_echo('blog:none');
+ $content = elgg_echo('blog:none');
} else {
- $content .= $list;
+ $content = $list;
}
$title = elgg_echo('date:month:' . date('m', $lower), array(date('Y', $lower)));
@@ -274,6 +284,7 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) {
$vars['id'] = 'blog-post-edit';
$vars['class'] = 'elgg-form-alt';
+ $sidebar = '';
if ($page == 'edit') {
$blog = get_entity((int)$guid);
@@ -310,14 +321,8 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) {
$content = elgg_echo('blog:error:cannot_edit_post');
}
} else {
- if (!$guid) {
- $container = elgg_get_logged_in_user_entity();
- } else {
- $container = get_entity($guid);
- }
-
elgg_push_breadcrumb(elgg_echo('blog:add'));
- $body_vars = blog_prepare_form_vars($blog);
+ $body_vars = blog_prepare_form_vars(null);
$title = elgg_echo('blog:add');
$content = elgg_view_form('blog/save', $vars, $body_vars);
@@ -358,6 +363,10 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) {
$values[$field] = $post->$field;
}
}
+
+ if ($post->status == 'draft') {
+ $values['access_id'] = $post->future_access;
+ }
}
if (elgg_is_sticky_form('blog')) {
@@ -384,7 +393,7 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) {
if ($auto_save_annotations = $post->getAnnotations('blog_auto_save', 1)) {
$auto_save = $auto_save_annotations[0];
} else {
- $auto_save == FALSE;
+ $auto_save = false;
}
if ($auto_save && $auto_save->id != $revision->id) {
@@ -396,52 +405,74 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) {
/**
* Forward to the new style of URLs
+ *
+ * Pre-1.7.5
+ * Group blogs page: /blog/group:<container_guid>/
+ * Group blog view: /blog/group:<container_guid>/read/<guid>/<title>
+ * 1.7.5-1.8
+ * Group blogs page: /blog/owner/group:<container_guid>/
+ * Group blog view: /blog/read/<guid>
+ *
*
* @param string $page
*/
function blog_url_forwarder($page) {
- global $CONFIG;
+
+ $viewtype = elgg_get_viewtype();
+ $qs = ($viewtype === 'default') ? "" : "?view=$viewtype";
+
+ $url = "blog/all";
+
+ // easier to work with & no notices
+ $page = array_pad($page, 4, "");
// group usernames
- if (substr_count($page[0], 'group:')) {
- preg_match('/group\:([0-9]+)/i', $page[0], $matches);
+ if (preg_match('~/group\:([0-9]+)/~', "/{$page[0]}/{$page[1]}/", $matches)) {
$guid = $matches[1];
$entity = get_entity($guid);
- if ($entity) {
- $url = "{$CONFIG->wwwroot}blog/group/$guid/all";
+ if (elgg_instanceof($entity, 'group')) {
+ if (!empty($page[2])) {
+ $url = "blog/view/$page[2]/";
+ } else {
+ $url = "blog/group/$guid/all";
+ }
register_error(elgg_echo("changebookmark"));
- forward($url);
+ forward($url . $qs);
}
}
+ if (empty($page[0])) {
+ return;
+ }
+
// user usernames
$user = get_user_by_username($page[0]);
if (!$user) {
return;
}
- if (!isset($page[1])) {
+ if (empty($page[1])) {
$page[1] = 'owner';
}
switch ($page[1]) {
case "read":
- $url = "{$CONFIG->wwwroot}blog/view/{$page[2]}/{$page[3]}";
+ $url = "blog/view/{$page[2]}/{$page[3]}";
break;
case "archive":
- $url = "{$CONFIG->wwwroot}blog/archive/{$page[0]}/{$page[2]}/{$page[3]}";
+ $url = "blog/archive/{$page[0]}/{$page[2]}/{$page[3]}";
break;
case "friends":
- $url = "{$CONFIG->wwwroot}blog/friends/{$page[0]}";
+ $url = "blog/friends/{$page[0]}";
break;
case "new":
- $url = "{$CONFIG->wwwroot}blog/add/$user->guid";
+ $url = "blog/add/$user->guid";
break;
case "owner":
- $url = "{$CONFIG->wwwroot}blog/owner/{$page[0]}";
+ $url = "blog/owner/{$page[0]}";
break;
}
register_error(elgg_echo("changebookmark"));
- forward($url);
+ forward($url . $qs);
}
diff --git a/mod/blog/start.php b/mod/blog/start.php
index 9faf1794e..e724b91c2 100644
--- a/mod/blog/start.php
+++ b/mod/blog/start.php
@@ -41,8 +41,8 @@ function blog_init() {
// override the default url to view a blog object
elgg_register_entity_url_handler('object', 'blog', 'blog_url_handler');
- // notifications
- register_notification_object('object', 'blog', elgg_echo('blog:newpost'));
+ // notifications - need to register for unique event because of draft/published status
+ elgg_register_event_handler('publish', 'object', 'object_notifications');
elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'blog_notify_message');
// add blog link to
@@ -99,8 +99,7 @@ function blog_page_handler($page) {
elgg_load_library('elgg:blog');
- // @todo remove the forwarder in 1.9
- // forward to correct URL for blog pages pre-1.7.5
+ // forward to correct URL for blog pages pre-1.8
blog_url_forwarder($page);
// push all blogs breadcrumb
@@ -114,20 +113,32 @@ function blog_page_handler($page) {
switch ($page_type) {
case 'owner':
$user = get_user_by_username($page[1]);
+ if (!$user) {
+ forward('', '404');
+ }
$params = blog_get_page_content_list($user->guid);
break;
case 'friends':
$user = get_user_by_username($page[1]);
+ if (!$user) {
+ forward('', '404');
+ }
$params = blog_get_page_content_friends($user->guid);
break;
case 'archive':
$user = get_user_by_username($page[1]);
+ if (!$user) {
+ forward('', '404');
+ }
$params = blog_get_page_content_archive($user->guid, $page[2], $page[3]);
break;
case 'view':
- case 'read': // Elgg 1.7 compatibility
$params = blog_get_page_content_read($page[1]);
break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("blog/view/{$page[1]}");
+ break;
case 'add':
gatekeeper();
$params = blog_get_page_content_edit($page_type, $page[1]);
@@ -137,7 +148,11 @@ function blog_page_handler($page) {
$params = blog_get_page_content_edit($page_type, $page[1], $page[2]);
break;
case 'group':
- if ($page[2] == 'all') {
+ $group = get_entity($page[1]);
+ if (!elgg_instanceof($group, 'group')) {
+ forward('', '404');
+ }
+ if (!isset($page[2]) || $page[2] == 'all') {
$params = blog_get_page_content_list($page[1]);
} else {
$params = blog_get_page_content_archive($page[1], $page[3], $page[4]);
@@ -212,7 +227,14 @@ function blog_entity_menu_setup($hook, $type, $return, $params) {
return $return;
}
- if ($entity->canEdit() && $entity->status != 'published') {
+ if ($entity->status != 'published') {
+ // draft status replaces access
+ foreach ($return as $index => $item) {
+ if ($item->getName() == 'access') {
+ unset($return[$index]);
+ }
+ }
+
$status_text = elgg_echo("blog:status:{$entity->status}");
$options = array(
'name' => 'published_status',
diff --git a/mod/blog/views/default/blog/sidebar/archives.php b/mod/blog/views/default/blog/sidebar/archives.php
index 3d8f28ca4..5098e6e3e 100644
--- a/mod/blog/views/default/blog/sidebar/archives.php
+++ b/mod/blog/views/default/blog/sidebar/archives.php
@@ -14,7 +14,7 @@ if (elgg_instanceof($page_owner, 'user')) {
// This is a limitation of the URL schema.
if ($page_owner && $vars['page'] != 'friends') {
- $dates = get_entity_dates('object', 'blog', $page_owner->getGUID());
+ $dates = array_reverse(get_entity_dates('object', 'blog', $page_owner->getGUID()));
if ($dates) {
$title = elgg_echo('blog:archives');
diff --git a/mod/blog/views/default/forms/blog/save.php b/mod/blog/views/default/forms/blog/save.php
index a805541bd..f825acca1 100644
--- a/mod/blog/views/default/forms/blog/save.php
+++ b/mod/blog/views/default/forms/blog/save.php
@@ -10,7 +10,7 @@ $vars['entity'] = $blog;
$draft_warning = $vars['draft_warning'];
if ($draft_warning) {
- $draft_warning = '<span class="message warning">' . $draft_warning . '</span>';
+ $draft_warning = '<span class="mbm elgg-text-help">' . $draft_warning . '</span>';
}
$action_buttons = '';
@@ -23,7 +23,7 @@ if ($vars['guid']) {
$delete_link = elgg_view('output/confirmlink', array(
'href' => $delete_url,
'text' => elgg_echo('delete'),
- 'class' => 'elgg-button elgg-button-delete elgg-state-disabled float-alt'
+ 'class' => 'elgg-button elgg-button-delete float-alt'
));
}
@@ -53,7 +53,7 @@ $excerpt_label = elgg_echo('blog:excerpt');
$excerpt_input = elgg_view('input/text', array(
'name' => 'excerpt',
'id' => 'blog_excerpt',
- 'value' => html_entity_decode($vars['excerpt'], ENT_COMPAT, 'UTF-8')
+ 'value' => _elgg_html_decode($vars['excerpt'])
));
$body_label = elgg_echo('blog:body');
@@ -125,9 +125,10 @@ $draft_warning
$excerpt_input
</div>
-<label for="blog_description">$body_label</label>
-$body_input
-<br />
+<div>
+ <label for="blog_description">$body_label</label>
+ $body_input
+</div>
<div>
<label for="blog_tags">$tags_label</label>
diff --git a/mod/blog/views/default/river/object/blog/create.php b/mod/blog/views/default/river/object/blog/create.php
index a054c1061..b808f1bdc 100644
--- a/mod/blog/views/default/river/object/blog/create.php
+++ b/mod/blog/views/default/river/object/blog/create.php
@@ -4,10 +4,12 @@
*/
$object = $vars['item']->getObjectEntity();
-$excerpt = strip_tags($object->excerpt);
+
+$excerpt = $object->excerpt ? $object->excerpt : $object->description;
+$excerpt = strip_tags($excerpt);
$excerpt = elgg_get_excerpt($excerpt);
echo elgg_view('river/elements/layout', array(
'item' => $vars['item'],
'message' => $excerpt,
-)); \ No newline at end of file
+));
diff --git a/mod/bookmarks/languages/en.php b/mod/bookmarks/languages/en.php
index d4980280d..970b39415 100644
--- a/mod/bookmarks/languages/en.php
+++ b/mod/bookmarks/languages/en.php
@@ -9,7 +9,7 @@ $english = array(
* Menu items and titles
*/
'bookmarks' => "Bookmarks",
- 'bookmarks:add' => "Add bookmark",
+ 'bookmarks:add' => "Add a bookmark",
'bookmarks:edit' => "Edit bookmark",
'bookmarks:owner' => "%s's bookmarks",
'bookmarks:friends' => "Friends' bookmarks",
diff --git a/mod/bookmarks/pages/bookmarks/all.php b/mod/bookmarks/pages/bookmarks/all.php
index bdb8fc793..5c6011ad9 100644
--- a/mod/bookmarks/pages/bookmarks/all.php
+++ b/mod/bookmarks/pages/bookmarks/all.php
@@ -13,9 +13,8 @@ elgg_register_title_button();
$content = elgg_list_entities(array(
'type' => 'object',
'subtype' => 'bookmarks',
- 'limit' => 10,
'full_view' => false,
- 'view_toggle_type' => false
+ 'view_toggle_type' => false,
));
if (!$content) {
diff --git a/mod/bookmarks/pages/bookmarks/friends.php b/mod/bookmarks/pages/bookmarks/friends.php
index 15b1da098..173996346 100644
--- a/mod/bookmarks/pages/bookmarks/friends.php
+++ b/mod/bookmarks/pages/bookmarks/friends.php
@@ -7,7 +7,7 @@
$page_owner = elgg_get_page_owner_entity();
if (!$page_owner) {
- forward('bookmarks/all');
+ forward('', '404');
}
elgg_push_breadcrumb($page_owner->name, "bookmarks/owner/$page_owner->username");
diff --git a/mod/bookmarks/pages/bookmarks/owner.php b/mod/bookmarks/pages/bookmarks/owner.php
index a024ff352..b7b907916 100644
--- a/mod/bookmarks/pages/bookmarks/owner.php
+++ b/mod/bookmarks/pages/bookmarks/owner.php
@@ -7,7 +7,7 @@
$page_owner = elgg_get_page_owner_entity();
if (!$page_owner) {
- forward('bookmarks/all');
+ forward('', '404');
}
elgg_push_breadcrumb($page_owner->name);
@@ -18,7 +18,6 @@ $content .= elgg_list_entities(array(
'type' => 'object',
'subtype' => 'bookmarks',
'container_guid' => $page_owner->guid,
- 'limit' => 10,
'full_view' => false,
'view_toggle_type' => false
));
diff --git a/mod/bookmarks/start.php b/mod/bookmarks/start.php
index 66e22b565..caea43587 100644
--- a/mod/bookmarks/start.php
+++ b/mod/bookmarks/start.php
@@ -56,6 +56,9 @@ function bookmarks_init() {
// Listen to notification events and supply a more useful message
elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'bookmarks_notify_message');
+ // Register bookmarks view for ecml parsing
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'bookmarks_ecml_views_hook');
+
// Register a URL handler for bookmarks
elgg_register_entity_url_handler('object', 'bookmarks', 'bookmark_url');
@@ -125,11 +128,14 @@ function bookmarks_page_handler($page) {
include "$pages/friends.php";
break;
- case "read":
case "view":
set_input('guid', $page[1]);
include "$pages/view.php";
break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("bookmarks/view/{$page[1]}");
+ break;
case "add":
gatekeeper();
@@ -279,8 +285,11 @@ function bookmarks_page_menu($hook, $type, $return, $params) {
if (!$page_owner) {
$page_owner = elgg_get_logged_in_user_entity();
}
-
+
if ($page_owner instanceof ElggGroup) {
+ if (!$page_owner->isMember()) {
+ return $return;
+ }
$title = elgg_echo('bookmarks:bookmarklet:group');
} else {
$title = elgg_echo('bookmarks:bookmarklet');
@@ -292,3 +301,16 @@ function bookmarks_page_menu($hook, $type, $return, $params) {
return $return;
}
+
+/**
+ * Return bookmarks views to parse for ecml
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_ecml_views_hook($hook, $type, $return, $params) {
+ $return['object/bookmarks'] = elgg_echo('item:object:bookmarks');
+ return $return;
+}
diff --git a/mod/categories/pages/categories/listing.php b/mod/categories/pages/categories/listing.php
index 8924506e9..d51e6c19e 100644
--- a/mod/categories/pages/categories/listing.php
+++ b/mod/categories/pages/categories/listing.php
@@ -15,8 +15,8 @@ $type = get_input("type", 'object');
$params = array(
'metadata_name' => 'universal_categories',
'metadata_value' => $category,
- 'types' => $type,
- 'subtypes' => $subtype,
+ 'type' => $type,
+ 'subtype' => $subtype,
'owner_guid' => $owner_guid,
'limit' => $limit,
'full_view' => FALSE,
diff --git a/mod/colorbox b/mod/colorbox
deleted file mode 160000
-Subproject f95095e9cd347e1d64ecd8919d19acc9adeda3f
diff --git a/mod/colorbox/COPYING b/mod/colorbox/COPYING
new file mode 100644
index 000000000..dba13ed2d
--- /dev/null
+++ b/mod/colorbox/COPYING
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ 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
+them 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.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero 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 that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ 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
+state 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 Affero General Public License as published by
+ the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
diff --git a/mod/colorbox/languages/ca.php b/mod/colorbox/languages/ca.php
new file mode 100644
index 000000000..214d327aa
--- /dev/null
+++ b/mod/colorbox/languages/ca.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for Catalan
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$catalan = array(
+ "js:lightbox:current" => "imatge %s de %s",
+);
+
+add_translation("ca", $catalan);
diff --git a/mod/colorbox/languages/en.php b/mod/colorbox/languages/en.php
new file mode 100644
index 000000000..70bab4e05
--- /dev/null
+++ b/mod/colorbox/languages/en.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for English
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$english = array(
+ "js:lightbox:current" => "image %s of %s",
+);
+
+add_translation("en", $english);
diff --git a/mod/colorbox/languages/es.php b/mod/colorbox/languages/es.php
new file mode 100644
index 000000000..e49d0db47
--- /dev/null
+++ b/mod/colorbox/languages/es.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for Spanish
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$spanish = array(
+ "js:lightbox:current" => "imagen %s de %s",
+);
+
+add_translation("es", $spanish);
diff --git a/mod/colorbox/manifest.xml b/mod/colorbox/manifest.xml
new file mode 100644
index 000000000..ec5f22e90
--- /dev/null
+++ b/mod/colorbox/manifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Colorbox</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>lorea</category>
+ <category>enhancement</category>
+ <category>multimedia</category>
+ <description>Elgg lightbox replacement for Fancybox. Colorbox is the default Elgg lightbox in 1.9.</description>
+ <website>https://lorea.org/plugin/colorbox</website>
+ <copyright>Copyright 2012 Lorea Faeries &lt;federation@lorea.org&gt;</copyright>
+ <repository>https://gitorious.org/lorea/colorbox</repository>
+ <donations>https://lorea.org/support</donations>
+ <license>GNU Affero General Public License version 3, or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>embed</plugin>
+ </requires>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.9</version>
+ <comparison>lt</comparison>
+ </requires>
+</plugin_manifest>
diff --git a/mod/colorbox/start.php b/mod/colorbox/start.php
new file mode 100644
index 000000000..b19b2efcf
--- /dev/null
+++ b/mod/colorbox/start.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Colorbox -- A lightweight, customizable lightbox plugin for jQuery
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ * @homepage https://lorea.org/plugin/colorbox
+ * @copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ * @license COPYING, http://www.gnu.org/licenses/agpl
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+elgg_register_event_handler('init', 'system', 'colorbox_init');
+
+/**
+ * Initialize the colorbox plugin.
+ *
+ */
+function colorbox_init() {
+
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/README.md b/mod/colorbox/vendors/jquery/colorbox/README.md
new file mode 100644
index 000000000..2a53feac8
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/README.md
@@ -0,0 +1,318 @@
+## About ColorBox:
+A customizable lightbox plugin for jQuery. See the [project page](http://jacklmoore.com/colorbox/) for documentation and a demonstration, and the [FAQ](http://jacklmoore.com/colorbox/faq/) for solutions and examples to common issues. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
+
+## Changelog:
+
+### Version 1.3.19 - December 08 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all)
+
+* Fixed bug related to using the 'fixed' property.
+* Optimized the setup procedure to be more efficient.
+* Removed $.colorbox.init() as it will no longer be needed (will self-init when called).
+* Removed use of $.browser.
+
+### Version 1.3.18 - October 07 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 1's controls.png
+
+* Fixed a regression where Flash content displayed in ColorBox would be reloaded if the browser window was resized.
+* Added safety check to make sure that ColorBox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize ColorBox if they need it before the DOM has finished loading.
+* Updated the example index.html files to be HTML5 compliant.
+* Changed the slideshow behavior so that it immediately moves to the next slide when the slideshow is started.
+* Minor regex bugfix to allow automatic detection of image URLs that include fragments.
+
+### Version 1.3.17 - May 11 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js
+
+* Added properties "top", "bottom", "left" and "right" to specify a position relative to the viewport, rather than using the default centering.
+* Added property "data" to specify GET or POST data when using Ajax. ColorBox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load().
+* Added property "fixed" which can provide fixed positioning for ColorBox, rather than absolute positioning. This will allow ColorBox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning.
+* Fixed ClearType problem with IE7.
+* Minor fixes.
+
+### Version 1.3.16 - March 01 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 4 background png files
+
+* Better IE related transparency workarounds. IE7 and up now uses the same background image sprite as other browsers.
+* Added error handling for broken image links. A message will be displayed telling the user that the image could not be loaded.
+* Added new property: 'fastIframe' and set it to true by default. Setting to fastIframe:false will delay the loading graphic removal and onComplete event until iframe has completely loaded.
+* Ability to redefine $.colorbox.close (or prev, or next) at any time.
+
+### Version 1.3.15 - October 27 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor fixes for specific cases.
+
+### Version 1.3.14 - October 27 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* In IE6, closing an iframe when using HTTPS no longer generates a security warning.
+
+### Version 1.3.13 - October 22 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed the index.html example files to use YouTube's new embedded link format.
+* By default, ColorBox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers.
+* Minor bug fix involved in using a combination of slideshow and non-slideshow content.
+
+### Version 1.3.12 - October 20 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor bug fix involved in preloading images when using a function as a value for the href property.
+
+### Version 1.3.11 - October 19 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed the slideshow functionality that broke with 1.3.10
+* The slideshow now respects the loop property.
+
+### Version 1.3.10 - October 16 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed compatibility with jQuery 1.4.3
+* The 'open' property now accepts a function as a value, like all of the other properties.
+* Preloading now loads the correct href for images when using a dynamic (function) value for the href property.
+* Fixed bug in Safari 3 for Win where ColorBox centered on the document, rather than the visitor's viewport.
+* May have fixed an issue in Opera 10.6+ where ColorBox would rarely/randomly freeze up while switching between photos in a group.
+* Some functionality better encapsulated & minor performance improvements.
+
+### Version 1.3.9 - July 7 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/ all colorbox.css (the core styles)
+
+* Fixed a problem where iframed youtube videos would cause a security alert in IE.
+* More code is event driven now, making the source easier to grasp.
+* Removed some unnecessary style from the core CSS.
+
+### Version 1.3.8 - June 21 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug in Chrome where it would sometimes render photos at 0 by 0 width and height (behavior introduced in recent update to Chrome).
+* Fixed a bug where the onClosed callback would fire twice (only affected 1.3.7).
+* Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused ColorBox to move out of position.
+* Abstracted the identifiers (HTML ids & classes, and JS plugin name, method, and events) so that the plugin can be easily rebranded.
+* Small changes to improve either code readability or compression.
+
+### Version 1.3.7 - June 13 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html
+
+* $.colorbox can now be used for direct calls and accessing public methods. Example: $.colorbox.close();
+* Resize now accepts 'width', 'innerWidth', 'height' and 'innerHeight'. Example: $.colorbox.resize({width:"100%"})
+* Added option (loop:false) to disable looping in a group.
+* Added options (escKey:false, arrowKey:false) to disable esc-key and arrow-key bindings.
+* Added method for removing ColorBox from a document: $.colorbox.remove();
+* Fixed a bug where iframed URLs would be truncated if they contained an unencoded apostrophe.
+* Now uses the exact href specified on an anchor, rather than the version returned by 'this.href'. This was causing "#example" to be normalized to "http://domain/#example" which interfered with how some users were setting up links to inline content.
+* Changed example documents over to HTML5.
+
+### Version 1.3.6 - Jan 13 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Small change to make ColorBox compatible with jQuery 1.4
+
+### Version 1.3.5 - December 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug introduced in 1.3.4 with IE7's display of example 2 and 3, and auto-width in Opera.
+* Fixed a bug introduced in 1.3.4 where colorbox could not be launched by triggering an element's click event through JavaScript.
+* Minor refinements.
+
+### Version 1.3.4 - December 5 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Event delegation is now used for elements that ColorBox is assigned to, rather than individual click events.
+* Additional callbacks have been added to represent other stages of ColorBox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of ColorBox.
+* Ajax content is now immediately added to the DOM to be more compatible if that content contains script tags.
+* Focus is now returned to the calling element on closing.
+* Fixed a bug where maxHeight and maxWidth did not work for non-photo content.
+* Direct calls no longer need 'open:true', it is assumed. Example: `$.fn.colorbox({html:'<p>Hi</p>'});`
+
+### Version 1.3.3 - November 7 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed $.fn.colorbox.element() to return a jQuery object rather the DOM element.
+* jQuery.colorbox-min.js is compressed with Google's Closure Compiler rather than YUI Compressor.
+
+### Version 1.3.2 - October 27 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for ColorBox, without having to anticipate the size of the borders and buttons.
+* Renamed 'scrollbars' option to 'scrolling' to be in keeping with the existing HTML attribute. The option now also applies to iframes.
+* Bug fix: In Safari, positioning occassionally incorrect when using '100%' dimensions.
+* Bug fix: In IE6, the background overlay is briefly not full size when first viewing.
+* Bug fix: In Firefox, opening ColorBox causes a split second shift with a small minority of webpage layouts.
+* Simplified code in a few areas.
+
+### Version 1.3.1 - September 16 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css/colorbox-ie.css(removed)
+
+* Removed the IE-only stylesheets and conditional comments for example styles 1 & 4. All CSS is handled by a single CSS file for all examples.
+* Removed user-agent sniffing from the js and replaced it with feature detection. This will allow correct rendering for visitors masking their agent type.
+
+### Version 1.3.0 - September 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css
+
+* Added $.fn.colorbox.resize() method to allow ColorBox to resize it's height if it's contents change.
+* Added 'scrollbars' option to allow users to turn off scrollbars when using the resize() method.
+* Renamed the 'resize' option to be less ambiguous. It's now 'scalePhotos'.
+* Renamed the 'cbox_close' event to be less ambiguous. It's now 'cbox_cleanup'. It is the first thing to happen in the close method while the 'cbox_closed' event is the last to happen.
+* Fixed a bug with the slideshow mouseover graphics that appeared after ColorBox is opened a 2nd time.
+* Fixed a bug where ClearType may not work in IE6&7 if using the fade transition.
+* Minor code optimizations to increase compression.
+
+### Version 1.2.9 - August 7 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor change to enable use with $.getScript();
+* Minor change to the timing of the 'cbox_load' event so that it is more useful.
+* Added a direct link to a YouTube video to the examples.
+
+### Version 1.2.8 - August 5 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug with the overlay in IE6
+* Fixed a bug where left & right keypress events might be prematurely unbound.
+
+### Version 1.2.7 - July 31 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets and background images (core styles have not changed and the updates will not affect existing user themes / old example themes)
+
+* Code cleanup and reduction, better organization and documentation in the full source.
+* Added ability to use functions in place of static values for ColorBox's options (thanks Ken!).
+* Added an option for straight HTML. Example: `$.fn.colorbox({html:'<p>Howdy</p>', open:true})`
+* Added an event for the beginning of the closing process. This is in addition to the event that already existed for when ColorBox had completely closed. 'cbox_close' and 'cbox_closed' respectively.
+* Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening ColorBox.
+* Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing ColorBox.
+* The 'esc' key is unbound now when ColorBox is not open, to avoid any potential conflicts.
+* Used background sprites for examples 1 & 4. Put IE-only (non-sprite) background images in a separate folder.
+* Example themes 1, 3, & 4 received slight visual tweaks.
+* Optimized pngs for smaller file size.
+* Added slices, grid, and correct sizing to the Adobe Illustrator file, all theme files are now export ready!
+
+### Version 1.2.6 - July 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug with fixed width/height images in Opera 9.64.
+* Fixed a bug with trying to set a value for rel during a direct call to ColorBox. Example: `$.fn.colorbox({rel:'foo', open:true});`
+* Changed how href/rel/title settings are determined to avoid users having to manually update ColorBox settings if they use JavaScript to update any of those attributes, after ColorBox has been defined.
+* Fixed a FF3 bug where the back button was disabled after closing an iframe.
+
+### Version 1.2.5 - June 23 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed the point at which iframe srcs are set (to eliminate the need to refresh the iframe once it has been added to the DOM).
+* Removed unnecessary return values for a very slight code reduction.
+
+### Version 1.2.4 - June 9 2009
+Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
+
+* Fixed an issue where ColorBox may not close completely if it is closed during a transition animation.
+* Minor code reduction.
+
+### Version 1.2.3 - June 4 2009
+* Fixed a png transparency stacking issue in IE.
+* More accurate Ajax auto-sizing if the user was depending on the #cboxLoadedContent ID for CSS styling.
+* Added a public function for returning the current html element that ColorBox is associated with. Example use: var that = $.fn.colorbox.element();
+* Added bicubic scaling for resized images in the original IE7.
+* Removed the IE6 stylesheet and png files from Example 3. It now uses the same png file for the controls that the rest of the browsers use (an alpha transparency PNG8). This example now only has 2 graphics files and 1 stylesheet.
+
+### Version 1.2.2 - May 28 2009
+* Fixed an issue with the 'resize' option.
+
+### Version 1.2.1 - May 28 2009
+* Note: If you are upgrading, update your jquery.colorbox.js and colorbox.css files.
+* Added photo resizing.
+* Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of ColorBox cannot exceed the height of the browser window.
+* Added 'rel' setting to add the ability to set an alternative rel for any ColorBox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML.
+* Added a 'photo' setting to force ColorBox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1')
+* Removed the need to ever create disposable elements to call colorbox on. ColorBox can now be called directly, without being associated with any existing element, by using the following format:
+ `$.fn.colorbox({open:true, href:'yourLink.xxx'});`
+* ColorBox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc.
+* For user callbacks, 'this' now refers to the element colorbox was opened from.
+* Fixed a minor grouping issue with IE6, when transition type is set to 'none'.
+* Added an Adobe Illustrator file that contains the borders and buttons used in the various examples.
+
+### Version 1.2 - May 13 2009
+* Added a slideshow feature.
+* Added re-positioning on browser resize. If the browser is resized, ColorBox will recenter itself onscreen.
+* Added hooks for key events: cbox_open, cbox_load, cbox_complete, cbox_closed.
+* Fixed an IE transparency-stacking problem, where transparent PNGs would show through to the background overlay.
+* Fixed an IE iframe issue where the ifame might shift up and to the left under certain circumstances.
+* Fixed an IE6 bug where the loading overlay was not at full height.
+* Removed the delay in switching between same-sized gallery content when using transitions.
+* Changed how iframes are loaded to make it more compatible with iframed pages that use DOM dependent JavaScript.
+* Changed how the JS is structured to be better organized and increase compression. Increased documentation.
+* Changed CSS :hover states to a .hover class. This sidesteps a minor IE8 bug with css hover states and allows easier access to hover state user styles from the JavaScript.
+* Changed: elements added to the DOM have new ID's. The naming is more consistent and less likely to cause conflicts with existing website stylesheets. All stylesheets have been updated.
+* Changed the behavior for prev/next links so that ColorBox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons.
+* Changed the naming of variables in the parameter map to be more concise and intuitive.
+* Removed colorbox.css. Combined the colorbox.css styles with jquery.colorbox.js: the css file was not large enough to warrant being a separate file.
+
+### Version 1.1.6 - April 28 2009
+* Prevented the default action of the next & previous anchors and the left and right keys for gallery mode.
+* Fixed a bug where the title element was being added back to the DOM when closing ColorBox while using inline content.
+* Fixed a bug where IE7 would crash for example 2.
+* Smaller filesize: removed a small amount of unused code and rewrote the HTML injection with less syntax.
+* Added a public method for closing ColorBox: $.fn.colorbox.close(). This will allow iframe users to add an event to close ColorBox without having to create an additional function.
+
+### Version 1.1.5 - April 11 2009
+* Fixed minor issues with exiting ColorBox.
+
+### Version 1.1.4 - April 08 2009
+* Fixed a bug in the fade transition where ColorBox not close completely if instructed to close during the fade-in portion of the transition.
+
+### Version 1.1.3 - April 06 2009
+* Fixed an IE6&7 issue with using ColorBox to display animated GIFs.
+
+### Version 1.1.2 - April 05 2009
+* Added ability to change content when ColorBox is already open.
+* Added vertical photo centering now works for all browsers (this feature previously excluded IE6&7).
+* Added namespacing to the esc-key keydown event for people who want to disable it: "keydown.colorClose"
+* Added 'title' setting to add the ability to set an alternative title for any ColorBox call.
+* Fixed rollover navigation issue with IE8. (Added JS-based rollover state due to a browser-bug.)
+* Fixed an overflow issue for when the fixed width/height is smaller than the size of a photo.
+* Fixed a bug in the fade transition where the border would still come up if ColorBox was closed mid-transition.
+* Switch from JSMin to Yui Compressor for minification. Minified code now under 7KB.
+
+### Version 1.1.1 - March 31 2009
+* More robust image detection regex. Now detects image file types with url fragments and/or query strings.
+* Added 'nofollow' exception to rel grouping.
+* Changed how images are loaded into the DOM to prevent premature size calculation by ColorBox.
+* Added timestamp to iframe name to prevent caching - this was a problem in some browsers if the user had multiple iframes and the visitor left the page and came back, or if they refreshed the page.
+
+### Version 1.1.0 - March 21 2009
+* Animation is now much smoother and less resource intensive.
+* Added support for % sizing.
+* Callback option added.
+* Inline content now preserves JavaScript events, and changes made while ColorBox is open are also preserved.
+* Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the ColorBox event to non-anchors.
+ Example: $('button').colorbox({'href':'process.php'})
+ Example: $('a[href='http://msn.com']).colorbox({'href':'http://google.com', iframe:true});
+* Photos are now horizontally centered if they are smaller than the lightbox size. Also vertically centered for browsers newer than IE7.
+* Buttons in the examples are now included in the 'protected zone'. The lightbox will never expand it's borders or buttons beyond an accessible area of the screen.
+* Keypress events don't queue up by holding down the arrow keys.
+* Added option to close ColorBox by clicking on the background overlay.
+* Added 'none' transition setting.
+* Changed 'contentIframe' and 'contentInline' to 'inline' and 'iframe'. Removed 'contentAjax' because it is automatically assumed for non-image file types.
+* Changed 'contentWidth' and 'contentHeight' to 'fixedWidth' and 'fixedHeight'. These sizes now reflect the total size of the lightbox, not just the inner content. This is so users can accurately anticipate % sizes without fear of creating scrollbars.
+* Clicking on a photo will now switch to the next photo in a set.
+* Loading.gif is more stable in it's position.
+* Added a minified version.
+* Code passes JSLint.
+
+### Version 1.0.5 - March 11 2009
+* Redo: Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
+
+### Version 1.0.4 - March 10 2009
+* Added an option to allow users to automatically open the lightbox. Example usage: $(".colorbox").colorbox({open:true});
+* Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
+
+### Version 1.0.3 - March 09 2009
+* Fixed vertical centering for Safari 3.0.x.
+
+### Version 1.0.2 - March 06 2009
+* Corrected a typo.
+* Changed the content-type check so that it does not assume all links to photos should actually display photos. This allows for Ajax/inline/and iframe calls on anchors linking to picture file types.
+
+### Version 1.0.1 - March 05 2009
+* Fixed keydown events (esc, left arrow, right arrow) for Webkit browsers.
+
+### Version 1.0 - March 03 2009
+* First release
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox.ai b/mod/colorbox/vendors/jquery/colorbox/colorbox.ai
new file mode 100644
index 000000000..1b51881af
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox.ai
@@ -0,0 +1,1811 @@
+%PDF-1.4 %
+1 0 obj <</Metadata 2 0 R/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 48282/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:11:12 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/vnd.adobe.illustrator</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">colorbox</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:CreateDate>2009-05-27T04:22:39-04:00</xmp:CreateDate>
+ <xmp:ModifyDate>2009-07-30T21:43:35-05:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2009-07-30T21:43:35-05:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>208</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA&#xA;AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXnn5b+fNd85T6us6W9jHpkiRL6KOzOzl9zzagACdMVZt9U1D/lt/5Jr/AFxV&#xA;gf5ZfmZrHmfzJrei39vBGNIaSNbiEODIYpjFUqzNStK4q9JxV2KuxV2KuxV2KuxV2KuxV2KvG/Pf&#xA;5jfmBY/mDL5Z8twpdMyRNb2/pKzktEHf4jTYbmpxVQ/xJ/zkV/1Y1/4G3/6qYqh9G/ND8zYvPml+&#xA;WvMdtHZSXcsXqwtEgYwyEjkjKSCDQioPXFXueKvBB+aX5r6n5k1HSdAtI717OSX4EiT4Y0fiCzOV&#xA;H44qmH+JP+civ+rGv/A2/wD1UxVd5F/Nbzde6/qVh5lMVnHpcEj3aNGIzG0TANyPgBiqbeU/z18v&#xA;eZdcl0izkZZ2kZLEPEw9aONOTS1pRQTUKCa+OKqdh+fvlm882Dy+kzAycYoLkxsFN16jRtbsCOuy&#xA;lWFVNaVr1VRfnv8AN5/Jt9AmpWLvp1zbyPBexFWrcx7iEx1BFV/aO340VR+r/mFqWj+Sl8x6lYGG&#xA;aOOGS808MrPH6jKHVW2VivLbpX2xVMtC8622vaLFq+lzLPaTKxRuJHxLUMpBoQQRirDfIf5y6x5n&#xA;1DSrWaxhtl1HT7i/dkZmKmC7a2CCoHXjyriqH/5x3/vvNf8AzFQ/rmxV7Lirwb8hv/JkedP+M9z/&#xA;ANRhxV7zirsVdirsVdirsVdirsVdirsVeNSf+tKx/wDMKf8AqDOKvZcVeHfmF/60T5T/AOYO0/6i&#xA;7nFXuOKvDvyS/wDJleb/AJN/1EHFXuOKvCPKoB/O/wA3AioLSgg/OPFWbeXvLflPTby/m0e1gjnl&#xA;n5XRjCnhLxHJVP7O1KqPn1OKtQ+W/KaebH1VLaAa4LZVQhVBWIu9XVRtyZmYM3XtiqC8x+VvI2q6&#xA;79Y19I7m7WzkRbe5c+mkBPxyIhPFH/yx8W3XbFVeXQvK8/km20meQyeX1jgQPJI3xRqylQ7k1AOw&#xA;O+2Kp/bWdpb2iWtpEkNsiCOKKIBVVQOICgbAAbDFWE+SPKfkrTL7TZ9Eu7i4ltrCeCzEtaNbPdM8&#xA;jtVE3EzFR0+XfFVH/nHf++81/wDMVD+ubFXsuKvBvyG/8mR50/4z3P8A1GHFXvOKuxV2KuxV2Kux&#xA;V2KuxV2KuxV4tfgH/nISYHcfUl/6h1xV6LwT+Ufdil5J5sAH/OQPlWgp/o1r0/5ibjFD3/FXg/5T&#xA;gHzt5xqK/vk6/wDGWbFXqnBP5R92KXlnlqJJPzo80xNUI8AU8SVNDFCNitCD7jFDLfL3kW10fUZL&#xA;xLiWQh2MKsduDClHH7RB74qttvIVnD5iGrfWZSqfvEj5GplZmJJbrwoR8Pfvttiqt5q8pyeYJ4Vl&#xA;uBDawRuU4oDJ6zbAlj+xtuBT5+CqM1DRrrUPLf6LnlRJ5I40mljWiAggsVTbw2GKo3SNNg0uwgso&#xA;Gd4oBRWkYsx+k/qG2KpD5W8sajpU1k9y0TC3spraT02J+OS5MwIqo24/jiqS/wDOO/8Afea/+YqH&#xA;9c2KvZcVeDfkN/5Mjzp/xnuf+ow4q95xV2KuxV2KuxV2KuxV2KuxV2KvA/OPmPTvL356y6jqJZbM&#xA;W0cUsiKXKc4AAxUbkA9ab4qyL/ldX5a/9XZv+kW7/wCqWKsFm8z6R5m/PLy5qGkO81lALa19Z0aM&#xA;O6yySEqrgNQeqBuBvXtvir6UxV81eTfOmheWPPHmY6zI8EF5MwjnVHkUNFK54ssYZvi57bYqzv8A&#xA;5XV+Wv8A1dm/6Rbv/qlirFfy41m11v8ANXXtVtAwtbqImHmKMVT04wxHblwrir2LFLsVdirsVdir&#xA;sVeef847/wB95r/5iof1zYoey4q8G/Ib/wAmR50/4z3P/UYcVe84q7FXYq7FXYq7FXYq7FXYq7FU&#xA;p1Dyj5X1G6a7v9Ktbq6cAPNNEjuQooKkiuwGKob/AJV95G/6sNh/0jx/0xVVtfJPlC0uY7m10azg&#xA;uIWDxSxworKw6EEDY4qnWKpHN5F8mTSvLLollJLISzu0EZJYmpJNMVWf8q+8jf8AVhsP+keP+mKo&#xA;rT/KfljTpjNYaXa2sxHEyQxIjFT2qoGKph9Utv8AfS/dirvqlt/vpfuxV31S2/30v3Yq76pbf76X&#xA;7sVd9Utv99L92Ku+qW3++l+7FXj/APzjwQLjzUhNGNzCwU9aVl3pir2XFXg35DD/AJCN5zb9lprk&#xA;q3Yj62emKvecVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSyfy1oU2&#xA;5soUbpySNUNPCoGKqH+D9B/5ZhiqN03RdK0xOFhaRWwIofSRUJHvxAxVG4q7FXYq7FXYq7FXYq7F&#xA;XYqg9H1jTdZ0u11XTLhLqwvI1mt54yCrI4qP7R2xVL/OHm6x8qaNca1qNrdTabaL6l3NaRiYxJWh&#xA;ZkDB+I7kKaDc7Yq84/6Gu/Kj0DcV1P0AokMv1GTgELcA3KtKc/hr47Yq9J8pea7PzTo1vrNha3UG&#xA;nXiCW0lu41iMsbfZdU5F+LdQSBUbjbFUdrOs6ZoulXWq6pcJa2FlG01zPIaKqIKn5nwHfFUZirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir8t7NtVW2nltHmS3gCvcNGzKq8mCK&#xA;TQjck0xV9Tf84pyar5v/AC088eUtS1CZ7GaM2dq8hMpgXULeaOXhyPTYNx6Vr44qxf8A6Fe/OhtP&#xA;Hllv0WNHEwYXv1iSgYOT6/GnPdTTjx+iu+Kss/5y2utV8sfl/wCTPLWnX80diA1vcshMbTixgiSI&#xA;vxPT4i3HpX5DFXyrdvqzW0El28z209XgaRmZGKEoSKkioNRir9SMVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVfnX5S85aNpmjNFND6bwAGSJAC0xJA5DkRU+IJxV71/wA4TyrN&#xA;a+dJUHFZLq0dR4BhOR0xV9NYq+ZP+c25FjsvJsjCqpdXbMPYLCcVeC+YvOOiXnl4WyQCea4B9KNw&#xA;AYCCRzPGtG8ADv32xV+iuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvhDQ&#xA;P+cTvzc1nSbbU1gsrGO6jWWKC7uCk3BxyUskaScag9CajuMVfSX/ADjl+TmsflroGpx61cwz6nqs&#xA;8ckkVsWeKOOFWVBzZULMeZJ28MVeu4q8h/5yN/JzWfzK0HS49EuoYNS0qeR0iuSyRSRzqqv8aq5D&#xA;LwUjanXFXzb5h/5xQ/NzRdJudTaCzv4rSNpZobOcvNwQcmKo6R8qDsu57DFX3hirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdir4I0T/nKf8AOHSNKttMi1CC5htIxFFLc26SS8FF&#xA;FDPsWoNqnfxxV9Mf843fnBrf5j+XtSbXIYk1TSZ445Li3UokscysyEoSeLDgwNNumKvX8VePf85J&#xA;fnDrv5ceX9LbQoIX1LVp5I1uLhS6RRwKrOQgK1di60rt12xV80a7/wA5S/m/rGkXWlzahb28F5G0&#xA;M0ltbpHL6bijBX+LjUbVG/hir74xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV8lfkx+Uv5Sa1+Wlxd6peLeXGprGupX/NIZbF0kST6vGZAwiPNQGcirg7fCcVZD/zhpbW1sfPd&#xA;tauZLaC/t44HJDFo09dVNRQGoHbFX0pir5q/5zNt7e5/wLb3LcLea+uI5nqFojegGNTsNjiqTfnD&#xA;+T/5PaP+U8OoWF/Hp+oaajrpV7zWaTUHaR5DbycKeqxZyA4HwAb/AAjFX1dirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdir8vLF9eSxu7exFx9Sv1WO8jiDmOUROJEDgCh4uoI8M&#xA;VfRv/OPmm+ffKv5QeePN1gq6dLEgvbFb+BnjuYtPhlkn+Csb7g8UcNTlXFV7f85FfnGvkL/GBuNH&#xA;+r8liFl9RufW9RpjHUn1eAi4rX1a0LfB9rFW/wDnI7SPPnmL8qfJPmbUE/SVwVa61L6hAVhthfQx&#xA;yRfADJJxAXizs1OVOlaYq+br+XX3sbS2vvrP1HT1eOyilDiOISyGVwgIoOTsSfHFX6h4q7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhNI0nT9I0y10vToEtrGzjWG3gjAVVRBQA&#xA;AUGKq91bW91bS2tzGs1vOjRTROKq6OOLKw7gg0xV45H/AM4lflEmofWfT1BrblU6cbtvq5Tlz9I/&#xA;D6vDlvTnir2SCCG3gjggRYoYlCRRoAqqqiiqoHQAYqhtY0jTtZ0q70rUoFubC9iaC5gcAqyOKEb/&#xA;AIYqjMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd&#xA;irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirqitO/hirsVcSBudsVdirSujEhWBI60NaYq3irsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdiq2WP1Inj5MnNSvNDRlqKVB33GKpL5U8sy6DbzwyahPf8ArSM49diQlXZv&#xA;hBrQtyq57nfFVlj5WmtvM9zrbalczJPHwWzd6otWZuO/7CcvgHY1xVT82eU5tdmtJI7sWwtg/JeD&#xA;MJQzI3pycXSsZ4bjFU21vTm1LSLuwWT0muomiEtK8eQpWm3TFVawtTaWUFqZpLgwoqGeU8pH4inJ&#xA;j3JxVJvKflmfQ2vDJOswuW5LxBFP3ssm9f8AjLirIMVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVU7o3ItpTaqj3QRjAkrFIzJT4Q7KHIWvUhT8sVYV+VN9+a93pt8fzEsbOyu0uHFj9&#xA;UapaMyyVDgM6hUHERnqVoWq1TiqjomofnBJ+Z+p2urafYxeREgrYXUTn1i3qSek37RaRlH71DRVH&#xA;EjeoZVT/ADT1L807S90lPI9s1xayrINZcQwStDF6sIEsHrSwhp1Vn4Rn4WFSegxVlPnWbzFD5S1e&#xA;Xy2nq6+lrI2lx0VuVwF/dij/AA7t44qi9Bk1qTRbF9cihg1hoUOoRWrM8KzcfjEbMAeNf9s9cVYT&#xA;+UepfmTevrI86JOoikA0717eO3BT61dL8PppHy/crD1r2Pc4q9FxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQmmkDiOIcpCK09vE4qome+hHO&#xA;ZF9MHcqa0riqMRgyhh3xVvFXYq7FXYq7FXYq7FVOW5ghkhjkfi9w5ihG/wAThGkI/wCAjY4q3PPF&#xA;bwSTzNwiiUvI57KoqTt7YqlekebvLusXLWum3q3M6IZGRVcUQEKT8SgdWGKppJNDEAZHVAenIgV+&#xA;/FWzJGE9QsAlK86ilPGuKujlikFY3VwNiVIIr9GKtLPA7lFkVnFaqCCduu2KpTqnnLyxpdwba/1G&#xA;KG4H2ovidl7/ABBA1PpxVB/8rJ8kf9XWP/gJf+aMVTzTtSsNStVurC4S5t2NBJGaio6g+B9sVS1f&#xA;OnlhtT/Ra36m/wDVNv6HF6+qG4la8adffFU7xV2KuxV2KuxVBqf9ytP+KW/4kuKrtV/4583yH6xi&#xA;qpZ/7zp8hiqtirsVdirsVdirsVdiqFvbH6zc2E3Ph9SnafjSvPlBLDxrUU/vq19sVUfMP/HA1P8A&#xA;5hJ/+TbYq8l/JT/lKrr/AJgZP+T0WKvSPM/6aEMg0uWK3vXdfSmncRp6QQ1XkUk35e21a+2Kooi4&#xA;FoZEAjFWMRk+JFkMYCu1APh9Tlv71xVC6IuuNYn9IzQ3V6FkEklqCE4FgY4+RJ5OFrvXb8SqttDr&#xA;bapcrNc2sun8h+joIUYTxkFd5KmihRy5Cn9MVeIaDpF75m8wpZ+uFuLx3kmuJKt0Bd2I7nFWXa/+&#xA;TtzpmkXWoQamt0bWNpXhaH0qogqxDc33A36Yqj/yMkflrMfI8ALdgvap9QVxVjdt/wCTYP8A22ZP&#xA;+ohsVe9Yq7FVK5mEMTOe2KqKQ3MirJ63HkAeIWvXfrXFVS3lYu8TmrxkAn5iuKqKf8dX/ni3/Elx&#xA;Vdqv/HPm+Q/WMVVbP/eZPkMVVsVdirsVdirsVdirsVQ9zexW81pC4YteSmCIrSgYRSTVapG3GI/T&#xA;iqH8w/8AHA1P/mEn/wCTbYq8l/JT/lKrr/mBk/5PRYq9G83+ZH0Wyku/q0t2ElWJbWBpFkasZcuP&#xA;TSRiB37AVPtlmLHxmrphOXCLR0uozLZSSAPP6aPIFg+KSULEsojj2WrNyoNq5ADemV7IHy55jn1P&#xA;ShffU7mxEglCw3gIb92VHqry+P0zy/a8NttzPJDhNXaISsWssfMc82vX2miwvofqFC19Op+rzfEg&#xA;4KT8PJ/UqnHw+jDLHUQbG6BOzVPGPJ2uxeX/ADJb6hcxNJFDzSaNaBwHUoaVpuK9MqZvQPM35t6B&#xA;eaDfWVjDcPcXcLwL6iKiKJFKsxIZjsDttiqF/Iz+91n/AFbf9cmKsdtv/JsH/tsyf9RDYq96xV2K&#xA;oe+hMtuyDqRiqHi1KKONIpI5A6gKaCo2264qq2il5pZypUSEEA9aAU/hiq1P+Or/AM8W/wCJLiq7&#xA;Vf8AjnzfIfrGKqtn/vMnyGKq2KuxV2KuxV2KuxV2Koe5soria0mcsGs5TPEFpQsYpIaNUHbjKfpx&#xA;VdeWsd3Zz2khIjuI3icrQMFdSppWu++Ksd8r/l5ovlvUJL6xmuZJZIjAyztGy8WZWqOKIa1Qd8VZ&#xA;HJbRSPzNVelOSMVJHgeJFcVd9Vg9IRcfgB5ChIIbx5V5V964q2ltChY0LFxRi5Lkjw+Inb2xVYll&#xA;AjKRyITdFZ2ZR8gSRirFta/Kvytqt9JeuJ7WaYl5hbOqqzHqxV1cAn2xVL/+VKeVf+Wq+/5GQ/8A&#xA;VLFWV+XvLOkeX7RrbTYiiueUsjHlI5HQs3t2HTFUmT8s9Bj8wnXhcXX1v6y15wLx+n6jOXIp6fLj&#xA;U/zYqyWXUbWI0dwDiqn+l7L/AH4MVd+l7L/fgxVb+k9PrXmMVXDVrEdHGKoe0vbe41grGwYiBj9H&#xA;NcVROsMF02dj0AH6xiqrYsGtYyOlBiqvirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqnc&#xA;kiFyOtDiqG0tFayR3UF3LFiRufiIxVF+lF/Iv3DFXelF/Iv3DFXelF/Iv3DFXelF/Iv3DFUPLA0c&#xA;3rwopfiVI6VBNeo+WKqMxuruMwPCscbbOeXKo8OgxVU0tStvw7KSo+QNMVRmKuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KtMoZSD0OKoJrGdaiCZo1JrxFCPxxVr6nf8A/LW/3D+mKu+p3/8A&#xA;y1v9w/pirvqd/wD8tb/cP6Yq76nf/wDLW/3D+mKu+p3/APy1v9w/piraWl6D8VyxHyAxVFwxLEgU&#xA;dsVf/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xmpMM:RenditionClass>default</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:8BC7D877974ADE11BCECCFF09938C3CC</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:30267148-672c-4d34-8534-e8cce420f815</xmpMM:InstanceID>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D47F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:21+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T17:01:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BC18AC99CBA78E83</stEvt:instanceID>
+ <stEvt:when>2008-05-19T18:10:15-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T14:26:44-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:08C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:51:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681192B0DFFC927805D7</stEvt:instanceID>
+ <stEvt:when>2008-05-30T21:26:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681192B0DFFC927805D7</stEvt:instanceID>
+ <stEvt:when>2008-05-30T21:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:26:10-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:8BC7D877974ADE11BCECCFF09938C3CC</stEvt:instanceID>
+ <stEvt:when>2009-05-27T04:22:07-04:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:32300939-b1c4-8440-b812-b255b7b0d326</stRef:instanceID>
+ <stRef:documentID>xmp.did:F97F1174072068119098B097FDA39BEF</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ <illustrator:Type>Document</illustrator:Type>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>1024.000000</stDim:w>
+ <stDim:h>768.000000</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=138 G=138 B=138 1</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>138</xmpG:red>
+ <xmpG:green>138</xmpG:green>
+ <xmpG:blue>138</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+endstream endobj 3 0 obj <</Count 1/Kids[155 0 R]/Type/Pages>> endobj 155 0 obj <</ArtBox[0.0 73.0 508.0 701.0]/BleedBox[0.0 0.0 1024.0 768.0]/Contents 156 0 R/Group 157 0 R/LastModified(D:20090730214335-05'00')/MediaBox[0.0 0.0 1024.0 768.0]/Parent 3 0 R/PieceInfo<</Illustrator 158 0 R>>/Resources<</ColorSpace<</DefaultRGB 159 0 R>>/XObject<</Fm0 160 0 R>>>>/Thumb 161 0 R/TrimBox[0.0 0.0 1024.0 768.0]/Type/Page>> endobj 156 0 obj <</Filter/FlateDecode/Length 130>>stream
+H-0 aS' Ƌv,$<=FCb8A-F{(V(\E3>IGIykFS><H朗7)d5?L3`
+endstream endobj 157 0 obj <</CS 162 0 R/I false/K false/S/Transparency>> endobj 161 0 obj <</BitsPerComponent 8/ColorSpace 163 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 79/Length 284/Width 106>>stream
+8;Z\ui<k5l%"j!.(Yn<rGVB89DS9W38A;imV+n")c,d,Cr$jiKcnTe_@#q%%4(.C8
+HN;BSQ0K3*YFS=EP`>nRqnec:hag&4%a](-!f93L:A4D\h\gZ/n@lX;HcTPGfEHCj
+Q%6lr1C^ia9#<W0(GV,aU!d`IC%Y0XNP6><b7'6om5]6K!.0N/D61*)F/P7m\Pl,G
+gpGL0adN#/Z594=1XIk%(grE!EB@RojEgmQOd52KE0$6o\NS1_@3+<#Mt:Yj;B;Fb
+IK^@:(iq@&!<@UeLT(~>
+endstream endobj 163 0 obj [/Indexed/DeviceRGB 255 164 0 R] endobj 164 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream endobj 160 0 obj <</BBox[-103.108 71.3223 103.108 -71.3213]/Length 854/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 165 0 R>>/ExtGState<</GS0 166 0 R>>/Font<</T1_0 154 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream
+BT
+/CS0 cs 0 0 0 scn
+/GS0 gs
+/T1_0 1 Tf
+0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 12 0 0 -12 -103.0967 -61.2773 Tm
+[(T)7(his is an A)12(dobe\256 I)-10(llustr)5(a)4(t)6(or\256 F)26(ile tha)4(t w)4(as)]TJ
+0 -1.2 TD
+[(sa)8(v)10(ed without PDF C)11(on)4(t)6(en)4(t)3(.)]TJ
+0 -1.2 TD
+[(T)71(o P)5(lac)6(e or open this \037le in other)]TJ
+0 -1.2 TD
+[(applica)4(tions)11(, it should be r)10(e)-28(-sa)8(v)10(ed fr)10(om)]TJ
+0 -1.2 TD
+[(A)12(dobe I)-10(llustr)5(a)4(t)6(or with the ")3(C)3(r)10(ea)4(t)6(e PDF)]TJ
+0 -1.2 TD
+[(C)11(ompa)4(tible F)26(ile" option tur)-4(ned on. )41(T)7(his)]TJ
+T*
+[(option is in the I)-10(llustr)5(a)4(t)6(or Na)4(tiv)10(e F)31(or)-4(ma)4(t)]TJ
+0 -1.2 TD
+[(Options dialog bo)14(x, which appears when)]TJ
+0 -1.2 TD
+[(sa)8(ving an A)12(dobe I)-10(llustr)5(a)4(t)6(or \037le using the)]TJ
+0 -1.2 TD
+[(S)-3(a)8(v)10(e A)6(s c)6(ommand)10(.)]TJ
+ET
+
+endstream endobj 154 0 obj <</BaseFont/OUPLQW+MyriadPro-Regular/Encoding 167 0 R/FirstChar 31/FontDescriptor 168 0 R/LastChar 174/Subtype/Type1/Type/Font/Widths[523 212 0 337 0 0 0 0 0 0 0 0 0 207 307 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 0 580 666 0 487 0 0 239 0 0 0 0 658 689 532 0 0 493 497 0 0 0 0 0 0 0 0 0 0 0 0 482 569 448 564 501 292 559 555 234 0 0 236 834 555 549 569 0 327 396 331 551 481 736 463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 419]>> endobj 167 0 obj <</BaseEncoding/WinAnsiEncoding/Differences[31/f_i]/Type/Encoding>> endobj 168 0 obj <</Ascent 952/CapHeight 674/CharSet(/f_i/space/quotedbl/comma/hyphen/period/A/C/D/F/I/N/O/P/S/T/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/x/registered)/Descent -250/Flags 32/FontBBox[-157 -250 1126 952]/FontFamily(Myriad Pro)/FontFile3 169 0 R/FontName/OUPLQW+MyriadPro-Regular/FontStretch/Normal/FontWeight 400/ItalicAngle 0/StemV 88/Type/FontDescriptor/XHeight 484>> endobj 169 0 obj <</Filter/FlateDecode/Length 3130/Subtype/Type1C>>stream
+H|TyPwffz $D#hD[-o!b(/a@e0 E
+D%"gC Ed=
+1M}?l[[{}q|W<U
+ou@1rl!
+٣{g|6cO߫Zche˗;Ӵt9,]tZ:(2C2B#)RGGJlMxlB#S+5JuU,·ّ|:'g'[evv/SidJ6D
+~g040 /1l c!R ?a6F=1o,ʰ dIɄ`@! ! :AN"8+z^00s62VsQjz Mt!:=J@j*V$C(0S9)bϴo\3eԐђ: ZatH&
+ 5XqWAe1>0Ι<ȤRnvݻD
+xmoKh#v܃:y<1E[l!/UXFV #m
+YE~>h ,<r$-(.m T=9}Y>s1gtU&AVn Y @הQ.ۈc*.wHW~^h1C֗.YF:Y-
+L U~OF]^>g/(Irq,> gi^Ck Bc!fvYT pl졉5-ZZΜ/oȿNsWH+cVd&]ߴ,L&!Rj. MZRjt$Hޫ,m_䞮O˹Bx8T>#aE&C!l<9"$<Zhd րh/ON;u:TVsgziٗHnM{<'g S&~M/Z <D]1{[ٝO#G т`u0<+i+l38c3@:&b5̬" ټX
+i{~)$!x63'(&}hg1̅H _r L i ? ٻbd[!eh1Ԕ௤hhgZS5_]O"581xøQoebCihIW+x;6cs-rve},*LTaɡBSN XU s|IlgF.>ޗ\S:.|douALVe [`lh'M87°2RVA
+endstream endobj 166 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 165 0 obj [/ICCBased 170 0 R] endobj 170 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽
+ 
+V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K
+x-
+ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9
+N')].uJr
+ wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4
+n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+endstream endobj 159 0 obj [/ICCBased 171 0 R] endobj 171 0 obj <</Length 3144/N 3>>stream
+
+
+
+'
+=
+T
+j
+
+
+
+
+
+ " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""#
+#8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<'<e<<="=a==> >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNO
+k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4
+uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-
+zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km
+endstream endobj 158 0 obj <</LastModified(D:20090730214335-05'00')/Private 172 0 R>> endobj 172 0 obj <</AIMetaData 173 0 R/AIPrivateData1 174 0 R/AIPrivateData10 175 0 R/AIPrivateData11 176 0 R/AIPrivateData12 177 0 R/AIPrivateData13 178 0 R/AIPrivateData14 179 0 R/AIPrivateData15 180 0 R/AIPrivateData16 181 0 R/AIPrivateData2 182 0 R/AIPrivateData3 183 0 R/AIPrivateData4 184 0 R/AIPrivateData5 185 0 R/AIPrivateData6 186 0 R/AIPrivateData7 187 0 R/AIPrivateData8 188 0 R/AIPrivateData9 189 0 R/ContainerVersion 9/CreatorVersion 14/NumBlock 16/RoundtripVersion 11>> endobj 173 0 obj <</Length 894>>stream
+%!PS-Adobe-3.0
+%%Creator: Adobe Illustrator(R) 11.0
+%%AI8_CreatorVersion: 14.0.0
+%%For: (Administrator) ()
+%%Title: (colorbox.ai)
+%%CreationDate: 7/30/2009 9:43 PM
+%%Canvassize: 16383
+%%BoundingBox: 0 73 508 701
+%%HiResBoundingBox: 0 73 508 701
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 7.0
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Registration])
+%AI3_TemplateBox: 512.5 383.5 512.5 383.5
+%AI3_TileBox: 116 78 908 690
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 14400 14400
+%AI5_RulerUnits: 6
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: 93.25 700 8 1780 1006 18 0 0 45 111 1 0 1 1 1 0 1
+%AI5_OpenViewLayers: 7
+%%PageOrigin:0 0
+%AI7_GridSettings: 100 4 100 4 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%AI12_CMSettings: 00.MS
+%%EndComments
+
+endstream endobj 174 0 obj <</Length 6746>>stream
+%%BoundingBox: 0 73 508 701
+%%HiResBoundingBox: 0 73 508 701
+%AI7_Thumbnail: 104 128 8
+%%BeginData: 6616 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FDA0FFA8A8A8FFA8FFA8A87DA8A8FD5DFF5227FD06FF7D27A8FD5D
+%FF5252FD06FF52277DFD5DFF5252FD06FF7D27A8FD2AFF7D527D527D527D
+%527D52A8FD04FF7D7D527D527D527D527D7DFFFFFFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFFFFFA8FFA8A8A8FF5252FD06FF5227A8FD2AFF522727522752
+%27522752A8FD04FF7D2752275227522752277DFFA852A8A8FF527DA8FF7D
+%52527DFFA852A8CAFFA8525252A85252FD06FF7D27A8FD2AFF5227A8A8FF
+%A8A8A85227A8FD04FF52277DFFA8FFA8FF7D277DA8F82727A85227F87DA8
+%A827F87DFFA82727A8A8A8275252FF5252FD06FF5227A8FD2AFF5252FD06
+%FF7D27A8FD04FF7D27A8FD06FF277DA87D52A8A8A85252A8FF7D52527DFF
+%FF277DA8FFA8525252FF7D52FD06FF7D27A8FD2AFF5252FD06FF7D27A8FD
+%04FF5227A8FD05FF7D277DFFA8A8A8FFA8A8A8FFA8A8A8FF7DFFA8A8A8FF
+%A8A87DA87DFF5252FD06FF5227A8FD2AFF5252FD06FF7D27A8FD04FF7D27
+%A8FD05FFA8277DFFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8
+%FFA85252FD06FF7D27A8FD2AFF5227FFFFFFA8FFFF7DF8A8FD04FF7D277D
+%FFFFFFA8FF7D277DFFA8A8A8FFA8A87DFFA8A87DA87DFFA8A8A8FFA8FF7D
+%7D7DFF5252A8FD05FF52277DFD2AFF527DA8FFA8FFA8FF7D27A8FD04FF7D
+%27A8FFFFA8FFFFA827A8A87D52A8CAA8527DA8FFA87D52A8A8FF527DA8FF
+%A87D7DA8FF5252FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7DF8A8FD04FF
+%7D27A8FFA8FFA8FFA8277DFF7D7D7DFFA87D7DFFA8A8527D7DFFA87D7DFF
+%A8FF527D7DFF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04
+%FF7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFFD04A8CAFFA8FFA8
+%FFFD05A85252FD06FF7D27A8FD2AFF5252FFA8FFA8FFA87D27A8FD04FF52
+%27A8FFA8FFA8FF7D277DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04FF
+%7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA87D52FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7D27A8FD04
+%FF5252A8FFA8FFA8FFA8527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF5227A8FD
+%04FF7D277DA8FFA8FFA87D277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA8FFA85252FD06FF7D27A8FD2AFF52FD0927A8FD04FF52FD09
+%2752FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF5252A8
+%FD05FF52277DFD2AFF7DA87D7D7DA87D7D7DA8A8FD04FFA87DA87D7D7DA8
+%7D7D7DA8FD19FF5252FD06FF7D27A8FD5DFF5252FD06FF5227A8FD5DFF52
+%52FD06FF7D27A8FD5DFF5252A8FFA8FFFFFF5227A8FD5EFFFD09A8FD62FF
+%A8FFA8FDFCFFFDD3FFA87DA87DA87DA8A8FD5AFF52FD05FFA827F827F8F8
+%27FFFFFFA8FFFF7DA8FD53FFF8F82727277DFF52F85252F87DFFA8FD0427
+%F8FD54FFFD05F827FF7DF827F8F87DFF27FD05F8A8FD53FFFD05F827FFFF
+%7D272752FFFF27FD05F8FD54FFF8F827F8F827A8FD07FFF8F8F827F8F8A8
+%FD53FFF8277D522727FD08FF27F8525252F8FD54FFF852277DF827FD08FF
+%F8F852525227A8FD53FFF8275227F827FD08FF27F8275227F8FD54FFFD05
+%F827FD08FFF8F8F827F8F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD
+%05F827FD08FF27FD05F8A8FD53FFF827525252A8FD09FFFD0452F8FD54FF
+%7DFD05FFA8FD0CFFA8A8FD53FFA8FD12FF7DFD54FFF827275227A8FD08FF
+%A852272727F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD05F827FD08
+%FFFD06F8A8FD53FFF8F852F8F827FD08FF27F82752F8F8FD54FFF87DFF7D
+%F827FD08FFF8277DFF52F8A8FD53FF52FFFFFF52F8FD08FF2727FFFFFF52
+%FD54FFF87DA8A8F827A8FD07FFF8277DFF5227A8FD53FFF8F852F8F827FD
+%08FF27F82752F8F8FD54FFFD05F8277D525252275252A8FD05F827A8FD53
+%FFFD05F827FF27F85252F852FF27FD05F8FD54FFF8272727F8A8FF76F87D
+%52F87DFF7D27F827F8F8A8FD53FF7DFD06FFA827F8F8F8FD07FF52FD5CFF
+%A87D7DA8FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFC
+%FFFDFCFFFDFCFFFDFCFFFD80FFA8FD07FFA8FD53FF7DA8FFFFFF7DA8FFFF
+%FF7D7DFFFFFF7DA8FFFFFFA87DFD52FF52A8FFFFA87D7DFFFFFF7D7DFFFF
+%FF7D7DFFFFFF7D7DFD67FFA8FDFCFFFD26FF277DFFFFA82752FFFFFF2752
+%FFFFFF7D7DFFFFFF2752A8FD50FFA8F827FFFFA8F852FFFFFF2727FFFFFF
+%277DFFFFFF5227FD52FFA8FD09FFA8A8A8FD07FF7DA8FDFCFFFDFCFFFDA2
+%FFA8FFA8FD64FFA8FFA8FFA8FD62FFA8FD05FFA8FD66FFA8FD62FFA8FD04
+%FFA8A8FD60FFA8FD05FFA8FD22FFA8FD04FFA8527D7DFFFFFFA8FFA8FFFF
+%FFA8FFFFFFA8FFA8FFFFA8527D7D7D527D7DFFFFFFA87D52A8FD16FFA8FD
+%05FFA8FD21FFA8FD04FFA87D52A8FFFFA9FD0EFFA8527D527D527D527D7D
+%FFFFA8527DA8FD15FFA8FD05FFA8FD22FFA8FD04FFA852527DFFFFFFA87D
+%A8FFA8FF52A8A8FFA87DA8FF527D527D527D527D527DA8FF7D5252A8FD0C
+%FFA8FFA8FFA8FD05FFA8FD05FFA8FD26FFA87D52A8FFFFFFA97DFFFFFFA8
+%A8A8FFA8FF7DFFA87D527DA8FFFFFF7D7D52FFFFA8527DA8FD0BFFA8FD09
+%FFA8FD05FFA8FD27FFA852527DFFFFFFA8FFA8FFCFFFA8FFFFFFA8FFA8FF
+%52527DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FFFFFFA8FD05FFA8FD04
+%FFA8A8FD26FFA87D52A8FD04FFA8FD09FFA8FFFF7D527DFD04FFA87D7DFF
+%FFA8527DA8FD0BFFA8FD05FFA8FD09FFA8FD27FFA852527DFFFFFFA8FFA8
+%FFA8FD05FFA8FFCFFF527D7DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FD
+%09FFA8FD04FFA8A8FD26FFA87D52A8FFFFCFAF53FFA8FFA85AA8FFFFAF53
+%A9FF7D527D7DA8A8A8527D52FFFFA8527DA8FD0DFFA8FFFFFFA8FFFFFFA8
+%FD05FFA8FD22FF7DFD04FFA852527DFFFFFF847EA8FFA8A953A9A8FFA85A
+%A8FFFD07527D527DA8FF7D5252A8FD0CFFA8A8A8FFA8FD05FFA8FD05FFA8
+%FD21FFA8FD04FFA85252A8FD0AFFA8FD06FFA8527D527D527D527D7DFFFF
+%A8527DA8FD15FFA8FD05FFA8FD22FFA8FD05FF7DA8A8FD13FF7DA87DA87D
+%A8A8FFFFFFA8A87DFD17FFA8FD05FFA8FD60FFA8FD05FFA8FD4CFFA8FFA8
+%A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FD04FFA8A8FD60FFA8FD05FF
+%A8FD4CFFA8FD15FFA8FFFFFFA8FFA8FD62FFA8FFA8FFFFFFA8FD4AFFA8FD
+%19FFA8FFA8FD4CFFA8FD68FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF
+%A8A8A8FFA8A8A8FDD4FFFF
+%%EndData
+
+endstream endobj 175 0 obj <</Filter[/FlateDecode]/Length 15093>>stream
+HWiwyoxY$myı;/{ ZvCQS VV|VUW2ciYx$e41;L&zN5,zWUS`uk
+!=NV ( ! 6[KϯTJRrOt~Ta
+Q $\.,BT"TZfNlyMn^4 $~79[uAAɅ\
+YLF^I` 
+hI* Ub(G|=Rfsoz`#jÝU69X&t>4xG}pa:¬l UtN/ܴ?B
+_0/$1I2?:YN"tnM1HD_p3| 6
+iBd-l~')-RJdMbzDHGvV7X-Mbqr?ҫ`9tDZ\7[PrIHC}gٙ!:}6tǐ.MrSQDbp,A\1ob&3lc.=
+^>,IzL(ݘ0<åu?V #TljީY\'΢$eJl%B ^Þp-Lw:gȴ-Ku 7 w+p'v"x%KuЦ߅3l!sΩ5|F;ߔ %fZ9b!vaѾN.
+EUD!`{h9CC1kXwO޻WGyܥc~P l9i:+fK.fEo-ʸv:
+)vK ۦ&5 )#>bUEeUϜdiyl<lS3HFךc]u'S''
+>#]0ܧDjJ?9:l.^>j BMz'i\0{S% j9XPYIv(fcK>mt _6xTL1IH0+~YJ,,,ufJdKCTULu+45fVKL6QmF ?J75a?iѰ}3uwO2 Ng1md'e|e3xvk|x]! p|Bh-~WńDEGxfC188 ]w 0#q8b
+^iŃ~wnu2V?}th59pƧ/ZUBJa2aȧ>m\
+5jbx49lu52S>7+Ϸ>mUlexK߬[ՊL_t8*d6|[.ǥ\S8|_*ꆱ}[4=ы]_֫t=Y^Z *aRQDk:\m$ >
+X;\9. y/b
+kƸMKvUjĺ)9ifg7i{s-?ҹtϭ;mxʚǡzzs0nunY1hՈݴdGJ9d,գcy'6,<.`ZݿtMt9\OgĮ . ; \d'bs`t.Am6fjaw' CAF?dvM3}P>Hө@gN(o{3j4-` 7W"c%e 5%ӧh\|V
+ͥ<2Hy
+fVjm{ k:8jk&8kA5Br~6ef"Pv>1BX<ƹ hE_w<=i^ *j,Ԉ8T$WH4hlA{(V;ES2L{"#iÝ!9|̻jX?#2]l ,[
+k9vM(2rDgd,"#43ӪǾЃax1Vh0LM4 ݅е^q0ZLx~[cq*aatt1@.>BA ܆qq @67ӭxCrAؓt[lH#d,=e9вC胈>Zowh+
+t#1BYPz(;o3
+\;7 (u],gòԳ/݄iJ[Dq'[=W"2lfQejed?m
+"=[nV@KK
+kx*y:cFΝo:wS
+0&^ܖ3FS'HYlHdZ1ŅIJHĈ{9Eg',iAi8{XNRyct<MhxLt ȷh
+I(rG3I5gb܌XD*jb2,PxKkb$KC1@arN 3 a_"ةF
+1Ɖ{b]Jr{ɓ,$TesJhs,3%n,pKQx40Ѓ r"HYl/4 tT𡗳"n7/HXhϔK{-OY9j1&reG"t +g%,D@oa3lm`laI1Ƶ3LxK&3)yKCՐlM=BPb[H\"9]hi\G0jxVqP
+ &0`2еO, G lMB4~b ~.Hp颊
+zmGOY^=o;nܢ,QS4'ϩy0' -@C-""|gZab/KRED%/[[ÿ_D\hK]֬8LjD1~r7=T2omKg"ᒫ†D>Dq 2BE `q#ee@ oͤO 護Twv=KȞagc5ەu?}5uc^;˱qFZIK@+OMn p(FВs鰇2@Ȫb6MZtp1櫵!S"vRE1L6hb ;S%i=>IK4DIA\"/N6pH^
+.E"TRh Un2CXGLuĽB"?6"h Hg9| vd\:Usyxq#dT is& S̒K:ї9s>5(mDKT,ME/={2Uw/}ށgBAv vR+'H&r3WwDUw;PuF}ͧ} 9>61 ?A#`R_iЎ>RQg4HF))4ro`kKNXbrQaz ƣ6Ke`I|>H
+J}1lD6ryVhR$T.x/*[zv|) ^ࣼhnNy<Q<#CX/Ng'իIc8qacU>o4 }mxv_Nٸ#2wZi+{=7.>R| иz8OK3=O+9ƾїL[(<=tJoa8}*wwx7] }b}/}kK:/1ebEhzmo#{c6w0w'(_O7pSAhVomV^wׅAZE$Rʽbp~NÃ,ߗZCi X~ٞY{ہЇfnCSL_=Z[MmlYX&j6qL9,~ gnWn+0jw/%Z<fkM+T_ݳѮ`4Nj:Anlh- \C}]Xm-0
+4 gk<ȅ qWgc@-6F
+X0أh44(owAAX򅻸M{35ڵMOA֗<Uq
+{`qZN/C8՟WkiX~ﶡ2a82m8iFkwTFl
+F OMzgߒcBiV# T((NP}ý$O>/h厊jу *dZV ~>T&O{Xv
+7܇V\9ОIYܸif!G<8lWw w1(
+
+qƱ!'uMKA7qښV]rJy_
+^52Oc-b#dWF
+;gp#gt 1e!xl,֤?[U.=~`5yZϘ<tوsN`py~!,k7/دp)/Y6f%lCN'`S6ayq:I83
+, ᝾< ,W0k8UCVxspe '|1U(Ev:q`ӭ~,ѵ8jih#C 44Vftnh07ceQs3 mh$/gx uuhLЀn2wϸ`6f 6H$nYFch`ZjWAvcѱLF7*$g_V4,Cx:@Odzߌ0gOֽ!Gސx:IC=Ǔ}N;_VL'-~BmI|٘B7Ȍ% ȭΰ4$K/+,)< kƵdș⻀g?VXqx. x^ m2L,α0^#b $W@L4sa*U}h
+3,y`J(`47OBzTzBt#F\G˥XAMkm)#a~B܀(+2ŻbGw&zLTƒHp.ח_9M\'oZ6[9|+ ԁ?##%c
+>%L--SM^]M 5Nz>&LgyU11m 4-]'/Ѫ}#u)~+[nڪ̈́'M? '9W`_x:{oAʷUI Wŧ*e b4|nX=_5[6r=nYtu:Ɂc.F& MhMBSfʕlk$V@P, ]4,fS3HuvhPi a `9RٸzVރ;V@ÏXۗL"Tb"[pU|Ǵ uw'~ZPC73_bpiTVjMƩ. @tq7u.Qz1;Wf5L9^en [r.iQ[+lHN<oJu߆>
+PB?OWmfP]TR,]_V훨$Wco G_#We+n2[٫^6&j\~^(;(%hn[i%HQZfI2jAqa$ -;a|[fGЪ~l RH0Lq;O5vƽ
+?<U0"i+K߼$%(+S $r&P3 P( b
+(FS1ݷn=ZÛuN̍05@Nåʔ52\_xM^znD ίV'ۢNB]Ա)1t/
+endstream endobj 176 0 obj <</Filter[/FlateDecode]/Length 17828>>stream
+HWYW}k!B2 ai@ڡUUBP_jm<{,$_h(EZՋH57d/}p;M
+1 u6 n8F VC<{,YweZclW~;X6@DN}GƘҫ7{KY>(fNxDd_$4v @o\ᣦIZ
+1P1SlM[Cg3l@/z-sX eͅ!3lb1MV{"HQ@KjU@0ZBX"} 2A L"`h!5iIoIךhOgc̟j7mipp{[ơhhl`[͋o ܘYTU.UxA lV~wΰ>+㲲KV>u| ,}ʦ4uɁp6pYٔZ$ : e&
+UI<V6;4KV΅h[Vd4 1*3~<Q͒adO#CGŤJk.{l!1.a6Xzsi5 `Q?9{ȅb&P#4C1%@lSKQ_>QpT25hlU-'8KuezTqù#ݵ$T[
+J@
+ )I.W54LSm
+\nILhZo5&Sl-/Z
+flky7HaTi 'Ssrݏj{Rn>(BMQϐ>u3rzьstF^G.Э%7ktk-7YlskՍiD`]fj]9GD#0`uzZ4\:c ڱl0"~S> װ:
+ mN憞֬ݘ\qi7ܒS(DE(mXA)sk,K<^kpʊ+y&+N1΁<4X|HL}c;̲[-龱ڽA
+S;oɕK^&К FF*3aFk 24tL{_yb tP:.F#WPʵ[THpFO|FA-S=mW('ml%0?^-~୎$ʉ;PrXֵđ ,L@@D{ @t뀺#vwtNOݡS~׹Ƈjt.n}Ntl^mP̧YԢL휹EϬDZQIalZ0QhDFZ裨<uq#L"yqڦ<z=-lo4S+CwWYa
+W˕`4rmPSHR-SxPkhۅJM䭮Nx"PoKB
+F#n( okM5oAM&"
+(,kgZ Qw?g/OHC526GV|$¦tG5U`tC%/~߰]NV!}{-V=sf<b$[ 6b^h5P΁*z
+ihm40FŷvL m
+_㵕aH[qn|4N TdVGEyzLot gM>*'6^ʌ'AX/8yX8ZGG%Id)#gC~sF5aNS7Å࡫E>H#sT0/I ,n.~UpN:Wjͅjܶ%T 5e'Uu]w
+R <o}9DIW:)L)>_[r$zf ǝmM|1#<;|~l4ȏ"={wFVHyK  ʳ,9=
+OH 7ijuf
+w7`(Ph&ލFszc8sUbȌ>.ϽuVC@Ģ/h`^g,- )4kEh?3ÍUiY}L)b޳\9ųK!Z_i- J vJ}U_LҐy$ _BApi~`b/-, (`ѥ˔/"Y>/\)(U'r77BGŘMq7D&mʭiM72Ɏj3d@Q<^pkɓ ~W)2;vPPmPk\n$uls:HO@! a,Rs;䣘p4[(^g.۞@ބU #\LFdj4p6Z[Nqt
+Jd@:\zwW.37MӢYJ.PX\uشRw*KB
+ҘѴϬi' YGP;Ґ7>vA>~z+uRu7zt)*dQ7Hcc< 8Ij4[%Yx)YC
+X(K* <E^k,Ll/7~~6=%<xG&&/æb6~;@$KÆ%2>4g<[ʀ+sp+ۨzI+9 l/빕IVR <UWuY: 6@3{ ewӣ}&T,0E?i4R{E!0rL F $R ALй0Cئkܯ=44*D.=tc MsXy]PlC"(,W+.n|D뗪>B-57x0y6MU&/i0KƳUVIɲ9H{3]X+ p$X
+b?%$tXlCo` (E;r:lY6u[-q rCvsXҀ2lƽxoJ[ӂ
+ЗgnH 7W\&Nk;{ȄG.cH "Vs}||[
+ѳH/Ũ6  f~=Kױ?^hݕYАb=Ann >DͿLQ속kk#$nRB˫jVw{- Ra-g\4;5ܫ y nk8"?9 ^Ыڲ[e[S?!BcH:tlzbǺLLot*gk e3Q[Vgpek∗w4wv}Ӹe=hr%$UL
+~hg) }3[່B4&̎ݰـMF40H"ȌVk
+h? \
+ {"rAG&-R@( Vu;+_P>OtՠmA +-|1`ekX Z/XMn;f; @BͱP8VY.G7l<}'+=$]cevd׬ }5r>ؚX։&7M^1f)b6V͘#铴 xf7+no1*
+(ճiql*?wZ_\{4TrD魅{ȡװ#Šw䟄dK*ukg&@;]MPC"y'itIH-KI-P0&)j&+{=/zfihZo' }:+oƺ6Gow&TУpht6Sx<2`8%&;t[Zkn߷EUAC89A+bS+DbZ̔m}Vl @AW <|{9
+mҤ?g{C.H_J73f{j2<ӫ4L׋ /%*[h]Bܬ} `x(s^ctuӈ
+ i{ \y@ş@,g*l*Ti>w%|hr@Yvntō+諹#o"ʺ&:\+0#1˖;$: gKqL*:zHRJܮAb _vu=@\19>\ G
+6zָȢ~ol*s ǖwdV;ONE:}זs95W4\
+G)~J-a:c{!{Pzo$0ўA$/睡_*Ò}މ+Ʒ3vq#Օ&YYl&
+/by4]Y%l*ӊ' K.PU48Tb(k)|ƟRBq?Mđn5J c±6tI}Tpήp
+]Lg E4b@|g /d&rlzSյ?]C}HOO3qQ%?R*f)ˤ8j64B4cCXx-,"j=hNx9l='V!i(1wy*Kϥ?Rie&Iȶ+t%!S)?9%lC3-5Z
+1o
+Mk45~t.ISWYG%W$Vsa|R*Uù;JH(Ϡ5<E6c{l\14ǟڨn
+3Ca6
+aox$>Jzq'SSυ$/-!f^NK/,}"!>@nlOpxicJLdCO ޸`!
+w 2י\vEKdq>){ ~X͎Ei_V$f` whY{W=q 赲TjKQZz
+ 0(\-ZB; iz& )]oT)& ɟ(zTa^f<+j*dɸ?藱XBo m=g4)=&U͉Cb[a}s*\0a΢#&OpF;y3Yʄ(jCƉpeIK~u֞.yah] ~Tɨb\2G u>)lveZ[6tiGc&%Cg<dKƄ$;9pnwN
+w&F^]0}L诼OTE2ncu Qg@.
+73dxK&~8YifՖ6zݸYr6Dʉΐ)YyLsԖK2tGdV87F h?;:IutnC*\[ אjQ`58mɍ#=YwF}sqA]ŰUdnDmi3\g5l|&0N-zbq^
+n@&~R>!}"xiLs؜¥3v8]Q>*߫ey>X@l (yL`2 oh7{%ѪÆ@#gP7^4ڱD{uDEN{9-'4x<iPN(1-8cܹ*Bͩa~vUC9!y$i.:wsjsBFZR^HaN桴ɉ;OQIcZz#-פ
+[_ȆTչoܴ{t0/MfU-y
+oȲ3.vID%f%PC AB z' \] d(o_KM`͌W0A E~ZW0A+x!JQB Ul@S*~Չl.W:j0Ea~_@
+WBZaӷEOw)+ a{Z~aJ[| qu8kݧ Bkg2*[ULbE }}n#+Tҝs5q+Y7X7{ò'=Ncm*@?To7dY|ڣR,.>Jog\Ao(zĽɲ_@w< 74+\]V lk3XFzA1Fߥ[)!ejS
+uk@3v(RwpX -qC F/lDYvoB9W ʚeD]@EqDvQlm7]#ohő̝teVsN^qj`ƕc9ߛ9A_A3]ʲ;$kq<_9l\6ku.?7VCfcKV=z |jw%ѣW7IhMf\;-Ok?,#݇d~$>.? -)egQ@q,>;т0ghq{lDvp@TDTD
+QqU!<Sr3ֆq ũJT]'$p1\*_EkcH`EHI7b8ː=#lvZa H.b8C
+@v0dp:-]ce%+3IPM a lVGtCTTƣ3<KX5{ pA
+z
+[tm9\Rf6 Aȍ3#jY)FK͞r5u
+O"U2[4k!Po|5e`SLr;ǔ֮8(,IJ=~[g-M[li!bDn98>,lk@b L6Oٸ1W<(BƢ: 6K$e-^=$d6Jsz9Su>NQLZ.aF'.l[?v{zt]Nt#n˹wMg3V\/^^K1bEvėŮJu7T{oڕF}6{yhr%/!
+ѝSJ⏹Z.MՍ68C\U?R}8{:Ta=V0 H+3*b\hq{')CfIՏC6 [ĭXRa`-"MDzK7<N9,2"}@b֒inr(D Atx8cc.BY
+af6R].L#"%ubihN,*lc|X侂
+Kva BO V߮Gԉ|U Χń7Ň! ?lnvuf# #yIG*
+;{DQ a@:P_ Z*m5Q_VLt_Km
+^))u|nÓ:u]cB j"/Ru\)FȪbj%ԭ2:pMM>ԷdN| /kX=.f//a4ӝz4M,ܞ'PHB~°T\
+A`luѭ9e^*A*bbK좉=]1vrxٙж?8$M<SȲ
+2ycRȪ1P̍MR O
+[Dώ6cغx3--_qZ~;o9]Jc,c+:J49Y>V0tϱx8J479C|IJY>V0ӌsl%Cg[|D m,c+19G|m屵BK$nzVD]]>
+]ˁY0.
+jŁǵMo!k&W
+Xx½Vw*/-:1&q"3)JZn0?vcZPcz`.8zj ՄhͱW @$]EDlE5mZR7JߚN~|c-K0F3/|1TپDRF;;Rbn8Ö!NO٫I5>TlQ2>ܑHreAN䩿bM &3`WiZxmG,~59p%]uzYKgr2$ELh@?)F!:@/rEgN+ԣ<C>j8ttCPNLOd[qaW9O֚ 6遤,Ӷ0(P8˶%(u5Sse5kt;ּ<çyy' G
+Ne;=d/OY=w0HTlM:!سl1~AnFΤfTfU>`jJ* Qm'c2*NJ,s'|YCַ'A ,adE(c//CuT7MA1FH&YHn{  S\PQ
+0|
+[rx /N*\&oVLJ2c]ہdfYZ,`V*ALb3?,1SԛxyZ
+PlĊ"aĶ
+.9qZÜHa$n@ S$}t 9Ċ.}؛0Pinl)/E%)"wY)@ߜy=uM~ix5yG ܶi}cA )MU[U^/mN΃.{u=^7[״S=~+$cZ˘ /ap)mxiڻux :D6?M92kcNDߡ@w#
+I`
+2h7}uB077|l5ckMMqѾ_[{}lÛM$ooh߉qi}a.LL\mĂy{X`GAb ^H 
+xj˴^a??tLoijWx/[|.:q@u?TrA3º
+ݎ`[ |g23s 0յ:Co'B3OCCihMf|hgέ/\-ioIKK
+iTN~BڱSzW LMj<^'E>B cPeSrN ֢pJ>PK.D=4Z\Bϊ%VrklБmgK-0ZL K6)7W H4[hH{ESdprM+$zKc8N[U6\DiaNɺfW4+ㅋW*b
+hH~D8d#1JHxUQ%q( 3bF5?5_FVFA/ﰇȭ?Qv ]ʯ޺h4A>/QfK 0NJ_"7!o1*חZ%й@9[U΋q< .p_lS?
+- _О޺RHAP[Z6ڍZEv$,"ї>kC}O;VMe+2Q֥I=5ʖT,kgp((L0Sz%Axv*/]ak%Ë:>H "3pT:Z2Thz8/z+f󻶲z{?G(ascds[R䗹7rh,xBM$o4P*eyg6g)G&
+@oj',څ>]*
+ 1ֱSBmDIƎV~#CMr
+MrPvh`*_2P)W^ cUS'=GLZ&<g[tPS,B6ϢIhSp9-z.0ҹԓ_rNSΙKsO)IAK"`5褿/@tBE3 e<Vz} Z$V&]*vMUǨ+iҍ^!fc,.Ƿxɀ)JeMZI2⦀z3qw|$rk Ҕmpo.7ABf1ړys{8d O=]D:*塩M ,Uj>1CuSE-ҋ5EPqdhv̇NSn5ZZJa
+w_ b/pLb?tUg 8EBgXd7
+?7[8.gǁ΀YF;=sߐ4M7e;}
+)eixG$AgaM<2w- )e(2
+endstream endobj 177 0 obj <</Filter[/FlateDecode]/Length 8499>>stream
+HW]o\}2Ph$(lQE!(:XI #{n"Q{3ΙkT;aev*L:(T90o>?>zq//>^&;8>/x2wY)NPdLQ|z+V*cwl>m
+!+P?-~_C.S0cV CLL:R$bg?_֯6Ji 6 * !L^88n⠔\7D& ~|=aAI<O@ݝa-͈i ,B8CVlVz:%=kЍ 
+r'=ka!B:tq
+70 + TPYdCJ3oHr_GtA7sgڦlueiHP5}r5{*fT,X|R\+g&)/>_>m^_BR%T1h?-DH=9 r4h] >ajd—",
+ ڀ<) ˁ# ^"^B+~{}D9xwÿd߉ӫOF[ zć]! sn'ĄZ
+ԣjA^M}/Z|P+Yivo*.+t62*#^P|vs)3)L):.ZFmk
+rI4aٖHx2e;?"è*b1lU( =-¨Hznώn5"øQi*m
+i" bة! (rl݅U OĠ+لeˠъAŀ@'1Ri0Ũ[h5JÁ`G%w855R1I
+y*퐧\8lEXHo7N)WsO,5$0ZV8 `G/5.B= VH *b8S-5>}i J7
+GyL3"]S qbeM3x?E&>Hl2tE ΑA xF>H0]))c*+Ç(v-3N.! Iux>_破Hhqu*Y=tFnh8O.ǚ]5RUZƨ~
+^g\S0V= BvzV,RW
+7yRd6T$0jB%(J=0^ iaBo菸~e%h?~o*4FY;=Xd"CdB+Ba Xăv{gt:y%fxT&E'p&E'VpF w#y^'܃e'}$ߵ{`FTFz }C7 T2.oTvMR{R:e$0$e
+hF0Pt6 P\SFQ`Wa莦 iWC܍SPQ: TC0pcb񏑨@5Α蝛Ǧ<
+ Zi
+We PoB Ov5恁l<0#`L@?9umdLj$s u[86]^XIbyP 1cl-z =F3trHHq4,l_UMVϱmEQQڀ$嚋g[D`M*wQp:t\ `r
+d{gHL0 ZYXP]Mw>ǥk|ý_ `7 r<8υ2BT[S|ڢ
+tJ
+ƘVZ?ƤiѴ8( >g}3^3|^{sOe, %>!C0#&4:
+ְ[gB>BD*D{DxF!c}5e5 YI𴃄AA  IT}@$.4DYK'`M\V79; !>ic\<P=> |8TY# [+;8"m8ܠ+H,}?R[3
+CmMLM4-XF*㊣Y+Sjz+S
+~GRJ[vI¨-;
+;
+Kk*+Ŷ8Hl_mZk)7FRl,դؘ^gWjJcݘTI*M [ ^LJM2fEm77܂,ٓO-d[#T$ KMn)P5'[ʩn{άvvo/t/(4^(ivx=[ϤXmm۞bQ7o7-0Ro*Eԥ@pP=HWbZjqPf`@F$䬋HES iik0E*QHwe
+u,38DP'`-o:EìI6%lz.O'`6'='`]W90ˀ1?Q !<ˡq2%B`
+CB5A Bp**DggZ:L9 <o`L@'RP91lI4Äq
+–qʃ&<
+EZ/?V;?=
+nɲ}rh 9SۼP<RjDlܞ曋Uq)Y5%!%fdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\JVťdU\n&2D< YtdX)Y7#!y2ߤY/F̔X>sɭY>?vqG[h$ wvv.CgV Vwuu6NGgWϢ%{A'UXؽh=|pphhh'
+q;}O{x:NpwYN^Ѝ|r2 d@I; wSTMlZITESEXLU^,_RG(6B1]vzԶ x79I:S
+bTs“|$ '#e"<⮤+ȓ ҫ<9>H7 z.93KI>AWIuR>7CW6
+TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT<,rAJ<,㨳yS='>Q'<ȃUt騂=13Ά)c-O9C8N8 ƚC0zRFQORTC('LF}`[,mV]Z--TP]`57Y::.8
+ .Gg\k(ӛv'F4DpO7goo6:yc]S# #)QL Mu UzeU s3Si?hP& ;01=հ0?=!F[:ckٕյ k+kXwgKAHZ=|M ;[׳BBukVWxdjae^.wKE.{cseaj$jjԫk662:{{?"߿83aۨꂣESKk{wi84rֆr8A><'j\O|F8Ph ֝J;#=iw#C厨8A><'F5݃{m-ͦTY\ڽQZ]mTZ]ᑩ{-͕18zͭ흛v6g'4A;]Y][а6uw$GhrV: }Ua,`anvfj2-$;tƺvG0FFSV!!:ڛD&ss G h$ۛ&4 8dtX<*&sADjlYv@hk4Ru&Cu
+t'c:ѱΊýL$$a P^_$I"J$СHM
+E{u>&6B*C*'I߲LQ3%3m`
+endstream endobj 178 0 obj <</Filter[/FlateDecode]/Length 15049>>stream
+H}lU6%,_4-l;-]v]:0ۊe)w]e]bd321,3G @p5? K`@wYy11F7#?RcMYaXgN T…4\Q0ZS+QӄBIQTbP[B$LZ#9BpMh%)JDIx1!AU
+Tx~\hQb)} 1# $(@^$?0m-51zU
+dXKdM\H-XNhxc5%e#B7TU~vcDp.MjBkZB ^X6*s"k5"Hj
+if) RÔ+(SnwuR
+)& ,RHδ[eQ/AWI8D_$`!$RL,%  v@"ʦ4BZxqj,,ʆ愩.Hqv\HN;'WmӪI$X 1ct7ʜtUlRB
+`X6+$$XC@>| @D0* x`vw c䴡mViPmmoSE/x~<܆Lâ0a)pwAs)bWI\U}
+X][]kwU޵ʻgy1wfr|nrt}fv9r }xچ!96095ѝVNl^WAo6pH( zƨusˆ??IOB8i:(zw!9ooj[pşn6zb|9~v t{yc?|AHϽ/}7kM~z?|ءݷu:\ 8W޺'Ë>ԫι~|(qz~?ͬ_x]ϟ=w'㳋(+:~3utuY0 N6Co}ǗM{5kp8 ^kvjz+Zɐf<*繱X״XrΩkxrzF:4ʼnI}SvMNok-SxՐCVl=pam1[' Nw0u=Be&PqpbTB}UTC^M@3FEƲ>/IJeQ6/
+ p F
+Tq&TNQ {6\N$q&^0bIG]+=W<nj"k]',R`cՎ<[m}k4]
+'VAYhw!{.C=lTcjF|`H CeHf({?EBrfI0Vb0Y6;OcKsmf~ٞV˻(u`vAnIE[e]uvV*ZE\kq"clE\۱r<+ OCrl`rj;ݭ69>;71 l/G
+_V%,EPa7`] ݗIOB8i:(zw!)WGk:֮ͧ\2F+G%k:~ԉot3<ԯ~KCG~|[yt߭78y{ޟ~y=@J~>xO~c3N ˻g 7kG7_{KۮZLoЏG]^Y~{;kHWܵs}pZlz|_| VMoEsp&o&Dϫ
+w)`A\X޶LH3?{R|i +m!dNgtҴ ]QQWJպЅ`]hbAWR7<s9)
+.$繯e,D6~ P%;G7G/Σ[O_ia|q֥y6| afpAcU=|= ߮AޟΞ3PEK/FlGN\ ֮>zj{g8CV̝tu/AP~8;Az !B\tǝR@b 8RDB HIYJ 8feѺ,rǍLm-q,4IDwp4@GCEߨmHߨD Y јNCd`~`G?%y>:E5Ƀ@p5ag;у۰q>b=LhApt(YtH=E=r=b DIT\^qq# =B&9 CDVtBj{U[j##:}W* ?/sYN)^!BTWDeQsT0&˲&c:&_aLwc?N$o«֛RXd6I/";a`C&5cD~>D~kɹ#հˆ+ܷ޵#+q18J^97#Kϫ{T
+ qhd`H` +a?ԮTFC", GjeP㯗8@rHCb/yA73ZzY-U):ŧ=j]kq"nV\
+gPwx JC*jc Hr&IP)9gH)8ns|2ۖшxՅJMjJv^%/iu-׾E@6G!c[tg{w85ȿMjxyD?(0mhtdCCkC"zN4rdֲ!*hbN$$HE9x\D+ -IM` 8W2^"H9Vʤ
+}
+ks badC=_cэ*$-(+ %aarA)1*&2V *3+` ! L8lL! ډ7&iF@oB}ȵꉀ=ZZGsmۄclQ5Y?($.c:b4=׬N<ƿ8U*L
+(JLSR}<J<~U
+"d`3 C|3pp?Eb[ rGiq0oO֘R@Ȫ!hidtA0Q+?#!TŒ^Vމx8W䙦,k, k4je,e+ҟM25 z@^$@b\cT2d*zFU*vn"Jwí54Q' I?އFr}6EI&[5_i_/+)";q"iqRJ %/KA7E PBjjMycjiOm:nWlyiFYƺRb]ф*sHr,IbKP)9gH)H{+̱UW)/[](ޤ>a.XBF]ׂpˋ"f<A-!c[tɻ xPy. "J nVS~E IAXȋ$rD&PD\gUy^0kk)ۼ';ITTj[VYީ
+dY{UC>աZ fb<΃I%/k0Si6(:̙803؛@iPR[[}IK|m'SX_}q}]1a3|Zk{o]GBݳzd*raCv"1? {$sFӴб&S"+^<@kt yR 7]NYGQ0-dxH]q-r?!~5v1G^<ƻK_S%ST]"p1β
+ҙ>s,%8R\ĻjL)){z(kLWBZJ/ai%"6` Io4-4RkkacS=D1ZN!KBw `QW7vqfoi+Zϴ5v}dڬ41t(FJ?4+\7lXax_9P"ȾgzHgMBÚLORJǤٗ3/9ImBB:JAh)g[@8! ,DG"D%0P2
+;v[B$n{wQ诫^~],.ٶ١[lssg@5יYvYl~Ə<;~_DsOg+~>ڙzltv=bn/G`#{)@m{2
+=
+ZBT/V:熴ibjP(=+KХ2K汪r5f@3:hL f k%JKI'H"!h>EH]\%ف!)?x 8
+Pts'5"@A6~lh.PZF‰ʒOH좇C\~#<Q$<I0YE6QMai
+NL'ԀRRKg)pJ גOtiSyKMKUƊ-UT?鲛~EZ%'ӕ^uDo}r1,ϱH+p2t(k
+D.k0A
+frXyEK0@}Km<O'*o&@`(qngϛKRJ޵n^sj->l7p3S_kYxv[%en ;z\h_x 7_|M/\>^zv\PQ'O8|Voٻ޳z㖍kzoQU/۷Z7nQB ̎3%}Sjd bdj733ǐtv{{8t,c&΁̙xB͚nQMMOe
+l0kF>OЀTfGj
+`?P8A7T.
+49
+6L9?@1]0!PdPUD
+@ Eri'T,Be)A/DNu
+ms09~Ѓ dRAA^۵R+ X!
+0t5i T5i%Y:J*k ʹ{R\ tZ]6FYGW@GkTq%dخE).xJ;Wd-/ dᅤ@++,pEhM< eW<R}.6А*Bْױ%lQ&g_"HBx-4w~Nm3^1Bebarf,&Y K/ |/r[thdv¸iTB\[A([F`5s[ r-z6zg9X"@JrBG3BA әOK`~ [{\]>UoTA@[tH`DXC1@\(Je3aBisY@W+GaJZ@޴60H{ 9^߭XW2jDSאMazc88#RWQul0>CZǖD8SrdU5$iMP!!DU
+T5(%%R(ВmEDH R*
+UN}=EPIX$aG`"D9#yh*1Pź1 $N
+ԥ; b;+FW^r67v$͉^"3RP&n8P*}UJ_UWU76S,S̼"N5ڀ9<HJzd\&Mra1x [a %lz#*mo:PՏ K-uҐ|9ⅾbPeJ7CW-E{{`]ܘȠ#?~r06.g~v~e6>W7N艝[]r}?}_Z<vpwWƩ#3'5}~}t_7L$|׽?^Fƻ[|勯thXҼ3};m1<ßyrsv%o[ԃ˾ӻ+jJ-0NJ%270q7d5@zSS^C0E{Kf' 1Y.&xgq6moWQ I69W;jÀ7<B[>O]D?:s\sox
+9TiJ]ƹ "$0qi‚(4`0y+c\^ǒ!
+ e7ce
+
+T`+v[cM{d7ʓ? א-iጟN@PnTX8י+&r^_^V'SH_p*έ1.O!H<S
+_[fQVpذ0WO<OjԖw:#ڈ`U7g=J[D#mdpbr[,Gm"c^De6?&ym},1]uĦ@ӛfOe
+10X E1c,݂B"YUSr8v4` ώLpmzbrLn"F B1$GATUR.Ψ*6Gd!B֙٘IJ2*C˜)UL\؆k6;*MDV|2 [*OUySUSum3X8U{-Tá xÃ.<M੮7.NZU{aXڔ-f
+3o_gׯ.nں}?.·k]1G~=pzk载˿=u*Zx٧wԧ2V.m7l|> .[ݳԓY
+ 8 &^ڍFF<z #k8^sԤ_,,gcIwL,Yo4[Ub/ATF 111j\큸G7hI&?G
+<X ]y6#ڊ̛撟vCPDT^CG,+ PCلB' 8fʤo1@j)%wGYБӸ8RkD)$;Ŕ Bp&bmq?xB!I
+0BoZmo:PՑZ#Җ:ivk-^H]~+mmWBW6ԭZw .AE~\|m\ԲF_\<twFt]:z6 =t܅]zѽ(/;_.ƪ
+3 BJZတ  2w Jj ;zaa(CVDIM bRҧR+L4>!1JM+93M%Է397׷{{/W~倾k;~uNu 7|!=tԓ/?O}l4O~~酧6fO;̓]mCgz⋼iqw7'g{rf:1z{W@snÇ4aZ|P#ˋ}E`whxhlj:,݉M{tdxڿ" f? , |;yˊхPDo{IOOEo_ߖNWvON",T Z4N:)ª
+iJIBLtiFzBzGf* "tעDFu2'maY"빀3T0ZxQ&(MF:EmU]. fbCL,VUY1TՊ؍W:0 4:RQF;Cں똢SRӁ*GZ_z@eKSzh;InXgbF7;.$c!xJml"dA^ c`iϬUQ@ฎ-`d)p͑T,grAp
+2GӐ1F$'
+"[x¼ .!CECHc=yţYD2P11f}B@oPV~ J ˣ wq)] 3
+o_1l{/|0jH\56ʇJ:*w{/&hS^\tLi|FƈHlRUmkNE1,T 
+U]-V
+=Vp?}VR6<(8K
+ ㋂"NQ&L_k
+}#=J^¤Bf?
+xt" VD
+V]=8cQ7l:H\dj?mSy6O)<elGV 25Lw''FNs!|Çq
+矰LO\~?^u\_^ݕOuXs.<3/<S7n>~v3vFw`M?2zzБ}[ gwhh;NbSĖ%>QEKO"L.46|HؼE/TӸw;qhlL<465pxā&=:<G TXrvY eB7SAzָihd47Biws5g/:B2LJ2 }*hJ3 yP M0 ,;kI8i@ᕰDiOe4y 4T~FL YI|<j\^bb.&?T"fb)Ћ)RӃ ;="ü^~LQC\( WY+Q0"?!`#?J4?\Glbg1y(iJָ
+ 6U))B<@'$N%-fOCL)(4nPO'z:Ѯ$?[{.g~( k4 #[2U2Ф#P^kK`3Q|EQ n1 B /B;`2+ϖG-h[cǀ7eS>lǢԋf.CsuMgFvxLVynrܘ?IbHӕ1R^BZOrk^`1Q~Cɡef[% .LQ95?'0gۛ~k[a7xpߕ![t`nQU1nT$hPU:CXUJJh elv(ܵm˦i0iƅiMň?Na {1G=PlRnvsSfx>W4iW?!'83~͟j׭}rvyZ`N뀆QPۅ1mE ⫈LJέBv?R꥚+΋ LL Ą%IeYrP&1玥QJ;悻s fs8RnsKh,J+cZ&rS.((
+_Χ}[a/' CtUP[Ts?hE1<q]EJtyꮱI3;Xw]#gx ' 㵂/kԄN
+8+ktq5.BKMt@2 +a+F8?FA/dC
+endstream endobj 179 0 obj <</Filter[/FlateDecode]/Length 5613>>stream
+H}LSWǧP--خ7JyQ*DEHS+/JZP|e6<FM %12q$0$24D9T){>M{{s%=rӤc--w[]&co֝ y}v9 hpMx9P1!|h‹JNR-.%4:lfLPb2JG,|尘 Qh}1
+ 2ml<0tstl||l垶ƣ3"չ`1(4 Q&eg;/ ޙ|`rγVsvRCfU`ZRMڮ ޽?GS];~xWF&6ZEg b3rˎ5u^y'O>yxMr3bÂlcq`:}~yݙ+SO=l3uz]&`#*O/+4ZN6w M>z/|p_wI13>RAK?2+[z?x<_x>՞Jݪеpi]KuJqtƵ;wQخ=\|s 7R\|#zϵ+XN-i*3nEq^c=;Ͷ"+dH5(Jƶ/y4@^s`q &>GPDk0Zg
+y&ZU*J XЯV`2zh*b1j9Xw*GSڛSkoUj] 6{Q(Duu3M\;c>>S9jv|Evʰ=ılJ+-*TG8/Z!8bĔˉTÜœadAǬU>@8&* f*aQ9UҊXa&Z:"롢BSf}Mg T`:e}vmo$5gĮ!dzEq㔢
+ @|VS`*S(L;-Y|
+HZOHLFuZ"R pY `sK$`A(Mt}!+k2dS7idABA̷ P/XOٚ'hg6wf>1oON֔xu$؏B(W,&w
+K+CnY+K M;I(Ie/%)v+<aɏ>n8F>d퇇*Kޖ+
+8 9I,%M[d9RZ6Z5iCKެmD?E,LT7Xl[l;~֯: .\t }U秎ۊ6d98.~r㛋e^e8Ip8y?F}lxck~ƭ[ŹEnݺO?\jm<n1e'A>ld6r.E2ihدݽwoMܻw_~1Ps`O.B$#w!
+h C'&cjۘɉCbܖџˤQ"pPh(oD{PylIHBB ! " IH@D@+>`1< D gŢNQ^@}LvtsSuڇکS[p-=yꑍ/3a|g7gw>u[w{~OSwm%-!B.B%P3gWpgsQ@o{t޸zӽW+xaJMbyQֶcwO_?M<Omm\dJ(=-DmʞW]_z >%>o/}v`;uMJ ɝ"%Sl]/7
+1:Kmo;v}ڶ[Z?W!v좚U[8{77nQ n|sZ7)N q="( Sf-mjss\F͵uvsgܴlCR"@;7BK1W79qƵ M]G[۫9)q*9J  1Tۛ6(>w&{uI~Ax=#&جUZSfAImM-;wCٞݻv4oZVURiҪ`xuNT'gViomhZVSVG*CD2Ls -XXc]bo(j-,\007݄1xBL&/
+UO0d2/]`QŲt~yVANFa:4HS$'
+AJU4nHNΝO!yy3r2R xJ$p ϩtL&C#4x1)yb$JIdk5@J5g9<aLG51ZJjcc4pL. 8l0I& ABTPbaaaʅbJEL*Q51'4 T*a3_nOMpQ/
+l*,NX\VYm*/-(ͭ\YhUl-[[1)>1\;1%\o8<2y^YUmu-n0YY;)tF,Ocz&F?F,Xdc8PUE$$,>NImzZyFlU_+==xO
+`${ I^H[z/zW6cƨC3 32!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<!<c5 m4' _+Ƅk" 1au7& (zޒ|!=%_BJOіw=W
+UGUm̢z%33h qDG__2yDHc0,b2DBD
+F8\GrE$Fe0
+ay~@$)5qRFN~sQyNaATS|*$PC~ňR 6*b)3f[PVMmJK켩 ڈ@!fx#J8b|!5ֶ|uڵo[4V,bd)'
+
+6αlشem[7۸<#=1&<XC<9JKIs+~wG{}ql޸fieɺ(LY dQkf/iܴcNvt<~ྏ6U̙<a|# %!j]Zuookюp҅{B$|R=,&?04Ɣ?O[a.^|û7.Qa$!##[<R*vq }՛wݻ{c{/ؘgg*- B'SPriۏ~ϟ=w+gv;ˊruOTN5,w}{ͻwo_= 35D ymKIKpɫw?Փl]2>'R[(tb򛦮y>}w/_=sŴXokEq$]WԵ+lj^}_?zt3Z|l%A- g_6k37_?}z}kg')IpҷK(阽n[O~_?}zu;Jlt"YY?cPmd]X?4N_]]s8ٻ/?~Ǘwn?~ngiH$V]Is C@@WY XuF .5kTר
+endstream endobj 180 0 obj <</Filter[/FlateDecode]/Length 9111>>stream
+HW{PT^ d/{qRvUZ`Ԛh>ҚLI1mG:m:N3hX1>ZGi3;.`Bf2pav}sn]p?~kN?cC{]yaȰC| !CEƥ)(,D QA :vʊ:uAmرOTWD<~ܣ?n۰P]fTדP*j}G;޺ѣwn]<67AZPYS׿fΣ^_wM)J BSf׶߽ѹn޾7载k]X6FbS2Kk|>|pϞ<mk[jJ'ә
+ K,]v;ڽ{כ;^yi˼J¹TJI@)!F'Ț L-nl{7m޲eK/]T_=%4gcƖVYMjJkv9ǧddSf~vBϒ66~^PU6PeCV&W0[t|J<V*tyyT>S2s3RmafW3`2¤\3f͘6u9Y) 1!Wn%gs/J(`0>+cDr|tdxp+ٰdTL|RڨYsrrgG$'m*Ȃa3F52-%)>
+#R)!pHB1ח@@~57xeghLwv[,-Yׂmev[RΥvCűnԿj7X^iaIA)iY&LY,c
+Kͳ
+EE+&P2bHG0\+0nd*'g8[ fwJj"M"Pv&ZU
+9"fxX+ı,E5)
+# txQ ʱH,V/ bDb eQeq4D9PY_T󻉲yJbx C"-qhN.萛28 dAE?<K4JXӰ
+i
+!IL:X2P̫#X#6kzeT\(!DD,=s%F2
+Z:N4{,%Y$NZ@ڣ%PYq&3&rȜyӈaS1t 3yUpLK]Fs0[1TEh,KHMhh Yjg:X+eʁș@EILnQƔCJ~<%10kr꿎K@]-"0 2[kx=*KW
+qnQr9ZܞoE&>ҿ[p =Ih/Ȗ@l@Fot, b "Dő<!h'T ߌ Ǎ:U('WJg$r:];wpFr;i%Z2<GcRbUh+3*M8T̐B&]ɱA`9!HoY0˒Lp-yZ`6%YQ L26)A, ae ' kQ4dEނ>Eʤ0)S +SCpWUs zl2xAUaeL_
+Ewp05b"Ւ#Q&P~2!1% "8ɞ+\9?$3If#:+)Vf҇rMIVEu 6&LjX#[aT@yT N"샀)2W!җG] j`aW
+Ӓ pmSme:J+mCGYB |BsZj񥶡Tp!C涵v-ZGs3ƼotT(rڶUP4%>$TGI3j騭P8
+:3%>cf_oQ]"Qx
+)52AHs>kNR7ÏZvZ
+oDb~Е'
+Rn.M ћz1K4yVKg$A2-ZÇb RuCMfr*oD_(LNTSNU81:=d_S *~fn(¶]eUND,T+;kd2 *|OO'AjL_aG{`eQ,FDѰ ADBҪR
+?TPIiь|TMx19âԠj-ԡo@P!ʹة xAE>H
+{zEPw'4Pr! N'K*6:|vKhjJj!B߾TUT)^Q,+*]8sG/N*mKT 'ZL\ -Ĺ
+j&0U-p1$Jyn伦b9U9!PiV!X 6`z
+)AuOSԯ>!TH[9 5Ux%iDa*zbīz#nzD:߽[O\(ɋsPXE"aOmg#"fxqވZh0%W1ތݫU0|S[*SS" ?W}ܜnLQ5cG iV5 /
+D~#Ɣ`NI(2r 1Hd|jPȘ0Na} VjHMMhP,kw8Em>Y}irRd>y ,<E,QE5 )5<Tj5FtංƸePx\ӾPw'$
+|-4XNgsmm]CE^}Z|*[+-(V:Z+ZA5B]rZּz[>??PYp!mў:§n aY'̇~0ðͰ,C`%ߧZ1u긧0~ /jEFlN<yRx" 4v0: ,ui5'|JXXfOٰSFΤ
+3]JK7,čm3Bp8 ߽"]@p8>l.:Xl븳nJp8,>a Y*6pڸmBq>9w' $tKcP8qpXkUα`Uq 3:RaF
+u:2b ]6b)\B̏'/F]B%kZeOjc=oN| U9tV
+{As4Y>J=G' S]q4
+~bti S6Mjv<A,'IxPQ2,<;?ɢodiv 9ԡƇczko$_Hh;E͑H1{zԥRߣ5r1 xrΗOz-n[) 2\]ff6qx[K1l>/ۧq$Z=[66C ̆#N>yzطn)JS ct^׃%ӭ?{|vZ`<-koiE6>6s7?^]_u4gi<O˿>~9=/o^_]? z@2O}^~1Ă`p9>~06Hq?2~y/t{xӈw^^~8gzto>?_;zG<1!E=zmc νu4@͐%VvH%i=CrK[~$2 ÙٳsVz< 6 &߾t#Қ.ŨĂsIm;v\Sv%f3]h{sǴ ~QqD rwrTbA$ kUoO7ըHoZ;O4_VQyxAh~j>n6^9GO*SEªLjզӕ_{!B
+;w4,CG7֣TRuvjLRQx08m?ޭv^tExuR㳐:ҝ\yUgeTQ%cØqR]vQYFeeTQYF=֫YFQ VGO)tB5niUs"[ӟ{ĺXٳyb'&˼.˻ϑ1no@&뻬Hd}]wY=W}_?i)@H7맬~5I{+)Ù~)맬~<OhbT|T?'OjoLet ;Zs}fuucJ:;먬:(VlI"J*'uTPRb/%WRiγ:ڝ֫m^nZ*kϒܱr;a]RYJTRYJe)L VbbZRH[7V
+ /i,3pVJh)
+@ėJ53 ʌ76P5ѫ8E "h=y\$=}:ff\ĠQ S@D#42<&h_kZq
+E
+$3Mh+#V,Xcz~F'"5}xzzА{񖐨Cs(Cs@\ Ӗ0 Z(*Yl9]%:m9oj&hKmD-ʹ Qa.;votxN!̀z$M;?z)y;4%'vҔoGҶL!1*߼&@ <p>~8C;C|֎a1AB\3sto SL- F'8zGU)7Y$%zݜLJш5]N,JS~x9M$m1f"EAoؚMs[ $'/ъrP[L3^ =n8'#F|dZ 4%AN~=X%ESpC|IC2)(n&jG\Q?Q'a=֌__V՗K֧\W7m|uo7uFP,"@0ߜxo|}ny3她|YPy8ª{ǧ5Ljp
+[| y{_ϫ}2grW-vn[m瓺>],uDU>V}J~u OZwxj11q֫m^n |`ňo_:iMۋbTb֋j;);ڇj.c=䎭W8 FY[9FۃqQ5vԓ7U=Y,VK"jz< Ҽ~v[G噚DOc>& ףͪ=|{|T>M 2}3OW mLe^HzuD0?:{(Tݰp-#Sa%:O ]Q=Rjz78xT[z\б݂N]N+:Z݁j]ϫgA]t%_.mA
+7FF{TޣRQyveţģģ^cQDJDj:EDDDިH9]م ',N+ p8$V衊*:Nres}VRz"]C< 7 D8q%H!$V*PE\բok-ڵV
+res\5JB1B*wOaCmw>0Nc>Fc~5}\5ʹwC߾Crε:fS_i̻xC9/^0FyCS)};]t_{x`nQ/vⓍ
+endstream endobj 181 0 obj <</Filter[/FlateDecode]/Length 2284>>stream
+HW}loI.$$9>R6_G !pi܋}8.;_TP'1P 6UZ:HJj+$TUBP+R ;ߝ.p-1"ys#
+7,LVqW#"Y|g5rQGbSzČy}qG|](ȅPE%9`Z1"kmdW^9ܾhiںzfْPU)U,^Ʌ8V0qMmUZ(FXJ+6;;iղʲC
+,MzB;v&hQN'{UUPI!Eu!Gh1|djE+o?96c
+k[2,]TsS`ܙpe5a6^<:?lS?:k
++_zľնc>J*uMԕ/?:}@f^"DkC/7UH3'*uxgbϮ\m n}sԹD'G&S[[KEJ߾}N_89~QEԻ>Mbތ0#3Œ0#̈!33
+r%`z >?EQ'AQ8!Nu;q{ɋ! p#|D6Vp$l&#gmn ˙Lf$iJ6HEՊ߱l"*D; [d#`G#ܻ]n, s1&!xo{,xBrViuUTUVvPAߪ@"l,)^;p`cL^a6QIv"L
+$"-P(l2Ufh؃=wP?ߡ=F>ǕK (/E1m#Q{F#gMQW8m41?$Qk֎"t:IQª(_ix_hg2q=Y D<-˷AOOb~_o ppPo`݋!?Px#P_؟_Sb6)8s.RdvSh?'&"\h%^͚D#жx,LP59ю"!xIaFIH"<`Kiv$Lr N&BgՌkۀD$A(幧 EYInhʖ4n2>(wd|3TG <_trcx2qU* 6(sdPaRGQ3֔RZJ&ɨ~}8"0( "e߼(qC ~yQ=vS,ǢyQV^(U}dxntPJ(ϰ/Gw^HWT<MړmACEjCR"?s;V#$G6').^΍syAF 5)u\RՕV^nH⯀BɃ(ݠw2
+Q wP@:YD`ʓǰ5%)L @s{gJ(SBmJ(SBʔP
+n=V:$(,S,d&L4Ñ5
+endstream endobj 182 0 obj <</Filter[/FlateDecode]/Length 16119>>stream
+HWko.@a!@!rE>Sİ]B`,a+%e7=w/#ޤM@5Cޙ{:x.+wtEnf'fnhb$OT43nW3ze)}<r,xU/},/m!&XV?st٩y$>U/< |7pi27բcƙrſ'jsST볦*VN:fb5Vrbe2' OyV. (y2*'ܼn ͼ`Xq6[h弸/%1*x™y :cBLLCW_wG->ůM]NarG2fY4rfN[UOE27!ke\k^nֆ2ln~?h7y{[TOڝ9Y
+ s!=h+VXA:ي?=6uYwSMLvWd'uQuG<>N/hߴZ 2ԅ+`Y_V31Κ"ϖ,nIN^Z߽l+<޾GqŦ\pۣGD-*oY8b'8ae{ؤ
+x 0QUeFnD"aaBHa T>h-C7BriT':֑CZ
+, m}clk;7cߌlkll+[߷ޯ] Hwl,FvvMQ0Xڻtei7}ţg=pƱh_ޱQ g"P(:mRhfpD6ט3i
+CBj !3¤( 02yLL1qߠP@BԕHCܗڝ+|aǪ-%4v~g[@%
+vuĽ8Esqz\*ͽ"568 븱nmt߰~mbNW{wuziH$d,:jq^;j=/K
+Wyw%DɎ>KtT٧'˧Qy:DZ%F3MnH|9@,֒ş9Io{1_LDdV>ROm0$>22 o^(
+<SLf Oga qF<%\8]Eؔ+WUѹ7zso?j;t{̀ E`"4ծPwPѢE
+l< s8?s" Nl{ |_kkk
+ ( u
+A_,
+.zjR[.jMt:]H)n{5ȅ/91ӑyaU"OgyD)4 G#ʷy7ݛMn_UpןU_|->JFF\V Œ hΊ.Qەӿ~}=YKc~yǔ0 *w*iͼ˟ݯOF~@A }^v` I$X+춹,3zӮ=Q0xhi,. өieK(JH0ag _`߾#?YO|:RWwY`ƨ/;?
+ż)5EcK󞲌2g ;[fݮur&>4
+TME7)*ixvMMZXԦӡ-1gk̷uŁTR_)VJV¯q~v 5)[-ě78l5*p
+e].=ߺ٥ U\yVZP'Uh5"h j5R,u>J%wS̉Mbqdl}*FO܊?>)zn:Ʊ1}k׳tl]+TZ\79GŦ+V>NKRCh
+KG&vɩ7ys>NS9OH}uVz4~^4u^J28~RSM4RPy'" ,'b`@Ʉk$4Sba`@p{}3Y+h(3U9,u6o4eN>5xkM7ŧf;8 ΅-`.[vzJsM4{7t:ʶnYZt?iJ 4%MbR6(P
+iT#=5UeԺ4\y5!ǻQn9EgXq5mQ->)3i pwt_wI@KP-e}rW{uĽudY7OП?[q]+yeˡ{Ѧg߿9[/zƇ40ӋTU<WHVCdUUR/W'b {yh'R֠5)i-:o3,u'W6UR办jd0x,5G&<M"nk(lQK=ifϻhhᡦ_i@DW.pU(Oz3oi2pp.ZC7y={j+gveΪxܪa]N'XVUP-~{tOl4/"YI]'6IZ*?6A.)[%;=AwQsR(={ݵ^NE!Pط =K͠O u ogӗuUg39N׶K,6o}h&ɚisf' jۢoOXlt|=7s+`gx5=Z~iv*WSvO ٸw;59J'Y3fr0Q)9U^.2+oYڝz*NO穞OGOM-Rq#"ZME"bBi&nPZ#R l"R-Zb&$44Ù}dڤVg&|v=NhkjڬDl[ߠ|~+SHE:J^*]d:껽z?:?t׫x*^WY@>5jz5*GMӭ[ 2:u< ^~ٯ+7F5;HH6YFc4t
+Rg/̕3ed|:WNST&S5d1>GQa
+/ð
+ƎzPKDttN/(+.<I؀
+C\$lK1Q.`9n01A+E?-̿sA,cLpz<1S)¡)eI385${0@fs7X
+VFSc, )uZ}QïB, +q6q{f"w
+w 契,ʃ ^U[{tkl3}Ub#a %,KL܄ /"pH/>`0a;0\5`xkxWㅓHWQZ㛑$E jh
+XV@9a
+Nq [b[@YC `2_S@<ڴA\-ģs_9EKg-gX8ӈ(xш :GDÃx#(&!!{hhb0 ⨰LPEƲC8W|1W Gu|\"mpr1 7{L 5gޔek] aK;D 1M+x& 䢂]D.l׈+0jE9t@_c!"
+<@e:06Jh@uPv kB;1 8rp1A8 ox&
+!𳄇 & RMa
+HKP5W/Jhyd#CO!QsiԱ,Ʉ?0S&6V0
+?;.L/^X;Hⓤ&fY|ÄN@!IIY0tYGDV4Z9vjߺߧsr턥ٝ)ߝr^9}ث^cw+=ž~ˊw_^t?]f6:x:< yptttttt#JJJJ'J/=<f)=)])})))ݩ氢[;ƞk;ޱ{f=dGvyeOUeo]feF'8$t=gga,n~7 AT+B-kVXҽT+RX+ޖn;ۺ{]t=}NJ!ax;*2˅,56\`F- K/zŊw[iמ~]`ƣy۬jcugG6
+r]j+4ov"t.?v#Wf'nP.FVp$Hr"MLG$R;DXI\rq4qbyZ7m4mmw D6Wi΀H}@R!)Ԙ72y0at㈁Tm0seYC8*ZQ&+gs<S%,OT~}ujBJnbP(|
+O"5VD#f
+@m*%*kt
+[ >t#[.UJŻ"٨-6]3E#zF/uQoܫ ^SK:[:u߭dRSu9J΋W^KwIrS
+l1
+ᠣJ 0HtdVÀѵ{ƗVYj37/OpƆ_3y|S7U}S?"Dĝw>#r܋Y g Q؟X'~F FPi#dN: ,Dj{ f@x7ubƀ$jY'D1HP-8M9Q;͍n!m v7A`,HҘ t
+26f[A9F~+Qt߀7f6 Q%q6>[4t#bzwXEJewN0+H`8,U{\P#n1'Nl {^ fLL :6szDp(sHLl" $ekLu+W^
+:'"<d"D"KŲB '.}ߑ10+mcO$Σ|lS| q'+10qgg\0^Mq.fmdWGǻaPe#:頝 iXxӊi!rD<fa 05C^F
+Ą1L$+p30$2rz@(ݺyU![YQ5/*=HwH0/}qw;⨎FfьF6PT2eV(uF#P1H[jЁWF`;==jTCjV#3@7{zنt{t 4@= te&-zk.r¡(.h5C ]1tB ]-X,rꍉڢ ʂRZTyTw&Lܙ3ML4Oዬc֜x>lGj967O_9Wr{=V)_H
+*:iVRT/pvm.#>uF+<]>~Rz5j7z~j:6N*]J1]?Lu'y~~x\9{}\9nqGK6'[ Z;Cʠ$ѓ@Hf",!YxL9.xprNFbdt "hvcapt FǔGu -I,u6C%z cE 7KL D=ࢌ8px|,#8x&b%q
+q#q qP: c 49C"iM<mmfbYyHAV^'?j^ ;J)sME8=|ˀOߌ%~a %g\txt{dK @ѴW5dTlT3x`h(q!{9[kŠmkaG0N[hmpv+vG 4 -ĝ:YgzUݙ3qg71ќ?</FG$+ycGw ݇t70\ѥI7(ݦn%5n]ic ^R '$4jAX$MJFf#ӑX A~eD)&NBz-HJ=%{6 rŕ#%7IҔ2QQp Nr/9-H[rۋ6)#k͡e/nStj?:{u7. X|b7G8x~aUOHpN]a ;PxP#IFDebkSn8޳B+\Ѧ)QPp$LxӕyGC/47g6ggeTlW*+^Lo5)`B=!rQRqJo'F>&p$1 &TPɬ 4C<\ynaVf銮t陧S:3O/]0t V=57;0V;Z]7VY7VWj+UJ+<=r]%uJnԚmI/__bf<;jE*YxLC,usԯzBQ T3s.xzDggE uΣZ&Pf,jrtߞz?8( ZpGb&0-vhCt?
+_pO_>>~y'}^>}~͟v忯zy>JMzz<UxG֔(K(B U GYHR}*ʀ(܄Isg!O
+n2EYv$s_-Hp>l\Rt#Md#Jva0J,Wd222jmViְWC444p`FF JU$ՅRRQ_zaHնVg)c$B7姿fWbXMF!їfF7RF|HahT GA}"=xp"31!$]kx"9
+{/D- UE"~%,10U׼
+x5砧39f, ;|&n3 +{ݾo~ ?Êsf/w7+A s-vmFS֟XH0 F͂5M1܎+h&`=ѝ}j1X5 vC?hل-:_V(h `(ไ̲aB 2
+#Qё#H#aj`Ŏ#;ĔR'&k-*#)x`"G=N8+=;(ŢzooXGP+Գ
+%3 Q?7'7>?;g
+$`>So}'Z҃6O: SHhot&v- lfx}~%D2g;tnT.…mI/g?ku vK&]. ̈́
+6
+B1Mpba  MtSqYPbl)rZ'v
+cm[o]mLu t~€BV#3#
+R&/嶣6 E_hrO۱ `}iX*>{Dm ۶b.k"}3=blPĉ.Imu܁'pIѕ)DG:u {vKn8&[z=߷36D.D!ʋh8raaLpI$aIӓ8-p4+6ȦHFN:d8<"̀R;}oUZj\ooSsjUTR7zWuY K'9mN:4(phz?ُUx,S݋5cǰGwб/ь9'Ue/9mw=՘$I8
+˜|1u[k&Vr#6! 8?f0[uo;j<'Xx<=[΢c.T+J% IBIGlZ*=~B_OZQIE$2g%ѩ-Mjb:$XQ)dJ:ݼEfJZu[zg[T!p
+j(VTp6 ! gp6մhdtVK쩬VKrY(YW( )eelYpNRɻ7gRIEgkʎ e$6geŋH-;2˙]lQ͙^ټ͖b|$'BVKg&k7I3а+DŽh۲:<G`<Vjxx?ky{585Wo?;=~0c>Z~>ûqyg̳dZ)N'-충Hd,Y,Q,0kAo(:E0+`ѿ"~YeˊP&+bW\,qY<mvh!)aFeNglX-Z l! 1h׊9-o n[- px_2EɼW r 5f?OǾ,u=ّs. C cRJvt]#HQP8H+G
+Ɲs#y;c,9#GܨC40gA7̩
+tnu
+endstream endobj 183 0 obj <</Filter[/FlateDecode]/Length 17413>>stream
+Hmk$/w7 ~~0!cl0 RBn΄|{wVZ݃$Ҏz5=]տWUTQGO>ƘcK"I&T2%|)'JZҚjYeu60}v9Zr͵"ab]%bɅe]Ģ`f0XZBZ%LW[Mu5R-U[0~?~7gf1@<f1dž۝z&۴3ܵ<cf-6\EEXrH!|ptPAW_>y^yb]rsr bM6XoXmV ,$`3Xc6H#]tIGN[mJK-cRTVIEWNYeVJI%:pXy{/^/͛Լj~5طiFؼl~O>sZ!{"b0qhh@Dbp |q/8!tBť1J9|Ap諨^f5[1 崻<7m]!1*-"x#T䉤䛨O)bn޵y8]קFooooHߏo~_w}h/ݹQ|qj) s`3K""J,[*H  2$3^״x"@c$+
+4ȡĊF,R[Q=$'qc
+y{S! ŠPC۳XOf=7?"\PÐ"ԘKVy2Ј:`
+hV+VƄQ[VAX2YG~%xࣃ*x &a+bPxp& Ή¹8Gg%D/A?y_gieȀneZ# ܁tȧi@q6ipj u8 _&> 3_\nKťHth|#6D!A+biwq76*4=M3~l|ޖ/wo}ݿ#~?ƾy~}{390o8zTf1ۿoEθ3ӧ5oi4Jq6-_l+{{QŠʪVTQIT@$n
+%h "5T1TA(?+?bF"d
+Q
+^",
+#.O=d,APkAj]!sX> ʝ24 "Iyu!W}-4z
+y;,AqpoS 8qH!C DLHhRy!C0d9 bh] #CQv31d:x8~dj%>彭a6!8#2'i8/KQNYZ_v,D E-,G;/Aˆ{=^>{;&N)<A Pߢ"*`!vPw̠zpsOQU |T~?_ 1 *42{JȀNBH%UHXF@h RAZx3 QjI`
+݂y< R%Y}\zQ3
+k j&}
+|^j3|TgH8If`l_*:ȥ\}w~דPLҍeED:]@QJ8W {5'hu7^^ιM~S.˅';B{;̻-bm YwOϟ%})=0w??~Y M5c:
+^<Ɓxb2InZ']o4͒^@\gWg WwSB3m66?SW
+eeC%ab򰃙A@Ī<s`}܊s[E:c!`@ @q7/9H9`Vm:XJrZN-NΛ6p
+bLʑL&DΠX#na&Qˢ[:6tf Zn(:Kg9,ySf{N
+ EP#gkRpXfBPJ0RAL~R
+J0[ǁ
+ ㉝ G{s취tnWաWmˎcy15]*`Α15G)I1G-G"Fш=R s0v̑|e;ȿCDcy<-W[ -4rpylًj,[
+-Mα J`-zYĔ
+k4(~UPXP|
++p,Y66c]5i J*m<U̦ŋ$! 1W`_=JVaaNkY[4z'
+/[>d2dn- L
+-$~`59e3gw !)*e7p}$9wx {:f ]\/Ha7 OylN§kƢRhm2^=ŒtN`GEM%|P8%Zgύmn"Cn<>t]qxNb"6?aН0[ʆ#"Ƞ,Б3`v,*lGKDoXsi~`}6\,k`x>w}c{-.{lAtk]H'qSF.>Wiw!r ȶv~e<=J6k,$7'i6o\7\P{S*`'6×ZJQ4` ATeC0-
++Aܕ%~hڵ*Ṽ!b@z!($~ cmQ&c;R+nO|=6e[OMy2fءh_ᷰ&A;{>bTO!|q3~m`mKFP&Y~Xg]6G䲶ËDxcJVFOrN*,/Q[s}.ۛiĒF=[3
+Aܺ=1g+cbl.qj
+68Bޡ+jzO.Z۔v={mw;9k՘aMƓڤe-5ubγxDX5&Bm,5UNކGd0#JU;` _pxP7 ֲmRkG:έ֋(}P<ft:]:~)܅w.io_%ysˈ!:~$#,W\u5Sm<91kb;l#@р,>MհxK%TV}ˠzE҅_
+ }e$=Ͻ&%B͘a9)pq#._Nh/Mq$cänFR?# u >c{5${]iPkUC2n5[w2Kk>Y34v|7R[#H m*Z
+ׯYehF(%{)?l."Y y;./qCߑH d3?>ݪUTHU!э"}sovAHh9z<9ȡ95C<'j*%ry?(J&jy GJh5-Ԥ +h 5.;3>gwv标2\?}Nrco13ūsԎ
+E#°fTNS&sɬ1i#Kn96Fs``A8ˉ+q#~.v4*5E
+qz5^zsܝ(;bo(F_v42d#$%oVxr%o*I$өn] ٙAQaIdtr[7-yG
+XFjA4,{#0]ٽ.G1&5#@ _2&FU3:=$nwY*vlJ2mXטz} AKr0I3 a렳FB^nqB^46O9.LQ2Is >@Ū-JXNp]{}KS֧PV 4^x I G{1pfWiS
+%!Z%RO刐SDr͵;M'0kڶ5iة#l_l1aqcfP]"
+^-}Q`)^LuLPL}8;ףx,moMN
+0~-_A
+^Rxy.|n: Sø
+(W-կ4U>L1gǴtҢnN#<lM iY?9%CxT:[rΛx5h&9bvYB<v{3x{.t
+{dx..dDŽχak_?x7ww {򧧗˓޽p׷oKӇ맗߬S/xox4{-OϬjb -vYo;l$[l,يj9"\ ċ߷`_jG趁| d$ 8RYp *J@Ҩ4Aqd,] QV-3D0NR2`\H,lEڗ
+$!. C`ϴ?f]]6 `X@:IEȷ=qXAU4_s>>B@8=%c0\AA +'B ݈|䠠, `+-Ҿt0)A')sbqѹee-?Ad(2<os6heu?){GL߽<M)tP0G5g>X!Zby
+’m KSEl8mdcel+\Ә8b0I5\Vvrt>ƕ Sh
+曾wHI!̚sǴ`lƒ@{w{ s^skuƧƺ&Xq8ES$}; taïK}U@#qzXuPrCRO➗L뙃$@DƤ#$N0^F8OWE?#CϮ`p}]K2l418fUM:(_E@p|=h!YK6$M_I8{i wh`Vb̹ܳ,U7OxvXw' ,4ǐ
+nAS9M݅,{]׭h#s0DCXX-YRPD|cW/Lcvy;lw.S"b`'kLM3ƊgYR5˳I -Ѯ`H4Ҽh }UZ^mڕLbMCcHU[K[_
+}a&
+iqwSW0N6[)rr]Q֗Z8]߷;LO!6?iƎR+~ o98ϯ? cҪ͂,Ӕ+ŷ3bJc(`'ҟ@y Ql[AٖF
+O8ҜLOHc}GCJufMlZ?K%f
+n `"+ldqZ^la9(h"K1Ksڷ\AU|Z9& lS+ME(4rg0@8 Iƭ`w2}4>K8|vI75(RܔPi8 `+%BɃg9((9X1K />rO{MT_a_x; e _St25=nO
+V8ci1M]dB@aʋs䴬QW&P~J֒Dպ$k$؉c^:J)/NwF8IYYB3d-߹7/ZHiFWѾ=u"ƫ {뼍c{7_-{:XHE0-3=sPP,Jsڷ3*;C[
+&7rve=ʛ9g0>Z%apGzB0x
+
+o[Op2WyqxEaG~GmFP㯍zWx岞IvDՕV5V/g
+
+’o9[.H#բ`5)V{VeѪI\(4k
+ *:xR!SU٨}=XyrH``,*|rSTXqf0h5q4y+X:(9܏Mv~ `/-оt2Zjw/s,"BGaJP
+,~L͋ABRJR4|CW/>˜/UO+Qps\c
+J]WpG
+\L\Ny~=H'eX1 s[8vTv!sc ):(un؝?{XPmAx䠠I, `/-оtFr
+b 0~niH\jG5ʽJyT3$VKqC| CVzRiWn'A-B++rΎ4uc
+]-RKH+^:mR0SJ}Jzd95IO^S)+Dq˽K6Auêlym]A +m-=n<VZSÇ'3 [e E9FSЯ;P;/Q\;AI0Z1lbКrC w~ HxJ(PU}{ REi
+8#e)l+U[B
+ZNG2
+MԄYw[|§.쁺67!amDk'rojdPFk kЯ!8T+hFү)4Y+Ãq/*E3Y4v&הط[C%o+&$dFۮ"J/y`9*9 #bp ʘCw!nH<:])w7S>vz ՕZWtwɼ!
+Cgp{dRQ;];P⪯AlU'*s]d슭5G{`y;MpCdULb`:Qz>?mq#W_qnw4[Y+f3A9V Uނǭ}C$ ϰp5۪h.Mv֚=|x2G\<-[r~Y8frPz)A A1s40h.ףطO{HaZ4z (9
+EG
+>"\wlt񙂸.
+Tw|f}.)lf0A&Qy-uLW 2
+vŮ5=}x.o]bOO }b2F))&GJ3V@-Gz9RA ̸j0uŮ-#==x0Xer<nKlpowktm,wbP YNg^6ZuX`:zTY/sItpdb1ܣvISsZ|ŭN@V`TGHڋ b}Hɤ+pjC\H8#Mjco~Ё[Ԭ1Bd55g;]6 "[kLz?NÒbet
+ cOJ2 XWlm9Ã譯&2q i(:,gj57rŵ~xk0[hGmT[kvDzvqAKΝ #LWĬ˸&<Fv_gP^F{RÀgOџ4Vᓒ.|:<cc/S{0vݹ]zR6L\J]4:p DNu2(-BZ5 I䆵О>nb'k \804MrU{\8m-cX{J@֠
+>q-0 TwY/Δt"&#?8va,4M5ۣdbcWw>ciJPf3Ӆ''d j3N9ň\q↽ցj1e] OWZN 6d4:WOTY/Όp TlQ|Ds& qjq/:P=Ƣbxhu kPKH40&`WlÃx9,8R &<WI-Bs 7xiqIά:5U 9ɽ\nTE+Όp:6BxZ,s
+$֊]H [1yM{IT&GPw
+ȶb*6ٯb~/Zcx>[`LoZ84{&Sd.b/t?N2Iϰ
+K"Kgq#@-:LѲCfϺ
+endstream endobj 184 0 obj <</Filter[/FlateDecode]/Length 5796>>stream
+HWK]G[8$[y?`e "HIwJ g,,艹3'\vV#Г?޼}75r w9O;rΚZ`w-Ra0v^d ApJ|408` 6)03wj;Swe|9$|-EORMsiŘR*ܹ+ܢ1t(;c9sBÈJ!u %W .Ef7yܰP !TSvfs)j%VpB\fks-|\ϕA727
+ԆN˸1਄?MNb
+bR\Z7N/wypַgPel2f֕J!poYb:
+!\W*F;?_6LM֗pR"2՞i_гX\q\hd ApbayMbѫ&zw{ ]2QzKh_ i<j/ͷ'ccVz{zyRb.
+ OxǕ-?]ꯗvmʋ#AT1UuYq */flYh¤r)߂cmа͂Ja4&XS37
+i'T14uYpHiReGQ4֒E,(qm̪+XgLhǕeUI`pyۇ քͅG.w]=V< *H 2{=*84([Rnj]!@#uv{qLyjfV/ ȸұvh N+[6>.[qs '_SC5yK/- {GY#
+_ y%d]qSrMeho<f%oA۲V nZ]ȍE`pـP{ۂq]i-84`\AC܁"kj#WBkhfӁB@E\z]4J0r95a1(^τ*i`P]f&ئho><r%+uY@;= Q{=(pyTrhd /EګR% u2Y`\6r-F?๹e(SUpk>ւ$a(\q*ǕrEj4\\l.Wէ_~x[^շ?ŷ?x?w_>{yzDQc~G+?9pI;Gpҧ7:N cTTQ6nq,(P58`okd pm3fǓ8Z89EZcZj߾w4Z1=-Cwgb=4Fy7f:Ӹ A` o%Ӡ![^XJ2":gGȔcdJLMo7k);M~ftN5icAshQLDUV^ ZJ)RClOc%3nՑmVLˆDɾO'`l~ɾqaz)Q8py#8Kv~^Pa<8g ":C`|sflz֕0?8IoVqiqw-"4C_'rrM\!hc#gy˓|
+sf.+p!]n0yơHivC}vgqxP ;SmއAQã3xVaR37j.cx3_)n ޠJo{a; 2k3;K:0. ˚zM 6W{&QQ<;voy9$ff|OG<IFH;ޝ]~e2#bo|7W?$&gd Bz{h=qՂq9s 瓙}< bB <?quaڌ|{Sՠ%aĪ&EfN |4- U)l`PVkɧ Kb2Qh`ɂlwHh3D]T\rRV[kkhkrk@(R0" &*a3Μp&_mธ*TLk
+H@%v*}e=:Dnm@D: wa1ybH4؁ LdT]Zk8*^=1VE)u){L9n^Av3z
+'LBM^&g3.?4Wh &̸MP2Bp,2kXۃ84;$:y@9H#ʩJp[ȩ23)埄Tcndhk$&;41 7!52s!X0qRڐݒ]N~=4%ĘТ{h! ^Z62R@$ a-kL;[a:bat1[o[6I
+gH|o*<28h[pf*F(js\3S;Uvp - 3rʸnuA}rt" Z3:OY֧1JHGl}i[=#͘ #,sr,Վ8=zol_b֟MŒB@dFԸS<J$7Ta9~w Z!M1,)΃1l[Ȯw" nO
+e q'E9X`80[S uX"G 얬(FH!,"9ܠflg ?~4=(R(ܼ GLzQtUmaIH 0daH]B: u&D)%|0AswkP\[;`ĮA@Ġ.(ylH@v!h
+&S"ᶾ
+Bw Z!M1,)΃1l[ᖻ~BtRGL#6_Osig\[.dxS<e
+?wl269˟qQO>Ɣ3zƲIB1vhk՚
+-H4؁e>̫D$ V!8ƛuk]wN:]tQwu[\5ȊSN՞jݲ-ku+6!:M)#lЉ
+RaIIvel[nj6z6:q]um
+#{{
+ f"_
+KSg,[bX +] q߫K[$(ae[FHH
+c_70 ʷq֪?4{=ؼ6f%F^68)!F !ƨ֪Bkd|#4=E&rD‚s>$zۭtUma`$!Uv\oq݅Zu *O߽L$&3lNylUauG3^9lfIU8%%yDV? iJ gm @v_HD$#
+"M/u]Qj+#D ̪}jYN7j
+xI1@# Z a1yb-ے^[5֚H$Uf$µ̢}9.W=P
+XF#uƵZ:iؾ? aWۮcu` jIؿfŃ2lmjeL\BBLyPYn :Smcvi9"-jqpʡA7x9e?fM/^P8xU#ӳ$E Ւ
+}
+endstream endobj 185 0 obj <</Filter[/FlateDecode]/Length 4444>>stream
+H_oܶ ;@ Ա׎ d{k#cش\Z1
+EO>d_ZNݡz ?pg;Q?Znx҆$[k{~YnrQRۢKJ%y@b))U'Wՙv&2qhf9cXQx
+n񉸔:@Ԗ}=vΓL8E$Rڌ4؀fYVFi- 0M
+aVj*FSrRe *MY"к/fV,%0|RN2yP
+*`nݳ
+ ןtZ0
+ow| 2"k%Up*N
+ME&6n۴4iFlˣ[5ys4ҍ!e}cqG@mZ0ִ^2n -rd
+:z IM.ːHV&L%xE4
+|j!]p1gNJ<"7Ex{
+!
+nۍ⢜USӱo\89f,ZFG``CGqD ̼TQa0un
+@0F& Owi#2"qGk^ȄzܸBd-#bY,|- Ŋ+dүdA7ΌĊ,$2g6ɩ. yTulvSiHb|]67ls67ls \L9lsͥQY ^\9l:ֹaֹ8׹Z sۣ X0W!u6a[fSL&qfʇ\Oaf'V񉸔:5āLԇ# a@R'}4-Dh.i /Akm?Ty^f(SNJJUW}7S,2Z~drHwn<7J@Sz܀;rT[6V?\iZ=j7Wr)G% ^Ʌe.X&ΝxEn
+
+}2BCX9l jk$'w˘ǑB5!Chp(t2P| p۔l(ɺw[Ŧ8ЂRgu2uN ~WBҖ5
+h m
+^OÌF:FqEK
+endstream endobj 186 0 obj <</Filter[/FlateDecode]/Length 17759>>stream
+HlWɎ7?Cm.p'=ɀOiy;H'r#lKr+E&s<F %?Vjz|<;O$f,eIzy@;x<hUSL 3^ Fgn= L-qgNZ
+Zˊ J[>x93n>L&
+
+k١XjqvbI@8ࡘxMzW=S!v4* ߥ$Ig'4)4+WA`0*96Fg.W 1P(n&EI+0L\\ HsMfψG40#?zu+.w0X-bQm
+~l\Ȋт#۟G<۷_r_X# J,=# Q?x>JG+9*|=??w8
+p&٦F4f;>}_QjbQc' .^=3INh4 ]u4}BM+ƘXu)Vm6/ h'~7QyA_h9f+Nf<uQGաJJ܄]wob0LO@TH+`nFT̰bނGjȤ'w96GNd#_<INlĵР7l*0vTސS
+Ph'J>Pr4]
+mI8v -dȌ$?]AldLN6Q*g`/(z~H6 #FZm0w sp.`y0uS
+<' җ3#^ڗH lJH
+V\2|X-ywePy
+)cx3
+vS=9j ;z?) (4'D0} %,9q8,9 ʠ~X @:x
+y3i.3p(=i$ULW薠ݔ^ZnX0$*(D *91+J*_*
+0 xq%QfZII75O,(2B]u8)lUy2JI/-ej۫3pLf<۫rފ1-Oc 9qsWYC[&pPS9
+ 8^.eeG-"~/#gLpOx)mܶwnaǗCz
+^yW*Y^Ӑo7@3L,8LΛpo@I){uksB{__A<q=q2^/TIU'9N4uf@'+]BshTm
+HTGVl2!wS)T&}Ԧ7]kN'j؞m}﯊_
+G8>}y>ǧ3
+,/D$$\Hxɒ,1(r-Zl`֙:J$lxvSc"*;ƇB4YA
+<dUcV,j(-4ӜS4U1̃t"ԄW U݊.:fO' E_ (ea`վ
+?-DOqCs3A!>T
+E"owtU48dOCVʱ'd ҿd\9#^ Eyd|9u[|CE9mu]pq9q^'S;Hxƨ)Gԝ
+& t\Z~pL|!=/?||.Zn/n?-d9=s$j1_ d+.$-w1᧞)r; kZ4\2%,|N& B}j~/kф}H:^}x{%=j5?rrpu}}E?^pZF(U[o{]>>z}^@=w7'/rF<wc~7W>/avg\ 5xhEcȴAp.󇿠pvp@Oũզ's.88l@PE`+;Z Y T
+yXvyyEn_
+DP> 7u'CZ}@<m{
+KWvub[&LsE8r~)̝V3OzWGY]=SIuUܸ}QFcOgT <CA8?B6:*_'gɂRCI`g(L,iޱi*xcK5v~~A 7E1h7N7/%`*RU\\N`3:ȴTp1Q'b:=z@[
+ Ϲ-TW3lTYy)1%qq㛌U+.qAa0HreI-&-(K ,Ǯ5Jxe'h;<^s/|D)Lx_KBШC)Näaa@&Sc*u?U`حe@z~^E7Fk`"Dks'dDFY!-8>]eFȊ
+!`Ae?a1@bcyr=gro)` fv` ̾i4c-
+ئDj%OdUJ,A[P/x%= kS! v
+:In88~þUoܮ P<52HɱalFVjrӋ,z
+˴LȠ|IE qyz:j7
+)+ޒfHϩ-D|ٮ:!Lc@c\aV"P Gx՟35 ]t
+\Έ`S0@oڇt!%Gn&p~w A<T\=+~+ȹ?-u23((@WЦ"bΊ`]p<y)%;`Hß pWPⴴTPNŽ 55ND89V>FD 1?Gfߠc3N@(<q%LK-m3&6@'%aSPzԲB.SeH`}f'XUF Hw/31fPʈ&3
+XgՂ ;.߾DH^2[`aT`r W
+Z$;oiK"D Ds(O"%d^7J͝[Y]rU=;6' a?x/xy) Wo
+QAl\ 63l-bsxٶ=jllm4"b2%/.n1Ǯz6C$<oݝ9a7]}^HeT)0G2ڲp(qG)OLIX'zwç-?2%LlYID#NeN˧bG˓d":|yX+y= b5\j),5w7lb3Oۆ
+ 0@G0Mc5ZD*=`R#.L7`߸+ )c uEk:=/e[VQkOŃi9vwJUlm\ >LOa8gq*(v ն#bnӈ6Ssr5BWĵp\6{m`g0$x.x\"Z0nѢC i~{j%8؇~r{|AtɑDkZk^0<<ac^aj;ʠ×2֢x8L~Z' rk<aIz4<n0z~`?%M,@ԋRFuR7Ϣ?Q
+8w Fχf5 a+=ӨxMf.=.SrsL_dl ǰQ}!JRni$zAM}Z꺑x+!ہmK?^o}Gz|m<_%ۋ JN2O
+F㬳ld:+ YKM&4IK.C$9lrau:즔B0
+ܡ;Kѓ1A+bQ_b*e7]iY޲1B8Wb虿%&`,䵊
+ 2dR]A!r<->%iqRܕ܋9O -iџ KX\yj}BD/~рZ\DV̔,W@wM"dqzr%IŇLp:N^40QI8(JE݁zx@͕8.؏ݯg EqQDK'dy^\1 ?Wȩ,M
+#D9{a@QfC(ణ* )^f
+P5`(UHrp{8$̽rU6dYCf*"w}Wjiyn
+'h<L̨ 7}mLϹP2zV-0"εnhA&j K}!gb؊WF jŵA*Jކeri2eA
+D`U9(Mͣ.<Czs^F7_0C<X~l~$ze1$!ѪT:B)JIJ3ni
+Ro3!Đ9 ZPVr#$!& L]0<윢vpC@lPve\C=hI2}ͥ$@vU TivHń<}̯#BTrQh<+{Hnv\%)'ov=[FۏwִTI4VDPPAsMnioQPRPC4I{M'!jajX'`{EM -p͓k 5҃z< :% àhZ'?8-$rZ7 XL+ Yu5k7Z]L-Be-@j>e;ND-Ѭ1m
+C߰Lىͮ蜧)+mz&I`Gӏ%xTF%"/&Ѱ1*w{R\KaP >X-+Mc!gg>4HD럯K[:@KsV-bdsقIFiYc2Jr7,BzX;työX/pi[||7?xywGD?NTۋ7oV`Uf/g'fzIgԒۏ${ ^@7V(@X ` L8kZDm@$5A8HO'K
+% ~)%2f}XI3G e{Y Q#x3;d_w<$xŪG֜f hVb|VEld\uM [1vuVϡq68 wl)؅_b kC'mdXs1is0&83#Az;fӭ^saC|c`K1qx`l:/r*4'1CŰ>[1nu>;e0ߺ6ħ; fĸ93>llfMѹ2~JV[Dc0k@sOeWAe0ߺ6ħ; fĸ93>l[M#PIScآy FYTP@,tF]`rtx <u\HJԲl {Q Kڌ[ l2 5U6Xm]uK,6zJ
+0pZ a4<_"bfێ[#VLyk<]N~\2ְ 1| Kyx_jܟs,8[GBhӜ 0hHxMawYL8uUudbk4@jB$8lGSB2xd4i2Ɖ&Y
+hg Up! ΔUF:HB}4ۅBC\C);e>9&ԥps+
+UfZ<,!fkv0fKF|7#S wo?@{brWd=4Sow;:r0+ͣ xZ
+YW$9xWжs+i-.ZґP{s#Lٴ%x>"Q-~(2d4XbӻZطIY\=iPZDVVt=nJ%5AFZ&n ɴL%{cj{^i˧t,B+ZuLD?cLıx8&󽶋[lڨIR9}$r)!8h~`eBYKW 6%:C=3%냋n]9,}$2Zyڏ`1C-
+-@N"V0i}R&
+B:cVE_Z|7Pultaic% |B`;˔9rlBi g5 gyѿkM6鏓ϊ
+P9O/_NW5}##מ`yAVpv^n3hVm 1[`*%/6$ /4åi{
+׀ dk9IA(~O53$%Ò7]}I9g
+N=j۬1}dK[ޜdN"d
+I3\(W;&}I! ]א5s_q^E[sXd 5|7Eΐ2ըlfl`iBeQ%$t'M.4jFѼfyuBфd.s&$u{\L~V m# CAOtvL:ɝEB+˥'%
+`VZ
+"
+V]<~UC
+ts܅E PYcW#O@Wn:͓ؿ*ǡ8LƃnQ=w|E9_T$꾲}fIļk{4^!=kF)汾rb @Fa@P
+1-K*;>lڳu^z`v;00H 'kÕjDu$b(hMVCjld1Jg1W0ؓ[.:zڍ{[zb
+]T ̰zP˷?SL1_Wp%9xru30uYpBaf2ɦmwҝw*݇ZdK;/O;;떘lĆ jMD8[52Eś¨ pz]"QmxM*t]wxM SQ#Srq1_[9j+*:oOhBA\7
+/RjO CQctj.eAc
+.hEq8w9 fڹPwL\2H3A$S
+ޯ!k6 7+ȽƱknfc5!eͫQH٪ e2Qu$'M.4jFѼfyuBg.s&$u{Ψ\L~V!m#CFOTtvL*:ɝEG+˥ݧ%
+`VZp
+Zx9,&Gv{J.4vę՜݄l95oj1u32f32#>54diSqȇM] 晛i7 vvc=rpٗGP9Tr#Ašژz R2"PbPT-M4f$v<lu(VD>XA v\\=V&.a'DVL" Z 75!9Wg̈́u/c;;`'Zz|:V?
+첏H_]2SAP2P
++#`Xyu$#IH*GR9?TP4ӃTV򚗐JMPW8FLȪ2/~Nw ();yU? B G:0Wwee'eDB$a`ojtu|k ՜ aE(VDS?ެ$paCbi1h$[+J]q1=Y֎zzԏ.fnu="{8c]vA;s}aoсC/#X %&vPQbڡBM1&Gf0q =f&D:$Hdޫm7~Aa^ HA{w%O"8Nd ` zE8 xh:6>o3+S왞꺞f P7/:oK:fL$lFyj00
+MyM=9oʓ})VZ[6 ¼H~$"i{B> #Ig$mGAAbohg[O\-tzH_a\*PH GΒ?MlhBziiC] >0X2Hڑw46a9q8¹<YǨ<9r뼷)2qyƥ[Xm\g'pm8Qt"bh['.l7+<pR=I+'zD9dt_4a4YaCuNTڭAv: mcƠa
+ ~ŭUtة[|A~o+ם٨\8J9w"x(1(`:=wu}nm2sMqi&
+,-O<VGulyo,8\Ư3e,&ۿj0jD
+iGQ&p>eǰdQ14]ANhHuVYUۡ(L2ɹ騕s[j^u.&a]6_K7=7;2+w&}&EAM| R9/L| x%
+|KJ|ej7
+~&G 3g+%66d@BՎs`Zk[e+,5hLG&c3}γ.!Э` j&gSM懈"ʜnP/XMc1QQ9֮amGa #n{גl8`dFF g߽|uGƞ
+\$8uA8!X5i88փ:Z$GĠ7"ZuUA*
+H:`63-ߜ+2o(!閡] %vF;g4ID3q i -TS>sd6 K/ ER澮8|-&&pɏkoOdv- Ƭ"M#IwJmfy%x34lywKjyyvww=򋟮](VLScgM C?3il|syqf/$^_//1ؾz#WM^^_OHF= ExiIܱ"D-RD4l_C2M<T ԝx4hEw]WfwZˏvy;H讙9[k6
+[Z@IY/Ov}bR-% !2f-msW<sBa@CLYY6aL1|~ADЬQq8}PH( ɛj8fu +ĘdX7P"1 CKBT112NoAͩ͗DseӋ-SI1IF}a >L/n;^W
+ū$b?NU_
+%yÁy4*(ᏸa<KΝ ңqNӆ+R"( 5
+DLp\I#ڂIu2(:*0`EK$!.0 ō{c]s)L8|n| pbVTEH/uww0x!Ʉ9 a7`AL^S!
+`
+endstream endobj 187 0 obj <</Filter[/FlateDecode]/Length 14501>>stream
+HWn}'a^r&2L ـ,}Neghbٞ꺞"LgIjNjĻÃ6vdct
+NpQ0@7w8g 1}VwS<ctS4h@1|||~Ϣl?nN϶7nyoķiqzGg}ۭe}xeu,3R6rk9E]ֿs3Yt'WRGNz\Bj~~ۮ?'#~X]-ǻo"; cq3^qyp =V8OC)8G;<tx/#?~{bx7߄?)__cKwSu-Ź%;q6)E4WRp2b$}w7b$1Tp=<՜,h$ [vS3;j)zd1渜{;euȯvR,y mfw,b/HIzgg+?lvf9[_^ž]-v~>j"ERW͠8=}/U7Zx5!XI^E(ms.b 3 TXq}6>C4=+5|r3|^ʇcq";)c`Ϊ@a/8v
+央/vչ AjԈ.X2
+y
+ZARН&8L\ʁk罉ZW۠U0{/>.8M,d_=vwz#<:ǙBM"G7xk/7i0q^q*$*3' ҋVÐF([?> q
+,5ҡYApc v/lzGSXuN#qEp3R]vMiϨ3h:k"iirb$ǪJ 1ȜX
+ F^#Bfԗooq:R a鴭Q:`qUIΫ``h*L`ѡHqB[H,:TKQ=ܛ֊kbN}9wa0&gRQAdI2DӜWxat>¢2jc?RD&T"n,y5bʸRՒ&|6c]tÄu #h$|0LUBQTبP"aз9܋zU S^Z^
+cG
+?މlptJ\/sB?S
+X\̻4»YbB\^q3H]L۝蠊r9a D4s^%ಌh1Æ*&UtyvQ1D_n# ESLd)bÔf*vDb:.ҒɊ׵GvxA :d.U0:1Y2>2LPtWՏHYZBΡɦߴACv9⦡CI\_NH85YЦC%.$xOh04T=#@i8;2EOxnO<I+XK݇ʺQ/<ɗ #W?[)$+\*p Mi*bCbK\C$r/N"201oL\=5@eUT28)ߦcb6^.H$UTYՁGB`<32]b4AN%<71WɊ>cb2* k@ 6iUbmDACH*I%=HpXH0,`lq<`0&>>ԭ{ٽc&ZuTq2j5\wVƋxZĺuqAʴ9
+0 Fٔn:xrsः#bauޛp_dO*vk)dEpN]
+S4vw\8) eCh;Z۰P*Je톚IZyu1̄T-
+7v5R1*d%#
+$uUFD
+8@G
++g
+
+zgʢ(EF
+qY FpqMNtrwlAt Ċ\\{ QdFa
+N^c.LX ?5욊zJg`}3NFg!,)3[ pO.@g
+]'jQ/~.4؋!dPL6^@!T]\w
+l B"Ty[!%p >}݄=VσJ%)
+Ȓ$ U؛p|J~ {\!'60+b!:LXX@e_45SqRtUǴˤDԈp{c0 -m ~/}YQ\,%
+'(/WF}fsb6}dǢ ]Konj5s3?/+?b@S
+ 8_!4d,Y;YM/#nq2j^]J?~D1(hj\8?jf#bWp2aZuW(f]<ٷ(7{?OŗtLբ",x`a RXʧY;&RA
+#\[rM z
+?A!-!<!8$`g 㑝0j;-}nUC:Z8fjs5<c0`-+$AU^# ܥ44R3ו c>c6׳D\VBm6B*{4H+G5Sh2-si2ev.Ih0
+h5Ĩ $c?fdoՐ3hks
+.QРiZP /C6jM4-tvp+XQda5dieIf*F!c \7Jg^TLn.OKnVBV1юx]7㞀ΙzBE{ 5rY8BĠԥ_1B`۰Q(j?_!X^f}nRjd֮ CUta!?w)&h4O- VV1o;jXb#Vgʪ/HIz@Na7LaE7"ku"ع* 3|7e1ӭ>9NQ@jLmBnN#3@
+&)[Fʨ
+MYxq:t2i-N5"V` "^$]`D*
+=VQNp(5 1W8c)ՌUW2&>ikBP+^!ܟQ:Ufl@d.+G0>5t6Mzg87Sm
+W*.Zf׵ ϐgb/sԩ$Eq*k#PX@ ~"/R\E$umM|LXӆq!Ln*@
+qb $/3}ԽFxZ@$Y3 &zmօt<3Up%*h
+u Y>U^y]J>U66y]ض̆¬s EE;e:RˍLk{DSJ0rzU-1SI%
+M5q `
+ ^}J̑rUO!5Iٽ;aPZȈ5Rߔp )MɎ݊1)e
+B۶h5QPB(BP,J 7˄s[Ҳz@Iэ 1L(tbsB6 fjL/ 9f[
+b+8]Fh^2nubL39|1S}_ <]@_ьI'a eRF#~"+MA-2$)8p؛V IMKe CH"91>"o4Wļ5G)r!CUi0F6rS )7A#kahafau@FbN*XoU/4ςU{nd
+ G d<͙0o@7\Y$ID@JrSC!C Yq].@<v"29@_~~G1e& 8&ҽG~YFAmA|us~8rv7gOcxzp7Wɳ&,gr/
+
+A/JdkHQiCJifPwm ˟/l,e~?.Y;C9[
+W%dioNn~])'r,[1{xpW:tu}0&/!$:EzB&3z1bs4-
+̬;) I/:bF(XFgdLs5i:/ҕsKz[puu@PcNv09nK(NZ4x>#EjCƧ@mnC/ QBeVc.yd'eǖ@}ny
+ 3kf!z*#PiDq\Sw u#N =8⾒ƳRj@!Cb!MdN%,ըsn,bqbőXB1p֔&q_&12G<߯~| znipVrN~D1tf4fuzvsuRt-v 5m}HO˫QP
+*;VLa]ъ
+ ԳS_XQ5q7Q/RmLiR`~ aj'mh3}uuuv;_9;CvxU"0MA Ԋ&7pY 1u
+5Ym.ص1abJYtl&rnk%Wp8aDS9 ~4hCkL݃. e]M=ߵ! &HR *! vh\^ t&2j hj"HxZ|)
+s[]E`gGӣc0%}t7p)~ƌ
+ar2뮰"fu { 
+?b
+uϥ4pg f #6O~oE*Y9V3V[q܈6n|w|ٻ|7 e~l
+yz"Dqʇ@W5 ]}+~6
+d.;!W=\utA.򣐋\QO\=^WBj<1?Xs2n'=vP`,0ߺ[\vߝϋN
+Z{ѝA $3hG<4³,"U_@>5ТR
+r'8=';AC`geR䃃S>8\ IxK$C,HV{]*SS !nkXB"֒Z+c| 7l=v/.0S38O֥2Y#{ '~0萉NLЌZLjvVc>l abս'QlތS78;'h 8p+[gHh>f+n^|z:Y_v~AڙAW!{Bީ0bf=ؗ
+D:$ (I>\U5Z5%.蠖FLM8%ӡ1Y}Qv۶υIKeJ00r0IEʋ5ŐK:bʮڋe3Ever:lf~3% Wh /
+|ԤI`d;`qlqtfޔmN44 םIH]\{~ɡAt$8MxnR,˘u&c@%XV&:~[7|kµ9)RײHz8yx& g-SOStjIuj~MĎ5ڔCZS bUvJA`K&׼N^0碚wa8^.CgJ{Ƶ2@LZ^?]t^M0(03[M:!+ɴK^lqW$/yy|CT9g]+N x: @}}Wv_pjegB
+/
+RJ&12s끤BO N-q[oezF@CxMu-􂵒]/Jrپ2wA*6iCuY!4TAe| MҶ/!ŭhA73
+.ʬG5=>$-n4*,€t1'}`>]f(C"3=s+fj>AWAEh']7d@cjz7Q<
+,'Cs Z6ᕊ[ZsϐR}io]7 Rڞqdh ^\1 V{w-ՍLA2;O&3H<;H *$_PB,ǥ:fsI9WkwKf/a%6]J!jA.m\\.
+jIl
+  fzdeॐz{-GG(%0k tK` zQVjCkUЙBгn .q, j6W(ίؑTJhl)fQ q>Swe
+~=9y.j][xQ7wޭO>a6JQr[؍ zqbNƃBiƤ]Nɇ( ig;^U4hP =N$eF}Z8c]8ʗNf§265:ffga={FycWQ6Hsb]cqON^FU$ΐGy~^q@LGs"RQj70tAHG9| |k{qn#VD9srcƜݓs6>>7]HW9N[#Q@q=bbz,m7dvsv^wT#Ĺ,!^9 -'}])4\3u{bNW:;(>[/׉~&;d#C~}|*hDqF3%f1vO;ʣO[[? W<'qe|:uixB [; i#]I>?dw*):B^dԎ^%1 ;Xq b
+NPy/>ū4^y'hN#@蛾M0:@c2\pho TSw= xhPB M!eg${h_>|fb*7qd9oz/Y ~p|=?[!,鎉Amvu/M1[0(v[ܞYexW[8Bept9]537G"[e{X0M(>σ)Ć) SXty58*6;^gG3ªy\H'(L_Q#<PιUtm(N.` vm=OMUB ];utJ.8_fn1t [eAQhOm
+;C/&<O@Ǚb
+*/߇()s]."nPCfV.gXg8˿OR@E!FA)n3WiV6 6EmSԞdc1O7 olxI򆯨VQ=@ʹV\!etq{
+8`W,+u/L0%\RӋRS# <,$t-Aΐzh;%JKMAZu- -{x`8 srBb~ ^Oxۀ
+9
+ebXW,
+endstream endobj 188 0 obj <</Filter[/FlateDecode]/Length 6788>>stream
+HWkO/@~?/F#˺vxvOU.#ɍ̊e>]}T5gb4{޾l ooM1b;Uu^W.c6y1MK&blO[;I~kE ;s6fǽbq `٢)}I
+lh6e)֛Eļh.h,"KJ<OzCo0^\U4/_V4QEWqIKWHh%<.N?xHk Mmv?~}V_ѐ__-,Gi vXTeۖQtOo#XjY~K} I_loJm/'E)T=CP{m֯9z1eG|XeErl`F@e*PJgIXz|ዦ,~.(7WHBȗabX\g7}VObiCxfruw/3h@
+Ή$
+/#A:,Q18%R
+W(ܤ 1qd XpHO"9?tLWB֤{TgL&颩njQqGiy{0c@"Q#-nhCzgqhy
+G AT"Z КHX[yHx^b;咊)(P磀7L]Rz
+=H6+%Ǽ}u0,
+ں2Kkt,='"7{A* ql'O3cI`x0R'AF)NRȨNV*,e74+ jV}ae%K
+ ZRAg͊Kdo yO4
+LtcNIs262i ?˶PRލ96/(<sd3Pk**+ X\~L,ׂpCࠃ>M9Mz4ߚE1*?,}mT@,ZI;ʱϰ
+5
+
+76
+l=V)tn|׆|Lg^ooH80B
+[.Ml+AK-0!VcC 2=ntqYhUs x<fS?SRg"}xŶz
+Fji%U~8_HZ3%gξɄ/?(<>d7~DM*.;.gd=$$jF4-NʻZ+G!{yc(y@4zorj;*E3="7 A||6OYG%ۤy*W_(7^uֵYvDBU,
+"£̝b4x9\eCVk?W2aDwRxSNnS碌2 hW;t99U3U~> cȄ3"}sy_zUrAH)Fg%.3oW ]'i(򊔪`Gq,%"jյ[R {AJdNjOB BPg˄y.2?3T~V4
+{xJ{Eo(܈t(VdK&jx=KT\8n,qr:\<hQ[Ό64]нgw{d+'vvD~FUh6Y=/$]9(sRmdbD1̀i)ZvI(cQ}Z_6 ]
+]2
+ =
+ =
+ _> 5
+쥆a.IT78M9
+Pkc.u4(r2ͨr-Aͯ4V7Ȼ'vvD~FUh6Y=/$]9(wR 4bR3ĵP  W/l8/%!d
+f뻤
+H@wT.HbKADDvi饠h6+-
+t2'#slmW`k`UZnD
+S:PV#B·PC8{jK<Ǎ NSZǘgx 5
+|8o)zgw{d+ͽ2z]!Q$D6B:uV IWE0#FsJ$aLKQ ώKBȎJ`_j!ٰt]_K.B*\]B
+H@{T.HbKADDvi饠h6+-
+7M'C甮X`k`UZnD
+S:PV#B·PC8{jK<Ǎ NSZǘgx 5
+x8o)zgw{d+ͽ2=jAH$gTl3NBҕC2H,օ I!}y%AdG%
+0/l/%!C]B
+
+f28J
+qjQnB'$ʅ<ruj5;g+^xȎIr<ȑ0aK \x<
+Bl$zm$|B`J*\[Y]߃{)%2
+d{nq6$@q PG!N-*yW{uDG_7;g+^xȎIr<ȑ0X`S wOFSy(mgef|BhJd22"<h
+endstream endobj 189 0 obj <</Filter[/FlateDecode]/Length 3958>>stream
+HQo80@q@E4Iۧ6)\vPd: *K$?mĉh4m06"E;_X?/v:[)R{}^NgV/5X3e?@|j{ҿ_KnJ2?xg_8,7~ךmDebGmQLcSf2
+xd)^f1 BW"IbFL+!P^,\5YwPziSp[]oj%Z2cA`[֮ڀl7ˬF-7P)~
+Fbt윌rwzih.%^48$²ycbb<2"io0S5l` $M@nx|y7 ?I2UN95qZ:W ycsARLS?@LM*U4D[}dT7Xi^ADc^ނvW`OIh)(<Y
+ןc~L*N*4+oϴp( r݋eX]cagEZ[~j zʌe lY$Ų˳!,6O lBi(us2.MѦ"M01m'*7,+##R.AC8YJ_A
+WɌ$#J
+" ;X}Ş\ѶS3WQy@?&UTV3iV ȟi8Q^&14 :7׻ưè!Ί
+c~LC+-4+oϴq(hD\ތB'մR !ɸx(;GJ+P0Nزy0߱[9p
+czam{aOԊSj&͊3@ ?1C7й /ep윌rzih-)V^,(óYw]e[9ʁVrr׭k@+Z9ʁVr`؏h@Z=Vzbprz࢕ kX()-zpJ=e&r: jφp̪<m4زyC[!
+AW~5ao0ENHl`
+WɌ$#򮯟ezvrnD Kr`rMjMNa/,^ou9R
+*iS+C4g)g/vN95 Zٶ UysIRL_SZ<BF]rrMfpdڠ"%}蜍.7δ
+ՖGXIWg~L3gVak/(;ZݫeX= M@ d d}Xn-ހq[Z%,vi7/ }W[73<j#1QPRQnގ6)|h hQͼ3B\uwt\Ʃ*sBUz!9s
+2ZJ3KlY$n^J nBgx48Fb읥ݼm+a5R$Ѷyg,3*2"
+SUn Bs& yD| ۀnDXHo;sLk3ymuE.璤?N%xމX->34MAE47K(qoAe%Ipv0!um8rouy싕z-z4Xpj+GB+!f/nKqG蔞]ʾ9DA;KGyy;<6VTX bͣQ} (=Қ'5w 4W(z$T<ʗ[.Ys.(#h)̌[\bjwл=;BUi;Bx'y.
+YfpUdDJ%
+Ar]$u:
+@ 0T'
+endstream endobj 162 0 obj [/ICCBased 170 0 R] endobj 190 0 obj <</CreationDate(D:20090527042239-04'00')/Creator(Adobe Illustrator CS4)/ModDate(D:20090730214335-05'00')/Producer(Adobe PDF library 9.00)/Title(colorbox)>> endobj xref
+0 191
+0000000004 65535 f
+0000000016 00000 n
+0000000076 00000 n
+0000048436 00000 n
+0000000005 00000 f
+0000000006 00000 f
+0000000007 00000 f
+0000000008 00000 f
+0000000009 00000 f
+0000000010 00000 f
+0000000011 00000 f
+0000000012 00000 f
+0000000013 00000 f
+0000000014 00000 f
+0000000015 00000 f
+0000000016 00000 f
+0000000017 00000 f
+0000000018 00000 f
+0000000019 00000 f
+0000000020 00000 f
+0000000021 00000 f
+0000000022 00000 f
+0000000023 00000 f
+0000000024 00000 f
+0000000025 00000 f
+0000000026 00000 f
+0000000027 00000 f
+0000000028 00000 f
+0000000029 00000 f
+0000000030 00000 f
+0000000031 00000 f
+0000000032 00000 f
+0000000033 00000 f
+0000000034 00000 f
+0000000035 00000 f
+0000000036 00000 f
+0000000037 00000 f
+0000000038 00000 f
+0000000039 00000 f
+0000000040 00000 f
+0000000041 00000 f
+0000000042 00000 f
+0000000043 00000 f
+0000000044 00000 f
+0000000045 00000 f
+0000000046 00000 f
+0000000047 00000 f
+0000000048 00000 f
+0000000049 00000 f
+0000000050 00000 f
+0000000051 00000 f
+0000000052 00000 f
+0000000053 00000 f
+0000000054 00000 f
+0000000055 00000 f
+0000000056 00000 f
+0000000057 00000 f
+0000000058 00000 f
+0000000059 00000 f
+0000000060 00000 f
+0000000061 00000 f
+0000000062 00000 f
+0000000063 00000 f
+0000000064 00000 f
+0000000065 00000 f
+0000000066 00000 f
+0000000067 00000 f
+0000000068 00000 f
+0000000069 00000 f
+0000000070 00000 f
+0000000071 00000 f
+0000000072 00000 f
+0000000073 00000 f
+0000000074 00000 f
+0000000075 00000 f
+0000000076 00000 f
+0000000077 00000 f
+0000000078 00000 f
+0000000079 00000 f
+0000000080 00000 f
+0000000081 00000 f
+0000000082 00000 f
+0000000083 00000 f
+0000000084 00000 f
+0000000085 00000 f
+0000000086 00000 f
+0000000087 00000 f
+0000000088 00000 f
+0000000089 00000 f
+0000000090 00000 f
+0000000091 00000 f
+0000000092 00000 f
+0000000093 00000 f
+0000000094 00000 f
+0000000095 00000 f
+0000000096 00000 f
+0000000097 00000 f
+0000000098 00000 f
+0000000099 00000 f
+0000000100 00000 f
+0000000101 00000 f
+0000000102 00000 f
+0000000103 00000 f
+0000000104 00000 f
+0000000105 00000 f
+0000000106 00000 f
+0000000107 00000 f
+0000000108 00000 f
+0000000109 00000 f
+0000000110 00000 f
+0000000111 00000 f
+0000000112 00000 f
+0000000113 00000 f
+0000000114 00000 f
+0000000115 00000 f
+0000000117 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000051202 00000 n
+0000048489 00000 n
+0000048844 00000 n
+0000049045 00000 n
+0000061445 00000 n
+0000058207 00000 n
+0000050103 00000 n
+0000049109 00000 n
+0000231123 00000 n
+0000049538 00000 n
+0000049588 00000 n
+0000055520 00000 n
+0000055406 00000 n
+0000051720 00000 n
+0000051805 00000 n
+0000052189 00000 n
+0000055557 00000 n
+0000058244 00000 n
+0000061521 00000 n
+0000062006 00000 n
+0000062952 00000 n
+0000069751 00000 n
+0000084919 00000 n
+0000102822 00000 n
+0000111395 00000 n
+0000126519 00000 n
+0000132206 00000 n
+0000141391 00000 n
+0000143749 00000 n
+0000159943 00000 n
+0000177431 00000 n
+0000183301 00000 n
+0000187819 00000 n
+0000205653 00000 n
+0000220229 00000 n
+0000227091 00000 n
+0000231160 00000 n
+trailer
+<</Size 191/Root 1 0 R/Info 190 0 R/ID[<7EB5FF43BD08164184F35B8300F050C9><E617EB833E197F43BC059F7255614CEE>]>>
+startxref
+231333
+%%EOF
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js
new file mode 100644
index 000000000..9db7adf75
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js
@@ -0,0 +1,4 @@
+// ColorBox v1.3.19.3 - jQuery lightbox plugin
+// (c) 2011 Jack Moore - jacklmoore.com
+// License: http://www.opensource.org/licenses/mit-license.php
+(function(a,b,c){function Z(c,d,e){var g=b.createElement(c);return d&&(g.id=f+d),e&&(g.style.cssText=e),a(g)}function $(a){var b=y.length,c=(Q+a)%b;return c<0?b+c:c}function _(a,b){return Math.round((/%/.test(a)?(b==="x"?z.width():z.height())/100:1)*parseInt(a,10))}function ab(a){return K.photo||/\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(a)}function bb(){var b,c=a.data(P,e);c==null?(K=a.extend({},d),console&&console.log&&console.log("Error: cboxElement missing settings object")):K=a.extend({},c);for(b in K)a.isFunction(K[b])&&b.slice(0,2)!=="on"&&(K[b]=K[b].call(P));K.rel=K.rel||P.rel||"nofollow",K.href=K.href||a(P).attr("href"),K.title=K.title||P.title,typeof K.href=="string"&&(K.href=a.trim(K.href))}function cb(b,c){a.event.trigger(b),c&&c.call(P)}function db(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;K.slideshow&&y[1]?(d=function(){F.text(K.slideshowStop).unbind(c).bind(j,function(){if(K.loop||y[Q+1])a=setTimeout(W.next,K.slideshowSpeed)}).bind(i,function(){clearTimeout(a)}).one(c+" "+k,e),r.removeClass(b+"off").addClass(b+"on"),a=setTimeout(W.next,K.slideshowSpeed)},e=function(){clearTimeout(a),F.text(K.slideshowStart).unbind([j,i,k,c].join(" ")).one(c,function(){W.next(),d()}),r.removeClass(b+"on").addClass(b+"off")},K.slideshowAuto?d():e()):r.removeClass(b+"off "+b+"on")}function eb(b){U||(P=b,bb(),y=a(P),Q=0,K.rel!=="nofollow"&&(y=a("."+g).filter(function(){var b=a.data(this,e),c;return b&&(c=b.rel||this.rel),c===K.rel}),Q=y.index(P),Q===-1&&(y=y.add(P),Q=y.length-1)),S||(S=T=!0,r.show(),K.returnFocus&&a(P).blur().one(l,function(){a(this).focus()}),q.css({opacity:+K.opacity,cursor:K.overlayClose?"pointer":"auto"}).show(),K.w=_(K.initialWidth,"x"),K.h=_(K.initialHeight,"y"),W.position(),o&&z.bind("resize."+p+" scroll."+p,function(){q.css({width:z.width(),height:z.height(),top:z.scrollTop(),left:z.scrollLeft()})}).trigger("resize."+p),cb(h,K.onOpen),J.add(D).hide(),I.html(K.close).show()),W.load(!0))}function fb(){!r&&b.body&&(Y=!1,z=a(c),r=Z(X).attr({id:e,"class":n?f+(o?"IE6":"IE"):""}).hide(),q=Z(X,"Overlay",o?"position:absolute":"").hide(),s=Z(X,"Wrapper"),t=Z(X,"Content").append(A=Z(X,"LoadedContent","width:0; height:0; overflow:hidden"),C=Z(X,"LoadingOverlay").add(Z(X,"LoadingGraphic")),D=Z(X,"Title"),E=Z(X,"Current"),G=Z(X,"Next"),H=Z(X,"Previous"),F=Z(X,"Slideshow").bind(h,db),I=Z(X,"Close")),s.append(Z(X).append(Z(X,"TopLeft"),u=Z(X,"TopCenter"),Z(X,"TopRight")),Z(X,!1,"clear:left").append(v=Z(X,"MiddleLeft"),t,w=Z(X,"MiddleRight")),Z(X,!1,"clear:left").append(Z(X,"BottomLeft"),x=Z(X,"BottomCenter"),Z(X,"BottomRight"))).find("div div").css({"float":"left"}),B=Z(X,!1,"position:absolute; width:9999px; visibility:hidden; display:none"),J=G.add(H).add(E).add(F),a(b.body).append(q,r.append(s,B)))}function gb(){return r?(Y||(Y=!0,L=u.height()+x.height()+t.outerHeight(!0)-t.height(),M=v.width()+w.width()+t.outerWidth(!0)-t.width(),N=A.outerHeight(!0),O=A.outerWidth(!0),r.css({"padding-bottom":L,"padding-right":M}),G.click(function(){W.next()}),H.click(function(){W.prev()}),I.click(function(){W.close()}),q.click(function(){K.overlayClose&&W.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;S&&K.escKey&&b===27&&(a.preventDefault(),W.close()),S&&K.arrowKey&&y[1]&&(b===37?(a.preventDefault(),H.click()):b===39&&(a.preventDefault(),G.click()))}),a("."+g,b).live("click",function(a){a.which>1||a.shiftKey||a.altKey||a.metaKey||(a.preventDefault(),eb(this))})),!0):!1}var d={transition:"elastic",speed:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,inline:!1,html:!1,iframe:!1,fastIframe:!0,photo:!1,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",open:!1,returnFocus:!0,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:undefined},e="colorbox",f="cbox",g=f+"Element",h=f+"_open",i=f+"_load",j=f+"_complete",k=f+"_cleanup",l=f+"_closed",m=f+"_purge",n=!a.support.opacity&&!a.support.style,o=n&&!c.XMLHttpRequest,p=f+"_IE6",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X="div",Y;if(a.colorbox)return;a(fb),W=a.fn[e]=a[e]=function(b,c){var f=this;b=b||{},fb();if(gb()){if(!f[0]){if(f.selector)return f;f=a("<a/>"),b.open=!0}c&&(b.onComplete=c),f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b))}).addClass(g),(a.isFunction(b.open)&&b.open.call(f)||b.open)&&eb(f[0])}return f},W.position=function(a,b){function i(a){u[0].style.width=x[0].style.width=t[0].style.width=a.style.width,t[0].style.height=v[0].style.height=w[0].style.height=a.style.height}var c=0,d=0,e=r.offset(),g,h;z.unbind("resize."+f),r.css({top:-9e4,left:-9e4}),g=z.scrollTop(),h=z.scrollLeft(),K.fixed&&!o?(e.top-=g,e.left-=h,r.css({position:"fixed"})):(c=g,d=h,r.css({position:"absolute"})),K.right!==!1?d+=Math.max(z.width()-K.w-O-M-_(K.right,"x"),0):K.left!==!1?d+=_(K.left,"x"):d+=Math.round(Math.max(z.width()-K.w-O-M,0)/2),K.bottom!==!1?c+=Math.max(z.height()-K.h-N-L-_(K.bottom,"y"),0):K.top!==!1?c+=_(K.top,"y"):c+=Math.round(Math.max(z.height()-K.h-N-L,0)/2),r.css({top:e.top,left:e.left}),a=r.width()===K.w+O&&r.height()===K.h+N?0:a||0,s[0].style.width=s[0].style.height="9999px",r.dequeue().animate({width:K.w+O,height:K.h+N,top:c,left:d},{duration:a,complete:function(){i(this),T=!1,s[0].style.width=K.w+O+M+"px",s[0].style.height=K.h+N+L+"px",K.reposition&&setTimeout(function(){z.bind("resize."+f,W.position)},1),b&&b()},step:function(){i(this)}})},W.resize=function(a){S&&(a=a||{},a.width&&(K.w=_(a.width,"x")-O-M),a.innerWidth&&(K.w=_(a.innerWidth,"x")),A.css({width:K.w}),a.height&&(K.h=_(a.height,"y")-N-L),a.innerHeight&&(K.h=_(a.innerHeight,"y")),!a.innerHeight&&!a.height&&(A.css({height:"auto"}),K.h=A.height()),A.css({height:K.h}),W.position(K.transition==="none"?0:K.speed))},W.prep=function(b){function g(){return K.w=K.w||A.width(),K.w=K.mw&&K.mw<K.w?K.mw:K.w,K.w}function h(){return K.h=K.h||A.height(),K.h=K.mh&&K.mh<K.h?K.mh:K.h,K.h}if(!S)return;var c,d=K.transition==="none"?0:K.speed;A.remove(),A=Z(X,"LoadedContent").append(b),A.hide().appendTo(B.show()).css({width:g(),overflow:K.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(t),B.hide(),a(R).css({"float":"none"}),o&&a("select").not(r.find("select")).filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one(k,function(){this.style.visibility="inherit"}),c=function(){function s(){n&&r[0].style.removeAttribute("filter")}var b,c,g=y.length,h,i="frameBorder",k="allowTransparency",l,o,p,q;if(!S)return;l=function(){clearTimeout(V),C.hide(),cb(j,K.onComplete)},n&&R&&A.fadeIn(100),D.html(K.title).add(A).show();if(g>1){typeof K.current=="string"&&E.html(K.current.replace("{current}",Q+1).replace("{total}",g)).show(),G[K.loop||Q<g-1?"show":"hide"]().html(K.next),H[K.loop||Q?"show":"hide"]().html(K.previous),K.slideshow&&F.show();if(K.preloading){b=[$(-1),$(1)];while(c=y[b.pop()])q=a.data(c,e),q&&q.href?(o=q.href,a.isFunction(o)&&(o=o.call(c))):o=c.href,ab(o)&&(p=new Image,p.src=o)}}else J.hide();K.iframe?(h=Z("iframe")[0],i in h&&(h[i]=0),k in h&&(h[k]="true"),h.name=f+ +(new Date),K.fastIframe?l():a(h).one("load",l),h.src=K.href,K.scrolling||(h.scrolling="no"),a(h).addClass(f+"Iframe").appendTo(A).one(m,function(){h.src="//about:blank"})):l(),K.transition==="fade"?r.fadeTo(d,1,s):s()},K.transition==="fade"?r.fadeTo(d,0,function(){W.position(0,c)}):W.position(d,c)},W.load=function(b){var c,d,e=W.prep;T=!0,R=!1,P=y[Q],b||bb(),cb(m),cb(i,K.onLoad),K.h=K.height?_(K.height,"y")-N-L:K.innerHeight&&_(K.innerHeight,"y"),K.w=K.width?_(K.width,"x")-O-M:K.innerWidth&&_(K.innerWidth,"x"),K.mw=K.w,K.mh=K.h,K.maxWidth&&(K.mw=_(K.maxWidth,"x")-O-M,K.mw=K.w&&K.w<K.mw?K.w:K.mw),K.maxHeight&&(K.mh=_(K.maxHeight,"y")-N-L,K.mh=K.h&&K.h<K.mh?K.h:K.mh),c=K.href,V=setTimeout(function(){C.show()},100),K.inline?(Z(X).hide().insertBefore(a(c)[0]).one(m,function(){a(this).replaceWith(A.children())}),e(a(c))):K.iframe?e(" "):K.html?e(K.html):ab(c)?(a(R=new Image).addClass(f+"Photo").error(function(){K.title=!1,e(Z(X,"Error").html(K.imgError))}).load(function(){var a;R.onload=null,K.scalePhotos&&(d=function(){R.height-=R.height*a,R.width-=R.width*a},K.mw&&R.width>K.mw&&(a=(R.width-K.mw)/R.width,d()),K.mh&&R.height>K.mh&&(a=(R.height-K.mh)/R.height,d())),K.h&&(R.style.marginTop=Math.max(K.h-R.height,0)/2+"px"),y[1]&&(K.loop||y[Q+1])&&(R.style.cursor="pointer",R.onclick=function(){W.next()}),n&&(R.style.msInterpolationMode="bicubic"),setTimeout(function(){e(R)},1)}),setTimeout(function(){R.src=c},1)):c&&B.load(c,K.data,function(b,c,d){e(c==="error"?Z(X,"Error").html(K.xhrError):a(this).contents())})},W.next=function(){!T&&y[1]&&(K.loop||y[Q+1])&&(Q=$(1),W.load())},W.prev=function(){!T&&y[1]&&(K.loop||Q)&&(Q=$(-1),W.load())},W.close=function(){S&&!U&&(U=!0,S=!1,cb(k,K.onCleanup),z.unbind("."+f+" ."+p),q.fadeTo(200,0),r.stop().fadeTo(300,0,function(){r.add(q).css({opacity:1,cursor:"auto"}).hide(),cb(m),A.remove(),setTimeout(function(){U=!1,cb(l,K.onClosed)},1)}))},W.remove=function(){a([]).add(r).add(q).remove(),r=null,a("."+g).removeData(e).removeClass(g).die()},W.element=function(){return a(P)},W.settings=d})(jQuery,document,this); \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js
new file mode 100644
index 000000000..28673a45d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js
@@ -0,0 +1,926 @@
+// ColorBox v1.3.19.3 - jQuery lightbox plugin
+// (c) 2011 Jack Moore - jacklmoore.com
+// License: http://www.opensource.org/licenses/mit-license.php
+(function ($, document, window) {
+ var
+ // Default settings object.
+ // See http://jacklmoore.com/colorbox for details.
+ defaults = {
+ transition: "elastic",
+ speed: 300,
+ width: false,
+ initialWidth: "600",
+ innerWidth: false,
+ maxWidth: false,
+ height: false,
+ initialHeight: "450",
+ innerHeight: false,
+ maxHeight: false,
+ scalePhotos: true,
+ scrolling: true,
+ inline: false,
+ html: false,
+ iframe: false,
+ fastIframe: true,
+ photo: false,
+ href: false,
+ title: false,
+ rel: false,
+ opacity: 0.9,
+ preloading: true,
+
+ current: "image {current} of {total}",
+ previous: "previous",
+ next: "next",
+ close: "close",
+ xhrError: "This content failed to load.",
+ imgError: "This image failed to load.",
+
+ open: false,
+ returnFocus: true,
+ reposition: true,
+ loop: true,
+ slideshow: false,
+ slideshowAuto: true,
+ slideshowSpeed: 2500,
+ slideshowStart: "start slideshow",
+ slideshowStop: "stop slideshow",
+ onOpen: false,
+ onLoad: false,
+ onComplete: false,
+ onCleanup: false,
+ onClosed: false,
+ overlayClose: true,
+ escKey: true,
+ arrowKey: true,
+ top: false,
+ bottom: false,
+ left: false,
+ right: false,
+ fixed: false,
+ data: undefined
+ },
+
+ // Abstracting the HTML and event identifiers for easy rebranding
+ colorbox = 'colorbox',
+ prefix = 'cbox',
+ boxElement = prefix + 'Element',
+
+ // Events
+ event_open = prefix + '_open',
+ event_load = prefix + '_load',
+ event_complete = prefix + '_complete',
+ event_cleanup = prefix + '_cleanup',
+ event_closed = prefix + '_closed',
+ event_purge = prefix + '_purge',
+
+ // Special Handling for IE
+ isIE = !$.support.opacity && !$.support.style, // IE7 & IE8
+ isIE6 = isIE && !window.XMLHttpRequest, // IE6
+ event_ie6 = prefix + '_IE6',
+
+ // Cached jQuery Object Variables
+ $overlay,
+ $box,
+ $wrap,
+ $content,
+ $topBorder,
+ $leftBorder,
+ $rightBorder,
+ $bottomBorder,
+ $related,
+ $window,
+ $loaded,
+ $loadingBay,
+ $loadingOverlay,
+ $title,
+ $current,
+ $slideshow,
+ $next,
+ $prev,
+ $close,
+ $groupControls,
+
+ // Variables for cached values or use across multiple functions
+ settings,
+ interfaceHeight,
+ interfaceWidth,
+ loadedHeight,
+ loadedWidth,
+ element,
+ index,
+ photo,
+ open,
+ active,
+ closing,
+ loadingTimer,
+ publicMethod,
+ div = "div",
+ init;
+
+ // ****************
+ // HELPER FUNCTIONS
+ // ****************
+
+ // Convience function for creating new jQuery objects
+ function $tag(tag, id, css) {
+ var element = document.createElement(tag);
+
+ if (id) {
+ element.id = prefix + id;
+ }
+
+ if (css) {
+ element.style.cssText = css;
+ }
+
+ return $(element);
+ }
+
+ // Determine the next and previous members in a group.
+ function getIndex(increment) {
+ var
+ max = $related.length,
+ newIndex = (index + increment) % max;
+
+ return (newIndex < 0) ? max + newIndex : newIndex;
+ }
+
+ // Convert '%' and 'px' values to integers
+ function setSize(size, dimension) {
+ return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : $window.height()) / 100) : 1) * parseInt(size, 10));
+ }
+
+ // Checks an href to see if it is a photo.
+ // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
+ function isImage(url) {
+ return settings.photo || /\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(url);
+ }
+
+ // Assigns function results to their respective properties
+ function makeSettings() {
+ var i,
+ data = $.data(element, colorbox);
+
+ if (data == null) {
+ settings = $.extend({}, defaults);
+ if (console && console.log) {
+ console.log('Error: cboxElement missing settings object')
+ }
+ } else {
+ settings = $.extend({}, data);
+ }
+
+ for (i in settings) {
+ if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
+ settings[i] = settings[i].call(element);
+ }
+ }
+
+ settings.rel = settings.rel || element.rel || 'nofollow';
+ settings.href = settings.href || $(element).attr('href');
+ settings.title = settings.title || element.title;
+
+ if (typeof settings.href === "string") {
+ settings.href = $.trim(settings.href);
+ }
+ }
+
+ function trigger(event, callback) {
+ $.event.trigger(event);
+ if (callback) {
+ callback.call(element);
+ }
+ }
+
+ // Slideshow functionality
+ function slideshow() {
+ var
+ timeOut,
+ className = prefix + "Slideshow_",
+ click = "click." + prefix,
+ start,
+ stop,
+ clear;
+
+ if (settings.slideshow && $related[1]) {
+ start = function () {
+ $slideshow
+ .text(settings.slideshowStop)
+ .unbind(click)
+ .bind(event_complete, function () {
+ if (settings.loop || $related[index + 1]) {
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
+ }
+ })
+ .bind(event_load, function () {
+ clearTimeout(timeOut);
+ })
+ .one(click + ' ' + event_cleanup, stop);
+ $box.removeClass(className + "off").addClass(className + "on");
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
+ };
+
+ stop = function () {
+ clearTimeout(timeOut);
+ $slideshow
+ .text(settings.slideshowStart)
+ .unbind([event_complete, event_load, event_cleanup, click].join(' '))
+ .one(click, function () {
+ publicMethod.next();
+ start();
+ });
+ $box.removeClass(className + "on").addClass(className + "off");
+ };
+
+ if (settings.slideshowAuto) {
+ start();
+ } else {
+ stop();
+ }
+ } else {
+ $box.removeClass(className + "off " + className + "on");
+ }
+ }
+
+ function launch(target) {
+ if (!closing) {
+
+ element = target;
+
+ makeSettings();
+
+ $related = $(element);
+
+ index = 0;
+
+ if (settings.rel !== 'nofollow') {
+ $related = $('.' + boxElement).filter(function () {
+ var data = $.data(this, colorbox),
+ relRelated;
+
+ if (data) {
+ relRelated = data.rel || this.rel;
+ }
+
+ return (relRelated === settings.rel);
+ });
+ index = $related.index(element);
+
+ // Check direct calls to ColorBox.
+ if (index === -1) {
+ $related = $related.add(element);
+ index = $related.length - 1;
+ }
+ }
+
+ if (!open) {
+ open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+
+ $box.show();
+
+ if (settings.returnFocus) {
+ $(element).blur().one(event_closed, function () {
+ $(this).focus();
+ });
+ }
+
+ // +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5'
+ $overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show();
+
+ // Opens inital empty ColorBox prior to content being loaded.
+ settings.w = setSize(settings.initialWidth, 'x');
+ settings.h = setSize(settings.initialHeight, 'y');
+ publicMethod.position();
+
+ if (isIE6) {
+ $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
+ $overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
+ }).trigger('resize.' + event_ie6);
+ }
+
+ trigger(event_open, settings.onOpen);
+
+ $groupControls.add($title).hide();
+
+ $close.html(settings.close).show();
+ }
+
+ publicMethod.load(true);
+ }
+ }
+
+ // ColorBox's markup needs to be added to the DOM prior to being called
+ // so that the browser will go ahead and load the CSS background images.
+ function appendHTML() {
+ if (!$box && document.body) {
+ init = false;
+
+ $window = $(window);
+ $box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();
+ $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
+ $wrap = $tag(div, "Wrapper");
+ $content = $tag(div, "Content").append(
+ $loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),
+ $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic")),
+ $title = $tag(div, "Title"),
+ $current = $tag(div, "Current"),
+ $next = $tag(div, "Next"),
+ $prev = $tag(div, "Previous"),
+ $slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),
+ $close = $tag(div, "Close")
+ );
+
+ $wrap.append( // The 3x3 Grid that makes up ColorBox
+ $tag(div).append(
+ $tag(div, "TopLeft"),
+ $topBorder = $tag(div, "TopCenter"),
+ $tag(div, "TopRight")
+ ),
+ $tag(div, false, 'clear:left').append(
+ $leftBorder = $tag(div, "MiddleLeft"),
+ $content,
+ $rightBorder = $tag(div, "MiddleRight")
+ ),
+ $tag(div, false, 'clear:left').append(
+ $tag(div, "BottomLeft"),
+ $bottomBorder = $tag(div, "BottomCenter"),
+ $tag(div, "BottomRight")
+ )
+ ).find('div div').css({'float': 'left'});
+
+ $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
+
+ $groupControls = $next.add($prev).add($current).add($slideshow);
+
+ $(document.body).append($overlay, $box.append($wrap, $loadingBay));
+ }
+ }
+
+ // Add ColorBox's event bindings
+ function addBindings() {
+ if ($box) {
+ if (!init) {
+ init = true;
+
+ // Cache values needed for size calculations
+ interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
+ interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
+ loadedHeight = $loaded.outerHeight(true);
+ loadedWidth = $loaded.outerWidth(true);
+
+ // Setting padding to remove the need to do size conversions during the animation step.
+ $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});
+
+ // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
+ $next.click(function () {
+ publicMethod.next();
+ });
+ $prev.click(function () {
+ publicMethod.prev();
+ });
+ $close.click(function () {
+ publicMethod.close();
+ });
+ $overlay.click(function () {
+ if (settings.overlayClose) {
+ publicMethod.close();
+ }
+ });
+
+ // Key Bindings
+ $(document).bind('keydown.' + prefix, function (e) {
+ var key = e.keyCode;
+ if (open && settings.escKey && key === 27) {
+ e.preventDefault();
+ publicMethod.close();
+ }
+ if (open && settings.arrowKey && $related[1]) {
+ if (key === 37) {
+ e.preventDefault();
+ $prev.click();
+ } else if (key === 39) {
+ e.preventDefault();
+ $next.click();
+ }
+ }
+ });
+
+ $('.' + boxElement, document).live('click', function (e) {
+ // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
+ // See: http://jacklmoore.com/notes/click-events/
+ if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
+ e.preventDefault();
+ launch(this);
+ }
+ });
+ }
+ return true;
+ }
+ return false;
+ }
+
+ // Don't do anything if ColorBox already exists.
+ if ($.colorbox) {
+ return;
+ }
+
+ // Append the HTML when the DOM loads
+ $(appendHTML);
+
+
+ // ****************
+ // PUBLIC FUNCTIONS
+ // Usage format: $.fn.colorbox.close();
+ // Usage from within an iframe: parent.$.fn.colorbox.close();
+ // ****************
+
+ publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
+ var $this = this;
+
+ options = options || {};
+
+ appendHTML();
+
+ if (addBindings()) {
+ if (!$this[0]) {
+ if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
+ return $this;
+ }
+ // if no selector was given (ie. $.colorbox()), create a temporary element to work with
+ $this = $('<a/>');
+ options.open = true; // assume an immediate open
+ }
+
+ if (callback) {
+ options.onComplete = callback;
+ }
+
+ $this.each(function () {
+ $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
+ }).addClass(boxElement);
+
+ if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
+ launch($this[0]);
+ }
+ }
+
+ return $this;
+ };
+
+ publicMethod.position = function (speed, loadedCallback) {
+ var
+ top = 0,
+ left = 0,
+ offset = $box.offset(),
+ scrollTop,
+ scrollLeft;
+
+ $window.unbind('resize.' + prefix);
+
+ // remove the modal so that it doesn't influence the document width/height
+ $box.css({top: -9e4, left: -9e4});
+
+ scrollTop = $window.scrollTop();
+ scrollLeft = $window.scrollLeft();
+
+ if (settings.fixed && !isIE6) {
+ offset.top -= scrollTop;
+ offset.left -= scrollLeft;
+ $box.css({position: 'fixed'});
+ } else {
+ top = scrollTop;
+ left = scrollLeft;
+ $box.css({position: 'absolute'});
+ }
+
+ // keeps the top and left positions within the browser's viewport.
+ if (settings.right !== false) {
+ left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
+ } else if (settings.left !== false) {
+ left += setSize(settings.left, 'x');
+ } else {
+ left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
+ }
+
+ if (settings.bottom !== false) {
+ top += Math.max($window.height() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
+ } else if (settings.top !== false) {
+ top += setSize(settings.top, 'y');
+ } else {
+ top += Math.round(Math.max($window.height() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+ }
+
+ $box.css({top: offset.top, left: offset.left});
+
+ // setting the speed to 0 to reduce the delay between same-sized content.
+ speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
+
+ // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
+ // but it has to be shrank down around the size of div#colorbox when it's done. If not,
+ // it can invoke an obscure IE bug when using iframes.
+ $wrap[0].style.width = $wrap[0].style.height = "9999px";
+
+ function modalDimensions(that) {
+ $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
+ $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
+ }
+
+ $box.dequeue().animate({width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}, {
+ duration: speed,
+ complete: function () {
+ modalDimensions(this);
+
+ active = false;
+
+ // shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
+ $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
+ $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
+
+ if (settings.reposition) {
+ setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
+ $window.bind('resize.' + prefix, publicMethod.position);
+ }, 1);
+ }
+
+ if (loadedCallback) {
+ loadedCallback();
+ }
+ },
+ step: function () {
+ modalDimensions(this);
+ }
+ });
+ };
+
+ publicMethod.resize = function (options) {
+ if (open) {
+ options = options || {};
+
+ if (options.width) {
+ settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
+ }
+ if (options.innerWidth) {
+ settings.w = setSize(options.innerWidth, 'x');
+ }
+ $loaded.css({width: settings.w});
+
+ if (options.height) {
+ settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
+ }
+ if (options.innerHeight) {
+ settings.h = setSize(options.innerHeight, 'y');
+ }
+ if (!options.innerHeight && !options.height) {
+ $loaded.css({height: "auto"});
+ settings.h = $loaded.height();
+ }
+ $loaded.css({height: settings.h});
+
+ publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
+ }
+ };
+
+ publicMethod.prep = function (object) {
+ if (!open) {
+ return;
+ }
+
+ var callback, speed = settings.transition === "none" ? 0 : settings.speed;
+
+ $loaded.remove();
+ $loaded = $tag(div, 'LoadedContent').append(object);
+
+ function getWidth() {
+ settings.w = settings.w || $loaded.width();
+ settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
+ return settings.w;
+ }
+ function getHeight() {
+ settings.h = settings.h || $loaded.height();
+ settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
+ return settings.h;
+ }
+
+ $loaded.hide()
+ .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
+ .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
+ .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
+ .prependTo($content);
+
+ $loadingBay.hide();
+
+ // floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
+ //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
+
+ $(photo).css({'float': 'none'});
+
+ // Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
+ if (isIE6) {
+ $('select').not($box.find('select')).filter(function () {
+ return this.style.visibility !== 'hidden';
+ }).css({'visibility': 'hidden'}).one(event_cleanup, function () {
+ this.style.visibility = 'inherit';
+ });
+ }
+
+ callback = function () {
+ var preload,
+ i,
+ total = $related.length,
+ iframe,
+ frameBorder = 'frameBorder',
+ allowTransparency = 'allowTransparency',
+ complete,
+ src,
+ img,
+ data;
+
+ if (!open) {
+ return;
+ }
+
+ function removeFilter() {
+ if (isIE) {
+ $box[0].style.removeAttribute('filter');
+ }
+ }
+
+ complete = function () {
+ clearTimeout(loadingTimer);
+ $loadingOverlay.hide();
+ trigger(event_complete, settings.onComplete);
+ };
+
+ if (isIE) {
+ //This fadeIn helps the bicubic resampling to kick-in.
+ if (photo) {
+ $loaded.fadeIn(100);
+ }
+ }
+
+ $title.html(settings.title).add($loaded).show();
+
+ if (total > 1) { // handle grouping
+ if (typeof settings.current === "string") {
+ $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
+ }
+
+ $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
+ $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
+
+ if (settings.slideshow) {
+ $slideshow.show();
+ }
+
+ // Preloads images within a rel group
+ if (settings.preloading) {
+ preload = [
+ getIndex(-1),
+ getIndex(1)
+ ];
+ while (i = $related[preload.pop()]) {
+ data = $.data(i, colorbox);
+
+ if (data && data.href) {
+ src = data.href;
+ if ($.isFunction(src)) {
+ src = src.call(i);
+ }
+ } else {
+ src = i.href;
+ }
+
+ if (isImage(src)) {
+ img = new Image();
+ img.src = src;
+ }
+ }
+ }
+ } else {
+ $groupControls.hide();
+ }
+
+ if (settings.iframe) {
+ iframe = $tag('iframe')[0];
+
+ if (frameBorder in iframe) {
+ iframe[frameBorder] = 0;
+ }
+ if (allowTransparency in iframe) {
+ iframe[allowTransparency] = "true";
+ }
+ // give the iframe a unique name to prevent caching
+ iframe.name = prefix + (+new Date());
+ if (settings.fastIframe) {
+ complete();
+ } else {
+ $(iframe).one('load', complete);
+ }
+ iframe.src = settings.href;
+ if (!settings.scrolling) {
+ iframe.scrolling = "no";
+ }
+ $(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {
+ iframe.src = "//about:blank";
+ });
+ } else {
+ complete();
+ }
+
+ if (settings.transition === 'fade') {
+ $box.fadeTo(speed, 1, removeFilter);
+ } else {
+ removeFilter();
+ }
+ };
+
+ if (settings.transition === 'fade') {
+ $box.fadeTo(speed, 0, function () {
+ publicMethod.position(0, callback);
+ });
+ } else {
+ publicMethod.position(speed, callback);
+ }
+ };
+
+ publicMethod.load = function (launched) {
+ var href, setResize, prep = publicMethod.prep;
+
+ active = true;
+
+ photo = false;
+
+ element = $related[index];
+
+ if (!launched) {
+ makeSettings();
+ }
+
+ trigger(event_purge);
+
+ trigger(event_load, settings.onLoad);
+
+ settings.h = settings.height ?
+ setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
+ settings.innerHeight && setSize(settings.innerHeight, 'y');
+
+ settings.w = settings.width ?
+ setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
+ settings.innerWidth && setSize(settings.innerWidth, 'x');
+
+ // Sets the minimum dimensions for use in image scaling
+ settings.mw = settings.w;
+ settings.mh = settings.h;
+
+ // Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
+ // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
+ if (settings.maxWidth) {
+ settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
+ settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
+ }
+ if (settings.maxHeight) {
+ settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
+ settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
+ }
+
+ href = settings.href;
+
+ loadingTimer = setTimeout(function () {
+ $loadingOverlay.show();
+ }, 100);
+
+ if (settings.inline) {
+ // Inserts an empty placeholder where inline content is being pulled from.
+ // An event is bound to put inline content back when ColorBox closes or loads new content.
+ $tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () {
+ $(this).replaceWith($loaded.children());
+ });
+ prep($(href));
+ } else if (settings.iframe) {
+ // IFrame element won't be added to the DOM until it is ready to be displayed,
+ // to avoid problems with DOM-ready JS that might be trying to run in that iframe.
+ prep(" ");
+ } else if (settings.html) {
+ prep(settings.html);
+ } else if (isImage(href)) {
+ $(photo = new Image())
+ .addClass(prefix + 'Photo')
+ .error(function () {
+ settings.title = false;
+ prep($tag(div, 'Error').html(settings.imgError));
+ })
+ .load(function () {
+ var percent;
+ photo.onload = null; //stops animated gifs from firing the onload repeatedly.
+
+ if (settings.scalePhotos) {
+ setResize = function () {
+ photo.height -= photo.height * percent;
+ photo.width -= photo.width * percent;
+ };
+ if (settings.mw && photo.width > settings.mw) {
+ percent = (photo.width - settings.mw) / photo.width;
+ setResize();
+ }
+ if (settings.mh && photo.height > settings.mh) {
+ percent = (photo.height - settings.mh) / photo.height;
+ setResize();
+ }
+ }
+
+ if (settings.h) {
+ photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px';
+ }
+
+ if ($related[1] && (settings.loop || $related[index + 1])) {
+ photo.style.cursor = 'pointer';
+ photo.onclick = function () {
+ publicMethod.next();
+ };
+ }
+
+ if (isIE) {
+ photo.style.msInterpolationMode = 'bicubic';
+ }
+
+ setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+ prep(photo);
+ }, 1);
+ });
+
+ setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
+ photo.src = href;
+ }, 1);
+ } else if (href) {
+ $loadingBay.load(href, settings.data, function (data, status, xhr) {
+ prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
+ });
+ }
+ };
+
+ // Navigates to the next page/image in a set.
+ publicMethod.next = function () {
+ if (!active && $related[1] && (settings.loop || $related[index + 1])) {
+ index = getIndex(1);
+ publicMethod.load();
+ }
+ };
+
+ publicMethod.prev = function () {
+ if (!active && $related[1] && (settings.loop || index)) {
+ index = getIndex(-1);
+ publicMethod.load();
+ }
+ };
+
+ // Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
+ publicMethod.close = function () {
+ if (open && !closing) {
+
+ closing = true;
+
+ open = false;
+
+ trigger(event_cleanup, settings.onCleanup);
+
+ $window.unbind('.' + prefix + ' .' + event_ie6);
+
+ $overlay.fadeTo(200, 0);
+
+ $box.stop().fadeTo(300, 0, function () {
+
+ $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
+
+ trigger(event_purge);
+
+ $loaded.remove();
+
+ setTimeout(function () {
+ closing = false;
+ trigger(event_closed, settings.onClosed);
+ }, 1);
+ });
+ }
+ };
+
+ // Removes changes ColorBox made to the document, but does not remove the plugin
+ // from jQuery.
+ publicMethod.remove = function () {
+ $([]).add($box).add($overlay).remove();
+ $box = null;
+ $('.' + boxElement)
+ .removeData(colorbox)
+ .removeClass(boxElement)
+ .die();
+ };
+
+ // A method for fetching the current element ColorBox is referencing.
+ // returns a jQuery object.
+ publicMethod.element = function () {
+ return $(element);
+ };
+
+ publicMethod.settings = defaults;
+
+}(jQuery, document, this)); \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ajax.html b/mod/colorbox/vendors/jquery/colorbox/content/ajax.html
new file mode 100644
index 000000000..e772638ad
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ajax.html
@@ -0,0 +1,11 @@
+<div id='homer' style="background:url(../content/homer.jpg) right center no-repeat #ececec; height:135px; width:280px; padding:30px 10px;">
+ <strong>Homer</strong><br/>
+ <em>\noun\</em><br/>
+ <strong>1.</strong> American bonehead<br/>
+ <strong>2. Pull a Homer-</strong><br/>
+ to succeed despite<br/>
+ idiocy
+</div>
+<script>
+ $('#homer strong').css({color:'red'});
+</script> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/flash.html b/mod/colorbox/vendors/jquery/colorbox/content/flash.html
new file mode 100644
index 000000000..c83f7c44f
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/flash.html
@@ -0,0 +1,8 @@
+<div style="width:504px; height:412px; overflow:hidden;">
+ <object>
+ <param name="allowfullscreen" value="true" /><param name="wmode" value="opaque" />
+ <param name="allowscriptaccess" value="always" />
+ <param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2285902&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" />
+ <embed src="http://vimeo.com/moogaloop.swf?clip_id=2285902&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" wmode="opaque" allowscriptaccess="always" width="504" height="412"></embed>
+ </object>
+</div> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg b/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg
new file mode 100644
index 000000000..87ec76c99
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg b/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg
new file mode 100644
index 000000000..4c717d276
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg
new file mode 100644
index 000000000..aae19a3e6
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg
new file mode 100644
index 000000000..206894489
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg
new file mode 100644
index 000000000..4d64d2400
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css
new file mode 100644
index 000000000..397fe3dca
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css
@@ -0,0 +1,86 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
+#colorbox{}
+ #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
+ #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
+ #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
+ #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
+ #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
+ #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
+ #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
+ #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
+ #cboxContent{background:#fff; overflow:hidden;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:28px;}
+ #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
+ #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+ #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
+ #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:-75px -25px;}
+ #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:-50px -25px;}
+ #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:-25px -25px;}
+
+/*
+ The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+ when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
+ See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
+
+/*
+ The following provides PNG transparency support for IE6
+ Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
+*/
+.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
+.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
+.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
+.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
+.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
+.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
+.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
+.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
+
+.cboxIE6 #cboxTopLeft,
+.cboxIE6 #cboxTopCenter,
+.cboxIE6 #cboxTopRight,
+.cboxIE6 #cboxBottomLeft,
+.cboxIE6 #cboxBottomCenter,
+.cboxIE6 #cboxBottomRight,
+.cboxIE6 #cboxMiddleLeft,
+.cboxIE6 #cboxMiddleRight {
+ _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png
new file mode 100644
index 000000000..f463a10d8
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png
new file mode 100644
index 000000000..dcfd6fb9f
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png
new file mode 100644
index 000000000..0d4475edf
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png
new file mode 100644
index 000000000..2775eba89
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png
new file mode 100644
index 000000000..f7f51379c
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png
new file mode 100644
index 000000000..a2d63d156
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png
new file mode 100644
index 000000000..fd7c3e849
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png
new file mode 100644
index 000000000..2937a9cf9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png
new file mode 100644
index 000000000..f9d458b5b
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png
new file mode 100644
index 000000000..74b8583cf
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif
new file mode 100644
index 000000000..b4695d811
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png
new file mode 100644
index 000000000..6ae83e697
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png
new file mode 100644
index 000000000..53ea98f70
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/index.html b/mod/colorbox/vendors/jquery/colorbox/example1/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css
new file mode 100644
index 000000000..fa42bf2f9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css
@@ -0,0 +1,43 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#fff;}
+#colorbox{}
+ #cboxContent{margin-top:32px; overflow:visible;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{background:#000; padding:1px;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxTitle{position:absolute; top:-22px; left:0; color:#000;}
+ #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;}
+ #cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;}
+ #cboxPrevious{background-position:0px 0px; right:44px;}
+ #cboxPrevious:hover{background-position:0px -25px;}
+ #cboxNext{background-position:-25px 0px; right:22px;}
+ #cboxNext:hover{background-position:-25px -25px;}
+ #cboxClose{background-position:-50px 0px; right:0;}
+ #cboxClose:hover{background-position:-50px -25px;}
+ .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;}
+ .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;}
+ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;}
+ .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;}
+ .cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png
new file mode 100644
index 000000000..8569b57f1
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif
new file mode 100644
index 000000000..19c67bbd0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/index.html b/mod/colorbox/vendors/jquery/colorbox/example2/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css
new file mode 100644
index 000000000..36cc9ef42
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css
@@ -0,0 +1,38 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width: none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+#colorbox{}
+ #cboxContent{margin-top:20px;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{border:5px solid #000; background:#fff;}
+ #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
+ #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
+ #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:bottom left;}
+ #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:bottom right;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:bottom center;} \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png
new file mode 100644
index 000000000..e1e97982a
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif
new file mode 100644
index 000000000..19c67bbd0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/index.html b/mod/colorbox/vendors/jquery/colorbox/example3/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css
new file mode 100644
index 000000000..bc5ef3e3d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css
@@ -0,0 +1,82 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#fff;}
+#colorbox{}
+ #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;}
+ #cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;}
+ #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;}
+ #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 -25px;}
+ #cboxBottomCenter{height:25px; background:url(images/border1.png) repeat-x 0 -75px;}
+ #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px -25px;}
+ #cboxMiddleLeft{width:25px; background:url(images/border2.png) repeat-y 0 0;}
+ #cboxMiddleRight{width:25px; background:url(images/border2.png) repeat-y -25px 0;}
+ #cboxContent{background:#fff; overflow:hidden;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:20px;}
+ #cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
+ #cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
+ #cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
+ #cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
+ #cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
+ #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;}
+ #cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
+
+/*
+ The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+ when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
+ See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
+
+/*
+ The following provides PNG transparency support for IE6
+ Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
+*/
+.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
+.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
+.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
+.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
+.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
+.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
+.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
+.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
+
+.cboxIE6 #cboxTopLeft,
+.cboxIE6 #cboxTopCenter,
+.cboxIE6 #cboxTopRight,
+.cboxIE6 #cboxBottomLeft,
+.cboxIE6 #cboxBottomCenter,
+.cboxIE6 #cboxBottomRight,
+.cboxIE6 #cboxMiddleLeft,
+.cboxIE6 #cboxMiddleRight {
+ _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png
new file mode 100644
index 000000000..0ddc70405
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png
new file mode 100644
index 000000000..aa62a0b72
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png
new file mode 100644
index 000000000..12e0e9ac0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png
new file mode 100644
index 000000000..b7a474ae0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png
new file mode 100644
index 000000000..6b6cb159b
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png
new file mode 100644
index 000000000..8d0eb739d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png
new file mode 100644
index 000000000..d65509e30
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png
new file mode 100644
index 000000000..35d8da2d0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png
new file mode 100644
index 000000000..ae9bda040
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png
new file mode 100644
index 000000000..0d8868399
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif
new file mode 100644
index 000000000..602ce3c3a
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/index.html b/mod/colorbox/vendors/jquery/colorbox/example4/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css
new file mode 100644
index 000000000..91301a9b1
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css
@@ -0,0 +1,52 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+#colorbox{}
+ #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
+ #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
+ #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
+ #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;}
+ #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;}
+ #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;}
+ #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;}
+ #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;}
+ #cboxContent{background:#fff; overflow:visible;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:5px;}
+ #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
+ #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
+
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
+ #cboxPrevious{left:0px; background-position: -51px -25px;}
+ #cboxPrevious:hover{background-position:-51px 0px;}
+ #cboxNext{left:27px; background-position:-75px -25px;}
+ #cboxNext:hover{background-position:-75px 0px;}
+ #cboxClose{right:0; background-position:-100px -25px;}
+ #cboxClose:hover{background-position:-100px 0px;}
+
+ .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
+ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
+ .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
+ .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png
new file mode 100644
index 000000000..df13bb6da
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png
new file mode 100644
index 000000000..65cfd1dc9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif
new file mode 100644
index 000000000..b4695d811
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png
new file mode 100644
index 000000000..9de11f467
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/index.html b/mod/colorbox/vendors/jquery/colorbox/example5/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/views/default/css/lightbox.php b/mod/colorbox/views/default/css/lightbox.php
new file mode 100644
index 000000000..e18c02bf8
--- /dev/null
+++ b/mod/colorbox/views/default/css/lightbox.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Colorbox -- Stylesheet
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$jquery_path = elgg_get_site_url() . 'mod/colorbox/vendors/jquery/';
+?>
+
+/*
+ * ColorBox - jQuery Plugin
+ * A lightweight customizable lightbox plugin for jQuery
+ *
+ */
+
+ /*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+body > #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width: none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+body > #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+body > #colorbox{}
+ #cboxContent{margin-top:20px;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{border:5px solid #000; background:#fff;}
+ #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
+ #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
+ #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:bottom left;}
+ #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:bottom right;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxLoadingGraphic{background:url(<?php echo $jquery_path; ?>colorbox/example3/images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:bottom center;}
diff --git a/mod/colorbox/views/default/js/embed/embed.php b/mod/colorbox/views/default/js/embed/embed.php
new file mode 100644
index 000000000..ada6653a8
--- /dev/null
+++ b/mod/colorbox/views/default/js/embed/embed.php
@@ -0,0 +1,171 @@
+<?php
+/**
+ * Colorbox -- Javascript
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ * @override mod/embed/views/default/js/embed/embed.php
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+?>
+
+elgg.provide('elgg.embed');
+
+elgg.embed.init = function() {
+
+ // inserts the embed content into the textarea
+ $(".embed-item").live('click', elgg.embed.insert);
+
+ // caches the current textarea id
+ $(".embed-control").live('click', function() {
+ elgg.embed.textAreaId = /embed-control-(\S)+/.exec($(this).attr('class'))[1];
+ });
+
+ // special pagination helper for lightbox
+ $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.forward);
+
+ $('.embed-section').live('click', elgg.embed.forward);
+
+ $('.elgg-form-embed').live('submit', elgg.embed.submit);
+};
+
+/**
+ * Inserts data attached to an embed list item in textarea
+ *
+ * @todo generalize lightbox closing
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.embed.insert = function(event) {
+ var textAreaId = elgg.embed.textAreaId;
+ var textArea = $('#' + textAreaId);
+
+ // generalize this based on a css class attached to what should be inserted
+ var content = ' ' + $(this).find(".embed-insert").parent().html() + ' ';
+
+ // this is a temporary work-around for #3971
+ if (content.indexOf('thumbnail.php') != -1) {
+ content = content.replace('size=small', 'size=medium');
+ }
+
+ textArea.val(textArea.val() + content);
+ textArea.focus();
+
+<?php
+// See the TinyMCE plugin for an example of this view
+echo elgg_view('embed/custom_insert_js');
+?>
+
+ elgg.ui.lightbox.close();
+
+ event.preventDefault();
+};
+
+/**
+ * Submit an upload form through Ajax
+ *
+ * Requires the jQuery Form Plugin. Because files cannot be uploaded with
+ * XMLHttpRequest, the plugin uses an invisible iframe. This results in the
+ * the X-Requested-With header not being set. To work around this, we are
+ * sending the header as a POST variable and Elgg's code checks for it in
+ * elgg_is_xhr().
+ *
+ * @param {Object} event
+ * @return bool
+ */
+elgg.embed.submit = function(event) {
+ $('.embed-wrapper .elgg-form-file-upload').hide();
+ $('.embed-throbber').show();
+
+ $(this).ajaxSubmit({
+ dataType : 'json',
+ data : { 'X-Requested-With' : 'XMLHttpRequest'},
+ success : function(response) {
+ if (response) {
+ if (response.system_messages) {
+ elgg.register_error(response.system_messages.error);
+ elgg.system_message(response.system_messages.success);
+ }
+ if (response.status >= 0) {
+ var forward = $('input[name=embed_forward]').val();
+ var url = elgg.normalize_url('embed/tab/' + forward);
+ url = elgg.embed.addContainerGUID(url);
+ $('.embed-wrapper').parent().load(url);
+ } else {
+ // incorrect response, presumably an error has been displayed
+ $('.embed-throbber').hide();
+ $('.embed-wrapper .elgg-form-file-upload').show();
+ }
+ }
+
+ // ie 7 and 8 have a null response because of the use of an iFrame
+ // so just show the list after upload.
+ // http://jquery.malsup.com/form/#file-upload claims you can wrap JSON
+ // in a textarea, but a quick test didn't work, and that is fairly
+ // intrusive to the rest of the ajax system.
+ else if (response === undefined && $.browser.msie) {
+ var forward = $('input[name=embed_forward]').val();
+ var url = elgg.normalize_url('embed/tab/' + forward);
+ url = elgg.embed.addContainerGUID(url);
+ $('.embed-wrapper').parent().load(url);
+ }
+ },
+ error : function(xhr, status) {
+ // @todo nothing for now
+ }
+ });
+
+ // this was bubbling up the DOM causing a submission
+ event.preventDefault();
+ event.stopPropagation();
+};
+
+/**
+ * Loads content within the lightbox
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.embed.forward = function(event) {
+ // make sure container guid is passed
+ var url = $(this).attr('href');
+ url = elgg.embed.addContainerGUID(url);
+
+ $('.embed-wrapper').parent().load(url);
+ event.preventDefault();
+};
+
+/**
+ * Adds the container guid to a URL
+ *
+ * @param {string} url
+ * @return string
+ */
+elgg.embed.addContainerGUID = function(url) {
+ if (url.indexOf('container_guid=') == -1) {
+ var guid = $('input[name=embed_container_guid]').val();
+ return url + '?container_guid=' + guid;
+ } else {
+ return url;
+ }
+};
+
+elgg.register_hook_handler('init', 'system', elgg.embed.init);
diff --git a/mod/colorbox/views/default/js/lightbox.php b/mod/colorbox/views/default/js/lightbox.php
new file mode 100644
index 000000000..732092e2b
--- /dev/null
+++ b/mod/colorbox/views/default/js/lightbox.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Colorbox -- Stylesheet
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 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
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Usage
+ * Apply the class elgg-lightbox to links.
+ *
+ * Advanced Usage
+ * Elgg is distributed with the Colorbox jQuery library. Please go to
+ * http://www.jacklmoore.com/colorbox for more information on the options of this lightbox.
+ *
+ * Overriding
+ * In a plugin, override this view and override the registration for the
+ * lightbox JavaScript and CSS (@see elgg_views_boot()).
+ *
+ * @todo add support for passing options: $('#myplugin-lightbox').elgg.ui.lightbox(options);
+ */
+
+?>
+
+/**
+ * Lightbox initialization
+ */
+
+elgg.provide('elgg.ui.lightbox');
+
+elgg.ui.lightbox.init = function() {
+
+ $.extend($.colorbox.settings, {
+ current: elgg.echo('js:lightbox:current', ['{current}', '{total}']),
+ previous: elgg.echo('previous'),
+ next: elgg.echo('next'),
+ close: elgg.echo('close'),
+ xhrError: elgg.echo('error:default'),
+ imgError: elgg.echo('error:default'),
+ });
+
+ $(".elgg-lightbox").colorbox();
+ $(".elgg-lightbox-photo").colorbox({photo: true});
+ var n = 0;
+ $(".elgg-lightbox-gallery").each(function() {
+ $(this).find(".elgg-lightbox, .elgg-lightbox-photo")
+ .addClass("elgg-lightbox-" + n)
+ .colorbox({
+ rel: "elgg-lightbox-" + n++,
+ });
+ });
+}
+
+elgg.ui.lightbox.close = function() {
+ $.colorbox.close();
+}
+
+elgg.register_hook_handler('init', 'system', elgg.ui.lightbox.init);
+
+<?php
+
+$js_path = elgg_get_plugins_path();
+$js_path = "{$js_path}colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js";
+include $js_path;
diff --git a/mod/crud b/mod/crud
deleted file mode 160000
-Subproject adcfcf64775dd0d139c9b1f60073ddf3835e91f
diff --git a/mod/custom_index/index.php b/mod/custom_index/index.php
index 53990a006..05771f576 100644
--- a/mod/custom_index/index.php
+++ b/mod/custom_index/index.php
@@ -31,7 +31,7 @@ $files = elgg_list_entities($list_params);
//get the newest members who have an avatar
$newest_members = elgg_list_entities_from_metadata(array(
'metadata_names' => 'icontime',
- 'types' => 'user',
+ 'type' => 'user',
'limit' => 10,
'full_view' => false,
'pagination' => false,
diff --git a/mod/custom_index_widgets b/mod/custom_index_widgets
deleted file mode 160000
-Subproject e657a8c940a08dbe90d8a53f88ff40aad7e7a72
diff --git a/mod/custom_index_widgets/index.php b/mod/custom_index_widgets/index.php
new file mode 100644
index 000000000..dac0db036
--- /dev/null
+++ b/mod/custom_index_widgets/index.php
@@ -0,0 +1,66 @@
+<?php
+
+ elgg_set_context('custom_index_widgets');
+ elgg_set_page_owner_guid(elgg_get_config('site_guid'));
+
+ $widgettypes = elgg_get_widget_types();
+
+ $page_owner = elgg_get_page_owner_guid();
+ $ciw_layout = elgg_get_plugin_setting("ciw_layout", "custom_index_widgets");
+ $ciw_showdashboard = elgg_get_plugin_setting("ciw_showdashboard", "custom_index_widgets");
+
+ $customwidgets = elgg_get_widgets($page_owner, elgg_get_context());
+ $area1widgets = isset($customwidgets[1]) ? $customwidgets[1] : FALSE;
+ $area2widgets = isset($customwidgets[2]) ? $customwidgets[2] : FALSE;
+ $area3widgets = isset($customwidgets[3]) ? $customwidgets[3] : FALSE;
+ /*
+ $area1widgets = elgg_get_widgets($page_owner,elgg_get_context(),1);
+ $area2widgets = elgg_get_widgets($page_owner,elgg_get_context(),2);
+ $area3widgets = elgg_get_widgets($page_owner,elgg_get_context(),3);
+ */
+
+ if (empty($area1widgets) && empty($area2widgets) && empty($area3widgets)) {
+
+ if (isset($vars['area3'])) $vars['area1'] = $vars['area3'];
+ if (isset($vars['area4'])) $vars['area2'] = $vars['area4'];
+ }
+
+ $leftcolumn_widgets_view = custom_index_build_columns($area1widgets,$widgettypes);
+ $middlecolumn_widgets_view = custom_index_build_columns($area2widgets,$widgettypes);
+ $rightcolumn_widgets_view = custom_index_build_columns($area3widgets,$widgettypes);
+
+
+ $content = elgg_view_layout($ciw_layout, array('area1' => $leftcolumn_widgets_view,'area2' => $middlecolumn_widgets_view,'area3' => $rightcolumn_widgets_view, 'layoutmode' => 'index_mode') );
+
+ if (elgg_is_logged_in() && $ciw_showdashboard=="yes"){
+
+ $user_guid = elgg_get_logged_in_user_guid();
+ elgg_set_page_owner_guid($user_guid);
+ elgg_set_context('dashboard');
+
+
+ $dashboardwidgets = elgg_get_widgets($user_guid, elgg_get_context());
+ $area1widgets = isset($dashboardwidgets[1]) ? $dashboardwidgets[1] : FALSE;
+ $area2widgets = isset($dashboardwidgets[2]) ? $dashboardwidgets[2] : FALSE;
+ $area3widgets = isset($dashboardwidgets[3]) ? $dashboardwidgets[3] : FALSE;
+ /*
+ $area1widgets = elgg_get_widgets($user_guid,elgg_get_context(),1);
+ $area2widgets = elgg_get_widgets($user_guid,elgg_get_context(),2);
+ $area3widgets = elgg_get_widgets($user_guid,elgg_get_context(),3);
+ */
+ if (empty($area1widgets) && empty($area2widgets) && empty($area3widgets)) {
+
+ if (isset($vars['area3'])) $vars['area1'] = $vars['area3'];
+ if (isset($vars['area4'])) $vars['area2'] = $vars['area4'];
+
+ }
+
+ $leftcolumn_widgets_view = custom_index_build_columns($area1widgets,$widgettypes);
+ $middlecolumn_widgets_view = custom_index_build_columns($area2widgets,$widgettypes);
+ $rightcolumn_widgets_view = custom_index_build_columns($area3widgets,$widgettypes);
+
+ $content .= elgg_view_layout($ciw_layout, array('area1' => $leftcolumn_widgets_view,'area2' => $middlecolumn_widgets_view,'area3' => $rightcolumn_widgets_view, 'layoutmode' => 'index_mode') );
+ }
+
+ echo elgg_view_page('Index', $content);
+?> \ No newline at end of file
diff --git a/mod/custom_index_widgets/languages/de.php b/mod/custom_index_widgets/languages/de.php
new file mode 100644
index 000000000..808b2fade
--- /dev/null
+++ b/mod/custom_index_widgets/languages/de.php
@@ -0,0 +1,78 @@
+ <?php
+
+ $german = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Neueste Lesezeichen",
+ 'custom_index_widgets:latest_groups_index' => "Neueste Gruppen",
+ 'custom_index_widgets:latest_files_index' => "Neueste Dateien",
+ 'custom_index_widgets:latest_blogs_index' => "Neueste Blogeintr&auml;ge",
+ 'custom_index_widgets:latest_members_index' => "Neueste Mitglieder",
+ 'custom_index_widgets:nofiles' => "Keine Dateien gefunden",
+ 'custom_index_widgets:nogroups' => "Keine Gruppen gefunden",
+ 'custom_index_widgets:latest_news_index' => "Neueste Nachrichten",
+ 'custom_index_widgets:latest_pages_index' => "Neueste Seiten",
+ 'custom_index_widgets:latest_events_index' => 'Eingehende Events',
+ 'custom_index_widgets:latest_wire_index' => 'Neuester Wire-Beitrag',
+ 'custom_index_widgets:inline_content_index' => 'Eigenes HTML',
+ 'custom_index_widgets:html_content' => 'Ihr Text',
+ 'custom_index_widgets:latest_generic_index'=>"Generischer Inhalt",
+ 'custom_index_widgets:latest_tasks_index'=>"Neueste Aufgaben",
+ 'custom_index_widgets:latest_activity_index' => 'Aktivit&auml;ten',
+ 'custom_index_widgets:cloud_generic_index'=>"Tag Cloud",
+ 'custom_index_widgets:widget_subtype'=>"Widget-Subtyp",
+ 'custom_index_widgets:metadata_name' => "Metadaten",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Neueste Videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Multimedia Inhalte",
+ 'custom_index_widgets:widget_video_width' => "Breite (Nur Zahl, ohne px oder %)",
+ 'custom_index_widgets:widget_video_height' => "H&ouml;he (Nur Zahl, ohne px oder %)",
+ 'custom_index_widgets:widget_video_url' => "URL",
+ 'custom_index_widgets:widget_video_caption' => "&Uuml;berschrift",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 Spalten, [Mittelbreit, Schmal] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 Spalten, [Schmal, Mittelbreit] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 Spalten, [Halbe Breite, Halbe Breite] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 Spalte, [Schmal, Schmal, Schmal]',
+ 'custom_index_widgets:index_2rbhh' => '2 Spalten, [Big] -[Halbe Breite, Halbe Breite]',
+ 'custom_index_widgets:index_2rbsm' => '2 Spalten, [Big] -[Schmal, Mittelbreit]',
+ 'custom_index_widgets:index_2rbms' => '2 Spalten, [Big] -[Mittelbreit, Schmal]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Seite nicht gefunden',
+ 'custom_index_widgets:index' => "Widgets aktiv auf Index",
+ 'custom_index_widgets:num_items' => "Einzahl Module",
+ 'custom_index_widgets:reset' => "Zonen auf Standard setzen",
+
+ 'custom_index_widgets:pleaselogin' => "Anmelden f&uuml;r alle Details ...",
+
+ 'custom_index_widgets:widget_title' => "Widget-Titel &uuml;berschreiben (auf index-Seite anstelle des Standardtitels des Widgets)",
+ 'custom_index_widgets:context_mode' => "Layout-Stil",
+ 'custom_index_widgets:context_list' => "Liste",
+ 'custom_index_widgets:context_detail' => "Details",
+
+ 'custom_index_widgets:login_style'=>"Login-Position",
+ 'custom_index_widgets:inlayout'=>"Im Layout",
+ 'custom_index_widgets:topbar'=>"Top-Leiste",
+ 'custom_index_widgets:widget_all_groups' => "Alle Gruppen",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Ya",
+ "custom_index_widgets:showdashboard_no"=>"Nein",
+
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("de",$german);
diff --git a/mod/custom_index_widgets/languages/en.php b/mod/custom_index_widgets/languages/en.php
new file mode 100644
index 000000000..ba9cb4859
--- /dev/null
+++ b/mod/custom_index_widgets/languages/en.php
@@ -0,0 +1,82 @@
+<?php
+
+ $english = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Latest bookmarks",
+ 'custom_index_widgets:latest_groups_index' => "Latest groups",
+ 'custom_index_widgets:latest_files_index' => "Latest files",
+ 'custom_index_widgets:latest_blogs_index' => "Latest blog posts",
+ 'custom_index_widgets:latest_members_index' => "Newest members",
+ 'custom_index_widgets:nofiles' => "There are no files yet",
+ 'custom_index_widgets:nogroups' => "There are no groups yet",
+ 'custom_index_widgets:latest_news_index' => "Latest news",
+ 'custom_index_widgets:latest_pages_index' => "Latest pages",
+ 'custom_index_widgets:latest_events_index' => 'Incomming events',
+ 'custom_index_widgets:latest_wire_index' => 'Last wire posts',
+ 'custom_index_widgets:inline_content_index' => 'Free html',
+ 'custom_index_widgets:html_content' => 'Your text',
+ 'custom_index_widgets:latest_generic_index'=>"Generic content",
+ 'custom_index_widgets:latest_tasks_index'=>"Latest tasks",
+ 'custom_index_widgets:latest_activity_index' => 'In the river',
+ 'custom_index_widgets:cloud_generic_index'=>"Tag Cloud",
+ 'custom_index_widgets:widget_subtype'=>"Entity subtype",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Latest videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Multimédia content",
+ 'custom_index_widgets:widget_video_width' => "Width (number without px or %)",
+ 'custom_index_widgets:widget_video_height' => "Heigh (number without px or %)",
+ 'custom_index_widgets:widget_video_url' => "Url",
+ 'custom_index_widgets:widget_video_caption' => "Caption",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 rows, [Medium, Small] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 rows, [Small, Medium] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 rows, [Half, Half] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 row, [Small, Small, Small]',
+ 'custom_index_widgets:index_2rbhh' => '2 rows, [Big] -[Half, Half]',
+ 'custom_index_widgets:index_2rbsm' => '2 rows, [Big] -[Small, Medium]',
+ 'custom_index_widgets:index_2rbms' => '2 rows, [Big] -[Medium, Small]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Page not found',
+ 'custom_index_widgets:index' => "Index widgetisation",
+ 'custom_index_widgets:num_items' => "Number of items",
+
+ 'custom_index_widgets:pleaselogin' => "Please, please, login to see more...",
+
+ 'custom_index_widgets:widget_title' => "Override widget title (will be shown only on the index in replacement of widget default title)",
+ 'custom_index_widgets:context_mode' => "Layout style",
+ 'custom_index_widgets:context_list' => "List",
+ 'custom_index_widgets:context_detail' => "Detail",
+
+ 'custom_index_widgets:login_style'=>"Login position",
+ 'custom_index_widgets:inlayout'=>"In layout",
+ 'custom_index_widgets:topbar'=>"Top bar",
+ 'custom_index_widgets:widget_all_groups' => "All groups",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Yes",
+ "custom_index_widgets:showdashboard_no"=>"No",
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets",
+ // time limit
+ "custom_index_widgets:widget_created_time_limit" => "Time lapse",
+ "custom_index_widgets:time_limit:all" => "All time",
+ "custom_index_widgets:time_limit:day" => "Last day",
+ "custom_index_widgets:time_limit:week" => "Last week",
+ "custom_index_widgets:time_limit:month" => "Last month"
+
+ );
+
+ add_translation("en",$english);
diff --git a/mod/custom_index_widgets/languages/es.php b/mod/custom_index_widgets/languages/es.php
new file mode 100644
index 000000000..c8dc35633
--- /dev/null
+++ b/mod/custom_index_widgets/languages/es.php
@@ -0,0 +1,78 @@
+<?php
+
+ $spanish = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Ultimos favoritos",
+ 'custom_index_widgets:latest_groups_index' => "Ultimos Grupos",
+ 'custom_index_widgets:latest_files_index' => "Ultimos Archivos",
+ 'custom_index_widgets:latest_blogs_index' => "Ultimos Articulos de Blogs",
+ 'custom_index_widgets:latest_members_index' => "Nuevos habitantes",
+ 'custom_index_widgets:nofiles' => "No hay archivos todavia",
+ 'custom_index_widgets:nogroups' => "No hay frupos todavia",
+ 'custom_index_widgets:latest_news_index' => "Ultimas noticias",
+ 'custom_index_widgets:latest_pages_index' => "Ultimas paginas",
+ 'custom_index_widgets:latest_events_index' => 'Eventos anunciados',
+ 'custom_index_widgets:latest_wire_index' => 'Ultimos post',
+ 'custom_index_widgets:inline_content_index' => 'Html libre',
+ 'custom_index_widgets:html_content' => 'Tu texto',
+ 'custom_index_widgets:latest_generic_index'=>"Contenido generico",
+ 'custom_index_widgets:latest_tasks_index'=>"Ultimas tareas",
+ 'custom_index_widgets:latest_activity_index' => 'In the river',
+ 'custom_index_widgets:cloud_generic_index'=>"Nube de tags",
+ 'custom_index_widgets:widget_subtype'=>"Subtipo de la entidad",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Ultimos videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Contenido multimedia",
+ 'custom_index_widgets:widget_video_width' => "Ancho (numeros sin px o %)",
+ 'custom_index_widgets:widget_video_height' => "Alto (numeros sin px o %)",
+ 'custom_index_widgets:widget_video_url' => "Url",
+ 'custom_index_widgets:widget_video_caption' => "Caption",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 rows, [Medio, Peque] - [Grande]',
+ 'custom_index_widgets:index_2rsmb' => '2 rows, [Peque, Medio] - [Grande]',
+ 'custom_index_widgets:index_2rhhb' => '2 rows, [Mitad, Mitad] - [Grande]',
+ 'custom_index_widgets:index_1rsss' => '1 row, [Peque, Peque, Peque]',
+ 'custom_index_widgets:index_2rbhh' => '2 rows, [Grande] -[Mitad, Mitad]',
+ 'custom_index_widgets:index_2rbsm' => '2 rows, [Grande] -[Peque, Medio]',
+ 'custom_index_widgets:index_2rbms' => '2 rows, [Grande] -[Medio, Peque]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zona 1',
+ 'custom_index_widgets:area2' => 'Widgets Zona 2',
+ 'custom_index_widgets:area3' => 'Widgets Zona 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Pagina no encontrada',
+ 'custom_index_widgets:index' => "Index widgetisation",
+ 'custom_index_widgets:num_items' => "Numero de items",
+ 'custom_index_widgets:reset' => "Restablecer todas las zonas",
+
+ 'custom_index_widgets:pleaselogin' => "Por favor, por favor, inicie sesión para ver mas...",
+
+ 'custom_index_widgets:widget_title' => "Título del widget Override (solo se mostraran en el índice en sustitucion del título widget por defecto)",
+ 'custom_index_widgets:context_mode' => "Estilo",
+ 'custom_index_widgets:context_list' => "Lista",
+ 'custom_index_widgets:context_detail' => "Detalle",
+
+ 'custom_index_widgets:login_style'=>"Posicion de Login",
+ 'custom_index_widgets:inlayout'=>"Barra inferior",
+ 'custom_index_widgets:topbar'=>"Barra superior",
+ 'custom_index_widgets:widget_all_groups' => "Todos los grupos",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Si",
+ "custom_index_widgets:showdashboard_no"=>"No",
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("es",$spanish);
+
diff --git a/mod/custom_index_widgets/languages/fr.php b/mod/custom_index_widgets/languages/fr.php
new file mode 100644
index 000000000..486500710
--- /dev/null
+++ b/mod/custom_index_widgets/languages/fr.php
@@ -0,0 +1,80 @@
+<?php
+
+ $french = array(
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Derniers bookmarks",
+ 'custom_index_widgets:latest_groups_index' => "Groupes les + r&eacute;cents",
+ 'custom_index_widgets:latest_files_index' => "Fichiers les + r&eacute;cents",
+ 'custom_index_widgets:latest_blogs_index' => "Derniers ajouts de blogs",
+ 'custom_index_widgets:latest_members_index' => "Nouveaux membres",
+ 'custom_index_widgets:nofiles' => "Il n'y a aucun fichier pour l'instant",
+ 'custom_index_widgets:nogroups' => "Il n'y a aucun groupe pour l'instant",
+ 'custom_index_widgets:latest_news_index' => "Dernieres news",
+ 'custom_index_widgets:latest_pages_index' => "Dernieres pages",
+ 'custom_index_widgets:latest_events_index' => 'Prochains evenements',
+ 'custom_index_widgets:latest_wire_index' => 'Derniers messages',
+ 'custom_index_widgets:inline_content_index' => 'Texte libre',
+ 'custom_index_widgets:html_content' => 'Votre texte',
+ 'custom_index_widgets:latest_generic_index'=>"Contenu générique",
+ 'custom_index_widgets:latest_tasks_index'=>"Tâches récentes",
+ 'custom_index_widgets:latest_activity_index' => 'En bref',
+ 'custom_index_widgets:cloud_generic_index'=>"Nuage de tags",
+ 'custom_index_widgets:widget_subtype'=>"Type d'entité",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Seuil minimal",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Dernières vidéos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Contenu multimédia",
+ 'custom_index_widgets:widget_video_width' => "Largeur de la vidéo (chiffre sans px ni %)",
+ 'custom_index_widgets:widget_video_height' => "Hauteur de la vidéo (chiffre sans px ni %)",
+ 'custom_index_widgets:widget_video_url' => "Url de la vidéo",
+ 'custom_index_widgets:widget_video_caption' => "Légende de la vidéo",
+
+ 'custom_index_widgets:layout' => "Présentation",
+
+ 'custom_index_widgets:index_2rmsb' => '2 lignes, [Medium, Small] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 lignes, [Small, Medium] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 lignes, [Half, Half] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 ligne, [Small, Small, Small]',
+ 'custom_index_widgets:index_1rsms' => '1 ligne, [Small, Medium, Small]',
+
+ 'custom_index_widgets:index_2rbhh' => '2 lignes, [Big] -[Half, Half]',
+ 'custom_index_widgets:index_2rbsm' => '2 lignes, [Big] -[Small, Medium]',
+ 'custom_index_widgets:index_2rbms' => '2 lignes, [Big] -[Medium, Small]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Page non trouv&eacute;e',
+ 'custom_index_widgets:index' => "Configuration de l'index",
+ 'custom_index_widgets:num_items' => "Nombre d'items",
+ 'custom_index_widgets:reset' => "Supprimer tout les widgets",
+
+ 'custom_index_widgets:pleaselogin' => "Allez, connectez-vous quoi ...",
+
+ 'custom_index_widgets:widget_title' => "Titre de remplacement (est affiché à la place du titre du widget uniquement sur la page d'accueil)",
+ 'custom_index_widgets:context_mode' => "Mode d'affichage",
+ 'custom_index_widgets:context_list' => "Liste",
+ 'custom_index_widgets:context_detail' => "Détail",
+
+ 'custom_index_widgets:login_style'=>"Position de la zone login",
+ 'custom_index_widgets:inlayout'=>"Dans la page",
+ 'custom_index_widgets:topbar'=>"Top bar",
+
+ "custom_index_widgets:showdashboard"=>"Afficher le dashboard en fin de page",
+ "custom_index_widgets:showdashboard_yes"=>"Oui",
+ "custom_index_widgets:showdashboard_no"=>"Non",
+
+ 'custom_index_widgets:widget_all_groups' => "Tous les groupes",
+ "search:go" => "Ok",
+ "custom_index_widgets:guest_only" => "Que pour les invités",
+ "custom_index_widgets:box_style" => "Type d'affichage",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("fr",$french);
diff --git a/mod/custom_index_widgets/manifest.xml b/mod/custom_index_widgets/manifest.xml
new file mode 100644
index 000000000..33784b313
--- /dev/null
+++ b/mod/custom_index_widgets/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>Custom index widgets</name>
+ <author>Fx NION, Lorea developers</author>
+ <version>1.8.0</version>
+ <category>content</category>
+ <category>widget</category>
+ <description>Customise your index, with severals layout and customisable widgets. And get fun.</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Fx NION 2009-2011, Lorea 2012-2013</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8.3</version>
+ </requires>
+ <conflicts>
+ <type>plugin</type>
+ <name>custom_index</name>
+ </conflicts>
+ <activate_on_install>false</activate_on_install>
+</plugin_manifest>
diff --git a/mod/custom_index_widgets/start.php b/mod/custom_index_widgets/start.php
new file mode 100644
index 000000000..70a755dc2
--- /dev/null
+++ b/mod/custom_index_widgets/start.php
@@ -0,0 +1,159 @@
+<?php
+
+elgg_register_event_handler('init', 'system', 'custom_index_widgets_init');
+
+function custom_index_widgets_init() {
+
+ elgg_extend_view('css/elgg','custom_index_widgets/css');
+
+ elgg_register_admin_menu_item('configure', 'custom_index_widgets', 'appearance');
+
+
+ $ciw_layout = elgg_get_plugin_setting("ciw_layout", "custom_index_widgets");
+ if ($ciw_layout == NULL) {
+ elgg_set_plugin_setting("ciw_layout", "index_2rmsb", "custom_index_widgets");
+ }
+
+ $ciw_showdashboard = elgg_get_plugin_setting("ciw_showdashboard", "custom_index_widgets");
+ if ($ciw_showdashboard == NULL) {
+ elgg_set_plugin_setting("ciw_showdashboard", "yes", "custom_index_widgets");
+ }
+ elgg_register_widget_type('latest_members_index', elgg_echo('custom_index_widgets:latest_members_index'), elgg_echo('custom_index_widgets:latest_members_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('inline_content_index', elgg_echo('custom_index_widgets:inline_content_index'), elgg_echo('custom_index_widgets:inline_content_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('rich_media_index', elgg_echo('custom_index_widgets:rich_media_index'), elgg_echo('custom_index_widgets:rich_media_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_generic_index', elgg_echo('custom_index_widgets:latest_generic_index'), elgg_echo('custom_index_widgets:latest_generic_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_activity_index', elgg_echo('custom_index_widgets:latest_activity_index'), elgg_echo('custom_index_widgets:latest_activity_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('cloud_generic_index', elgg_echo('custom_index_widgets:cloud_generic_index'), elgg_echo('custom_index_widgets:cloud_generic_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('login_index', elgg_echo('custom_index_widgets:login_index'), elgg_echo('custom_index_widgets:login_index'), "custom_index_widgets", true);
+
+ if (elgg_is_active_plugin('groups')) {
+ elgg_register_widget_type('latest_groups_index', elgg_echo('custom_index_widgets:latest_groups_index'), elgg_echo('custom_index_widgets:latest_groups_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('file')) {
+ elgg_register_widget_type('latest_files_index', elgg_echo('custom_index_widgets:latest_files_index'), elgg_echo('custom_index_widgets:latest_files_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('news')) {
+ elgg_register_widget_type('latest_news_index', elgg_echo('custom_index_widgets:latest_news_index'), elgg_echo('custom_index_widgets:latest_news_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('bookmarks_enhanced') or elgg_is_active_plugin('bookmarks')) {
+ elgg_register_widget_type('latest_bookmarks_index', elgg_echo('custom_index_widgets:latest_bookmarks_index'), elgg_echo('custom_index_widgets:latest_bookmarks_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('blog')) {
+ elgg_register_widget_type('latest_blogs_index', elgg_echo('custom_index_widgets:latest_blogs_index'), elgg_echo('custom_index_widgets:latest_blogs_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('pages')) {
+ elgg_register_widget_type('latest_pages_index', elgg_echo('custom_index_widgets:latest_pages_index'), elgg_echo('custom_index_widgets:latest_pages_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('event_calendar')) {
+ elgg_register_widget_type('latest_events_index', elgg_echo('custom_index_widgets:latest_events_index'), elgg_echo('custom_index_widgets:latest_events_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('tidypics')) {
+ elgg_register_widget_type('latest_photos_index', elgg_echo("tidypics:widget:latest"), elgg_echo("tidypics:widget:latest_descr"), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_album_index', elgg_echo("tidypics:widget:albums"), elgg_echo("tidypics:widget:latest_descr"), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('thewire')) {
+ elgg_register_widget_type('latest_wire_index', elgg_echo('custom_index_widgets:latest_wire_index'), elgg_echo('custom_index_widgets:latest_wire_index'), "custom_index_widgets", true);
+ }
+
+ if (elgg_is_active_plugin('tasks')) {
+ elgg_register_widget_type('latest_tasks_index', elgg_echo('custom_index_widgets:latest_tasks_index'), elgg_echo('custom_index_widgets:latest_tasks_index'), "custom_index_widgets", true);
+ }
+
+ if (elgg_is_active_plugin('izap_videos')) {
+ elgg_register_widget_type('latest_izap_videos_index',elgg_echo ('custom_index_widgets:latest_izap_videos_index'), elgg_echo('custom_index_widgets:latest_izap_videos_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('simplepie')) {
+ elgg_register_widget_type('feed_reader_index', elgg_echo('simplepie:widget'),elgg_echo('simplepie:description'),'custom_index_widgets', true);
+ }
+
+ elgg_register_plugin_hook_handler('index', 'system', 'custom_index_widgets');
+ elgg_register_page_handler ('custom_index_widgets', 'custom_index_widgets_page_handler');
+
+}
+
+function custom_index_widgets($hook, $type, $return, $params) {
+ if ($return == true) {
+ // another hook has already replaced the front page
+ return $return;
+ }
+
+ if (!include_once(dirname(__FILE__) . "/index.php")) {
+ return false;
+ }
+
+ // return true to signify that we have handled the front page
+ return true;
+}
+
+
+function custom_index_widgets_page_handler($page) {
+ if (isset ($page [0])) {
+ switch ($page [0]) {
+ case "edit" :
+ @include (dirname ( __FILE__ ) . "/edit.php");
+ break;
+ }
+ } else {
+ register_error(elgg_echo("custom_index_widgets:admin:notfound"));
+ forward(elgg_get_site_url());
+ }
+ return true;
+}
+
+
+function custom_index_show_widget_area($areawidgets){
+ if (is_array($areawidgets) && sizeof($areawidgets) > 0) {
+ foreach($areawidgets as $widget) {
+ if ($widget instanceof ElggWidget) {
+ $vars['entity'] = $widget;
+ $handler = $widget->handler;
+ if (elgg_view_exists("widgets/$handler/content")) {
+ $content = elgg_view("widgets/$handler/content", $vars);
+ } else {
+ elgg_deprecated_notice("widgets use content as the display view", 1.8);
+ $content = elgg_view("widgets/$handler/view", $vars);
+ }
+ echo elgg_view_module('featured', $widget->title, $content, array('class' => 'elgg-module-highlight'));
+ } else {
+ echo $widget;
+ }
+ }
+ }
+}
+
+function custom_index_build_columns($area_widget_list, $widgettypes, $build_server_side = true) {
+
+ $column_widgets_view = array();
+ $column_widgets_string = "";
+
+ if (is_array($area_widget_list) && sizeof($area_widget_list) > 0) {
+ foreach ($area_widget_list as $widget) {
+ if ($build_server_side ) {
+ $title = $widget->widget_title;
+ if (!$title) {
+ $title = $widgettypes[$widget->handler]->name;
+ if (!$title) {
+ $title = $widget->handler;
+ }
+ }
+ $widget->title = $title;
+
+ if (($widget->guest_only == "yes" && !elgg_is_logged_in()) || $widget->guest_only == "no" || !isset($widget->guest_only)) {
+ $column_widgets_view[] = $widget;
+ }
+ } else {
+ if (!empty($column_widgets_string)) {
+ $column_widgets_string .= "::";
+ }
+ $column_widgets_string .= "{$widget->handler}::{$widget->getGUID()}";
+ }
+ }
+
+ if ($build_server_side) {
+ return $column_widgets_view;
+ } else {
+ return $column_widgets_string;
+ }
+ }
+ return null;
+}
diff --git a/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php b/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php
new file mode 100644
index 000000000..491c878e5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php
@@ -0,0 +1,56 @@
+<?php
+
+
+elgg_push_context('custom_index_widgets');
+elgg_set_page_owner_guid(elgg_get_config('site_guid'));
+
+$num_columns = elgg_extract('num_columns', $vars, 3);
+$show_add_widgets = elgg_extract('show_add_widgets', $vars, true);
+$exact_match = elgg_extract('exact_match', $vars, true);
+$show_access = elgg_extract('show_access', $vars, true);
+
+
+$owner = elgg_get_page_owner_entity();
+
+
+$context = elgg_get_context();
+$widget_types = elgg_get_widget_types($context, true);
+$widgets = elgg_get_widgets($owner->guid, $context);
+
+
+if (elgg_can_edit_widget_layout($context)) {
+
+ if ($show_add_widgets) {
+ echo elgg_view('page/layouts/widgets/add_button');
+ }
+ $params = array(
+ 'widgets' => $widgets,
+ 'context' => $context,
+ 'exact_match' => $exact_match,
+ );
+
+ echo elgg_view('page/layouts/widgets/add_panel', $params);
+}
+
+echo $vars['content'];
+
+$widget_class = "elgg-col-1of{$num_columns}";
+for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
+ if (isset($widgets[$column_index])) {
+ $column_widgets = $widgets[$column_index];
+ } else {
+ $column_widgets = array();
+ }
+
+ echo "<div class=\"$widget_class elgg-widgets\" id=\"elgg-widget-col-$column_index\">";
+ if (sizeof($column_widgets) > 0) {
+ foreach ($column_widgets as $widget) {
+ if (array_key_exists($widget->handler, $widget_types)) {
+ echo elgg_view_entity($widget, array('show_access' => $show_access));
+ }
+ }
+ }
+ echo '</div>';
+}
+
+
diff --git a/mod/custom_index_widgets/views/default/custom_index_widgets/css.php b/mod/custom_index_widgets/views/default/custom_index_widgets/css.php
new file mode 100644
index 000000000..e80d28684
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/custom_index_widgets/css.php
@@ -0,0 +1,347 @@
+<?php
+ /**
+ * Custom Index page css extender
+ *
+ * @package custom_index
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+?>
+
+.icon_members {
+ float:left;
+ margin:2pt 5px 3px 0pt;
+}
+
+.icon_latest {
+ margin:0 auto;
+}
+#login-box{
+ width:100%;
+}
+#login-box form{
+ width:auto;
+}
+
+#login-box input[type="text"],
+#login-box input[type="password"]{
+ width: 95%;
+}
+
+#rightcolumn_widgets,
+#leftcolumn_widgets,
+#middlecolumn_widgets{
+ min-height: 1px;
+}
+
+
+#rightcolumn_widgets.small_edit_mode_box,
+#leftcolumn_widgets.small_edit_mode_box,
+#middlecolumn_widgets.small_edit_mode_box,
+#customise_page_view table tr td h2.small_edit_mode_box {
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.medium_edit_mode_box,
+#leftcolumn_widgets.medium_edit_mode_box,
+#middlecolumn_widgets.medium_edit_mode_box,
+#customise_page_view table tr td h2.medium_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.big_edit_mode_box,
+#leftcolumn_widgets.big_edit_mode_box,
+#middlecolumn_widgets.big_edit_mode_box,
+#customise_page_view table tr td h2.big_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.half_edit_mode_box,
+#leftcolumn_widgets.half_edit_mode_box,
+#middlecolumn_widgets.half_edit_mode_box,
+#customise_page_view table tr td h2.half_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+
+#rightcolumn_widgets.small_index_mode_box,
+#leftcolumn_widgets.small_index_mode_box,
+#middlecolumn_widgets.small_index_mode_box,
+#customise_page_view table tr td h2.small_index_mode_box {
+ /*width: 312px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.medium_index_mode_box,
+#leftcolumn_widgets.medium_index_mode_box,
+#middlecolumn_widgets.medium_index_mode_box,
+#customise_page_view table tr td h2.medium_index_mode_box{
+ /*width: 608px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.big_index_mode_box,
+#leftcolumn_widgets.big_index_mode_box,
+#middlecolumn_widgets.big_index_mode_box,
+#customise_page_view table tr td h2.big_index_mode_box{
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.half_index_mode_box,
+#leftcolumn_widgets.half_index_mode_box,
+#middlecolumn_widgets.half_index_mode_box,
+#customise_page_view.half_index_mode_box h2{
+ /*width: 460px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin: 10px 3px;
+ border: 0 none;
+}
+
+table.index_mode{
+ width: 96%;
+ margin-left: 2%;
+ border: 0 none;
+}
+
+td.small {
+ width: 38%;
+}
+td.half {
+ width: 47%;
+}
+td.medium {
+ width: 57%;
+}
+td.big {
+ width: 100%;
+}
+.logintop{
+ margin:0 auto;
+ padding:0;
+ padding-top: 3px;
+ width:990px;
+}
+.logintop_links{
+ margin-left:80px;
+}
+
+.logintop_links a {
+ margin:0 0 0 2px;
+ color:#999999;
+ padding:3px;
+}
+.logintop_links a:hover {
+ color:#eeeeee;
+}
+
+#logintopform{
+ color: #BBBBBB;
+ font-size: 12px;
+}
+
+#logintopform input.logintop_input {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ background-color:#FFFFFF;
+ border:1px solid #BBBBBB;
+ color:#999999;
+ font-size:12px;
+ font-weight:bold;
+ margin:0pt;
+ padding:2px;
+ width:180px;
+ height:12px;
+}
+#logintopform input.logintop_submit_button {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ color:#333333;
+ background: #cccccc;
+ border:none;
+ font-size:12px;
+ font-weight:bold;
+ margin:0px;
+ padding:2px;
+ width:auto;
+ height:18px;
+ cursor:pointer;
+}
+#logintopform input.logintop_submit_button:hover {
+ color:#ffffff;
+ background: #4690d6;
+}
+
+/* ***************************************
+STANDARD BOXES
+*************************************** */
+.standard_box {
+ margin: 0 0 20px 0;
+ height:auto;
+
+}
+/* IE6 fix */
+* html .standard_box {
+ height:10px;
+}
+.standard_box_header {
+ color: #4690d6;
+ padding: 5px 10px 5px 10px;
+ margin:0;
+ border-left: 1px solid white;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+ -moz-border-radius-topleft:8px;
+ -moz-border-radius-topright:8px;
+ -webkit-border-top-right-radius:8px;
+ -webkit-border-top-left-radius:8px;
+ background:#dedede;
+}
+.standard_box_header h1 {
+ color: #0054a7;
+ font-size:1.25em;
+ line-height: 1.2em;
+}
+.standard_box_content {
+ padding: 10px 0 10px 0;
+ margin:0;
+ height:auto;
+ background:#dedede;
+ -moz-border-radius-bottomleft:8px;
+ -moz-border-radius-bottomright:8px;
+ -webkit-border-bottom-right-radius:8px;
+ -webkit-border-bottom-left-radius:8px;
+ border-left: 1px solid white;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+}
+.standard_box_content .contentWrapper {
+ margin-bottom:5px;
+}
+.standard_box_editpanel {
+ display: none;
+ background: #a8a8a8;
+ padding:10px 10px 5px 10px;
+ border-left: 1px solid white;
+ border-bottom: 1px solid white;
+}
+.standard_box_editpanel p {
+ margin:0 0 5px 0;
+}
+.standard_box_header a.toggle_box_contents {
+ color: #4690d6;
+ cursor:pointer;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size:20px;
+ font-weight: bold;
+ text-decoration:none;
+ float:right;
+ margin: 0;
+ margin-top: -7px;
+}
+.standard_box_header a.toggle_box_edit_panel {
+ color: #4690d6;
+ cursor:pointer;
+ font-size:9px;
+ text-transform: uppercase;
+ text-decoration:none;
+ font-weight: normal;
+ float:right;
+ margin: 3px 10px 0 0;
+}
+.standard_box_editpanel label {
+ font-weight: normal;
+ font-size: 100%;
+}
+
+
+/* ***************************************
+PLAIN BOXES
+*************************************** */
+.plain_box , .plain.collapsable_box{
+ margin: 0 0 20px 0;
+ height:auto;
+
+}
+/* IE6 fix */
+* html .plain_box , * html .plain.collapsable_box {
+ height:10px;
+}
+.plain_box_header , .plain.collapsable_box_header{
+ color: #4690d6;
+ padding: 5px 10px 5px 10px;
+ margin:0;
+ border-left: 1px solid #cccccc;
+ border-right: 1px solid #cccccc;
+ border-top: 1px solid #cccccc;
+ -moz-border-radius-topleft:8px;
+ -moz-border-radius-topright:8px;
+ -webkit-border-top-right-radius:8px;
+ -webkit-border-top-left-radius:8px;
+ background:transparent;
+}
+.plain_box_header h1, .plain.collapsable_box_header h1 {
+ color: #0054a7;
+ font-size:1.25em;
+ line-height: 1.2em;
+}
+.plain_box_content, .plain.collapsable_box_content {
+ padding: 10px 0 10px 0;
+ margin:0;
+ height:auto;
+ -moz-border-radius-bottomleft:8px;
+ -moz-border-radius-bottomright:8px;
+ -webkit-border-bottom-right-radius:8px;
+ -webkit-border-bottom-left-radius:8px;
+ border-left: 1px solid #cccccc;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+ background:transparent;
+
+}
+.plain_box_content .contentWrapper , .plain.collapsable_box_content .contentWrapper{
+ margin-bottom:5px;
+}
+.plain_box_editpanel .plain.collapsable_box_editpanel{
+ display: none;
+ background: #a8a8a8;
+ padding:10px 10px 5px 10px;
+ border-left: 1px solid white;
+ border-bottom: 1px solid white;
+}
+.plain_box_editpanel p , .plain.collapsable_box_editpanel{
+ margin:0 0 5px 0;
+}
+.plain_box_header a.toggle_box_contents , .plain.collapsable_box_header a.toggle_box_contents{
+ color: #4690d6;
+ cursor:pointer;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size:20px;
+ font-weight: bold;
+ text-decoration:none;
+ float:right;
+ margin: 0;
+ margin-top: -7px;
+}
+.plain_box_header a.toggle_box_edit_panel , .plain.collapsable_box_header a.toggle_box_edit_panel {
+ color: #4690d6;
+ cursor:pointer;
+ font-size:9px;
+ text-transform: uppercase;
+ text-decoration:none;
+ font-weight: normal;
+ float:right;
+ margin: 3px 10px 0 0;
+}
+.plain_box_editpanel label , .plain.collapsable_box_editpanel label{
+ font-weight: normal;
+ font-size: 100%;
+}
diff --git a/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php b/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php
new file mode 100644
index 000000000..ed92a9032
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php
@@ -0,0 +1,3 @@
+<div class="mts float-alt">
+<a href="http://fxnion.free.fr/"><img src="<?php echo elgg_get_site_url(); ?>mod/custom_index_widgets/images/fxnion_elgg_custom_index.gif" alt="Elgg Custom index by Fx Nion" title="Elgg Custom index by Fx Nion"/></a>
+</div>
diff --git a/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php b/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php
new file mode 100644
index 000000000..f61cea356
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Elgg widgets layout
+ *
+ * @uses $vars['content'] Optional display box at the top of layout
+ * @uses $vars['num_columns'] Number of widget columns for this layout (3)
+ * @uses $vars['show_add_widgets'] Display the add widgets button and panel (true)
+ * @uses $vars['exact_match'] Widgets must match the current context (false)
+ * @uses $vars['show_access'] Show the access control (true)
+ */
+
+$num_columns = elgg_extract('num_columns', $vars, 3);
+$show_add_widgets = elgg_extract('show_add_widgets', $vars, true);
+$exact_match = elgg_extract('exact_match', $vars, false);
+$show_access = elgg_extract('show_access', $vars, true);
+
+$owner = elgg_get_page_owner_entity();
+
+$widget_types = elgg_get_widget_types();
+
+$context = elgg_get_context();
+//elgg_push_context('widgets');
+
+$widgets = elgg_get_widgets($owner->guid, $context);
+
+if (elgg_can_edit_widget_layout($context)) {
+ if ($show_add_widgets) {
+ echo elgg_view('page/layouts/widgets/add_button');
+ }
+ $params = array(
+ 'widgets' => $widgets,
+ 'context' => $context,
+ 'exact_match' => $exact_match,
+ );
+ echo elgg_view('page/layouts/widgets/add_panel', $params);
+}
+
+echo $vars['content'];
+
+$widget_class = "elgg-col-1of{$num_columns}";
+for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
+ if (isset($widgets[$column_index])) {
+ $column_widgets = $widgets[$column_index];
+ } else {
+ $column_widgets = array();
+ }
+
+ echo "<div class=\"$widget_class elgg-widgets\" id=\"elgg-widget-col-$column_index\">";
+ if (sizeof($column_widgets) > 0) {
+ foreach ($column_widgets as $widget) {
+ if (array_key_exists($widget->handler, $widget_types)) {
+ echo elgg_view_entity($widget, array('show_access' => $show_access));
+ }
+ }
+ }
+ echo '</div>';
+}
+
+elgg_pop_context();
+
+echo elgg_view('graphics/ajax_loader', array('id' => 'elgg-widget-loader'));
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index.php b/mod/custom_index_widgets/views/default/page/layouts/index.php
new file mode 100644
index 000000000..a73a0d7b1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="leftcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr >
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php b/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php
new file mode 100644
index 000000000..0d43469e9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php
@@ -0,0 +1,29 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="leftcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="rightcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php
new file mode 100644
index 000000000..7f8c22437
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="rightcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php
new file mode 100644
index 000000000..fdb0cf38b
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="medium">
+ <div id="middlecolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="rightcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php
new file mode 100644
index 000000000..d5a81f1f5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php
@@ -0,0 +1,28 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="medium">
+ <div id="rightcolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php
new file mode 100644
index 000000000..ae2995ff9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="leftcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php
new file mode 100644
index 000000000..a774a4a42
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="medium">
+ <div id="leftcolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php
new file mode 100644
index 000000000..72bb92d3d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="leftcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="medium">
+ <div id="middlecolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php b/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php
new file mode 100644
index 000000000..ef70eeb8d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php
@@ -0,0 +1,61 @@
+<?php
+
+?>
+<div>
+ <div class="contentWrapper">
+ <table>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:layout"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[ciw_layout]',
+ 'options_values' => array(
+ 'index' => 'Default',
+ 'index_2rmsb' => elgg_echo('custom_index_widgets:index_2rmsb'),
+ 'index_2rsmb' => elgg_echo('custom_index_widgets:index_2rsmb'),
+ 'index_2rhhb' => elgg_echo('custom_index_widgets:index_2rhhb'),
+ 'index_2rbhh' => elgg_echo('custom_index_widgets:index_2rbhh'),
+
+ 'index_2rbsm' => elgg_echo('custom_index_widgets:index_2rbsm'),
+ 'index_2rbms' => elgg_echo('custom_index_widgets:index_2rbms'),
+
+ 'index_1rsss' => elgg_echo('custom_index_widgets:index_1rsss')
+
+ ),
+ 'value' => $vars["entity"]->ciw_layout
+ ));
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:login_style"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[login_style]',
+ 'options_values' => array(
+ 'inlayout' => elgg_echo('custom_index_widgets:inlayout'),
+ 'topbar' => elgg_echo('custom_index_widgets:topbar'),
+ ),
+ 'value' => $vars["entity"]->login_style
+ ));
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:showdashboard"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[ciw_showdashboard]',
+ 'options_values' => array(
+ 'yes' => elgg_echo('custom_index_widgets:showdashboard_yes'),
+ 'no' => elgg_echo('custom_index_widgets:showdashboard_no'),
+ ),
+ 'value' => $vars["entity"]->ciw_showdashboard
+ ));
+ ?>
+ </td>
+ </tr>
+
+ </table>
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php
new file mode 100644
index 000000000..bee459e1d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php
@@ -0,0 +1,59 @@
+<?php
+$maintype = "object";
+$subtype = $vars["entity"]->widget_subtype;
+if (empty($subtype) || $subtype == 'All') {
+ $subtype = ELGG_ENTITIES_ANY_VALUE;
+}
+
+if ($subtype == 'user') {$maintype='user';}
+if ($subtype == 'group') {$maintype='group';}
+
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 20;
+
+$created_time_limit = $vars['entity']->created_time_limit;
+if (!isset($created_time_limit) || $created_time_limit == 'all') {
+ $created_time = ELGG_ENTITIES_ANY_VALUE;
+}
+elseif ($created_time_limit == 'day') {
+ $created_time = time()-(3600*24);
+}
+elseif ($created_time_limit == 'week') {
+ $created_time = time()-(3600*24*7);
+}
+elseif ($created_time_limit == 'month') {
+ $created_time = time()-(3600*24*30);
+}
+
+$metadata_name = $vars['entity']->metadata_name;
+if (!isset($metadata_name)) {
+ $metadata_name = 'tags';
+} else {
+ $metadata_name = $metadata_name;
+}
+
+$threshold = $vars['entity']->threshold;
+if (!isset($threshold))
+ $threshold = 1;
+
+$widget_group = $vars["entity"]->widget_group;
+if (empty($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+
+elgg_push_context('tags');
+$options = array('threshold' => $threshold,
+ 'limit' => $num_items,
+ 'type' => $maintype,
+ 'subtype' => $subtype,
+ 'tag_name' => $metadata_name,
+ 'created_time_lower' => $created_time,
+ 'container_guid' => $widget_group);
+
+$body = elgg_view_tagcloud($options);
+elgg_pop_context();
+
+echo $body;
+
+?>
diff --git a/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php
new file mode 100644
index 000000000..84b2fa861
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php
@@ -0,0 +1,120 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $created_time_limit = $vars['entity']->created_time_limit;
+ if (!isset($created_time_limit)) $created_time_limit = 'all';
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $metadata_name = $vars['entity']->metadata_name;
+ if (!isset($metadata_name)) $metadata_name = "";
+
+ $threshold = $vars['entity']->threshold;
+ if (!isset($threshold)) $threshold = 1;
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+ $widget_subtype = $vars["entity"]->widget_subtype;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_subtype'); ?>
+ :
+ <?php
+
+ $subtypes = get_data("SELECT subtype from {$CONFIG->dbprefix}entity_subtypes");
+ $subtype_list = array();
+ $subtype_list['All'] = '';
+ $subtype_list['user'] = 'user';
+ $subtype_list['group'] = 'group';
+
+ if ($subtypes) {
+ foreach ($subtypes as $data) {
+ $subtype_list[$data->subtype] = $data->subtype;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_subtype]', 'options_values'=>$subtype_list, 'value'=>$widget_subtype));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_created_time_limit'); ?>
+ :
+ <?php
+
+ $limits = array('all', 'month', 'week', 'day');
+ $limit_list = array();
+ foreach($limits as $limit) {
+ $limit_list[$limit] = elgg_echo("custom_index_widgets:time_limit:$limit");
+ }
+ echo '<p>'.elgg_view('input/dropdown', array('name'=>'params[created_time_limit]', 'options_values'=>$limit_list, 'value'=>$created_time_limit))."</p>";
+ ?>
+ </p>
+
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:threshold'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[threshold]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$thresholds));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:metadata_name'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[metadata_name]', 'value'=>$metadata_name));
+ ?>
+ </p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php
new file mode 100644
index 000000000..2695315d5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php
@@ -0,0 +1,8 @@
+<?php
+
+ include elgg_get_plugins_path() . 'simplepie/views/default/widgets/feed_reader/content.php';
+
+ //$body = elgg_view("simplepie/widgets/feed_reader/content", $vars);
+ //echo $body;
+
+?>
diff --git a/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php
new file mode 100644
index 000000000..5fc36bc54
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php
@@ -0,0 +1,5 @@
+<?php
+ include elgg_get_plugins_path() . 'simplepie/views/default/widgets/feed_reader/edit.php';
+ //echo elgg_view("simplepie/edit", $vars);
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php b/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php
new file mode 100644
index 000000000..6ed53f197
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php
@@ -0,0 +1,7 @@
+<div class="contentWrapper">
+ <?php
+ echo $vars[entity]->html_content;
+ ?>
+ <div class="clearfloat">
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php b/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php
new file mode 100644
index 000000000..e5c319bf1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php
@@ -0,0 +1,46 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+ $html_content = $vars['entity']->html_content;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:html_content'); ?>
+<?php
+ echo elgg_view('input/longtext', array(
+ 'name' => 'params[html_content]',
+ 'value' => $html_content
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php
new file mode 100644
index 000000000..4010e0cb4
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php
@@ -0,0 +1,20 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ /*
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+ */
+ $widget_datas = elgg_list_river(0, $widget_group, '', '', '', '', $num_items,0,0,false);
+
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php
new file mode 100644
index 000000000..622655307
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php
new file mode 100644
index 000000000..c511a775a
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php
@@ -0,0 +1,64 @@
+<div class="contentWrapper">
+<?php
+
+ $object_type ='album';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group))
+ $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ $owner_albums = elgg_get_entities("object", $object_type, $widget_group, "", $num_items, 0, false);
+
+ echo '<div id="tidypics_album_widget_container">';
+
+ if ($owner_albums) {
+ foreach($owner_albums as $album) {
+
+ if($album->cover)
+ $album_cover = '<img src="'.$vars['url'].'mod/tidypics/thumbnail.php?file_guid='.$album->cover.'&size=small" class="tidypics_album_cover" alt="' . $album->title . '"/>';
+ else
+ $album_cover = '<img src="'.$vars['url'].'mod/tidypics/graphics/empty_album.png" class="tidypics_album_cover" alt="' . $album->title . '">';
+?>
+ <div class="tidypics_album_widget_single_item">
+ <div class="tidypics_album_widget_title"><a href="<?php echo $album->getURL();?>"><?php echo $album->title;?></a></div>
+ <div class="tidypics_album_widget_timestamp"> <?php echo elgg_echo("album:created:on") . ' ' . elgg_get_friendly_time($album->time_created);?></div>
+<?php
+ //get the number of comments
+ $numcomments = $album->countComments();
+ if ($numcomments)
+ echo "<a href=\"{$album->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a><br>";
+?>
+ <a href="<?php echo $album->getURL();?>"><?php echo $album_cover;?></a>
+ </div>
+<?php
+ } //end of foreach loop
+
+ // bottom link to all group/user albums
+ /*if (is_null($owner->username) || empty($owner->username)) {
+ echo '<p class="profile_info_edit_buttons"><a href="' . $vars['url'] . 'pg/photos/world">' . elgg_echo('album:all') . '</a></p>';
+ } else {
+ echo '<p class="tidypics_download"><a href="' . $vars['url'] . 'pg/photos/owned/' . $owner->username . '">' . elgg_echo('album:more') . '</a></p>';
+ }*/
+
+ }
+
+ /*if (can_write_to_container(0, $owner->guid)) {
+ echo '<p class="tidypics_download"><a href=' . $CONFIG->wwwroot .'pg/photos/new/' . $owner->username . '>' . elgg_echo("album:create") . '</a></p>';
+ }*/
+
+
+ //close album_widget_container div
+ echo "</div>";
+?>
+</div> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php
new file mode 100644
index 000000000..86eaa19cc
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php
new file mode 100644
index 000000000..cce94185d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php
@@ -0,0 +1,43 @@
+<?php
+$object_type = 'blog';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php
new file mode 100644
index 000000000..e89a68304
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php
new file mode 100644
index 000000000..2622a63ea
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php
@@ -0,0 +1,43 @@
+<?php
+
+ $object_type ='bookmarks';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php
new file mode 100644
index 000000000..1a15cea49
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php
new file mode 100644
index 000000000..7c5ae40f3
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php
@@ -0,0 +1,95 @@
+<?php
+
+ require_once($CONFIG->pluginspath.'event_calendar/models/model.php');
+
+ if(!function_exists('getLastDayOfMonth')){
+ function getLastDayOfMonth($month,$year) {
+ return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year));
+ }
+ }
+
+ $object_type ='event_calendar';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group))
+ $widget_group = 0;
+
+ $mode = $vars['mode']->mode;
+ if (!isset($mode))
+ $mode = "month";
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+
+ elgg_set_context($widget_context_mode);
+
+
+ $original_start_date = date('Y-m-d');
+ $day = 60*60*24;
+ $week = 7*$day;
+ $month = 31*$day;
+
+
+ if ($mode == "day") {
+ $start_date = $original_start_date;
+ $end_date = $start_date;
+ $start_ts = strtotime($start_date);
+ $end_ts = strtotime($end_date)+$day-1;
+ } else if ($mode == "week") {
+
+ $start_ts = strtotime($original_start_date);
+ $start_ts -= date("w",$start_ts)*$day;
+ $end_ts = $start_ts + 6*$day;
+
+ $start_date = date('Y-m-d',$start_ts);
+ $end_date = date('Y-m-d',$end_ts);
+ } else {
+ $start_ts = strtotime($original_start_date);
+ $month = date('m',$start_ts);
+ $year = date('Y',$start_ts);
+ $start_date = $year.'-'.$month.'-1';
+ $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year);
+ }
+
+ if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) {
+ $start_date = $event_calendar_first_date;
+ }
+
+ if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) {
+ $end_date = $event_calendar_last_date;
+ }
+
+ $start_ts = strtotime($start_date);
+
+ if ($mode == "day") {
+ $end_ts = strtotime($end_date)+$day-1;
+ } else if ($mode == "week") {
+ $end_ts = $start_ts + 6*$day;
+ } else {
+ $end_ts = strtotime($end_date);
+ }
+
+ $count = event_calendar_get_events_between($start_ts,$end_ts,true,$num_items,0,$widget_group,'-');
+ $events = event_calendar_get_events_between($start_ts,$end_ts,false,$num_items,0,$widget_group,'-');
+ //$widget_datas= $event_list = elgg_view_entity_list($events, $count, 0, $num_items, false, false);
+
+ $options = array(
+ 'list_class' => 'elgg-list-entity',
+ 'full_view' => FALSE,
+ 'pagination' => TRUE,
+ 'list_type' => 'listing',
+ 'list_type_toggle' => FALSE,
+ 'offset' => $vars['offset'],
+ 'limit' => $vars['limit'],
+ );
+ $widget_datas = elgg_view_entity_list($events, $options);
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php
new file mode 100644
index 000000000..3aa20f574
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php
@@ -0,0 +1,96 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('event_calendar:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[mode]',
+ 'options_values'=>array('day'=>elgg_echo('event_calendar:day_label'),
+ 'week'=>elgg_echo('event_calendar:week_label'),
+ 'month'=>elgg_echo('event_calendar:month_label')),
+ 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php
new file mode 100644
index 000000000..b726efe70
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php
@@ -0,0 +1,44 @@
+<?php
+
+ $object_type ='file';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php
new file mode 100644
index 000000000..5625eca44
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php
new file mode 100644
index 000000000..941b5ebeb
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php
@@ -0,0 +1,47 @@
+<?php
+
+$object_type = $vars["entity"]->widget_subtype;
+if (!isset($object_type))
+ $object_type = 'ELGG_ENTITIES_ANY_VALUE';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php
new file mode 100644
index 000000000..f7584a847
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php
@@ -0,0 +1,103 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+ $widget_subtype = $vars["entity"]->widget_subtype;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_subtype'); ?>
+ :
+ <?php
+
+ $subtypes = get_data("SELECT subtype from {$CONFIG->dbprefix}entity_subtypes");
+ $subtype_list = array();
+ if ($subtypes) {
+ foreach ($subtypes as $data) {
+ $subtype_list[$data->subtype] = $data->subtype;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_subtype]', 'options_values'=>$subtype_list, 'value'=>$widget_subtype));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php
new file mode 100644
index 000000000..0557f874e
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php
@@ -0,0 +1,21 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'group',
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+
+
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php
new file mode 100644
index 000000000..71f7d6be8
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php
@@ -0,0 +1,63 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+ </p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array( '1' => '1',
+ '3' => '3',
+ '5' => '5',
+ '8' => '8',
+ '10' => '10',
+ '12' => '12',
+ '15' => '15',
+ '20' => '20',
+ '30' => '30',
+ '40' => '40',
+ '50' => '50',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php
new file mode 100644
index 000000000..22b15b37c
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php
@@ -0,0 +1,50 @@
+<?php
+$object_type = 'izap_videos';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+?>
+<div class="contentWrapper">
+ <?php
+ if (isset($widget_datas)) {
+ echo $widget_datas;
+ }
+ ?>
+ <div class="clearfloat">
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php
new file mode 100644
index 000000000..54c41e1a9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php
new file mode 100644
index 000000000..c4f95a77d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php
@@ -0,0 +1,20 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+ $display_avatar = $vars['entity']->display_avatar;
+ if (!isset($display_avatar)) $display_avatar = 'yes';
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'metadata_names' => 'icontime',
+ 'types' => 'user',
+ 'limit' => $num_items,
+ 'full_view' => false,
+ 'pagination' => false,
+ 'size' => 'small',
+ ));
+
+echo $widget_datas;
+?>
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php
new file mode 100644
index 000000000..856d5ed0b
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php
@@ -0,0 +1,79 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $display_avatar = $vars['entity']->display_avatar;
+ if (!isset($display_avatar)) $display_avatar = 'yes';
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array(
+ '7' => '7',
+ '14' => '14',
+ '21' => '21',
+ '28' => '28',
+ '35' => '35',
+ '42' => '42',
+ '49' => '49',
+ '56' => '56',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:display_avatar'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[display_avatar]',
+ 'options_values' => array( 'yes' => 'yes',
+ 'no' => 'no',
+
+ ),
+ 'value' => $display_avatar
+ ));
+?>
+</p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php
new file mode 100644
index 000000000..8a10093b1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php
@@ -0,0 +1,47 @@
+<?php
+
+ $object_type ='news';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php
new file mode 100644
index 000000000..063b5ddc1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php
@@ -0,0 +1,85 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php
new file mode 100644
index 000000000..cc8a46d55
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php
@@ -0,0 +1,45 @@
+<?php
+
+ $object_type ='page_top';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php
new file mode 100644
index 000000000..a14371b02
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php
new file mode 100644
index 000000000..bb83cac40
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php
@@ -0,0 +1,25 @@
+<div class="contentWrapper">
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ if ($widget_group != 0){
+ $album = elgg_get_entities("object", 'album', $widget_group, "", 1, 0, false);
+ $album_guid = $album[0]->getGUID();
+ $entities = elgg_get_entities("object", "image", $album_guid, '', 999);
+ elgg_set_context('front');
+ $widgetdatas = elgg_view_entity_list($entities);
+ }else{
+ $widgetdatas = tp_get_latest_photos($num_items, 0);
+ }
+
+ echo '<div class="icon_latest">';
+ echo $widgetdatas;
+ echo '</div>';
+
+?>
+</div> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php
new file mode 100644
index 000000000..0ef5e53a1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php
new file mode 100644
index 000000000..1f06a0db1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php
@@ -0,0 +1,45 @@
+<?php
+
+ $object_type ='task_top';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php
new file mode 100644
index 000000000..c587bc184
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php
new file mode 100644
index 000000000..98d3b43e1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php
@@ -0,0 +1,17 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+ elgg_set_context('search');
+
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>'thewire',
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+
+ echo $widget_datas;
+?>
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php
new file mode 100644
index 000000000..d08066648
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php
@@ -0,0 +1,62 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+ </p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array( '1' => '1',
+ '3' => '3',
+ '5' => '5',
+ '8' => '8',
+ '10' => '10',
+ '12' => '12',
+ '15' => '15',
+ '20' => '20',
+ '30' => '30',
+ '40' => '40',
+ '50' => '50',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/login_index/content.php b/mod/custom_index_widgets/views/default/widgets/login_index/content.php
new file mode 100644
index 000000000..1e82df544
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/login_index/content.php
@@ -0,0 +1,15 @@
+<?php
+
+if (elgg_is_logged_in()) {
+ $top_box = "<h2>" . elgg_echo("welcome") . " ";
+ $top_box .= elgg_get_logged_in_user_entity()->name;
+ $top_box .= "</h2>";
+} else {
+ $top_box = elgg_view("core/account/login_box");
+}
+
+echo $top_box;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/login_index/edit.php b/mod/custom_index_widgets/views/default/widgets/login_index/edit.php
new file mode 100644
index 000000000..149008323
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/login_index/edit.php
@@ -0,0 +1,27 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+
+ $show_welcome = $vars['entity']->show_welcome;
+ if (!isset($show_welcome)) $show_welcome = "yes";
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php b/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php
new file mode 100644
index 000000000..dddc32bd7
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php
@@ -0,0 +1,27 @@
+<?php
+
+ $widget_video_width = $vars['entity']->widget_video_width;
+ $widget_video_height = $vars['entity']->widget_video_height;
+ $widget_video_url = $vars['entity']->widget_video_url;
+ $widget_video_caption = $vars['entity']->widget_video_caption;
+
+ if (!isset($widget_video_width)){
+ $widget_video_width = '250';
+ }
+ if (!isset($widget_video_height)){
+ $widget_video_height = '250';
+ }
+
+?>
+
+<div class="contentWrapper" align="center">
+ <a id="media<?php echo $vars['entity']->getGUID();?>" class="media" href="<?php echo $widget_video_url;?>"><?php echo $widget_video_title;?></a> <div class="clearfloat">
+ </div>
+</div>
+<?php if (isset($widget_video_url)) { ?>
+<script type="text/javascript">
+ jQuery(document).ready(function($){
+ $('#media<?php echo $vars['entity']->getGUID();?>').media({width:<?php echo $widget_video_width;?>, height:<?php echo $widget_video_height;?>, autoplay: true});
+ });
+</script>
+<?php } ?> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php b/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php
new file mode 100644
index 000000000..a3956159c
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php
@@ -0,0 +1,78 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+ $widget_video_width = $vars['entity']->widget_video_width;
+ $widget_video_height = $vars['entity']->widget_video_height;
+ $widget_video_url = $vars['entity']->widget_video_url;
+ $widget_video_title = $vars['entity']->widget_video_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_caption'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_caption]',
+ 'value' => $widget_video_caption
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_url'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_url]',
+ 'value' => $widget_video_url
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_width'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_width]',
+ 'value' => $widget_video_width
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_height'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_height]',
+ 'value' => $widget_video_height
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
+
diff --git a/mod/developers/languages/en.php b/mod/developers/languages/en.php
index 262759e23..266b5406e 100644
--- a/mod/developers/languages/en.php
+++ b/mod/developers/languages/en.php
@@ -28,7 +28,8 @@ $english = array(
'developers:label:show_strings' => "Show raw translation strings",
'developers:help:show_strings' => "This displays the translation strings used by elgg_echo().",
'developers:label:wrap_views' => "Wrap views",
- 'developers:help:wrap_views' => "This wraps almost every view with HTML comments. Useful for finding the view creating particular HTML.",
+ 'developers:help:wrap_views' => "This wraps almost every view with HTML comments. Useful for finding the view creating particular HTML.
+ This can break non-HTML views in the default viewtype. See developers_wrap_views() for details.",
'developers:label:log_events' => "Log events and plugin hooks",
'developers:help:log_events' => "Write events and plugin hooks to the log. Warning: there are many of these per page.",
@@ -54,6 +55,7 @@ $english = array(
'theme_preview:modules' => 'Modules',
'theme_preview:navigation' => 'Navigation',
'theme_preview:typography' => 'Typography',
+ 'theme_preview:miscellaneous' => 'Miscellaneous',
// unit tests
'developers:unit_tests:description' => 'Elgg has unit and integration tests for detecting bugs in its core classes and functions.',
diff --git a/mod/developers/manifest.xml b/mod/developers/manifest.xml
index e31998872..23e726e2b 100644
--- a/mod/developers/manifest.xml
+++ b/mod/developers/manifest.xml
@@ -8,7 +8,7 @@
<blurb>Developer tools for Elgg</blurb>
<description>A set of tools for writing plugins and themes. It is recommended that you have this plugin at the top of the plugin list.</description>
<website>http://www.elgg.org/</website>
- <bugtracker>http://trac.elgg.org</bugtracker>
+ <bugtracker>https://github.com/Elgg/Elgg/issues</bugtracker>
<copyright>See COPYRIGHT.txt</copyright>
<license>GNU General Public License version 2</license>
diff --git a/mod/developers/start.php b/mod/developers/start.php
index d77a96b36..94d0f652c 100644
--- a/mod/developers/start.php
+++ b/mod/developers/start.php
@@ -89,6 +89,15 @@ function developers_clear_strings() {
/**
* Post-process a view to add wrapper comments to it
+ *
+ * 1. Only process views served with the 'default' viewtype.
+ * 2. Does not wrap views that begin with js/ or css/ as they are not HTML.
+ * 3. Does not wrap views that are images (start with icon/). Is this still true?
+ * 4. Does not wrap input and output views (why?).
+ * 5. Does not wrap html head or the primary page shells
+ *
+ * @warning this will break views in the default viewtype that return non-HTML data
+ * that do not match the above restrictions.
*/
function developers_wrap_views($hook, $type, $result, $params) {
if (elgg_get_viewtype() != "default") {
@@ -176,6 +185,7 @@ function developers_theme_preview_controller($page) {
'modules',
'navigation',
'typography',
+ 'miscellaneous'
);
foreach ($pages as $page_name) {
diff --git a/mod/developers/views/default/developers/css.php b/mod/developers/views/default/developers/css.php
index 4690945a9..b4f59fdec 100644
--- a/mod/developers/views/default/developers/css.php
+++ b/mod/developers/views/default/developers/css.php
@@ -21,3 +21,7 @@
color: #666;
padding: 20px;
}
+
+.developers-content-thin {
+ max-width: 600px;
+} \ No newline at end of file
diff --git a/mod/developers/views/default/forms/developers/settings.php b/mod/developers/views/default/forms/developers/settings.php
index 584f6af30..78e1372de 100644
--- a/mod/developers/views/default/forms/developers/settings.php
+++ b/mod/developers/views/default/forms/developers/settings.php
@@ -10,20 +10,22 @@ echo '<p>' . elgg_echo('elgg_dev_tools:settings:explanation') . '</p>';
foreach ($vars['data'] as $name => $info) {
echo '<div>';
if ($info['type'] == 'checkbox') {
+ echo '<label>';
echo elgg_view("input/checkbox", array(
'name' => $name,
'value' => $info['value'],
'checked' => $info['checked'],
));
- echo '<label>' . elgg_echo("developers:label:$name") . '</label>';
+ echo elgg_echo("developers:label:$name") . '</label>';
echo '<span class="elgg-text-help">' . elgg_echo("developers:help:$name") . '</span>';
} else {
- echo '<label>' . elgg_echo("developers:label:$name") . '</label>';
+ echo '<label>' . elgg_echo("developers:label:$name");
echo elgg_view("input/{$info['type']}", array(
'name' => $name,
'value' => $info['value'],
'options_values' => $info['options_values'],
));
+ echo '</label>';
echo '<span class="elgg-text-help">' . elgg_echo("developers:help:$name") . '</span>';
}
echo '</div>';
diff --git a/mod/developers/views/default/page/theme_preview.php b/mod/developers/views/default/page/theme_preview.php
index 584387ec1..ee2bc0c0f 100644
--- a/mod/developers/views/default/page/theme_preview.php
+++ b/mod/developers/views/default/page/theme_preview.php
@@ -18,9 +18,19 @@ header("Content-type: text/html; charset=UTF-8");
</head>
<body>
<div class="elgg-page elgg-page-default">
+ <div class="elgg-page-messages">
+ <ul class="elgg-system-messages">
+ <li class="hidden"></li>
+ </ul>
+ </div>
<div class="elgg-page-header">
<div class="elgg-inner">
<h1 class="elgg-heading-site">Theme Sandbox</h1>
+ <?php
+ if (get_input("site_menu", false)) {
+ echo elgg_view_menu('site');
+ }
+ ?>
</div>
</div>
<div class="elgg-page-body">
diff --git a/mod/developers/views/default/theme_preview/components.php b/mod/developers/views/default/theme_preview/components.php
index 2f414cd88..50c155b14 100644
--- a/mod/developers/views/default/theme_preview/components.php
+++ b/mod/developers/views/default/theme_preview/components.php
@@ -22,4 +22,4 @@ $body = elgg_view('theme_preview/components/tags');
echo elgg_view_module('info', 'Tags (.elgg-tag)', $body);
$body = elgg_view('theme_preview/components/messages');
-echo elgg_view_module('info', 'Messages (.elgg-message)', $body);
+echo elgg_view_module('info', 'Messages (.elgg-message)', $body); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/components/image_block.php b/mod/developers/views/default/theme_preview/components/image_block.php
index 0bb16428b..ecd35ac65 100644
--- a/mod/developers/views/default/theme_preview/components/image_block.php
+++ b/mod/developers/views/default/theme_preview/components/image_block.php
@@ -1,6 +1,6 @@
-<?php
-$ipsum = elgg_view('developers/ipsum');
-
-$user = new ElggUser();
-$image = elgg_view_entity_icon($user, 'small');
-echo elgg_view_image_block($image, "$ipsum $ipsum $ipsum $ipsum $ipsum $ipsum $ipsum");
+<?php
+$ipsum = elgg_view('developers/ipsum');
+
+$user = new ElggUser();
+$image = elgg_view_entity_icon($user, 'small');
+echo elgg_view_image_block($image, "$ipsum $ipsum $ipsum $ipsum $ipsum $ipsum $ipsum");
diff --git a/mod/developers/views/default/theme_preview/components/list.php b/mod/developers/views/default/theme_preview/components/list.php
index 8096bda04..fcb6f768a 100644
--- a/mod/developers/views/default/theme_preview/components/list.php
+++ b/mod/developers/views/default/theme_preview/components/list.php
@@ -1,19 +1,19 @@
-<?php
-
-$obj1 = new ElggObject();
-$obj1->title = "Object 1";
-$obj1->description = $ipsum;
-
-$obj2 = new ElggObject();
-$obj2->title = "Object 2";
-$obj2->description = $ipsum;
-
-$obj3 = new ElggObject();
-$obj3->title = "Object 3";
-$obj3->description = $ipsum;
-
-$obj4 = new ElggObject();
-$obj4->title = "Object 4";
-$obj4->description = $ipsum;
-
-echo elgg_view('page/components/list', array('items' => array($obj1, $obj2, $obj3, $obj4)));
+<?php
+
+$obj1 = new ElggObject();
+$obj1->title = "Object 1";
+$obj1->description = $ipsum;
+
+$obj2 = new ElggObject();
+$obj2->title = "Object 2";
+$obj2->description = $ipsum;
+
+$obj3 = new ElggObject();
+$obj3->title = "Object 3";
+$obj3->description = $ipsum;
+
+$obj4 = new ElggObject();
+$obj4->title = "Object 4";
+$obj4->description = $ipsum;
+
+echo elgg_view('page/components/list', array('items' => array($obj1, $obj2, $obj3, $obj4)));
diff --git a/mod/developers/views/default/theme_preview/components/messages.php b/mod/developers/views/default/theme_preview/components/messages.php
index ac4d2bfd7..a53255291 100644
--- a/mod/developers/views/default/theme_preview/components/messages.php
+++ b/mod/developers/views/default/theme_preview/components/messages.php
@@ -1,5 +1,5 @@
-<ul>
- <li class="elgg-message elgg-state-success mas">Success message (.elgg-state-success)</li>
- <li class="elgg-message elgg-state-error mas">Error message (.elgg-state-error)</li>
- <li class="elgg-message elgg-state-notice mas">Notice message (.elgg-state-notice)</li>
-</ul>
+<ul>
+ <li class="elgg-message elgg-state-success mas">Success message (.elgg-state-success)</li>
+ <li class="elgg-message elgg-state-error mas">Error message (.elgg-state-error)</li>
+ <li class="elgg-message elgg-state-notice mas">Notice message (.elgg-state-notice)</li>
+</ul>
diff --git a/mod/developers/views/default/theme_preview/components/table.php b/mod/developers/views/default/theme_preview/components/table.php
index 8b8b13e76..7d619dcea 100644
--- a/mod/developers/views/default/theme_preview/components/table.php
+++ b/mod/developers/views/default/theme_preview/components/table.php
@@ -1,12 +1,12 @@
-<table class="<?php echo $vars['class']; ?>">
-<?php
- echo "<thead><tr><th>column 1</th><th>column 2</th></tr></thead>";
- for ($i = 1; $i < 5; $i++) {
- echo '<tr>';
- for ($j = 1; $j < 3; $j++) {
- echo "<td>value $j</td>";
- }
- echo '</tr>';
- }
-?>
+<table class="<?php echo $vars['class']; ?>">
+<?php
+ echo "<thead><tr><th>column 1</th><th>column 2</th></tr></thead>";
+ for ($i = 1; $i < 5; $i++) {
+ echo '<tr>';
+ for ($j = 1; $j < 3; $j++) {
+ echo "<td>value $j</td>";
+ }
+ echo '</tr>';
+ }
+?>
</table> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/general.php b/mod/developers/views/default/theme_preview/general.php
index 629462873..7d98d4443 100644
--- a/mod/developers/views/default/theme_preview/general.php
+++ b/mod/developers/views/default/theme_preview/general.php
@@ -11,6 +11,29 @@
The preview is divided into sections that are listed in the page menu
(usually in the sidebar but depends on your current theme).
</p>
+<?php
+$simple_cache = elgg_get_config('simplecache_enabled');
+$system_cache = elgg_get_config('system_cache_enabled');
+
+if ($simple_cache || $system_cache) {
+ $advanced = elgg_view('output/url', array(
+ 'text' => 'Advanced Settings',
+ 'href' => 'admin/settings/advanced',
+ 'is_trusted' => true
+ ));
+ $developers = elgg_view('output/url', array(
+ 'text' => 'Developers\' Plugin Settings',
+ 'href' => 'admin/developers/settings',
+ 'is_trusted' => true
+ ));
+
+ $body = "Caches are enabled. Changes you make to CSS and views might not appear. It is
+ always recommended to disable caches while developing themes and plugins. To
+ disable caches, visit the $advanced or $developers pages.";
+
+ echo elgg_view_module('info', 'Warning', $body);
+}
+?>
<p>
<?php
echo elgg_view('output/url', array(
diff --git a/mod/developers/views/default/theme_preview/icons/avatars.php b/mod/developers/views/default/theme_preview/icons/avatars.php
index f50a6b70d..3aa1eda26 100644
--- a/mod/developers/views/default/theme_preview/icons/avatars.php
+++ b/mod/developers/views/default/theme_preview/icons/avatars.php
@@ -1,36 +1,36 @@
-<?php
- $user = new ElggUser();
- $group = new ElggGroup();
-
- $sizes = array('large', 'medium', 'small', 'tiny');
-?>
-<table class="elgg-table">
- <tr>
- <th></th>
- <?php
- foreach ($sizes as $size) {
- echo "<th>$size</th>";
- }
- ?>
- </tr>
- <tr>
- <th>User</th>
- <?php
- foreach ($sizes as $size) {
- echo '<td>';
- echo elgg_view_entity_icon($user, $size, array('use_hover' => false));
- echo '</td>';
- }
- ?>
- </tr>
- <tr>
- <th>Group</th>
- <?php
- foreach ($sizes as $size) {
- echo '<td>';
- echo elgg_view_entity_icon($group, $size, array('use_hover' => false));
- echo '</td>';
- }
- ?>
- </tr>
-</table>
+<?php
+ $user = new ElggUser();
+ $group = new ElggGroup();
+
+ $sizes = array('large', 'medium', 'small', 'tiny');
+?>
+<table class="elgg-table">
+ <tr>
+ <th></th>
+ <?php
+ foreach ($sizes as $size) {
+ echo "<th>$size</th>";
+ }
+ ?>
+ </tr>
+ <tr>
+ <th>User</th>
+ <?php
+ foreach ($sizes as $size) {
+ echo '<td>';
+ echo elgg_view_entity_icon($user, $size, array('use_hover' => false));
+ echo '</td>';
+ }
+ ?>
+ </tr>
+ <tr>
+ <th>Group</th>
+ <?php
+ foreach ($sizes as $size) {
+ echo '<td>';
+ echo elgg_view_entity_icon($group, $size, array('use_hover' => false));
+ echo '</td>';
+ }
+ ?>
+ </tr>
+</table>
diff --git a/mod/developers/views/default/theme_preview/icons/sprites.php b/mod/developers/views/default/theme_preview/icons/sprites.php
index 134dd9aca..3edb0bd7c 100644
--- a/mod/developers/views/default/theme_preview/icons/sprites.php
+++ b/mod/developers/views/default/theme_preview/icons/sprites.php
@@ -1,61 +1,61 @@
-<?php
-$icons = array(
- 'arrow-left',
- 'arrow-right',
- 'arrow-two-head',
- 'calendar',
- 'checkmark',
- 'clip',
- 'cursor-drag-arrow',
- 'delete-alt',
- 'delete',
- 'download',
- 'facebook',
- 'home',
- 'hover-menu',
- 'link',
- 'mail-alt',
- 'mail',
- 'print-alt',
- 'print',
- 'push-pin-alt',
- 'push-pin',
- 'redo',
- 'refresh',
- 'round-arrow-left',
- 'round-arrow-right',
- 'round-checkmark',
- 'round-minus',
- 'round-plus',
- 'rss',
- 'search-focus',
- 'search',
- 'settings-alt',
- 'settings',
- 'share',
- 'shop-cart',
- 'speech-bubble-alt',
- 'speech-bubble',
- 'star-alt',
- 'star-empty',
- 'star',
- 'tag',
- 'thumbs-down-alt',
- 'thumbs-down',
- 'thumbs-up-alt',
- 'thumbs-up',
- 'trash',
- 'twitter',
- 'undo',
- 'user',
- 'users',
-);
-?>
-
-<ul class="elgg-gallery">
-<?php
- foreach ($icons as $icon) {
- echo "<li title=\".elgg-icon-$icon\" style=\"margin:10px\">" . elgg_view_icon($icon) . "</li>";
- }
-?>
+<?php
+$icons = array(
+ 'arrow-left',
+ 'arrow-right',
+ 'arrow-two-head',
+ 'calendar',
+ 'checkmark',
+ 'clip',
+ 'cursor-drag-arrow',
+ 'delete-alt',
+ 'delete',
+ 'download',
+ 'facebook',
+ 'home',
+ 'hover-menu',
+ 'link',
+ 'mail-alt',
+ 'mail',
+ 'print-alt',
+ 'print',
+ 'push-pin-alt',
+ 'push-pin',
+ 'redo',
+ 'refresh',
+ 'round-arrow-left',
+ 'round-arrow-right',
+ 'round-checkmark',
+ 'round-minus',
+ 'round-plus',
+ 'rss',
+ 'search-focus',
+ 'search',
+ 'settings-alt',
+ 'settings',
+ 'share',
+ 'shop-cart',
+ 'speech-bubble-alt',
+ 'speech-bubble',
+ 'star-alt',
+ 'star-empty',
+ 'star',
+ 'tag',
+ 'thumbs-down-alt',
+ 'thumbs-down',
+ 'thumbs-up-alt',
+ 'thumbs-up',
+ 'trash',
+ 'twitter',
+ 'undo',
+ 'user',
+ 'users',
+);
+?>
+
+<ul class="elgg-gallery">
+<?php
+ foreach ($icons as $icon) {
+ echo "<li title=\".elgg-icon-$icon\" style=\"margin:10px\">" . elgg_view_icon($icon) . "</li>";
+ }
+?>
</ul> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous.php b/mod/developers/views/default/theme_preview/miscellaneous.php
new file mode 100644
index 000000000..2f4ee4acd
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Miscellaneous and complex components
+ */
+
+$body = elgg_view('theme_preview/miscellaneous/lightbox');
+echo elgg_view_module('info', 'Lightbox (.elgg-lightbox)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/popup');
+echo elgg_view_module('info', 'Popup (rel=popup)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/toggle');
+echo elgg_view_module('info', 'Toggle (rel=toggle)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/system_messages');
+echo elgg_view_module('info', 'System Messages and Errors', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/site_menu');
+echo elgg_view_module('info', 'Site Menu', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/user_hover_menu');
+echo elgg_view_module('info', 'User Icon with Hover Menu', $body); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php b/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php
new file mode 100644
index 000000000..b673c4ee0
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php
@@ -0,0 +1,19 @@
+<?php
+
+elgg_load_js('lightbox');
+elgg_load_css('lightbox');
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Open lighbox',
+ 'href' => "#elgg-lightbox-test",
+ 'class' => 'elgg-lightbox'
+));
+
+echo $link;
+echo '<div class="hidden">';
+echo elgg_view_module('aside', 'Lightbox Test', $ipsum, array(
+ 'id' => 'elgg-lightbox-test'
+));
+echo '</div>'; \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/popup.php b/mod/developers/views/default/theme_preview/miscellaneous/popup.php
new file mode 100644
index 000000000..b711bb7cc
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/popup.php
@@ -0,0 +1,15 @@
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Popup content',
+ 'href' => "#elgg-popup-test",
+ 'rel' => 'popup'
+));
+
+echo $link;
+echo elgg_view_module('popup', 'Popup Test', $ipsum, array(
+ 'id' => 'elgg-popup-test',
+ 'class' => 'hidden clearfix developers-content-thin',
+)); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php b/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php
new file mode 100644
index 000000000..e2384b9f7
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php
@@ -0,0 +1,15 @@
+<?php
+
+if (!get_input('site_menu')) {
+ echo elgg_view('output/url', array(
+ 'text' => 'Show Site Menu',
+ 'href' => elgg_http_add_url_query_elements(current_page_url(), array('site_menu' => 1)),
+ 'is_trusted' => true
+ ));
+} else {
+ echo elgg_view('output/url', array(
+ 'text' => 'Hide Site Menu',
+ 'href' => elgg_http_remove_url_query_element(current_page_url(), 'site_menu'),
+ 'is_trusted' => true
+ ));
+} \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php b/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php
new file mode 100644
index 000000000..a6663a3dc
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php
@@ -0,0 +1,35 @@
+<?php
+
+// can't use the ipsum because it includes html when wrapping views.
+$message = elgg_view('output/url', array(
+ 'text' => 'Show system message (system_message())',
+ 'is_trusted' => true,
+ 'href' => '#',
+ 'id' => 'developers-system-message',
+// 'onclick' => "elgg.system_message('Elgg System Message');"
+));
+
+$error = elgg_view('output/url', array(
+ 'text' => 'Show error message (register_error())',
+ 'is_trusted' => true,
+ 'href' => '#',
+ 'id' => 'developers-error-message',
+));
+
+?>
+<script type="text/javascript">
+ $(function() {
+ $('#developers-system-message').click(function() {
+ elgg.system_message('Elgg System Message');
+ })
+
+ $('#developers-error-message').click(function() {
+ elgg.register_error('Elgg Error Message');
+ })
+ });
+</script>
+
+<ul>
+ <li><?php echo $message; ?></li>
+ <li><?php echo $error; ?></li>
+</ul> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/toggle.php b/mod/developers/views/default/theme_preview/miscellaneous/toggle.php
new file mode 100644
index 000000000..abe39ddd8
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/toggle.php
@@ -0,0 +1,15 @@
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Toggle content',
+ 'href' => "#elgg-toggle-test",
+ 'rel' => 'toggle'
+));
+
+echo $link;
+echo elgg_view_module('featured', 'Toggle Test', $ipsum, array(
+ 'id' => 'elgg-toggle-test',
+ 'class' => 'hidden clearfix developers-content-thin',
+)); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php b/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php
new file mode 100644
index 000000000..45331b6e0
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php
@@ -0,0 +1,16 @@
+<?php
+
+$me = elgg_get_logged_in_user_entity();
+echo elgg_view_entity_icon($me);
+
+// show another user if available
+$users = elgg_get_entities(array(
+ 'type' => 'user',
+ 'wheres' => array("guid != {$me->getGUID()}"),
+ 'limit' => 1
+));
+
+if (is_array($users) && count($users) > 0) {
+ echo elgg_view_entity_icon($users[0]);
+}
+
diff --git a/mod/developers/views/default/theme_preview/modules.php b/mod/developers/views/default/theme_preview/modules.php
index 3e0acb3a5..c46c94296 100644
--- a/mod/developers/views/default/theme_preview/modules.php
+++ b/mod/developers/views/default/theme_preview/modules.php
@@ -2,5 +2,5 @@
echo elgg_view_module('info', 'Modules (.elgg-module)', elgg_view('theme_preview/modules/modules'));
-echo elgg_view_module('info', 'Widgets (.elgg-widget)', elgg_view('theme_preview/modules/widgets'));
+echo elgg_view_module('info', 'Widgets (.elgg-module-widget)', elgg_view('theme_preview/modules/widgets'));
diff --git a/mod/developers/views/default/theme_preview/modules/modules.php b/mod/developers/views/default/theme_preview/modules/modules.php
index e0d39c0da..04f5917b4 100644
--- a/mod/developers/views/default/theme_preview/modules/modules.php
+++ b/mod/developers/views/default/theme_preview/modules/modules.php
@@ -1,23 +1,23 @@
-<?php
-
-$ipsum = elgg_view('developers/ipsum');
-
-?>
-<div class="elgg-grid">
- <div class="elgg-col elgg-col-1of2">
- <div class="pam">
- <?php
- echo elgg_view_module('aside', 'Aside (.elgg-module-aside)', $ipsum);
- echo elgg_view_module('popup', 'Popup (.elgg-module-popup)', $ipsum);
- ?>
- </div>
- </div>
- <div class="elgg-col elgg-col-1of2">
- <div class="pam">
- <?php
- echo elgg_view_module('info', 'Info (.elgg-module-info)', $ipsum);
- echo elgg_view_module('featured', 'Featured (.elgg-module-featured)', $ipsum);
- ?>
- </div>
- </div>
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+?>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="pam">
+ <?php
+ echo elgg_view_module('aside', 'Aside (.elgg-module-aside)', $ipsum);
+ echo elgg_view_module('popup', 'Popup (.elgg-module-popup)', $ipsum);
+ ?>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2">
+ <div class="pam">
+ <?php
+ echo elgg_view_module('info', 'Info (.elgg-module-info)', $ipsum);
+ echo elgg_view_module('featured', 'Featured (.elgg-module-featured)', $ipsum);
+ ?>
+ </div>
+ </div>
</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php b/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php
index c910b2aa4..0439bd577 100644
--- a/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php
+++ b/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php
@@ -1,10 +1,10 @@
-<?php
-elgg_push_breadcrumb('First', "#");
-elgg_push_breadcrumb('Second', "#");
-elgg_push_breadcrumb('Third');
-
-echo elgg_view('navigation/breadcrumbs', array('class' => mts));
-
-elgg_pop_breadcrumb();
-elgg_pop_breadcrumb();
-elgg_pop_breadcrumb();
+<?php
+elgg_push_breadcrumb('First', "#");
+elgg_push_breadcrumb('Second', "#");
+elgg_push_breadcrumb('Third');
+
+echo elgg_view('navigation/breadcrumbs', array('class' => mts));
+
+elgg_pop_breadcrumb();
+elgg_pop_breadcrumb();
+elgg_pop_breadcrumb();
diff --git a/mod/developers/views/default/theme_preview/navigation/default.php b/mod/developers/views/default/theme_preview/navigation/default.php
index bfd26162f..6efcd8890 100644
--- a/mod/developers/views/default/theme_preview/navigation/default.php
+++ b/mod/developers/views/default/theme_preview/navigation/default.php
@@ -1,11 +1,11 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-
-echo elgg_view('navigation/menu/default', $params);
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/extras.php b/mod/developers/views/default/theme_preview/navigation/extras.php
index 43b19f8e3..01bc6d434 100644
--- a/mod/developers/views/default/theme_preview/navigation/extras.php
+++ b/mod/developers/views/default/theme_preview/navigation/extras.php
@@ -1,18 +1,18 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-$params['menu']['default'][] = new ElggMenuItem(1, elgg_view_icon('push-pin-alt'), "#");
-$params['menu']['default'][] = new ElggMenuItem(2, elgg_view_icon('rss'), "#");
-$params['menu']['default'][] = new ElggMenuItem(3, elgg_view_icon('star-alt'), "#");
-$params['name'] = 'extras';
-$params['class'] = 'elgg-menu-hz';
-
-?>
-
-<div class="elgg-sidebar">
-<?php
- echo elgg_view('navigation/menu/default', $params);
-?>
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+$params['menu']['default'][] = new ElggMenuItem(1, elgg_view_icon('push-pin-alt'), "#");
+$params['menu']['default'][] = new ElggMenuItem(2, elgg_view_icon('rss'), "#");
+$params['menu']['default'][] = new ElggMenuItem(3, elgg_view_icon('star-alt'), "#");
+$params['name'] = 'extras';
+$params['class'] = 'elgg-menu-hz';
+
+?>
+
+<div class="elgg-sidebar">
+<?php
+ echo elgg_view('navigation/menu/default', $params);
+?>
</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/filter.php b/mod/developers/views/default/theme_preview/navigation/filter.php
index ea1c8b033..70cd31d2a 100644
--- a/mod/developers/views/default/theme_preview/navigation/filter.php
+++ b/mod/developers/views/default/theme_preview/navigation/filter.php
@@ -1,13 +1,13 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-
-$params['name'] = 'filter';
-
-echo elgg_view('navigation/menu/default', $params);
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+$params['name'] = 'filter';
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/horizontal.php b/mod/developers/views/default/theme_preview/navigation/horizontal.php
index f404f42c0..44e04cd7c 100644
--- a/mod/developers/views/default/theme_preview/navigation/horizontal.php
+++ b/mod/developers/views/default/theme_preview/navigation/horizontal.php
@@ -1,12 +1,12 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-$params['class'] = 'elgg-menu-hz';
-
-echo elgg_view('navigation/menu/default', $params);
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+$params['class'] = 'elgg-menu-hz';
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/owner_block.php b/mod/developers/views/default/theme_preview/navigation/owner_block.php
index 20b93d166..f5f203947 100644
--- a/mod/developers/views/default/theme_preview/navigation/owner_block.php
+++ b/mod/developers/views/default/theme_preview/navigation/owner_block.php
@@ -1,13 +1,13 @@
-<?php
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-$params['name'] = 'owner-block';
-
-echo '<div class="elgg-sidebar">';
-echo elgg_view('navigation/menu/default', $params);
-echo '</div>';
+<?php
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+$params['name'] = 'owner-block';
+
+echo '<div class="elgg-sidebar">';
+echo elgg_view('navigation/menu/default', $params);
+echo '</div>';
diff --git a/mod/developers/views/default/theme_preview/navigation/page.php b/mod/developers/views/default/theme_preview/navigation/page.php
index a57edc2e2..1da6a1fd9 100644
--- a/mod/developers/views/default/theme_preview/navigation/page.php
+++ b/mod/developers/views/default/theme_preview/navigation/page.php
@@ -1,20 +1,20 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-
-$m = new ElggMenuItem(10, "Child", "#");
-$m->setParent($params['menu']['default'][1]);
-$params['menu']['default'][1]->addChild($m);
-?>
-
-<div class="elgg-sidebar">
-<?php
- echo elgg_view('navigation/menu/page', $params);
-?>
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+$m = new ElggMenuItem(10, "Child", "#");
+$m->setParent($params['menu']['default'][1]);
+$params['menu']['default'][1]->addChild($m);
+?>
+
+<div class="elgg-sidebar">
+<?php
+ echo elgg_view('navigation/menu/page', $params);
+?>
</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/pagination.php b/mod/developers/views/default/theme_preview/navigation/pagination.php
index 90ae48edf..f5e1b632d 100644
--- a/mod/developers/views/default/theme_preview/navigation/pagination.php
+++ b/mod/developers/views/default/theme_preview/navigation/pagination.php
@@ -1,8 +1,8 @@
-<?php
-$params = array(
- 'count' => 1000,
- 'limit' => 10,
- 'offset' => 230,
-);
-
+<?php
+$params = array(
+ 'count' => 1000,
+ 'limit' => 10,
+ 'offset' => 230,
+);
+
echo elgg_view('navigation/pagination', $params); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/site.php b/mod/developers/views/default/theme_preview/navigation/site.php
index 329036b80..90bb8ff46 100644
--- a/mod/developers/views/default/theme_preview/navigation/site.php
+++ b/mod/developers/views/default/theme_preview/navigation/site.php
@@ -1,18 +1,18 @@
-<?php
-
-$params = array();
-$params['menu'] = array();
-$params['menu']['default'] = array();
-for ($i=1; $i<=5; $i++) {
- $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
-}
-$params['menu']['default'][2]->setSelected(true);
-?>
-
-<div class="elgg-page-header">
- <div class="elgg-inner">
- <?php
- echo elgg_view('navigation/menu/site', $params);
- ?>
- </div>
-</div>
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+?>
+
+<div class="elgg-page-header">
+ <div class="elgg-inner">
+ <?php
+ echo elgg_view('navigation/menu/site', $params);
+ ?>
+ </div>
+</div>
diff --git a/mod/developers/views/default/theme_preview/navigation/tabs.php b/mod/developers/views/default/theme_preview/navigation/tabs.php
index 81fe4e669..dd282dc83 100644
--- a/mod/developers/views/default/theme_preview/navigation/tabs.php
+++ b/mod/developers/views/default/theme_preview/navigation/tabs.php
@@ -1,10 +1,10 @@
-<?php
-$params = array(
- 'tabs' => array(
- array('title' => 'First', 'url' => "#"),
- array('title' => 'Second', 'url' => "#", 'selected' => true),
- array('title' => 'Third', 'url' => "#"),
- )
-);
-
+<?php
+$params = array(
+ 'tabs' => array(
+ array('title' => 'First', 'url' => "#"),
+ array('title' => 'Second', 'url' => "#", 'selected' => true),
+ array('title' => 'Third', 'url' => "#"),
+ )
+);
+
echo elgg_view('navigation/tabs', $params); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography/headings.php b/mod/developers/views/default/theme_preview/typography/headings.php
index 1eb96c75c..d843853e3 100644
--- a/mod/developers/views/default/theme_preview/typography/headings.php
+++ b/mod/developers/views/default/theme_preview/typography/headings.php
@@ -1,6 +1,6 @@
-<h1>Level 1 heading</h1>
-<h2>Level 2 heading</h2>
-<h3>Level 3 heading</h3>
-<h4>Level 4 heading</h4>
-<h5>Level 5 heading</h5>
+<h1>Level 1 heading</h1>
+<h2>Level 2 heading</h2>
+<h3>Level 3 heading</h3>
+<h4>Level 4 heading</h4>
+<h5>Level 5 heading</h5>
<h6>Level 6 heading</h6> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography/misc.php b/mod/developers/views/default/theme_preview/typography/misc.php
index 93a279c36..0b9fd9db7 100644
--- a/mod/developers/views/default/theme_preview/typography/misc.php
+++ b/mod/developers/views/default/theme_preview/typography/misc.php
@@ -1,16 +1,16 @@
-<ul>
- <li>I am <a href="?abc123">the a tag</a> example</li>
- <li>I am <abbr title="test">the abbr tag</abbr> example</li>
- <li>I am <acronym>the acronym tag</acronym> example</li>
- <li>I am <b>the b tag</b> example</li>
- <li>I am <code>the code tag</code> example</li>
- <li>I am <del>the del tag</del> example</li>
- <li>I am <em>the em tag</em> example</li>
- <li>I am <i>the i tag</i> example</li>
- <li>I am <strong>the strong tag</strong> example</li>
-</ul>
-<blockquote><p>Paragraph inside Blockquote: <?php echo $ipsum; ?></p></blockquote>
-<pre>
- <strong>Preformated:</strong>Testing one row
- and another
-</pre>
+<ul>
+ <li>I am <a href="?abc123">the a tag</a> example</li>
+ <li>I am <abbr title="test">the abbr tag</abbr> example</li>
+ <li>I am <acronym>the acronym tag</acronym> example</li>
+ <li>I am <b>the b tag</b> example</li>
+ <li>I am <code>the code tag</code> example</li>
+ <li>I am <del>the del tag</del> example</li>
+ <li>I am <em>the em tag</em> example</li>
+ <li>I am <i>the i tag</i> example</li>
+ <li>I am <strong>the strong tag</strong> example</li>
+</ul>
+<blockquote><p>Paragraph inside Blockquote: <?php echo $ipsum; ?></p></blockquote>
+<pre>
+ <strong>Preformated:</strong>Testing one row
+ and another
+</pre>
diff --git a/mod/developers/views/default/theme_preview/typography/paragraph.php b/mod/developers/views/default/theme_preview/typography/paragraph.php
index 54d548f46..a3a7b2cfa 100644
--- a/mod/developers/views/default/theme_preview/typography/paragraph.php
+++ b/mod/developers/views/default/theme_preview/typography/paragraph.php
@@ -1,19 +1,19 @@
-<p>Lorem ipsum dolor sit amet, <a href="#" title="test link">test link</a>
-adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
-faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
-nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
-mattis, massa quis luctus <strong>strong</strong>, turpis mi volutpat justo, eu
-volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
-eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
-consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
-quis tellus.</p>
-
-<p>Lorem ipsum dolor sit amet, <em>emphasis</em> consectetuer
-adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
-faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
-nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
-mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu
-volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
-eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
-consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
+<p>Lorem ipsum dolor sit amet, <a href="#" title="test link">test link</a>
+adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
+faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
+nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
+mattis, massa quis luctus <strong>strong</strong>, turpis mi volutpat justo, eu
+volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
+eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
+consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
+quis tellus.</p>
+
+<p>Lorem ipsum dolor sit amet, <em>emphasis</em> consectetuer
+adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
+faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
+nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
+mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu
+volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
+eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
+consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
quis tellus.</p> \ No newline at end of file
diff --git a/mod/dokuwiki b/mod/dokuwiki
deleted file mode 160000
-Subproject 6d6a4cda5706342a9e041feda4c3b026feb9cdc
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 Sren Fuhrmann of golem.de)
+ * improved changing ATOM versions handling (thanks to August Trometer)
+ * improved the UniversalFeedCreator's useCached method (thanks to Sren Fuhrmann of golem.de)
+ * added charset output in HTTP headers (thanks to Sren Fuhrmann of golem.de)
+ * added Slashdot namespace to RSS 1.0 (thanks to Sren 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
--- /