aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Module/Block.php8
-rw-r--r--Zotlabs/Module/Blocks.php13
-rw-r--r--Zotlabs/Module/Connedit.php22
-rw-r--r--Zotlabs/Module/Display.php5
-rw-r--r--Zotlabs/Module/Editblock.php4
-rw-r--r--Zotlabs/Module/Editlayout.php5
-rw-r--r--Zotlabs/Module/Editwebpage.php4
-rw-r--r--Zotlabs/Module/Embedphotos.php180
-rw-r--r--Zotlabs/Module/Impel.php26
-rw-r--r--Zotlabs/Module/Item.php30
-rw-r--r--Zotlabs/Module/Layouts.php20
-rw-r--r--Zotlabs/Module/Page.php20
-rw-r--r--Zotlabs/Module/README.md80
-rw-r--r--Zotlabs/Module/Webpages.php18
-rw-r--r--Zotlabs/Module/Wiki.php58
-rw-r--r--Zotlabs/Render/Comanche.php9
-rw-r--r--Zotlabs/Storage/BasicAuth.php53
-rw-r--r--Zotlabs/Web/Controller.php3
-rwxr-xr-xboot.php9
-rw-r--r--doc/bbcode.html3
-rw-r--r--doc/context/de/wiki/help.html10
-rw-r--r--doc/context/en/wiki/help.html10
-rw-r--r--doc/context/es-es/wiki/help.html10
-rw-r--r--doc/context/it/wiki/help.html10
-rw-r--r--doc/database.bb11
-rw-r--r--doc/database/db_abook.bb15
-rw-r--r--doc/database/db_addon.bb4
-rw-r--r--doc/database/db_app.bb14
-rw-r--r--doc/database/db_attach.bb4
-rw-r--r--doc/database/db_channel.bb4
-rw-r--r--doc/database/db_chatpresence.bb2
-rw-r--r--doc/database/db_clients.bb2
-rw-r--r--doc/database/db_event.bb26
-rw-r--r--doc/database/db_groups.bb2
-rw-r--r--doc/database/db_hook.bb6
-rw-r--r--doc/database/db_item.bb2
-rw-r--r--doc/database/db_notify.bb4
-rw-r--r--doc/database/db_photo.bb6
-rw-r--r--doc/database/db_profile.bb6
-rw-r--r--doc/database/db_term.bb2
-rw-r--r--include/api.php17
-rw-r--r--include/attach.php12
-rw-r--r--include/bbcode.php22
-rw-r--r--include/channel.php22
-rw-r--r--include/connections.php16
-rw-r--r--include/conversation.php19
-rw-r--r--include/group.php18
-rw-r--r--include/help.php17
-rw-r--r--include/import.php13
-rwxr-xr-xinclude/items.php46
-rw-r--r--include/network.php38
-rw-r--r--include/page_widgets.php11
-rw-r--r--include/photos.php14
-rwxr-xr-xinclude/plugin.php33
-rw-r--r--include/taxonomy.php2
-rw-r--r--include/text.php63
-rw-r--r--include/widgets.php9
-rw-r--r--include/wiki.php55
-rw-r--r--install/schema_mysql.sql22
-rw-r--r--install/schema_postgres.sql26
-rw-r--r--install/update.php73
-rw-r--r--library/Text_Highlighter/README455
-rw-r--r--library/Text_Highlighter/TODO12
-rw-r--r--library/Text_Highlighter/Text/Highlighter.php398
-rw-r--r--library/Text_Highlighter/Text/Highlighter/ABAP.php519
-rw-r--r--library/Text_Highlighter/Text/Highlighter/AVRC.php894
-rw-r--r--library/Text_Highlighter/Text/Highlighter/CPP.php891
-rw-r--r--library/Text_Highlighter/Text/Highlighter/CSS.php437
-rw-r--r--library/Text_Highlighter/Text/Highlighter/DIFF.php384
-rw-r--r--library/Text_Highlighter/Text/Highlighter/DTD.php426
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Generator.php1291
-rw-r--r--library/Text_Highlighter/Text/Highlighter/HTML.php234
-rw-r--r--library/Text_Highlighter/Text/Highlighter/JAVA.php802
-rw-r--r--library/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php631
-rw-r--r--library/Text_Highlighter/Text/Highlighter/MYSQL.php434
-rw-r--r--library/Text_Highlighter/Text/Highlighter/PERL.php1352
-rw-r--r--library/Text_Highlighter/Text/Highlighter/PHP.php1107
-rw-r--r--library/Text_Highlighter/Text/Highlighter/PYTHON.php647
-rw-r--r--library/Text_Highlighter/Text/Highlighter/RUBY.php825
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer.php164
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/Array.php200
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/BB.php238
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/Console.php208
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/Html.php465
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php187
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/JSON.php86
-rw-r--r--library/Text_Highlighter/Text/Highlighter/Renderer/XML.php104
-rw-r--r--library/Text_Highlighter/Text/Highlighter/SH.php1225
-rw-r--r--library/Text_Highlighter/Text/Highlighter/SQL.php419
-rw-r--r--library/Text_Highlighter/Text/Highlighter/VBSCRIPT.php318
-rw-r--r--library/Text_Highlighter/Text/Highlighter/XML.php263
-rw-r--r--library/Text_Highlighter/abap.xml802
-rw-r--r--library/Text_Highlighter/avrc.xml316
-rw-r--r--library/Text_Highlighter/cpp.xml201
-rw-r--r--library/Text_Highlighter/css.xml368
-rw-r--r--library/Text_Highlighter/diff.xml45
-rw-r--r--library/Text_Highlighter/dtd.xml66
-rw-r--r--library/Text_Highlighter/generate171
-rw-r--r--library/Text_Highlighter/generate.bat188
-rw-r--r--library/Text_Highlighter/html.xml33
-rw-r--r--library/Text_Highlighter/java.xml2824
-rw-r--r--library/Text_Highlighter/javascript.xml174
-rw-r--r--library/Text_Highlighter/mysql.xml424
-rw-r--r--library/Text_Highlighter/perl.xml439
-rw-r--r--library/Text_Highlighter/php.xml194
-rw-r--r--library/Text_Highlighter/python.xml229
-rw-r--r--library/Text_Highlighter/release4
-rw-r--r--library/Text_Highlighter/ruby.xml141
-rw-r--r--library/Text_Highlighter/sample.css62
-rw-r--r--library/Text_Highlighter/sh.xml242
-rw-r--r--library/Text_Highlighter/sql.xml496
-rw-r--r--library/Text_Highlighter/vbscript.xml305
-rw-r--r--library/Text_Highlighter/xml.xml37
-rw-r--r--library/fullcalendar/CHANGELOG.txt45
-rw-r--r--library/fullcalendar/CONTRIBUTING.txt2
-rw-r--r--library/fullcalendar/fullcalendar.css220
-rw-r--r--library/fullcalendar/fullcalendar.js1722
-rw-r--r--library/fullcalendar/fullcalendar.min.css6
-rw-r--r--library/fullcalendar/fullcalendar.min.js12
-rw-r--r--library/fullcalendar/fullcalendar.print.css4
-rw-r--r--library/fullcalendar/gcal.js8
-rw-r--r--library/fullcalendar/lang-all.js8
-rw-r--r--util/hmessages.po2223
-rw-r--r--util/po2php.php12
-rw-r--r--view/css/mod_cal.css4
-rw-r--r--view/css/mod_events.css4
-rw-r--r--view/js/mod_cal.js22
-rw-r--r--view/js/mod_events.js18
-rw-r--r--view/php/default.php2
-rw-r--r--view/php/theme_init.php1
-rw-r--r--view/theme/redbasic/css/style.css6
-rwxr-xr-xview/tpl/event_head.tpl7
-rwxr-xr-xview/tpl/jot-header.tpl83
-rwxr-xr-xview/tpl/jot.tpl29
-rwxr-xr-xview/tpl/profile_advanced.tpl2
-rw-r--r--view/tpl/wiki.tpl41
136 files changed, 27255 insertions, 1871 deletions
diff --git a/Zotlabs/Module/Block.php b/Zotlabs/Module/Block.php
index 062befdb5..45e61e4ea 100644
--- a/Zotlabs/Module/Block.php
+++ b/Zotlabs/Module/Block.php
@@ -52,8 +52,8 @@ class Block extends \Zotlabs\Web\Controller {
require_once('include/security.php');
$sql_options = item_permissions_sql($u[0]['channel_id']);
- $r = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid = '%s' and service = 'BUILDBLOCK' and
+ $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and iconfig.k = 'BUILDBLOCK' and
item_type = %d $sql_options $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
@@ -64,8 +64,8 @@ class Block extends \Zotlabs\Web\Controller {
// Check again with no permissions clause to see if it is a permissions issue
- $x = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid = '%s' and service = 'BUILDBLOCK' and
+ $x = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and iconfig.k = 'BUILDBLOCK' and
item_type = %d $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
diff --git a/Zotlabs/Module/Blocks.php b/Zotlabs/Module/Blocks.php
index 32650a090..475cfa6b3 100644
--- a/Zotlabs/Module/Blocks.php
+++ b/Zotlabs/Module/Blocks.php
@@ -27,7 +27,7 @@ class Blocks extends \Zotlabs\Web\Controller {
}
- function get() {
+ function get() {
if(! \App::$profile) {
notice( t('Requested profile is not available.') . EOL );
@@ -111,8 +111,11 @@ class Blocks extends \Zotlabs\Web\Controller {
$editor = status_editor($a,$x);
- $r = q("select iid, sid, mid, title, body, mimetype, created, edited from item_id left join item on item_id.iid = item.id
- where item_id.uid = %d and service = 'BUILDBLOCK' and item_type = %d order by item.created desc",
+
+ $r = q("select iconfig.iid, iconfig.k, iconfig.v, mid, title, body, mimetype, created, edited from iconfig
+ left join item on iconfig.iid = item.id
+ where uid = %d and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK'
+ and item_type = %d order by item.created desc",
intval($owner),
intval(ITEM_TYPE_BLOCK)
);
@@ -129,12 +132,12 @@ class Blocks extends \Zotlabs\Web\Controller {
'created' => $rr['created'],
'edited' => $rr['edited'],
'mimetype' => $rr['mimetype'],
- 'pagetitle' => $rr['sid'],
+ 'pagetitle' => $rr['v'],
'mid' => $rr['mid']
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
- 'name' => $rr['sid'],
+ 'name' => $rr['v'],
'title' => $rr['title'],
'created' => $rr['created'],
'edited' => $rr['edited'],
diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php
index 33deac4c8..3feba5370 100644
--- a/Zotlabs/Module/Connedit.php
+++ b/Zotlabs/Module/Connedit.php
@@ -16,14 +16,14 @@ require_once('include/zot.php');
require_once('include/widgets.php');
require_once('include/photos.php');
-/* @brief Initialize the connection-editor
- *
- *
- */
-
class Connedit extends \Zotlabs\Web\Controller {
+ /* @brief Initialize the connection-editor
+ *
+ *
+ */
+
function init() {
if(! local_channel())
@@ -51,7 +51,7 @@ class Connedit extends \Zotlabs\Web\Controller {
*
*/
- function post() {
+ function post() {
if(! local_channel())
return;
@@ -357,7 +357,7 @@ class Connedit extends \Zotlabs\Web\Controller {
*
*/
- function get() {
+ function get() {
$sort_type = 0;
$o = '';
@@ -418,7 +418,13 @@ class Connedit extends \Zotlabs\Web\Controller {
goaway(z_root() . '/connedit/' . $contact_id);
}
-
+ if($cmd === 'resetphoto') {
+ q("update xchan set xchan_photo_date = '2001-01-01 00:00:00' where xchan_hash = '%s' limit 1",
+ dbesc($orig_record[0]['xchan_hash'])
+ );
+ $cmd = 'refresh';
+ }
+
if($cmd === 'refresh') {
if($orig_record[0]['xchan_network'] === 'zot') {
if(! zot_refresh($orig_record[0],\App::get_channel()))
diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php
index c1a0d84bc..d1d4edc7d 100644
--- a/Zotlabs/Module/Display.php
+++ b/Zotlabs/Module/Display.php
@@ -106,12 +106,13 @@ class Display extends \Zotlabs\Web\Controller {
$x = q("select * from channel where channel_id = %d limit 1",
intval($target_item['uid'])
);
- $y = q("select * from item_id where uid = %d and service = 'WEBPAGE' and iid = %d limit 1",
+ $y = q("select * from iconfig left join item on iconfig.iid = item.id
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item.id = %d limit 1",
intval($target_item['uid']),
intval($target_item['id'])
);
if($x && $y) {
- goaway(z_root() . '/page/' . $x[0]['channel_address'] . '/' . $y[0]['sid']);
+ goaway(z_root() . '/page/' . $x[0]['channel_address'] . '/' . $y[0]['v']);
}
else {
notice( t('Page not found.') . EOL);
diff --git a/Zotlabs/Module/Editblock.php b/Zotlabs/Module/Editblock.php
index fb86557f2..1d6ef7a0a 100644
--- a/Zotlabs/Module/Editblock.php
+++ b/Zotlabs/Module/Editblock.php
@@ -85,11 +85,11 @@ class Editblock extends \Zotlabs\Web\Controller {
intval($owner)
);
if($itm) {
- $item_id = q("select * from item_id where service = 'BUILDBLOCK' and iid = %d limit 1",
+ $item_id = q("select * from iconfig where cat = 'system' and k = 'BUILDBLOCK' and iid = %d limit 1",
intval($itm[0]['id'])
);
if($item_id)
- $block_title = $item_id[0]['sid'];
+ $block_title = $item_id[0]['v'];
}
else {
notice( t('Item not found') . EOL);
diff --git a/Zotlabs/Module/Editlayout.php b/Zotlabs/Module/Editlayout.php
index 5028882d2..fe794b5fd 100644
--- a/Zotlabs/Module/Editlayout.php
+++ b/Zotlabs/Module/Editlayout.php
@@ -96,11 +96,12 @@ class Editlayout extends \Zotlabs\Web\Controller {
intval($owner)
);
- $item_id = q("select * from item_id where service = 'PDL' and iid = %d limit 1",
+ $item_id = q("select * from iconfig where cat = 'system' and k = 'PDL' and iid = %d limit 1",
intval($itm[0]['id'])
);
if($item_id)
- $layout_title = $item_id[0]['sid'];
+ $layout_title = $item_id[0]['v'];
+
$rp = 'layouts/' . $which;
diff --git a/Zotlabs/Module/Editwebpage.php b/Zotlabs/Module/Editwebpage.php
index 1b5c320a0..6d67c08e7 100644
--- a/Zotlabs/Module/Editwebpage.php
+++ b/Zotlabs/Module/Editwebpage.php
@@ -114,11 +114,11 @@ class Editwebpage extends \Zotlabs\Web\Controller {
$itm[0]['body'] = crypto_unencapsulate(json_decode_plus($itm[0]['body']),$key);
}
- $item_id = q("select * from item_id where service = 'WEBPAGE' and iid = %d limit 1",
+ $item_id = q("select * from iconfig where cat = 'system' and k = 'WEBPAGE' and iid = %d limit 1",
intval($itm[0]['id'])
);
if($item_id)
- $page_title = $item_id[0]['sid'];
+ $page_title = $item_id[0]['v'];
$mimetype = $itm[0]['mimetype'];
diff --git a/Zotlabs/Module/Embedphotos.php b/Zotlabs/Module/Embedphotos.php
new file mode 100644
index 000000000..2cd420664
--- /dev/null
+++ b/Zotlabs/Module/Embedphotos.php
@@ -0,0 +1,180 @@
+<?php
+namespace Zotlabs\Module;
+
+/**
+ *
+ * This is the POST destination for the embedphotos button
+ *
+ */
+
+
+class Embedphotos extends \Zotlabs\Web\Controller {
+
+ function get() {
+
+ }
+
+ function post() {
+
+ if (argc() > 1 && argv(1) === 'album') {
+ // API: /embedphotos/album
+ $name = (x($_POST,'name') ? $_POST['name'] : null );
+ if (!$name) {
+ json_return_and_die(array('errormsg' => 'Error retrieving album', 'status' => false));
+ }
+ $album = $this->embedphotos_widget_album(array('channel' => \App::get_channel(), 'album' => $name));
+ json_return_and_die(array('status' => true, 'content' => $album));
+
+ }
+ if (argc() > 1 && argv(1) === 'albumlist') {
+ // API: /embedphotos/albumlist
+ $album_list = $this->embedphotos_album_list($a);
+ json_return_and_die(array('status' => true, 'albumlist' => $album_list));
+
+ }
+ if (argc() > 1 && argv(1) === 'photolink') {
+ // API: /embedphotos/photolink
+ $href = (x($_POST,'href') ? $_POST['href'] : null );
+ if (!$href) {
+ json_return_and_die(array('errormsg' => 'Error retrieving link ' . $href, 'status' => false));
+ }
+ $resource_id = array_pop(explode("/", $href));
+ $r = q("SELECT obj from item where resource_type = 'photo' and resource_id = '%s' limit 1",
+ dbesc($resource_id)
+ );
+ if(!$r) {
+ json_return_and_die(array('errormsg' => 'Error retrieving resource ' . $resource_id, 'status' => false));
+ }
+ $obj = json_decode($r[0]['obj'], true);
+ if(x($obj,'body')) {
+ $photolink = $obj['body'];
+ } elseif (x($obj,'bbcode')) {
+ $photolink = $obj['bbcode'];
+ } else {
+ json_return_and_die(array('errormsg' => 'Error retrieving resource ' . $resource_id, 'status' => false));
+ }
+ json_return_and_die(array('status' => true, 'photolink' => $photolink));
+
+ }
+ }
+
+
+/**
+ * Copied from include/widgets.php::widget_album() with a modification to get the profile_uid from
+ * the input array as in widget_item()
+ * @param type $name
+ * @return string
+ */
+function embedphotos_widget_album($args) {
+
+ $channel_id = 0;
+ if(array_key_exists('channel',$args))
+ $channel = $args['channel'];
+ $channel_id = intval($channel['channel_id']);
+ if(! $channel_id)
+ $channel_id = \App::$profile_uid;
+ if(! $channel_id)
+ return '';
+ $owner_uid = $channel_id;
+ require_once('include/security.php');
+ $sql_extra = permissions_sql($channel_id);
+
+ if(! perm_is_allowed($channel_id,get_observer_hash(),'view_storage'))
+ return '';
+
+ if($args['album'])
+ $album = $args['album'];
+ if($args['title'])
+ $title = $args['title'];
+
+ /**
+ * This may return incorrect permissions if you have multiple directories of the same name.
+ * It is a limitation of the photo table using a name for a photo album instead of a folder hash
+ */
+
+ if($album) {
+ $x = q("select hash from attach where filename = '%s' and uid = %d limit 1",
+ dbesc($album),
+ intval($owner_uid)
+ );
+ if($x) {
+ $y = attach_can_view_folder($owner_uid,get_observer_hash(),$x[0]['hash']);
+ if(! $y)
+ return '';
+ }
+ }
+
+ $order = 'DESC';
+
+ $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.imgscale, p.description, p.created FROM photo p INNER JOIN
+ (SELECT resource_id, max(imgscale) imgscale FROM photo WHERE uid = %d AND album = '%s' AND imgscale <= 4 AND photo_usage IN ( %d, %d ) $sql_extra GROUP BY resource_id) ph
+ ON (p.resource_id = ph.resource_id AND p.imgscale = ph.imgscale)
+ ORDER BY created $order",
+ intval($owner_uid),
+ dbesc($album),
+ intval(PHOTO_NORMAL),
+ intval(PHOTO_PROFILE)
+ );
+
+ $photos = array();
+ if(count($r)) {
+ $twist = 'rotright';
+ foreach($r as $rr) {
+
+ if($twist == 'rotright')
+ $twist = 'rotleft';
+ else
+ $twist = 'rotright';
+
+ $ext = $phototypes[$rr['mimetype']];
+
+ $imgalt_e = $rr['filename'];
+ $desc_e = $rr['description'];
+
+ $imagelink = (z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $rr['resource_id']
+ . (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''));
+
+ $photos[] = array(
+ 'id' => $rr['id'],
+ 'twist' => ' ' . $twist . rand(2,4),
+ 'link' => $imagelink,
+ 'title' => t('View Photo'),
+ 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['imgscale'] . '.' .$ext,
+ 'alt' => $imgalt_e,
+ 'desc'=> $desc_e,
+ 'ext' => $ext,
+ 'hash'=> $rr['resource_id'],
+ 'unknown' => t('Unknown')
+ );
+ }
+ }
+
+ $tpl = get_markup_template('photo_album.tpl');
+ $o .= replace_macros($tpl, array(
+ '$photos' => $photos,
+ '$album' => (($title) ? $title : $album),
+ '$album_id' => rand(),
+ '$album_edit' => array(t('Edit Album'), $album_edit),
+ '$can_post' => false,
+ '$upload' => array(t('Upload'), z_root() . '/photos/' . \App::$profile['channel_address'] . '/upload/' . bin2hex($album)),
+ '$order' => false,
+ '$upload_form' => $upload_form,
+ '$usage' => $usage_message
+ ));
+
+ return $o;
+}
+
+
+function embedphotos_album_list($a) {
+ $o = '';
+ require_once('include/photos.php');
+ $p = photos_albums_list(\App::get_channel(), \App::get_observer());
+ if ($p['success']) {
+ return $p['albums'];
+ } else {
+ return null;
+ }
+}
+
+}
diff --git a/Zotlabs/Module/Impel.php b/Zotlabs/Module/Impel.php
index e326f7818..735c311d0 100644
--- a/Zotlabs/Module/Impel.php
+++ b/Zotlabs/Module/Impel.php
@@ -137,9 +137,7 @@ class Impel extends \Zotlabs\Web\Controller {
require_once('library/urlify/URLify.php');
$pagetitle = strtolower(\URLify::transliterate($j['pagetitle']));
}
-
-
-
+
// Verify ability to use html or php!!!
$execflag = false;
@@ -154,21 +152,14 @@ class Impel extends \Zotlabs\Web\Controller {
}
}
- $remote_id = 0;
-
- $z = q("select * from item_id where sid = '%s' and service = '%s' and uid = %d limit 1",
- dbesc($pagetitle),
- dbesc($namespace),
- intval(local_channel())
- );
-
$i = q("select id, edited, item_deleted from item where mid = '%s' and uid = %d limit 1",
dbesc($arr['mid']),
intval(local_channel())
);
+
+ \Zotlabs\Lib\IConfig::Set($arr,'system',$namespace,(($pagetitle) ? $pagetitle : substr($arr['mid'],0,16)),true);
- if($z && $i) {
- $remote_id = $z[0]['id'];
+ if($i) {
$arr['id'] = $i[0]['id'];
// don't update if it has the same timestamp as the original
if($arr['edited'] > $i[0]['edited'])
@@ -182,12 +173,12 @@ class Impel extends \Zotlabs\Web\Controller {
intval(local_channel())
);
}
- $x = item_store($arr,$execflag);
+ else
+ $x = item_store($arr,$execflag);
}
- if($x['success']) {
+ if($x && $x['success']) {
$item_id = $x['item_id'];
- update_remote_id($channel,$item_id,$arr['item_type'],$pagetitle,$namespace,$remote_id,$arr['mid']);
}
}
@@ -199,7 +190,8 @@ class Impel extends \Zotlabs\Web\Controller {
notice( sprintf( t('%s element installation failed'), $installed_type));
}
- //??? should perhaps return ret?
+ //??? should perhaps return ret?
+
json_return_and_die(true);
}
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php
index 2601feb0a..272da7971 100644
--- a/Zotlabs/Module/Item.php
+++ b/Zotlabs/Module/Item.php
@@ -1,4 +1,5 @@
<?php
+
namespace Zotlabs\Module;
/**
@@ -229,7 +230,7 @@ class Item extends \Zotlabs\Web\Controller {
if($namespace && $remote_id) {
// It wasn't an internally generated post - see if we've got an item matching this remote service id
- $i = q("select iid from item_id where service = '%s' and sid = '%s' limit 1",
+ $i = q("select iid from iconfig where cat = 'system' and k = '%s' and v = '%s' limit 1",
dbesc($namespace),
dbesc($remote_id)
);
@@ -880,13 +881,21 @@ class Item extends \Zotlabs\Web\Controller {
}
}
+ if($webpage) {
+ Zlib\IConfig::Set($datarray,'system', webpage_to_namespace($webpage),
+ (($pagetitle) ? $pagetitle : substr($datarray['mid'],0,16)),true);
+ }
+ elseif($namespace) {
+ Zlib\IConfig::Set($datarray,'system', $namespace,
+ (($remote_id) ? $remote_id : substr($datarray['mid'],0,16)),true);
+ }
+
+
if($orig_post) {
$datarray['id'] = $post_id;
item_store_update($datarray,$execflag);
- update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remote_id,$mid);
-
if(! $parent) {
$r = q("select * from item where id = %d",
intval($post_id)
@@ -894,10 +903,7 @@ class Item extends \Zotlabs\Web\Controller {
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
- $rid = q("select * from item_id where iid = %d",
- intval($post_id)
- );
- build_sync_packet($uid,array('item' => array(encode_item($sync_item[0],true)),'item_id' => $rid));
+ build_sync_packet($uid,array('item' => array(encode_item($sync_item[0],true))));
}
}
if(! $nopush)
@@ -978,10 +984,7 @@ class Item extends \Zotlabs\Web\Controller {
goaway(z_root() . "/" . $return_path );
// NOTREACHED
}
-
-
- update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remote_id,$mid);
-
+
if(($parent) && ($parent != $post_id)) {
// Store the comment signature information in case we need to relay to Diaspora
//$ditem = $datarray;
@@ -995,10 +998,7 @@ class Item extends \Zotlabs\Web\Controller {
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
- $rid = q("select * from item_id where iid = %d",
- intval($post_id)
- );
- build_sync_packet($uid,array('item' => array(encode_item($sync_item[0],true)),'item_id' => $rid));
+ build_sync_packet($uid,array('item' => array(encode_item($sync_item[0],true))));
}
}
diff --git a/Zotlabs/Module/Layouts.php b/Zotlabs/Module/Layouts.php
index 9b9fc22f3..a0b1c31cc 100644
--- a/Zotlabs/Module/Layouts.php
+++ b/Zotlabs/Module/Layouts.php
@@ -90,13 +90,14 @@ class Layouts extends \Zotlabs\Web\Controller {
return;
}
- //This feature is not exposed in redbasic ui since it is not clear why one would want to
- //download a json encoded pdl file - we dont have a possibility to import it.
- //Use the buildin share/install feature instead.
+ // This feature is not exposed in redbasic ui since it is not clear why one would want to
+ // download a json encoded pdl file - we dont have a possibility to import it.
+ // Use the buildin share/install feature instead.
+
if((argc() > 3) && (argv(2) === 'share') && (argv(3))) {
- $r = q("select sid, service, mimetype, title, body from item_id
- left join item on item.id = item_id.iid
- where item_id.uid = %d and item.mid = '%s' and service = 'PDL' order by sid asc",
+ $r = q("select iconfig.v, iconfig.k, mimetype, title, body from iconfig
+ left join item on item.id = iconfig.iid
+ where uid = %d and mid = '%s' and iconfig.cat = 'system' and iconfig.k = 'PDL' order by iconfig.v asc",
intval($owner),
dbesc(argv(3))
);
@@ -141,8 +142,9 @@ class Layouts extends \Zotlabs\Web\Controller {
$editor = status_editor($a,$x);
- $r = q("select iid, sid, mid, title, body, mimetype, created, edited, item_type from item_id left join item on item_id.iid = item.id
- where item_id.uid = %d and service = 'PDL' and item_type = %d order by item.created desc",
+ $r = q("select iconfig.iid, iconfig.v, mid, title, body, mimetype, created, edited, item_type from iconfig
+ left join item on iconfig.iid = item.id
+ where uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' and item_type = %d order by item.created desc",
intval($owner),
intval(ITEM_TYPE_PDL)
);
@@ -164,7 +166,7 @@ class Layouts extends \Zotlabs\Web\Controller {
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
- 'title' => $rr['sid'],
+ 'title' => $rr['v'],
'descr' => $rr['title'],
'mid' => $rr['mid'],
'created' => $rr['created'],
diff --git a/Zotlabs/Module/Page.php b/Zotlabs/Module/Page.php
index 14273614c..deb23da68 100644
--- a/Zotlabs/Module/Page.php
+++ b/Zotlabs/Module/Page.php
@@ -65,9 +65,10 @@ class Page extends \Zotlabs\Web\Controller {
require_once('include/security.php');
$sql_options = item_permissions_sql($u[0]['channel_id']);
- $r = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid = '%s' and item.item_delayed = 0 and (( service = 'WEBPAGE' and item_type = %d )
- OR ( service = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
+ $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
+ and (( iconfig.k = 'WEBPAGE' and item_type = %d )
+ OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
intval(ITEM_TYPE_WEBPAGE),
@@ -77,9 +78,9 @@ class Page extends \Zotlabs\Web\Controller {
// Check again with no permissions clause to see if it is a permissions issue
- $x = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid = '%s' and item.item_delayed = 0 and service = 'WEBPAGE' and
- item_type = %d $revision limit 1",
+ $x = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
+ and iconfig.k = 'WEBPAGE' and item_type = %d $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
intval(ITEM_TYPE_WEBPAGE)
@@ -119,11 +120,8 @@ class Page extends \Zotlabs\Web\Controller {
\App::$data['webpage'] = $r;
}
-
-
-
-
- function get() {
+
+ function get() {
$r = \App::$data['webpage'];
if(! $r)
diff --git a/Zotlabs/Module/README.md b/Zotlabs/Module/README.md
new file mode 100644
index 000000000..3b870dd7b
--- /dev/null
+++ b/Zotlabs/Module/README.md
@@ -0,0 +1,80 @@
+Zotlabs/Module
+==============
+
+
+This directory contains controller modules for handling web requests. The
+lowercase class name indicates the head of the URL path which this module
+handles. There are other methods of attaching (routing) URL paths to
+controllers, but this is the primary method used in this project.
+
+Module controllers MUST reside in this directory and namespace to be
+autoloaded (unless other specific routing methods are employed). They
+typically use and extend the class definition in Zotlabs/Web/Controller
+as a template.
+
+Template:
+
+ <?php
+
+ namespace Zotlabs\Web;
+
+
+ class Controller {
+
+ function init() {}
+ function post() {}
+ function get() {}
+
+ }
+
+
+Typical Module declaration for the '/foo' URL route:
+
+
+ <?php
+ namespace Zotlabs\Module;
+
+ class Foo extends \Zotlabs\Web\Controller {
+
+ function init() {
+ // init() handler goes here
+ }
+
+ function post() {
+ // post handler goes here
+ }
+
+ function get() {
+ return 'Hello world.' . EOL;
+ }
+
+ }
+
+This model provides callbacks for public functions named init(), post(),
+and get(). init() is always called. post() is called if $_POST variables
+are present, and get() is called if none of the prior functions terminated
+the handler. The get() method typically retuns a string which represents
+the contents of the content region of the resulting page. Modules which emit
+json, xml or other machine-readable formats typically emit their contents
+inside the init() function and call 'killme()' to terminate the Module.
+
+Modules are passed the URL path as argc,argv arguments. For a path such as
+
+ https://mysite.something/foo/bar/baz
+
+The app will typically invoke the Module class 'Foo' and pass it
+
+ $x = argc(); // $x = 3
+
+ $x = argv(0); // $x = 'foo'
+ $x = argv(1); // $x = 'bar'
+ $x = argv(2); // $x = 'baz'
+
+These are handled in a similar fashion to their counterparts in the Unix shell
+or C/C++ languages. Do not confuse the argc(),argv() functions with the
+global variables $argc,$argv which are passed to command line programs. These
+are handled separately by command line and Zotlabs/Daemon class functions.
+
+
+
+ \ No newline at end of file
diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php
index bb8d454c8..fc292be6f 100644
--- a/Zotlabs/Module/Webpages.php
+++ b/Zotlabs/Module/Webpages.php
@@ -28,7 +28,7 @@ class Webpages extends \Zotlabs\Web\Controller {
}
- function get() {
+ function get() {
if(! \App::$profile) {
notice( t('Requested profile is not available.') . EOL );
@@ -138,11 +138,19 @@ class Webpages extends \Zotlabs\Web\Controller {
$sql_extra = item_permissions_sql($owner);
- $r = q("select * from item_id left join item on item_id.iid = item.id
- where item_id.uid = %d and service = 'WEBPAGE' and item_type = %d $sql_extra order by item.created desc",
+
+ $r = q("select * from iconfig left join item on iconfig.iid = item.id
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d
+ $sql_extra order by item.created desc",
intval($owner),
intval(ITEM_TYPE_WEBPAGE)
);
+
+// $r = q("select * from item_id left join item on item_id.iid = item.id
+// where item_id.uid = %d and service = 'WEBPAGE' and item_type = %d $sql_extra order by item.created desc",
+// intval($owner),
+// intval(ITEM_TYPE_WEBPAGE)
+// );
$pages = null;
@@ -160,13 +168,13 @@ class Webpages extends \Zotlabs\Web\Controller {
'created' => $rr['created'],
'edited' => $rr['edited'],
'mimetype' => $rr['mimetype'],
- 'pagetitle' => $rr['sid'],
+ 'pagetitle' => $rr['v'],
'mid' => $rr['mid'],
'layout_mid' => $rr['layout_mid']
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
- 'pagetitle' => $rr['sid'],
+ 'pagetitle' => $rr['v'],
'title' => $rr['title'],
'created' => datetime_convert('UTC',date_default_timezone_get(),$rr['created']),
'edited' => datetime_convert('UTC',date_default_timezone_get(),$rr['edited']),
diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php
index 1e6446904..9e7d151b5 100644
--- a/Zotlabs/Module/Wiki.php
+++ b/Zotlabs/Module/Wiki.php
@@ -1,6 +1,6 @@
-<?php
+<?php /** @file */
-namespace Zotlabs\Module;/** @file */
+namespace Zotlabs\Module;
class Wiki extends \Zotlabs\Web\Controller {
@@ -72,7 +72,8 @@ class Wiki extends \Zotlabs\Web\Controller {
switch (argc()) {
case 2:
// Configure page template
- $wikiheader = t('Wiki Sandbox');
+ $wikiheaderName = t('Wiki');
+ $wikiheaderPage = t('Sandbox');
$content = '"# Wiki Sandbox\n\nContent you **edit** and **preview** here *will not be saved*."';
$hide_editor = false;
$showPageControls = false;
@@ -113,7 +114,8 @@ class Wiki extends \Zotlabs\Web\Controller {
} else {
$wiki_editor = true;
}
- $wikiheader = urldecode($wikiUrlName) . ': ' . urldecode($pageUrlName); // show wiki name and page
+ $wikiheaderName = urldecode($wikiUrlName);
+ $wikiheaderPage = urldecode($pageUrlName);
$p = wiki_get_page_content(array('resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
if(!$p['success']) {
notice('Error retrieving page content' . EOL);
@@ -135,7 +137,8 @@ class Wiki extends \Zotlabs\Web\Controller {
require_once('library/markdown.php');
$o .= replace_macros(get_markup_template('wiki.tpl'),array(
- '$wikiheader' => $wikiheader,
+ '$wikiheaderName' => $wikiheaderName,
+ '$wikiheaderPage' => $wikiheaderPage,
'$hideEditor' => $hide_editor,
'$showPageControls' => $showPageControls,
'$showNewWikiButton'=> $showNewWikiButton,
@@ -152,6 +155,7 @@ class Wiki extends \Zotlabs\Web\Controller {
'$renderedContent' => Markdown(json_decode($content)),
'$wikiName' => array('wikiName', t('Enter the name of your new wiki:'), '', ''),
'$pageName' => array('pageName', t('Enter the name of the new page:'), '', ''),
+ '$pageRename' => array('pageRename', t('Enter the new name:'), '', ''),
'$commitMsg' => array('commitMsg', '', '', '', '', 'placeholder="(optional) Enter a custom message when saving the page..."'),
'$pageHistory' => $pageHistory['history']
));
@@ -377,7 +381,7 @@ class Wiki extends \Zotlabs\Web\Controller {
if($deleted['success']) {
$ob = \App::get_observer();
$commit = wiki_git_commit(array(
- 'commit_msg' => 'Deleted ' . $pageHtmlName,
+ 'commit_msg' => 'Deleted ' . $pageUrlName,
'resource_id' => $resource_id,
'observer' => $ob,
'files' => null
@@ -416,6 +420,48 @@ class Wiki extends \Zotlabs\Web\Controller {
}
}
+ // Rename a page
+ if ((argc() === 4) && (argv(2) === 'rename') && (argv(3) === 'page')) {
+ $resource_id = $_POST['resource_id'];
+ $pageUrlName = $_POST['oldName'];
+ $pageNewName = $_POST['newName'];
+ if ($pageUrlName === 'Home') {
+ json_return_and_die(array('message' => 'Cannot rename Home','success' => false));
+ }
+ if(urlencode(escape_tags($pageNewName)) === '') {
+ json_return_and_die(array('message' => 'Error renaming page. Invalid name.', 'success' => false));
+ }
+ // Determine if observer has permission to rename pages
+ $nick = argv(1);
+ $channel = get_channel_by_nick($nick);
+ if (local_channel() !== intval($channel['channel_id'])) {
+ $observer_hash = get_observer_hash();
+ $perms = wiki_get_permissions($resource_id, intval($channel['channel_id']), $observer_hash);
+ if(!$perms['write']) {
+ logger('Wiki write permission denied. ' . EOL);
+ json_return_and_die(array('success' => false));
+ }
+ }
+ $renamed = wiki_rename_page(array('resource_id' => $resource_id, 'pageUrlName' => $pageUrlName, 'pageNewName' => $pageNewName));
+ logger('$renamed: ' . json_encode($renamed));
+ if($renamed['success']) {
+ $ob = \App::get_observer();
+ $commit = wiki_git_commit(array(
+ 'commit_msg' => 'Renamed ' . urldecode($pageUrlName) . ' to ' . $renamed['page']['htmlName'],
+ 'resource_id' => $resource_id,
+ 'observer' => $ob,
+ 'files' => array($pageUrlName . '.md', $renamed['page']['fileName']),
+ 'all' => true
+ ));
+ if($commit['success']) {
+ json_return_and_die(array('name' => $renamed['page'], 'message' => 'Wiki git repo commit made', 'success' => true));
+ } else {
+ json_return_and_die(array('message' => 'Error making git commit','success' => false));
+ }
+ } else {
+ json_return_and_die(array('message' => 'Error renaming page', 'success' => false));
+ }
+ }
//notice('You must be authenticated.');
json_return_and_die(array('message' => 'You must be authenticated.', 'success' => false));
diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php
index 1017ec6aa..820897ee9 100644
--- a/Zotlabs/Render/Comanche.php
+++ b/Zotlabs/Render/Comanche.php
@@ -179,7 +179,8 @@ class Comanche {
$channel_id = $this->get_channel_id();
if($channel_id) {
- $r = q("select * from item inner join item_id on iid = item.id and item_id.uid = item.uid and item.uid = %d and service = 'BUILDBLOCK' and sid = '%s' limit 1",
+ $r = q("select * from item inner join iconfig on iconfig.iid = item.id and item.uid = %d
+ and iconfig.cat = 'system' and iconfig.k = 'BUILDBLOCK' and iconfig.v = '%s' limit 1",
intval($channel_id),
dbesc($name)
);
@@ -282,12 +283,12 @@ class Comanche {
/**
- * Widgets will have to get any operational arguments from the session, the
- * global app environment, or config storage until we implement argument passing
+ * Render a widget
*
* @param string $name
* @param string $text
*/
+
function widget($name, $text) {
$vars = array();
$matches = array();
@@ -314,7 +315,7 @@ class Comanche {
require_once(theme_include($theme_widget));
}
- if (function_exists($func))
+ if(function_exists($func))
return $func($vars);
}
diff --git a/Zotlabs/Storage/BasicAuth.php b/Zotlabs/Storage/BasicAuth.php
index 121a9c3a1..60fc2c988 100644
--- a/Zotlabs/Storage/BasicAuth.php
+++ b/Zotlabs/Storage/BasicAuth.php
@@ -3,6 +3,8 @@
namespace Zotlabs\Storage;
use Sabre\DAV;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
/**
* @brief Authentication backend class for DAV.
@@ -145,6 +147,57 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
return true;
}
+ /**
+ * When this method is called, the backend must check if authentication was
+ * successful.
+ *
+ * The returned value must be one of the following
+ *
+ * [true, "principals/username"]
+ * [false, "reason for failure"]
+ *
+ * If authentication was successful, it's expected that the authentication
+ * backend returns a so-called principal url.
+ *
+ * Examples of a principal url:
+ *
+ * principals/admin
+ * principals/user1
+ * principals/users/joe
+ * principals/uid/123457
+ *
+ * If you don't use WebDAV ACL (RFC3744) we recommend that you simply
+ * return a string such as:
+ *
+ * principals/users/[username]
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return array
+ */
+ function check(RequestInterface $request, ResponseInterface $response) {
+
+ if(local_channel()) {
+ return [ true, $this->principalPrefix . $this->channel_name ];
+ }
+
+ $auth = new \Sabre\HTTP\Auth\Basic(
+ $this->realm,
+ $request,
+ $response
+ );
+
+ $userpass = $auth->getCredentials();
+ if (!$userpass) {
+ return [false, "No 'Authorization: Basic' header found. Either the client didn't send one, or the server is misconfigured"];
+ }
+ if (!$this->validateUserPass($userpass[0], $userpass[1])) {
+ return [false, "Username or password was incorrect"];
+ }
+ return [true, $this->principalPrefix . $userpass[0]];
+
+ }
+
protected function check_module_access($channel_id) {
if($channel_id && \App::$module === 'cdav') {
$x = get_pconfig($channel_id,'cdav','enabled');
diff --git a/Zotlabs/Web/Controller.php b/Zotlabs/Web/Controller.php
index ac835e008..2d0f58891 100644
--- a/Zotlabs/Web/Controller.php
+++ b/Zotlabs/Web/Controller.php
@@ -9,4 +9,5 @@ class Controller {
function post() {}
function get() {}
-} \ No newline at end of file
+}
+
diff --git a/boot.php b/boot.php
index a767a18d4..dbfc16dd8 100755
--- a/boot.php
+++ b/boot.php
@@ -48,7 +48,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'STD_VERSION', '1.8' );
define ( 'ZOT_REVISION', '1.1' );
-define ( 'DB_UPDATE_VERSION', 1176 );
+define ( 'DB_UPDATE_VERSION', 1178 );
/**
@@ -771,6 +771,7 @@ class App {
public static $groups;
public static $language;
public static $langsave;
+ public static $rtl = false;
public static $plugins_admin;
public static $module_loaded = false;
public static $query_string;
@@ -2282,6 +2283,12 @@ function construct_page(&$a) {
$page = App::$page;
$profile = App::$profile;
+ // There's some experimental support for right-to-left text in the view/php/default.php page template.
+ // In v1.9 we started providing direction preference in the per language hstrings.php file
+ // This requires somebody with fluency in a RTL language to make happen
+
+ $page['direction'] = 0; // ((App::$rtl) ? 1 : 0);
+
header("Content-type: text/html; charset=utf-8");
// security headers - see https://securityheaders.io
diff --git a/doc/bbcode.html b/doc/bbcode.html
index 5a51135ea..7a2c969eb 100644
--- a/doc/bbcode.html
+++ b/doc/bbcode.html
@@ -14,6 +14,7 @@
<li>[img float=right]https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg" style="float:right;" alt="Image/photo" /><br />
<div style="clear:both;"></div>
<li>[code]code[/code] <code>code</code><br />
+<li>[code=xxx]syntax highlighted code[/code] <code>supported languages php, css, mysql, sql, abap, diff, html, perl, ruby, vbscript, avrc, dtd, java, xml, cpp, python, javascript, js, json, sh</code><br />
<li>[quote]quote[/quote] <blockquote>quote</blockquote><br />
<li>[quote=Author]Author? Me? No, no, no...[/quote] <br /><strong class="author">Author wrote:</strong><blockquote>Author? Me? No, no, no...</blockquote><br />
<li> [nobb] may be used to escape bbcode.</ul><br />
@@ -83,7 +84,7 @@ or<br /><br />[dl terms="b"]<br />[*= First element term] First element descript
<li>[spoiler] for hiding spoilers<br /><br /></li>
<li>[rpost=title]Text to post[/rpost] The observer will be returned to their home hub to enter a post with the specified title and body. Both are optional</li>
-<li>[qr]text to post[/qr] - create a QR code.</li>
+<li>[qr]text to post[/qr] - create a QR code (if the qrator plugin is installed).</li>
<li>[toc] - create a table of content in a webpage. Please refer to the <a href="http://ndabas.github.io/toc/" target="_blank">original jquery toc</a> to get more explanations.
<ul>
<li>Optional param: 'data-toc'. If ommited the default is 'body'</li>
diff --git a/doc/context/de/wiki/help.html b/doc/context/de/wiki/help.html
new file mode 100644
index 000000000..e203ee221
--- /dev/null
+++ b/doc/context/de/wiki/help.html
@@ -0,0 +1,10 @@
+<dl class="dl-horizontal">
+ <dt>Allgemein</dt>
+ <dd>Jedes Wiki ist eine Sammlung aus mit Markdown formatierten Seiten.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki_list", 1); return false;' title="Click to highlight element...">Wiki Liste</a></dt>
+ <dd>Wikis die dem eigenen Kanal gehören und <i>mit der Berechtigung zum Anschauen</i>, sind in der Seitenleiste gelistet.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Click to highlight element...">Seiten Versionen</a></dt>
+ <dd>Jede Änderung einer Seite wird gespeichert, um eine schnelle Berichtigung zu ermöglichen. Klick auf das <b>Versionsgeschichte</b> Tab um den Verlauf der Seitenbearbeitung zu sehen, einschließlich Datum und Autor. Der Zurück-Knopf lädt die ausgewählte Änderung, aber ohne die Seite automatisch zu spreichern.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki_page_list", 1); return false;' title="Click to highlight element...">Seiten</a></dt>
+ <dd>Die Seiten des Wikis werden in <b>Wiki Seiten</b> gelistet. Vor dem Speichern einer Seite über das <b>Seiten</b> Dropdown Menu, hast Du die Möglichkeit eine <a href="#" onclick='contextualHelpFocus("#id_commitMsg", 0); return false;' title="Click to highlight element...">Zusammenfassung der Änderungen</a> einzutragen. Dieser Text wird anschließend unter <a href="#" onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Click to highlight element..."><b>Seiten Versionen</b></a> in der Versionsgeschichte angezeigt.</dd>
+</dl> \ No newline at end of file
diff --git a/doc/context/en/wiki/help.html b/doc/context/en/wiki/help.html
new file mode 100644
index 000000000..314a9d60b
--- /dev/null
+++ b/doc/context/en/wiki/help.html
@@ -0,0 +1,10 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>Each wiki is a collection of pages, composed as Markdown-formatted text files.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki_list", 1); return false;' title="Click to highlight element...">Wiki List</a></dt>
+ <dd>Wikis owned by the channel <i>that you have permission to view</i> are listed in the side panel.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Click to highlight element...">Page History</a></dt>
+ <dd>Every revision of a page is saved to allow quick reversion. Click the <b>History</b> tab to view a history of page revisions, including the date and author of each. The revert button will load the selected revision but will not automatically save the page.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki_page_list", 1); return false;' title="Click to highlight element...">Pages</a></dt>
+ <dd>The list of pages in the wiki are listed in the <b>Wiki Pages</b> panel. Prior to saving page edits using the <b>Page</b> control dropdown menu, you may <a href='#' onclick='contextualHelpFocus("#id_commitMsg", 0); return false;' title="Click to highlight element...">enter a custom message</a> to be displayed in the <a href='#' onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Click to highlight element..."><b>Page History</b></a> viewer along with the revision.</dd>
+</dl> \ No newline at end of file
diff --git a/doc/context/es-es/wiki/help.html b/doc/context/es-es/wiki/help.html
new file mode 100644
index 000000000..fdae1f095
--- /dev/null
+++ b/doc/context/es-es/wiki/help.html
@@ -0,0 +1,10 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>Cada wiki es una colección de páginas, compuestas como ficheros de texto formateados en Markdown.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki_list", 1); return false;' title="Pulsar para resaltar el elemento...">Lista de wikis</a></dt>
+ <dd>Las páginas wiki propiedad del canal <i>que esté autorizado a ver</i> aparecen en el panel lateral.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Pulsar para resaltar el elemento...">Historial de la página</a></dt>
+ <dd>Cada revisión de una página se salva para permitir su rápida recuperación. Pulsar en la pestaña <b>Historial</b> para ver las revisiones de la página, incluyendo la fecha y el autor de cada una. El botón de reversión cargará la revisión seleccionada, pero no salvará automáticamente la página.</dd>
+ <dt><a href='#' onclick='contextualHelpFocus("#wiki_page_list", 1); return false;' title="Pulsar para resaltar el elemento...">Páginas</a></dt>
+ <dd>La lista de páginas en el wiki aparece en el panel <b>Páginas del wiki</b>. Antes de salvar las páginas editadas usando el control <b>Página</b> en el menú desplegable, puede <a href='#' onclick='contextualHelpFocus("#id_commitMsg", 0); return false;' title="Pulsar para resaltar el elemento...">escribir un mensaje personalizado</a> que se verá en el visor <a href='#' onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Pulsar para resaltar el elemento..."><b>Historial de la página</b></a> junto con la revisión.</dd>
+</dl>
diff --git a/doc/context/it/wiki/help.html b/doc/context/it/wiki/help.html
new file mode 100644
index 000000000..e93e18eb4
--- /dev/null
+++ b/doc/context/it/wiki/help.html
@@ -0,0 +1,10 @@
+<dl class="dl-horizontal">
+ <dt>General</dt>
+ <dd>Ogni wiki è una raccolta di pagine, composta di file di testo formattati con Markdown.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki_list", 1); return false;' title="Fai click per evidenziare l'elemento...">Elenco dei Wiki</a></dt>
+ <dd>I Wiki del canale <i>che sei abilitato a vedere</i> sono elencati nel pannello laterale.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Fai click per evidenziare l'elemento...">Cronologia della pagina</a></dt>
+ <dd>Le revisioni di ogni pagina vengono salvate per rendere possibile un ripristino veloce. Fai click sulla tab <b>Cronologia</b> per vedere l'elenco delle revisioni, con autore e data delle stesse. Il bottone di ripristino riporterà alla revisione selezionata, senza salvare automaticamente la pagina.</dd>
+ <dt><a href="#" onclick='contextualHelpFocus("#wiki_page_list", 1); return false;' title="Fai click per evidenziare l'elemento...">Pagine</a></dt>
+ <dd>L'elenco delle pagine del wiki si trova nel pannello <b>Pagine del wiki</b>. Prima di salvare le modifiche con il menu a discela <b>Pagina</b>, puoi <a href="#" onclick='contextualHelpFocus("#id_commitMsg", 0); return false;' title="Fai click per evidenziare l'elemento...">inserire un messaggio</a> che verrà visualizzato nella visualizzazione della <a href="#" onclick='contextualHelpFocus("#wiki-get-history", 0); return false;' title="Fai click per evidenziare l'elemento..."><b>storia della pagina</b></a> insieme alla revisione.</dd>
+</dl> \ No newline at end of file
diff --git a/doc/database.bb b/doc/database.bb
index d327adbdc..02a70e2c7 100644
--- a/doc/database.bb
+++ b/doc/database.bb
@@ -1,6 +1,7 @@
[h2]Database Tables[/h2]
[table]
[tr][th]Table[/th][th]Description[/th][/tr]
+[tr][td][zrl=[baseurl]/help/database/db_abconfig]abconfig[/zrl][/td][td]arbitrary storage for connections of local channels[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_abook]abook[/zrl][/td][td]connections of local channels[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_account]account[/zrl][/td][td]service provider account[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_addon]addon[/zrl][/td][td]registered plugins[/td][/tr]
@@ -8,6 +9,7 @@
[tr][td][zrl=[baseurl]/help/database/db_attach]attach[/zrl][/td][td]file attachments[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_auth_codes]auth_codes[/zrl][/td][td]OAuth usage[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_cache]cache[/zrl][/td][td]OEmbed cache[/td][/tr]
+[tr][td][zrl=[baseurl]/help/database/db_cal]cal[/zrl][/td][td]CalDAV containers for events[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_channel]channel[/zrl][/td][td]local channels[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_chat]chat[/zrl][/td][td]chat room content[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_chatpresence]chatpresence[/zrl][/td][td]channel presence information for chat[/td][/tr]
@@ -16,17 +18,14 @@
[tr][td][zrl=[baseurl]/help/database/db_config]config[/zrl][/td][td]main configuration storage[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_conv]conv[/zrl][/td][td]Diaspora private messages meta conversation structure[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_event]event[/zrl][/td][td]Events[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_fcontact]fcontact[/zrl][/td][td]friend suggestion stuff (obsolete)[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_ffinder]ffinder[/zrl][/td][td]friend suggestion stuff (obsolete)[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_fserver]fserver[/zrl][/td][td]obsolete[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_fsuggest]fsuggest[/zrl][/td][td]friend suggestion stuff (unused)[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_group_member]group_member[/zrl][/td][td]privacy groups (collections), group info[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_groups]groups[/zrl][/td][td]privacy groups (collections), member info[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_hook]hook[/zrl][/td][td]plugin hook registry[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_hubloc]hubloc[/zrl][/td][td]xchan location storage, ties a hub location to an xchan[/td][/tr]
+[tr][td][zrl=[baseurl]/help/database/db_iconfig]iconfig[/zrl][/td][td]extensible arbitrary storage for items[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_issue]issue[/zrl][/td][td]future bug/issue database[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_item]item[/zrl][/td][td]all posts and webpages[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_item_id]item_id[/zrl][/td][td]other identifiers on other services for posts[/td][/tr]
+[tr][td][zrl=[baseurl]/help/database/db_item_id]item_id[/zrl][/td][td](deprecated by iconfig) other identifiers on other services for posts[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_likes]likes[/zrl][/td][td]likes of 'things'[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_mail]mail[/zrl][/td][td]private messages[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_menu]menu[/zrl][/td][td]webpage menu data[/td][/tr]
@@ -48,7 +47,6 @@
[tr][td][zrl=[baseurl]/help/database/db_sign]sign[/zrl][/td][td]Diaspora signatures. To be phased out.[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_site]site[/zrl][/td][td]site table to find directory peers[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_source]source[/zrl][/td][td]channel sources data[/td][/tr]
-[tr][td][zrl=[baseurl]/help/database/db_spam]spam[/zrl][/td][td]unfinished[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_sys_perms]sys_perms[/zrl][/td][td]extensible permissions for OAuth[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_term]term[/zrl][/td][td]item taxonomy (categories, tags, etc.) table[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_tokens]tokens[/zrl][/td][td]OAuth usage[/td][/tr]
@@ -60,6 +58,7 @@
[tr][td][zrl=[baseurl]/help/database/db_xconfig]xconfig[/zrl][/td][td]as pconfig but for channels with no local account[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_xign]xign[/zrl][/td][td]channels ignored by friend suggestions[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_xlink]xlink[/zrl][/td][td]"friends of friends" linkages derived from poco, also ratings storage[/td][/tr]
+[tr][td][zrl=[baseurl]/help/database/db_xperm]xperm[/zrl][/td][td]OAuth/OpenID-Connect extensible permissions permissions storage[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_xprof]xprof[/zrl][/td][td]if this hub is a directory server, contains basic public profile info of everybody in the network[/td][/tr]
[tr][td][zrl=[baseurl]/help/database/db_xtag]xtag[/zrl][/td][td]if this hub is a directory server, contains tags or interests of everybody in the network[/td][/tr]
[/table]
diff --git a/doc/database/db_abook.bb b/doc/database/db_abook.bb
index 364429884..a346480d7 100644
--- a/doc/database/db_abook.bb
+++ b/doc/database/db_abook.bb
@@ -15,10 +15,6 @@
[/td][/tr]
[tr][td]abook_closeness[/td][td]"closeness" value for optional affinity tool, 0-99[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]99[/td][td]
[/td][/tr]
-[tr][td]abook_rating[/td][td]The channel owner's (public) rating of this connection -10 to +10, default 0 or unrated[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
-[/td][/tr]
-[tr][td]abook_rating_text[/td][td]The channel owner's (public) rating of this connection free form text[/td][td]text[/td][td]NO[/td][td]MUL[/td][td][/td][td]
-[/td][/tr]
[tr][td]abook_created[/td][td]Datetime this record was created[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
[/td][/tr]
[tr][td]abook_updated[/td][td]Datetime this record was modified[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
@@ -32,16 +28,27 @@
[tr][td]abook_profile[/td][td]profile.guid of profile to display to this connection if authenticated[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
[/td][/tr]
[tr][td]abook_blocked[/td][td]Bi-directional communications with this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_ignored[/td][td]Incoming communications from this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_hidden[/td][td]This connection will not be shown as a connection to anybody but the channel owner[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_archived[/td][td]This connection is likely non-functioning and the entry and conversations are preserved, but further polled communications will not be attempted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_pending[/td][td]A connection request was received from this channel but has not been approved by the channel owner, public communications may still be visible but no additional permissions have been granted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_unconnected[/td][td]currently unused. Projected usage is to indicate "one-way" connections which were insitgated on this end but are still pending on the remote end. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_self[/td][td]is a special case where the owner is the target. Every channel has one abook entry with abook_self and with a target abook_xchan set to channel.channel_hash . When this flag is present, abook_my_perms is the default permissions granted to all new connections and several other fields are unused.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_feed[/td][td]indicates this connection is an RSS/Atom feed and may trigger special handling.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_incl[/td][td]connection filter allow rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_excl[/td][td]connection filter deny rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]abook_instance[/td][td]comma separated list of site urls of all channel clones that this connection is connected with (used only for singleton networks which don't support cloning)[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[/table]
diff --git a/doc/database/db_addon.bb b/doc/database/db_addon.bb
index afa06d56c..bccd295f5 100644
--- a/doc/database/db_addon.bb
+++ b/doc/database/db_addon.bb
@@ -3,7 +3,7 @@
[/th][/tr]
[tr][td]id[/td][td][/td]generated index[td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
[/td][/tr]
-[tr][td]name[/td][td]plugin base (file)name[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]aname[/td][td]plugin base (file)name[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]version[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
@@ -11,7 +11,7 @@
[/td][/tr]
[tr][td]hidden[/td][td]currently unused[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]timestamp[/td][td]file timestamp to check for reloads[/td][td]bigint(20)[/td][td]NO[/td][td][/td][td]0[/td][td]
+[tr][td]tstamp[/td][td]file timestamp to check for reloads[/td][td]bigint(20)[/td][td]NO[/td][td][/td][td]0[/td][td]
[/td][/tr]
[tr][td]plugin_admin[/td][td]1 = has admin config, 0 = has no admin config[/td][td]tinyint(1)[/td][td]NO[/td][td][/td][td]0[/td][td]
[/td][/tr]
diff --git a/doc/database/db_app.bb b/doc/database/db_app.bb
index 7076bffdd..09df473ee 100644
--- a/doc/database/db_app.bb
+++ b/doc/database/db_app.bb
@@ -27,8 +27,20 @@
[/td][/tr]
[tr][td]app_page[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
-[tr][td]app_requires[/td][td]currently unused[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
+[tr][td]app_requires[/td][td]access rules[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
+
+[tr][td]app_created[/td][td]datetime of app creation[/td][td]datetime[/td][td]NO[/td][td][/td][td][/td][td]
+[/td][/tr]
+[tr][td]app_edited[/td][td]datetime of last app edit[/td][td]datetime[/td][td]NO[/td][td][/td][td][/td][td]
+[/td][/tr]
+
+[tr][td]app_deleted[/td][td]1 = deleted, 0 = normal[/td][td]int(11)[/td][td]NO[/td][td][/td][td][/td][td]
+[/td][/tr]
+[tr][td]app_system[/td][td]1 = imported system app, 0 = member created app[/td][td]int(11)[/td][td]NO[/td][td][/td][td][/td][td]
+[/td][/tr]
+
+
[/table]
Storage for personal apps
diff --git a/doc/database/db_attach.bb b/doc/database/db_attach.bb
index 7d2befb47..5098401de 100644
--- a/doc/database/db_attach.bb
+++ b/doc/database/db_attach.bb
@@ -29,9 +29,11 @@
[/td][/tr]
[tr][td]os_storage[/td][td]if 0, data contains content; if 1 data contains path to content (always 1 in hubzilla)[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
+[tr][td]os_path[/td][td]under construction, store the system path[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[/td][/tr]
[tr][td]display_path[/td][td]under construction, store the human readable path[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]data[/td][td]file data or pathname to stored data if ATTACH_FLAG_OS[/td][td]longblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]content[/td][td]file data or pathname to stored data if ATTACH_FLAG_OS[/td][td]longblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]created[/td][td]creation time[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
[/td][/tr]
diff --git a/doc/database/db_channel.bb b/doc/database/db_channel.bb
index 6f53517d8..518ff0978 100644
--- a/doc/database/db_channel.bb
+++ b/doc/database/db_channel.bb
@@ -35,6 +35,8 @@
[/td][/tr]
[tr][td]channel_dirdate[/td][td]time when directory was last pinged. Must do this once a month[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
[/td][/tr]
+[tr][td]channel_lastpost[/td][td]date of last post for this channel. May not be fully implemented[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
+[/td][/tr]
[tr][td]channel_deleted[/td][td]time when channel was deleted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
[/td][/tr]
[tr][td]channel_max_anon_mail[/td][td]unused[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
@@ -95,6 +97,8 @@
[/td][/tr]
[tr][td]channel_system[/td][td]if 1, this is the special system channel on this site[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
[/td][/tr]
+[tr][td]channel_moved[/td][td]URL of relocated channel, making this instance abandoned if set[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
+[/td][/tr]
[/table]
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
diff --git a/doc/database/db_chatpresence.bb b/doc/database/db_chatpresence.bb
index 28cd6f207..0a7f666c9 100644
--- a/doc/database/db_chatpresence.bb
+++ b/doc/database/db_chatpresence.bb
@@ -11,7 +11,7 @@
[/td][/tr]
[tr][td]cp_status[/td][td]text status description e.g. "online"[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]cp_client[/td][td][/td]IP address of this client[td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
+[tr][td]cp_client[/td][td]IP address of this client[/td][td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
[/table]
diff --git a/doc/database/db_clients.bb b/doc/database/db_clients.bb
index d342b529f..0c66a4fc2 100644
--- a/doc/database/db_clients.bb
+++ b/doc/database/db_clients.bb
@@ -7,7 +7,7 @@
[/td][/tr]
[tr][td]redirect_uri[/td][td][/td][td]varchar(200)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]name[/td][td][/td][td]text[/td][td]YES[/td][td][/td][td]NULL[/td][td]
+[tr][td]clname[/td][td][/td][td]text[/td][td]YES[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]icon[/td][td][/td][td]text[/td][td]YES[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
diff --git a/doc/database/db_event.bb b/doc/database/db_event.bb
index 7c31d7fde..ad3c15789 100644
--- a/doc/database/db_event.bb
+++ b/doc/database/db_event.bb
@@ -15,9 +15,9 @@
[/td][/tr]
[tr][td]edited[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]start[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]dtstart[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]finish[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]dtend[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]summary[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
@@ -25,13 +25,13 @@
[/td][/tr]
[tr][td]location[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]type[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]etype[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]nofinish[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
[tr][td]adjust[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]1[/td][td]
[/td][/tr]
-[tr][td]ignore[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[tr][td]dismissed[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
@@ -41,6 +41,24 @@
[/td][/tr]
[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
+
+[tr][td]event_status[/td][td][/td][td]charr(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_status_date[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_percent[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_repeat[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_sequence[/td][td][/td][td]smallint[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_priority[/td][td][/td][td]smallint[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]event_vdata[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+[tr][td]cal_id[/td][td][/td][td]int(10)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[/td][/tr]
+
[/table]
Return to [zrl=[baseurl]/help/database]database documentation[/zrl] \ No newline at end of file
diff --git a/doc/database/db_groups.bb b/doc/database/db_groups.bb
index 078d96464..73265b90e 100644
--- a/doc/database/db_groups.bb
+++ b/doc/database/db_groups.bb
@@ -11,7 +11,7 @@
[/td][/tr]
[tr][td]deleted[/td][td]1 indicates the group has been deleted[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]name[/td][td]human readable name of group[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]gname[/td][td]human readable name of group[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[/table]
diff --git a/doc/database/db_hook.bb b/doc/database/db_hook.bb
index 0812b1b41..233062f98 100644
--- a/doc/database/db_hook.bb
+++ b/doc/database/db_hook.bb
@@ -7,9 +7,11 @@
[/td][/tr]
[tr][td]file[/td][td]relative filename of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]function[/td][td]function name of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]fn[/td][td]function name of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]priority[/td][td]not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
+[tr][td]priority[/td][td]can be used to sort conflicts in hook handling by calling handlers in priority order[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
+[/td][/tr]
+[tr][td]hook_version[/td][td]version 0 hooks must have two arguments, the App and the hook data. version 1 hooks have 1 argument - the hook data[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
[/td][/tr]
[/table]
diff --git a/doc/database/db_item.bb b/doc/database/db_item.bb
index e4e594196..6383e13f8 100644
--- a/doc/database/db_item.bb
+++ b/doc/database/db_item.bb
@@ -51,7 +51,7 @@
[/td][/tr]
[tr][td]obj_type[/td][td]ActivityStreams object type (old style URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
-[tr][td]object[/td][td]JSON encoded object structure unless it is an implied object (normal post)[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]obj[/td][td]JSON encoded object structure unless it is an implied object (normal post)[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]tgt_type[/td][td]ActivityStreams target type if applicable (URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
[/td][/tr]
diff --git a/doc/database/db_notify.bb b/doc/database/db_notify.bb
index 42f9350e5..4787266cd 100644
--- a/doc/database/db_notify.bb
+++ b/doc/database/db_notify.bb
@@ -5,7 +5,7 @@
[/td][/tr]
[tr][td]hash[/td][td][/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]xname[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]url[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
@@ -25,7 +25,7 @@
[/td][/tr]
[tr][td]seen[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]type[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]ntype[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]verb[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
diff --git a/doc/database/db_photo.bb b/doc/database/db_photo.bb
index 6a0cdf362..91840ec1e 100644
--- a/doc/database/db_photo.bb
+++ b/doc/database/db_photo.bb
@@ -23,15 +23,15 @@
[/td][/tr]
[tr][td]filename[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]type[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]image/jpeg[/td][td]
+[tr][td]mimetype[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]image/jpeg[/td][td]
[/td][/tr]
[tr][td]height[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]width[/td][td][/td][td]smallint(6)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]size[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
+[tr][td]filesize[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]data[/td][td][/td][td]mediumblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]content[/td][td][/td][td]mediumblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]scale[/td][td][/td][td]tinyint(3)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
diff --git a/doc/database/db_profile.bb b/doc/database/db_profile.bb
index 83db75713..717fae585 100644
--- a/doc/database/db_profile.bb
+++ b/doc/database/db_profile.bb
@@ -15,7 +15,7 @@
[/td][/tr]
[tr][td]hide_friends[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
[/td][/tr]
-[tr][td]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]fullname[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]pdesc[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
@@ -41,7 +41,7 @@
[/td][/tr]
[tr][td]marital[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]with[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]partner[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]howlong[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td]
[/td][/tr]
@@ -73,7 +73,7 @@
[/td][/tr]
[tr][td]romance[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]work[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
+[tr][td]employment[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]education[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
[/td][/tr]
diff --git a/doc/database/db_term.bb b/doc/database/db_term.bb
index e1f6415fa..bd155fe21 100644
--- a/doc/database/db_term.bb
+++ b/doc/database/db_term.bb
@@ -11,7 +11,7 @@
[/td][/tr]
[tr][td]otype[/td][td]type of linked thing[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
-[tr][td]type[/td][td]taxonomy type (See Tag/term types in boot.php)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
+[tr][td]ttype[/td][td]taxonomy type (See Tag/term types in boot.php)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
[tr][td]term[/td][td]the actual taxonomy term[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
[/td][/tr]
diff --git a/include/api.php b/include/api.php
index be525f7e9..df6aba957 100644
--- a/include/api.php
+++ b/include/api.php
@@ -839,7 +839,7 @@ require_once('include/api_auth.php');
$_REQUEST['parent_mid'] = $parent;
if($_REQUEST['namespace'] && $parent) {
- $x = q("select iid from item_id where service = '%s' and sid = '%s' limit 1",
+ $x = q("select iid from iconfig where cat = 'system' and k = '%s' and v = '%s' limit 1",
dbesc($_REQUEST['namespace']),
dbesc($parent)
);
@@ -967,20 +967,10 @@ require_once('include/api_auth.php');
$ret = array();
$tmp = array();
- $str = '';
foreach($i as $ii) {
$tmp[] = encode_item($ii,true);
- if($str)
- $str .= ',';
- $str .= $ii['id'];
}
$ret['item'] = $tmp;
- if($str) {
- $r = q("select item_id.*, item.mid from item_id left join item on item_id.iid = item.id where item.id in ( $str ) ");
-
- if($r)
- $ret['item_id'] = $r;
- }
json_return_and_die($ret);
}
@@ -1462,7 +1452,8 @@ require_once('include/api_auth.php');
}
else {
if($_REQUEST['namespace'] && $_REQUEST['remote_id']) {
- $r = q("select * from item_id where service = '%s' and sid = '%s' and uid = %d limit 1",
+ $r = q("select * from iconfig left join item on iconfig.iid = item.id
+ where cat = 'system' and k = '%s' and v = '%s' and item.uid = %d limit 1",
dbesc($_REQUEST['namespace']),
dbesc($_REQUEST['remote_id']),
intval($user_info['uid'])
@@ -1472,7 +1463,7 @@ require_once('include/api_auth.php');
$id = $r[0]['iid'];
}
if($_REQUEST['namespace'] && $_REQUEST['comment_id']) {
- $r = q("select * from item_id left join item on item.id = item_id.iid where service = '%s' and sid = '%s' and uid = %d and item.id != item.parent limit 1",
+ $r = q("select * from iconfig left join item on item.id = iconfig.iid where cat = 'system' and k = '%s' and v = '%s' and uid = %d and item.id != item.parent limit 1",
dbesc($_REQUEST['namespace']),
dbesc($_REQUEST['comment_id']),
intval($user_info['uid'])
diff --git a/include/attach.php b/include/attach.php
index 78efde51f..33545b12a 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -423,6 +423,8 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$observer = array();
+ $dosync = ((array_key_exists('nosync',$arr) && $arr['nosync']) ? 0 : 1);
+
if($observer_hash) {
$x = q("select * from xchan where xchan_hash = '%s' limit 1",
dbesc($observer_hash)
@@ -829,6 +831,8 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($arr['description'])
$args['description'] = $arr['description'];
+ $args['deliver'] = $dosync;
+
$p = photo_upload($channel,$observer,$args);
if($p['success']) {
$ret['body'] = $p['body'];
@@ -865,10 +869,12 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
call_hooks('photo_upload_end',$ret);
}
- $sync = attach_export_data($channel,$hash);
+ if($dosync) {
+ $sync = attach_export_data($channel,$hash);
- if($sync)
- build_sync_packet($channel['channel_id'],array('file' => array($sync)));
+ if($sync)
+ build_sync_packet($channel['channel_id'],array('file' => array($sync)));
+ }
return $ret;
}
diff --git a/include/bbcode.php b/include/bbcode.php
index 42741b392..0bf326506 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -242,6 +242,13 @@ function bb_ShareAttributes($match) {
if ($matches[1] != "")
$message_id = $matches[1];
+ if(! $message_id) {
+ preg_match("/guid='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $message_id = $matches[1];
+ }
+
+
$reldate = '<span class="autotime" title="' . datetime_convert('UTC', date_default_timezone_get(), $posted, 'c') . '" >' . datetime_convert('UTC', date_default_timezone_get(), $posted, 'r') . '</span>';
$headline = '<div class="shared_container"> <div class="shared_header">';
@@ -484,6 +491,12 @@ function bb_code($match) {
return '<code class="inline-code">' . trim($match[1]) . '</code>';
}
+function bb_highlight($match) {
+ if(in_array(strtolower($match[1]),['php','css','mysql','sql','abap','diff','html','perl','ruby',
+ 'vbscript','avrc','dtd','java','xml','cpp','python','javascript','js','json','sh']))
+ return text_highlight($match[2],strtolower($match[1]));
+ return $match[0];
+}
// BBcode 2 HTML was written by WAY2WEB.net
@@ -559,6 +572,15 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
$Text = str_replace(">", "&gt;", $Text);
+ // Check for [code] text here, before the linefeeds are messed with.
+ // The highlighter will unescape and re-escape the content.
+
+ if (strpos($Text,'[code=') !== false) {
+ $Text = preg_replace_callback("/\[code=(.*?)\](.*?)\[\/code\]/ism", 'bb_highlight', $Text);
+ }
+
+
+
// Convert new line chars to html <br /> tags
// nlbr seems to be hopelessly messed up
diff --git a/include/channel.php b/include/channel.php
index 087bd4162..90dfb2bf6 100644
--- a/include/channel.php
+++ b/include/channel.php
@@ -16,7 +16,7 @@ require_once('include/menu.php');
* @param int $account_id
* Account_id used for this request
*
- * @returns assoziative array with:
+ * @returns associative array with:
* * \e boolean \b success boolean true if creating a new channel is allowed for this account
* * \e string \b message (optional) if success is false, optional error text
* * \e int \b total_identities
@@ -676,14 +676,6 @@ function identity_basic_export($channel_id, $items = false) {
$ret['mail'] = $m;
}
- $r = q("select item_id.*, item.mid from item_id left join item on item_id.iid = item.id where item_id.uid = %d",
- intval($channel_id)
- );
-
- if($r)
- $ret['item_id'] = $r;
-
- //$key = get_config('system','prvkey');
/** @warning this may run into memory limits on smaller systems */
@@ -746,17 +738,6 @@ function identity_export_year($channel_id,$year,$month = 0) {
$ret['item'][] = encode_item($rr,true);
}
- $r = q("select item_id.*, item.mid from item_id left join item on item_id.iid = item.id where item_id.uid = %d
- and item.created >= '%s' and item.created < '%s' order by created ",
- intval($channel_id),
- dbesc($mindate),
- dbesc($maxdate)
- );
-
- if($r)
- $ret['item_id'] = $r;
-
-
return $ret;
}
@@ -1243,6 +1224,7 @@ function advanced_profile(&$a) {
$things = get_things(App::$profile['profile_guid'],App::$profile['profile_uid']);
+
// logger('mod_profile: things: ' . print_r($things,true), LOGGER_DATA);
return replace_macros($tpl, array(
diff --git a/include/connections.php b/include/connections.php
index 2d10b8354..ed4526a09 100644
--- a/include/connections.php
+++ b/include/connections.php
@@ -283,18 +283,30 @@ function channel_remove($channel_id, $local = true, $unset_session=false) {
Zotlabs\Daemon\Master::Summon(array('Notifier','purge_all',$channel_id));
}
+
+ $r = q("select * from iconfig left join item on item.id = iconfig.iid
+ where item.uid = %d",
+ intval($channel_id)
+ );
+ if($r) {
+ foreach($r as $rr) {
+ q("delete from iconfig where iid = %d",
+ intval($rr['iid'])
+ );
+ }
+ }
+
+
q("DELETE FROM `groups` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `group_member` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `event` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `item` WHERE `uid` = %d", intval($channel_id));
- q("DELETE FROM `item_id` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `mail` WHERE `channel_id` = %d", intval($channel_id));
q("DELETE FROM `notify` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `photo` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `attach` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `profile` WHERE `uid` = %d", intval($channel_id));
q("DELETE FROM `pconfig` WHERE `uid` = %d", intval($channel_id));
- q("DELETE FROM `spam` WHERE `uid` = %d", intval($channel_id));
// @FIXME At this stage we need to remove the file resources located under /store/$nickname
diff --git a/include/conversation.php b/include/conversation.php
index 518193b08..d2d4ffca0 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -403,9 +403,12 @@ function count_descendants($item) {
* @return boolean
*/
function visible_activity($item) {
- $hidden_activities = array(ACTIVITY_LIKE, ACTIVITY_DISLIKE, ACTIVITY_AGREE, ACTIVITY_DISAGREE, ACTIVITY_ABSTAIN, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE);
+ $hidden_activities = [ ACTIVITY_LIKE, ACTIVITY_DISLIKE, ACTIVITY_AGREE, ACTIVITY_DISAGREE, ACTIVITY_ABSTAIN, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE ];
- $post_types = array(ACTIVITY_OBJ_NOTE,ACTIVITY_OBJ_COMMENT,basename(ACTIVITY_OBJ_NOTE),basename(ACTIVITY_OBJ_COMMENT));
+ $post_types = [ ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_COMMENT, basename(ACTIVITY_OBJ_NOTE), basename(ACTIVITY_OBJ_COMMENT)];
+
+ if(intval($item['item_notshown']))
+ return false;
foreach ($hidden_activities as $act) {
if ((activity_match($item['verb'], $act)) && ($item['mid'] != $item['parent_mid'])) {
@@ -1143,6 +1146,8 @@ function status_editor($a, $x, $popup = false) {
$weblink = (($mimetype === 'text/bbcode') ? t('Insert web link') : false);
if(x($x, 'hide_weblink'))
$weblink = false;
+
+ $embedPhotos = t('Embed image from photo albums');
$writefiles = (($mimetype === 'text/bbcode') ? perm_is_allowed($x['profile_uid'], get_observer_hash(), 'write_storage') : false);
if(x($x, 'hide_attach'))
@@ -1178,6 +1183,12 @@ function status_editor($a, $x, $popup = false) {
'$whereareu' => t('Where are you right now?'),
'$editor_autocomplete'=> ((x($x,'editor_autocomplete')) ? $x['editor_autocomplete'] : ''),
'$bbco_autocomplete'=> ((x($x,'bbco_autocomplete')) ? $x['bbco_autocomplete'] : ''),
+ '$modalchooseimages' => t('Choose images to embed'),
+ '$modalchoosealbum' => t('Choose an album'),
+ '$modaldiffalbum' => t('Choose a different album...'),
+ '$modalerrorlist' => t('Error getting album list'),
+ '$modalerrorlink' => t('Error getting photo link'),
+ '$modalerroralbum' => t('Error getting album'),
));
$tpl = get_markup_template('jot.tpl');
@@ -1219,6 +1230,10 @@ function status_editor($a, $x, $popup = false) {
'$code' => t('Code'),
'$attach' => t('Attach file'),
'$weblink' => $weblink,
+ '$embedPhotos' => $embedPhotos,
+ '$embedPhotosModalTitle' => t('Embed an image from your albums'),
+ '$embedPhotosModalCancel' => t('Cancel'),
+ '$embedPhotosModalOK' => t('OK'),
'$setloc' => $setloc,
'$voting' => t('Toggle voting'),
'$feature_voting' => $feature_voting,
diff --git a/include/group.php b/include/group.php
index a4938b848..10853ff6b 100644
--- a/include/group.php
+++ b/include/group.php
@@ -17,7 +17,7 @@ function group_add($uid,$name,$public = 0) {
$z = q("SELECT * FROM `groups` WHERE `id` = %d LIMIT 1",
intval($r)
);
- if(count($z) && $z[0]['deleted']) {
+ if(($z) && $z[0]['deleted']) {
/*$r = q("UPDATE `groups` SET `deleted` = 0 WHERE `uid` = %d AND `gname` = '%s' LIMIT 1",
intval($uid),
dbesc($name)
@@ -129,7 +129,7 @@ function group_byname($uid,$name) {
intval($uid),
dbesc($name)
);
- if(count($r))
+ if($r)
return $r[0]['id'];
return false;
}
@@ -178,11 +178,11 @@ function group_add_member($uid,$name,$member,$gid = 0) {
intval($gid),
dbesc($member)
);
- if(count($r))
+ if($r)
return true; // You might question this, but
// we indicate success because the group member was in fact created
// -- It was just created at another time
- if(! count($r))
+ if(! $r)
$r = q("INSERT INTO `group_member` (`uid`, `gid`, `xchan`)
VALUES( %d, %d, '%s' ) ",
intval($uid),
@@ -205,7 +205,7 @@ function group_get_members($gid) {
intval(local_channel()),
intval(local_channel())
);
- if(count($r))
+ if($r)
$ret = $r;
}
return $ret;
@@ -218,7 +218,7 @@ function group_get_members_xchan($gid) {
intval($gid),
intval(local_channel())
);
- if(count($r)) {
+ if($r) {
foreach($r as $rr) {
$ret[] = $rr['xchan'];
}
@@ -236,7 +236,7 @@ function mini_group_select($uid,$group = '') {
intval($uid)
);
$grps[] = array('name' => '', 'hash' => '0', 'selected' => '');
- if(count($r)) {
+ if($r) {
foreach($r as $rr) {
$grps[] = array('name' => $rr['gname'], 'id' => $rr['hash'], 'selected' => (($group == $rr['hash']) ? 'true' : ''));
}
@@ -279,7 +279,7 @@ function group_side($every="connections",$each="group",$edit = false, $group_id
$member_of = groups_containing(local_channel(),$cid);
}
- if(count($r)) {
+ if($r) {
foreach($r as $rr) {
$selected = (($group_id == $rr['id']) ? ' group-selected' : '');
@@ -356,7 +356,7 @@ function groups_containing($uid,$c) {
);
$ret = array();
- if(count($r)) {
+ if($r) {
foreach($r as $rr)
$ret[] = $rr['gid'];
}
diff --git a/include/help.php b/include/help.php
index 5518eeb70..7f57f3334 100644
--- a/include/help.php
+++ b/include/help.php
@@ -30,7 +30,8 @@ function search_doc_files($s) {
$regexop = db_getfunc('REGEXP');
- $r = q("select item_id.sid, item.* from item left join item_id on item.id = item_id.iid where service = 'docfile' and
+ $r = q("select iconfig.v, item.* from item left join iconfig on item.id = iconfig.iid
+ where iconfig.cat = 'system' and iconfig.k = 'docfile' and
body $regexop '%s' and item_type = %d $pager_sql",
dbesc($s),
intval(ITEM_TYPE_DOC)
@@ -50,7 +51,7 @@ function search_doc_files($s) {
}
}
}
- if(stristr($r[$x]['sid'],$s))
+ if(stristr($r[$x]['v'],$s))
$r[$x]['rank'] ++;
$r[$x]['rank'] += substr_count(strtolower($r[$x]['text']),strtolower($s));
// bias the results to the observer's native language
@@ -123,12 +124,15 @@ function store_doc_file($s) {
$item['owner_xchan'] = $item['author_xchan'] = $sys['channel_hash'];
$item['item_type'] = ITEM_TYPE_DOC;
- $r = q("select item.* from item left join item_id on item.id = item_id.iid where service = 'docfile' and
- sid = '%s' and item_type = %d limit 1",
+ $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where iconfig.cat = 'system' and iconfig.k = 'docfile' and
+ iconfig.v = '%s' and item_type = %d limit 1",
dbesc($s),
intval(ITEM_TYPE_DOC)
);
+ \Zotlabs\Lib\IConfig::Set($item,'system','docfile',$s);
+
if($r) {
$item['id'] = $r[0]['id'];
$item['mid'] = $item['parent_mid'] = $r[0]['mid'];
@@ -139,10 +143,7 @@ function store_doc_file($s) {
$x = item_store($item);
}
- if($x['success']) {
- update_remote_id($sys,$x['item_id'],ITEM_TYPE_DOC,$s,'docfile',0,$item['mid']);
- }
-
+ return $x;
}
diff --git a/include/import.php b/include/import.php
index be456bfa9..0f52f3ff8 100644
--- a/include/import.php
+++ b/include/import.php
@@ -624,19 +624,14 @@ function import_item_ids($channel,$itemids) {
);
if(! $r)
continue;
- $z = q("select * from item_id where service = '%s' and sid = '%s' and iid = %d and uid = %d limit 1",
+ $z = q("select * from iconfig where iconfig.cat = 'system' and iconfig.k = '%s'
+ and iconfig.v = '%s' and iid = %d limit 1",
dbesc($i['service']),
dbesc($i['sid']),
- intval($r[0]['id']),
- intval($channel['channel_id'])
+ intval($r[0]['id'])
);
if(! $z) {
- q("insert into item_id (iid,uid,sid,service) values(%d,%d,'%s','%s')",
- intval($r[0]['id']),
- intval($channel['channel_id']),
- dbesc($i['sid']),
- dbesc($i['service'])
- );
+ \Zotlabs\Lib\IConfig::Set($r[0]['id'],'system',$i['service'],$i['sid'],true);
}
}
}
diff --git a/include/items.php b/include/items.php
index 93385c6e6..a844cd1f6 100755
--- a/include/items.php
+++ b/include/items.php
@@ -677,13 +677,23 @@ function get_item_elements($x,$allow_code = false) {
$arr['item_flags'] = 0;
- if(array_key_exists('flags',$x) && in_array('consensus',$x['flags']))
- $arr['item_consensus'] = 1;
+ if(array_key_exists('flags',$x)) {
- if(array_key_exists('flags',$x) && in_array('deleted',$x['flags']))
- $arr['item_deleted'] = 1;
- if(array_key_exists('flags',$x) && in_array('hidden',$x['flags']))
- $arr['item_hidden'] = 1;
+ if(in_array('consensus',$x['flags']))
+ $arr['item_consensus'] = 1;
+
+ if(in_array('deleted',$x['flags']))
+ $arr['item_deleted'] = 1;
+
+ if(in_array('notshown',$x['flags']))
+ $arr['item_notshown'] = 1;
+
+ // hidden item are no longer propagated - notshown may be a suitable alternative
+
+ if(in_array('hidden',$x['flags']))
+ $arr['item_hidden'] = 1;
+
+ }
// Here's the deal - the site might be down or whatever but if there's a new person you've never
// seen before sending stuff to your stream, we MUST be able to look them up and import their data from their
@@ -1339,6 +1349,8 @@ function encode_item_flags($item) {
$ret[] = 'deleted';
if(intval($item['item_hidden']))
$ret[] = 'hidden';
+ if(intval($item['item_notshown']))
+ $ret[] = 'notshown';
if(intval($item['item_thread_top']))
$ret[] = 'thread_parent';
if(intval($item['item_nsfw']))
@@ -3537,9 +3549,8 @@ function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL, $force = false) {
intval($item['id'])
);
- q("delete from item_id where iid = %d and uid = %d",
- intval($item['id']),
- intval($item['uid'])
+ q("delete from iconfig where iid = %d",
+ intval($item['id'])
);
q("delete from term where oid = %d and otype = %d",
@@ -4105,6 +4116,23 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C
return $items;
}
+function webpage_to_namespace($webpage) {
+
+ if($webpage == ITEM_TYPE_WEBPAGE)
+ $page_type = 'WEBPAGE';
+ elseif($webpage == ITEM_TYPE_BLOCK)
+ $page_type = 'BUILDBLOCK';
+ elseif($webpage == ITEM_TYPE_PDL)
+ $page_type = 'PDL';
+ elseif($webpage == ITEM_TYPE_DOC)
+ $page_type = 'docfile';
+ else
+ $page_type = 'unknown';
+ return $page_type;
+
+}
+
+
function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remote_id,$mid) {
diff --git a/include/network.php b/include/network.php
index 0dd10e29b..062f2c2bf 100644
--- a/include/network.php
+++ b/include/network.php
@@ -21,15 +21,18 @@ function get_capath() {
* TRUE if asked to return binary results (file download)
* @param int $redirects default 0
* internal use, recursion counter
- * @param array $opts (optional parameters) assoziative array with:
+ * @param array $opts (optional parameters) associative array with:
* * \b accept_content => supply Accept: header with 'accept_content' as the value
* * \b timeout => int seconds, default system config value or 60 seconds
* * \b http_auth => username:password
* * \b novalidate => do not validate SSL certs, default is to validate using our CA list
* * \b nobody => only return the header
* * \b filep => stream resource to write body to. header and body are not returned when using this option.
+ * * \b custom => custom request method: e.g. 'PUT', 'DELETE'
+ * * \b cookiejar => cookie file (write)
+ * * \B cookiefile => cookie file (read)
*
- * @return array an assoziative array with:
+ * @return array an associative array with:
* * \e int \b return_code => HTTP return code or 0 if timeout or failure
* * \e boolean \b success => boolean true (if HTTP 2xx result) or false
* * \e string \b header => HTTP headers
@@ -59,12 +62,17 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_HEADER, $false);
}
+
+
if(x($opts,'headers'))
@curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
if(x($opts,'nobody'))
@curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
+ if(x($opts,'custom'))
+ @curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $opts['custom']);
+
if(x($opts,'timeout') && intval($opts['timeout'])) {
@curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
}
@@ -78,6 +86,11 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_USERPWD, $opts['http_auth']);
}
+ if(x($opts,'cookiejar'))
+ @curl_setopt($ch, CURLOPT_COOKIEJAR, $opts['cookiejar']);
+ if(x($opts,'cookiefile'))
+ @curl_setopt($ch, CURLOPT_COOKIEFILE, $opts['cookiefile']);
+
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
((x($opts,'novalidate') && intval($opts['novalidate'])) ? false : true));
@@ -165,7 +178,9 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
* 'http_auth' => username:password
* 'novalidate' => do not validate SSL certs, default is to validate using our CA list
* 'filep' => stream resource to write body to. header and body are not returned when using this option.
- * @return array an assoziative array with:
+ * 'custom' => custom request method: e.g. 'PUT', 'DELETE'
+ *
+ * @return array an associative array with:
* * \e int \b return_code => HTTP return code or 0 if timeout or failure
* * \e boolean \b success => boolean true (if HTTP 2xx result) or false
* * \e string \b header => HTTP headers
@@ -174,6 +189,10 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
*/
function z_post_url($url,$params, $redirects = 0, $opts = array()) {
+// logger('url: ' . $url);
+// logger('params: ' . print_r($params,true));
+// logger('opts: ' . print_r($opts,true));
+
$ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => "");
$ch = curl_init($url);
@@ -199,12 +218,17 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) {
if(x($opts,'headers')) {
@curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']);
-logger('headers: ' . print_r($opts['headers'],true) . 'redir: ' . $redirects);
}
if(x($opts,'nobody'))
@curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
+ if(x($opts,'custom')) {
+ @curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $opts['custom']);
+ @curl_setopt($ch, CURLOPT_POST,0);
+ }
+
+
if(x($opts,'timeout') && intval($opts['timeout'])) {
@curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
}
@@ -218,6 +242,12 @@ logger('headers: ' . print_r($opts['headers'],true) . 'redir: ' . $redirects);
@curl_setopt($ch, CURLOPT_USERPWD, $opts['http_auth']);
}
+
+ if(x($opts,'cookiejar'))
+ @curl_setopt($ch, CURLOPT_COOKIEJAR, $opts['cookiejar']);
+ if(x($opts,'cookiefile'))
+ @curl_setopt($ch, CURLOPT_COOKIEFILE, $opts['cookiefile']);
+
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
((x($opts,'novalidate') && intval($opts['novalidate'])) ? false : true));
diff --git a/include/page_widgets.php b/include/page_widgets.php
index 49d1439be..3270de4a3 100644
--- a/include/page_widgets.php
+++ b/include/page_widgets.php
@@ -1,7 +1,8 @@
<?php
// A basic toolbar for observers with write_pages permissions
-function writepages_widget ($who,$which){
+
+function writepages_widget ($who,$which) {
return replace_macros(get_markup_template('write_pages.tpl'), array(
'$new' => t('New Page'),
'$newurl' => "webpages/$who",
@@ -13,9 +14,11 @@ function writepages_widget ($who,$which){
// Chan is channel_id, $which is channel_address - we'll need to pass observer later too.
-function pagelist_widget ($owner,$which){
- $r = q("select * from item_id left join item on item_id.iid = item.id where item_id.uid = %d and service = 'WEBPAGE' order by item.created desc",
+function pagelist_widget ($owner,$which) {
+
+ $r = q("select * from iconfig left join item on iconfig.iid = item.id where item_id.uid = %d
+ and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' order by item.created desc",
intval($owner)
);
@@ -24,7 +27,7 @@ function pagelist_widget ($owner,$which){
if($r) {
$pages = array();
foreach($r as $rr) {
- $pages[$rr['iid']][] = array('url' => $rr['iid'],'pagetitle' => $rr['sid'],'title' => $rr['title'],'created' => datetime_convert('UTC',date_default_timezone_get(),$rr['created']),'edited' => datetime_convert('UTC',date_default_timezone_get(),$rr['edited']));
+ $pages[$rr['iid']][] = array('url' => $rr['iid'],'pagetitle' => $rr['v'],'title' => $rr['title'],'created' => datetime_convert('UTC',date_default_timezone_get(),$rr['created']),'edited' => datetime_convert('UTC',date_default_timezone_get(),$rr['edited']));
}
}
diff --git a/include/photos.php b/include/photos.php
index c64d662ea..da6118b38 100644
--- a/include/photos.php
+++ b/include/photos.php
@@ -41,6 +41,10 @@ function photo_upload($channel, $observer, $args) {
else
$visible = 0;
+ $deliver = true;
+ if(array_key_exists('deliver',$args))
+ $deliver = intval($args['deliver']);
+
// Set to default channel permissions. If the parent directory (album) has permissions set,
// use those instead. If we have specific permissions supplied, they take precedence over
// all other settings. 'allow_cid' being passed from an external source takes priority over channel settings.
@@ -330,7 +334,7 @@ function photo_upload($channel, $observer, $args) {
if($item['mid'] === $item['parent_mid']) {
- $item['body'] = $args['body'];
+ $item['body'] = $summary;
$item['obj_type'] = ACTIVITY_OBJ_PHOTO;
$item['obj'] = json_encode($object);
@@ -355,14 +359,14 @@ function photo_upload($channel, $observer, $args) {
if(($item['edited'] > $r[0]['edited']) || $force) {
$item['id'] = $r[0]['id'];
$item['uid'] = $channel['channel_id'];
- item_store_update($item);
+ item_store_update($item,false,$deliver);
continue;
}
}
else {
$item['aid'] = $channel['channel_account_id'];
$item['uid'] = $channel['channel_id'];
- $item_result = item_store($item);
+ $item_result = item_store($item,false,$deliver);
}
}
}
@@ -414,10 +418,10 @@ function photo_upload($channel, $observer, $args) {
- $result = item_store($arr);
+ $result = item_store($arr,false,$deliver);
$item_id = $result['item_id'];
- if($visible)
+ if($visible && $deliver)
Zotlabs\Daemon\Master::Summon(array('Notifier', 'wall-new', $item_id));
}
diff --git a/include/plugin.php b/include/plugin.php
index be4e92f03..9b84039a6 100755
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -593,26 +593,37 @@ function script_path() {
return $scheme . '://' . $hostname;
}
-function head_add_js($src) {
- App::$js_sources[] = $src;
+function head_add_js($src, $priority = 0) {
+ if(! is_array(App::$js_sources[$priority]))
+ App::$js_sources[$priority] = array();
+ App::$js_sources[$priority][] = $src;
}
-function head_remove_js($src) {
+function head_remove_js($src, $priority = 0) {
- $index = array_search($src, App::$js_sources);
+ $index = array_search($src, App::$js_sources[$priority]);
if($index !== false)
- unset(App::$js_sources[$index]);
+ unset(App::$js_sources[$priority][$index]);
}
+// We should probably try to register main.js with a high priority, but currently we handle it
+// separately and put it at the end of the html head block in case any other javascript is
+// added outside the head_add_js construct.
+
function head_get_js() {
+
$str = '';
- $sources = App::$js_sources;
- if(count($sources))
- foreach($sources as $source) {
- if($source === 'main.js')
- continue;
- $str .= format_js_if_exists($source);
+ if(App::$js_sources) {
+ foreach(App::$js_sources as $sources) {
+ if(count($sources)) {
+ foreach($sources as $source) {
+ if($src === 'main.js')
+ continue;
+ $str .= format_js_if_exists($source);
+ }
+ }
}
+ }
return $str;
}
diff --git a/include/taxonomy.php b/include/taxonomy.php
index 177215fe8..067bd3246 100644
--- a/include/taxonomy.php
+++ b/include/taxonomy.php
@@ -400,7 +400,7 @@ function get_things($profile_hash,$uid) {
if(! $things[$rr['obj_verb']])
$things[$rr['obj_verb']] = array();
- $things[$rr['obj_verb']][] = array('term' => $rr['obj_term'],'url' => $rr['obj_url'],'img' => $rr['obj_imgurl'], 'profile' => $rr['profile_name'],'term_hash' => $rr['obj_obj'], 'likes' => $l,'like_count' => count($l),'like_label' => tt('Like','Likes',count($l),'noun'));
+ $things[$rr['obj_verb']][] = array('term' => $rr['obj_term'],'url' => $rr['obj_url'],'img' => $rr['obj_imgurl'], 'editurl' => z_root() . '/thing/' . $rr['obj_obj'], 'profile' => $rr['profile_name'],'term_hash' => $rr['obj_obj'], 'likes' => $l,'like_count' => count($l),'like_label' => tt('Like','Likes',count($l),'noun'));
}
$sorted_things = array();
if($things) {
diff --git a/include/text.php b/include/text.php
index 1bc19da34..22f4556a8 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1743,7 +1743,8 @@ function unamp($s) {
}
function layout_select($channel_id, $current = '') {
- $r = q("select mid,sid from item left join item_id on iid = item.id where service = 'PDL' and item.uid = item_id.uid and item_id.uid = %d and item_type = %d ",
+ $r = q("select mid, v from item left join iconfig on iconfig.iid = item.id
+ where iconfig.cat = 'system' and iconfig.k = 'PDL' and item.uid = %d and item_type = %d ",
intval($channel_id),
intval(ITEM_TYPE_PDL)
);
@@ -1753,7 +1754,7 @@ function layout_select($channel_id, $current = '') {
$options .= '<option value="" ' . $empty_selected . '>' . t('default') . '</option>';
foreach($r as $rr) {
$selected = (($rr['mid'] == $current) ? ' selected="selected" ' : '');
- $options .= '<option value="' . $rr['mid'] . '"' . $selected . '>' . $rr['sid'] . '</option>';
+ $options .= '<option value="' . $rr['mid'] . '"' . $selected . '>' . $rr['v'] . '</option>';
}
}
@@ -2821,13 +2822,16 @@ function expand_acl($s) {
// If it has a pdl we'll load it as we know the mid and pass the body through comanche_parser() which will generate the
// page layout from the given description
+// @FIXME - there is apparently a very similar function called layout_select; this one should probably take precedence
+// and the other should be checked for compatibility and removed
function pdl_selector($uid, $current="") {
$o = '';
$sql_extra = item_permissions_sql($uid);
- $r = q("select item_id.*, mid from item_id left join item on iid = item.id where item_id.uid = %d and item_id.uid = item.uid and service = 'PDL' $sql_extra order by sid asc",
+ $r = q("select iconfig.*, mid from item_id left join item on iconfig.iid = item.id
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'PDL' $sql_extra order by v asc",
intval($uid)
);
@@ -2841,7 +2845,7 @@ function pdl_selector($uid, $current="") {
$entries[] = array('title' => t('Default'), 'mid' => '');
foreach($entries as $selection) {
$selected = (($selection == $current) ? ' selected="selected" ' : '');
- $o .= "<option value=\"{$selection['mid']}\" $selected >{$selection['sid']}</option>";
+ $o .= "<option value=\"{$selection['mid']}\" $selected >{$selection['v']}</option>";
}
$o .= '</select>';
@@ -2877,3 +2881,54 @@ function flatten_array_recursive($arr) {
}
return($ret);
}
+
+function text_highlight($s,$lang) {
+
+ if($lang === 'js')
+ $lang = 'javascript';
+
+ if($lang === 'json') {
+ $lang = 'javascript';
+ if(! strpos(trim($s),"\n"))
+ $s = jindent($s);
+ }
+
+ if(! strpos('Text_Highlighter',get_include_path())) {
+ set_include_path(get_include_path() . PATH_SEPARATOR . 'library/Text_Highlighter');
+ }
+ require_once('library/Text_Highlighter/Text/Highlighter.php');
+ require_once('library/Text_Highlighter/Text/Highlighter/Renderer/Html.php');
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 4,
+ );
+ $tag_added = false;
+ $s = trim(html_entity_decode($s,ENT_COMPAT));
+ $s = str_replace(" ","\t",$s);
+
+ // The highlighter library insists on an opening php tag for php code blocks. If
+ // it isn't present, nothing is highlighted. So we're going to see if it's present.
+ // If not, we'll add it, and then quietly remove it after we get the processed output back.
+
+ if($lang === 'php') {
+ if(strpos('<?php',$s) !== 0) {
+ $s = '<?php' . "\n" . $s;
+ $tag_added = true;
+ }
+
+ }
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+ $hl = Text_Highlighter::factory($lang);
+ $hl->setRenderer($renderer);
+ $o = $hl->highlight($s);
+ $o = str_replace([" ","\n"],["&nbsp;&nbsp;&nbsp;&nbsp;",''],$o);
+
+ if($tag_added) {
+ $b = substr($o,0,strpos($o,'<li>'));
+ $e = substr($o,strpos($o,'</li>'));
+ $o = $b . $e;
+ }
+
+ return('<code>' . $o . '</code>');
+}
+
diff --git a/include/widgets.php b/include/widgets.php
index 3ca189af0..cdd5d72ab 100644
--- a/include/widgets.php
+++ b/include/widgets.php
@@ -994,8 +994,9 @@ function widget_item($arr) {
$sql_extra = item_permissions_sql($channel_id);
if($arr['title']) {
- $r = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid = '%s' and service = 'WEBPAGE' and item_type = %d $sql_options $revision limit 1",
+ $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s'
+ and iconfig.k = 'WEBPAGE' and item_type = %d $sql_options $revision limit 1",
intval($channel_id),
dbesc($arr['title']),
intval(ITEM_TYPE_WEBPAGE)
@@ -1253,8 +1254,8 @@ function widget_random_block($arr) {
$randfunc = db_getfunc('RAND');
- $r = q("select item.* from item left join item_id on item.id = item_id.iid
- where item.uid = %d and sid like '%s' and service = 'BUILDBLOCK' and
+ $r = q("select item.* from item left join iconfig on item.id = iconfig.iid
+ where item.uid = %d and iconfig.cat = 'system' and iconfig.v like '%s' and iconfig.k = 'BUILDBLOCK' and
item_type = %d $sql_options order by $randfunc limit 1",
intval($channel_id),
dbesc('%' . $contains . '%'),
diff --git a/include/wiki.php b/include/wiki.php
index 4aa3fc1b4..d60f4a3a7 100644
--- a/include/wiki.php
+++ b/include/wiki.php
@@ -231,6 +231,34 @@ function wiki_create_page($name, $resource_id) {
}
+function wiki_rename_page($arr) {
+ $pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
+ $pageNewName = ((array_key_exists('pageNewName',$arr)) ? $arr['pageNewName'] : '');
+ $resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
+ $w = wiki_get_wiki($resource_id);
+ if (!$w['path']) {
+ return array('message' => 'Wiki not found.', 'success' => false);
+ }
+ $page_path_old = $w['path'].'/'.$pageUrlName.'.md';
+ logger('$page_path_old: ' . $page_path_old);
+ if (!is_readable($page_path_old) === true) {
+ return array('message' => 'Cannot read wiki page: ' . $page_path_old, 'success' => false);
+ }
+ $page = array('rawName' => $pageNewName, 'htmlName' => escape_tags($pageNewName), 'urlName' => urlencode(escape_tags($pageNewName)), 'fileName' => urlencode(escape_tags($pageNewName)).'.md');
+ $page_path_new = $w['path'] . '/' . $page['fileName'] ;
+ logger('$page_path_new: ' . $page_path_new);
+ if (is_file($page_path_new)) {
+ return array('message' => 'Page already exists.', 'success' => false);
+ }
+ // Rename the page file in the wiki repo
+ if(!rename($page_path_old, $page_path_new)) {
+ return array('message' => 'Error renaming page file.', 'success' => false);
+ } else {
+ return array('page' => $page, 'message' => '', 'success' => true);
+ }
+
+}
+
function wiki_get_page_content($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
@@ -342,7 +370,7 @@ function wiki_revert_page($arr) {
}
}
} catch (\PHPGit\Exception\GitException $e) {
- json_return_and_die(array('content' => $content, 'message' => 'GitRepo error thrown', 'success' => false));
+ return array('content' => $content, 'message' => 'GitRepo error thrown', 'success' => false);
}
return array('content' => $content, 'message' => '', 'success' => true);
} else {
@@ -352,9 +380,18 @@ function wiki_revert_page($arr) {
function wiki_git_commit($arr) {
$files = ((array_key_exists('files', $arr)) ? $arr['files'] : null);
+ $all = ((array_key_exists('all', $arr)) ? $arr['all'] : false);
$commit_msg = ((array_key_exists('commit_msg', $arr)) ? $arr['commit_msg'] : 'Repo updated');
- $resource_id = ((array_key_exists('resource_id', $arr)) ? $arr['resource_id'] : json_return_and_die(array('message' => 'Wiki resource_id required for git commit', 'success' => false)));
- $observer = ((array_key_exists('observer', $arr)) ? $arr['observer'] : json_return_and_die(array('message' => 'Observer required for git commit', 'success' => false)));
+ if(array_key_exists('resource_id', $arr)) {
+ $resource_id = $arr['resource_id'];
+ } else {
+ return array('message' => 'Wiki resource_id required for git commit', 'success' => false);
+ }
+ if(array_key_exists('observer', $arr)) {
+ $observer = $arr['observer'];
+ } else {
+ return array('message' => 'Observer required for git commit', 'success' => false);
+ }
$w = wiki_get_wiki($resource_id);
if (!$w['path']) {
return array('message' => 'Error reading wiki', 'success' => false);
@@ -369,23 +406,23 @@ function wiki_git_commit($arr) {
if ($files === null) {
$options = array('all' => true); // git commit option to include all changes
} else {
- $options = array(); // git commit options
+ $options = array('all' => $all); // git commit options\
foreach ($files as $file) {
if (!$git->git->add($file)) { // add specified files to the git repo stage
if (!$git->git->reset->hard()) {
- json_return_and_die(array('message' => 'Error adding file to git stage: ' . $file . '. Error resetting git repo.', 'success' => false));
+ return array('message' => 'Error adding file to git stage: ' . $file . '. Error resetting git repo.', 'success' => false);
}
- json_return_and_die(array('message' => 'Error adding file to git stage: ' . $file, 'success' => false));
+ return array('message' => 'Error adding file to git stage: ' . $file, 'success' => false);
}
}
}
if ($git->commit($commit_msg, $options)) {
- json_return_and_die(array('message' => 'Wiki repo commit succeeded', 'success' => true));
+ return array('message' => 'Wiki repo commit succeeded', 'success' => true);
} else {
- json_return_and_die(array('message' => 'Wiki repo commit failed', 'success' => false));
+ return array('message' => 'Wiki repo commit failed', 'success' => false);
}
} catch (\PHPGit\Exception\GitException $e) {
- json_return_and_die(array('message' => 'GitRepo error thrown', 'success' => false));
+ return array('message' => 'GitRepo error thrown', 'success' => false);
}
}
diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql
index a536c3f9a..13fc54aba 100644
--- a/install/schema_mysql.sql
+++ b/install/schema_mysql.sql
@@ -199,6 +199,26 @@ CREATE TABLE IF NOT EXISTS `cache` (
PRIMARY KEY (`k`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `cal` (
+ `cal_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `cal_aid` int(10) unsigned NOT NULL DEFAULT '0',
+ `cal_uid` int(10) unsigned NOT NULL DEFAULT '0',
+ `cal_hash` varchar(255) NOT NULL DEFAULT '',
+ `cal_name` varchar(255) NOT NULL DEFAULT '',
+ `uri` varchar(255) NOT NULL DEFAULT '',
+ `logname` varchar(255) NOT NULL DEFAULT '',
+ `pass` varchar(255) NOT NULL DEFAULT '',
+ `ctag` varchar(255) NOT NULL DEFAULT '',
+ `synctoken` varchar(255) NOT NULL DEFAULT '',
+ `cal_types` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`cal_id`),
+ KEY `cal_aid` (`cal_aid`),
+ KEY `cal_uid` (`cal_uid`),
+ KEY `cal_hash` (`cal_hash`),
+ KEY `cal_name` (`cal_name`),
+ KEY `cal_types` (`cal_types`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
CREATE TABLE IF NOT EXISTS `channel` (
`channel_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`channel_account_id` int(10) unsigned NOT NULL DEFAULT '0',
@@ -394,6 +414,7 @@ CREATE TABLE IF NOT EXISTS `event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`aid` int(10) unsigned NOT NULL DEFAULT '0',
`uid` int(11) NOT NULL DEFAULT '0',
+ `cal_id` int(11) unsigned NOT NULL DEFAULT '0',
`event_xchan` char(255) NOT NULL DEFAULT '',
`event_hash` char(255) NOT NULL DEFAULT '',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -420,6 +441,7 @@ CREATE TABLE IF NOT EXISTS `event` (
`event_vdata` text NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
+ KEY `cal_id` (`cal_id`),
KEY `etype` (`etype`),
KEY `dtstart` (`dtstart`),
KEY `dtend` (`dtend`),
diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql
index b637fea43..9473252e6 100644
--- a/install/schema_postgres.sql
+++ b/install/schema_postgres.sql
@@ -193,6 +193,26 @@ CREATE TABLE "cache" (
"updated" timestamp NOT NULL,
PRIMARY KEY ("k")
);
+CREATE TABLE "cal" (
+ "cal_id" serial NOT NULL,
+ "cal_aid" bigint NOT NULL DEFAULT '0',
+ "cal_uid" bigint NOT NULL DEFAULT '0',
+ "cal_hash" text NOT NULL,
+ "cal_name" text NOT NULL,
+ "uri" text NOT NULL,
+ "logname" text NOT NULL,
+ "pass" text NOT NULL,
+ "ctag" text NOT NULL,
+ "synctoken" text NOT NULL,
+ "cal_types" text NOT NULL DEFAULT "0",
+ PRIMARY KEY ("cal_id")
+);
+create index "cal_hash_idx" on cal ("cal_hash");
+create index "cal_name_idx" on cal ("cal_name");
+create index "cal_types_idx" on cal ("cal_types");
+create index "cal_aid_idx" on cal ("cal_aid");
+create index "cal_uid_idx" on cal ("cal_uid");
+
CREATE TABLE "channel" (
"channel_id" serial NOT NULL,
"channel_account_id" bigint NOT NULL DEFAULT '0',
@@ -380,14 +400,11 @@ create index "dreport_xchan" on dreport ("dreport_xchan");
create index "dreport_queue" on dreport ("dreport_queue");
create index "dreport_channel" on dreport ("dreport_channel");
-
-
-
-
CREATE TABLE "event" (
"id" serial NOT NULL,
"aid" bigint NOT NULL DEFAULT '0',
"uid" bigint NOT NULL,
+ "cal_id" bigint NOT NULL DEFAULT '0',
"event_xchan" text NOT NULL DEFAULT '',
"event_hash" text NOT NULL DEFAULT '',
"created" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00',
@@ -415,6 +432,7 @@ CREATE TABLE "event" (
PRIMARY KEY ("id")
);
create index "event_uid_idx" on event ("uid");
+create index "event_cal_idx" on event ("cal_id");
create index "event_etype_idx" on event ("etype");
create index "event_dtstart_idx" on event ("dtstart");
create index "event_dtend_idx" on event ("dtend");
diff --git a/install/update.php b/install/update.php
index 908f60498..241de78e1 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1176 );
+define( 'UPDATE_VERSION' , 1178 );
/**
*
@@ -2254,3 +2254,74 @@ function update_r1175() {
return UPDATE_FAILED;
}
+
+
+function update_r1176() {
+
+ $r = q("select * from item_id where true");
+ if($r) {
+ foreach($r as $rr) {
+ \Zotlabs\Lib\IConfig::Set($rr['iid'],'system',$rr['service'],$rr['sid'],true);
+ }
+ }
+ return UPDATE_SUCCESS;
+
+}
+
+function update_r1177() {
+
+ if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
+ $r1 = q("alter table event add cal_id bigint NOT NULL DEFAULT '0'");
+ $r2 = q("create index \"event_cal_idx\" on event (\"cal_id\") ");
+
+ $r3 = q("CREATE TABLE \"cal\" (
+ \"cal_id\" serial NOT NULL,
+ \"cal_aid\" bigint NOT NULL DEFAULT '0',
+ \"cal_uid\" bigint NOT NULL DEFAULT '0',
+ \"cal_hash\" text NOT NULL,
+ \"cal_name\" text NOT NULL,
+ \"uri\" text NOT NULL,
+ \"logname\" text NOT NULL,
+ \"pass\" text NOT NULL,
+ \"ctag\" text NOT NULL,
+ \"synctoken\" text NOT NULL,
+ \"cal_types\" text NOT NULL,
+ PRIMARY KEY (\"cal_id\") ");
+ $r4 = q("create index \"cal_hash_idx\" on cal (\"cal_hash\") ");
+ $r5 = q("create index \"cal_name_idx\" on cal (\"cal_name\") ");
+ $r6 = q("create index \"cal_types_idx\" on cal (\"cal_types\") ");
+ $r7 = q("create index \"cal_aid_idx\" on cal (\"cal_aid\") ");
+ $r8 = q("create index \"cal_uid_idx\" on cal (\"cal_uid\") ");
+ $r = $r1 && $r2 && $r3 && $r4 && $r5 && $r6 && $r7 && $r8;
+ }
+ else {
+ $r1 = q("alter table event add cal_id int(10) unsigned NOT NULL DEFAULT '0',
+ add index ( cal_id ) ");
+
+ $r2 = q("CREATE TABLE IF NOT EXISTS `cal` (
+ `cal_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `cal_aid` int(10) unsigned NOT NULL DEFAULT '0',
+ `cal_uid` int(10) unsigned NOT NULL DEFAULT '0',
+ `cal_hash` varchar(255) NOT NULL DEFAULT '',
+ `cal_name` varchar(255) NOT NULL DEFAULT '',
+ `uri` varchar(255) NOT NULL DEFAULT '',
+ `logname` varchar(255) NOT NULL DEFAULT '',
+ `pass` varchar(255) NOT NULL DEFAULT '',
+ `ctag` varchar(255) NOT NULL DEFAULT '',
+ `synctoken` varchar(255) NOT NULL DEFAULT '',
+ `cal_types` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`cal_id`),
+ KEY `cal_aid` (`cal_aid`),
+ KEY `cal_uid` (`cal_uid`),
+ KEY `cal_hash` (`cal_hash`),
+ KEY `cal_name` (`cal_name`),
+ KEY `cal_types` (`cal_types`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ");
+
+ $r = $r1 && $r2;
+ }
+
+ if($r)
+ return UPDATE_SUCCESS;
+ return UPDATE_FAILED;
+}
diff --git a/library/Text_Highlighter/README b/library/Text_Highlighter/README
new file mode 100644
index 000000000..88f71aed2
--- /dev/null
+++ b/library/Text_Highlighter/README
@@ -0,0 +1,455 @@
+# $Id$
+
+Introduction
+============
+
+Text_Highlighter is a class for syntax highlighting. The main idea is to
+simplify creation of subclasses implementing syntax highlighting for
+particular language. Subclasses do not implement any new functioanality, they
+just provide syntax highlighting rules. The rules sources are in XML format.
+To create a highlighter for a language, there is no need to code a new class
+manually. Simply describe the rules in XML file and use Text_Highlighter_Generator
+to create a new class.
+
+
+This document does not contain a formal description of API - it is very
+simple, and I believe providing some examples of code is sufficient.
+
+
+Highlighter XML source
+======================
+
+Basics
+------
+
+Creating a new syntax highlighter begins with describing the highlighting
+rules. There are two basic elements: block and region. A block is just a
+portion of text matching a regular expression and highlighted with a single
+color. Keyword is an example of a block. A region is defined by two regular
+expressions: one for start of region, and another for the end. The main
+difference from a block is that a region can contain blocks and regions
+(including same-named regions). An example of a region is a group of
+statements enclosed in curly brackets (this is used in many languages, for
+example PHP and C). Also, characters matching start and end of a region may be
+highlighted with their own color, and region contents with another.
+
+Blocks and regions may be declared as contained. Contained blocks and regions
+can only appear inside regions. If a region or a block is not declared as
+contained, it can appear both on top level and inside regions. Block or region
+declared as not-contained can only appear on top level.
+
+For any region, a list of blocks and regions that can appear inside this
+region can be specified.
+
+In this document, the term "color group" is used. Chunks of text assigned to
+same color group will be highlighted with same color. Note that in versions
+prior 0.5.0 color goups were refered as CSS classes, but since 0.5.0 not only
+HTML output is supported, so "color group" is more appropriate term.
+
+Elements
+--------
+
+The toplevel element is <highlight>. Attribute lang is required and denotes
+the name of the language. Its value is used as a part of generated class name,
+and must only contain letters, digits and underscores. Optional attribute
+case, when given value yes, makes the language case sensitive (default is case
+insensitive). Allowed subelements are:
+
+ * <authors>: Information about the authors of the file.
+ <author>: Information about a single author of the file. (May be used
+ multiple times, one per author.)
+ - name="...": Author's name. Required.
+ - email="...": Author's email address. Optional.
+
+ * <default>: Default color group.
+ - innerGroup="...": color group name. Required.
+
+ * <region>: Region definition
+ - name="...": Region name. Required.
+ - innerGroup="...": Default color group of region contents. Required.
+ - delimGroup="...": color group of start and end of region. Optional,
+ defaults to value of innerGroup attribute.
+ - start="...", end="...": Regular expression matching start and end
+ of region. Required. Regular expression delimiters are optional, but
+ if you need to specify delimiter, use /. The only case when the
+ delimiters are needed, is specifying regular expression modifiers,
+ such as m or U. Examples: \/\* or /$/m.
+ - contained="yes": Marks region as contained.
+ - never-contained="yes": Marks region as not-contained.
+ - <contains>: Elements allowed inside this region.
+ - all="yes" Region can contain any other region or block
+ (except not-contained). May be used multiple times.
+ - <but> Do not allow certain regions or blocks.
+ - region="..." Name of region not allowed within
+ current region.
+ - block="..." Name of block not allowed within
+ current region.
+ - region="..." Name of region allowed within current region.
+ - block="..." Name of block allowed within current region.
+ - <onlyin> Only allow this region within certain regions. May be
+ used multiple times.
+ - block="..." Name of parent region
+
+ * <block>: Block definition
+ - name="...": Block name. Required.
+ - innerGroup="...": color group of block contents. Optional. If not
+ specified, color group of parent region or default color group will be
+ used. One would only want to omit this attribute if there are
+ keyword groups (see below) inherited from this block, and no special
+ highlighting should apply when the block does not match the keyword.
+ - match="..." Regular expression matching the block. Required.
+ Regular expression delimiters are optional, but if you need to
+ specify delimiter, use /. The only case when the delimiters are
+ needed, is specifying regular expression modifiers, such as m or U.
+ Examples: #|\/\/ or /$/m.
+ - contained="yes": Marks block as contained.
+ - never-contained="yes": Marks block as not-contained.
+ - <onlyin> Only allow this block within certain regions. May be used
+ multiple times.
+ - block="..." Name of parent region
+ - multiline="yes": Marks block as multi-line. By default, whole
+ blocks are assumed to reside in a single line. This make the things
+ faster. If you need to declare a multi-line block, use this
+ attribute.
+ - <partgroup>: Assigns another color group to a part of the block that
+ matched a subpattern.
+ - index="n": Subpattern index. Required.
+ - innerGroup="...": color group name. Required.
+
+ This is an example from CSS highlighter: the measure is matched as
+ a whole, but the measurement units are highlighted with different
+ color.
+
+ <block name="measure" match="\d*\.?\d+(\%|em|ex|pc|pt|px|in|mm|cm)"
+ innerGroup="number" contained="yes">
+ <onlyin region="property"/>
+ <partGroup index="1" innerGroup="string" />
+ </block>
+
+ * <keywords>: Keyword group definition. Keyword groups are useful when you
+ want to highlight some words that match a condition for a block with a
+ different color. Keywords are defined with literal match, not regular
+ expressions. For example, you have a block named identifier matching a
+ general identifier, and want to highlight reserved words (which match
+ this block as well) with different color. You inherit a keyword group
+ "reserved" from "identifier" block.
+ - name="...": Keyword group. Required.
+ - ifdef="...", ifndef="..." : Conditional declaration. See
+ "Conditions" below.
+ - inherits="...": Inherited block name. Required.
+ - innerGroup="...": color group of keyword group. Required.
+ - case="yes|no": Overrides case-sensitivity of the language.
+ Optional, defaults to global value.
+ - <keyword>: Single keyword definition.
+ - match="..." The keyword. Note: this is not a regular
+ expression, but literal match (possibly case insensitive).
+
+Note that for BC reasons element partClass is alias for partGroup, and
+attributes innerClass and delimClass are aliases of innerGroup and
+delimGroup, respectively.
+
+
+Conditions
+----------
+
+Conditional declarations allow enabling or disabling certain highlighting
+rules at runtime. For example, Java highlighter has a very big list of
+keywords matching Java standard classes. Finding a match in this list can take
+much time. For that reason, corresponding keyword group is declared with
+"ifdef" attribute :
+
+ <keywords name="builtin" inherits="identifier" innerClass="builtin"
+ case="yes" ifdef="java.builtins">
+ <keyword match="AbstractAction" />
+ <keyword match="AbstractBorder" />
+ <keyword match="AbstractButton" />
+ ...
+ ...
+ <keyword match="_Remote_Stub" />
+ <keyword match="_ServantActivatorStub" />
+ <keyword match="_ServantLocatorStub" />
+ </keywords>
+
+This keyword group will be only enabled when "java.builtins" is passed as an
+element of "defines" option:
+
+ $options = array(
+ 'defines' => array(
+ 'java.builtins',
+ ),
+ 'numbers' => HL_NUMBERS_TABLE,
+ );
+ $highlighter = Text_Highlighter::factory('java', $options);
+
+"ifndef" attribute has reverse meaning.
+
+Currently, "ifdef" and "ifndef" attributes are only supported for <keywords>
+tag.
+
+
+
+Class generation
+================
+
+Creating XML description of highlighting rules is the most complicated part of
+the process. To generate the class, you need just few lines of code:
+
+ <?php
+ require_once 'Text/Highlighter/Generator.php';
+ $generator = new Text_Highlighter_Generator('php.xml');
+ $generator->generate();
+ $generator->saveCode('PHP.php');
+ ?>
+
+
+
+Command-line class generation tool
+==================================
+
+Example from previous section looks pretty simple, but it does not handle any
+errors which may occur during parsing of XML source. The package provides a
+command-line script to make generation of classes even more simple, and takes
+care of possible errors. It is called generate (on Unix/Linux) or generate.bat
+(on Windows). This script is able to process multiple files in one run, and
+also to process XML from standard input and write generated code to standard
+output.
+
+ Usage:
+ generate options
+
+ Options:
+ -x filename, --xml=filename
+ source XML file. Multiple input files can be specified, in which
+ case each -x option must be followed by -p unless -d is specified
+ Defaults to stdin
+ -p filename, --php=filename
+ destination PHP file. Defaults to stdout. If specied multiple times,
+ each -p must follow -x
+ -d dirname, --dir=dirname
+ Default destination directory. File names will be taken from XML input
+ ("lang" attribute of <highlight> tag)
+ -h, --help
+ This help
+
+Examples
+
+ Read from php.xml, write to PHP.php
+
+ generate -x php.xml -p PHP.php
+
+ Read from php.xml, write to standard output
+
+ generate -x php.xml
+
+ Read from php.xml, write to PHP.php, read from xml.xml, write to XML.php
+
+ generate -x php.xml -p PHP.php -x xml.xml -p XML.php
+
+ Read from php.xml, write to /some/dir/PHP.php, read from xml.xml, write to
+ /some/dir/XML.php (assuming that xml.xml contains <highlight lang="xml">, and
+ php.xml contains <highlight lang="php">)
+
+ generate -x php.xml -x xml.xml -d /some/dir/
+
+
+
+Renderers
+=========
+
+Introduction
+------------
+
+Text_Highlighter supports renderes. Using renderers, you can get output in
+different formats. Two renderers are included in the package:
+
+ - HTML renderer. Generates HTML output. A style sheet should be linked to
+ the document to display colored text
+
+ - Console renderer. Can be used to output highlighted text to
+ color-capable terminals, either directly or trough less -r
+
+
+Renderers API
+-------------
+
+Renderers are subclasses of Text_Highlighter_Renderer. Renderer should
+override at least two methods - acceptToken and getOutput. Overriding other
+methods is optional, depending on the nature of renderer's output and details
+of implementation.
+
+ string reset()
+ resets renderer state. This method is called every time before a new
+ source file is highlighted.
+
+ string preprocess(string $code)
+ preprocesses code. Can be used, for example, to normalize whitespace
+ before highlighting. Returns preprocessed string.
+
+ void acceptToken(string $group, string $content)
+ the core method of the renderer. Highlighter passes chunks of text to
+ this method in $content, and color group in $group
+
+ void finalize()
+ signals the renderer that no more tokens are available.
+
+ mixed getOutput()
+ returns generated output.
+
+
+Setting renderer options
+--------------------------------
+
+Renderers accept an optional argument to their constructor - options array.
+Elements of this array are renderer-specific.
+
+HTML renderer
+-------------
+
+HTML renderer produces HTML output with optional line numbering. The renderer
+itself does not provide information about actual colors of highlighted text.
+Instead, <span class="hl-XXX"> is used, where XXX is replaced with color group
+name (hl-var, hl-string, etc.). It is up to you to create a CSS stylesheet.
+If 'use_language' option with value evaluating to true was passed, class names
+will be formatted as "LANG-hl-XXX", where LANG is language name as defined in
+highlighter XML source ("lang" attribute of <highlight> tag) in lower case.
+
+There are 3 special CSS classes:
+
+ hl-main - this class applies to whole output or right table column,
+ depending on 'numbers' option
+ hl-gutter - applies to left column in table
+ hl-table - applies to whole table
+
+HTML renderer accepts following options (each being optional):
+
+ * numbers - line numbering style.
+ 0 - no numbering (default)
+ HL_NUMBERS_LI - use <ol></ol> for line numbering
+ HL_NUMBERS_TABLE - create a 2-column table, with line numbers in left
+ column and highlighted text in right column
+
+ * tabsize - tabulation size. Defaults to 4
+
+ Example:
+
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+
+Console renderer
+----------------
+
+Console renderer produces output for displaying on a color-capable terminal,
+either directly or through less -r, using ANSI escape sequences. By default,
+this renderer only highlights most common color groups. Additional colors
+can be specified using 'colors' option. This renderer also accepts 'numbers'
+option - a boolean value, and 'tabsize' option.
+
+ Example :
+
+ require_once 'Text/Highlighter/Renderer/Console.php';
+ $colors = array(
+ 'prepro' => "\033[35m",
+ 'types' => "\033[32m",
+ );
+ $options = array(
+ 'numbers' => true,
+ 'tabsize' => 8,
+ 'colors' => $colors,
+ );
+ $renderer = new Text_Highlighter_Renderer_Console($options);
+
+
+ANSI color escape sequences have the following format:
+
+ ESC[#;#;....;#m
+
+where ESC is character with ASCII code 27 (033 octal, 0x1B hexadecimal). # is
+one of the following:
+
+ 0 for normal display
+ 1 for bold on
+ 4 underline (mono only)
+ 5 blink on
+ 7 reverse video on
+ 8 nondisplayed (invisible)
+ 30 black foreground
+ 31 red foreground
+ 32 green foreground
+ 33 yellow foreground
+ 34 blue foreground
+ 35 magenta foreground
+ 36 cyan foreground
+ 37 white foreground
+ 40 black background
+ 41 red background
+ 42 green background
+ 43 yellow background
+ 44 blue background
+ 45 magenta background
+ 46 cyan background
+ 47 white background
+
+
+How to use Text_Highlighter class
+=================================
+
+Creating a highlighter object
+-----------------------------
+
+To create a highlighter for a certain language, use Text_Highlighter::factory()
+static method:
+
+ require_once 'Text/Highlighter.php';
+ $hl = Text_Highlighter::factory('php');
+
+
+Setting a renderer
+------------------
+
+Actual output is produced by a renderer.
+
+ require_once 'Text/Highlighter.php';
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+ $hl = Text_Highlighter::factory('php');
+ $hl->setRenderer($renderer);
+
+Note that for BC reasons, it is possible to use highlighter without setting a
+renderer. If no renderer is set, HTML renderer will be used by default. In
+this case, you should pass options as second parameter to factory method. The
+following example works exactly as previous one:
+
+ require_once 'Text/Highlighter.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $hl = Text_Highlighter::factory('php', $options);
+
+
+Getting output
+--------------
+
+And finally, do the highlighting and get the output:
+
+ require_once 'Text/Highlighter.php';
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+ $hl = Text_Highlighter::factory('php');
+ $hl->setRenderer($renderer);
+ $html = $hl->highlight(file_get_contents('example.php'));
+
+# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */
+
diff --git a/library/Text_Highlighter/TODO b/library/Text_Highlighter/TODO
new file mode 100644
index 000000000..77a148b8a
--- /dev/null
+++ b/library/Text_Highlighter/TODO
@@ -0,0 +1,12 @@
+# $Id$
+
+Major issues to solve (but I currently have no idea how) :
+
+- speedup highlighting process
+
+- switching between highlighters depending on context, for example :
+ PHP code -> HTML -> (JavaScript|CSS)
+
+
+# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */
+
diff --git a/library/Text_Highlighter/Text/Highlighter.php b/library/Text_Highlighter/Text/Highlighter.php
new file mode 100644
index 000000000..480113c16
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter.php
@@ -0,0 +1,398 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * Highlighter base class
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+// require_once 'PEAR.php';
+
+// {{{ BC constants
+
+// BC trick : define constants related to default
+// renderer if needed
+if (!defined('HL_NUMBERS_LI')) {
+ /**#@+
+ * Constant for use with $options['numbers']
+ * @see Text_Highlighter_Renderer_Html::_init()
+ */
+ /**
+ * use numbered list
+ */
+ define ('HL_NUMBERS_LI' , 1);
+ /**
+ * Use 2-column table with line numbers in left column and code in right column.
+ * Forces $options['tag'] = HL_TAG_PRE
+ */
+ define ('HL_NUMBERS_TABLE' , 2);
+ /**#@-*/
+}
+
+// }}}
+// {{{ constants
+/**
+ * for our purpose, it is infinity
+ */
+define ('HL_INFINITY', 1000000000);
+
+// }}}
+
+/**
+ * Text highlighter base class
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+// {{{ Text_Highlighter
+
+/**
+ * Text highlighter base class
+ *
+ * This class implements all functions necessary for highlighting,
+ * but it does not contain highlighting rules. Actual highlighting is
+ * done using a descendent of this class.
+ *
+ * One is not supposed to manually create descendent classes.
+ * Instead, describe highlighting rules in XML format and
+ * use {@link Text_Highlighter_Generator} to create descendent class.
+ * Alternatively, an instance of a descendent class can be created
+ * directly.
+ *
+ * Use {@link Text_Highlighter::factory()} to create an
+ * object for particular language highlighter
+ *
+ * Usage example
+ * <code>
+ *require_once 'Text/Highlighter.php';
+ *$hlSQL = Text_Highlighter::factory('SQL',array('numbers'=>true));
+ *echo $hlSQL->highlight('SELECT * FROM table a WHERE id = 12');
+ * </code>
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @package Text_Highlighter
+ * @access public
+ */
+
+class Text_Highlighter
+{
+ // {{{ members
+
+ /**
+ * Syntax highlighting rules.
+ * Auto-generated classes set this var
+ *
+ * @access protected
+ * @see _init
+ * @var array
+ */
+ var $_syntax;
+
+ /**
+ * Renderer object.
+ *
+ * @access private
+ * @var array
+ */
+ var $_renderer;
+
+ /**
+ * Options. Keeped for BC
+ *
+ * @access protected
+ * @var array
+ */
+ var $_options = array();
+
+ /**
+ * Conditionds
+ *
+ * @access protected
+ * @var array
+ */
+ var $_conditions = array();
+
+ /**
+ * Disabled keywords
+ *
+ * @access protected
+ * @var array
+ */
+ var $_disabled = array();
+
+ /**
+ * Language
+ *
+ * @access protected
+ * @var string
+ */
+ var $_language = '';
+
+ // }}}
+ // {{{ _checkDefines
+
+ /**
+ * Called by subclssses' constructors to enable/disable
+ * optional highlighter rules
+ *
+ * @param array $defines Conditional defines
+ *
+ * @access protected
+ */
+ function _checkDefines()
+ {
+ if (isset($this->_options['defines'])) {
+ $defines = $this->_options['defines'];
+ } else {
+ $defines = array();
+ }
+ foreach ($this->_conditions as $name => $actions) {
+ foreach($actions as $action) {
+ $present = in_array($name, $defines);
+ if (!$action[1]) {
+ $present = !$present;
+ }
+ if ($present) {
+ unset($this->_disabled[$action[0]]);
+ } else {
+ $this->_disabled[$action[0]] = true;
+ }
+ }
+ }
+ }
+
+ // }}}
+ // {{{ factory
+
+ /**
+ * Create a new Highlighter object for specified language
+ *
+ * @param string $lang language, for example "SQL"
+ * @param array $options Rendering options. This
+ * parameter is only keeped for BC reasons, use
+ * {@link Text_Highlighter::setRenderer()} instead
+ *
+ * @return mixed a newly created Highlighter object, or
+ * a PEAR error object on error
+ *
+ * @static
+ * @access public
+ */
+ function &factory($lang, $options = array())
+ {
+ $lang = strtoupper($lang);
+ @include_once 'Text/Highlighter/' . $lang . '.php';
+
+ $classname = 'Text_Highlighter_' . $lang;
+
+ if (!class_exists($classname)) {
+ return PEAR::raiseError('Highlighter for ' . $lang . ' not found');
+ }
+
+ $obj = new $classname($options);
+
+ return $obj;
+ }
+
+ // }}}
+ // {{{ setRenderer
+
+ /**
+ * Set renderer object
+ *
+ * @param object $renderer Text_Highlighter_Renderer
+ *
+ * @access public
+ */
+ function setRenderer(&$renderer)
+ {
+ $this->_renderer = $renderer;
+ }
+
+ // }}}
+
+ /**
+ * Helper function to find matching brackets
+ *
+ * @access private
+ */
+ function _matchingBrackets($str)
+ {
+ return strtr($str, '()<>[]{}', ')(><][}{');
+ }
+
+
+
+
+ function _getToken()
+ {
+ if (!empty($this->_tokenStack)) {
+ return array_pop($this->_tokenStack);
+ }
+ if ($this->_pos >= $this->_len) {
+ return NULL;
+ }
+
+ if ($this->_state != -1 && preg_match($this->_endpattern, $this->_str, $m, PREG_OFFSET_CAPTURE, $this->_pos)) {
+ $endpos = $m[0][1];
+ $endmatch = $m[0][0];
+ } else {
+ $endpos = -1;
+ }
+ preg_match ($this->_regs[$this->_state], $this->_str, $m, PREG_OFFSET_CAPTURE, $this->_pos);
+ $n = 1;
+
+
+ foreach ($this->_counts[$this->_state] as $i=>$count) {
+ if (!isset($m[$n])) {
+ break;
+ }
+ if ($m[$n][1]>-1 && ($endpos == -1 || $m[$n][1] < $endpos)) {
+ if ($this->_states[$this->_state][$i] != -1) {
+ $this->_tokenStack[] = array($this->_delim[$this->_state][$i], $m[$n][0]);
+ } else {
+ $inner = $this->_inner[$this->_state][$i];
+ if (isset($this->_parts[$this->_state][$i])) {
+ $parts = array();
+ $partpos = $m[$n][1];
+ for ($j=1; $j<=$count; $j++) {
+ if ($m[$j+$n][1] < 0) {
+ continue;
+ }
+ if (isset($this->_parts[$this->_state][$i][$j])) {
+ if ($m[$j+$n][1] > $partpos) {
+ array_unshift($parts, array($inner, substr($this->_str, $partpos, $m[$j+$n][1]-$partpos)));
+ }
+ array_unshift($parts, array($this->_parts[$this->_state][$i][$j], $m[$j+$n][0]));
+ }
+ $partpos = $m[$j+$n][1] + strlen($m[$j+$n][0]);
+ }
+ if ($partpos < $m[$n][1] + strlen($m[$n][0])) {
+ array_unshift($parts, array($inner, substr($this->_str, $partpos, $m[$n][1] - $partpos + strlen($m[$n][0]))));
+ }
+ $this->_tokenStack = array_merge($this->_tokenStack, $parts);
+ } else {
+ foreach ($this->_keywords[$this->_state][$i] as $g => $re) {
+ if (isset($this->_disabled[$g])) {
+ continue;
+ }
+ if (preg_match($re, $m[$n][0])) {
+ $inner = $this->_kwmap[$g];
+ break;
+ }
+ }
+ $this->_tokenStack[] = array($inner, $m[$n][0]);
+ }
+ }
+ if ($m[$n][1] > $this->_pos) {
+ $this->_tokenStack[] = array($this->_lastinner, substr($this->_str, $this->_pos, $m[$n][1]-$this->_pos));
+ }
+ $this->_pos = $m[$n][1] + strlen($m[$n][0]);
+ if ($this->_states[$this->_state][$i] != -1) {
+ $this->_stack[] = array($this->_state, $this->_lastdelim, $this->_lastinner, $this->_endpattern);
+ $this->_lastinner = $this->_inner[$this->_state][$i];
+ $this->_lastdelim = $this->_delim[$this->_state][$i];
+ $l = $this->_state;
+ $this->_state = $this->_states[$this->_state][$i];
+ $this->_endpattern = $this->_end[$this->_state];
+ if ($this->_subst[$l][$i]) {
+ for ($k=0; $k<=$this->_counts[$l][$i]; $k++) {
+ if (!isset($m[$i+$k])) {
+ break;
+ }
+ $quoted = preg_quote($m[$n+$k][0], '/');
+ $this->_endpattern = str_replace('%'.$k.'%', $quoted, $this->_endpattern);
+ $this->_endpattern = str_replace('%b'.$k.'%', $this->_matchingBrackets($quoted), $this->_endpattern);
+ }
+ }
+ }
+ return array_pop($this->_tokenStack);
+ }
+ $n += $count + 1;
+ }
+
+ if ($endpos > -1) {
+ $this->_tokenStack[] = array($this->_lastdelim, $endmatch);
+ if ($endpos > $this->_pos) {
+ $this->_tokenStack[] = array($this->_lastinner, substr($this->_str, $this->_pos, $endpos-$this->_pos));
+ }
+ list($this->_state, $this->_lastdelim, $this->_lastinner, $this->_endpattern) = array_pop($this->_stack);
+ $this->_pos = $endpos + strlen($endmatch);
+ return array_pop($this->_tokenStack);
+ }
+ $p = $this->_pos;
+ $this->_pos = HL_INFINITY;
+ return array($this->_lastinner, substr($this->_str, $p));
+ }
+
+
+
+
+ // {{{ highlight
+
+ /**
+ * Highlights code
+ *
+ * @param string $str Code to highlight
+ * @access public
+ * @return string Highlighted text
+ *
+ */
+
+ function highlight($str)
+ {
+ if (!($this->_renderer)) {
+ include_once('Text/Highlighter/Renderer/Html.php');
+ $this->_renderer = new Text_Highlighter_Renderer_Html($this->_options);
+ }
+ $this->_state = -1;
+ $this->_pos = 0;
+ $this->_stack = array();
+ $this->_tokenStack = array();
+ $this->_lastinner = $this->_defClass;
+ $this->_lastdelim = $this->_defClass;
+ $this->_endpattern = '';
+ $this->_renderer->reset();
+ $this->_renderer->setCurrentLanguage($this->_language);
+ $this->_str = $this->_renderer->preprocess($str);
+ $this->_len = strlen($this->_str);
+ while ($token = $this->_getToken()) {
+ $this->_renderer->acceptToken($token[0], $token[1]);
+ }
+ $this->_renderer->finalize();
+ return $this->_renderer->getOutput();
+ }
+
+ // }}}
+
+}
+
+// }}}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/ABAP.php b/library/Text_Highlighter/Text/Highlighter/ABAP.php
new file mode 100644
index 000000000..b2f7bda94
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/ABAP.php
@@ -0,0 +1,519 @@
+<?php
+/**
+ * Auto-generated class. ABAP syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : abap.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. ABAP syntax highlighting
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_ABAP extends Text_Highlighter
+{
+ var $_language = 'abap';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_ABAP($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)^\\*|")|((?i)\')|((?i)[a-z_\\-]\\w*)/',
+ 0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)^\\*|")|((?i)\')|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)[a-z_\\-]\\w*)/',
+ 1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)^\\*|")|((?i)\')|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)[a-z_\\-]\\w*)/',
+ 2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)^\\*|")|((?i)\')|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)[a-z_\\-]\\w*)/',
+ 3 => '//',
+ 4 => '//',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => '',
+ ),
+ 0 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'identifier',
+ ),
+ 0 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'identifier',
+ ),
+ 1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'identifier',
+ ),
+ 2 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'identifier',
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\}/',
+ 1 => '/(?i)\\)/',
+ 2 => '/(?i)\\]/',
+ 3 => '/(?mi)$/',
+ 4 => '/(?i)\'/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ 'sy' => '/^((?i)screen-name|screen-group1|screen-group2|screen-group3|screen-group4|screen-required|screen-input|screen-output|screen-intensified|screen-invisible|screen-length|screen-active|sy-index|sy-pagno|sy-tabix|sy-tfill|sy-tlopc|sy-tmaxl|sy-toccu|sy-ttabc|sy-tstis|sy-ttabi|sy-dbcnt|sy-fdpos|sy-colno|sy-linct|sy-linno|sy-linsz|sy-pagct|sy-macol|sy-marow|sy-tleng|sy-sfoff|sy-willi|sy-lilli|sy-subrc|sy-fleng|sy-cucol|sy-curow|sy-lsind|sy-listi|sy-stepl|sy-tpagi|sy-winx1|sy-winy1|sy-winx2|sy-winy2|sy-winco|sy-winro|sy-windi|sy-srows|sy-scols|sy-loopc|sy-folen|sy-fodec|sy-tzone|sy-dayst|sy-ftype|sy-appli|sy-fdayw|sy-ccurs|sy-ccurt|sy-debug|sy-ctype|sy-input|sy-langu|sy-modno|sy-batch|sy-binpt|sy-calld|sy-dynnr|sy-dyngr|sy-newpa|sy-pri40|sy-rstrt|sy-wtitl|sy-cpage|sy-dbnam|sy-mandt|sy-prefx|sy-fmkey|sy-pexpi|sy-prini|sy-primm|sy-prrel|sy-playo|sy-prbig|sy-playp|sy-prnew|sy-prlog|sy-pdest|sy-plist|sy-pauth|sy-prdsn|sy-pnwpa|sy-callr|sy-repi2|sy-rtitl|sy-prrec|sy-prtxt|sy-prabt|sy-lpass|sy-nrpag|sy-paart|sy-prcop|sy-batzs|sy-bspld|sy-brep4|sy-batzo|sy-batzd|sy-batzw|sy-batzm|sy-ctabl|sy-dbsys|sy-dcsys|sy-macdb|sy-sysid|sy-opsys|sy-pfkey|sy-saprl|sy-tcode|sy-ucomm|sy-cfwae|sy-chwae|sy-spono|sy-sponr|sy-waers|sy-cdate|sy-datum|sy-slset|sy-subty|sy-subcs|sy-group|sy-ffile|sy-uzeit|sy-dsnam|sy-repid|sy-tabid|sy-tfdsn|sy-uname|sy-lstat|sy-abcde|sy-marky|sy-sfnam|sy-tname|sy-msgli|sy-title|sy-entry|sy-lisel|sy-uline|sy-xcode|sy-cprog|sy-xprog|sy-xform|sy-ldbpg|sy-tvar0|sy-tvar1|sy-tvar2|sy-tvar3|sy-tvar4|sy-tvar5|sy-tvar6|sy-tvar7|sy-tvar8|sy-tvar9|sy-msgid|sy-msgty|sy-msgno|sy-msgv1|sy-msgv2|sy-msgv3|sy-msgv4|sy-oncom|sy-vline|sy-winsl|sy-staco|sy-staro|sy-datar|sy-host|sy-locdb|sy-locop|sy-datlo|sy-timlo|sy-zonlo|syst-index|syst-pagno|syst-tabix|syst-tfill|syst-tlopc|syst-tmaxl|syst-toccu|syst-ttabc|syst-tstis|syst-ttabi|syst-dbcnt|syst-fdpos|syst-colno|syst-linct|syst-linno|syst-linsz|syst-pagct|syst-macol|syst-marow|syst-tleng|syst-sfoff|syst-willi|syst-lilli|syst-subrc|syst-fleng|syst-cucol|syst-curow|syst-lsind|syst-listi|syst-stepl|syst-tpagi|syst-winx1|syst-winy1|syst-winx2|syst-winy2|syst-winco|syst-winro|syst-windi|syst-srows|syst-scols|syst-loopc|syst-folen|syst-fodec|syst-tzone|syst-dayst|syst-ftype|syst-appli|syst-fdayw|syst-ccurs|syst-ccurt|syst-debug|syst-ctype|syst-input|syst-langu|syst-modno|syst-batch|syst-binpt|syst-calld|syst-dynnr|syst-dyngr|syst-newpa|syst-pri40|syst-rstrt|syst-wtitl|syst-cpage|syst-dbnam|syst-mandt|syst-prefx|syst-fmkey|syst-pexpi|syst-prini|syst-primm|syst-prrel|syst-playo|syst-prbig|syst-playp|syst-prnew|syst-prlog|syst-pdest|syst-plist|syst-pauth|syst-prdsn|syst-pnwpa|syst-callr|syst-repi2|syst-rtitl|syst-prrec|syst-prtxt|syst-prabt|syst-lpass|syst-nrpag|syst-paart|syst-prcop|syst-batzs|syst-bspld|syst-brep4|syst-batzo|syst-batzd|syst-batzw|syst-batzm|syst-ctabl|syst-dbsys|syst-dcsys|syst-macdb|syst-sysid|syst-opsys|syst-pfkey|syst-saprl|syst-tcode|syst-ucomm|syst-cfwae|syst-chwae|syst-spono|syst-sponr|syst-waers|syst-cdate|syst-datum|syst-slset|syst-subty|syst-subcs|syst-group|syst-ffile|syst-uzeit|syst-dsnam|syst-repid|syst-tabid|syst-tfdsn|syst-uname|syst-lstat|syst-abcde|syst-marky|syst-sfnam|syst-tname|syst-msgli|syst-title|syst-entry|syst-lisel|syst-uline|syst-xcode|syst-cprog|syst-xprog|syst-xform|syst-ldbpg|syst-tvar0|syst-tvar1|syst-tvar2|syst-tvar3|syst-tvar4|syst-tvar5|syst-tvar6|syst-tvar7|syst-tvar8|syst-tvar9|syst-msgid|syst-msgty|syst-msgno|syst-msgv1|syst-msgv2|syst-msgv3|syst-msgv4|syst-oncom|syst-vline|syst-winsl|syst-staco|syst-staro|syst-datar|syst-host|syst-locdb|syst-locop|syst-datlo|syst-timlo|syst-zonlo)$/',
+ 'reserved' => '/^((?i)abs|acos|add|add-corresponding|adjacent|after|aliases|all|analyzer|and|any|append|as|ascending|asin|assign|assigned|assigning|at|atan|authority-check|avg|back|before|begin|binary|bit|bit-and|bit-not|bit-or|bit-xor|blank|block|break-point|buffer|by|c|call|case|catch|ceil|centered|chain|change|changing|check|checkbox|class|class-data|class-events|class-methods|class-pool|clear|client|close|cnt|code|collect|color|comment|commit|communication|compute|concatenate|condense|constants|context|contexts|continue|control|controls|convert|copy|corresponding|cos|cosh|count|country|create|currency|cursor|customer-function|data|database|dataset|delete|decimals|default|define|demand|descending|describe|dialog|distinct|div|divide|divide-corresponding|do|duplicates|dynpro|edit|editor-call|else|elseif|end|end-of-definition|end-of-page|end-of-selection|endat|endcase|endcatch|endchain|endclass|enddo|endexec|endform|endfunction|endif|endinterface|endloop|endmethod|endmodule|endon|endprovide|endselect|endwhile|entries|events|exec|exit|exit-command|exp|exponent|export|exporting|exceptions|extended|extract|fetch|field|field-groups|field-symbols|fields|floor|for|form|format|frac|frame|free|from|function|function-pool|generate|get|group|hashed|header|help-id|help-request|hide|hotspot|icon|id|if|import|importing|include|index|infotypes|initialization|inner|input|insert|intensified|interface|interface-pool|interfaces|into|inverse|join|key|language|last|leave|left|left-justified|like|line|line-count|line-selection|line-size|lines|list-processing|load|load-of-program|local|locale|log|log10|loop|m|margin|mask|matchcode|max|memory|message|message-id|messages|method|methods|min|mod|mode|modif|modify|module|move|move-corresponding|multiply|multiply-corresponding|new|new-line|new-page|next|no|no-gap|no-gaps|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unique|o|object|obligatory|occurs|of|off|on|open|or|order|others|outer|output|overlay|pack|page|parameter|parameters|perform|pf-status|position|print|print-control|private|process|program|property|protected|provide|public|put|radiobutton|raise|raising|range|ranges|read|receive|refresh|reject|replace|report|requested|reserve|reset|right-justified|rollback|round|rows|rtti|run|scan|screen|search|separated|scroll|scroll-boundary|select|select-options|selection-screen|selection-table|set|shared|shift|sign|sin|single|sinh|size|skip|sort|sorted|split|sql|sqrt|stamp|standard|start-of-selection|statics|stop|string|strlen|structure|submit|subtract|subtract-corresponding|sum|supply|suppress|symbol|syntax-check|syntax-trace|system-call|system-exceptions|table|table_line|tables|tan|tanh|text|textpool|time|times|title|titlebar|to|top-of-page|transaction|transfer|translate|transporting|trunc|type|type-pool|type-pools|types|uline|under|unique|unit|unpack|up|update|user-command|using|value|value-request|values|vary|when|where|while|window|with|with-title|work|write|x|xstring|z|zone)$/',
+ 'constants' => '/^((?i)initial|null|space|col_background|col_heading|col_normal|col_total|col_key|col_positive|col_negative|col_group)$/',
+ ),
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ 'sy' => '/^((?i)screen-name|screen-group1|screen-group2|screen-group3|screen-group4|screen-required|screen-input|screen-output|screen-intensified|screen-invisible|screen-length|screen-active|sy-index|sy-pagno|sy-tabix|sy-tfill|sy-tlopc|sy-tmaxl|sy-toccu|sy-ttabc|sy-tstis|sy-ttabi|sy-dbcnt|sy-fdpos|sy-colno|sy-linct|sy-linno|sy-linsz|sy-pagct|sy-macol|sy-marow|sy-tleng|sy-sfoff|sy-willi|sy-lilli|sy-subrc|sy-fleng|sy-cucol|sy-curow|sy-lsind|sy-listi|sy-stepl|sy-tpagi|sy-winx1|sy-winy1|sy-winx2|sy-winy2|sy-winco|sy-winro|sy-windi|sy-srows|sy-scols|sy-loopc|sy-folen|sy-fodec|sy-tzone|sy-dayst|sy-ftype|sy-appli|sy-fdayw|sy-ccurs|sy-ccurt|sy-debug|sy-ctype|sy-input|sy-langu|sy-modno|sy-batch|sy-binpt|sy-calld|sy-dynnr|sy-dyngr|sy-newpa|sy-pri40|sy-rstrt|sy-wtitl|sy-cpage|sy-dbnam|sy-mandt|sy-prefx|sy-fmkey|sy-pexpi|sy-prini|sy-primm|sy-prrel|sy-playo|sy-prbig|sy-playp|sy-prnew|sy-prlog|sy-pdest|sy-plist|sy-pauth|sy-prdsn|sy-pnwpa|sy-callr|sy-repi2|sy-rtitl|sy-prrec|sy-prtxt|sy-prabt|sy-lpass|sy-nrpag|sy-paart|sy-prcop|sy-batzs|sy-bspld|sy-brep4|sy-batzo|sy-batzd|sy-batzw|sy-batzm|sy-ctabl|sy-dbsys|sy-dcsys|sy-macdb|sy-sysid|sy-opsys|sy-pfkey|sy-saprl|sy-tcode|sy-ucomm|sy-cfwae|sy-chwae|sy-spono|sy-sponr|sy-waers|sy-cdate|sy-datum|sy-slset|sy-subty|sy-subcs|sy-group|sy-ffile|sy-uzeit|sy-dsnam|sy-repid|sy-tabid|sy-tfdsn|sy-uname|sy-lstat|sy-abcde|sy-marky|sy-sfnam|sy-tname|sy-msgli|sy-title|sy-entry|sy-lisel|sy-uline|sy-xcode|sy-cprog|sy-xprog|sy-xform|sy-ldbpg|sy-tvar0|sy-tvar1|sy-tvar2|sy-tvar3|sy-tvar4|sy-tvar5|sy-tvar6|sy-tvar7|sy-tvar8|sy-tvar9|sy-msgid|sy-msgty|sy-msgno|sy-msgv1|sy-msgv2|sy-msgv3|sy-msgv4|sy-oncom|sy-vline|sy-winsl|sy-staco|sy-staro|sy-datar|sy-host|sy-locdb|sy-locop|sy-datlo|sy-timlo|sy-zonlo|syst-index|syst-pagno|syst-tabix|syst-tfill|syst-tlopc|syst-tmaxl|syst-toccu|syst-ttabc|syst-tstis|syst-ttabi|syst-dbcnt|syst-fdpos|syst-colno|syst-linct|syst-linno|syst-linsz|syst-pagct|syst-macol|syst-marow|syst-tleng|syst-sfoff|syst-willi|syst-lilli|syst-subrc|syst-fleng|syst-cucol|syst-curow|syst-lsind|syst-listi|syst-stepl|syst-tpagi|syst-winx1|syst-winy1|syst-winx2|syst-winy2|syst-winco|syst-winro|syst-windi|syst-srows|syst-scols|syst-loopc|syst-folen|syst-fodec|syst-tzone|syst-dayst|syst-ftype|syst-appli|syst-fdayw|syst-ccurs|syst-ccurt|syst-debug|syst-ctype|syst-input|syst-langu|syst-modno|syst-batch|syst-binpt|syst-calld|syst-dynnr|syst-dyngr|syst-newpa|syst-pri40|syst-rstrt|syst-wtitl|syst-cpage|syst-dbnam|syst-mandt|syst-prefx|syst-fmkey|syst-pexpi|syst-prini|syst-primm|syst-prrel|syst-playo|syst-prbig|syst-playp|syst-prnew|syst-prlog|syst-pdest|syst-plist|syst-pauth|syst-prdsn|syst-pnwpa|syst-callr|syst-repi2|syst-rtitl|syst-prrec|syst-prtxt|syst-prabt|syst-lpass|syst-nrpag|syst-paart|syst-prcop|syst-batzs|syst-bspld|syst-brep4|syst-batzo|syst-batzd|syst-batzw|syst-batzm|syst-ctabl|syst-dbsys|syst-dcsys|syst-macdb|syst-sysid|syst-opsys|syst-pfkey|syst-saprl|syst-tcode|syst-ucomm|syst-cfwae|syst-chwae|syst-spono|syst-sponr|syst-waers|syst-cdate|syst-datum|syst-slset|syst-subty|syst-subcs|syst-group|syst-ffile|syst-uzeit|syst-dsnam|syst-repid|syst-tabid|syst-tfdsn|syst-uname|syst-lstat|syst-abcde|syst-marky|syst-sfnam|syst-tname|syst-msgli|syst-title|syst-entry|syst-lisel|syst-uline|syst-xcode|syst-cprog|syst-xprog|syst-xform|syst-ldbpg|syst-tvar0|syst-tvar1|syst-tvar2|syst-tvar3|syst-tvar4|syst-tvar5|syst-tvar6|syst-tvar7|syst-tvar8|syst-tvar9|syst-msgid|syst-msgty|syst-msgno|syst-msgv1|syst-msgv2|syst-msgv3|syst-msgv4|syst-oncom|syst-vline|syst-winsl|syst-staco|syst-staro|syst-datar|syst-host|syst-locdb|syst-locop|syst-datlo|syst-timlo|syst-zonlo)$/',
+ 'reserved' => '/^((?i)abs|acos|add|add-corresponding|adjacent|after|aliases|all|analyzer|and|any|append|as|ascending|asin|assign|assigned|assigning|at|atan|authority-check|avg|back|before|begin|binary|bit|bit-and|bit-not|bit-or|bit-xor|blank|block|break-point|buffer|by|c|call|case|catch|ceil|centered|chain|change|changing|check|checkbox|class|class-data|class-events|class-methods|class-pool|clear|client|close|cnt|code|collect|color|comment|commit|communication|compute|concatenate|condense|constants|context|contexts|continue|control|controls|convert|copy|corresponding|cos|cosh|count|country|create|currency|cursor|customer-function|data|database|dataset|delete|decimals|default|define|demand|descending|describe|dialog|distinct|div|divide|divide-corresponding|do|duplicates|dynpro|edit|editor-call|else|elseif|end|end-of-definition|end-of-page|end-of-selection|endat|endcase|endcatch|endchain|endclass|enddo|endexec|endform|endfunction|endif|endinterface|endloop|endmethod|endmodule|endon|endprovide|endselect|endwhile|entries|events|exec|exit|exit-command|exp|exponent|export|exporting|exceptions|extended|extract|fetch|field|field-groups|field-symbols|fields|floor|for|form|format|frac|frame|free|from|function|function-pool|generate|get|group|hashed|header|help-id|help-request|hide|hotspot|icon|id|if|import|importing|include|index|infotypes|initialization|inner|input|insert|intensified|interface|interface-pool|interfaces|into|inverse|join|key|language|last|leave|left|left-justified|like|line|line-count|line-selection|line-size|lines|list-processing|load|load-of-program|local|locale|log|log10|loop|m|margin|mask|matchcode|max|memory|message|message-id|messages|method|methods|min|mod|mode|modif|modify|module|move|move-corresponding|multiply|multiply-corresponding|new|new-line|new-page|next|no|no-gap|no-gaps|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unique|o|object|obligatory|occurs|of|off|on|open|or|order|others|outer|output|overlay|pack|page|parameter|parameters|perform|pf-status|position|print|print-control|private|process|program|property|protected|provide|public|put|radiobutton|raise|raising|range|ranges|read|receive|refresh|reject|replace|report|requested|reserve|reset|right-justified|rollback|round|rows|rtti|run|scan|screen|search|separated|scroll|scroll-boundary|select|select-options|selection-screen|selection-table|set|shared|shift|sign|sin|single|sinh|size|skip|sort|sorted|split|sql|sqrt|stamp|standard|start-of-selection|statics|stop|string|strlen|structure|submit|subtract|subtract-corresponding|sum|supply|suppress|symbol|syntax-check|syntax-trace|system-call|system-exceptions|table|table_line|tables|tan|tanh|text|textpool|time|times|title|titlebar|to|top-of-page|transaction|transfer|translate|transporting|trunc|type|type-pool|type-pools|types|uline|under|unique|unit|unpack|up|update|user-command|using|value|value-request|values|vary|when|where|while|window|with|with-title|work|write|x|xstring|z|zone)$/',
+ 'constants' => '/^((?i)initial|null|space|col_background|col_heading|col_normal|col_total|col_key|col_positive|col_negative|col_group)$/',
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ 'sy' => '/^((?i)screen-name|screen-group1|screen-group2|screen-group3|screen-group4|screen-required|screen-input|screen-output|screen-intensified|screen-invisible|screen-length|screen-active|sy-index|sy-pagno|sy-tabix|sy-tfill|sy-tlopc|sy-tmaxl|sy-toccu|sy-ttabc|sy-tstis|sy-ttabi|sy-dbcnt|sy-fdpos|sy-colno|sy-linct|sy-linno|sy-linsz|sy-pagct|sy-macol|sy-marow|sy-tleng|sy-sfoff|sy-willi|sy-lilli|sy-subrc|sy-fleng|sy-cucol|sy-curow|sy-lsind|sy-listi|sy-stepl|sy-tpagi|sy-winx1|sy-winy1|sy-winx2|sy-winy2|sy-winco|sy-winro|sy-windi|sy-srows|sy-scols|sy-loopc|sy-folen|sy-fodec|sy-tzone|sy-dayst|sy-ftype|sy-appli|sy-fdayw|sy-ccurs|sy-ccurt|sy-debug|sy-ctype|sy-input|sy-langu|sy-modno|sy-batch|sy-binpt|sy-calld|sy-dynnr|sy-dyngr|sy-newpa|sy-pri40|sy-rstrt|sy-wtitl|sy-cpage|sy-dbnam|sy-mandt|sy-prefx|sy-fmkey|sy-pexpi|sy-prini|sy-primm|sy-prrel|sy-playo|sy-prbig|sy-playp|sy-prnew|sy-prlog|sy-pdest|sy-plist|sy-pauth|sy-prdsn|sy-pnwpa|sy-callr|sy-repi2|sy-rtitl|sy-prrec|sy-prtxt|sy-prabt|sy-lpass|sy-nrpag|sy-paart|sy-prcop|sy-batzs|sy-bspld|sy-brep4|sy-batzo|sy-batzd|sy-batzw|sy-batzm|sy-ctabl|sy-dbsys|sy-dcsys|sy-macdb|sy-sysid|sy-opsys|sy-pfkey|sy-saprl|sy-tcode|sy-ucomm|sy-cfwae|sy-chwae|sy-spono|sy-sponr|sy-waers|sy-cdate|sy-datum|sy-slset|sy-subty|sy-subcs|sy-group|sy-ffile|sy-uzeit|sy-dsnam|sy-repid|sy-tabid|sy-tfdsn|sy-uname|sy-lstat|sy-abcde|sy-marky|sy-sfnam|sy-tname|sy-msgli|sy-title|sy-entry|sy-lisel|sy-uline|sy-xcode|sy-cprog|sy-xprog|sy-xform|sy-ldbpg|sy-tvar0|sy-tvar1|sy-tvar2|sy-tvar3|sy-tvar4|sy-tvar5|sy-tvar6|sy-tvar7|sy-tvar8|sy-tvar9|sy-msgid|sy-msgty|sy-msgno|sy-msgv1|sy-msgv2|sy-msgv3|sy-msgv4|sy-oncom|sy-vline|sy-winsl|sy-staco|sy-staro|sy-datar|sy-host|sy-locdb|sy-locop|sy-datlo|sy-timlo|sy-zonlo|syst-index|syst-pagno|syst-tabix|syst-tfill|syst-tlopc|syst-tmaxl|syst-toccu|syst-ttabc|syst-tstis|syst-ttabi|syst-dbcnt|syst-fdpos|syst-colno|syst-linct|syst-linno|syst-linsz|syst-pagct|syst-macol|syst-marow|syst-tleng|syst-sfoff|syst-willi|syst-lilli|syst-subrc|syst-fleng|syst-cucol|syst-curow|syst-lsind|syst-listi|syst-stepl|syst-tpagi|syst-winx1|syst-winy1|syst-winx2|syst-winy2|syst-winco|syst-winro|syst-windi|syst-srows|syst-scols|syst-loopc|syst-folen|syst-fodec|syst-tzone|syst-dayst|syst-ftype|syst-appli|syst-fdayw|syst-ccurs|syst-ccurt|syst-debug|syst-ctype|syst-input|syst-langu|syst-modno|syst-batch|syst-binpt|syst-calld|syst-dynnr|syst-dyngr|syst-newpa|syst-pri40|syst-rstrt|syst-wtitl|syst-cpage|syst-dbnam|syst-mandt|syst-prefx|syst-fmkey|syst-pexpi|syst-prini|syst-primm|syst-prrel|syst-playo|syst-prbig|syst-playp|syst-prnew|syst-prlog|syst-pdest|syst-plist|syst-pauth|syst-prdsn|syst-pnwpa|syst-callr|syst-repi2|syst-rtitl|syst-prrec|syst-prtxt|syst-prabt|syst-lpass|syst-nrpag|syst-paart|syst-prcop|syst-batzs|syst-bspld|syst-brep4|syst-batzo|syst-batzd|syst-batzw|syst-batzm|syst-ctabl|syst-dbsys|syst-dcsys|syst-macdb|syst-sysid|syst-opsys|syst-pfkey|syst-saprl|syst-tcode|syst-ucomm|syst-cfwae|syst-chwae|syst-spono|syst-sponr|syst-waers|syst-cdate|syst-datum|syst-slset|syst-subty|syst-subcs|syst-group|syst-ffile|syst-uzeit|syst-dsnam|syst-repid|syst-tabid|syst-tfdsn|syst-uname|syst-lstat|syst-abcde|syst-marky|syst-sfnam|syst-tname|syst-msgli|syst-title|syst-entry|syst-lisel|syst-uline|syst-xcode|syst-cprog|syst-xprog|syst-xform|syst-ldbpg|syst-tvar0|syst-tvar1|syst-tvar2|syst-tvar3|syst-tvar4|syst-tvar5|syst-tvar6|syst-tvar7|syst-tvar8|syst-tvar9|syst-msgid|syst-msgty|syst-msgno|syst-msgv1|syst-msgv2|syst-msgv3|syst-msgv4|syst-oncom|syst-vline|syst-winsl|syst-staco|syst-staro|syst-datar|syst-host|syst-locdb|syst-locop|syst-datlo|syst-timlo|syst-zonlo)$/',
+ 'reserved' => '/^((?i)abs|acos|add|add-corresponding|adjacent|after|aliases|all|analyzer|and|any|append|as|ascending|asin|assign|assigned|assigning|at|atan|authority-check|avg|back|before|begin|binary|bit|bit-and|bit-not|bit-or|bit-xor|blank|block|break-point|buffer|by|c|call|case|catch|ceil|centered|chain|change|changing|check|checkbox|class|class-data|class-events|class-methods|class-pool|clear|client|close|cnt|code|collect|color|comment|commit|communication|compute|concatenate|condense|constants|context|contexts|continue|control|controls|convert|copy|corresponding|cos|cosh|count|country|create|currency|cursor|customer-function|data|database|dataset|delete|decimals|default|define|demand|descending|describe|dialog|distinct|div|divide|divide-corresponding|do|duplicates|dynpro|edit|editor-call|else|elseif|end|end-of-definition|end-of-page|end-of-selection|endat|endcase|endcatch|endchain|endclass|enddo|endexec|endform|endfunction|endif|endinterface|endloop|endmethod|endmodule|endon|endprovide|endselect|endwhile|entries|events|exec|exit|exit-command|exp|exponent|export|exporting|exceptions|extended|extract|fetch|field|field-groups|field-symbols|fields|floor|for|form|format|frac|frame|free|from|function|function-pool|generate|get|group|hashed|header|help-id|help-request|hide|hotspot|icon|id|if|import|importing|include|index|infotypes|initialization|inner|input|insert|intensified|interface|interface-pool|interfaces|into|inverse|join|key|language|last|leave|left|left-justified|like|line|line-count|line-selection|line-size|lines|list-processing|load|load-of-program|local|locale|log|log10|loop|m|margin|mask|matchcode|max|memory|message|message-id|messages|method|methods|min|mod|mode|modif|modify|module|move|move-corresponding|multiply|multiply-corresponding|new|new-line|new-page|next|no|no-gap|no-gaps|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unique|o|object|obligatory|occurs|of|off|on|open|or|order|others|outer|output|overlay|pack|page|parameter|parameters|perform|pf-status|position|print|print-control|private|process|program|property|protected|provide|public|put|radiobutton|raise|raising|range|ranges|read|receive|refresh|reject|replace|report|requested|reserve|reset|right-justified|rollback|round|rows|rtti|run|scan|screen|search|separated|scroll|scroll-boundary|select|select-options|selection-screen|selection-table|set|shared|shift|sign|sin|single|sinh|size|skip|sort|sorted|split|sql|sqrt|stamp|standard|start-of-selection|statics|stop|string|strlen|structure|submit|subtract|subtract-corresponding|sum|supply|suppress|symbol|syntax-check|syntax-trace|system-call|system-exceptions|table|table_line|tables|tan|tanh|text|textpool|time|times|title|titlebar|to|top-of-page|transaction|transfer|translate|transporting|trunc|type|type-pool|type-pools|types|uline|under|unique|unit|unpack|up|update|user-command|using|value|value-request|values|vary|when|where|while|window|with|with-title|work|write|x|xstring|z|zone)$/',
+ 'constants' => '/^((?i)initial|null|space|col_background|col_heading|col_normal|col_total|col_key|col_positive|col_negative|col_group)$/',
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ 'sy' => '/^((?i)screen-name|screen-group1|screen-group2|screen-group3|screen-group4|screen-required|screen-input|screen-output|screen-intensified|screen-invisible|screen-length|screen-active|sy-index|sy-pagno|sy-tabix|sy-tfill|sy-tlopc|sy-tmaxl|sy-toccu|sy-ttabc|sy-tstis|sy-ttabi|sy-dbcnt|sy-fdpos|sy-colno|sy-linct|sy-linno|sy-linsz|sy-pagct|sy-macol|sy-marow|sy-tleng|sy-sfoff|sy-willi|sy-lilli|sy-subrc|sy-fleng|sy-cucol|sy-curow|sy-lsind|sy-listi|sy-stepl|sy-tpagi|sy-winx1|sy-winy1|sy-winx2|sy-winy2|sy-winco|sy-winro|sy-windi|sy-srows|sy-scols|sy-loopc|sy-folen|sy-fodec|sy-tzone|sy-dayst|sy-ftype|sy-appli|sy-fdayw|sy-ccurs|sy-ccurt|sy-debug|sy-ctype|sy-input|sy-langu|sy-modno|sy-batch|sy-binpt|sy-calld|sy-dynnr|sy-dyngr|sy-newpa|sy-pri40|sy-rstrt|sy-wtitl|sy-cpage|sy-dbnam|sy-mandt|sy-prefx|sy-fmkey|sy-pexpi|sy-prini|sy-primm|sy-prrel|sy-playo|sy-prbig|sy-playp|sy-prnew|sy-prlog|sy-pdest|sy-plist|sy-pauth|sy-prdsn|sy-pnwpa|sy-callr|sy-repi2|sy-rtitl|sy-prrec|sy-prtxt|sy-prabt|sy-lpass|sy-nrpag|sy-paart|sy-prcop|sy-batzs|sy-bspld|sy-brep4|sy-batzo|sy-batzd|sy-batzw|sy-batzm|sy-ctabl|sy-dbsys|sy-dcsys|sy-macdb|sy-sysid|sy-opsys|sy-pfkey|sy-saprl|sy-tcode|sy-ucomm|sy-cfwae|sy-chwae|sy-spono|sy-sponr|sy-waers|sy-cdate|sy-datum|sy-slset|sy-subty|sy-subcs|sy-group|sy-ffile|sy-uzeit|sy-dsnam|sy-repid|sy-tabid|sy-tfdsn|sy-uname|sy-lstat|sy-abcde|sy-marky|sy-sfnam|sy-tname|sy-msgli|sy-title|sy-entry|sy-lisel|sy-uline|sy-xcode|sy-cprog|sy-xprog|sy-xform|sy-ldbpg|sy-tvar0|sy-tvar1|sy-tvar2|sy-tvar3|sy-tvar4|sy-tvar5|sy-tvar6|sy-tvar7|sy-tvar8|sy-tvar9|sy-msgid|sy-msgty|sy-msgno|sy-msgv1|sy-msgv2|sy-msgv3|sy-msgv4|sy-oncom|sy-vline|sy-winsl|sy-staco|sy-staro|sy-datar|sy-host|sy-locdb|sy-locop|sy-datlo|sy-timlo|sy-zonlo|syst-index|syst-pagno|syst-tabix|syst-tfill|syst-tlopc|syst-tmaxl|syst-toccu|syst-ttabc|syst-tstis|syst-ttabi|syst-dbcnt|syst-fdpos|syst-colno|syst-linct|syst-linno|syst-linsz|syst-pagct|syst-macol|syst-marow|syst-tleng|syst-sfoff|syst-willi|syst-lilli|syst-subrc|syst-fleng|syst-cucol|syst-curow|syst-lsind|syst-listi|syst-stepl|syst-tpagi|syst-winx1|syst-winy1|syst-winx2|syst-winy2|syst-winco|syst-winro|syst-windi|syst-srows|syst-scols|syst-loopc|syst-folen|syst-fodec|syst-tzone|syst-dayst|syst-ftype|syst-appli|syst-fdayw|syst-ccurs|syst-ccurt|syst-debug|syst-ctype|syst-input|syst-langu|syst-modno|syst-batch|syst-binpt|syst-calld|syst-dynnr|syst-dyngr|syst-newpa|syst-pri40|syst-rstrt|syst-wtitl|syst-cpage|syst-dbnam|syst-mandt|syst-prefx|syst-fmkey|syst-pexpi|syst-prini|syst-primm|syst-prrel|syst-playo|syst-prbig|syst-playp|syst-prnew|syst-prlog|syst-pdest|syst-plist|syst-pauth|syst-prdsn|syst-pnwpa|syst-callr|syst-repi2|syst-rtitl|syst-prrec|syst-prtxt|syst-prabt|syst-lpass|syst-nrpag|syst-paart|syst-prcop|syst-batzs|syst-bspld|syst-brep4|syst-batzo|syst-batzd|syst-batzw|syst-batzm|syst-ctabl|syst-dbsys|syst-dcsys|syst-macdb|syst-sysid|syst-opsys|syst-pfkey|syst-saprl|syst-tcode|syst-ucomm|syst-cfwae|syst-chwae|syst-spono|syst-sponr|syst-waers|syst-cdate|syst-datum|syst-slset|syst-subty|syst-subcs|syst-group|syst-ffile|syst-uzeit|syst-dsnam|syst-repid|syst-tabid|syst-tfdsn|syst-uname|syst-lstat|syst-abcde|syst-marky|syst-sfnam|syst-tname|syst-msgli|syst-title|syst-entry|syst-lisel|syst-uline|syst-xcode|syst-cprog|syst-xprog|syst-xform|syst-ldbpg|syst-tvar0|syst-tvar1|syst-tvar2|syst-tvar3|syst-tvar4|syst-tvar5|syst-tvar6|syst-tvar7|syst-tvar8|syst-tvar9|syst-msgid|syst-msgty|syst-msgno|syst-msgv1|syst-msgv2|syst-msgv3|syst-msgv4|syst-oncom|syst-vline|syst-winsl|syst-staco|syst-staro|syst-datar|syst-host|syst-locdb|syst-locop|syst-datlo|syst-timlo|syst-zonlo)$/',
+ 'reserved' => '/^((?i)abs|acos|add|add-corresponding|adjacent|after|aliases|all|analyzer|and|any|append|as|ascending|asin|assign|assigned|assigning|at|atan|authority-check|avg|back|before|begin|binary|bit|bit-and|bit-not|bit-or|bit-xor|blank|block|break-point|buffer|by|c|call|case|catch|ceil|centered|chain|change|changing|check|checkbox|class|class-data|class-events|class-methods|class-pool|clear|client|close|cnt|code|collect|color|comment|commit|communication|compute|concatenate|condense|constants|context|contexts|continue|control|controls|convert|copy|corresponding|cos|cosh|count|country|create|currency|cursor|customer-function|data|database|dataset|delete|decimals|default|define|demand|descending|describe|dialog|distinct|div|divide|divide-corresponding|do|duplicates|dynpro|edit|editor-call|else|elseif|end|end-of-definition|end-of-page|end-of-selection|endat|endcase|endcatch|endchain|endclass|enddo|endexec|endform|endfunction|endif|endinterface|endloop|endmethod|endmodule|endon|endprovide|endselect|endwhile|entries|events|exec|exit|exit-command|exp|exponent|export|exporting|exceptions|extended|extract|fetch|field|field-groups|field-symbols|fields|floor|for|form|format|frac|frame|free|from|function|function-pool|generate|get|group|hashed|header|help-id|help-request|hide|hotspot|icon|id|if|import|importing|include|index|infotypes|initialization|inner|input|insert|intensified|interface|interface-pool|interfaces|into|inverse|join|key|language|last|leave|left|left-justified|like|line|line-count|line-selection|line-size|lines|list-processing|load|load-of-program|local|locale|log|log10|loop|m|margin|mask|matchcode|max|memory|message|message-id|messages|method|methods|min|mod|mode|modif|modify|module|move|move-corresponding|multiply|multiply-corresponding|new|new-line|new-page|next|no|no-gap|no-gaps|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unique|o|object|obligatory|occurs|of|off|on|open|or|order|others|outer|output|overlay|pack|page|parameter|parameters|perform|pf-status|position|print|print-control|private|process|program|property|protected|provide|public|put|radiobutton|raise|raising|range|ranges|read|receive|refresh|reject|replace|report|requested|reserve|reset|right-justified|rollback|round|rows|rtti|run|scan|screen|search|separated|scroll|scroll-boundary|select|select-options|selection-screen|selection-table|set|shared|shift|sign|sin|single|sinh|size|skip|sort|sorted|split|sql|sqrt|stamp|standard|start-of-selection|statics|stop|string|strlen|structure|submit|subtract|subtract-corresponding|sum|supply|suppress|symbol|syntax-check|syntax-trace|system-call|system-exceptions|table|table_line|tables|tan|tanh|text|textpool|time|times|title|titlebar|to|top-of-page|transaction|transfer|translate|transporting|trunc|type|type-pool|type-pools|types|uline|under|unique|unit|unpack|up|update|user-command|using|value|value-request|values|vary|when|where|while|window|with|with-title|work|write|x|xstring|z|zone)$/',
+ 'constants' => '/^((?i)initial|null|space|col_background|col_heading|col_normal|col_total|col_key|col_positive|col_negative|col_group)$/',
+ ),
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'sy' => 'reserved',
+ 'reserved' => 'reserved',
+ 'constants' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/AVRC.php b/library/Text_Highlighter/Text/Highlighter/AVRC.php
new file mode 100644
index 000000000..de4b82ccd
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/AVRC.php
@@ -0,0 +1,894 @@
+
+<?php
+/**
+ * Auto-generated class. AVRC syntax highlighting
+ *
+ *
+ * C/C++ highlighter specific to Atmel AVR microcontrollers
+ *
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: avrc.xml
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. AVRC syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_AVRC extends Text_Highlighter
+{
+ var $_language = 'avrc';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_AVRC($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 0 => '/((?i)\\\\)/',
+ 1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 3 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 4 => '//',
+ 5 => '/((?i)")|((?i)<)/',
+ 6 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 7 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ 8 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 2,
+ 8 => 0,
+ 9 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ ),
+ 6 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => 'special',
+ ),
+ 1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ ),
+ 6 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'identifier',
+ 4 => 'number',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ 8 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)"/',
+ 1 => '/(?i)\\}/',
+ 2 => '/(?i)\\)/',
+ 3 => '/(?i)\\]/',
+ 4 => '/(?i)>/',
+ 5 => '/(?mi)(?<!\\\\)$/',
+ 6 => '/(?mi)(?<!\\\\)$/',
+ 7 => '/(?i)\\*\\//',
+ 8 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 4,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => 7,
+ 9 => 8,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 0 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 => -1,
+ 9 => -1,
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => 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,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ ),
+ 1 =>
+ array (
+ 0 => 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,
+ ),
+ 2 =>
+ array (
+ 0 => 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,
+ ),
+ 3 =>
+ array (
+ 0 => 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,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ 1 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'registers' => 'reserved',
+ 'types' => 'types',
+ 'Common Macros' => 'prepro',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/CPP.php b/library/Text_Highlighter/Text/Highlighter/CPP.php
new file mode 100644
index 000000000..eaa47c575
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/CPP.php
@@ -0,0 +1,891 @@
+
+<?php
+/**
+ * Auto-generated class. CPP syntax highlighting
+ *
+ *
+ * Thanks to Aaron Kalin for initial
+ * implementation of this highlighter
+ *
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: cpp.xml
+ * @author Aaron Kalin
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. CPP syntax highlighting
+ *
+ * @author Aaron Kalin
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_CPP extends Text_Highlighter
+{
+ var $_language = 'cpp';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_CPP($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 0 => '/((?i)\\\\)/',
+ 1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 3 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 4 => '//',
+ 5 => '/((?i)")|((?i)<)/',
+ 6 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 7 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ 8 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 2,
+ 8 => 0,
+ 9 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ ),
+ 6 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => 'special',
+ ),
+ 1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ ),
+ 6 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'identifier',
+ 4 => 'number',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ 8 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)"/',
+ 1 => '/(?i)\\}/',
+ 2 => '/(?i)\\)/',
+ 3 => '/(?i)\\]/',
+ 4 => '/(?i)>/',
+ 5 => '/(?mi)(?<!\\\\)$/',
+ 6 => '/(?mi)(?<!\\\\)$/',
+ 7 => '/(?i)\\*\\//',
+ 8 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 4,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => 7,
+ 9 => 8,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 0 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 => -1,
+ 9 => -1,
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => 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,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ ),
+ 1 =>
+ array (
+ 0 => 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,
+ ),
+ 2 =>
+ array (
+ 0 => 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,
+ ),
+ 3 =>
+ array (
+ 0 => 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,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ 1 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'types' => 'types',
+ 'Common Macros' => 'prepro',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/CSS.php b/library/Text_Highlighter/Text/Highlighter/CSS.php
new file mode 100644
index 000000000..51757c88e
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/CSS.php
@@ -0,0 +1,437 @@
+<?php
+/**
+ * Auto-generated class. CSS syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: css.xml
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. CSS syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_CSS extends Text_Highlighter
+{
+ var $_language = 'css';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_CSS($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\/\\*)|((?i)(@[a-z\\d]+))|((?i)(((\\.|#)?[a-z]+[a-z\\d\\-]*(?![a-z\\d\\-]))|(\\*))(?!\\s*:\\s*[\\s\\{]))|((?i):[a-z][a-z\\d\\-]*)|((?i)\\[)|((?i)\\{)/',
+ 0 => '//',
+ 1 => '/((?i)\\d*\\.?\\d+(\\%|em|ex|pc|pt|px|in|mm|cm))|((?i)\\d*\\.?\\d+)|((?i)[a-z][a-z\\d\\-]*)|((?i)#([\\da-f]{6}|[\\da-f]{3})\\b)/',
+ 2 => '/((?i)\')|((?i)")|((?i)[\\w\\-\\:]+)/',
+ 3 => '/((?i)\\/\\*)|((?i)[a-z][a-z\\d\\-]*\\s*:)|((?i)(((\\.|#)?[a-z]+[a-z\\d\\-]*(?![a-z\\d\\-]))|(\\*))(?!\\s*:\\s*[\\s\\{]))|((?i)\\{)/',
+ 4 => '/((?i)\\\\[\\\\(\\\\)\\\\])/',
+ 5 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 6 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`|\\\\t|\\\\n|\\\\r)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 4,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 1,
+ 1 => 0,
+ 2 => 0,
+ 3 => 1,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 4,
+ 3 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => 'brackets',
+ 5 => 'brackets',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ 2 => '',
+ ),
+ 3 =>
+ array (
+ 0 => 'comment',
+ 1 => 'reserved',
+ 2 => '',
+ 3 => 'brackets',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'var',
+ 2 => 'identifier',
+ 3 => 'special',
+ 4 => 'code',
+ 5 => 'code',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'number',
+ 1 => 'number',
+ 2 => 'code',
+ 3 => 'var',
+ ),
+ 2 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ 2 => 'var',
+ ),
+ 3 =>
+ array (
+ 0 => 'comment',
+ 1 => 'code',
+ 2 => 'identifier',
+ 3 => 'code',
+ ),
+ 4 =>
+ array (
+ 0 => 'string',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ ),
+ 6 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\*\\//',
+ 1 => '/(?i)(?=;|\\})/',
+ 2 => '/(?i)\\]/',
+ 3 => '/(?i)\\}/',
+ 4 => '/(?i)\\)/',
+ 5 => '/(?i)\'/',
+ 6 => '/(?i)"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => 2,
+ 5 => 3,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 5,
+ 1 => 6,
+ 2 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ 3 => 3,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 => -1,
+ 5 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 'propertyValue' => '/^((?i)far-left|left|center-left|center-right|center|far-right|right-side|right|behind|leftwards|rightwards|inherit|scroll|fixed|transparent|none|repeat-x|repeat-y|repeat|no-repeat|collapse|separate|auto|top|bottom|both|open-quote|close-quote|no-open-quote|no-close-quote|crosshair|default|pointer|move|e-resize|ne-resize|nw-resize|n-resize|se-resize|sw-resize|s-resize|text|wait|help|ltr|rtl|inline|block|list-item|run-in|compact|marker|table|inline-table|table-row-group|table-header-group|table-footer-group|table-row|table-column-group|table-column|table-cell|table-caption|below|level|above|higher|lower|show|hide|caption|icon|menu|message-box|small-caption|status-bar|normal|wider|narrower|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|italic|oblique|small-caps|bold|bolder|lighter|inside|outside|disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman|lower-greek|lower-alpha|lower-latin|upper-alpha|upper-latin|hebrew|armenian|georgian|cjk-ideographic|hiragana|katakana|hiragana-iroha|katakana-iroha|crop|cross|invert|visible|hidden|always|avoid|x-low|low|medium|high|x-high|mix?|repeat?|static|relative|absolute|portrait|landscape|spell-out|once|digits|continuous|code|x-slow|slow|fast|x-fast|faster|slower|justify|underline|overline|line-through|blink|capitalize|uppercase|lowercase|embed|bidi-override|baseline|sub|super|text-top|middle|text-bottom|silent|x-soft|soft|loud|x-loud|pre|nowrap|serif|sans-serif|cursive|fantasy|monospace|empty|string|strict|loose|char|true|false|dotted|dashed|solid|double|groove|ridge|inset|outset|larger|smaller|xx-small|x-small|small|large|x-large|xx-large|all|newspaper|distribute|distribute-all-lines|distribute-center-last|inter-word|inter-ideograph|inter-cluster|kashida|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|keep-all|break-all|break-word|lr-tb|tb-rl|thin|thick|inline-block|w-resize|hand|distribute-letter|distribute-space|whitespace|male|female|child)$/',
+ 'namedcolor' => '/^((?i)aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow|activeborder|activecaption|appworkspace|background|buttonface|buttonhighlight|buttonshadow|buttontext|captiontext|graytext|highlight|highlighttext|inactiveborder|inactivecaption|inactivecaptiontext|infobackground|infotext|menu|menutext|scrollbar|threeddarkshadow|threedface|threedhighlight|threedlightshadow|threedshadow|window|windowframe|windowtext)$/',
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 => -1,
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'propertyValue' => 'string',
+ 'namedcolor' => 'var',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+}
diff --git a/library/Text_Highlighter/Text/Highlighter/DIFF.php b/library/Text_Highlighter/Text/Highlighter/DIFF.php
new file mode 100644
index 000000000..2bb25a453
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/DIFF.php
@@ -0,0 +1,384 @@
+<?php
+/**
+ * Auto-generated class. DIFF syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : diff.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. DIFF syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_DIFF extends Text_Highlighter
+{
+ var $_language = 'diff';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_DIFF($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?m)^\\\\\\sNo\\snewline.+$)|((?m)^\\-\\-\\-$)|((?m)^(diff\\s+\\-|Only\\s+|Index).*$)|((?m)^(\\-\\-\\-|\\+\\+\\+)\\s.+$)|((?m)^\\*.*$)|((?m)^\\+.*$)|((?m)^!.*$)|((?m)^\\<\\s.*$)|((?m)^\\>\\s.*$)|((?m)^\\d+(\\,\\d+)?[acd]\\d+(,\\d+)?$)|((?m)^\\-.*$)|((?m)^\\+.*$)|((?m)^@@.+@@$)|((?m)^d\\d+\\s\\d+$)|((?m)^a\\d+\\s\\d+$)|((?m)^(\\d+)(,\\d+)?(a)$)|((?m)^(\\d+)(,\\d+)?(c)$)|((?m)^(\\d+)(,\\d+)?(d)$)|((?m)^a(\\d+)(\\s\\d+)?$)|((?m)^c(\\d+)(\\s\\d+)?$)|((?m)^d(\\d+)(\\s\\d+)?$)/',
+ 0 => '//',
+ 1 => '//',
+ 2 => '//',
+ 3 => '//',
+ 4 => '//',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 1,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 2,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 3,
+ 16 => 3,
+ 17 => 3,
+ 18 => 2,
+ 19 => 2,
+ 20 => 2,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => 'code',
+ 15 => 'code',
+ 16 => 'code',
+ 17 => '',
+ 18 => 'code',
+ 19 => 'code',
+ 20 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'special',
+ 1 => 'code',
+ 2 => 'var',
+ 3 => 'reserved',
+ 4 => 'quotes',
+ 5 => 'string',
+ 6 => 'inlinedoc',
+ 7 => 'quotes',
+ 8 => 'string',
+ 9 => 'code',
+ 10 => 'quotes',
+ 11 => 'string',
+ 12 => 'code',
+ 13 => 'code',
+ 14 => 'var',
+ 15 => 'string',
+ 16 => 'inlinedoc',
+ 17 => 'code',
+ 18 => 'string',
+ 19 => 'inlinedoc',
+ 20 => 'code',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?m)(?=^[ad]\\d+\\s\\d+)/',
+ 1 => '/(?m)^(\\.)$/',
+ 2 => '/(?m)^(\\.)$/',
+ 3 => '/(?m)^(\\.)$/',
+ 4 => '/(?m)^(\\.)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => 0,
+ 15 => 1,
+ 16 => 2,
+ 17 => -1,
+ 18 => 3,
+ 19 => 4,
+ 20 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 =>
+ array (
+ ),
+ 18 => -1,
+ 19 => -1,
+ 20 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => 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,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ );
+ $this->_defClass = 'default';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/DTD.php b/library/Text_Highlighter/Text/Highlighter/DTD.php
new file mode 100644
index 000000000..41b0faa78
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/DTD.php
@@ -0,0 +1,426 @@
+<?php
+/**
+ * Auto-generated class. DTD syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : dtd.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. DTD syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_DTD extends Text_Highlighter
+{
+ var $_language = 'dtd';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_DTD($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/(\\<!--)|(\\<\\!\\[)|((\\&|\\%)[\\w\\-\\.]+;)/',
+ 0 => '//',
+ 1 => '/(\\<!--)|(\\<)|(#PCDATA\\b)|((\\&|\\%)[\\w\\-\\.]+;)|((?i)[a-z][a-z\\d\\-\\,:]+)/',
+ 2 => '/(\\<!--)|(\\()|(\')|(")|((?<=\\<)!(ENTITY|ATTLIST|ELEMENT|NOTATION)\\b)|(\\s(#(IMPLIED|REQUIRED|FIXED))|CDATA|ENTITY|NOTATION|NMTOKENS?|PUBLIC|SYSTEM\\b)|(#PCDATA\\b)|((\\&|\\%)[\\w\\-\\.]+;)|((?i)[a-z][a-z\\d\\-\\,:]+)/',
+ 3 => '/(\\()|((\\&|\\%)[\\w\\-\\.]+;)|((?i)[a-z][a-z\\d\\-\\,:]+)/',
+ 4 => '/((\\&|\\%)[\\w\\-\\.]+;)/',
+ 5 => '/((\\&|\\%)[\\w\\-\\.]+;)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 1,
+ 4 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 1,
+ 5 => 2,
+ 6 => 0,
+ 7 => 1,
+ 8 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 1,
+ ),
+ 5 =>
+ array (
+ 0 => 1,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'brackets',
+ 2 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'brackets',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'comment',
+ 1 => 'brackets',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ ),
+ 3 =>
+ array (
+ 0 => 'brackets',
+ 1 => '',
+ 2 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'code',
+ 2 => 'special',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'code',
+ 2 => 'reserved',
+ 3 => 'special',
+ 4 => 'identifier',
+ ),
+ 2 =>
+ array (
+ 0 => 'comment',
+ 1 => 'code',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'var',
+ 5 => 'reserved',
+ 6 => 'reserved',
+ 7 => 'special',
+ 8 => 'identifier',
+ ),
+ 3 =>
+ array (
+ 0 => 'code',
+ 1 => 'special',
+ 2 => 'identifier',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/--\\>/',
+ 1 => '/\\]\\]\\>/',
+ 2 => '/\\>/',
+ 3 => '/\\)/',
+ 4 => '/\'/',
+ 5 => '/"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 2,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 3,
+ 2 => 4,
+ 3 => 5,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => 3,
+ 1 => -1,
+ 2 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/Generator.php b/library/Text_Highlighter/Text/Highlighter/Generator.php
new file mode 100644
index 000000000..39c4edccb
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Generator.php
@@ -0,0 +1,1291 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+* Syntax highlighter class generator
+*
+* To simplify the process of creating new syntax highlighters
+* for different languages, {@link Text_Highlighter_Generator} class is
+* provided. It takes highlighting rules from XML file and generates
+* a code of a class inherited from {@link Text_Highlighter}.
+*
+* PHP versions 4 and 5
+*
+* LICENSE: This source file is subject to version 3.0 of the PHP license
+* that is available through the world-wide-web at the following URI:
+* 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 web, please
+* send a note to license@php.net so we can mail you a copy immediately.
+*
+* @category Text
+* @package Text_Highlighter
+* @author Andrey Demenev <demenev@gmail.com>
+* @copyright 2004-2006 Andrey Demenev
+* @license http://www.php.net/license/3_0.txt PHP License
+* @version CVS: $Id$
+* @link http://pear.php.net/package/Text_Highlighter
+*/
+
+/**
+* @ignore
+*/
+require_once 'PEAR.php';
+require_once 'XML/Parser.php';
+
+// {{{ error codes
+
+define ('TEXT_HIGHLIGHTER_EMPTY_RE', 1);
+define ('TEXT_HIGHLIGHTER_INVALID_RE', 2);
+define ('TEXT_HIGHLIGHTER_EMPTY_OR_MISSING', 3);
+define ('TEXT_HIGHLIGHTER_EMPTY', 4);
+define ('TEXT_HIGHLIGHTER_REGION_REGION', 5);
+define ('TEXT_HIGHLIGHTER_REGION_BLOCK', 6);
+define ('TEXT_HIGHLIGHTER_BLOCK_REGION', 7);
+define ('TEXT_HIGHLIGHTER_KEYWORD_BLOCK', 8);
+define ('TEXT_HIGHLIGHTER_KEYWORD_INHERITS', 9);
+define ('TEXT_HIGHLIGHTER_PARSE', 10);
+define ('TEXT_HIGHLIGHTER_FILE_WRITE', 11);
+define ('TEXT_HIGHLIGHTER_FILE_READ', 12);
+// }}}
+
+/**
+* Syntax highliter class generator class
+*
+* This class is used to generate PHP classes
+* from XML files with highlighting rules
+*
+* Usage example
+* <code>
+*require_once 'Text/Highlighter/Generator.php';
+*$generator = new Text_Highlighter_Generator('php.xml');
+*$generator->generate();
+*$generator->saveCode('PHP.php');
+* </code>
+*
+* A command line script <b>generate</b> is provided for
+* class generation (installs in scripts/Text/Highlighter).
+*
+* @author Andrey Demenev <demenev@gmail.com>
+* @copyright 2004-2006 Andrey Demenev
+* @license http://www.php.net/license/3_0.txt PHP License
+* @version Release: @package_version@
+* @link http://pear.php.net/package/Text_Highlighter
+*/
+
+class Text_Highlighter_Generator extends XML_Parser
+{
+ // {{{ properties
+ /**
+ * Whether to do case folding.
+ * We have to declare it here, because XML_Parser
+ * sets case folding in constructor
+ *
+ * @var boolean
+ */
+ var $folding = false;
+
+ /**
+ * Holds name of file with highlighting rules
+ *
+ * @var string
+ * @access private
+ */
+ var $_syntaxFile;
+
+ /**
+ * Current element being processed
+ *
+ * @var array
+ * @access private
+ */
+ var $_element;
+
+ /**
+ * List of regions
+ *
+ * @var array
+ * @access private
+ */
+ var $_regions = array();
+
+ /**
+ * List of blocks
+ *
+ * @var array
+ * @access private
+ */
+ var $_blocks = array();
+
+ /**
+ * List of keyword groups
+ *
+ * @var array
+ * @access private
+ */
+ var $_keywords = array();
+
+ /**
+ * List of authors
+ *
+ * @var array
+ * @access private
+ */
+ var $_authors = array();
+
+ /**
+ * Name of language
+ *
+ * @var string
+ * @access public
+ */
+ var $language = '';
+
+ /**
+ * Generated code
+ *
+ * @var string
+ * @access private
+ */
+ var $_code = '';
+
+ /**
+ * Default class
+ *
+ * @var string
+ * @access private
+ */
+ var $_defClass = 'default';
+
+ /**
+ * Comment
+ *
+ * @var string
+ * @access private
+ */
+ var $_comment = '';
+
+ /**
+ * Flag for comment processing
+ *
+ * @var boolean
+ * @access private
+ */
+ var $_inComment = false;
+
+ /**
+ * Sorting order of current block/region
+ *
+ * @var integer
+ * @access private
+ */
+ var $_blockOrder = 0;
+
+ /**
+ * Generation errors
+ *
+ * @var array
+ * @access private
+ */
+ var $_errors;
+
+ // }}}
+ // {{{ constructor
+
+ /**
+ * PHP4 compatable constructor
+ *
+ * @param string $syntaxFile Name of XML file
+ * with syntax highlighting rules
+ *
+ * @access public
+ */
+
+ function Text_Highlighter_Generator($syntaxFile = '')
+ {
+ return $this->__construct($syntaxFile);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param string $syntaxFile Name of XML file
+ * with syntax highlighting rules
+ *
+ * @access public
+ */
+
+ function __construct($syntaxFile = '')
+ {
+ XML_Parser::XML_Parser(null, 'func');
+ $this->_errors = array();
+ $this->_declareErrorMessages();
+ if ($syntaxFile) {
+ $this->setInputFile($syntaxFile);
+ }
+ }
+
+ // }}}
+ // {{{ _formatError
+
+ /**
+ * Format error message
+ *
+ * @param int $code error code
+ * @param string $params parameters
+ * @param string $fileName file name
+ * @param int $lineNo line number
+ * @return array
+ * @access public
+ */
+ function _formatError($code, $params, $fileName, $lineNo)
+ {
+ $template = $this->_templates[$code];
+ $ret = call_user_func_array('sprintf', array_merge(array($template), $params));
+ if ($fileName) {
+ $ret = '[' . $fileName . '] ' . $ret;
+ }
+ if ($lineNo) {
+ $ret .= ' (line ' . $lineNo . ')';
+ }
+ return $ret;
+ }
+
+ // }}}
+ // {{{ declareErrorMessages
+
+ /**
+ * Set up error message templates
+ *
+ * @access private
+ */
+ function _declareErrorMessages()
+ {
+ $this->_templates = array (
+ TEXT_HIGHLIGHTER_EMPTY_RE => 'Empty regular expression',
+ TEXT_HIGHLIGHTER_INVALID_RE => 'Invalid regular expression : %s',
+ TEXT_HIGHLIGHTER_EMPTY_OR_MISSING => 'Empty or missing %s',
+ TEXT_HIGHLIGHTER_EMPTY => 'Empty %s',
+ TEXT_HIGHLIGHTER_REGION_REGION => 'Region %s refers undefined region %s',
+ TEXT_HIGHLIGHTER_REGION_BLOCK => 'Region %s refers undefined block %s',
+ TEXT_HIGHLIGHTER_BLOCK_REGION => 'Block %s refers undefined region %s',
+ TEXT_HIGHLIGHTER_KEYWORD_BLOCK => 'Keyword group %s refers undefined block %s',
+ TEXT_HIGHLIGHTER_KEYWORD_INHERITS => 'Keyword group %s inherits undefined block %s',
+ TEXT_HIGHLIGHTER_PARSE => '%s',
+ TEXT_HIGHLIGHTER_FILE_WRITE => 'Error writing file %s',
+ TEXT_HIGHLIGHTER_FILE_READ => '%s'
+ );
+ }
+
+ // }}}
+ // {{{ setInputFile
+
+ /**
+ * Sets the input xml file to be parsed
+ *
+ * @param string Filename (full path)
+ * @return boolean
+ * @access public
+ */
+ function setInputFile($file)
+ {
+ $this->_syntaxFile = $file;
+ $ret = parent::setInputFile($file);
+ if (PEAR::isError($ret)) {
+ $this->_error(TEXT_HIGHLIGHTER_FILE_READ, $ret->message);
+ return false;
+ }
+ return true;
+ }
+
+ // }}}
+ // {{{ generate
+
+ /**
+ * Generates class code
+ *
+ * @access public
+ */
+
+ function generate()
+ {
+ $this->_regions = array();
+ $this->_blocks = array();
+ $this->_keywords = array();
+ $this->language = '';
+ $this->_code = '';
+ $this->_defClass = 'default';
+ $this->_comment = '';
+ $this->_inComment = false;
+ $this->_authors = array();
+ $this->_blockOrder = 0;
+ $this->_errors = array();
+
+ $ret = $this->parse();
+ if (PEAR::isError($ret)) {
+ $this->_error(TEXT_HIGHLIGHTER_PARSE, $ret->message);
+ return false;
+ }
+ return true;
+ }
+
+ // }}}
+ // {{{ getCode
+
+ /**
+ * Returns generated code as a string.
+ *
+ * @return string Generated code
+ * @access public
+ */
+
+ function getCode()
+ {
+ return $this->_code;
+ }
+
+ // }}}
+ // {{{ saveCode
+
+ /**
+ * Saves generated class to file. Note that {@link Text_Highlighter::factory()}
+ * assumes that filename is uppercase (SQL.php, DTD.php, etc), and file
+ * is located in Text/Highlighter
+ *
+ * @param string $filename Name of file to write the code to
+ * @return boolean true on success, false on failure
+ * @access public
+ */
+
+ function saveCode($filename)
+ {
+ $f = @fopen($filename, 'wb');
+ if (!$f) {
+ $this->_error(TEXT_HIGHLIGHTER_FILE_WRITE, array('outfile'=>$filename));
+ return false;
+ }
+ fwrite ($f, $this->_code);
+ fclose($f);
+ return true;
+ }
+
+ // }}}
+ // {{{ hasErrors
+
+ /**
+ * Reports if there were errors
+ *
+ * @return boolean
+ * @access public
+ */
+
+ function hasErrors()
+ {
+ return count($this->_errors) > 0;
+ }
+
+ // }}}
+ // {{{ getErrors
+
+ /**
+ * Returns errors
+ *
+ * @return array
+ * @access public
+ */
+
+ function getErrors()
+ {
+ return $this->_errors;
+ }
+
+ // }}}
+ // {{{ _sortBlocks
+
+ /**
+ * Sorts blocks
+ *
+ * @access private
+ */
+
+ function _sortBlocks($b1, $b2) {
+ return $b1['order'] - $b2['order'];
+ }
+
+ // }}}
+ // {{{ _sortLookFor
+ /**
+ * Sort 'look for' list
+ * @return int
+ * @param string $b1
+ * @param string $b2
+ */
+ function _sortLookFor($b1, $b2) {
+ $o1 = isset($this->_blocks[$b1]) ? $this->_blocks[$b1]['order'] : $this->_regions[$b1]['order'];
+ $o2 = isset($this->_blocks[$b2]) ? $this->_blocks[$b2]['order'] : $this->_regions[$b2]['order'];
+ return $o1 - $o2;
+ }
+
+ // }}}
+ // {{{ _makeRE
+
+ /**
+ * Adds delimiters and modifiers to regular expression if necessary
+ *
+ * @param string $text Original RE
+ * @return string Final RE
+ * @access private
+ */
+ function _makeRE($text, $case = false)
+ {
+ if (!strlen($text)) {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_RE);
+ }
+ if (!strlen($text) || $text{0} != '/') {
+ $text = '/' . $text . '/';
+ }
+ if (!$case) {
+ $text .= 'i';
+ }
+ $php_errormsg = '';
+ @preg_match($text, '');
+ if ($php_errormsg) {
+ $this->_error(TEXT_HIGHLIGHTER_INVALID_RE, $php_errormsg);
+ }
+ preg_match ('#^/(.+)/(.*)$#', $text, $m);
+ if (@$m[2]) {
+ $text = '(?' . $m[2] . ')' . $m[1];
+ } else {
+ $text = $m[1];
+ }
+ return $text;
+ }
+
+ // }}}
+ // {{{ _exportArray
+
+ /**
+ * Exports array as PHP code
+ *
+ * @param array $array
+ * @return string Code
+ * @access private
+ */
+ function _exportArray($array)
+ {
+ $array = var_export($array, true);
+ return trim(preg_replace('~^(\s*)~m',' \1\1',$array));
+ }
+
+ // }}}
+ // {{{ _countSubpatterns
+ /**
+ * Find number of capturing suppaterns in regular expression
+ * @return int
+ * @param string $re Regular expression (without delimiters)
+ */
+ function _countSubpatterns($re)
+ {
+ preg_match_all('/' . $re . '/', '', $m);
+ return count($m)-1;
+ }
+
+ // }}}
+
+ /**#@+
+ * @access private
+ * @param resource $xp XML parser resource
+ * @param string $elem XML element name
+ * @param array $attribs XML element attributes
+ */
+
+ // {{{ xmltag_Default
+
+ /**
+ * start handler for <default> element
+ */
+ function xmltag_Default($xp, $elem, $attribs)
+ {
+ $this->_aliasAttributes($attribs);
+ if (!isset($attribs['innerGroup']) || $attribs['innerGroup'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'innerGroup');
+ }
+ $this->_defClass = @$attribs['innerGroup'];
+ }
+
+ // }}}
+ // {{{ xmltag_Region
+
+ /**
+ * start handler for <region> element
+ */
+ function xmltag_Region($xp, $elem, $attribs)
+ {
+ $this->_aliasAttributes($attribs);
+ if (!isset($attribs['name']) || $attribs['name'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'region name');
+ }
+ if (!isset($attribs['innerGroup']) || $attribs['innerGroup'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'innerGroup');
+ }
+ $this->_element = array('name' => $attribs['name']);
+ $this->_element['line'] = xml_get_current_line_number($this->parser);
+ if (isset($attribs['case'])) {
+ $this->_element['case'] = $attribs['case'] == 'yes';
+ } else {
+ $this->_element['case'] = $this->_case;
+ }
+ $this->_element['innerGroup'] = $attribs['innerGroup'];
+ $this->_element['delimGroup'] = isset($attribs['delimGroup']) ?
+ $attribs['delimGroup'] :
+ $attribs['innerGroup'];
+ $this->_element['start'] = $this->_makeRE(@$attribs['start'], $this->_element['case']);
+ $this->_element['end'] = $this->_makeRE(@$attribs['end'], $this->_element['case']);
+ $this->_element['contained'] = @$attribs['contained'] == 'yes';
+ $this->_element['never-contained'] = @$attribs['never-contained'] == 'yes';
+ $this->_element['remember'] = @$attribs['remember'] == 'yes';
+ if (isset($attribs['startBOL']) && $attribs['startBOL'] == 'yes') {
+ $this->_element['startBOL'] = true;
+ }
+ if (isset($attribs['endBOL']) && $attribs['endBOL'] == 'yes') {
+ $this->_element['endBOL'] = true;
+ }
+ if (isset($attribs['neverAfter'])) {
+ $this->_element['neverafter'] = $this->_makeRE($attribs['neverAfter']);
+ }
+ }
+
+ // }}}
+ // {{{ xmltag_Block
+
+ /**
+ * start handler for <block> element
+ */
+ function xmltag_Block($xp, $elem, $attribs)
+ {
+ $this->_aliasAttributes($attribs);
+ if (!isset($attribs['name']) || $attribs['name'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'block name');
+ }
+ if (isset($attribs['innerGroup']) && $attribs['innerGroup'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY, 'innerGroup');
+ }
+ $this->_element = array('name' => $attribs['name']);
+ $this->_element['line'] = xml_get_current_line_number($this->parser);
+ if (isset($attribs['case'])) {
+ $this->_element['case'] = $attribs['case'] == 'yes';
+ } else {
+ $this->_element['case'] = $this->_case;
+ }
+ if (isset($attribs['innerGroup'])) {
+ $this->_element['innerGroup'] = @$attribs['innerGroup'];
+ }
+ $this->_element['match'] = $this->_makeRE($attribs['match'], $this->_element['case']);
+ $this->_element['contained'] = @$attribs['contained'] == 'yes';
+ $this->_element['multiline'] = @$attribs['multiline'] == 'yes';
+ if (isset($attribs['BOL']) && $attribs['BOL'] == 'yes') {
+ $this->_element['BOL'] = true;
+ }
+ if (isset($attribs['neverAfter'])) {
+ $this->_element['neverafter'] = $this->_makeRE($attribs['neverAfter']);
+ }
+ }
+
+ // }}}
+ // {{{ cdataHandler
+
+ /**
+ * Character data handler. Used for comment
+ */
+ function cdataHandler($xp, $cdata)
+ {
+ if ($this->_inComment) {
+ $this->_comment .= $cdata;
+ }
+ }
+
+ // }}}
+ // {{{ xmltag_Comment
+
+ /**
+ * start handler for <comment> element
+ */
+ function xmltag_Comment($xp, $elem, $attribs)
+ {
+ $this->_comment = '';
+ $this->_inComment = true;
+ }
+
+ // }}}
+ // {{{ xmltag_PartGroup
+
+ /**
+ * start handler for <partgroup> element
+ */
+ function xmltag_PartGroup($xp, $elem, $attribs)
+ {
+ $this->_aliasAttributes($attribs);
+ if (!isset($attribs['innerGroup']) || $attribs['innerGroup'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'innerGroup');
+ }
+ $this->_element['partClass'][$attribs['index']] = @$attribs['innerGroup'];
+ }
+
+ // }}}
+ // {{{ xmltag_PartClass
+
+ /**
+ * start handler for <partclass> element
+ */
+ function xmltag_PartClass($xp, $elem, $attribs)
+ {
+ $this->xmltag_PartGroup($xp, $elem, $attribs);
+ }
+
+ // }}}
+ // {{{ xmltag_Keywords
+
+ /**
+ * start handler for <keywords> element
+ */
+ function xmltag_Keywords($xp, $elem, $attribs)
+ {
+ $this->_aliasAttributes($attribs);
+ if (!isset($attribs['name']) || $attribs['name'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'keyword group name');
+ }
+ if (!isset($attribs['innerGroup']) || $attribs['innerGroup'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'innerGroup');
+ }
+ if (!isset($attribs['inherits']) || $attribs['inherits'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'inherits');
+ }
+ $this->_element = array('name'=>@$attribs['name']);
+ $this->_element['line'] = xml_get_current_line_number($this->parser);
+ $this->_element['innerGroup'] = @$attribs['innerGroup'];
+ if (isset($attribs['case'])) {
+ $this->_element['case'] = $attribs['case'] == 'yes';
+ } else {
+ $this->_element['case'] = $this->_case;
+ }
+ $this->_element['inherits'] = @$attribs['inherits'];
+ if (isset($attribs['otherwise'])) {
+ $this->_element['otherwise'] = $attribs['otherwise'];
+ }
+ if (isset($attribs['ifdef'])) {
+ $this->_element['ifdef'] = $attribs['ifdef'];
+ }
+ if (isset($attribs['ifndef'])) {
+ $this->_element['ifndef'] = $attribs['ifndef'];
+ }
+ }
+
+ // }}}
+ // {{{ xmltag_Keyword
+
+ /**
+ * start handler for <keyword> element
+ */
+ function xmltag_Keyword($xp, $elem, $attribs)
+ {
+ if (!isset($attribs['match']) || $attribs['match'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'match');
+ }
+ $keyword = @$attribs['match'];
+ if (!$this->_element['case']) {
+ $keyword = strtolower($keyword);
+ }
+ $this->_element['match'][$keyword] = true;
+ }
+
+ // }}}
+ // {{{ xmltag_Contains
+
+ /**
+ * start handler for <contains> element
+ */
+ function xmltag_Contains($xp, $elem, $attribs)
+ {
+ $this->_element['contains-all'] = @$attribs['all'] == 'yes';
+ if (isset($attribs['region'])) {
+ $this->_element['contains']['region'][$attribs['region']] =
+ xml_get_current_line_number($this->parser);
+ }
+ if (isset($attribs['block'])) {
+ $this->_element['contains']['block'][$attribs['block']] =
+ xml_get_current_line_number($this->parser);
+ }
+ }
+
+ // }}}
+ // {{{ xmltag_But
+
+ /**
+ * start handler for <but> element
+ */
+ function xmltag_But($xp, $elem, $attribs)
+ {
+ if (isset($attribs['region'])) {
+ $this->_element['not-contains']['region'][$attribs['region']] = true;
+ }
+ if (isset($attribs['block'])) {
+ $this->_element['not-contains']['block'][$attribs['block']] = true;
+ }
+ }
+
+ // }}}
+ // {{{ xmltag_Onlyin
+
+ /**
+ * start handler for <onlyin> element
+ */
+ function xmltag_Onlyin($xp, $elem, $attribs)
+ {
+ if (!isset($attribs['region']) || $attribs['region'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'region');
+ }
+ $this->_element['onlyin'][$attribs['region']] = xml_get_current_line_number($this->parser);
+ }
+
+ // }}}
+ // {{{ xmltag_Author
+
+ /**
+ * start handler for <author> element
+ */
+ function xmltag_Author($xp, $elem, $attribs)
+ {
+ if (!isset($attribs['name']) || $attribs['name'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'author name');
+ }
+ $this->_authors[] = array(
+ 'name' => @$attribs['name'],
+ 'email' => (string)@$attribs['email']
+ );
+ }
+
+ // }}}
+ // {{{ xmltag_Highlight
+
+ /**
+ * start handler for <highlight> element
+ */
+ function xmltag_Highlight($xp, $elem, $attribs)
+ {
+ if (!isset($attribs['lang']) || $attribs['lang'] === '') {
+ $this->_error(TEXT_HIGHLIGHTER_EMPTY_OR_MISSING, 'language name');
+ }
+ $this->_code = '';
+ $this->language = strtoupper(@$attribs['lang']);
+ $this->_case = @$attribs['case'] == 'yes';
+ }
+
+ // }}}
+
+ /**#@-*/
+
+ // {{{ _error
+
+ /**
+ * Add an error message
+ *
+ * @param integer $code Error code
+ * @param mixed $message Error message or array with error message parameters
+ * @param integer $lineNo Source code line number
+ * @access private
+ */
+ function _error($code, $params = array(), $lineNo = 0)
+ {
+ if (!$lineNo && !empty($this->parser)) {
+ $lineNo = xml_get_current_line_number($this->parser);
+ }
+ $this->_errors[] = $this->_formatError($code, $params, $this->_syntaxFile, $lineNo);
+ }
+
+ // }}}
+ // {{{ _aliasAttributes
+
+ /**
+ * BC trick
+ *
+ * @param array $attrs attributes
+ */
+ function _aliasAttributes(&$attrs)
+ {
+ if (isset($attrs['innerClass']) && !isset($attrs['innerGroup'])) {
+ $attrs['innerGroup'] = $attrs['innerClass'];
+ }
+ if (isset($attrs['delimClass']) && !isset($attrs['delimGroup'])) {
+ $attrs['delimGroup'] = $attrs['delimClass'];
+ }
+ if (isset($attrs['partClass']) && !isset($attrs['partGroup'])) {
+ $attrs['partGroup'] = $attrs['partClass'];
+ }
+ }
+
+ // }}}
+
+ /**#@+
+ * @access private
+ * @param resource $xp XML parser resource
+ * @param string $elem XML element name
+ */
+
+ // {{{ xmltag_Comment_
+
+ /**
+ * end handler for <comment> element
+ */
+ function xmltag_Comment_($xp, $elem)
+ {
+ $this->_inComment = false;
+ }
+
+ // }}}
+ // {{{ xmltag_Region_
+
+ /**
+ * end handler for <region> element
+ */
+ function xmltag_Region_($xp, $elem)
+ {
+ $this->_element['type'] = 'region';
+ $this->_element['order'] = $this->_blockOrder ++;
+ $this->_regions[$this->_element['name']] = $this->_element;
+ }
+
+ // }}}
+ // {{{ xmltag_Keywords_
+
+ /**
+ * end handler for <keywords> element
+ */
+ function xmltag_Keywords_($xp, $elem)
+ {
+ $this->_keywords[$this->_element['name']] = $this->_element;
+ }
+
+ // }}}
+ // {{{ xmltag_Block_
+
+ /**
+ * end handler for <block> element
+ */
+ function xmltag_Block_($xp, $elem)
+ {
+ $this->_element['type'] = 'block';
+ $this->_element['order'] = $this->_blockOrder ++;
+ $this->_blocks[$this->_element['name']] = $this->_element;
+ }
+
+ // }}}
+ // {{{ xmltag_Highlight_
+
+ /**
+ * end handler for <highlight> element
+ */
+ function xmltag_Highlight_($xp, $elem)
+ {
+ $conditions = array();
+ $toplevel = array();
+ foreach ($this->_blocks as $i => $current) {
+ if (!$current['contained'] && !isset($current['onlyin'])) {
+ $toplevel[] = $i;
+ }
+ foreach ((array)@$current['onlyin'] as $region => $lineNo) {
+ if (!isset($this->_regions[$region])) {
+ $this->_error(TEXT_HIGHLIGHTER_BLOCK_REGION,
+ array(
+ 'block' => $current['name'],
+ 'region' => $region
+ ));
+ }
+ }
+ }
+ foreach ($this->_regions as $i=>$current) {
+ if (!$current['contained'] && !isset($current['onlyin'])) {
+ $toplevel[] = $i;
+ }
+ foreach ((array)@$current['contains']['region'] as $region => $lineNo) {
+ if (!isset($this->_regions[$region])) {
+ $this->_error(TEXT_HIGHLIGHTER_REGION_REGION,
+ array(
+ 'region1' => $current['name'],
+ 'region2' => $region
+ ));
+ }
+ }
+ foreach ((array)@$current['contains']['block'] as $region => $lineNo) {
+ if (!isset($this->_blocks[$region])) {
+ $this->_error(TEXT_HIGHLIGHTER_REGION_BLOCK,
+ array(
+ 'block' => $current['name'],
+ 'region' => $region
+ ));
+ }
+ }
+ foreach ((array)@$current['onlyin'] as $region => $lineNo) {
+ if (!isset($this->_regions[$region])) {
+ $this->_error(TEXT_HIGHLIGHTER_REGION_REGION,
+ array(
+ 'region1' => $current['name'],
+ 'region2' => $region
+ ));
+ }
+ }
+ foreach ($this->_regions as $j => $region) {
+ if (isset($region['onlyin'])) {
+ $suits = isset($region['onlyin'][$current['name']]);
+ } elseif (isset($current['not-contains']['region'][$region['name']])) {
+ $suits = false;
+ } elseif (isset($current['contains']['region'][$region['name']])) {
+ $suits = true;
+ } else {
+ $suits = @$current['contains-all'] && @!$region['never-contained'];
+ }
+ if ($suits) {
+ $this->_regions[$i]['lookfor'][] = $j;
+ }
+ }
+ foreach ($this->_blocks as $j=>$region) {
+ if (isset($region['onlyin'])) {
+ $suits = isset($region['onlyin'][$current['name']]);
+ } elseif (isset($current['not-contains']['block'][$region['name']])) {
+ $suits = false;
+ } elseif (isset($current['contains']['block'][$region['name']])) {
+ $suits = true;
+ } else {
+ $suits = @$current['contains-all'] && @!$region['never-contained'];
+ }
+ if ($suits) {
+ $this->_regions[$i]['lookfor'][] = $j;
+ }
+ }
+ }
+ foreach ($this->_blocks as $i=>$current) {
+ unset ($this->_blocks[$i]['never-contained']);
+ unset ($this->_blocks[$i]['contained']);
+ unset ($this->_blocks[$i]['contains-all']);
+ unset ($this->_blocks[$i]['contains']);
+ unset ($this->_blocks[$i]['onlyin']);
+ unset ($this->_blocks[$i]['line']);
+ }
+
+ foreach ($this->_regions as $i=>$current) {
+ unset ($this->_regions[$i]['never-contained']);
+ unset ($this->_regions[$i]['contained']);
+ unset ($this->_regions[$i]['contains-all']);
+ unset ($this->_regions[$i]['contains']);
+ unset ($this->_regions[$i]['onlyin']);
+ unset ($this->_regions[$i]['line']);
+ }
+
+ foreach ($this->_keywords as $name => $keyword) {
+ if (isset($keyword['ifdef'])) {
+ $conditions[$keyword['ifdef']][] = array($name, true);
+ }
+ if (isset($keyword['ifndef'])) {
+ $conditions[$keyword['ifndef']][] = array($name, false);
+ }
+ unset($this->_keywords[$name]['line']);
+ if (!isset($this->_blocks[$keyword['inherits']])) {
+ $this->_error(TEXT_HIGHLIGHTER_KEYWORD_INHERITS,
+ array(
+ 'keyword' => $keyword['name'],
+ 'block' => $keyword['inherits']
+ ));
+ }
+ if (isset($keyword['otherwise']) && !isset($this->_blocks[$keyword['otherwise']]) ) {
+ $this->_error(TEXT_HIGHLIGHTER_KEYWORD_BLOCK,
+ array(
+ 'keyword' => $keyword['name'],
+ 'block' => $keyword['inherits']
+ ));
+ }
+ }
+
+ $syntax=array(
+ 'keywords' => $this->_keywords,
+ 'blocks' => array_merge($this->_blocks, $this->_regions),
+ 'toplevel' => $toplevel,
+ );
+ uasort($syntax['blocks'], array(&$this, '_sortBlocks'));
+ foreach ($syntax['blocks'] as $name => $block) {
+ if ($block['type'] == 'block') {
+ continue;
+ }
+ if (is_array(@$syntax['blocks'][$name]['lookfor'])) {
+ usort($syntax['blocks'][$name]['lookfor'], array(&$this, '_sortLookFor'));
+ }
+ }
+ usort($syntax['toplevel'], array(&$this, '_sortLookFor'));
+ $syntax['case'] = $this->_case;
+ $this->_code = <<<CODE
+<?php
+/**
+ * Auto-generated class. {$this->language} syntax highlighting
+CODE;
+
+ if ($this->_comment) {
+ $comment = preg_replace('~^~m',' * ',$this->_comment);
+ $this->_code .= "\n * \n" . $comment;
+ }
+
+ $this->_code .= <<<CODE
+
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: $this->_syntaxFile
+
+CODE;
+
+ foreach ($this->_authors as $author) {
+ $this->_code .= ' * @author ' . $author['name'];
+ if ($author['email']) {
+ $this->_code .= ' <' . $author['email'] . '>';
+ }
+ $this->_code .= "\n";
+ }
+
+ $this->_code .= <<<CODE
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. {$this->language} syntax highlighting
+ *
+
+CODE;
+ foreach ($this->_authors as $author) {
+ $this->_code .= ' * @author ' . $author['name'];
+ if ($author['email']) {
+ $this->_code .= ' <' . $author['email']. '>';
+ }
+ $this->_code .= "\n";
+ }
+
+
+ $this->_code .= <<<CODE
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_{$this->language} extends Text_Highlighter
+{
+
+CODE;
+ $this->_code .= 'var $_language = \'' . strtolower($this->language) . "';\n\n";
+ $array = var_export($syntax, true);
+ $array = trim(preg_replace('~^(\s*)~m',' \1\1',$array));
+ // \$this->_syntax = $array;
+ $this->_code .= <<<CODE
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array \$options
+ * @access public
+ */
+ function Text_Highlighter_{$this->language}(\$options=array())
+ {
+ \$this->__construct(\$options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array \$options
+ * @access public
+ */
+ function __construct(\$options=array())
+ {
+
+CODE;
+ $this->_code .= <<<CODE
+
+ \$this->_options = \$options;
+CODE;
+ $states = array();
+ $i = 0;
+ foreach ($syntax['blocks'] as $name => $block) {
+ if ($block['type'] == 'region') {
+ $states[$name] = $i++;
+ }
+ }
+ $regs = array();
+ $counts = array();
+ $delim = array();
+ $inner = array();
+ $end = array();
+ $stat = array();
+ $keywords = array();
+ $parts = array();
+ $kwmap = array();
+ $subst = array();
+ $re = array();
+ $ce = array();
+ $rd = array();
+ $in = array();
+ $st = array();
+ $kw = array();
+ $sb = array();
+ foreach ($syntax['toplevel'] as $name) {
+ $block = $syntax['blocks'][$name];
+ if ($block['type'] == 'block') {
+ $kwm = array();
+ $re[] = '(' . $block['match'] . ')';
+ $ce[] = $this->_countSubpatterns($block['match']);
+ $rd[] = '';
+ $sb[] = false;;
+ $st[] = -1;
+ foreach ($syntax['keywords'] as $kwname => $kwgroup) {
+ if ($kwgroup['inherits'] != $name) {
+ continue;
+ }
+ $gre = implode('|', array_keys($kwgroup['match']));
+ if (!$kwgroup['case']) {
+ $gre = '(?i)' . $gre;
+ }
+ $kwm[$kwname][] = $gre;
+ $kwmap[$kwname] = $kwgroup['innerGroup'];
+ }
+ foreach ($kwm as $g => $ma) {
+ $kwm[$g] = '/^(' . implode(')|(', $ma) . ')$/';
+ }
+ $kw[] = $kwm;
+ } else {
+ $kw[] = -1;
+ $re[] = '(' . $block['start'] . ')';
+ $ce[] = $this->_countSubpatterns($block['start']);
+ $rd[] = $block['delimGroup'];
+ $st[] = $states[$name];
+ $sb[] = $block['remember'];
+ }
+ $in[] = $block['innerGroup'];
+ }
+ $re = implode('|', $re);
+ $regs[-1] = '/' . $re . '/';
+ $counts[-1] = $ce;
+ $delim[-1] = $rd;
+ $inner[-1] = $in;
+ $stat[-1] = $st;
+ $keywords[-1] = $kw;
+ $subst[-1] = $sb;
+
+ foreach ($syntax['blocks'] as $ablock) {
+ if ($ablock['type'] != 'region') {
+ continue;
+ }
+ $end[] = '/' . $ablock['end'] . '/';
+ $re = array();
+ $ce = array();
+ $rd = array();
+ $in = array();
+ $st = array();
+ $kw = array();
+ $pc = array();
+ $sb = array();
+ foreach ((array)@$ablock['lookfor'] as $name) {
+ $block = $syntax['blocks'][$name];
+ if (isset($block['partClass'])) {
+ $pc[] = $block['partClass'];
+ } else {
+ $pc[] = null;
+ }
+ if ($block['type'] == 'block') {
+ $kwm = array();;
+ $re[] = '(' . $block['match'] . ')';
+ $ce[] = $this->_countSubpatterns($block['match']);
+ $rd[] = '';
+ $sb[] = false;
+ $st[] = -1;
+ foreach ($syntax['keywords'] as $kwname => $kwgroup) {
+ if ($kwgroup['inherits'] != $name) {
+ continue;
+ }
+ $gre = implode('|', array_keys($kwgroup['match']));
+ if (!$kwgroup['case']) {
+ $gre = '(?i)' . $gre;
+ }
+ $kwm[$kwname][] = $gre;
+ $kwmap[$kwname] = $kwgroup['innerGroup'];
+ }
+ foreach ($kwm as $g => $ma) {
+ $kwm[$g] = '/^(' . implode(')|(', $ma) . ')$/';
+ }
+ $kw[] = $kwm;
+ } else {
+ $sb[] = $block['remember'];
+ $kw[] = -1;
+ $re[] = '(' . $block['start'] . ')';
+ $ce[] = $this->_countSubpatterns($block['start']);
+ $rd[] = $block['delimGroup'];
+ $st[] = $states[$name];
+ }
+ $in[] = $block['innerGroup'];
+ }
+ $re = implode('|', $re);
+ $regs[] = '/' . $re . '/';
+ $counts[] = $ce;
+ $delim[] = $rd;
+ $inner[] = $in;
+ $stat[] = $st;
+ $keywords[] = $kw;
+ $parts[] = $pc;
+ $subst[] = $sb;
+ }
+
+
+ $this->_code .= "\n \$this->_regs = " . $this->_exportArray($regs);
+ $this->_code .= ";\n \$this->_counts = " .$this->_exportArray($counts);
+ $this->_code .= ";\n \$this->_delim = " .$this->_exportArray($delim);
+ $this->_code .= ";\n \$this->_inner = " .$this->_exportArray($inner);
+ $this->_code .= ";\n \$this->_end = " .$this->_exportArray($end);
+ $this->_code .= ";\n \$this->_states = " .$this->_exportArray($stat);
+ $this->_code .= ";\n \$this->_keywords = " .$this->_exportArray($keywords);
+ $this->_code .= ";\n \$this->_parts = " .$this->_exportArray($parts);
+ $this->_code .= ";\n \$this->_subst = " .$this->_exportArray($subst);
+ $this->_code .= ";\n \$this->_conditions = " .$this->_exportArray($conditions);
+ $this->_code .= ";\n \$this->_kwmap = " .$this->_exportArray($kwmap);
+ $this->_code .= ";\n \$this->_defClass = '" .$this->_defClass . '\'';
+ $this->_code .= <<<CODE
+;
+ \$this->_checkDefines();
+ }
+
+}
+CODE;
+}
+
+// }}}
+}
+
+
+/*
+* Local variables:
+* tab-width: 4
+* c-basic-offset: 4
+* c-hanging-comment-ender-p: nil
+* End:
+*/
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/HTML.php b/library/Text_Highlighter/Text/Highlighter/HTML.php
new file mode 100644
index 000000000..14d0a783f
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/HTML.php
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Auto-generated class. HTML syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : html.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. HTML syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_HTML extends Text_Highlighter
+{
+ var $_language = 'html';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_HTML($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\<!--)|((?i)\\<[\\?\\/]?)|((?i)(&)[\\w\\-\\.]+;)/',
+ 0 => '//',
+ 1 => '/((?i)(?<=[\\<\\/?])[\\w\\-\\:]+)|((?i)[\\w\\-\\:]+)|((?i)")/',
+ 2 => '/((?i)(&)[\\w\\-\\.]+;)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 1,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'brackets',
+ 2 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => 'quotes',
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'code',
+ 2 => 'special',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'reserved',
+ 1 => 'var',
+ 2 => 'string',
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)--\\>/',
+ 1 => '/(?i)[\\/\\?]?\\>/',
+ 2 => '/(?i)"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => 2,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 => -1,
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/JAVA.php b/library/Text_Highlighter/Text/Highlighter/JAVA.php
new file mode 100644
index 000000000..46c0b8851
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/JAVA.php
@@ -0,0 +1,802 @@
+<?php
+/**
+ * Auto-generated class. JAVA syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : java.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. JAVA syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_JAVA extends Text_Highlighter
+{
+ var $_language = 'java';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_JAVA($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0[xX][\\da-f]+)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 3 => '/((?i)\\s@\\w+\\s)|((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\bnote:)|((?i)\\$\\w+\\s*:.*\\$)/',
+ 4 => '/((?i)\\\\[\\\\"\'`tnr\\$\\{])/',
+ 5 => '/((?i)\\\\.)/',
+ 6 => '/((?i)\\s@\\w+\\s)|((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\bnote:)|((?i)\\$\\w+\\s*:.*\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 2,
+ 12 => 5,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 2,
+ 12 => 5,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 2,
+ 12 => 5,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 0,
+ 11 => 2,
+ 12 => 5,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 3,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 3,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ ),
+ 0 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ ),
+ 0 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ ),
+ 1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ ),
+ 2 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ ),
+ 3 =>
+ array (
+ 0 => 'inlinedoc',
+ 1 => 'url',
+ 2 => 'url',
+ 3 => 'inlinedoc',
+ 4 => 'inlinedoc',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ ),
+ 6 =>
+ array (
+ 0 => 'inlinedoc',
+ 1 => 'url',
+ 2 => 'url',
+ 3 => 'inlinedoc',
+ 4 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\}/',
+ 1 => '/(?i)\\)/',
+ 2 => '/(?i)\\]/',
+ 3 => '/(?i)\\*\\//',
+ 4 => '/(?i)"/',
+ 5 => '/(?i)\'/',
+ 6 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'types' => '/^(boolean|byte|char|const|double|final|float|int|long|short|static|void)$/',
+ 'reserved' => '/^(import|package|abstract|break|case|catch|class|continue|default|do|else|extends|false|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|super|strictfp|switch|synchronized|this|throws|throw|transient|true|try|volatile|while)$/',
+ 'builtin' => '/^(AbstractAction|AbstractBorder|AbstractButton|AbstractCellEditor|AbstractCollection|AbstractColorChooserPanel|AbstractDocument|AbstractInterruptibleChannel|AbstractLayoutCache|AbstractList|AbstractListModel|AbstractMap|AbstractMethodError|AbstractPreferences|AbstractSelectableChannel|AbstractSelectionKey|AbstractSelector|AbstractSequentialList|AbstractSet|AbstractSpinnerModel|AbstractTableModel|AbstractUndoableEdit|AbstractWriter|AccessControlContext|AccessControlException|AccessController|AccessException|Accessible|AccessibleAction|AccessibleBundle|AccessibleComponent|AccessibleContext|AccessibleEditableText|AccessibleExtendedComponent|AccessibleExtendedTable|AccessibleHyperlink|AccessibleHypertext|AccessibleIcon|AccessibleKeyBinding|AccessibleObject|AccessibleRelation|AccessibleRelationSet|AccessibleResourceBundle|AccessibleRole|AccessibleSelection|AccessibleState|AccessibleStateSet|AccessibleTable|AccessibleTableModelChange|AccessibleText|AccessibleValue|AccountExpiredException|Acl|AclEntry|AclNotFoundException|Action|ActionEvent|ActionListener|ActionMap|ActionMapUIResource|Activatable|ActivateFailedException|ActivationDesc|ActivationException|ActivationGroup|ActivationGroup_Stub|ActivationGroupDesc|ActivationGroupID|ActivationID|ActivationInstantiator|ActivationMonitor|ActivationSystem|Activator|ActiveEvent|AdapterActivator|AdapterActivatorOperations|AdapterAlreadyExists|AdapterAlreadyExistsHelper|AdapterInactive|AdapterInactiveHelper|AdapterNonExistent|AdapterNonExistentHelper|AddressHelper|Adjustable|AdjustmentEvent|AdjustmentListener|Adler32|AffineTransform|AffineTransformOp|AlgorithmParameterGenerator|AlgorithmParameterGeneratorSpi|AlgorithmParameters|AlgorithmParameterSpec|AlgorithmParametersSpi|AllPermission|AlphaComposite|AlreadyBound|AlreadyBoundException|AlreadyBoundHelper|AlreadyBoundHolder|AlreadyConnectedException|AncestorEvent|AncestorListener|Annotation|Any|AnyHolder|AnySeqHelper|AnySeqHolder|AppConfigurationEntry|Applet|AppletContext|AppletInitializer|AppletStub|ApplicationException|Arc2D|Area|AreaAveragingScaleFilter|ARG_IN|ARG_INOUT|ARG_OUT|ArithmeticException|Array|ArrayIndexOutOfBoundsException|ArrayList|Arrays|ArrayStoreException|AssertionError|AsyncBoxView|AsynchronousCloseException|Attr|Attribute|AttributedCharacterIterator|AttributedString|AttributeException|AttributeInUseException|AttributeList|AttributeListImpl|AttributeModificationException|Attributes|AttributeSet|AttributeSetUtilities|AttributesImpl|AudioClip|AudioFileFormat|AudioFileReader|AudioFileWriter|AudioFormat|AudioInputStream|AudioPermission|AudioSystem|AuthenticationException|AuthenticationNotSupportedException|Authenticator|AuthPermission|Autoscroll|AWTError|AWTEvent|AWTEventListener|AWTEventListenerProxy|AWTEventMulticaster|AWTException|AWTKeyStroke|AWTPermission|BackingStoreException|BAD_CONTEXT|BAD_INV_ORDER|BAD_OPERATION|BAD_PARAM|BAD_POLICY|BAD_POLICY_TYPE|BAD_POLICY_VALUE|BAD_TYPECODE|BadKind|BadLocationException|BadPaddingException|BandCombineOp|BandedSampleModel|BasicArrowButton|BasicAttribute|BasicAttributes|BasicBorders|BasicButtonListener|BasicButtonUI|BasicCheckBoxMenuItemUI|BasicCheckBoxUI|BasicColorChooserUI|BasicComboBoxEditor|BasicComboBoxRenderer|BasicComboBoxUI|BasicComboPopup|BasicDesktopIconUI|BasicDesktopPaneUI|BasicDirectoryModel|BasicEditorPaneUI|BasicFileChooserUI|BasicFormattedTextFieldUI|BasicGraphicsUtils|BasicHTML|BasicIconFactory|BasicInternalFrameTitlePane|BasicInternalFrameUI|BasicLabelUI|BasicListUI|BasicLookAndFeel|BasicMenuBarUI|BasicMenuItemUI|BasicMenuUI|BasicOptionPaneUI|BasicPanelUI|BasicPasswordFieldUI|BasicPermission|BasicPopupMenuSeparatorUI|BasicPopupMenuUI|BasicProgressBarUI|BasicRadioButtonMenuItemUI|BasicRadioButtonUI|BasicRootPaneUI|BasicScrollBarUI|BasicScrollPaneUI|BasicSeparatorUI|BasicSliderUI|BasicSpinnerUI|BasicSplitPaneDivider|BasicSplitPaneUI|BasicStroke|BasicTabbedPaneUI|BasicTableHeaderUI|BasicTableUI|BasicTextAreaUI|BasicTextFieldUI|BasicTextPaneUI|BasicTextUI|BasicToggleButtonUI|BasicToolBarSeparatorUI|BasicToolBarUI|BasicToolTipUI|BasicTreeUI|BasicViewportUI|BatchUpdateException|BeanContext|BeanContextChild|BeanContextChildComponentProxy|BeanContextChildSupport|BeanContextContainerProxy|BeanContextEvent|BeanContextMembershipEvent|BeanContextMembershipListener|BeanContextProxy|BeanContextServiceAvailableEvent|BeanContextServiceProvider|BeanContextServiceProviderBeanInfo|BeanContextServiceRevokedEvent|BeanContextServiceRevokedListener|BeanContextServices|BeanContextServicesListener|BeanContextServicesSupport|BeanContextSupport|BeanDescriptor|BeanInfo|Beans|BevelBorder|Bidi|BigDecimal|BigInteger|BinaryRefAddr|BindException|Binding|BindingHelper|BindingHolder|BindingIterator|BindingIteratorHelper|BindingIteratorHolder|BindingIteratorOperations|BindingIteratorPOA|BindingListHelper|BindingListHolder|BindingType|BindingTypeHelper|BindingTypeHolder|BitSet|Blob|BlockView|Book|Boolean|BooleanControl|BooleanHolder|BooleanSeqHelper|BooleanSeqHolder|Border|BorderFactory|BorderLayout|BorderUIResource|BoundedRangeModel|Bounds|Box|BoxedValueHelper|BoxLayout|BoxView|BreakIterator|Buffer|BufferCapabilities|BufferedImage|BufferedImageFilter|BufferedImageOp|BufferedInputStream|BufferedOutputStream|BufferedReader|BufferedWriter|BufferOverflowException|BufferStrategy|BufferUnderflowException|Button|ButtonGroup|ButtonModel|ButtonUI|Byte|ByteArrayInputStream|ByteArrayOutputStream|ByteBuffer|ByteChannel|ByteHolder|ByteLookupTable|ByteOrder|Calendar|CallableStatement|Callback|CallbackHandler|CancelablePrintJob|CancelledKeyException|CannotProceed|CannotProceedException|CannotProceedHelper|CannotProceedHolder|CannotRedoException|CannotUndoException|Canvas|CardLayout|Caret|CaretEvent|CaretListener|CDATASection|CellEditor|CellEditorListener|CellRendererPane|Certificate|CertificateEncodingException|CertificateException|CertificateExpiredException|CertificateFactory|CertificateFactorySpi|CertificateNotYetValidException|CertificateParsingException|CertPath|CertPathBuilder|CertPathBuilderException|CertPathBuilderResult|CertPathBuilderSpi|CertPathParameters|CertPathValidator|CertPathValidatorException|CertPathValidatorResult|CertPathValidatorSpi|CertSelector|CertStore|CertStoreException|CertStoreParameters|CertStoreSpi|ChangedCharSetException|ChangeEvent|ChangeListener|Channel|ChannelBinding|Channels|Character|CharacterCodingException|CharacterData|CharacterIterator|CharArrayReader|CharArrayWriter|CharBuffer|CharConversionException|CharHolder|CharSeqHelper|CharSeqHolder|CharSequence|Charset|CharsetDecoder|CharsetEncoder|CharsetProvider|Checkbox|CheckboxGroup|CheckboxMenuItem|CheckedInputStream|CheckedOutputStream|Checksum|Choice|ChoiceCallback|ChoiceFormat|Chromaticity|Cipher|CipherInputStream|CipherOutputStream|CipherSpi|Class|ClassCastException|ClassCircularityError|ClassDesc|ClassFormatError|ClassLoader|ClassNotFoundException|ClientRequestInfo|ClientRequestInfoOperations|ClientRequestInterceptor|ClientRequestInterceptorOperations|Clip|Clipboard|ClipboardOwner|Clob|Cloneable|CloneNotSupportedException|ClosedByInterruptException|ClosedChannelException|ClosedSelectorException|CMMException|Codec|CodecFactory|CodecFactoryHelper|CodecFactoryOperations|CodecOperations|CoderMalfunctionError|CoderResult|CodeSets|CodeSource|CodingErrorAction|CollationElementIterator|CollationKey|Collator|Collection|CollectionCertStoreParameters|Collections|Color|ColorChooserComponentFactory|ColorChooserUI|ColorConvertOp|ColorModel|ColorSelectionModel|ColorSpace|ColorSupported|ColorUIResource|ComboBoxEditor|ComboBoxModel|ComboBoxUI|ComboPopup|COMM_FAILURE|Comment|CommunicationException|Comparable|Comparator|Compiler|CompletionStatus|CompletionStatusHelper|Component|ComponentAdapter|ComponentColorModel|ComponentEvent|ComponentIdHelper|ComponentInputMap|ComponentInputMapUIResource|ComponentListener|ComponentOrientation|ComponentSampleModel|ComponentUI|ComponentView|Composite|CompositeContext|CompositeName|CompositeView|CompoundBorder|CompoundControl|CompoundEdit|CompoundName|Compression|ConcurrentModificationException|Configuration|ConfigurationException|ConfirmationCallback|ConnectException|ConnectIOException|Connection|ConnectionEvent|ConnectionEventListener|ConnectionPendingException|ConnectionPoolDataSource|ConsoleHandler|Constructor|Container|ContainerAdapter|ContainerEvent|ContainerListener|ContainerOrderFocusTraversalPolicy|ContentHandler|ContentHandlerFactory|ContentModel|Context|ContextList|ContextNotEmptyException|ContextualRenderedImageFactory|Control|ControlFactory|ControllerEventListener|ConvolveOp|CookieHolder|Copies|CopiesSupported|CRC32|CredentialExpiredException|CRL|CRLException|CRLSelector|CropImageFilter|CSS|CTX_RESTRICT_SCOPE|CubicCurve2D|Currency|Current|CurrentHelper|CurrentHolder|CurrentOperations|Cursor|Customizer|CustomMarshal|CustomValue|DATA_CONVERSION|DatabaseMetaData|DataBuffer|DataBufferByte|DataBufferDouble|DataBufferFloat|DataBufferInt|DataBufferShort|DataBufferUShort|DataFlavor|DataFormatException|DatagramChannel|DatagramPacket|DatagramSocket|DatagramSocketImpl|DatagramSocketImplFactory|DataInput|DataInputStream|DataLine|DataOutput|DataOutputStream|DataSource|DataTruncation|Date|DateFormat|DateFormatSymbols|DateFormatter|DateTimeAtCompleted|DateTimeAtCreation|DateTimeAtProcessing|DateTimeSyntax|DebugGraphics|DecimalFormat|DecimalFormatSymbols|DeclHandler|DefaultBoundedRangeModel|DefaultButtonModel|DefaultCaret|DefaultCellEditor|DefaultColorSelectionModel|DefaultComboBoxModel|DefaultDesktopManager|DefaultEditorKit|DefaultFocusManager|DefaultFocusTraversalPolicy|DefaultFormatter|DefaultFormatterFactory|DefaultHandler|DefaultHighlighter|DefaultKeyboardFocusManager|DefaultListCellRenderer|DefaultListModel|DefaultListSelectionModel|DefaultMenuLayout|DefaultMetalTheme|DefaultMutableTreeNode|DefaultPersistenceDelegate|DefaultSingleSelectionModel|DefaultStyledDocument|DefaultTableCellRenderer|DefaultTableColumnModel|DefaultTableModel|DefaultTextUI|DefaultTreeCellEditor|DefaultTreeCellRenderer|DefaultTreeModel|DefaultTreeSelectionModel|DefinitionKind|DefinitionKindHelper|Deflater|DeflaterOutputStream|Delegate|DelegationPermission|DESedeKeySpec|DesignMode|DESKeySpec|DesktopIconUI|DesktopManager|DesktopPaneUI|Destination|Destroyable|DestroyFailedException|DGC|DHGenParameterSpec|DHKey|DHParameterSpec|DHPrivateKey|DHPrivateKeySpec|DHPublicKey|DHPublicKeySpec|Dialog|Dictionary|DigestException|DigestInputStream|DigestOutputStream|Dimension|Dimension2D|DimensionUIResource|DirContext|DirectColorModel|DirectoryManager|DirObjectFactory|DirStateFactory|DisplayMode|DnDConstants|Doc|DocAttribute|DocAttributeSet|DocFlavor|DocPrintJob|Document|DocumentBuilder|DocumentBuilderFactory|DocumentEvent|DocumentFilter|DocumentFragment|DocumentHandler|DocumentListener|DocumentName|DocumentParser|DocumentType|DomainCombiner|DomainManager|DomainManagerOperations|DOMException|DOMImplementation|DOMLocator|DOMResult|DOMSource|Double|DoubleBuffer|DoubleHolder|DoubleSeqHelper|DoubleSeqHolder|DragGestureEvent|DragGestureListener|DragGestureRecognizer|DragSource|DragSourceAdapter|DragSourceContext|DragSourceDragEvent|DragSourceDropEvent|DragSourceEvent|DragSourceListener|DragSourceMotionListener|Driver|DriverManager|DriverPropertyInfo|DropTarget|DropTargetAdapter|DropTargetContext|DropTargetDragEvent|DropTargetDropEvent|DropTargetEvent|DropTargetListener|DSAKey|DSAKeyPairGenerator|DSAParameterSpec|DSAParams|DSAPrivateKey|DSAPrivateKeySpec|DSAPublicKey|DSAPublicKeySpec|DTD|DTDConstants|DTDHandler|DuplicateName|DuplicateNameHelper|DynamicImplementation|DynAny|DynAnyFactory|DynAnyFactoryHelper|DynAnyFactoryOperations|DynAnyHelper|DynAnyOperations|DynAnySeqHelper|DynArray|DynArrayHelper|DynArrayOperations|DynEnum|DynEnumHelper|DynEnumOperations|DynFixed|DynFixedHelper|DynFixedOperations|DynSequence|DynSequenceHelper|DynSequenceOperations|DynStruct|DynStructHelper|DynStructOperations|DynUnion|DynUnionHelper|DynUnionOperations|DynValue|DynValueBox|DynValueBoxOperations|DynValueCommon|DynValueCommonOperations|DynValueHelper|DynValueOperations|EditorKit|Element|ElementIterator|Ellipse2D|EmptyBorder|EmptyStackException|EncodedKeySpec|Encoder|Encoding|ENCODING_CDR_ENCAPS|EncryptedPrivateKeyInfo|Entity|EntityReference|EntityResolver|EnumControl|Enumeration|EnumSyntax|Environment|EOFException|Error|ErrorHandler|ErrorListener|ErrorManager|EtchedBorder|Event|EventContext|EventDirContext|EventHandler|EventListener|EventListenerList|EventListenerProxy|EventObject|EventQueue|EventSetDescriptor|Exception|ExceptionInInitializerError|ExceptionList|ExceptionListener|ExemptionMechanism|ExemptionMechanismException|ExemptionMechanismSpi|ExpandVetoException|ExportException|Expression|ExtendedRequest|ExtendedResponse|Externalizable|FactoryConfigurationError|FailedLoginException|FeatureDescriptor|Fidelity|Field|FieldNameHelper|FieldPosition|FieldView|File|FileCacheImageInputStream|FileCacheImageOutputStream|FileChannel|FileChooserUI|FileDescriptor|FileDialog|FileFilter|FileHandler|FileImageInputStream|FileImageOutputStream|FileInputStream|FileLock|FileLockInterruptionException|FilenameFilter|FileNameMap|FileNotFoundException|FileOutputStream|FilePermission|FileReader|FileSystemView|FileView|FileWriter|Filter|FilteredImageSource|FilterInputStream|FilterOutputStream|FilterReader|FilterWriter|Finishings|FixedHeightLayoutCache|FixedHolder|FlatteningPathIterator|FlavorException|FlavorMap|FlavorTable|Float|FloatBuffer|FloatControl|FloatHolder|FloatSeqHelper|FloatSeqHolder|FlowLayout|FlowView|FocusAdapter|FocusEvent|FocusListener|FocusManager|FocusTraversalPolicy|Font|FontFormatException|FontMetrics|FontRenderContext|FontUIResource|Format|FormatConversionProvider|FormatMismatch|FormatMismatchHelper|Formatter|FormView|ForwardRequest|ForwardRequestHelper|Frame|FREE_MEM|GapContent|GatheringByteChannel|GeneralPath|GeneralSecurityException|GlyphJustificationInfo|GlyphMetrics|GlyphVector|GlyphView|GradientPaint|GraphicAttribute|Graphics|Graphics2D|GraphicsConfigTemplate|GraphicsConfiguration|GraphicsDevice|GraphicsEnvironment|GrayFilter|GregorianCalendar|GridBagConstraints|GridBagLayout|GridLayout|Group|GSSContext|GSSCredential|GSSException|GSSManager|GSSName|Guard|GuardedObject|GZIPInputStream|GZIPOutputStream|Handler|HandlerBase|HandshakeCompletedEvent|HandshakeCompletedListener|HasControls|HashAttributeSet|HashDocAttributeSet|HashMap|HashPrintJobAttributeSet|HashPrintRequestAttributeSet|HashPrintServiceAttributeSet|HashSet|Hashtable|HeadlessException|HierarchyBoundsAdapter|HierarchyBoundsListener|HierarchyEvent|HierarchyListener|Highlighter|HostnameVerifier|HTML|HTMLDocument|HTMLEditorKit|HTMLFrameHyperlinkEvent|HTMLWriter|HttpsURLConnection|HttpURLConnection|HyperlinkEvent|HyperlinkListener|ICC_ColorSpace|ICC_Profile|ICC_ProfileGray|ICC_ProfileRGB|Icon|IconUIResource|IconView|ID_ASSIGNMENT_POLICY_ID|ID_UNIQUENESS_POLICY_ID|IdAssignmentPolicy|IdAssignmentPolicyOperations|IdAssignmentPolicyValue|IdentifierHelper|Identity|IdentityHashMap|IdentityScope|IDLEntity|IDLType|IDLTypeHelper|IDLTypeOperations|IdUniquenessPolicy|IdUniquenessPolicyOperations|IdUniquenessPolicyValue|IIOByteBuffer|IIOException|IIOImage|IIOInvalidTreeException|IIOMetadata|IIOMetadataController|IIOMetadataFormat|IIOMetadataFormatImpl|IIOMetadataNode|IIOParam|IIOParamController|IIOReadProgressListener|IIOReadUpdateListener|IIOReadWarningListener|IIORegistry|IIOServiceProvider|IIOWriteProgressListener|IIOWriteWarningListener|IllegalAccessError|IllegalAccessException|IllegalArgumentException|IllegalBlockingModeException|IllegalBlockSizeException|IllegalCharsetNameException|IllegalComponentStateException|IllegalMonitorStateException|IllegalPathStateException|IllegalSelectorException|IllegalStateException|IllegalThreadStateException|Image|ImageCapabilities|ImageConsumer|ImageFilter|ImageGraphicAttribute|ImageIcon|ImageInputStream|ImageInputStreamImpl|ImageInputStreamSpi|ImageIO|ImageObserver|ImageOutputStream|ImageOutputStreamImpl|ImageOutputStreamSpi|ImageProducer|ImageReader|ImageReaderSpi|ImageReaderWriterSpi|ImageReadParam|ImageTranscoder|ImageTranscoderSpi|ImageTypeSpecifier|ImageView|ImageWriteParam|ImageWriter|ImageWriterSpi|ImagingOpException|IMP_LIMIT|IMPLICIT_ACTIVATION_POLICY_ID|ImplicitActivationPolicy|ImplicitActivationPolicyOperations|ImplicitActivationPolicyValue|IncompatibleClassChangeError|InconsistentTypeCode|InconsistentTypeCodeHelper|IndexColorModel|IndexedPropertyDescriptor|IndexOutOfBoundsException|IndirectionException|Inet4Address|Inet6Address|InetAddress|InetSocketAddress|Inflater|InflaterInputStream|InheritableThreadLocal|InitialContext|InitialContextFactory|InitialContextFactoryBuilder|InitialDirContext|INITIALIZE|InitialLdapContext|InlineView|InputContext|InputEvent|InputMap|InputMapUIResource|InputMethod|InputMethodContext|InputMethodDescriptor|InputMethodEvent|InputMethodHighlight|InputMethodListener|InputMethodRequests|InputSource|InputStream|InputStreamReader|InputSubset|InputVerifier|Insets|InsetsUIResource|InstantiationError|InstantiationException|Instrument|InsufficientResourcesException|IntBuffer|Integer|IntegerSyntax|Interceptor|InterceptorOperations|INTERNAL|InternalError|InternalFrameAdapter|InternalFrameEvent|InternalFrameFocusTraversalPolicy|InternalFrameListener|InternalFrameUI|InternationalFormatter|InterruptedException|InterruptedIOException|InterruptedNamingException|InterruptibleChannel|INTF_REPOS|IntHolder|IntrospectionException|Introspector|INV_FLAG|INV_IDENT|INV_OBJREF|INV_POLICY|Invalid|INVALID_TRANSACTION|InvalidAddress|InvalidAddressHelper|InvalidAddressHolder|InvalidAlgorithmParameterException|InvalidAttributeIdentifierException|InvalidAttributesException|InvalidAttributeValueException|InvalidClassException|InvalidDnDOperationException|InvalidKeyException|InvalidKeySpecException|InvalidMarkException|InvalidMidiDataException|InvalidName|InvalidNameException|InvalidNameHelper|InvalidNameHolder|InvalidObjectException|InvalidParameterException|InvalidParameterSpecException|InvalidPolicy|InvalidPolicyHelper|InvalidPreferencesFormatException|InvalidSearchControlsException|InvalidSearchFilterException|InvalidSeq|InvalidSlot|InvalidSlotHelper|InvalidTransactionException|InvalidTypeForEncoding|InvalidTypeForEncodingHelper|InvalidValue|InvalidValueHelper|InvocationEvent|InvocationHandler|InvocationTargetException|InvokeHandler|IOException|IOR|IORHelper|IORHolder|IORInfo|IORInfoOperations|IORInterceptor|IORInterceptorOperations|IRObject|IRObjectOperations|IstringHelper|ItemEvent|ItemListener|ItemSelectable|Iterator|IvParameterSpec|JApplet|JarEntry|JarException|JarFile|JarInputStream|JarOutputStream|JarURLConnection|JButton|JCheckBox|JCheckBoxMenuItem|JColorChooser|JComboBox|JComponent|JDesktopPane|JDialog|JEditorPane|JFileChooser|JFormattedTextField|JFrame|JInternalFrame|JLabel|JLayeredPane|JList|JMenu|JMenuBar|JMenuItem|JobAttributes|JobHoldUntil|JobImpressions|JobImpressionsCompleted|JobImpressionsSupported|JobKOctets|JobKOctetsProcessed|JobKOctetsSupported|JobMediaSheets|JobMediaSheetsCompleted|JobMediaSheetsSupported|JobMessageFromOperator|JobName|JobOriginatingUserName|JobPriority|JobPrioritySupported|JobSheets|JobState|JobStateReason|JobStateReasons|JOptionPane|JPanel|JPasswordField|JPEGHuffmanTable|JPEGImageReadParam|JPEGImageWriteParam|JPEGQTable|JPopupMenu|JProgressBar|JRadioButton|JRadioButtonMenuItem|JRootPane|JScrollBar|JScrollPane|JSeparator|JSlider|JSpinner|JSplitPane|JTabbedPane|JTable|JTableHeader|JTextArea|JTextComponent|JTextField|JTextPane|JToggleButton|JToolBar|JToolTip|JTree|JViewport|JWindow|KerberosKey|KerberosPrincipal|KerberosTicket|Kernel|Key|KeyAdapter|KeyAgreement|KeyAgreementSpi|KeyboardFocusManager|KeyEvent|KeyEventDispatcher|KeyEventPostProcessor|KeyException|KeyFactory|KeyFactorySpi|KeyGenerator|KeyGeneratorSpi|KeyListener|KeyManagementException|KeyManager|KeyManagerFactory|KeyManagerFactorySpi|Keymap|KeyPair|KeyPairGenerator|KeyPairGeneratorSpi|KeySpec|KeyStore|KeyStoreException|KeyStoreSpi|KeyStroke|Label|LabelUI|LabelView|LanguageCallback|LastOwnerException|LayeredHighlighter|LayoutFocusTraversalPolicy|LayoutManager|LayoutManager2|LayoutQueue|LDAPCertStoreParameters|LdapContext|LdapReferralException|Lease|Level|LexicalHandler|LIFESPAN_POLICY_ID|LifespanPolicy|LifespanPolicyOperations|LifespanPolicyValue|LimitExceededException|Line|Line2D|LineBorder|LineBreakMeasurer|LineEvent|LineListener|LineMetrics|LineNumberInputStream|LineNumberReader|LineUnavailableException|LinkageError|LinkedHashMap|LinkedHashSet|LinkedList|LinkException|LinkLoopException|LinkRef|List|ListCellRenderer|ListDataEvent|ListDataListener|ListIterator|ListModel|ListResourceBundle|ListSelectionEvent|ListSelectionListener|ListSelectionModel|ListUI|ListView|LoaderHandler|Locale|LocalObject|LocateRegistry|LOCATION_FORWARD|Locator|LocatorImpl|Logger|LoggingPermission|LoginContext|LoginException|LoginModule|LogManager|LogRecord|LogStream|Long|LongBuffer|LongHolder|LongLongSeqHelper|LongLongSeqHolder|LongSeqHelper|LongSeqHolder|LookAndFeel|LookupOp|LookupTable|Mac|MacSpi|MalformedInputException|MalformedLinkException|MalformedURLException|ManagerFactoryParameters|Manifest|Map|MappedByteBuffer|MARSHAL|MarshalException|MarshalledObject|MaskFormatter|Matcher|Math|MatteBorder|Media|MediaName|MediaPrintableArea|MediaSize|MediaSizeName|MediaTracker|MediaTray|Member|MemoryCacheImageInputStream|MemoryCacheImageOutputStream|MemoryHandler|MemoryImageSource|Menu|MenuBar|MenuBarUI|MenuComponent|MenuContainer|MenuDragMouseEvent|MenuDragMouseListener|MenuElement|MenuEvent|MenuItem|MenuItemUI|MenuKeyEvent|MenuKeyListener|MenuListener|MenuSelectionManager|MenuShortcut|MessageDigest|MessageDigestSpi|MessageFormat|MessageProp|MetaEventListener|MetalBorders|MetalButtonUI|MetalCheckBoxIcon|MetalCheckBoxUI|MetalComboBoxButton|MetalComboBoxEditor|MetalComboBoxIcon|MetalComboBoxUI|MetalDesktopIconUI|MetalFileChooserUI|MetalIconFactory|MetalInternalFrameTitlePane|MetalInternalFrameUI|MetalLabelUI|MetalLookAndFeel|MetalPopupMenuSeparatorUI|MetalProgressBarUI|MetalRadioButtonUI|MetalRootPaneUI|MetalScrollBarUI|MetalScrollButton|MetalScrollPaneUI|MetalSeparatorUI|MetalSliderUI|MetalSplitPaneUI|MetalTabbedPaneUI|MetalTextFieldUI|MetalTheme|MetalToggleButtonUI|MetalToolBarUI|MetalToolTipUI|MetalTreeUI|MetaMessage|Method|MethodDescriptor|MidiChannel|MidiDevice|MidiDeviceProvider|MidiEvent|MidiFileFormat|MidiFileReader|MidiFileWriter|MidiMessage|MidiSystem|MidiUnavailableException|MimeTypeParseException|MinimalHTMLWriter|MissingResourceException|Mixer|MixerProvider|ModificationItem|Modifier|MouseAdapter|MouseDragGestureRecognizer|MouseEvent|MouseInputAdapter|MouseInputListener|MouseListener|MouseMotionAdapter|MouseMotionListener|MouseWheelEvent|MouseWheelListener|MultiButtonUI|MulticastSocket|MultiColorChooserUI|MultiComboBoxUI|MultiDesktopIconUI|MultiDesktopPaneUI|MultiDoc|MultiDocPrintJob|MultiDocPrintService|MultiFileChooserUI|MultiInternalFrameUI|MultiLabelUI|MultiListUI|MultiLookAndFeel|MultiMenuBarUI|MultiMenuItemUI|MultiOptionPaneUI|MultiPanelUI|MultiPixelPackedSampleModel|MultipleComponentProfileHelper|MultipleComponentProfileHolder|MultipleDocumentHandling|MultipleMaster|MultiPopupMenuUI|MultiProgressBarUI|MultiRootPaneUI|MultiScrollBarUI|MultiScrollPaneUI|MultiSeparatorUI|MultiSliderUI|MultiSpinnerUI|MultiSplitPaneUI|MultiTabbedPaneUI|MultiTableHeaderUI|MultiTableUI|MultiTextUI|MultiToolBarUI|MultiToolTipUI|MultiTreeUI|MultiViewportUI|MutableAttributeSet|MutableComboBoxModel|MutableTreeNode|Name|NameAlreadyBoundException|NameCallback|NameClassPair|NameComponent|NameComponentHelper|NameComponentHolder|NamedNodeMap|NamedValue|NameDynAnyPair|NameDynAnyPairHelper|NameDynAnyPairSeqHelper|NameHelper|NameHolder|NameNotFoundException|NameParser|NamespaceChangeListener|NamespaceSupport|NameValuePair|NameValuePairHelper|NameValuePairSeqHelper|Naming|NamingContext|NamingContextExt|NamingContextExtHelper|NamingContextExtHolder|NamingContextExtOperations|NamingContextExtPOA|NamingContextHelper|NamingContextHolder|NamingContextOperations|NamingContextPOA|NamingEnumeration|NamingEvent|NamingException|NamingExceptionEvent|NamingListener|NamingManager|NamingSecurityException|NavigationFilter|NegativeArraySizeException|NetPermission|NetworkInterface|NO_IMPLEMENT|NO_MEMORY|NO_PERMISSION|NO_RESOURCES|NO_RESPONSE|NoClassDefFoundError|NoConnectionPendingException|NoContext|NoContextHelper|Node|NodeChangeEvent|NodeChangeListener|NodeList|NoInitialContextException|NoninvertibleTransformException|NonReadableChannelException|NonWritableChannelException|NoPermissionException|NoRouteToHostException|NoServant|NoServantHelper|NoSuchAlgorithmException|NoSuchAttributeException|NoSuchElementException|NoSuchFieldError|NoSuchFieldException|NoSuchMethodError|NoSuchMethodException|NoSuchObjectException|NoSuchPaddingException|NoSuchProviderException|NotActiveException|Notation|NotBoundException|NotContextException|NotEmpty|NotEmptyHelper|NotEmptyHolder|NotFound|NotFoundHelper|NotFoundHolder|NotFoundReason|NotFoundReasonHelper|NotFoundReasonHolder|NotOwnerException|NotSerializableException|NotYetBoundException|NotYetConnectedException|NullCipher|NullPointerException|Number|NumberFormat|NumberFormatException|NumberFormatter|NumberOfDocuments|NumberOfInterveningJobs|NumberUp|NumberUpSupported|NumericShaper|NVList|OBJ_ADAPTER|Object|OBJECT_NOT_EXIST|ObjectAlreadyActive|ObjectAlreadyActiveHelper|ObjectChangeListener|ObjectFactory|ObjectFactoryBuilder|ObjectHelper|ObjectHolder|ObjectIdHelper|ObjectImpl|ObjectInput|ObjectInputStream|ObjectInputValidation|ObjectNotActive|ObjectNotActiveHelper|ObjectOutput|ObjectOutputStream|ObjectStreamClass|ObjectStreamConstants|ObjectStreamException|ObjectStreamField|ObjectView|ObjID|Observable|Observer|OctetSeqHelper|OctetSeqHolder|Oid|OMGVMCID|OpenType|Operation|OperationNotSupportedException|Option|OptionalDataException|OptionPaneUI|ORB|ORBInitializer|ORBInitializerOperations|ORBInitInfo|ORBInitInfoOperations|OrientationRequested|OutOfMemoryError|OutputDeviceAssigned|OutputKeys|OutputStream|OutputStreamWriter|OverlappingFileLockException|OverlayLayout|Owner|Package|PackedColorModel|Pageable|PageAttributes|PageFormat|PageRanges|PagesPerMinute|PagesPerMinuteColor|Paint|PaintContext|PaintEvent|Panel|PanelUI|Paper|ParagraphView|Parameter|ParameterBlock|ParameterDescriptor|ParameterMetaData|ParameterMode|ParameterModeHelper|ParameterModeHolder|ParseException|ParsePosition|Parser|ParserAdapter|ParserConfigurationException|ParserDelegator|ParserFactory|PartialResultException|PasswordAuthentication|PasswordCallback|PasswordView|Patch|PathIterator|Pattern|PatternSyntaxException|PBEKey|PBEKeySpec|PBEParameterSpec|PDLOverrideSupported|Permission|PermissionCollection|Permissions|PERSIST_STORE|PersistenceDelegate|PhantomReference|Pipe|PipedInputStream|PipedOutputStream|PipedReader|PipedWriter|PixelGrabber|PixelInterleavedSampleModel|PKCS8EncodedKeySpec|PKIXBuilderParameters|PKIXCertPathBuilderResult|PKIXCertPathChecker|PKIXCertPathValidatorResult|PKIXParameters|PlainDocument|PlainView|POA|POAHelper|POAManager|POAManagerOperations|POAOperations|Point|Point2D|Policy|PolicyError|PolicyErrorCodeHelper|PolicyErrorHelper|PolicyErrorHolder|PolicyFactory|PolicyFactoryOperations|PolicyHelper|PolicyHolder|PolicyListHelper|PolicyListHolder|PolicyNode|PolicyOperations|PolicyQualifierInfo|PolicyTypeHelper|Polygon|PooledConnection|Popup|PopupFactory|PopupMenu|PopupMenuEvent|PopupMenuListener|PopupMenuUI|Port|PortableRemoteObject|PortableRemoteObjectDelegate|PortUnreachableException|Position|PreferenceChangeEvent|PreferenceChangeListener|Preferences|PreferencesFactory|PreparedStatement|PresentationDirection|Principal|PrincipalHolder|Printable|PrinterAbortException|PrinterException|PrinterGraphics|PrinterInfo|PrinterIOException|PrinterIsAcceptingJobs|PrinterJob|PrinterLocation|PrinterMakeAndModel|PrinterMessageFromOperator|PrinterMoreInfo|PrinterMoreInfoManufacturer|PrinterName|PrinterResolution|PrinterState|PrinterStateReason|PrinterStateReasons|PrinterURI|PrintEvent|PrintException|PrintGraphics|PrintJob|PrintJobAdapter|PrintJobAttribute|PrintJobAttributeEvent|PrintJobAttributeListener|PrintJobAttributeSet|PrintJobEvent|PrintJobListener|PrintQuality|PrintRequestAttribute|PrintRequestAttributeSet|PrintService|PrintServiceAttribute|PrintServiceAttributeEvent|PrintServiceAttributeListener|PrintServiceAttributeSet|PrintServiceLookup|PrintStream|PrintWriter|PRIVATE_MEMBER|PrivateCredentialPermission|PrivateKey|PrivilegedAction|PrivilegedActionException|PrivilegedExceptionAction|Process|ProcessingInstruction|ProfileDataException|ProfileIdHelper|ProgressBarUI|ProgressMonitor|ProgressMonitorInputStream|Properties|PropertyChangeEvent|PropertyChangeListener|PropertyChangeListenerProxy|PropertyChangeSupport|PropertyDescriptor|PropertyEditor|PropertyEditorManager|PropertyEditorSupport|PropertyPermission|PropertyResourceBundle|PropertyVetoException|ProtectionDomain|ProtocolException|Provider|ProviderException|Proxy|PSSParameterSpec|PUBLIC_MEMBER|PublicKey|PushbackInputStream|PushbackReader|QuadCurve2D|QueuedJobCount|Random|RandomAccess|RandomAccessFile|Raster|RasterFormatException|RasterOp|RC2ParameterSpec|RC5ParameterSpec|ReadableByteChannel|Reader|ReadOnlyBufferException|Receiver|Rectangle|Rectangle2D|RectangularShape|Ref|RefAddr|Reference|Referenceable|ReferenceQueue|ReferenceUriSchemesSupported|ReferralException|ReflectPermission|Refreshable|RefreshFailedException|RegisterableService|Registry|RegistryHandler|RemarshalException|Remote|RemoteCall|RemoteException|RemoteObject|RemoteRef|RemoteServer|RemoteStub|RenderableImage|RenderableImageOp|RenderableImageProducer|RenderContext|RenderedImage|RenderedImageFactory|Renderer|RenderingHints|RepaintManager|ReplicateScaleFilter|RepositoryIdHelper|Request|REQUEST_PROCESSING_POLICY_ID|RequestInfo|RequestInfoOperations|RequestingUserName|RequestProcessingPolicy|RequestProcessingPolicyOperations|RequestProcessingPolicyValue|RescaleOp|ResolutionSyntax|Resolver|ResolveResult|ResourceBundle|ResponseHandler|Result|ResultSet|ResultSetMetaData|ReverbType|RGBImageFilter|RMIClassLoader|RMIClassLoaderSpi|RMIClientSocketFactory|RMIFailureHandler|RMISecurityException|RMISecurityManager|RMIServerSocketFactory|RMISocketFactory|Robot|RootPaneContainer|RootPaneUI|RoundRectangle2D|RowMapper|RowSet|RowSetEvent|RowSetInternal|RowSetListener|RowSetMetaData|RowSetReader|RowSetWriter|RSAKey|RSAKeyGenParameterSpec|RSAMultiPrimePrivateCrtKey|RSAMultiPrimePrivateCrtKeySpec|RSAOtherPrimeInfo|RSAPrivateCrtKey|RSAPrivateCrtKeySpec|RSAPrivateKey|RSAPrivateKeySpec|RSAPublicKey|RSAPublicKeySpec|RTFEditorKit|RuleBasedCollator|Runnable|Runtime|RunTime|RuntimeException|RunTimeOperations|RuntimePermission|SampleModel|Savepoint|SAXException|SAXNotRecognizedException|SAXNotSupportedException|SAXParseException|SAXParser|SAXParserFactory|SAXResult|SAXSource|SAXTransformerFactory|ScatteringByteChannel|SchemaViolationException|Scrollable|Scrollbar|ScrollBarUI|ScrollPane|ScrollPaneAdjustable|ScrollPaneConstants|ScrollPaneLayout|ScrollPaneUI|SealedObject|SearchControls|SearchResult|SecretKey|SecretKeyFactory|SecretKeyFactorySpi|SecretKeySpec|SecureClassLoader|SecureRandom|SecureRandomSpi|Security|SecurityException|SecurityManager|SecurityPermission|Segment|SelectableChannel|SelectionKey|Selector|SelectorProvider|SeparatorUI|Sequence|SequenceInputStream|Sequencer|Serializable|SerializablePermission|Servant|SERVANT_RETENTION_POLICY_ID|ServantActivator|ServantActivatorHelper|ServantActivatorOperations|ServantActivatorPOA|ServantAlreadyActive|ServantAlreadyActiveHelper|ServantLocator|ServantLocatorHelper|ServantLocatorOperations|ServantLocatorPOA|ServantManager|ServantManagerOperations|ServantNotActive|ServantNotActiveHelper|ServantObject|ServantRetentionPolicy|ServantRetentionPolicyOperations|ServantRetentionPolicyValue|ServerCloneException|ServerError|ServerException|ServerNotActiveException|ServerRef|ServerRequest|ServerRequestInfo|ServerRequestInfoOperations|ServerRequestInterceptor|ServerRequestInterceptorOperations|ServerRuntimeException|ServerSocket|ServerSocketChannel|ServerSocketFactory|ServiceContext|ServiceContextHelper|ServiceContextHolder|ServiceContextListHelper|ServiceContextListHolder|ServiceDetail|ServiceDetailHelper|ServiceIdHelper|ServiceInformation|ServiceInformationHelper|ServiceInformationHolder|ServicePermission|ServiceRegistry|ServiceUI|ServiceUIFactory|ServiceUnavailableException|Set|SetOfIntegerSyntax|SetOverrideType|SetOverrideTypeHelper|Severity|Shape|ShapeGraphicAttribute|SheetCollate|Short|ShortBuffer|ShortBufferException|ShortHolder|ShortLookupTable|ShortMessage|ShortSeqHelper|ShortSeqHolder|Sides|Signature|SignatureException|SignatureSpi|SignedObject|Signer|SimpleAttributeSet|SimpleBeanInfo|SimpleDateFormat|SimpleDoc|SimpleFormatter|SimpleTimeZone|SinglePixelPackedSampleModel|SingleSelectionModel|Size2DSyntax|SizeLimitExceededException|SizeRequirements|SizeSequence|Skeleton|SkeletonMismatchException|SkeletonNotFoundException|SliderUI|Socket|SocketAddress|SocketChannel|SocketException|SocketFactory|SocketHandler|SocketImpl|SocketImplFactory|SocketOptions|SocketPermission|SocketSecurityException|SocketTimeoutException|SoftBevelBorder|SoftReference|SortedMap|SortedSet|SortingFocusTraversalPolicy|Soundbank|SoundbankReader|SoundbankResource|Source|SourceDataLine|SourceLocator|SpinnerDateModel|SpinnerListModel|SpinnerModel|SpinnerNumberModel|SpinnerUI|SplitPaneUI|Spring|SpringLayout|SQLData|SQLException|SQLInput|SQLOutput|SQLPermission|SQLWarning|SSLContext|SSLContextSpi|SSLException|SSLHandshakeException|SSLKeyException|SSLPeerUnverifiedException|SSLPermission|SSLProtocolException|SSLServerSocket|SSLServerSocketFactory|SSLSession|SSLSessionBindingEvent|SSLSessionBindingListener|SSLSessionContext|SSLSocket|SSLSocketFactory|Stack|StackOverflowError|StackTraceElement|StartTlsRequest|StartTlsResponse|State|StateEdit|StateEditable|StateFactory|Statement|Streamable|StreamableValue|StreamCorruptedException|StreamHandler|StreamPrintService|StreamPrintServiceFactory|StreamResult|StreamSource|StreamTokenizer|StrictMath|String|StringBuffer|StringBufferInputStream|StringCharacterIterator|StringContent|StringHolder|StringIndexOutOfBoundsException|StringNameHelper|StringReader|StringRefAddr|StringSelection|StringSeqHelper|StringSeqHolder|StringTokenizer|StringValueHelper|StringWriter|Stroke|Struct|StructMember|StructMemberHelper|Stub|StubDelegate|StubNotFoundException|Style|StyleConstants|StyleContext|StyledDocument|StyledEditorKit|StyleSheet|Subject|SubjectDomainCombiner|SUCCESSFUL|SupportedValuesAttribute|SwingConstants|SwingPropertyChangeSupport|SwingUtilities|SYNC_WITH_TRANSPORT|SyncFailedException|SyncScopeHelper|Synthesizer|SysexMessage|System|SYSTEM_EXCEPTION|SystemColor|SystemException|SystemFlavorMap|TabableView|TabbedPaneUI|TabExpander|TableCellEditor|TableCellRenderer|TableColumn|TableColumnModel|TableColumnModelEvent|TableColumnModelListener|TableHeaderUI|TableModel|TableModelEvent|TableModelListener|TableUI|TableView|TabSet|TabStop|TAG_ALTERNATE_IIOP_ADDRESS|TAG_CODE_SETS|TAG_INTERNET_IOP|TAG_JAVA_CODEBASE|TAG_MULTIPLE_COMPONENTS|TAG_ORB_TYPE|TAG_POLICIES|TagElement|TaggedComponent|TaggedComponentHelper|TaggedComponentHolder|TaggedProfile|TaggedProfileHelper|TaggedProfileHolder|TargetDataLine|TCKind|Templates|TemplatesHandler|Text|TextAction|TextArea|TextAttribute|TextComponent|TextEvent|TextField|TextHitInfo|TextInputCallback|TextLayout|TextListener|TextMeasurer|TextOutputCallback|TextSyntax|TextUI|TexturePaint|Thread|THREAD_POLICY_ID|ThreadDeath|ThreadGroup|ThreadLocal|ThreadPolicy|ThreadPolicyOperations|ThreadPolicyValue|Throwable|Tie|TileObserver|Time|TimeLimitExceededException|Timer|TimerTask|Timestamp|TimeZone|TitledBorder|ToolBarUI|Toolkit|ToolTipManager|ToolTipUI|TooManyListenersException|Track|TRANSACTION_REQUIRED|TRANSACTION_ROLLEDBACK|TransactionRequiredException|TransactionRolledbackException|TransactionService|Transferable|TransferHandler|TransformAttribute|Transformer|TransformerConfigurationException|TransformerException|TransformerFactory|TransformerFactoryConfigurationError|TransformerHandler|TRANSIENT|Transmitter|Transparency|TRANSPORT_RETRY|TreeCellEditor|TreeCellRenderer|TreeExpansionEvent|TreeExpansionListener|TreeMap|TreeModel|TreeModelEvent|TreeModelListener|TreeNode|TreePath|TreeSelectionEvent|TreeSelectionListener|TreeSelectionModel|TreeSet|TreeUI|TreeWillExpandListener|TrustAnchor|TrustManager|TrustManagerFactory|TrustManagerFactorySpi|TypeCode|TypeCodeHolder|TypeMismatch|TypeMismatchHelper|Types|UID|UIDefaults|UIManager|UIResource|ULongLongSeqHelper|ULongLongSeqHolder|ULongSeqHelper|ULongSeqHolder|UndeclaredThrowableException|UndoableEdit|UndoableEditEvent|UndoableEditListener|UndoableEditSupport|UndoManager|UnexpectedException|UnicastRemoteObject|UnionMember|UnionMemberHelper|UNKNOWN|UnknownEncoding|UnknownEncodingHelper|UnknownError|UnknownException|UnknownGroupException|UnknownHostException|UnknownObjectException|UnknownServiceException|UnknownUserException|UnknownUserExceptionHelper|UnknownUserExceptionHolder|UnmappableCharacterException|UnmarshalException|UnmodifiableSetException|UnrecoverableKeyException|Unreferenced|UnresolvedAddressException|UnresolvedPermission|UnsatisfiedLinkError|UnsolicitedNotification|UnsolicitedNotificationEvent|UnsolicitedNotificationListener|UNSUPPORTED_POLICY|UNSUPPORTED_POLICY_VALUE|UnsupportedAddressTypeException|UnsupportedAudioFileException|UnsupportedCallbackException|UnsupportedCharsetException|UnsupportedClassVersionError|UnsupportedEncodingException|UnsupportedFlavorException|UnsupportedLookAndFeelException|UnsupportedOperationException|URI|URIException|URIResolver|URISyntax|URISyntaxException|URL|URLClassLoader|URLConnection|URLDecoder|URLEncoder|URLStreamHandler|URLStreamHandlerFactory|URLStringHelper|USER_EXCEPTION|UserException|UShortSeqHelper|UShortSeqHolder|UTFDataFormatException|Util|UtilDelegate|Utilities|ValueBase|ValueBaseHelper|ValueBaseHolder|ValueFactory|ValueHandler|ValueMember|ValueMemberHelper|VariableHeightLayoutCache|Vector|VerifyError|VersionSpecHelper|VetoableChangeListener|VetoableChangeListenerProxy|VetoableChangeSupport|View|ViewFactory|ViewportLayout|ViewportUI|VirtualMachineError|Visibility|VisibilityHelper|VM_ABSTRACT|VM_CUSTOM|VM_NONE|VM_TRUNCATABLE|VMID|VoiceStatus|Void|VolatileImage|WCharSeqHelper|WCharSeqHolder|WeakHashMap|WeakReference|Window|WindowAdapter|WindowConstants|WindowEvent|WindowFocusListener|WindowListener|WindowStateListener|WrappedPlainView|WritableByteChannel|WritableRaster|WritableRenderedImage|WriteAbortedException|Writer|WrongAdapter|WrongAdapterHelper|WrongPolicy|WrongPolicyHelper|WrongTransaction|WrongTransactionHelper|WrongTransactionHolder|WStringSeqHelper|WStringSeqHolder|WStringValueHelper|X500Principal|X500PrivateCredential|X509Certificate|X509CertSelector|X509CRL|X509CRLEntry|X509CRLSelector|X509EncodedKeySpec|X509Extension|X509KeyManager|X509TrustManager|XAConnection|XADataSource|XAException|XAResource|Xid|XMLDecoder|XMLEncoder|XMLFilter|XMLFilterImpl|XMLFormatter|XMLReader|XMLReaderAdapter|XMLReaderFactory|ZipEntry|ZipException|ZipFile|ZipInputStream|ZipOutputStream|ZoneView|_BindingIteratorImplBase|_BindingIteratorStub|_DynAnyFactoryStub|_DynAnyStub|_DynArrayStub|_DynEnumStub|_DynFixedStub|_DynSequenceStub|_DynStructStub|_DynUnionStub|_DynValueStub|_IDLTypeStub|_NamingContextExtStub|_NamingContextImplBase|_NamingContextStub|_PolicyStub|_Remote_Stub|_ServantActivatorStub|_ServantLocatorStub)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'types' => '/^(boolean|byte|char|const|double|final|float|int|long|short|static|void)$/',
+ 'reserved' => '/^(import|package|abstract|break|case|catch|class|continue|default|do|else|extends|false|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|super|strictfp|switch|synchronized|this|throws|throw|transient|true|try|volatile|while)$/',
+ 'builtin' => '/^(AbstractAction|AbstractBorder|AbstractButton|AbstractCellEditor|AbstractCollection|AbstractColorChooserPanel|AbstractDocument|AbstractInterruptibleChannel|AbstractLayoutCache|AbstractList|AbstractListModel|AbstractMap|AbstractMethodError|AbstractPreferences|AbstractSelectableChannel|AbstractSelectionKey|AbstractSelector|AbstractSequentialList|AbstractSet|AbstractSpinnerModel|AbstractTableModel|AbstractUndoableEdit|AbstractWriter|AccessControlContext|AccessControlException|AccessController|AccessException|Accessible|AccessibleAction|AccessibleBundle|AccessibleComponent|AccessibleContext|AccessibleEditableText|AccessibleExtendedComponent|AccessibleExtendedTable|AccessibleHyperlink|AccessibleHypertext|AccessibleIcon|AccessibleKeyBinding|AccessibleObject|AccessibleRelation|AccessibleRelationSet|AccessibleResourceBundle|AccessibleRole|AccessibleSelection|AccessibleState|AccessibleStateSet|AccessibleTable|AccessibleTableModelChange|AccessibleText|AccessibleValue|AccountExpiredException|Acl|AclEntry|AclNotFoundException|Action|ActionEvent|ActionListener|ActionMap|ActionMapUIResource|Activatable|ActivateFailedException|ActivationDesc|ActivationException|ActivationGroup|ActivationGroup_Stub|ActivationGroupDesc|ActivationGroupID|ActivationID|ActivationInstantiator|ActivationMonitor|ActivationSystem|Activator|ActiveEvent|AdapterActivator|AdapterActivatorOperations|AdapterAlreadyExists|AdapterAlreadyExistsHelper|AdapterInactive|AdapterInactiveHelper|AdapterNonExistent|AdapterNonExistentHelper|AddressHelper|Adjustable|AdjustmentEvent|AdjustmentListener|Adler32|AffineTransform|AffineTransformOp|AlgorithmParameterGenerator|AlgorithmParameterGeneratorSpi|AlgorithmParameters|AlgorithmParameterSpec|AlgorithmParametersSpi|AllPermission|AlphaComposite|AlreadyBound|AlreadyBoundException|AlreadyBoundHelper|AlreadyBoundHolder|AlreadyConnectedException|AncestorEvent|AncestorListener|Annotation|Any|AnyHolder|AnySeqHelper|AnySeqHolder|AppConfigurationEntry|Applet|AppletContext|AppletInitializer|AppletStub|ApplicationException|Arc2D|Area|AreaAveragingScaleFilter|ARG_IN|ARG_INOUT|ARG_OUT|ArithmeticException|Array|ArrayIndexOutOfBoundsException|ArrayList|Arrays|ArrayStoreException|AssertionError|AsyncBoxView|AsynchronousCloseException|Attr|Attribute|AttributedCharacterIterator|AttributedString|AttributeException|AttributeInUseException|AttributeList|AttributeListImpl|AttributeModificationException|Attributes|AttributeSet|AttributeSetUtilities|AttributesImpl|AudioClip|AudioFileFormat|AudioFileReader|AudioFileWriter|AudioFormat|AudioInputStream|AudioPermission|AudioSystem|AuthenticationException|AuthenticationNotSupportedException|Authenticator|AuthPermission|Autoscroll|AWTError|AWTEvent|AWTEventListener|AWTEventListenerProxy|AWTEventMulticaster|AWTException|AWTKeyStroke|AWTPermission|BackingStoreException|BAD_CONTEXT|BAD_INV_ORDER|BAD_OPERATION|BAD_PARAM|BAD_POLICY|BAD_POLICY_TYPE|BAD_POLICY_VALUE|BAD_TYPECODE|BadKind|BadLocationException|BadPaddingException|BandCombineOp|BandedSampleModel|BasicArrowButton|BasicAttribute|BasicAttributes|BasicBorders|BasicButtonListener|BasicButtonUI|BasicCheckBoxMenuItemUI|BasicCheckBoxUI|BasicColorChooserUI|BasicComboBoxEditor|BasicComboBoxRenderer|BasicComboBoxUI|BasicComboPopup|BasicDesktopIconUI|BasicDesktopPaneUI|BasicDirectoryModel|BasicEditorPaneUI|BasicFileChooserUI|BasicFormattedTextFieldUI|BasicGraphicsUtils|BasicHTML|BasicIconFactory|BasicInternalFrameTitlePane|BasicInternalFrameUI|BasicLabelUI|BasicListUI|BasicLookAndFeel|BasicMenuBarUI|BasicMenuItemUI|BasicMenuUI|BasicOptionPaneUI|BasicPanelUI|BasicPasswordFieldUI|BasicPermission|BasicPopupMenuSeparatorUI|BasicPopupMenuUI|BasicProgressBarUI|BasicRadioButtonMenuItemUI|BasicRadioButtonUI|BasicRootPaneUI|BasicScrollBarUI|BasicScrollPaneUI|BasicSeparatorUI|BasicSliderUI|BasicSpinnerUI|BasicSplitPaneDivider|BasicSplitPaneUI|BasicStroke|BasicTabbedPaneUI|BasicTableHeaderUI|BasicTableUI|BasicTextAreaUI|BasicTextFieldUI|BasicTextPaneUI|BasicTextUI|BasicToggleButtonUI|BasicToolBarSeparatorUI|BasicToolBarUI|BasicToolTipUI|BasicTreeUI|BasicViewportUI|BatchUpdateException|BeanContext|BeanContextChild|BeanContextChildComponentProxy|BeanContextChildSupport|BeanContextContainerProxy|BeanContextEvent|BeanContextMembershipEvent|BeanContextMembershipListener|BeanContextProxy|BeanContextServiceAvailableEvent|BeanContextServiceProvider|BeanContextServiceProviderBeanInfo|BeanContextServiceRevokedEvent|BeanContextServiceRevokedListener|BeanContextServices|BeanContextServicesListener|BeanContextServicesSupport|BeanContextSupport|BeanDescriptor|BeanInfo|Beans|BevelBorder|Bidi|BigDecimal|BigInteger|BinaryRefAddr|BindException|Binding|BindingHelper|BindingHolder|BindingIterator|BindingIteratorHelper|BindingIteratorHolder|BindingIteratorOperations|BindingIteratorPOA|BindingListHelper|BindingListHolder|BindingType|BindingTypeHelper|BindingTypeHolder|BitSet|Blob|BlockView|Book|Boolean|BooleanControl|BooleanHolder|BooleanSeqHelper|BooleanSeqHolder|Border|BorderFactory|BorderLayout|BorderUIResource|BoundedRangeModel|Bounds|Box|BoxedValueHelper|BoxLayout|BoxView|BreakIterator|Buffer|BufferCapabilities|BufferedImage|BufferedImageFilter|BufferedImageOp|BufferedInputStream|BufferedOutputStream|BufferedReader|BufferedWriter|BufferOverflowException|BufferStrategy|BufferUnderflowException|Button|ButtonGroup|ButtonModel|ButtonUI|Byte|ByteArrayInputStream|ByteArrayOutputStream|ByteBuffer|ByteChannel|ByteHolder|ByteLookupTable|ByteOrder|Calendar|CallableStatement|Callback|CallbackHandler|CancelablePrintJob|CancelledKeyException|CannotProceed|CannotProceedException|CannotProceedHelper|CannotProceedHolder|CannotRedoException|CannotUndoException|Canvas|CardLayout|Caret|CaretEvent|CaretListener|CDATASection|CellEditor|CellEditorListener|CellRendererPane|Certificate|CertificateEncodingException|CertificateException|CertificateExpiredException|CertificateFactory|CertificateFactorySpi|CertificateNotYetValidException|CertificateParsingException|CertPath|CertPathBuilder|CertPathBuilderException|CertPathBuilderResult|CertPathBuilderSpi|CertPathParameters|CertPathValidator|CertPathValidatorException|CertPathValidatorResult|CertPathValidatorSpi|CertSelector|CertStore|CertStoreException|CertStoreParameters|CertStoreSpi|ChangedCharSetException|ChangeEvent|ChangeListener|Channel|ChannelBinding|Channels|Character|CharacterCodingException|CharacterData|CharacterIterator|CharArrayReader|CharArrayWriter|CharBuffer|CharConversionException|CharHolder|CharSeqHelper|CharSeqHolder|CharSequence|Charset|CharsetDecoder|CharsetEncoder|CharsetProvider|Checkbox|CheckboxGroup|CheckboxMenuItem|CheckedInputStream|CheckedOutputStream|Checksum|Choice|ChoiceCallback|ChoiceFormat|Chromaticity|Cipher|CipherInputStream|CipherOutputStream|CipherSpi|Class|ClassCastException|ClassCircularityError|ClassDesc|ClassFormatError|ClassLoader|ClassNotFoundException|ClientRequestInfo|ClientRequestInfoOperations|ClientRequestInterceptor|ClientRequestInterceptorOperations|Clip|Clipboard|ClipboardOwner|Clob|Cloneable|CloneNotSupportedException|ClosedByInterruptException|ClosedChannelException|ClosedSelectorException|CMMException|Codec|CodecFactory|CodecFactoryHelper|CodecFactoryOperations|CodecOperations|CoderMalfunctionError|CoderResult|CodeSets|CodeSource|CodingErrorAction|CollationElementIterator|CollationKey|Collator|Collection|CollectionCertStoreParameters|Collections|Color|ColorChooserComponentFactory|ColorChooserUI|ColorConvertOp|ColorModel|ColorSelectionModel|ColorSpace|ColorSupported|ColorUIResource|ComboBoxEditor|ComboBoxModel|ComboBoxUI|ComboPopup|COMM_FAILURE|Comment|CommunicationException|Comparable|Comparator|Compiler|CompletionStatus|CompletionStatusHelper|Component|ComponentAdapter|ComponentColorModel|ComponentEvent|ComponentIdHelper|ComponentInputMap|ComponentInputMapUIResource|ComponentListener|ComponentOrientation|ComponentSampleModel|ComponentUI|ComponentView|Composite|CompositeContext|CompositeName|CompositeView|CompoundBorder|CompoundControl|CompoundEdit|CompoundName|Compression|ConcurrentModificationException|Configuration|ConfigurationException|ConfirmationCallback|ConnectException|ConnectIOException|Connection|ConnectionEvent|ConnectionEventListener|ConnectionPendingException|ConnectionPoolDataSource|ConsoleHandler|Constructor|Container|ContainerAdapter|ContainerEvent|ContainerListener|ContainerOrderFocusTraversalPolicy|ContentHandler|ContentHandlerFactory|ContentModel|Context|ContextList|ContextNotEmptyException|ContextualRenderedImageFactory|Control|ControlFactory|ControllerEventListener|ConvolveOp|CookieHolder|Copies|CopiesSupported|CRC32|CredentialExpiredException|CRL|CRLException|CRLSelector|CropImageFilter|CSS|CTX_RESTRICT_SCOPE|CubicCurve2D|Currency|Current|CurrentHelper|CurrentHolder|CurrentOperations|Cursor|Customizer|CustomMarshal|CustomValue|DATA_CONVERSION|DatabaseMetaData|DataBuffer|DataBufferByte|DataBufferDouble|DataBufferFloat|DataBufferInt|DataBufferShort|DataBufferUShort|DataFlavor|DataFormatException|DatagramChannel|DatagramPacket|DatagramSocket|DatagramSocketImpl|DatagramSocketImplFactory|DataInput|DataInputStream|DataLine|DataOutput|DataOutputStream|DataSource|DataTruncation|Date|DateFormat|DateFormatSymbols|DateFormatter|DateTimeAtCompleted|DateTimeAtCreation|DateTimeAtProcessing|DateTimeSyntax|DebugGraphics|DecimalFormat|DecimalFormatSymbols|DeclHandler|DefaultBoundedRangeModel|DefaultButtonModel|DefaultCaret|DefaultCellEditor|DefaultColorSelectionModel|DefaultComboBoxModel|DefaultDesktopManager|DefaultEditorKit|DefaultFocusManager|DefaultFocusTraversalPolicy|DefaultFormatter|DefaultFormatterFactory|DefaultHandler|DefaultHighlighter|DefaultKeyboardFocusManager|DefaultListCellRenderer|DefaultListModel|DefaultListSelectionModel|DefaultMenuLayout|DefaultMetalTheme|DefaultMutableTreeNode|DefaultPersistenceDelegate|DefaultSingleSelectionModel|DefaultStyledDocument|DefaultTableCellRenderer|DefaultTableColumnModel|DefaultTableModel|DefaultTextUI|DefaultTreeCellEditor|DefaultTreeCellRenderer|DefaultTreeModel|DefaultTreeSelectionModel|DefinitionKind|DefinitionKindHelper|Deflater|DeflaterOutputStream|Delegate|DelegationPermission|DESedeKeySpec|DesignMode|DESKeySpec|DesktopIconUI|DesktopManager|DesktopPaneUI|Destination|Destroyable|DestroyFailedException|DGC|DHGenParameterSpec|DHKey|DHParameterSpec|DHPrivateKey|DHPrivateKeySpec|DHPublicKey|DHPublicKeySpec|Dialog|Dictionary|DigestException|DigestInputStream|DigestOutputStream|Dimension|Dimension2D|DimensionUIResource|DirContext|DirectColorModel|DirectoryManager|DirObjectFactory|DirStateFactory|DisplayMode|DnDConstants|Doc|DocAttribute|DocAttributeSet|DocFlavor|DocPrintJob|Document|DocumentBuilder|DocumentBuilderFactory|DocumentEvent|DocumentFilter|DocumentFragment|DocumentHandler|DocumentListener|DocumentName|DocumentParser|DocumentType|DomainCombiner|DomainManager|DomainManagerOperations|DOMException|DOMImplementation|DOMLocator|DOMResult|DOMSource|Double|DoubleBuffer|DoubleHolder|DoubleSeqHelper|DoubleSeqHolder|DragGestureEvent|DragGestureListener|DragGestureRecognizer|DragSource|DragSourceAdapter|DragSourceContext|DragSourceDragEvent|DragSourceDropEvent|DragSourceEvent|DragSourceListener|DragSourceMotionListener|Driver|DriverManager|DriverPropertyInfo|DropTarget|DropTargetAdapter|DropTargetContext|DropTargetDragEvent|DropTargetDropEvent|DropTargetEvent|DropTargetListener|DSAKey|DSAKeyPairGenerator|DSAParameterSpec|DSAParams|DSAPrivateKey|DSAPrivateKeySpec|DSAPublicKey|DSAPublicKeySpec|DTD|DTDConstants|DTDHandler|DuplicateName|DuplicateNameHelper|DynamicImplementation|DynAny|DynAnyFactory|DynAnyFactoryHelper|DynAnyFactoryOperations|DynAnyHelper|DynAnyOperations|DynAnySeqHelper|DynArray|DynArrayHelper|DynArrayOperations|DynEnum|DynEnumHelper|DynEnumOperations|DynFixed|DynFixedHelper|DynFixedOperations|DynSequence|DynSequenceHelper|DynSequenceOperations|DynStruct|DynStructHelper|DynStructOperations|DynUnion|DynUnionHelper|DynUnionOperations|DynValue|DynValueBox|DynValueBoxOperations|DynValueCommon|DynValueCommonOperations|DynValueHelper|DynValueOperations|EditorKit|Element|ElementIterator|Ellipse2D|EmptyBorder|EmptyStackException|EncodedKeySpec|Encoder|Encoding|ENCODING_CDR_ENCAPS|EncryptedPrivateKeyInfo|Entity|EntityReference|EntityResolver|EnumControl|Enumeration|EnumSyntax|Environment|EOFException|Error|ErrorHandler|ErrorListener|ErrorManager|EtchedBorder|Event|EventContext|EventDirContext|EventHandler|EventListener|EventListenerList|EventListenerProxy|EventObject|EventQueue|EventSetDescriptor|Exception|ExceptionInInitializerError|ExceptionList|ExceptionListener|ExemptionMechanism|ExemptionMechanismException|ExemptionMechanismSpi|ExpandVetoException|ExportException|Expression|ExtendedRequest|ExtendedResponse|Externalizable|FactoryConfigurationError|FailedLoginException|FeatureDescriptor|Fidelity|Field|FieldNameHelper|FieldPosition|FieldView|File|FileCacheImageInputStream|FileCacheImageOutputStream|FileChannel|FileChooserUI|FileDescriptor|FileDialog|FileFilter|FileHandler|FileImageInputStream|FileImageOutputStream|FileInputStream|FileLock|FileLockInterruptionException|FilenameFilter|FileNameMap|FileNotFoundException|FileOutputStream|FilePermission|FileReader|FileSystemView|FileView|FileWriter|Filter|FilteredImageSource|FilterInputStream|FilterOutputStream|FilterReader|FilterWriter|Finishings|FixedHeightLayoutCache|FixedHolder|FlatteningPathIterator|FlavorException|FlavorMap|FlavorTable|Float|FloatBuffer|FloatControl|FloatHolder|FloatSeqHelper|FloatSeqHolder|FlowLayout|FlowView|FocusAdapter|FocusEvent|FocusListener|FocusManager|FocusTraversalPolicy|Font|FontFormatException|FontMetrics|FontRenderContext|FontUIResource|Format|FormatConversionProvider|FormatMismatch|FormatMismatchHelper|Formatter|FormView|ForwardRequest|ForwardRequestHelper|Frame|FREE_MEM|GapContent|GatheringByteChannel|GeneralPath|GeneralSecurityException|GlyphJustificationInfo|GlyphMetrics|GlyphVector|GlyphView|GradientPaint|GraphicAttribute|Graphics|Graphics2D|GraphicsConfigTemplate|GraphicsConfiguration|GraphicsDevice|GraphicsEnvironment|GrayFilter|GregorianCalendar|GridBagConstraints|GridBagLayout|GridLayout|Group|GSSContext|GSSCredential|GSSException|GSSManager|GSSName|Guard|GuardedObject|GZIPInputStream|GZIPOutputStream|Handler|HandlerBase|HandshakeCompletedEvent|HandshakeCompletedListener|HasControls|HashAttributeSet|HashDocAttributeSet|HashMap|HashPrintJobAttributeSet|HashPrintRequestAttributeSet|HashPrintServiceAttributeSet|HashSet|Hashtable|HeadlessException|HierarchyBoundsAdapter|HierarchyBoundsListener|HierarchyEvent|HierarchyListener|Highlighter|HostnameVerifier|HTML|HTMLDocument|HTMLEditorKit|HTMLFrameHyperlinkEvent|HTMLWriter|HttpsURLConnection|HttpURLConnection|HyperlinkEvent|HyperlinkListener|ICC_ColorSpace|ICC_Profile|ICC_ProfileGray|ICC_ProfileRGB|Icon|IconUIResource|IconView|ID_ASSIGNMENT_POLICY_ID|ID_UNIQUENESS_POLICY_ID|IdAssignmentPolicy|IdAssignmentPolicyOperations|IdAssignmentPolicyValue|IdentifierHelper|Identity|IdentityHashMap|IdentityScope|IDLEntity|IDLType|IDLTypeHelper|IDLTypeOperations|IdUniquenessPolicy|IdUniquenessPolicyOperations|IdUniquenessPolicyValue|IIOByteBuffer|IIOException|IIOImage|IIOInvalidTreeException|IIOMetadata|IIOMetadataController|IIOMetadataFormat|IIOMetadataFormatImpl|IIOMetadataNode|IIOParam|IIOParamController|IIOReadProgressListener|IIOReadUpdateListener|IIOReadWarningListener|IIORegistry|IIOServiceProvider|IIOWriteProgressListener|IIOWriteWarningListener|IllegalAccessError|IllegalAccessException|IllegalArgumentException|IllegalBlockingModeException|IllegalBlockSizeException|IllegalCharsetNameException|IllegalComponentStateException|IllegalMonitorStateException|IllegalPathStateException|IllegalSelectorException|IllegalStateException|IllegalThreadStateException|Image|ImageCapabilities|ImageConsumer|ImageFilter|ImageGraphicAttribute|ImageIcon|ImageInputStream|ImageInputStreamImpl|ImageInputStreamSpi|ImageIO|ImageObserver|ImageOutputStream|ImageOutputStreamImpl|ImageOutputStreamSpi|ImageProducer|ImageReader|ImageReaderSpi|ImageReaderWriterSpi|ImageReadParam|ImageTranscoder|ImageTranscoderSpi|ImageTypeSpecifier|ImageView|ImageWriteParam|ImageWriter|ImageWriterSpi|ImagingOpException|IMP_LIMIT|IMPLICIT_ACTIVATION_POLICY_ID|ImplicitActivationPolicy|ImplicitActivationPolicyOperations|ImplicitActivationPolicyValue|IncompatibleClassChangeError|InconsistentTypeCode|InconsistentTypeCodeHelper|IndexColorModel|IndexedPropertyDescriptor|IndexOutOfBoundsException|IndirectionException|Inet4Address|Inet6Address|InetAddress|InetSocketAddress|Inflater|InflaterInputStream|InheritableThreadLocal|InitialContext|InitialContextFactory|InitialContextFactoryBuilder|InitialDirContext|INITIALIZE|InitialLdapContext|InlineView|InputContext|InputEvent|InputMap|InputMapUIResource|InputMethod|InputMethodContext|InputMethodDescriptor|InputMethodEvent|InputMethodHighlight|InputMethodListener|InputMethodRequests|InputSource|InputStream|InputStreamReader|InputSubset|InputVerifier|Insets|InsetsUIResource|InstantiationError|InstantiationException|Instrument|InsufficientResourcesException|IntBuffer|Integer|IntegerSyntax|Interceptor|InterceptorOperations|INTERNAL|InternalError|InternalFrameAdapter|InternalFrameEvent|InternalFrameFocusTraversalPolicy|InternalFrameListener|InternalFrameUI|InternationalFormatter|InterruptedException|InterruptedIOException|InterruptedNamingException|InterruptibleChannel|INTF_REPOS|IntHolder|IntrospectionException|Introspector|INV_FLAG|INV_IDENT|INV_OBJREF|INV_POLICY|Invalid|INVALID_TRANSACTION|InvalidAddress|InvalidAddressHelper|InvalidAddressHolder|InvalidAlgorithmParameterException|InvalidAttributeIdentifierException|InvalidAttributesException|InvalidAttributeValueException|InvalidClassException|InvalidDnDOperationException|InvalidKeyException|InvalidKeySpecException|InvalidMarkException|InvalidMidiDataException|InvalidName|InvalidNameException|InvalidNameHelper|InvalidNameHolder|InvalidObjectException|InvalidParameterException|InvalidParameterSpecException|InvalidPolicy|InvalidPolicyHelper|InvalidPreferencesFormatException|InvalidSearchControlsException|InvalidSearchFilterException|InvalidSeq|InvalidSlot|InvalidSlotHelper|InvalidTransactionException|InvalidTypeForEncoding|InvalidTypeForEncodingHelper|InvalidValue|InvalidValueHelper|InvocationEvent|InvocationHandler|InvocationTargetException|InvokeHandler|IOException|IOR|IORHelper|IORHolder|IORInfo|IORInfoOperations|IORInterceptor|IORInterceptorOperations|IRObject|IRObjectOperations|IstringHelper|ItemEvent|ItemListener|ItemSelectable|Iterator|IvParameterSpec|JApplet|JarEntry|JarException|JarFile|JarInputStream|JarOutputStream|JarURLConnection|JButton|JCheckBox|JCheckBoxMenuItem|JColorChooser|JComboBox|JComponent|JDesktopPane|JDialog|JEditorPane|JFileChooser|JFormattedTextField|JFrame|JInternalFrame|JLabel|JLayeredPane|JList|JMenu|JMenuBar|JMenuItem|JobAttributes|JobHoldUntil|JobImpressions|JobImpressionsCompleted|JobImpressionsSupported|JobKOctets|JobKOctetsProcessed|JobKOctetsSupported|JobMediaSheets|JobMediaSheetsCompleted|JobMediaSheetsSupported|JobMessageFromOperator|JobName|JobOriginatingUserName|JobPriority|JobPrioritySupported|JobSheets|JobState|JobStateReason|JobStateReasons|JOptionPane|JPanel|JPasswordField|JPEGHuffmanTable|JPEGImageReadParam|JPEGImageWriteParam|JPEGQTable|JPopupMenu|JProgressBar|JRadioButton|JRadioButtonMenuItem|JRootPane|JScrollBar|JScrollPane|JSeparator|JSlider|JSpinner|JSplitPane|JTabbedPane|JTable|JTableHeader|JTextArea|JTextComponent|JTextField|JTextPane|JToggleButton|JToolBar|JToolTip|JTree|JViewport|JWindow|KerberosKey|KerberosPrincipal|KerberosTicket|Kernel|Key|KeyAdapter|KeyAgreement|KeyAgreementSpi|KeyboardFocusManager|KeyEvent|KeyEventDispatcher|KeyEventPostProcessor|KeyException|KeyFactory|KeyFactorySpi|KeyGenerator|KeyGeneratorSpi|KeyListener|KeyManagementException|KeyManager|KeyManagerFactory|KeyManagerFactorySpi|Keymap|KeyPair|KeyPairGenerator|KeyPairGeneratorSpi|KeySpec|KeyStore|KeyStoreException|KeyStoreSpi|KeyStroke|Label|LabelUI|LabelView|LanguageCallback|LastOwnerException|LayeredHighlighter|LayoutFocusTraversalPolicy|LayoutManager|LayoutManager2|LayoutQueue|LDAPCertStoreParameters|LdapContext|LdapReferralException|Lease|Level|LexicalHandler|LIFESPAN_POLICY_ID|LifespanPolicy|LifespanPolicyOperations|LifespanPolicyValue|LimitExceededException|Line|Line2D|LineBorder|LineBreakMeasurer|LineEvent|LineListener|LineMetrics|LineNumberInputStream|LineNumberReader|LineUnavailableException|LinkageError|LinkedHashMap|LinkedHashSet|LinkedList|LinkException|LinkLoopException|LinkRef|List|ListCellRenderer|ListDataEvent|ListDataListener|ListIterator|ListModel|ListResourceBundle|ListSelectionEvent|ListSelectionListener|ListSelectionModel|ListUI|ListView|LoaderHandler|Locale|LocalObject|LocateRegistry|LOCATION_FORWARD|Locator|LocatorImpl|Logger|LoggingPermission|LoginContext|LoginException|LoginModule|LogManager|LogRecord|LogStream|Long|LongBuffer|LongHolder|LongLongSeqHelper|LongLongSeqHolder|LongSeqHelper|LongSeqHolder|LookAndFeel|LookupOp|LookupTable|Mac|MacSpi|MalformedInputException|MalformedLinkException|MalformedURLException|ManagerFactoryParameters|Manifest|Map|MappedByteBuffer|MARSHAL|MarshalException|MarshalledObject|MaskFormatter|Matcher|Math|MatteBorder|Media|MediaName|MediaPrintableArea|MediaSize|MediaSizeName|MediaTracker|MediaTray|Member|MemoryCacheImageInputStream|MemoryCacheImageOutputStream|MemoryHandler|MemoryImageSource|Menu|MenuBar|MenuBarUI|MenuComponent|MenuContainer|MenuDragMouseEvent|MenuDragMouseListener|MenuElement|MenuEvent|MenuItem|MenuItemUI|MenuKeyEvent|MenuKeyListener|MenuListener|MenuSelectionManager|MenuShortcut|MessageDigest|MessageDigestSpi|MessageFormat|MessageProp|MetaEventListener|MetalBorders|MetalButtonUI|MetalCheckBoxIcon|MetalCheckBoxUI|MetalComboBoxButton|MetalComboBoxEditor|MetalComboBoxIcon|MetalComboBoxUI|MetalDesktopIconUI|MetalFileChooserUI|MetalIconFactory|MetalInternalFrameTitlePane|MetalInternalFrameUI|MetalLabelUI|MetalLookAndFeel|MetalPopupMenuSeparatorUI|MetalProgressBarUI|MetalRadioButtonUI|MetalRootPaneUI|MetalScrollBarUI|MetalScrollButton|MetalScrollPaneUI|MetalSeparatorUI|MetalSliderUI|MetalSplitPaneUI|MetalTabbedPaneUI|MetalTextFieldUI|MetalTheme|MetalToggleButtonUI|MetalToolBarUI|MetalToolTipUI|MetalTreeUI|MetaMessage|Method|MethodDescriptor|MidiChannel|MidiDevice|MidiDeviceProvider|MidiEvent|MidiFileFormat|MidiFileReader|MidiFileWriter|MidiMessage|MidiSystem|MidiUnavailableException|MimeTypeParseException|MinimalHTMLWriter|MissingResourceException|Mixer|MixerProvider|ModificationItem|Modifier|MouseAdapter|MouseDragGestureRecognizer|MouseEvent|MouseInputAdapter|MouseInputListener|MouseListener|MouseMotionAdapter|MouseMotionListener|MouseWheelEvent|MouseWheelListener|MultiButtonUI|MulticastSocket|MultiColorChooserUI|MultiComboBoxUI|MultiDesktopIconUI|MultiDesktopPaneUI|MultiDoc|MultiDocPrintJob|MultiDocPrintService|MultiFileChooserUI|MultiInternalFrameUI|MultiLabelUI|MultiListUI|MultiLookAndFeel|MultiMenuBarUI|MultiMenuItemUI|MultiOptionPaneUI|MultiPanelUI|MultiPixelPackedSampleModel|MultipleComponentProfileHelper|MultipleComponentProfileHolder|MultipleDocumentHandling|MultipleMaster|MultiPopupMenuUI|MultiProgressBarUI|MultiRootPaneUI|MultiScrollBarUI|MultiScrollPaneUI|MultiSeparatorUI|MultiSliderUI|MultiSpinnerUI|MultiSplitPaneUI|MultiTabbedPaneUI|MultiTableHeaderUI|MultiTableUI|MultiTextUI|MultiToolBarUI|MultiToolTipUI|MultiTreeUI|MultiViewportUI|MutableAttributeSet|MutableComboBoxModel|MutableTreeNode|Name|NameAlreadyBoundException|NameCallback|NameClassPair|NameComponent|NameComponentHelper|NameComponentHolder|NamedNodeMap|NamedValue|NameDynAnyPair|NameDynAnyPairHelper|NameDynAnyPairSeqHelper|NameHelper|NameHolder|NameNotFoundException|NameParser|NamespaceChangeListener|NamespaceSupport|NameValuePair|NameValuePairHelper|NameValuePairSeqHelper|Naming|NamingContext|NamingContextExt|NamingContextExtHelper|NamingContextExtHolder|NamingContextExtOperations|NamingContextExtPOA|NamingContextHelper|NamingContextHolder|NamingContextOperations|NamingContextPOA|NamingEnumeration|NamingEvent|NamingException|NamingExceptionEvent|NamingListener|NamingManager|NamingSecurityException|NavigationFilter|NegativeArraySizeException|NetPermission|NetworkInterface|NO_IMPLEMENT|NO_MEMORY|NO_PERMISSION|NO_RESOURCES|NO_RESPONSE|NoClassDefFoundError|NoConnectionPendingException|NoContext|NoContextHelper|Node|NodeChangeEvent|NodeChangeListener|NodeList|NoInitialContextException|NoninvertibleTransformException|NonReadableChannelException|NonWritableChannelException|NoPermissionException|NoRouteToHostException|NoServant|NoServantHelper|NoSuchAlgorithmException|NoSuchAttributeException|NoSuchElementException|NoSuchFieldError|NoSuchFieldException|NoSuchMethodError|NoSuchMethodException|NoSuchObjectException|NoSuchPaddingException|NoSuchProviderException|NotActiveException|Notation|NotBoundException|NotContextException|NotEmpty|NotEmptyHelper|NotEmptyHolder|NotFound|NotFoundHelper|NotFoundHolder|NotFoundReason|NotFoundReasonHelper|NotFoundReasonHolder|NotOwnerException|NotSerializableException|NotYetBoundException|NotYetConnectedException|NullCipher|NullPointerException|Number|NumberFormat|NumberFormatException|NumberFormatter|NumberOfDocuments|NumberOfInterveningJobs|NumberUp|NumberUpSupported|NumericShaper|NVList|OBJ_ADAPTER|Object|OBJECT_NOT_EXIST|ObjectAlreadyActive|ObjectAlreadyActiveHelper|ObjectChangeListener|ObjectFactory|ObjectFactoryBuilder|ObjectHelper|ObjectHolder|ObjectIdHelper|ObjectImpl|ObjectInput|ObjectInputStream|ObjectInputValidation|ObjectNotActive|ObjectNotActiveHelper|ObjectOutput|ObjectOutputStream|ObjectStreamClass|ObjectStreamConstants|ObjectStreamException|ObjectStreamField|ObjectView|ObjID|Observable|Observer|OctetSeqHelper|OctetSeqHolder|Oid|OMGVMCID|OpenType|Operation|OperationNotSupportedException|Option|OptionalDataException|OptionPaneUI|ORB|ORBInitializer|ORBInitializerOperations|ORBInitInfo|ORBInitInfoOperations|OrientationRequested|OutOfMemoryError|OutputDeviceAssigned|OutputKeys|OutputStream|OutputStreamWriter|OverlappingFileLockException|OverlayLayout|Owner|Package|PackedColorModel|Pageable|PageAttributes|PageFormat|PageRanges|PagesPerMinute|PagesPerMinuteColor|Paint|PaintContext|PaintEvent|Panel|PanelUI|Paper|ParagraphView|Parameter|ParameterBlock|ParameterDescriptor|ParameterMetaData|ParameterMode|ParameterModeHelper|ParameterModeHolder|ParseException|ParsePosition|Parser|ParserAdapter|ParserConfigurationException|ParserDelegator|ParserFactory|PartialResultException|PasswordAuthentication|PasswordCallback|PasswordView|Patch|PathIterator|Pattern|PatternSyntaxException|PBEKey|PBEKeySpec|PBEParameterSpec|PDLOverrideSupported|Permission|PermissionCollection|Permissions|PERSIST_STORE|PersistenceDelegate|PhantomReference|Pipe|PipedInputStream|PipedOutputStream|PipedReader|PipedWriter|PixelGrabber|PixelInterleavedSampleModel|PKCS8EncodedKeySpec|PKIXBuilderParameters|PKIXCertPathBuilderResult|PKIXCertPathChecker|PKIXCertPathValidatorResult|PKIXParameters|PlainDocument|PlainView|POA|POAHelper|POAManager|POAManagerOperations|POAOperations|Point|Point2D|Policy|PolicyError|PolicyErrorCodeHelper|PolicyErrorHelper|PolicyErrorHolder|PolicyFactory|PolicyFactoryOperations|PolicyHelper|PolicyHolder|PolicyListHelper|PolicyListHolder|PolicyNode|PolicyOperations|PolicyQualifierInfo|PolicyTypeHelper|Polygon|PooledConnection|Popup|PopupFactory|PopupMenu|PopupMenuEvent|PopupMenuListener|PopupMenuUI|Port|PortableRemoteObject|PortableRemoteObjectDelegate|PortUnreachableException|Position|PreferenceChangeEvent|PreferenceChangeListener|Preferences|PreferencesFactory|PreparedStatement|PresentationDirection|Principal|PrincipalHolder|Printable|PrinterAbortException|PrinterException|PrinterGraphics|PrinterInfo|PrinterIOException|PrinterIsAcceptingJobs|PrinterJob|PrinterLocation|PrinterMakeAndModel|PrinterMessageFromOperator|PrinterMoreInfo|PrinterMoreInfoManufacturer|PrinterName|PrinterResolution|PrinterState|PrinterStateReason|PrinterStateReasons|PrinterURI|PrintEvent|PrintException|PrintGraphics|PrintJob|PrintJobAdapter|PrintJobAttribute|PrintJobAttributeEvent|PrintJobAttributeListener|PrintJobAttributeSet|PrintJobEvent|PrintJobListener|PrintQuality|PrintRequestAttribute|PrintRequestAttributeSet|PrintService|PrintServiceAttribute|PrintServiceAttributeEvent|PrintServiceAttributeListener|PrintServiceAttributeSet|PrintServiceLookup|PrintStream|PrintWriter|PRIVATE_MEMBER|PrivateCredentialPermission|PrivateKey|PrivilegedAction|PrivilegedActionException|PrivilegedExceptionAction|Process|ProcessingInstruction|ProfileDataException|ProfileIdHelper|ProgressBarUI|ProgressMonitor|ProgressMonitorInputStream|Properties|PropertyChangeEvent|PropertyChangeListener|PropertyChangeListenerProxy|PropertyChangeSupport|PropertyDescriptor|PropertyEditor|PropertyEditorManager|PropertyEditorSupport|PropertyPermission|PropertyResourceBundle|PropertyVetoException|ProtectionDomain|ProtocolException|Provider|ProviderException|Proxy|PSSParameterSpec|PUBLIC_MEMBER|PublicKey|PushbackInputStream|PushbackReader|QuadCurve2D|QueuedJobCount|Random|RandomAccess|RandomAccessFile|Raster|RasterFormatException|RasterOp|RC2ParameterSpec|RC5ParameterSpec|ReadableByteChannel|Reader|ReadOnlyBufferException|Receiver|Rectangle|Rectangle2D|RectangularShape|Ref|RefAddr|Reference|Referenceable|ReferenceQueue|ReferenceUriSchemesSupported|ReferralException|ReflectPermission|Refreshable|RefreshFailedException|RegisterableService|Registry|RegistryHandler|RemarshalException|Remote|RemoteCall|RemoteException|RemoteObject|RemoteRef|RemoteServer|RemoteStub|RenderableImage|RenderableImageOp|RenderableImageProducer|RenderContext|RenderedImage|RenderedImageFactory|Renderer|RenderingHints|RepaintManager|ReplicateScaleFilter|RepositoryIdHelper|Request|REQUEST_PROCESSING_POLICY_ID|RequestInfo|RequestInfoOperations|RequestingUserName|RequestProcessingPolicy|RequestProcessingPolicyOperations|RequestProcessingPolicyValue|RescaleOp|ResolutionSyntax|Resolver|ResolveResult|ResourceBundle|ResponseHandler|Result|ResultSet|ResultSetMetaData|ReverbType|RGBImageFilter|RMIClassLoader|RMIClassLoaderSpi|RMIClientSocketFactory|RMIFailureHandler|RMISecurityException|RMISecurityManager|RMIServerSocketFactory|RMISocketFactory|Robot|RootPaneContainer|RootPaneUI|RoundRectangle2D|RowMapper|RowSet|RowSetEvent|RowSetInternal|RowSetListener|RowSetMetaData|RowSetReader|RowSetWriter|RSAKey|RSAKeyGenParameterSpec|RSAMultiPrimePrivateCrtKey|RSAMultiPrimePrivateCrtKeySpec|RSAOtherPrimeInfo|RSAPrivateCrtKey|RSAPrivateCrtKeySpec|RSAPrivateKey|RSAPrivateKeySpec|RSAPublicKey|RSAPublicKeySpec|RTFEditorKit|RuleBasedCollator|Runnable|Runtime|RunTime|RuntimeException|RunTimeOperations|RuntimePermission|SampleModel|Savepoint|SAXException|SAXNotRecognizedException|SAXNotSupportedException|SAXParseException|SAXParser|SAXParserFactory|SAXResult|SAXSource|SAXTransformerFactory|ScatteringByteChannel|SchemaViolationException|Scrollable|Scrollbar|ScrollBarUI|ScrollPane|ScrollPaneAdjustable|ScrollPaneConstants|ScrollPaneLayout|ScrollPaneUI|SealedObject|SearchControls|SearchResult|SecretKey|SecretKeyFactory|SecretKeyFactorySpi|SecretKeySpec|SecureClassLoader|SecureRandom|SecureRandomSpi|Security|SecurityException|SecurityManager|SecurityPermission|Segment|SelectableChannel|SelectionKey|Selector|SelectorProvider|SeparatorUI|Sequence|SequenceInputStream|Sequencer|Serializable|SerializablePermission|Servant|SERVANT_RETENTION_POLICY_ID|ServantActivator|ServantActivatorHelper|ServantActivatorOperations|ServantActivatorPOA|ServantAlreadyActive|ServantAlreadyActiveHelper|ServantLocator|ServantLocatorHelper|ServantLocatorOperations|ServantLocatorPOA|ServantManager|ServantManagerOperations|ServantNotActive|ServantNotActiveHelper|ServantObject|ServantRetentionPolicy|ServantRetentionPolicyOperations|ServantRetentionPolicyValue|ServerCloneException|ServerError|ServerException|ServerNotActiveException|ServerRef|ServerRequest|ServerRequestInfo|ServerRequestInfoOperations|ServerRequestInterceptor|ServerRequestInterceptorOperations|ServerRuntimeException|ServerSocket|ServerSocketChannel|ServerSocketFactory|ServiceContext|ServiceContextHelper|ServiceContextHolder|ServiceContextListHelper|ServiceContextListHolder|ServiceDetail|ServiceDetailHelper|ServiceIdHelper|ServiceInformation|ServiceInformationHelper|ServiceInformationHolder|ServicePermission|ServiceRegistry|ServiceUI|ServiceUIFactory|ServiceUnavailableException|Set|SetOfIntegerSyntax|SetOverrideType|SetOverrideTypeHelper|Severity|Shape|ShapeGraphicAttribute|SheetCollate|Short|ShortBuffer|ShortBufferException|ShortHolder|ShortLookupTable|ShortMessage|ShortSeqHelper|ShortSeqHolder|Sides|Signature|SignatureException|SignatureSpi|SignedObject|Signer|SimpleAttributeSet|SimpleBeanInfo|SimpleDateFormat|SimpleDoc|SimpleFormatter|SimpleTimeZone|SinglePixelPackedSampleModel|SingleSelectionModel|Size2DSyntax|SizeLimitExceededException|SizeRequirements|SizeSequence|Skeleton|SkeletonMismatchException|SkeletonNotFoundException|SliderUI|Socket|SocketAddress|SocketChannel|SocketException|SocketFactory|SocketHandler|SocketImpl|SocketImplFactory|SocketOptions|SocketPermission|SocketSecurityException|SocketTimeoutException|SoftBevelBorder|SoftReference|SortedMap|SortedSet|SortingFocusTraversalPolicy|Soundbank|SoundbankReader|SoundbankResource|Source|SourceDataLine|SourceLocator|SpinnerDateModel|SpinnerListModel|SpinnerModel|SpinnerNumberModel|SpinnerUI|SplitPaneUI|Spring|SpringLayout|SQLData|SQLException|SQLInput|SQLOutput|SQLPermission|SQLWarning|SSLContext|SSLContextSpi|SSLException|SSLHandshakeException|SSLKeyException|SSLPeerUnverifiedException|SSLPermission|SSLProtocolException|SSLServerSocket|SSLServerSocketFactory|SSLSession|SSLSessionBindingEvent|SSLSessionBindingListener|SSLSessionContext|SSLSocket|SSLSocketFactory|Stack|StackOverflowError|StackTraceElement|StartTlsRequest|StartTlsResponse|State|StateEdit|StateEditable|StateFactory|Statement|Streamable|StreamableValue|StreamCorruptedException|StreamHandler|StreamPrintService|StreamPrintServiceFactory|StreamResult|StreamSource|StreamTokenizer|StrictMath|String|StringBuffer|StringBufferInputStream|StringCharacterIterator|StringContent|StringHolder|StringIndexOutOfBoundsException|StringNameHelper|StringReader|StringRefAddr|StringSelection|StringSeqHelper|StringSeqHolder|StringTokenizer|StringValueHelper|StringWriter|Stroke|Struct|StructMember|StructMemberHelper|Stub|StubDelegate|StubNotFoundException|Style|StyleConstants|StyleContext|StyledDocument|StyledEditorKit|StyleSheet|Subject|SubjectDomainCombiner|SUCCESSFUL|SupportedValuesAttribute|SwingConstants|SwingPropertyChangeSupport|SwingUtilities|SYNC_WITH_TRANSPORT|SyncFailedException|SyncScopeHelper|Synthesizer|SysexMessage|System|SYSTEM_EXCEPTION|SystemColor|SystemException|SystemFlavorMap|TabableView|TabbedPaneUI|TabExpander|TableCellEditor|TableCellRenderer|TableColumn|TableColumnModel|TableColumnModelEvent|TableColumnModelListener|TableHeaderUI|TableModel|TableModelEvent|TableModelListener|TableUI|TableView|TabSet|TabStop|TAG_ALTERNATE_IIOP_ADDRESS|TAG_CODE_SETS|TAG_INTERNET_IOP|TAG_JAVA_CODEBASE|TAG_MULTIPLE_COMPONENTS|TAG_ORB_TYPE|TAG_POLICIES|TagElement|TaggedComponent|TaggedComponentHelper|TaggedComponentHolder|TaggedProfile|TaggedProfileHelper|TaggedProfileHolder|TargetDataLine|TCKind|Templates|TemplatesHandler|Text|TextAction|TextArea|TextAttribute|TextComponent|TextEvent|TextField|TextHitInfo|TextInputCallback|TextLayout|TextListener|TextMeasurer|TextOutputCallback|TextSyntax|TextUI|TexturePaint|Thread|THREAD_POLICY_ID|ThreadDeath|ThreadGroup|ThreadLocal|ThreadPolicy|ThreadPolicyOperations|ThreadPolicyValue|Throwable|Tie|TileObserver|Time|TimeLimitExceededException|Timer|TimerTask|Timestamp|TimeZone|TitledBorder|ToolBarUI|Toolkit|ToolTipManager|ToolTipUI|TooManyListenersException|Track|TRANSACTION_REQUIRED|TRANSACTION_ROLLEDBACK|TransactionRequiredException|TransactionRolledbackException|TransactionService|Transferable|TransferHandler|TransformAttribute|Transformer|TransformerConfigurationException|TransformerException|TransformerFactory|TransformerFactoryConfigurationError|TransformerHandler|TRANSIENT|Transmitter|Transparency|TRANSPORT_RETRY|TreeCellEditor|TreeCellRenderer|TreeExpansionEvent|TreeExpansionListener|TreeMap|TreeModel|TreeModelEvent|TreeModelListener|TreeNode|TreePath|TreeSelectionEvent|TreeSelectionListener|TreeSelectionModel|TreeSet|TreeUI|TreeWillExpandListener|TrustAnchor|TrustManager|TrustManagerFactory|TrustManagerFactorySpi|TypeCode|TypeCodeHolder|TypeMismatch|TypeMismatchHelper|Types|UID|UIDefaults|UIManager|UIResource|ULongLongSeqHelper|ULongLongSeqHolder|ULongSeqHelper|ULongSeqHolder|UndeclaredThrowableException|UndoableEdit|UndoableEditEvent|UndoableEditListener|UndoableEditSupport|UndoManager|UnexpectedException|UnicastRemoteObject|UnionMember|UnionMemberHelper|UNKNOWN|UnknownEncoding|UnknownEncodingHelper|UnknownError|UnknownException|UnknownGroupException|UnknownHostException|UnknownObjectException|UnknownServiceException|UnknownUserException|UnknownUserExceptionHelper|UnknownUserExceptionHolder|UnmappableCharacterException|UnmarshalException|UnmodifiableSetException|UnrecoverableKeyException|Unreferenced|UnresolvedAddressException|UnresolvedPermission|UnsatisfiedLinkError|UnsolicitedNotification|UnsolicitedNotificationEvent|UnsolicitedNotificationListener|UNSUPPORTED_POLICY|UNSUPPORTED_POLICY_VALUE|UnsupportedAddressTypeException|UnsupportedAudioFileException|UnsupportedCallbackException|UnsupportedCharsetException|UnsupportedClassVersionError|UnsupportedEncodingException|UnsupportedFlavorException|UnsupportedLookAndFeelException|UnsupportedOperationException|URI|URIException|URIResolver|URISyntax|URISyntaxException|URL|URLClassLoader|URLConnection|URLDecoder|URLEncoder|URLStreamHandler|URLStreamHandlerFactory|URLStringHelper|USER_EXCEPTION|UserException|UShortSeqHelper|UShortSeqHolder|UTFDataFormatException|Util|UtilDelegate|Utilities|ValueBase|ValueBaseHelper|ValueBaseHolder|ValueFactory|ValueHandler|ValueMember|ValueMemberHelper|VariableHeightLayoutCache|Vector|VerifyError|VersionSpecHelper|VetoableChangeListener|VetoableChangeListenerProxy|VetoableChangeSupport|View|ViewFactory|ViewportLayout|ViewportUI|VirtualMachineError|Visibility|VisibilityHelper|VM_ABSTRACT|VM_CUSTOM|VM_NONE|VM_TRUNCATABLE|VMID|VoiceStatus|Void|VolatileImage|WCharSeqHelper|WCharSeqHolder|WeakHashMap|WeakReference|Window|WindowAdapter|WindowConstants|WindowEvent|WindowFocusListener|WindowListener|WindowStateListener|WrappedPlainView|WritableByteChannel|WritableRaster|WritableRenderedImage|WriteAbortedException|Writer|WrongAdapter|WrongAdapterHelper|WrongPolicy|WrongPolicyHelper|WrongTransaction|WrongTransactionHelper|WrongTransactionHolder|WStringSeqHelper|WStringSeqHolder|WStringValueHelper|X500Principal|X500PrivateCredential|X509Certificate|X509CertSelector|X509CRL|X509CRLEntry|X509CRLSelector|X509EncodedKeySpec|X509Extension|X509KeyManager|X509TrustManager|XAConnection|XADataSource|XAException|XAResource|Xid|XMLDecoder|XMLEncoder|XMLFilter|XMLFilterImpl|XMLFormatter|XMLReader|XMLReaderAdapter|XMLReaderFactory|ZipEntry|ZipException|ZipFile|ZipInputStream|ZipOutputStream|ZoneView|_BindingIteratorImplBase|_BindingIteratorStub|_DynAnyFactoryStub|_DynAnyStub|_DynArrayStub|_DynEnumStub|_DynFixedStub|_DynSequenceStub|_DynStructStub|_DynUnionStub|_DynValueStub|_IDLTypeStub|_NamingContextExtStub|_NamingContextImplBase|_NamingContextStub|_PolicyStub|_Remote_Stub|_ServantActivatorStub|_ServantLocatorStub)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'types' => '/^(boolean|byte|char|const|double|final|float|int|long|short|static|void)$/',
+ 'reserved' => '/^(import|package|abstract|break|case|catch|class|continue|default|do|else|extends|false|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|super|strictfp|switch|synchronized|this|throws|throw|transient|true|try|volatile|while)$/',
+ 'builtin' => '/^(AbstractAction|AbstractBorder|AbstractButton|AbstractCellEditor|AbstractCollection|AbstractColorChooserPanel|AbstractDocument|AbstractInterruptibleChannel|AbstractLayoutCache|AbstractList|AbstractListModel|AbstractMap|AbstractMethodError|AbstractPreferences|AbstractSelectableChannel|AbstractSelectionKey|AbstractSelector|AbstractSequentialList|AbstractSet|AbstractSpinnerModel|AbstractTableModel|AbstractUndoableEdit|AbstractWriter|AccessControlContext|AccessControlException|AccessController|AccessException|Accessible|AccessibleAction|AccessibleBundle|AccessibleComponent|AccessibleContext|AccessibleEditableText|AccessibleExtendedComponent|AccessibleExtendedTable|AccessibleHyperlink|AccessibleHypertext|AccessibleIcon|AccessibleKeyBinding|AccessibleObject|AccessibleRelation|AccessibleRelationSet|AccessibleResourceBundle|AccessibleRole|AccessibleSelection|AccessibleState|AccessibleStateSet|AccessibleTable|AccessibleTableModelChange|AccessibleText|AccessibleValue|AccountExpiredException|Acl|AclEntry|AclNotFoundException|Action|ActionEvent|ActionListener|ActionMap|ActionMapUIResource|Activatable|ActivateFailedException|ActivationDesc|ActivationException|ActivationGroup|ActivationGroup_Stub|ActivationGroupDesc|ActivationGroupID|ActivationID|ActivationInstantiator|ActivationMonitor|ActivationSystem|Activator|ActiveEvent|AdapterActivator|AdapterActivatorOperations|AdapterAlreadyExists|AdapterAlreadyExistsHelper|AdapterInactive|AdapterInactiveHelper|AdapterNonExistent|AdapterNonExistentHelper|AddressHelper|Adjustable|AdjustmentEvent|AdjustmentListener|Adler32|AffineTransform|AffineTransformOp|AlgorithmParameterGenerator|AlgorithmParameterGeneratorSpi|AlgorithmParameters|AlgorithmParameterSpec|AlgorithmParametersSpi|AllPermission|AlphaComposite|AlreadyBound|AlreadyBoundException|AlreadyBoundHelper|AlreadyBoundHolder|AlreadyConnectedException|AncestorEvent|AncestorListener|Annotation|Any|AnyHolder|AnySeqHelper|AnySeqHolder|AppConfigurationEntry|Applet|AppletContext|AppletInitializer|AppletStub|ApplicationException|Arc2D|Area|AreaAveragingScaleFilter|ARG_IN|ARG_INOUT|ARG_OUT|ArithmeticException|Array|ArrayIndexOutOfBoundsException|ArrayList|Arrays|ArrayStoreException|AssertionError|AsyncBoxView|AsynchronousCloseException|Attr|Attribute|AttributedCharacterIterator|AttributedString|AttributeException|AttributeInUseException|AttributeList|AttributeListImpl|AttributeModificationException|Attributes|AttributeSet|AttributeSetUtilities|AttributesImpl|AudioClip|AudioFileFormat|AudioFileReader|AudioFileWriter|AudioFormat|AudioInputStream|AudioPermission|AudioSystem|AuthenticationException|AuthenticationNotSupportedException|Authenticator|AuthPermission|Autoscroll|AWTError|AWTEvent|AWTEventListener|AWTEventListenerProxy|AWTEventMulticaster|AWTException|AWTKeyStroke|AWTPermission|BackingStoreException|BAD_CONTEXT|BAD_INV_ORDER|BAD_OPERATION|BAD_PARAM|BAD_POLICY|BAD_POLICY_TYPE|BAD_POLICY_VALUE|BAD_TYPECODE|BadKind|BadLocationException|BadPaddingException|BandCombineOp|BandedSampleModel|BasicArrowButton|BasicAttribute|BasicAttributes|BasicBorders|BasicButtonListener|BasicButtonUI|BasicCheckBoxMenuItemUI|BasicCheckBoxUI|BasicColorChooserUI|BasicComboBoxEditor|BasicComboBoxRenderer|BasicComboBoxUI|BasicComboPopup|BasicDesktopIconUI|BasicDesktopPaneUI|BasicDirectoryModel|BasicEditorPaneUI|BasicFileChooserUI|BasicFormattedTextFieldUI|BasicGraphicsUtils|BasicHTML|BasicIconFactory|BasicInternalFrameTitlePane|BasicInternalFrameUI|BasicLabelUI|BasicListUI|BasicLookAndFeel|BasicMenuBarUI|BasicMenuItemUI|BasicMenuUI|BasicOptionPaneUI|BasicPanelUI|BasicPasswordFieldUI|BasicPermission|BasicPopupMenuSeparatorUI|BasicPopupMenuUI|BasicProgressBarUI|BasicRadioButtonMenuItemUI|BasicRadioButtonUI|BasicRootPaneUI|BasicScrollBarUI|BasicScrollPaneUI|BasicSeparatorUI|BasicSliderUI|BasicSpinnerUI|BasicSplitPaneDivider|BasicSplitPaneUI|BasicStroke|BasicTabbedPaneUI|BasicTableHeaderUI|BasicTableUI|BasicTextAreaUI|BasicTextFieldUI|BasicTextPaneUI|BasicTextUI|BasicToggleButtonUI|BasicToolBarSeparatorUI|BasicToolBarUI|BasicToolTipUI|BasicTreeUI|BasicViewportUI|BatchUpdateException|BeanContext|BeanContextChild|BeanContextChildComponentProxy|BeanContextChildSupport|BeanContextContainerProxy|BeanContextEvent|BeanContextMembershipEvent|BeanContextMembershipListener|BeanContextProxy|BeanContextServiceAvailableEvent|BeanContextServiceProvider|BeanContextServiceProviderBeanInfo|BeanContextServiceRevokedEvent|BeanContextServiceRevokedListener|BeanContextServices|BeanContextServicesListener|BeanContextServicesSupport|BeanContextSupport|BeanDescriptor|BeanInfo|Beans|BevelBorder|Bidi|BigDecimal|BigInteger|BinaryRefAddr|BindException|Binding|BindingHelper|BindingHolder|BindingIterator|BindingIteratorHelper|BindingIteratorHolder|BindingIteratorOperations|BindingIteratorPOA|BindingListHelper|BindingListHolder|BindingType|BindingTypeHelper|BindingTypeHolder|BitSet|Blob|BlockView|Book|Boolean|BooleanControl|BooleanHolder|BooleanSeqHelper|BooleanSeqHolder|Border|BorderFactory|BorderLayout|BorderUIResource|BoundedRangeModel|Bounds|Box|BoxedValueHelper|BoxLayout|BoxView|BreakIterator|Buffer|BufferCapabilities|BufferedImage|BufferedImageFilter|BufferedImageOp|BufferedInputStream|BufferedOutputStream|BufferedReader|BufferedWriter|BufferOverflowException|BufferStrategy|BufferUnderflowException|Button|ButtonGroup|ButtonModel|ButtonUI|Byte|ByteArrayInputStream|ByteArrayOutputStream|ByteBuffer|ByteChannel|ByteHolder|ByteLookupTable|ByteOrder|Calendar|CallableStatement|Callback|CallbackHandler|CancelablePrintJob|CancelledKeyException|CannotProceed|CannotProceedException|CannotProceedHelper|CannotProceedHolder|CannotRedoException|CannotUndoException|Canvas|CardLayout|Caret|CaretEvent|CaretListener|CDATASection|CellEditor|CellEditorListener|CellRendererPane|Certificate|CertificateEncodingException|CertificateException|CertificateExpiredException|CertificateFactory|CertificateFactorySpi|CertificateNotYetValidException|CertificateParsingException|CertPath|CertPathBuilder|CertPathBuilderException|CertPathBuilderResult|CertPathBuilderSpi|CertPathParameters|CertPathValidator|CertPathValidatorException|CertPathValidatorResult|CertPathValidatorSpi|CertSelector|CertStore|CertStoreException|CertStoreParameters|CertStoreSpi|ChangedCharSetException|ChangeEvent|ChangeListener|Channel|ChannelBinding|Channels|Character|CharacterCodingException|CharacterData|CharacterIterator|CharArrayReader|CharArrayWriter|CharBuffer|CharConversionException|CharHolder|CharSeqHelper|CharSeqHolder|CharSequence|Charset|CharsetDecoder|CharsetEncoder|CharsetProvider|Checkbox|CheckboxGroup|CheckboxMenuItem|CheckedInputStream|CheckedOutputStream|Checksum|Choice|ChoiceCallback|ChoiceFormat|Chromaticity|Cipher|CipherInputStream|CipherOutputStream|CipherSpi|Class|ClassCastException|ClassCircularityError|ClassDesc|ClassFormatError|ClassLoader|ClassNotFoundException|ClientRequestInfo|ClientRequestInfoOperations|ClientRequestInterceptor|ClientRequestInterceptorOperations|Clip|Clipboard|ClipboardOwner|Clob|Cloneable|CloneNotSupportedException|ClosedByInterruptException|ClosedChannelException|ClosedSelectorException|CMMException|Codec|CodecFactory|CodecFactoryHelper|CodecFactoryOperations|CodecOperations|CoderMalfunctionError|CoderResult|CodeSets|CodeSource|CodingErrorAction|CollationElementIterator|CollationKey|Collator|Collection|CollectionCertStoreParameters|Collections|Color|ColorChooserComponentFactory|ColorChooserUI|ColorConvertOp|ColorModel|ColorSelectionModel|ColorSpace|ColorSupported|ColorUIResource|ComboBoxEditor|ComboBoxModel|ComboBoxUI|ComboPopup|COMM_FAILURE|Comment|CommunicationException|Comparable|Comparator|Compiler|CompletionStatus|CompletionStatusHelper|Component|ComponentAdapter|ComponentColorModel|ComponentEvent|ComponentIdHelper|ComponentInputMap|ComponentInputMapUIResource|ComponentListener|ComponentOrientation|ComponentSampleModel|ComponentUI|ComponentView|Composite|CompositeContext|CompositeName|CompositeView|CompoundBorder|CompoundControl|CompoundEdit|CompoundName|Compression|ConcurrentModificationException|Configuration|ConfigurationException|ConfirmationCallback|ConnectException|ConnectIOException|Connection|ConnectionEvent|ConnectionEventListener|ConnectionPendingException|ConnectionPoolDataSource|ConsoleHandler|Constructor|Container|ContainerAdapter|ContainerEvent|ContainerListener|ContainerOrderFocusTraversalPolicy|ContentHandler|ContentHandlerFactory|ContentModel|Context|ContextList|ContextNotEmptyException|ContextualRenderedImageFactory|Control|ControlFactory|ControllerEventListener|ConvolveOp|CookieHolder|Copies|CopiesSupported|CRC32|CredentialExpiredException|CRL|CRLException|CRLSelector|CropImageFilter|CSS|CTX_RESTRICT_SCOPE|CubicCurve2D|Currency|Current|CurrentHelper|CurrentHolder|CurrentOperations|Cursor|Customizer|CustomMarshal|CustomValue|DATA_CONVERSION|DatabaseMetaData|DataBuffer|DataBufferByte|DataBufferDouble|DataBufferFloat|DataBufferInt|DataBufferShort|DataBufferUShort|DataFlavor|DataFormatException|DatagramChannel|DatagramPacket|DatagramSocket|DatagramSocketImpl|DatagramSocketImplFactory|DataInput|DataInputStream|DataLine|DataOutput|DataOutputStream|DataSource|DataTruncation|Date|DateFormat|DateFormatSymbols|DateFormatter|DateTimeAtCompleted|DateTimeAtCreation|DateTimeAtProcessing|DateTimeSyntax|DebugGraphics|DecimalFormat|DecimalFormatSymbols|DeclHandler|DefaultBoundedRangeModel|DefaultButtonModel|DefaultCaret|DefaultCellEditor|DefaultColorSelectionModel|DefaultComboBoxModel|DefaultDesktopManager|DefaultEditorKit|DefaultFocusManager|DefaultFocusTraversalPolicy|DefaultFormatter|DefaultFormatterFactory|DefaultHandler|DefaultHighlighter|DefaultKeyboardFocusManager|DefaultListCellRenderer|DefaultListModel|DefaultListSelectionModel|DefaultMenuLayout|DefaultMetalTheme|DefaultMutableTreeNode|DefaultPersistenceDelegate|DefaultSingleSelectionModel|DefaultStyledDocument|DefaultTableCellRenderer|DefaultTableColumnModel|DefaultTableModel|DefaultTextUI|DefaultTreeCellEditor|DefaultTreeCellRenderer|DefaultTreeModel|DefaultTreeSelectionModel|DefinitionKind|DefinitionKindHelper|Deflater|DeflaterOutputStream|Delegate|DelegationPermission|DESedeKeySpec|DesignMode|DESKeySpec|DesktopIconUI|DesktopManager|DesktopPaneUI|Destination|Destroyable|DestroyFailedException|DGC|DHGenParameterSpec|DHKey|DHParameterSpec|DHPrivateKey|DHPrivateKeySpec|DHPublicKey|DHPublicKeySpec|Dialog|Dictionary|DigestException|DigestInputStream|DigestOutputStream|Dimension|Dimension2D|DimensionUIResource|DirContext|DirectColorModel|DirectoryManager|DirObjectFactory|DirStateFactory|DisplayMode|DnDConstants|Doc|DocAttribute|DocAttributeSet|DocFlavor|DocPrintJob|Document|DocumentBuilder|DocumentBuilderFactory|DocumentEvent|DocumentFilter|DocumentFragment|DocumentHandler|DocumentListener|DocumentName|DocumentParser|DocumentType|DomainCombiner|DomainManager|DomainManagerOperations|DOMException|DOMImplementation|DOMLocator|DOMResult|DOMSource|Double|DoubleBuffer|DoubleHolder|DoubleSeqHelper|DoubleSeqHolder|DragGestureEvent|DragGestureListener|DragGestureRecognizer|DragSource|DragSourceAdapter|DragSourceContext|DragSourceDragEvent|DragSourceDropEvent|DragSourceEvent|DragSourceListener|DragSourceMotionListener|Driver|DriverManager|DriverPropertyInfo|DropTarget|DropTargetAdapter|DropTargetContext|DropTargetDragEvent|DropTargetDropEvent|DropTargetEvent|DropTargetListener|DSAKey|DSAKeyPairGenerator|DSAParameterSpec|DSAParams|DSAPrivateKey|DSAPrivateKeySpec|DSAPublicKey|DSAPublicKeySpec|DTD|DTDConstants|DTDHandler|DuplicateName|DuplicateNameHelper|DynamicImplementation|DynAny|DynAnyFactory|DynAnyFactoryHelper|DynAnyFactoryOperations|DynAnyHelper|DynAnyOperations|DynAnySeqHelper|DynArray|DynArrayHelper|DynArrayOperations|DynEnum|DynEnumHelper|DynEnumOperations|DynFixed|DynFixedHelper|DynFixedOperations|DynSequence|DynSequenceHelper|DynSequenceOperations|DynStruct|DynStructHelper|DynStructOperations|DynUnion|DynUnionHelper|DynUnionOperations|DynValue|DynValueBox|DynValueBoxOperations|DynValueCommon|DynValueCommonOperations|DynValueHelper|DynValueOperations|EditorKit|Element|ElementIterator|Ellipse2D|EmptyBorder|EmptyStackException|EncodedKeySpec|Encoder|Encoding|ENCODING_CDR_ENCAPS|EncryptedPrivateKeyInfo|Entity|EntityReference|EntityResolver|EnumControl|Enumeration|EnumSyntax|Environment|EOFException|Error|ErrorHandler|ErrorListener|ErrorManager|EtchedBorder|Event|EventContext|EventDirContext|EventHandler|EventListener|EventListenerList|EventListenerProxy|EventObject|EventQueue|EventSetDescriptor|Exception|ExceptionInInitializerError|ExceptionList|ExceptionListener|ExemptionMechanism|ExemptionMechanismException|ExemptionMechanismSpi|ExpandVetoException|ExportException|Expression|ExtendedRequest|ExtendedResponse|Externalizable|FactoryConfigurationError|FailedLoginException|FeatureDescriptor|Fidelity|Field|FieldNameHelper|FieldPosition|FieldView|File|FileCacheImageInputStream|FileCacheImageOutputStream|FileChannel|FileChooserUI|FileDescriptor|FileDialog|FileFilter|FileHandler|FileImageInputStream|FileImageOutputStream|FileInputStream|FileLock|FileLockInterruptionException|FilenameFilter|FileNameMap|FileNotFoundException|FileOutputStream|FilePermission|FileReader|FileSystemView|FileView|FileWriter|Filter|FilteredImageSource|FilterInputStream|FilterOutputStream|FilterReader|FilterWriter|Finishings|FixedHeightLayoutCache|FixedHolder|FlatteningPathIterator|FlavorException|FlavorMap|FlavorTable|Float|FloatBuffer|FloatControl|FloatHolder|FloatSeqHelper|FloatSeqHolder|FlowLayout|FlowView|FocusAdapter|FocusEvent|FocusListener|FocusManager|FocusTraversalPolicy|Font|FontFormatException|FontMetrics|FontRenderContext|FontUIResource|Format|FormatConversionProvider|FormatMismatch|FormatMismatchHelper|Formatter|FormView|ForwardRequest|ForwardRequestHelper|Frame|FREE_MEM|GapContent|GatheringByteChannel|GeneralPath|GeneralSecurityException|GlyphJustificationInfo|GlyphMetrics|GlyphVector|GlyphView|GradientPaint|GraphicAttribute|Graphics|Graphics2D|GraphicsConfigTemplate|GraphicsConfiguration|GraphicsDevice|GraphicsEnvironment|GrayFilter|GregorianCalendar|GridBagConstraints|GridBagLayout|GridLayout|Group|GSSContext|GSSCredential|GSSException|GSSManager|GSSName|Guard|GuardedObject|GZIPInputStream|GZIPOutputStream|Handler|HandlerBase|HandshakeCompletedEvent|HandshakeCompletedListener|HasControls|HashAttributeSet|HashDocAttributeSet|HashMap|HashPrintJobAttributeSet|HashPrintRequestAttributeSet|HashPrintServiceAttributeSet|HashSet|Hashtable|HeadlessException|HierarchyBoundsAdapter|HierarchyBoundsListener|HierarchyEvent|HierarchyListener|Highlighter|HostnameVerifier|HTML|HTMLDocument|HTMLEditorKit|HTMLFrameHyperlinkEvent|HTMLWriter|HttpsURLConnection|HttpURLConnection|HyperlinkEvent|HyperlinkListener|ICC_ColorSpace|ICC_Profile|ICC_ProfileGray|ICC_ProfileRGB|Icon|IconUIResource|IconView|ID_ASSIGNMENT_POLICY_ID|ID_UNIQUENESS_POLICY_ID|IdAssignmentPolicy|IdAssignmentPolicyOperations|IdAssignmentPolicyValue|IdentifierHelper|Identity|IdentityHashMap|IdentityScope|IDLEntity|IDLType|IDLTypeHelper|IDLTypeOperations|IdUniquenessPolicy|IdUniquenessPolicyOperations|IdUniquenessPolicyValue|IIOByteBuffer|IIOException|IIOImage|IIOInvalidTreeException|IIOMetadata|IIOMetadataController|IIOMetadataFormat|IIOMetadataFormatImpl|IIOMetadataNode|IIOParam|IIOParamController|IIOReadProgressListener|IIOReadUpdateListener|IIOReadWarningListener|IIORegistry|IIOServiceProvider|IIOWriteProgressListener|IIOWriteWarningListener|IllegalAccessError|IllegalAccessException|IllegalArgumentException|IllegalBlockingModeException|IllegalBlockSizeException|IllegalCharsetNameException|IllegalComponentStateException|IllegalMonitorStateException|IllegalPathStateException|IllegalSelectorException|IllegalStateException|IllegalThreadStateException|Image|ImageCapabilities|ImageConsumer|ImageFilter|ImageGraphicAttribute|ImageIcon|ImageInputStream|ImageInputStreamImpl|ImageInputStreamSpi|ImageIO|ImageObserver|ImageOutputStream|ImageOutputStreamImpl|ImageOutputStreamSpi|ImageProducer|ImageReader|ImageReaderSpi|ImageReaderWriterSpi|ImageReadParam|ImageTranscoder|ImageTranscoderSpi|ImageTypeSpecifier|ImageView|ImageWriteParam|ImageWriter|ImageWriterSpi|ImagingOpException|IMP_LIMIT|IMPLICIT_ACTIVATION_POLICY_ID|ImplicitActivationPolicy|ImplicitActivationPolicyOperations|ImplicitActivationPolicyValue|IncompatibleClassChangeError|InconsistentTypeCode|InconsistentTypeCodeHelper|IndexColorModel|IndexedPropertyDescriptor|IndexOutOfBoundsException|IndirectionException|Inet4Address|Inet6Address|InetAddress|InetSocketAddress|Inflater|InflaterInputStream|InheritableThreadLocal|InitialContext|InitialContextFactory|InitialContextFactoryBuilder|InitialDirContext|INITIALIZE|InitialLdapContext|InlineView|InputContext|InputEvent|InputMap|InputMapUIResource|InputMethod|InputMethodContext|InputMethodDescriptor|InputMethodEvent|InputMethodHighlight|InputMethodListener|InputMethodRequests|InputSource|InputStream|InputStreamReader|InputSubset|InputVerifier|Insets|InsetsUIResource|InstantiationError|InstantiationException|Instrument|InsufficientResourcesException|IntBuffer|Integer|IntegerSyntax|Interceptor|InterceptorOperations|INTERNAL|InternalError|InternalFrameAdapter|InternalFrameEvent|InternalFrameFocusTraversalPolicy|InternalFrameListener|InternalFrameUI|InternationalFormatter|InterruptedException|InterruptedIOException|InterruptedNamingException|InterruptibleChannel|INTF_REPOS|IntHolder|IntrospectionException|Introspector|INV_FLAG|INV_IDENT|INV_OBJREF|INV_POLICY|Invalid|INVALID_TRANSACTION|InvalidAddress|InvalidAddressHelper|InvalidAddressHolder|InvalidAlgorithmParameterException|InvalidAttributeIdentifierException|InvalidAttributesException|InvalidAttributeValueException|InvalidClassException|InvalidDnDOperationException|InvalidKeyException|InvalidKeySpecException|InvalidMarkException|InvalidMidiDataException|InvalidName|InvalidNameException|InvalidNameHelper|InvalidNameHolder|InvalidObjectException|InvalidParameterException|InvalidParameterSpecException|InvalidPolicy|InvalidPolicyHelper|InvalidPreferencesFormatException|InvalidSearchControlsException|InvalidSearchFilterException|InvalidSeq|InvalidSlot|InvalidSlotHelper|InvalidTransactionException|InvalidTypeForEncoding|InvalidTypeForEncodingHelper|InvalidValue|InvalidValueHelper|InvocationEvent|InvocationHandler|InvocationTargetException|InvokeHandler|IOException|IOR|IORHelper|IORHolder|IORInfo|IORInfoOperations|IORInterceptor|IORInterceptorOperations|IRObject|IRObjectOperations|IstringHelper|ItemEvent|ItemListener|ItemSelectable|Iterator|IvParameterSpec|JApplet|JarEntry|JarException|JarFile|JarInputStream|JarOutputStream|JarURLConnection|JButton|JCheckBox|JCheckBoxMenuItem|JColorChooser|JComboBox|JComponent|JDesktopPane|JDialog|JEditorPane|JFileChooser|JFormattedTextField|JFrame|JInternalFrame|JLabel|JLayeredPane|JList|JMenu|JMenuBar|JMenuItem|JobAttributes|JobHoldUntil|JobImpressions|JobImpressionsCompleted|JobImpressionsSupported|JobKOctets|JobKOctetsProcessed|JobKOctetsSupported|JobMediaSheets|JobMediaSheetsCompleted|JobMediaSheetsSupported|JobMessageFromOperator|JobName|JobOriginatingUserName|JobPriority|JobPrioritySupported|JobSheets|JobState|JobStateReason|JobStateReasons|JOptionPane|JPanel|JPasswordField|JPEGHuffmanTable|JPEGImageReadParam|JPEGImageWriteParam|JPEGQTable|JPopupMenu|JProgressBar|JRadioButton|JRadioButtonMenuItem|JRootPane|JScrollBar|JScrollPane|JSeparator|JSlider|JSpinner|JSplitPane|JTabbedPane|JTable|JTableHeader|JTextArea|JTextComponent|JTextField|JTextPane|JToggleButton|JToolBar|JToolTip|JTree|JViewport|JWindow|KerberosKey|KerberosPrincipal|KerberosTicket|Kernel|Key|KeyAdapter|KeyAgreement|KeyAgreementSpi|KeyboardFocusManager|KeyEvent|KeyEventDispatcher|KeyEventPostProcessor|KeyException|KeyFactory|KeyFactorySpi|KeyGenerator|KeyGeneratorSpi|KeyListener|KeyManagementException|KeyManager|KeyManagerFactory|KeyManagerFactorySpi|Keymap|KeyPair|KeyPairGenerator|KeyPairGeneratorSpi|KeySpec|KeyStore|KeyStoreException|KeyStoreSpi|KeyStroke|Label|LabelUI|LabelView|LanguageCallback|LastOwnerException|LayeredHighlighter|LayoutFocusTraversalPolicy|LayoutManager|LayoutManager2|LayoutQueue|LDAPCertStoreParameters|LdapContext|LdapReferralException|Lease|Level|LexicalHandler|LIFESPAN_POLICY_ID|LifespanPolicy|LifespanPolicyOperations|LifespanPolicyValue|LimitExceededException|Line|Line2D|LineBorder|LineBreakMeasurer|LineEvent|LineListener|LineMetrics|LineNumberInputStream|LineNumberReader|LineUnavailableException|LinkageError|LinkedHashMap|LinkedHashSet|LinkedList|LinkException|LinkLoopException|LinkRef|List|ListCellRenderer|ListDataEvent|ListDataListener|ListIterator|ListModel|ListResourceBundle|ListSelectionEvent|ListSelectionListener|ListSelectionModel|ListUI|ListView|LoaderHandler|Locale|LocalObject|LocateRegistry|LOCATION_FORWARD|Locator|LocatorImpl|Logger|LoggingPermission|LoginContext|LoginException|LoginModule|LogManager|LogRecord|LogStream|Long|LongBuffer|LongHolder|LongLongSeqHelper|LongLongSeqHolder|LongSeqHelper|LongSeqHolder|LookAndFeel|LookupOp|LookupTable|Mac|MacSpi|MalformedInputException|MalformedLinkException|MalformedURLException|ManagerFactoryParameters|Manifest|Map|MappedByteBuffer|MARSHAL|MarshalException|MarshalledObject|MaskFormatter|Matcher|Math|MatteBorder|Media|MediaName|MediaPrintableArea|MediaSize|MediaSizeName|MediaTracker|MediaTray|Member|MemoryCacheImageInputStream|MemoryCacheImageOutputStream|MemoryHandler|MemoryImageSource|Menu|MenuBar|MenuBarUI|MenuComponent|MenuContainer|MenuDragMouseEvent|MenuDragMouseListener|MenuElement|MenuEvent|MenuItem|MenuItemUI|MenuKeyEvent|MenuKeyListener|MenuListener|MenuSelectionManager|MenuShortcut|MessageDigest|MessageDigestSpi|MessageFormat|MessageProp|MetaEventListener|MetalBorders|MetalButtonUI|MetalCheckBoxIcon|MetalCheckBoxUI|MetalComboBoxButton|MetalComboBoxEditor|MetalComboBoxIcon|MetalComboBoxUI|MetalDesktopIconUI|MetalFileChooserUI|MetalIconFactory|MetalInternalFrameTitlePane|MetalInternalFrameUI|MetalLabelUI|MetalLookAndFeel|MetalPopupMenuSeparatorUI|MetalProgressBarUI|MetalRadioButtonUI|MetalRootPaneUI|MetalScrollBarUI|MetalScrollButton|MetalScrollPaneUI|MetalSeparatorUI|MetalSliderUI|MetalSplitPaneUI|MetalTabbedPaneUI|MetalTextFieldUI|MetalTheme|MetalToggleButtonUI|MetalToolBarUI|MetalToolTipUI|MetalTreeUI|MetaMessage|Method|MethodDescriptor|MidiChannel|MidiDevice|MidiDeviceProvider|MidiEvent|MidiFileFormat|MidiFileReader|MidiFileWriter|MidiMessage|MidiSystem|MidiUnavailableException|MimeTypeParseException|MinimalHTMLWriter|MissingResourceException|Mixer|MixerProvider|ModificationItem|Modifier|MouseAdapter|MouseDragGestureRecognizer|MouseEvent|MouseInputAdapter|MouseInputListener|MouseListener|MouseMotionAdapter|MouseMotionListener|MouseWheelEvent|MouseWheelListener|MultiButtonUI|MulticastSocket|MultiColorChooserUI|MultiComboBoxUI|MultiDesktopIconUI|MultiDesktopPaneUI|MultiDoc|MultiDocPrintJob|MultiDocPrintService|MultiFileChooserUI|MultiInternalFrameUI|MultiLabelUI|MultiListUI|MultiLookAndFeel|MultiMenuBarUI|MultiMenuItemUI|MultiOptionPaneUI|MultiPanelUI|MultiPixelPackedSampleModel|MultipleComponentProfileHelper|MultipleComponentProfileHolder|MultipleDocumentHandling|MultipleMaster|MultiPopupMenuUI|MultiProgressBarUI|MultiRootPaneUI|MultiScrollBarUI|MultiScrollPaneUI|MultiSeparatorUI|MultiSliderUI|MultiSpinnerUI|MultiSplitPaneUI|MultiTabbedPaneUI|MultiTableHeaderUI|MultiTableUI|MultiTextUI|MultiToolBarUI|MultiToolTipUI|MultiTreeUI|MultiViewportUI|MutableAttributeSet|MutableComboBoxModel|MutableTreeNode|Name|NameAlreadyBoundException|NameCallback|NameClassPair|NameComponent|NameComponentHelper|NameComponentHolder|NamedNodeMap|NamedValue|NameDynAnyPair|NameDynAnyPairHelper|NameDynAnyPairSeqHelper|NameHelper|NameHolder|NameNotFoundException|NameParser|NamespaceChangeListener|NamespaceSupport|NameValuePair|NameValuePairHelper|NameValuePairSeqHelper|Naming|NamingContext|NamingContextExt|NamingContextExtHelper|NamingContextExtHolder|NamingContextExtOperations|NamingContextExtPOA|NamingContextHelper|NamingContextHolder|NamingContextOperations|NamingContextPOA|NamingEnumeration|NamingEvent|NamingException|NamingExceptionEvent|NamingListener|NamingManager|NamingSecurityException|NavigationFilter|NegativeArraySizeException|NetPermission|NetworkInterface|NO_IMPLEMENT|NO_MEMORY|NO_PERMISSION|NO_RESOURCES|NO_RESPONSE|NoClassDefFoundError|NoConnectionPendingException|NoContext|NoContextHelper|Node|NodeChangeEvent|NodeChangeListener|NodeList|NoInitialContextException|NoninvertibleTransformException|NonReadableChannelException|NonWritableChannelException|NoPermissionException|NoRouteToHostException|NoServant|NoServantHelper|NoSuchAlgorithmException|NoSuchAttributeException|NoSuchElementException|NoSuchFieldError|NoSuchFieldException|NoSuchMethodError|NoSuchMethodException|NoSuchObjectException|NoSuchPaddingException|NoSuchProviderException|NotActiveException|Notation|NotBoundException|NotContextException|NotEmpty|NotEmptyHelper|NotEmptyHolder|NotFound|NotFoundHelper|NotFoundHolder|NotFoundReason|NotFoundReasonHelper|NotFoundReasonHolder|NotOwnerException|NotSerializableException|NotYetBoundException|NotYetConnectedException|NullCipher|NullPointerException|Number|NumberFormat|NumberFormatException|NumberFormatter|NumberOfDocuments|NumberOfInterveningJobs|NumberUp|NumberUpSupported|NumericShaper|NVList|OBJ_ADAPTER|Object|OBJECT_NOT_EXIST|ObjectAlreadyActive|ObjectAlreadyActiveHelper|ObjectChangeListener|ObjectFactory|ObjectFactoryBuilder|ObjectHelper|ObjectHolder|ObjectIdHelper|ObjectImpl|ObjectInput|ObjectInputStream|ObjectInputValidation|ObjectNotActive|ObjectNotActiveHelper|ObjectOutput|ObjectOutputStream|ObjectStreamClass|ObjectStreamConstants|ObjectStreamException|ObjectStreamField|ObjectView|ObjID|Observable|Observer|OctetSeqHelper|OctetSeqHolder|Oid|OMGVMCID|OpenType|Operation|OperationNotSupportedException|Option|OptionalDataException|OptionPaneUI|ORB|ORBInitializer|ORBInitializerOperations|ORBInitInfo|ORBInitInfoOperations|OrientationRequested|OutOfMemoryError|OutputDeviceAssigned|OutputKeys|OutputStream|OutputStreamWriter|OverlappingFileLockException|OverlayLayout|Owner|Package|PackedColorModel|Pageable|PageAttributes|PageFormat|PageRanges|PagesPerMinute|PagesPerMinuteColor|Paint|PaintContext|PaintEvent|Panel|PanelUI|Paper|ParagraphView|Parameter|ParameterBlock|ParameterDescriptor|ParameterMetaData|ParameterMode|ParameterModeHelper|ParameterModeHolder|ParseException|ParsePosition|Parser|ParserAdapter|ParserConfigurationException|ParserDelegator|ParserFactory|PartialResultException|PasswordAuthentication|PasswordCallback|PasswordView|Patch|PathIterator|Pattern|PatternSyntaxException|PBEKey|PBEKeySpec|PBEParameterSpec|PDLOverrideSupported|Permission|PermissionCollection|Permissions|PERSIST_STORE|PersistenceDelegate|PhantomReference|Pipe|PipedInputStream|PipedOutputStream|PipedReader|PipedWriter|PixelGrabber|PixelInterleavedSampleModel|PKCS8EncodedKeySpec|PKIXBuilderParameters|PKIXCertPathBuilderResult|PKIXCertPathChecker|PKIXCertPathValidatorResult|PKIXParameters|PlainDocument|PlainView|POA|POAHelper|POAManager|POAManagerOperations|POAOperations|Point|Point2D|Policy|PolicyError|PolicyErrorCodeHelper|PolicyErrorHelper|PolicyErrorHolder|PolicyFactory|PolicyFactoryOperations|PolicyHelper|PolicyHolder|PolicyListHelper|PolicyListHolder|PolicyNode|PolicyOperations|PolicyQualifierInfo|PolicyTypeHelper|Polygon|PooledConnection|Popup|PopupFactory|PopupMenu|PopupMenuEvent|PopupMenuListener|PopupMenuUI|Port|PortableRemoteObject|PortableRemoteObjectDelegate|PortUnreachableException|Position|PreferenceChangeEvent|PreferenceChangeListener|Preferences|PreferencesFactory|PreparedStatement|PresentationDirection|Principal|PrincipalHolder|Printable|PrinterAbortException|PrinterException|PrinterGraphics|PrinterInfo|PrinterIOException|PrinterIsAcceptingJobs|PrinterJob|PrinterLocation|PrinterMakeAndModel|PrinterMessageFromOperator|PrinterMoreInfo|PrinterMoreInfoManufacturer|PrinterName|PrinterResolution|PrinterState|PrinterStateReason|PrinterStateReasons|PrinterURI|PrintEvent|PrintException|PrintGraphics|PrintJob|PrintJobAdapter|PrintJobAttribute|PrintJobAttributeEvent|PrintJobAttributeListener|PrintJobAttributeSet|PrintJobEvent|PrintJobListener|PrintQuality|PrintRequestAttribute|PrintRequestAttributeSet|PrintService|PrintServiceAttribute|PrintServiceAttributeEvent|PrintServiceAttributeListener|PrintServiceAttributeSet|PrintServiceLookup|PrintStream|PrintWriter|PRIVATE_MEMBER|PrivateCredentialPermission|PrivateKey|PrivilegedAction|PrivilegedActionException|PrivilegedExceptionAction|Process|ProcessingInstruction|ProfileDataException|ProfileIdHelper|ProgressBarUI|ProgressMonitor|ProgressMonitorInputStream|Properties|PropertyChangeEvent|PropertyChangeListener|PropertyChangeListenerProxy|PropertyChangeSupport|PropertyDescriptor|PropertyEditor|PropertyEditorManager|PropertyEditorSupport|PropertyPermission|PropertyResourceBundle|PropertyVetoException|ProtectionDomain|ProtocolException|Provider|ProviderException|Proxy|PSSParameterSpec|PUBLIC_MEMBER|PublicKey|PushbackInputStream|PushbackReader|QuadCurve2D|QueuedJobCount|Random|RandomAccess|RandomAccessFile|Raster|RasterFormatException|RasterOp|RC2ParameterSpec|RC5ParameterSpec|ReadableByteChannel|Reader|ReadOnlyBufferException|Receiver|Rectangle|Rectangle2D|RectangularShape|Ref|RefAddr|Reference|Referenceable|ReferenceQueue|ReferenceUriSchemesSupported|ReferralException|ReflectPermission|Refreshable|RefreshFailedException|RegisterableService|Registry|RegistryHandler|RemarshalException|Remote|RemoteCall|RemoteException|RemoteObject|RemoteRef|RemoteServer|RemoteStub|RenderableImage|RenderableImageOp|RenderableImageProducer|RenderContext|RenderedImage|RenderedImageFactory|Renderer|RenderingHints|RepaintManager|ReplicateScaleFilter|RepositoryIdHelper|Request|REQUEST_PROCESSING_POLICY_ID|RequestInfo|RequestInfoOperations|RequestingUserName|RequestProcessingPolicy|RequestProcessingPolicyOperations|RequestProcessingPolicyValue|RescaleOp|ResolutionSyntax|Resolver|ResolveResult|ResourceBundle|ResponseHandler|Result|ResultSet|ResultSetMetaData|ReverbType|RGBImageFilter|RMIClassLoader|RMIClassLoaderSpi|RMIClientSocketFactory|RMIFailureHandler|RMISecurityException|RMISecurityManager|RMIServerSocketFactory|RMISocketFactory|Robot|RootPaneContainer|RootPaneUI|RoundRectangle2D|RowMapper|RowSet|RowSetEvent|RowSetInternal|RowSetListener|RowSetMetaData|RowSetReader|RowSetWriter|RSAKey|RSAKeyGenParameterSpec|RSAMultiPrimePrivateCrtKey|RSAMultiPrimePrivateCrtKeySpec|RSAOtherPrimeInfo|RSAPrivateCrtKey|RSAPrivateCrtKeySpec|RSAPrivateKey|RSAPrivateKeySpec|RSAPublicKey|RSAPublicKeySpec|RTFEditorKit|RuleBasedCollator|Runnable|Runtime|RunTime|RuntimeException|RunTimeOperations|RuntimePermission|SampleModel|Savepoint|SAXException|SAXNotRecognizedException|SAXNotSupportedException|SAXParseException|SAXParser|SAXParserFactory|SAXResult|SAXSource|SAXTransformerFactory|ScatteringByteChannel|SchemaViolationException|Scrollable|Scrollbar|ScrollBarUI|ScrollPane|ScrollPaneAdjustable|ScrollPaneConstants|ScrollPaneLayout|ScrollPaneUI|SealedObject|SearchControls|SearchResult|SecretKey|SecretKeyFactory|SecretKeyFactorySpi|SecretKeySpec|SecureClassLoader|SecureRandom|SecureRandomSpi|Security|SecurityException|SecurityManager|SecurityPermission|Segment|SelectableChannel|SelectionKey|Selector|SelectorProvider|SeparatorUI|Sequence|SequenceInputStream|Sequencer|Serializable|SerializablePermission|Servant|SERVANT_RETENTION_POLICY_ID|ServantActivator|ServantActivatorHelper|ServantActivatorOperations|ServantActivatorPOA|ServantAlreadyActive|ServantAlreadyActiveHelper|ServantLocator|ServantLocatorHelper|ServantLocatorOperations|ServantLocatorPOA|ServantManager|ServantManagerOperations|ServantNotActive|ServantNotActiveHelper|ServantObject|ServantRetentionPolicy|ServantRetentionPolicyOperations|ServantRetentionPolicyValue|ServerCloneException|ServerError|ServerException|ServerNotActiveException|ServerRef|ServerRequest|ServerRequestInfo|ServerRequestInfoOperations|ServerRequestInterceptor|ServerRequestInterceptorOperations|ServerRuntimeException|ServerSocket|ServerSocketChannel|ServerSocketFactory|ServiceContext|ServiceContextHelper|ServiceContextHolder|ServiceContextListHelper|ServiceContextListHolder|ServiceDetail|ServiceDetailHelper|ServiceIdHelper|ServiceInformation|ServiceInformationHelper|ServiceInformationHolder|ServicePermission|ServiceRegistry|ServiceUI|ServiceUIFactory|ServiceUnavailableException|Set|SetOfIntegerSyntax|SetOverrideType|SetOverrideTypeHelper|Severity|Shape|ShapeGraphicAttribute|SheetCollate|Short|ShortBuffer|ShortBufferException|ShortHolder|ShortLookupTable|ShortMessage|ShortSeqHelper|ShortSeqHolder|Sides|Signature|SignatureException|SignatureSpi|SignedObject|Signer|SimpleAttributeSet|SimpleBeanInfo|SimpleDateFormat|SimpleDoc|SimpleFormatter|SimpleTimeZone|SinglePixelPackedSampleModel|SingleSelectionModel|Size2DSyntax|SizeLimitExceededException|SizeRequirements|SizeSequence|Skeleton|SkeletonMismatchException|SkeletonNotFoundException|SliderUI|Socket|SocketAddress|SocketChannel|SocketException|SocketFactory|SocketHandler|SocketImpl|SocketImplFactory|SocketOptions|SocketPermission|SocketSecurityException|SocketTimeoutException|SoftBevelBorder|SoftReference|SortedMap|SortedSet|SortingFocusTraversalPolicy|Soundbank|SoundbankReader|SoundbankResource|Source|SourceDataLine|SourceLocator|SpinnerDateModel|SpinnerListModel|SpinnerModel|SpinnerNumberModel|SpinnerUI|SplitPaneUI|Spring|SpringLayout|SQLData|SQLException|SQLInput|SQLOutput|SQLPermission|SQLWarning|SSLContext|SSLContextSpi|SSLException|SSLHandshakeException|SSLKeyException|SSLPeerUnverifiedException|SSLPermission|SSLProtocolException|SSLServerSocket|SSLServerSocketFactory|SSLSession|SSLSessionBindingEvent|SSLSessionBindingListener|SSLSessionContext|SSLSocket|SSLSocketFactory|Stack|StackOverflowError|StackTraceElement|StartTlsRequest|StartTlsResponse|State|StateEdit|StateEditable|StateFactory|Statement|Streamable|StreamableValue|StreamCorruptedException|StreamHandler|StreamPrintService|StreamPrintServiceFactory|StreamResult|StreamSource|StreamTokenizer|StrictMath|String|StringBuffer|StringBufferInputStream|StringCharacterIterator|StringContent|StringHolder|StringIndexOutOfBoundsException|StringNameHelper|StringReader|StringRefAddr|StringSelection|StringSeqHelper|StringSeqHolder|StringTokenizer|StringValueHelper|StringWriter|Stroke|Struct|StructMember|StructMemberHelper|Stub|StubDelegate|StubNotFoundException|Style|StyleConstants|StyleContext|StyledDocument|StyledEditorKit|StyleSheet|Subject|SubjectDomainCombiner|SUCCESSFUL|SupportedValuesAttribute|SwingConstants|SwingPropertyChangeSupport|SwingUtilities|SYNC_WITH_TRANSPORT|SyncFailedException|SyncScopeHelper|Synthesizer|SysexMessage|System|SYSTEM_EXCEPTION|SystemColor|SystemException|SystemFlavorMap|TabableView|TabbedPaneUI|TabExpander|TableCellEditor|TableCellRenderer|TableColumn|TableColumnModel|TableColumnModelEvent|TableColumnModelListener|TableHeaderUI|TableModel|TableModelEvent|TableModelListener|TableUI|TableView|TabSet|TabStop|TAG_ALTERNATE_IIOP_ADDRESS|TAG_CODE_SETS|TAG_INTERNET_IOP|TAG_JAVA_CODEBASE|TAG_MULTIPLE_COMPONENTS|TAG_ORB_TYPE|TAG_POLICIES|TagElement|TaggedComponent|TaggedComponentHelper|TaggedComponentHolder|TaggedProfile|TaggedProfileHelper|TaggedProfileHolder|TargetDataLine|TCKind|Templates|TemplatesHandler|Text|TextAction|TextArea|TextAttribute|TextComponent|TextEvent|TextField|TextHitInfo|TextInputCallback|TextLayout|TextListener|TextMeasurer|TextOutputCallback|TextSyntax|TextUI|TexturePaint|Thread|THREAD_POLICY_ID|ThreadDeath|ThreadGroup|ThreadLocal|ThreadPolicy|ThreadPolicyOperations|ThreadPolicyValue|Throwable|Tie|TileObserver|Time|TimeLimitExceededException|Timer|TimerTask|Timestamp|TimeZone|TitledBorder|ToolBarUI|Toolkit|ToolTipManager|ToolTipUI|TooManyListenersException|Track|TRANSACTION_REQUIRED|TRANSACTION_ROLLEDBACK|TransactionRequiredException|TransactionRolledbackException|TransactionService|Transferable|TransferHandler|TransformAttribute|Transformer|TransformerConfigurationException|TransformerException|TransformerFactory|TransformerFactoryConfigurationError|TransformerHandler|TRANSIENT|Transmitter|Transparency|TRANSPORT_RETRY|TreeCellEditor|TreeCellRenderer|TreeExpansionEvent|TreeExpansionListener|TreeMap|TreeModel|TreeModelEvent|TreeModelListener|TreeNode|TreePath|TreeSelectionEvent|TreeSelectionListener|TreeSelectionModel|TreeSet|TreeUI|TreeWillExpandListener|TrustAnchor|TrustManager|TrustManagerFactory|TrustManagerFactorySpi|TypeCode|TypeCodeHolder|TypeMismatch|TypeMismatchHelper|Types|UID|UIDefaults|UIManager|UIResource|ULongLongSeqHelper|ULongLongSeqHolder|ULongSeqHelper|ULongSeqHolder|UndeclaredThrowableException|UndoableEdit|UndoableEditEvent|UndoableEditListener|UndoableEditSupport|UndoManager|UnexpectedException|UnicastRemoteObject|UnionMember|UnionMemberHelper|UNKNOWN|UnknownEncoding|UnknownEncodingHelper|UnknownError|UnknownException|UnknownGroupException|UnknownHostException|UnknownObjectException|UnknownServiceException|UnknownUserException|UnknownUserExceptionHelper|UnknownUserExceptionHolder|UnmappableCharacterException|UnmarshalException|UnmodifiableSetException|UnrecoverableKeyException|Unreferenced|UnresolvedAddressException|UnresolvedPermission|UnsatisfiedLinkError|UnsolicitedNotification|UnsolicitedNotificationEvent|UnsolicitedNotificationListener|UNSUPPORTED_POLICY|UNSUPPORTED_POLICY_VALUE|UnsupportedAddressTypeException|UnsupportedAudioFileException|UnsupportedCallbackException|UnsupportedCharsetException|UnsupportedClassVersionError|UnsupportedEncodingException|UnsupportedFlavorException|UnsupportedLookAndFeelException|UnsupportedOperationException|URI|URIException|URIResolver|URISyntax|URISyntaxException|URL|URLClassLoader|URLConnection|URLDecoder|URLEncoder|URLStreamHandler|URLStreamHandlerFactory|URLStringHelper|USER_EXCEPTION|UserException|UShortSeqHelper|UShortSeqHolder|UTFDataFormatException|Util|UtilDelegate|Utilities|ValueBase|ValueBaseHelper|ValueBaseHolder|ValueFactory|ValueHandler|ValueMember|ValueMemberHelper|VariableHeightLayoutCache|Vector|VerifyError|VersionSpecHelper|VetoableChangeListener|VetoableChangeListenerProxy|VetoableChangeSupport|View|ViewFactory|ViewportLayout|ViewportUI|VirtualMachineError|Visibility|VisibilityHelper|VM_ABSTRACT|VM_CUSTOM|VM_NONE|VM_TRUNCATABLE|VMID|VoiceStatus|Void|VolatileImage|WCharSeqHelper|WCharSeqHolder|WeakHashMap|WeakReference|Window|WindowAdapter|WindowConstants|WindowEvent|WindowFocusListener|WindowListener|WindowStateListener|WrappedPlainView|WritableByteChannel|WritableRaster|WritableRenderedImage|WriteAbortedException|Writer|WrongAdapter|WrongAdapterHelper|WrongPolicy|WrongPolicyHelper|WrongTransaction|WrongTransactionHelper|WrongTransactionHolder|WStringSeqHelper|WStringSeqHolder|WStringValueHelper|X500Principal|X500PrivateCredential|X509Certificate|X509CertSelector|X509CRL|X509CRLEntry|X509CRLSelector|X509EncodedKeySpec|X509Extension|X509KeyManager|X509TrustManager|XAConnection|XADataSource|XAException|XAResource|Xid|XMLDecoder|XMLEncoder|XMLFilter|XMLFilterImpl|XMLFormatter|XMLReader|XMLReaderAdapter|XMLReaderFactory|ZipEntry|ZipException|ZipFile|ZipInputStream|ZipOutputStream|ZoneView|_BindingIteratorImplBase|_BindingIteratorStub|_DynAnyFactoryStub|_DynAnyStub|_DynArrayStub|_DynEnumStub|_DynFixedStub|_DynSequenceStub|_DynStructStub|_DynUnionStub|_DynValueStub|_IDLTypeStub|_NamingContextExtStub|_NamingContextImplBase|_NamingContextStub|_PolicyStub|_Remote_Stub|_ServantActivatorStub|_ServantLocatorStub)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'types' => '/^(boolean|byte|char|const|double|final|float|int|long|short|static|void)$/',
+ 'reserved' => '/^(import|package|abstract|break|case|catch|class|continue|default|do|else|extends|false|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|super|strictfp|switch|synchronized|this|throws|throw|transient|true|try|volatile|while)$/',
+ 'builtin' => '/^(AbstractAction|AbstractBorder|AbstractButton|AbstractCellEditor|AbstractCollection|AbstractColorChooserPanel|AbstractDocument|AbstractInterruptibleChannel|AbstractLayoutCache|AbstractList|AbstractListModel|AbstractMap|AbstractMethodError|AbstractPreferences|AbstractSelectableChannel|AbstractSelectionKey|AbstractSelector|AbstractSequentialList|AbstractSet|AbstractSpinnerModel|AbstractTableModel|AbstractUndoableEdit|AbstractWriter|AccessControlContext|AccessControlException|AccessController|AccessException|Accessible|AccessibleAction|AccessibleBundle|AccessibleComponent|AccessibleContext|AccessibleEditableText|AccessibleExtendedComponent|AccessibleExtendedTable|AccessibleHyperlink|AccessibleHypertext|AccessibleIcon|AccessibleKeyBinding|AccessibleObject|AccessibleRelation|AccessibleRelationSet|AccessibleResourceBundle|AccessibleRole|AccessibleSelection|AccessibleState|AccessibleStateSet|AccessibleTable|AccessibleTableModelChange|AccessibleText|AccessibleValue|AccountExpiredException|Acl|AclEntry|AclNotFoundException|Action|ActionEvent|ActionListener|ActionMap|ActionMapUIResource|Activatable|ActivateFailedException|ActivationDesc|ActivationException|ActivationGroup|ActivationGroup_Stub|ActivationGroupDesc|ActivationGroupID|ActivationID|ActivationInstantiator|ActivationMonitor|ActivationSystem|Activator|ActiveEvent|AdapterActivator|AdapterActivatorOperations|AdapterAlreadyExists|AdapterAlreadyExistsHelper|AdapterInactive|AdapterInactiveHelper|AdapterNonExistent|AdapterNonExistentHelper|AddressHelper|Adjustable|AdjustmentEvent|AdjustmentListener|Adler32|AffineTransform|AffineTransformOp|AlgorithmParameterGenerator|AlgorithmParameterGeneratorSpi|AlgorithmParameters|AlgorithmParameterSpec|AlgorithmParametersSpi|AllPermission|AlphaComposite|AlreadyBound|AlreadyBoundException|AlreadyBoundHelper|AlreadyBoundHolder|AlreadyConnectedException|AncestorEvent|AncestorListener|Annotation|Any|AnyHolder|AnySeqHelper|AnySeqHolder|AppConfigurationEntry|Applet|AppletContext|AppletInitializer|AppletStub|ApplicationException|Arc2D|Area|AreaAveragingScaleFilter|ARG_IN|ARG_INOUT|ARG_OUT|ArithmeticException|Array|ArrayIndexOutOfBoundsException|ArrayList|Arrays|ArrayStoreException|AssertionError|AsyncBoxView|AsynchronousCloseException|Attr|Attribute|AttributedCharacterIterator|AttributedString|AttributeException|AttributeInUseException|AttributeList|AttributeListImpl|AttributeModificationException|Attributes|AttributeSet|AttributeSetUtilities|AttributesImpl|AudioClip|AudioFileFormat|AudioFileReader|AudioFileWriter|AudioFormat|AudioInputStream|AudioPermission|AudioSystem|AuthenticationException|AuthenticationNotSupportedException|Authenticator|AuthPermission|Autoscroll|AWTError|AWTEvent|AWTEventListener|AWTEventListenerProxy|AWTEventMulticaster|AWTException|AWTKeyStroke|AWTPermission|BackingStoreException|BAD_CONTEXT|BAD_INV_ORDER|BAD_OPERATION|BAD_PARAM|BAD_POLICY|BAD_POLICY_TYPE|BAD_POLICY_VALUE|BAD_TYPECODE|BadKind|BadLocationException|BadPaddingException|BandCombineOp|BandedSampleModel|BasicArrowButton|BasicAttribute|BasicAttributes|BasicBorders|BasicButtonListener|BasicButtonUI|BasicCheckBoxMenuItemUI|BasicCheckBoxUI|BasicColorChooserUI|BasicComboBoxEditor|BasicComboBoxRenderer|BasicComboBoxUI|BasicComboPopup|BasicDesktopIconUI|BasicDesktopPaneUI|BasicDirectoryModel|BasicEditorPaneUI|BasicFileChooserUI|BasicFormattedTextFieldUI|BasicGraphicsUtils|BasicHTML|BasicIconFactory|BasicInternalFrameTitlePane|BasicInternalFrameUI|BasicLabelUI|BasicListUI|BasicLookAndFeel|BasicMenuBarUI|BasicMenuItemUI|BasicMenuUI|BasicOptionPaneUI|BasicPanelUI|BasicPasswordFieldUI|BasicPermission|BasicPopupMenuSeparatorUI|BasicPopupMenuUI|BasicProgressBarUI|BasicRadioButtonMenuItemUI|BasicRadioButtonUI|BasicRootPaneUI|BasicScrollBarUI|BasicScrollPaneUI|BasicSeparatorUI|BasicSliderUI|BasicSpinnerUI|BasicSplitPaneDivider|BasicSplitPaneUI|BasicStroke|BasicTabbedPaneUI|BasicTableHeaderUI|BasicTableUI|BasicTextAreaUI|BasicTextFieldUI|BasicTextPaneUI|BasicTextUI|BasicToggleButtonUI|BasicToolBarSeparatorUI|BasicToolBarUI|BasicToolTipUI|BasicTreeUI|BasicViewportUI|BatchUpdateException|BeanContext|BeanContextChild|BeanContextChildComponentProxy|BeanContextChildSupport|BeanContextContainerProxy|BeanContextEvent|BeanContextMembershipEvent|BeanContextMembershipListener|BeanContextProxy|BeanContextServiceAvailableEvent|BeanContextServiceProvider|BeanContextServiceProviderBeanInfo|BeanContextServiceRevokedEvent|BeanContextServiceRevokedListener|BeanContextServices|BeanContextServicesListener|BeanContextServicesSupport|BeanContextSupport|BeanDescriptor|BeanInfo|Beans|BevelBorder|Bidi|BigDecimal|BigInteger|BinaryRefAddr|BindException|Binding|BindingHelper|BindingHolder|BindingIterator|BindingIteratorHelper|BindingIteratorHolder|BindingIteratorOperations|BindingIteratorPOA|BindingListHelper|BindingListHolder|BindingType|BindingTypeHelper|BindingTypeHolder|BitSet|Blob|BlockView|Book|Boolean|BooleanControl|BooleanHolder|BooleanSeqHelper|BooleanSeqHolder|Border|BorderFactory|BorderLayout|BorderUIResource|BoundedRangeModel|Bounds|Box|BoxedValueHelper|BoxLayout|BoxView|BreakIterator|Buffer|BufferCapabilities|BufferedImage|BufferedImageFilter|BufferedImageOp|BufferedInputStream|BufferedOutputStream|BufferedReader|BufferedWriter|BufferOverflowException|BufferStrategy|BufferUnderflowException|Button|ButtonGroup|ButtonModel|ButtonUI|Byte|ByteArrayInputStream|ByteArrayOutputStream|ByteBuffer|ByteChannel|ByteHolder|ByteLookupTable|ByteOrder|Calendar|CallableStatement|Callback|CallbackHandler|CancelablePrintJob|CancelledKeyException|CannotProceed|CannotProceedException|CannotProceedHelper|CannotProceedHolder|CannotRedoException|CannotUndoException|Canvas|CardLayout|Caret|CaretEvent|CaretListener|CDATASection|CellEditor|CellEditorListener|CellRendererPane|Certificate|CertificateEncodingException|CertificateException|CertificateExpiredException|CertificateFactory|CertificateFactorySpi|CertificateNotYetValidException|CertificateParsingException|CertPath|CertPathBuilder|CertPathBuilderException|CertPathBuilderResult|CertPathBuilderSpi|CertPathParameters|CertPathValidator|CertPathValidatorException|CertPathValidatorResult|CertPathValidatorSpi|CertSelector|CertStore|CertStoreException|CertStoreParameters|CertStoreSpi|ChangedCharSetException|ChangeEvent|ChangeListener|Channel|ChannelBinding|Channels|Character|CharacterCodingException|CharacterData|CharacterIterator|CharArrayReader|CharArrayWriter|CharBuffer|CharConversionException|CharHolder|CharSeqHelper|CharSeqHolder|CharSequence|Charset|CharsetDecoder|CharsetEncoder|CharsetProvider|Checkbox|CheckboxGroup|CheckboxMenuItem|CheckedInputStream|CheckedOutputStream|Checksum|Choice|ChoiceCallback|ChoiceFormat|Chromaticity|Cipher|CipherInputStream|CipherOutputStream|CipherSpi|Class|ClassCastException|ClassCircularityError|ClassDesc|ClassFormatError|ClassLoader|ClassNotFoundException|ClientRequestInfo|ClientRequestInfoOperations|ClientRequestInterceptor|ClientRequestInterceptorOperations|Clip|Clipboard|ClipboardOwner|Clob|Cloneable|CloneNotSupportedException|ClosedByInterruptException|ClosedChannelException|ClosedSelectorException|CMMException|Codec|CodecFactory|CodecFactoryHelper|CodecFactoryOperations|CodecOperations|CoderMalfunctionError|CoderResult|CodeSets|CodeSource|CodingErrorAction|CollationElementIterator|CollationKey|Collator|Collection|CollectionCertStoreParameters|Collections|Color|ColorChooserComponentFactory|ColorChooserUI|ColorConvertOp|ColorModel|ColorSelectionModel|ColorSpace|ColorSupported|ColorUIResource|ComboBoxEditor|ComboBoxModel|ComboBoxUI|ComboPopup|COMM_FAILURE|Comment|CommunicationException|Comparable|Comparator|Compiler|CompletionStatus|CompletionStatusHelper|Component|ComponentAdapter|ComponentColorModel|ComponentEvent|ComponentIdHelper|ComponentInputMap|ComponentInputMapUIResource|ComponentListener|ComponentOrientation|ComponentSampleModel|ComponentUI|ComponentView|Composite|CompositeContext|CompositeName|CompositeView|CompoundBorder|CompoundControl|CompoundEdit|CompoundName|Compression|ConcurrentModificationException|Configuration|ConfigurationException|ConfirmationCallback|ConnectException|ConnectIOException|Connection|ConnectionEvent|ConnectionEventListener|ConnectionPendingException|ConnectionPoolDataSource|ConsoleHandler|Constructor|Container|ContainerAdapter|ContainerEvent|ContainerListener|ContainerOrderFocusTraversalPolicy|ContentHandler|ContentHandlerFactory|ContentModel|Context|ContextList|ContextNotEmptyException|ContextualRenderedImageFactory|Control|ControlFactory|ControllerEventListener|ConvolveOp|CookieHolder|Copies|CopiesSupported|CRC32|CredentialExpiredException|CRL|CRLException|CRLSelector|CropImageFilter|CSS|CTX_RESTRICT_SCOPE|CubicCurve2D|Currency|Current|CurrentHelper|CurrentHolder|CurrentOperations|Cursor|Customizer|CustomMarshal|CustomValue|DATA_CONVERSION|DatabaseMetaData|DataBuffer|DataBufferByte|DataBufferDouble|DataBufferFloat|DataBufferInt|DataBufferShort|DataBufferUShort|DataFlavor|DataFormatException|DatagramChannel|DatagramPacket|DatagramSocket|DatagramSocketImpl|DatagramSocketImplFactory|DataInput|DataInputStream|DataLine|DataOutput|DataOutputStream|DataSource|DataTruncation|Date|DateFormat|DateFormatSymbols|DateFormatter|DateTimeAtCompleted|DateTimeAtCreation|DateTimeAtProcessing|DateTimeSyntax|DebugGraphics|DecimalFormat|DecimalFormatSymbols|DeclHandler|DefaultBoundedRangeModel|DefaultButtonModel|DefaultCaret|DefaultCellEditor|DefaultColorSelectionModel|DefaultComboBoxModel|DefaultDesktopManager|DefaultEditorKit|DefaultFocusManager|DefaultFocusTraversalPolicy|DefaultFormatter|DefaultFormatterFactory|DefaultHandler|DefaultHighlighter|DefaultKeyboardFocusManager|DefaultListCellRenderer|DefaultListModel|DefaultListSelectionModel|DefaultMenuLayout|DefaultMetalTheme|DefaultMutableTreeNode|DefaultPersistenceDelegate|DefaultSingleSelectionModel|DefaultStyledDocument|DefaultTableCellRenderer|DefaultTableColumnModel|DefaultTableModel|DefaultTextUI|DefaultTreeCellEditor|DefaultTreeCellRenderer|DefaultTreeModel|DefaultTreeSelectionModel|DefinitionKind|DefinitionKindHelper|Deflater|DeflaterOutputStream|Delegate|DelegationPermission|DESedeKeySpec|DesignMode|DESKeySpec|DesktopIconUI|DesktopManager|DesktopPaneUI|Destination|Destroyable|DestroyFailedException|DGC|DHGenParameterSpec|DHKey|DHParameterSpec|DHPrivateKey|DHPrivateKeySpec|DHPublicKey|DHPublicKeySpec|Dialog|Dictionary|DigestException|DigestInputStream|DigestOutputStream|Dimension|Dimension2D|DimensionUIResource|DirContext|DirectColorModel|DirectoryManager|DirObjectFactory|DirStateFactory|DisplayMode|DnDConstants|Doc|DocAttribute|DocAttributeSet|DocFlavor|DocPrintJob|Document|DocumentBuilder|DocumentBuilderFactory|DocumentEvent|DocumentFilter|DocumentFragment|DocumentHandler|DocumentListener|DocumentName|DocumentParser|DocumentType|DomainCombiner|DomainManager|DomainManagerOperations|DOMException|DOMImplementation|DOMLocator|DOMResult|DOMSource|Double|DoubleBuffer|DoubleHolder|DoubleSeqHelper|DoubleSeqHolder|DragGestureEvent|DragGestureListener|DragGestureRecognizer|DragSource|DragSourceAdapter|DragSourceContext|DragSourceDragEvent|DragSourceDropEvent|DragSourceEvent|DragSourceListener|DragSourceMotionListener|Driver|DriverManager|DriverPropertyInfo|DropTarget|DropTargetAdapter|DropTargetContext|DropTargetDragEvent|DropTargetDropEvent|DropTargetEvent|DropTargetListener|DSAKey|DSAKeyPairGenerator|DSAParameterSpec|DSAParams|DSAPrivateKey|DSAPrivateKeySpec|DSAPublicKey|DSAPublicKeySpec|DTD|DTDConstants|DTDHandler|DuplicateName|DuplicateNameHelper|DynamicImplementation|DynAny|DynAnyFactory|DynAnyFactoryHelper|DynAnyFactoryOperations|DynAnyHelper|DynAnyOperations|DynAnySeqHelper|DynArray|DynArrayHelper|DynArrayOperations|DynEnum|DynEnumHelper|DynEnumOperations|DynFixed|DynFixedHelper|DynFixedOperations|DynSequence|DynSequenceHelper|DynSequenceOperations|DynStruct|DynStructHelper|DynStructOperations|DynUnion|DynUnionHelper|DynUnionOperations|DynValue|DynValueBox|DynValueBoxOperations|DynValueCommon|DynValueCommonOperations|DynValueHelper|DynValueOperations|EditorKit|Element|ElementIterator|Ellipse2D|EmptyBorder|EmptyStackException|EncodedKeySpec|Encoder|Encoding|ENCODING_CDR_ENCAPS|EncryptedPrivateKeyInfo|Entity|EntityReference|EntityResolver|EnumControl|Enumeration|EnumSyntax|Environment|EOFException|Error|ErrorHandler|ErrorListener|ErrorManager|EtchedBorder|Event|EventContext|EventDirContext|EventHandler|EventListener|EventListenerList|EventListenerProxy|EventObject|EventQueue|EventSetDescriptor|Exception|ExceptionInInitializerError|ExceptionList|ExceptionListener|ExemptionMechanism|ExemptionMechanismException|ExemptionMechanismSpi|ExpandVetoException|ExportException|Expression|ExtendedRequest|ExtendedResponse|Externalizable|FactoryConfigurationError|FailedLoginException|FeatureDescriptor|Fidelity|Field|FieldNameHelper|FieldPosition|FieldView|File|FileCacheImageInputStream|FileCacheImageOutputStream|FileChannel|FileChooserUI|FileDescriptor|FileDialog|FileFilter|FileHandler|FileImageInputStream|FileImageOutputStream|FileInputStream|FileLock|FileLockInterruptionException|FilenameFilter|FileNameMap|FileNotFoundException|FileOutputStream|FilePermission|FileReader|FileSystemView|FileView|FileWriter|Filter|FilteredImageSource|FilterInputStream|FilterOutputStream|FilterReader|FilterWriter|Finishings|FixedHeightLayoutCache|FixedHolder|FlatteningPathIterator|FlavorException|FlavorMap|FlavorTable|Float|FloatBuffer|FloatControl|FloatHolder|FloatSeqHelper|FloatSeqHolder|FlowLayout|FlowView|FocusAdapter|FocusEvent|FocusListener|FocusManager|FocusTraversalPolicy|Font|FontFormatException|FontMetrics|FontRenderContext|FontUIResource|Format|FormatConversionProvider|FormatMismatch|FormatMismatchHelper|Formatter|FormView|ForwardRequest|ForwardRequestHelper|Frame|FREE_MEM|GapContent|GatheringByteChannel|GeneralPath|GeneralSecurityException|GlyphJustificationInfo|GlyphMetrics|GlyphVector|GlyphView|GradientPaint|GraphicAttribute|Graphics|Graphics2D|GraphicsConfigTemplate|GraphicsConfiguration|GraphicsDevice|GraphicsEnvironment|GrayFilter|GregorianCalendar|GridBagConstraints|GridBagLayout|GridLayout|Group|GSSContext|GSSCredential|GSSException|GSSManager|GSSName|Guard|GuardedObject|GZIPInputStream|GZIPOutputStream|Handler|HandlerBase|HandshakeCompletedEvent|HandshakeCompletedListener|HasControls|HashAttributeSet|HashDocAttributeSet|HashMap|HashPrintJobAttributeSet|HashPrintRequestAttributeSet|HashPrintServiceAttributeSet|HashSet|Hashtable|HeadlessException|HierarchyBoundsAdapter|HierarchyBoundsListener|HierarchyEvent|HierarchyListener|Highlighter|HostnameVerifier|HTML|HTMLDocument|HTMLEditorKit|HTMLFrameHyperlinkEvent|HTMLWriter|HttpsURLConnection|HttpURLConnection|HyperlinkEvent|HyperlinkListener|ICC_ColorSpace|ICC_Profile|ICC_ProfileGray|ICC_ProfileRGB|Icon|IconUIResource|IconView|ID_ASSIGNMENT_POLICY_ID|ID_UNIQUENESS_POLICY_ID|IdAssignmentPolicy|IdAssignmentPolicyOperations|IdAssignmentPolicyValue|IdentifierHelper|Identity|IdentityHashMap|IdentityScope|IDLEntity|IDLType|IDLTypeHelper|IDLTypeOperations|IdUniquenessPolicy|IdUniquenessPolicyOperations|IdUniquenessPolicyValue|IIOByteBuffer|IIOException|IIOImage|IIOInvalidTreeException|IIOMetadata|IIOMetadataController|IIOMetadataFormat|IIOMetadataFormatImpl|IIOMetadataNode|IIOParam|IIOParamController|IIOReadProgressListener|IIOReadUpdateListener|IIOReadWarningListener|IIORegistry|IIOServiceProvider|IIOWriteProgressListener|IIOWriteWarningListener|IllegalAccessError|IllegalAccessException|IllegalArgumentException|IllegalBlockingModeException|IllegalBlockSizeException|IllegalCharsetNameException|IllegalComponentStateException|IllegalMonitorStateException|IllegalPathStateException|IllegalSelectorException|IllegalStateException|IllegalThreadStateException|Image|ImageCapabilities|ImageConsumer|ImageFilter|ImageGraphicAttribute|ImageIcon|ImageInputStream|ImageInputStreamImpl|ImageInputStreamSpi|ImageIO|ImageObserver|ImageOutputStream|ImageOutputStreamImpl|ImageOutputStreamSpi|ImageProducer|ImageReader|ImageReaderSpi|ImageReaderWriterSpi|ImageReadParam|ImageTranscoder|ImageTranscoderSpi|ImageTypeSpecifier|ImageView|ImageWriteParam|ImageWriter|ImageWriterSpi|ImagingOpException|IMP_LIMIT|IMPLICIT_ACTIVATION_POLICY_ID|ImplicitActivationPolicy|ImplicitActivationPolicyOperations|ImplicitActivationPolicyValue|IncompatibleClassChangeError|InconsistentTypeCode|InconsistentTypeCodeHelper|IndexColorModel|IndexedPropertyDescriptor|IndexOutOfBoundsException|IndirectionException|Inet4Address|Inet6Address|InetAddress|InetSocketAddress|Inflater|InflaterInputStream|InheritableThreadLocal|InitialContext|InitialContextFactory|InitialContextFactoryBuilder|InitialDirContext|INITIALIZE|InitialLdapContext|InlineView|InputContext|InputEvent|InputMap|InputMapUIResource|InputMethod|InputMethodContext|InputMethodDescriptor|InputMethodEvent|InputMethodHighlight|InputMethodListener|InputMethodRequests|InputSource|InputStream|InputStreamReader|InputSubset|InputVerifier|Insets|InsetsUIResource|InstantiationError|InstantiationException|Instrument|InsufficientResourcesException|IntBuffer|Integer|IntegerSyntax|Interceptor|InterceptorOperations|INTERNAL|InternalError|InternalFrameAdapter|InternalFrameEvent|InternalFrameFocusTraversalPolicy|InternalFrameListener|InternalFrameUI|InternationalFormatter|InterruptedException|InterruptedIOException|InterruptedNamingException|InterruptibleChannel|INTF_REPOS|IntHolder|IntrospectionException|Introspector|INV_FLAG|INV_IDENT|INV_OBJREF|INV_POLICY|Invalid|INVALID_TRANSACTION|InvalidAddress|InvalidAddressHelper|InvalidAddressHolder|InvalidAlgorithmParameterException|InvalidAttributeIdentifierException|InvalidAttributesException|InvalidAttributeValueException|InvalidClassException|InvalidDnDOperationException|InvalidKeyException|InvalidKeySpecException|InvalidMarkException|InvalidMidiDataException|InvalidName|InvalidNameException|InvalidNameHelper|InvalidNameHolder|InvalidObjectException|InvalidParameterException|InvalidParameterSpecException|InvalidPolicy|InvalidPolicyHelper|InvalidPreferencesFormatException|InvalidSearchControlsException|InvalidSearchFilterException|InvalidSeq|InvalidSlot|InvalidSlotHelper|InvalidTransactionException|InvalidTypeForEncoding|InvalidTypeForEncodingHelper|InvalidValue|InvalidValueHelper|InvocationEvent|InvocationHandler|InvocationTargetException|InvokeHandler|IOException|IOR|IORHelper|IORHolder|IORInfo|IORInfoOperations|IORInterceptor|IORInterceptorOperations|IRObject|IRObjectOperations|IstringHelper|ItemEvent|ItemListener|ItemSelectable|Iterator|IvParameterSpec|JApplet|JarEntry|JarException|JarFile|JarInputStream|JarOutputStream|JarURLConnection|JButton|JCheckBox|JCheckBoxMenuItem|JColorChooser|JComboBox|JComponent|JDesktopPane|JDialog|JEditorPane|JFileChooser|JFormattedTextField|JFrame|JInternalFrame|JLabel|JLayeredPane|JList|JMenu|JMenuBar|JMenuItem|JobAttributes|JobHoldUntil|JobImpressions|JobImpressionsCompleted|JobImpressionsSupported|JobKOctets|JobKOctetsProcessed|JobKOctetsSupported|JobMediaSheets|JobMediaSheetsCompleted|JobMediaSheetsSupported|JobMessageFromOperator|JobName|JobOriginatingUserName|JobPriority|JobPrioritySupported|JobSheets|JobState|JobStateReason|JobStateReasons|JOptionPane|JPanel|JPasswordField|JPEGHuffmanTable|JPEGImageReadParam|JPEGImageWriteParam|JPEGQTable|JPopupMenu|JProgressBar|JRadioButton|JRadioButtonMenuItem|JRootPane|JScrollBar|JScrollPane|JSeparator|JSlider|JSpinner|JSplitPane|JTabbedPane|JTable|JTableHeader|JTextArea|JTextComponent|JTextField|JTextPane|JToggleButton|JToolBar|JToolTip|JTree|JViewport|JWindow|KerberosKey|KerberosPrincipal|KerberosTicket|Kernel|Key|KeyAdapter|KeyAgreement|KeyAgreementSpi|KeyboardFocusManager|KeyEvent|KeyEventDispatcher|KeyEventPostProcessor|KeyException|KeyFactory|KeyFactorySpi|KeyGenerator|KeyGeneratorSpi|KeyListener|KeyManagementException|KeyManager|KeyManagerFactory|KeyManagerFactorySpi|Keymap|KeyPair|KeyPairGenerator|KeyPairGeneratorSpi|KeySpec|KeyStore|KeyStoreException|KeyStoreSpi|KeyStroke|Label|LabelUI|LabelView|LanguageCallback|LastOwnerException|LayeredHighlighter|LayoutFocusTraversalPolicy|LayoutManager|LayoutManager2|LayoutQueue|LDAPCertStoreParameters|LdapContext|LdapReferralException|Lease|Level|LexicalHandler|LIFESPAN_POLICY_ID|LifespanPolicy|LifespanPolicyOperations|LifespanPolicyValue|LimitExceededException|Line|Line2D|LineBorder|LineBreakMeasurer|LineEvent|LineListener|LineMetrics|LineNumberInputStream|LineNumberReader|LineUnavailableException|LinkageError|LinkedHashMap|LinkedHashSet|LinkedList|LinkException|LinkLoopException|LinkRef|List|ListCellRenderer|ListDataEvent|ListDataListener|ListIterator|ListModel|ListResourceBundle|ListSelectionEvent|ListSelectionListener|ListSelectionModel|ListUI|ListView|LoaderHandler|Locale|LocalObject|LocateRegistry|LOCATION_FORWARD|Locator|LocatorImpl|Logger|LoggingPermission|LoginContext|LoginException|LoginModule|LogManager|LogRecord|LogStream|Long|LongBuffer|LongHolder|LongLongSeqHelper|LongLongSeqHolder|LongSeqHelper|LongSeqHolder|LookAndFeel|LookupOp|LookupTable|Mac|MacSpi|MalformedInputException|MalformedLinkException|MalformedURLException|ManagerFactoryParameters|Manifest|Map|MappedByteBuffer|MARSHAL|MarshalException|MarshalledObject|MaskFormatter|Matcher|Math|MatteBorder|Media|MediaName|MediaPrintableArea|MediaSize|MediaSizeName|MediaTracker|MediaTray|Member|MemoryCacheImageInputStream|MemoryCacheImageOutputStream|MemoryHandler|MemoryImageSource|Menu|MenuBar|MenuBarUI|MenuComponent|MenuContainer|MenuDragMouseEvent|MenuDragMouseListener|MenuElement|MenuEvent|MenuItem|MenuItemUI|MenuKeyEvent|MenuKeyListener|MenuListener|MenuSelectionManager|MenuShortcut|MessageDigest|MessageDigestSpi|MessageFormat|MessageProp|MetaEventListener|MetalBorders|MetalButtonUI|MetalCheckBoxIcon|MetalCheckBoxUI|MetalComboBoxButton|MetalComboBoxEditor|MetalComboBoxIcon|MetalComboBoxUI|MetalDesktopIconUI|MetalFileChooserUI|MetalIconFactory|MetalInternalFrameTitlePane|MetalInternalFrameUI|MetalLabelUI|MetalLookAndFeel|MetalPopupMenuSeparatorUI|MetalProgressBarUI|MetalRadioButtonUI|MetalRootPaneUI|MetalScrollBarUI|MetalScrollButton|MetalScrollPaneUI|MetalSeparatorUI|MetalSliderUI|MetalSplitPaneUI|MetalTabbedPaneUI|MetalTextFieldUI|MetalTheme|MetalToggleButtonUI|MetalToolBarUI|MetalToolTipUI|MetalTreeUI|MetaMessage|Method|MethodDescriptor|MidiChannel|MidiDevice|MidiDeviceProvider|MidiEvent|MidiFileFormat|MidiFileReader|MidiFileWriter|MidiMessage|MidiSystem|MidiUnavailableException|MimeTypeParseException|MinimalHTMLWriter|MissingResourceException|Mixer|MixerProvider|ModificationItem|Modifier|MouseAdapter|MouseDragGestureRecognizer|MouseEvent|MouseInputAdapter|MouseInputListener|MouseListener|MouseMotionAdapter|MouseMotionListener|MouseWheelEvent|MouseWheelListener|MultiButtonUI|MulticastSocket|MultiColorChooserUI|MultiComboBoxUI|MultiDesktopIconUI|MultiDesktopPaneUI|MultiDoc|MultiDocPrintJob|MultiDocPrintService|MultiFileChooserUI|MultiInternalFrameUI|MultiLabelUI|MultiListUI|MultiLookAndFeel|MultiMenuBarUI|MultiMenuItemUI|MultiOptionPaneUI|MultiPanelUI|MultiPixelPackedSampleModel|MultipleComponentProfileHelper|MultipleComponentProfileHolder|MultipleDocumentHandling|MultipleMaster|MultiPopupMenuUI|MultiProgressBarUI|MultiRootPaneUI|MultiScrollBarUI|MultiScrollPaneUI|MultiSeparatorUI|MultiSliderUI|MultiSpinnerUI|MultiSplitPaneUI|MultiTabbedPaneUI|MultiTableHeaderUI|MultiTableUI|MultiTextUI|MultiToolBarUI|MultiToolTipUI|MultiTreeUI|MultiViewportUI|MutableAttributeSet|MutableComboBoxModel|MutableTreeNode|Name|NameAlreadyBoundException|NameCallback|NameClassPair|NameComponent|NameComponentHelper|NameComponentHolder|NamedNodeMap|NamedValue|NameDynAnyPair|NameDynAnyPairHelper|NameDynAnyPairSeqHelper|NameHelper|NameHolder|NameNotFoundException|NameParser|NamespaceChangeListener|NamespaceSupport|NameValuePair|NameValuePairHelper|NameValuePairSeqHelper|Naming|NamingContext|NamingContextExt|NamingContextExtHelper|NamingContextExtHolder|NamingContextExtOperations|NamingContextExtPOA|NamingContextHelper|NamingContextHolder|NamingContextOperations|NamingContextPOA|NamingEnumeration|NamingEvent|NamingException|NamingExceptionEvent|NamingListener|NamingManager|NamingSecurityException|NavigationFilter|NegativeArraySizeException|NetPermission|NetworkInterface|NO_IMPLEMENT|NO_MEMORY|NO_PERMISSION|NO_RESOURCES|NO_RESPONSE|NoClassDefFoundError|NoConnectionPendingException|NoContext|NoContextHelper|Node|NodeChangeEvent|NodeChangeListener|NodeList|NoInitialContextException|NoninvertibleTransformException|NonReadableChannelException|NonWritableChannelException|NoPermissionException|NoRouteToHostException|NoServant|NoServantHelper|NoSuchAlgorithmException|NoSuchAttributeException|NoSuchElementException|NoSuchFieldError|NoSuchFieldException|NoSuchMethodError|NoSuchMethodException|NoSuchObjectException|NoSuchPaddingException|NoSuchProviderException|NotActiveException|Notation|NotBoundException|NotContextException|NotEmpty|NotEmptyHelper|NotEmptyHolder|NotFound|NotFoundHelper|NotFoundHolder|NotFoundReason|NotFoundReasonHelper|NotFoundReasonHolder|NotOwnerException|NotSerializableException|NotYetBoundException|NotYetConnectedException|NullCipher|NullPointerException|Number|NumberFormat|NumberFormatException|NumberFormatter|NumberOfDocuments|NumberOfInterveningJobs|NumberUp|NumberUpSupported|NumericShaper|NVList|OBJ_ADAPTER|Object|OBJECT_NOT_EXIST|ObjectAlreadyActive|ObjectAlreadyActiveHelper|ObjectChangeListener|ObjectFactory|ObjectFactoryBuilder|ObjectHelper|ObjectHolder|ObjectIdHelper|ObjectImpl|ObjectInput|ObjectInputStream|ObjectInputValidation|ObjectNotActive|ObjectNotActiveHelper|ObjectOutput|ObjectOutputStream|ObjectStreamClass|ObjectStreamConstants|ObjectStreamException|ObjectStreamField|ObjectView|ObjID|Observable|Observer|OctetSeqHelper|OctetSeqHolder|Oid|OMGVMCID|OpenType|Operation|OperationNotSupportedException|Option|OptionalDataException|OptionPaneUI|ORB|ORBInitializer|ORBInitializerOperations|ORBInitInfo|ORBInitInfoOperations|OrientationRequested|OutOfMemoryError|OutputDeviceAssigned|OutputKeys|OutputStream|OutputStreamWriter|OverlappingFileLockException|OverlayLayout|Owner|Package|PackedColorModel|Pageable|PageAttributes|PageFormat|PageRanges|PagesPerMinute|PagesPerMinuteColor|Paint|PaintContext|PaintEvent|Panel|PanelUI|Paper|ParagraphView|Parameter|ParameterBlock|ParameterDescriptor|ParameterMetaData|ParameterMode|ParameterModeHelper|ParameterModeHolder|ParseException|ParsePosition|Parser|ParserAdapter|ParserConfigurationException|ParserDelegator|ParserFactory|PartialResultException|PasswordAuthentication|PasswordCallback|PasswordView|Patch|PathIterator|Pattern|PatternSyntaxException|PBEKey|PBEKeySpec|PBEParameterSpec|PDLOverrideSupported|Permission|PermissionCollection|Permissions|PERSIST_STORE|PersistenceDelegate|PhantomReference|Pipe|PipedInputStream|PipedOutputStream|PipedReader|PipedWriter|PixelGrabber|PixelInterleavedSampleModel|PKCS8EncodedKeySpec|PKIXBuilderParameters|PKIXCertPathBuilderResult|PKIXCertPathChecker|PKIXCertPathValidatorResult|PKIXParameters|PlainDocument|PlainView|POA|POAHelper|POAManager|POAManagerOperations|POAOperations|Point|Point2D|Policy|PolicyError|PolicyErrorCodeHelper|PolicyErrorHelper|PolicyErrorHolder|PolicyFactory|PolicyFactoryOperations|PolicyHelper|PolicyHolder|PolicyListHelper|PolicyListHolder|PolicyNode|PolicyOperations|PolicyQualifierInfo|PolicyTypeHelper|Polygon|PooledConnection|Popup|PopupFactory|PopupMenu|PopupMenuEvent|PopupMenuListener|PopupMenuUI|Port|PortableRemoteObject|PortableRemoteObjectDelegate|PortUnreachableException|Position|PreferenceChangeEvent|PreferenceChangeListener|Preferences|PreferencesFactory|PreparedStatement|PresentationDirection|Principal|PrincipalHolder|Printable|PrinterAbortException|PrinterException|PrinterGraphics|PrinterInfo|PrinterIOException|PrinterIsAcceptingJobs|PrinterJob|PrinterLocation|PrinterMakeAndModel|PrinterMessageFromOperator|PrinterMoreInfo|PrinterMoreInfoManufacturer|PrinterName|PrinterResolution|PrinterState|PrinterStateReason|PrinterStateReasons|PrinterURI|PrintEvent|PrintException|PrintGraphics|PrintJob|PrintJobAdapter|PrintJobAttribute|PrintJobAttributeEvent|PrintJobAttributeListener|PrintJobAttributeSet|PrintJobEvent|PrintJobListener|PrintQuality|PrintRequestAttribute|PrintRequestAttributeSet|PrintService|PrintServiceAttribute|PrintServiceAttributeEvent|PrintServiceAttributeListener|PrintServiceAttributeSet|PrintServiceLookup|PrintStream|PrintWriter|PRIVATE_MEMBER|PrivateCredentialPermission|PrivateKey|PrivilegedAction|PrivilegedActionException|PrivilegedExceptionAction|Process|ProcessingInstruction|ProfileDataException|ProfileIdHelper|ProgressBarUI|ProgressMonitor|ProgressMonitorInputStream|Properties|PropertyChangeEvent|PropertyChangeListener|PropertyChangeListenerProxy|PropertyChangeSupport|PropertyDescriptor|PropertyEditor|PropertyEditorManager|PropertyEditorSupport|PropertyPermission|PropertyResourceBundle|PropertyVetoException|ProtectionDomain|ProtocolException|Provider|ProviderException|Proxy|PSSParameterSpec|PUBLIC_MEMBER|PublicKey|PushbackInputStream|PushbackReader|QuadCurve2D|QueuedJobCount|Random|RandomAccess|RandomAccessFile|Raster|RasterFormatException|RasterOp|RC2ParameterSpec|RC5ParameterSpec|ReadableByteChannel|Reader|ReadOnlyBufferException|Receiver|Rectangle|Rectangle2D|RectangularShape|Ref|RefAddr|Reference|Referenceable|ReferenceQueue|ReferenceUriSchemesSupported|ReferralException|ReflectPermission|Refreshable|RefreshFailedException|RegisterableService|Registry|RegistryHandler|RemarshalException|Remote|RemoteCall|RemoteException|RemoteObject|RemoteRef|RemoteServer|RemoteStub|RenderableImage|RenderableImageOp|RenderableImageProducer|RenderContext|RenderedImage|RenderedImageFactory|Renderer|RenderingHints|RepaintManager|ReplicateScaleFilter|RepositoryIdHelper|Request|REQUEST_PROCESSING_POLICY_ID|RequestInfo|RequestInfoOperations|RequestingUserName|RequestProcessingPolicy|RequestProcessingPolicyOperations|RequestProcessingPolicyValue|RescaleOp|ResolutionSyntax|Resolver|ResolveResult|ResourceBundle|ResponseHandler|Result|ResultSet|ResultSetMetaData|ReverbType|RGBImageFilter|RMIClassLoader|RMIClassLoaderSpi|RMIClientSocketFactory|RMIFailureHandler|RMISecurityException|RMISecurityManager|RMIServerSocketFactory|RMISocketFactory|Robot|RootPaneContainer|RootPaneUI|RoundRectangle2D|RowMapper|RowSet|RowSetEvent|RowSetInternal|RowSetListener|RowSetMetaData|RowSetReader|RowSetWriter|RSAKey|RSAKeyGenParameterSpec|RSAMultiPrimePrivateCrtKey|RSAMultiPrimePrivateCrtKeySpec|RSAOtherPrimeInfo|RSAPrivateCrtKey|RSAPrivateCrtKeySpec|RSAPrivateKey|RSAPrivateKeySpec|RSAPublicKey|RSAPublicKeySpec|RTFEditorKit|RuleBasedCollator|Runnable|Runtime|RunTime|RuntimeException|RunTimeOperations|RuntimePermission|SampleModel|Savepoint|SAXException|SAXNotRecognizedException|SAXNotSupportedException|SAXParseException|SAXParser|SAXParserFactory|SAXResult|SAXSource|SAXTransformerFactory|ScatteringByteChannel|SchemaViolationException|Scrollable|Scrollbar|ScrollBarUI|ScrollPane|ScrollPaneAdjustable|ScrollPaneConstants|ScrollPaneLayout|ScrollPaneUI|SealedObject|SearchControls|SearchResult|SecretKey|SecretKeyFactory|SecretKeyFactorySpi|SecretKeySpec|SecureClassLoader|SecureRandom|SecureRandomSpi|Security|SecurityException|SecurityManager|SecurityPermission|Segment|SelectableChannel|SelectionKey|Selector|SelectorProvider|SeparatorUI|Sequence|SequenceInputStream|Sequencer|Serializable|SerializablePermission|Servant|SERVANT_RETENTION_POLICY_ID|ServantActivator|ServantActivatorHelper|ServantActivatorOperations|ServantActivatorPOA|ServantAlreadyActive|ServantAlreadyActiveHelper|ServantLocator|ServantLocatorHelper|ServantLocatorOperations|ServantLocatorPOA|ServantManager|ServantManagerOperations|ServantNotActive|ServantNotActiveHelper|ServantObject|ServantRetentionPolicy|ServantRetentionPolicyOperations|ServantRetentionPolicyValue|ServerCloneException|ServerError|ServerException|ServerNotActiveException|ServerRef|ServerRequest|ServerRequestInfo|ServerRequestInfoOperations|ServerRequestInterceptor|ServerRequestInterceptorOperations|ServerRuntimeException|ServerSocket|ServerSocketChannel|ServerSocketFactory|ServiceContext|ServiceContextHelper|ServiceContextHolder|ServiceContextListHelper|ServiceContextListHolder|ServiceDetail|ServiceDetailHelper|ServiceIdHelper|ServiceInformation|ServiceInformationHelper|ServiceInformationHolder|ServicePermission|ServiceRegistry|ServiceUI|ServiceUIFactory|ServiceUnavailableException|Set|SetOfIntegerSyntax|SetOverrideType|SetOverrideTypeHelper|Severity|Shape|ShapeGraphicAttribute|SheetCollate|Short|ShortBuffer|ShortBufferException|ShortHolder|ShortLookupTable|ShortMessage|ShortSeqHelper|ShortSeqHolder|Sides|Signature|SignatureException|SignatureSpi|SignedObject|Signer|SimpleAttributeSet|SimpleBeanInfo|SimpleDateFormat|SimpleDoc|SimpleFormatter|SimpleTimeZone|SinglePixelPackedSampleModel|SingleSelectionModel|Size2DSyntax|SizeLimitExceededException|SizeRequirements|SizeSequence|Skeleton|SkeletonMismatchException|SkeletonNotFoundException|SliderUI|Socket|SocketAddress|SocketChannel|SocketException|SocketFactory|SocketHandler|SocketImpl|SocketImplFactory|SocketOptions|SocketPermission|SocketSecurityException|SocketTimeoutException|SoftBevelBorder|SoftReference|SortedMap|SortedSet|SortingFocusTraversalPolicy|Soundbank|SoundbankReader|SoundbankResource|Source|SourceDataLine|SourceLocator|SpinnerDateModel|SpinnerListModel|SpinnerModel|SpinnerNumberModel|SpinnerUI|SplitPaneUI|Spring|SpringLayout|SQLData|SQLException|SQLInput|SQLOutput|SQLPermission|SQLWarning|SSLContext|SSLContextSpi|SSLException|SSLHandshakeException|SSLKeyException|SSLPeerUnverifiedException|SSLPermission|SSLProtocolException|SSLServerSocket|SSLServerSocketFactory|SSLSession|SSLSessionBindingEvent|SSLSessionBindingListener|SSLSessionContext|SSLSocket|SSLSocketFactory|Stack|StackOverflowError|StackTraceElement|StartTlsRequest|StartTlsResponse|State|StateEdit|StateEditable|StateFactory|Statement|Streamable|StreamableValue|StreamCorruptedException|StreamHandler|StreamPrintService|StreamPrintServiceFactory|StreamResult|StreamSource|StreamTokenizer|StrictMath|String|StringBuffer|StringBufferInputStream|StringCharacterIterator|StringContent|StringHolder|StringIndexOutOfBoundsException|StringNameHelper|StringReader|StringRefAddr|StringSelection|StringSeqHelper|StringSeqHolder|StringTokenizer|StringValueHelper|StringWriter|Stroke|Struct|StructMember|StructMemberHelper|Stub|StubDelegate|StubNotFoundException|Style|StyleConstants|StyleContext|StyledDocument|StyledEditorKit|StyleSheet|Subject|SubjectDomainCombiner|SUCCESSFUL|SupportedValuesAttribute|SwingConstants|SwingPropertyChangeSupport|SwingUtilities|SYNC_WITH_TRANSPORT|SyncFailedException|SyncScopeHelper|Synthesizer|SysexMessage|System|SYSTEM_EXCEPTION|SystemColor|SystemException|SystemFlavorMap|TabableView|TabbedPaneUI|TabExpander|TableCellEditor|TableCellRenderer|TableColumn|TableColumnModel|TableColumnModelEvent|TableColumnModelListener|TableHeaderUI|TableModel|TableModelEvent|TableModelListener|TableUI|TableView|TabSet|TabStop|TAG_ALTERNATE_IIOP_ADDRESS|TAG_CODE_SETS|TAG_INTERNET_IOP|TAG_JAVA_CODEBASE|TAG_MULTIPLE_COMPONENTS|TAG_ORB_TYPE|TAG_POLICIES|TagElement|TaggedComponent|TaggedComponentHelper|TaggedComponentHolder|TaggedProfile|TaggedProfileHelper|TaggedProfileHolder|TargetDataLine|TCKind|Templates|TemplatesHandler|Text|TextAction|TextArea|TextAttribute|TextComponent|TextEvent|TextField|TextHitInfo|TextInputCallback|TextLayout|TextListener|TextMeasurer|TextOutputCallback|TextSyntax|TextUI|TexturePaint|Thread|THREAD_POLICY_ID|ThreadDeath|ThreadGroup|ThreadLocal|ThreadPolicy|ThreadPolicyOperations|ThreadPolicyValue|Throwable|Tie|TileObserver|Time|TimeLimitExceededException|Timer|TimerTask|Timestamp|TimeZone|TitledBorder|ToolBarUI|Toolkit|ToolTipManager|ToolTipUI|TooManyListenersException|Track|TRANSACTION_REQUIRED|TRANSACTION_ROLLEDBACK|TransactionRequiredException|TransactionRolledbackException|TransactionService|Transferable|TransferHandler|TransformAttribute|Transformer|TransformerConfigurationException|TransformerException|TransformerFactory|TransformerFactoryConfigurationError|TransformerHandler|TRANSIENT|Transmitter|Transparency|TRANSPORT_RETRY|TreeCellEditor|TreeCellRenderer|TreeExpansionEvent|TreeExpansionListener|TreeMap|TreeModel|TreeModelEvent|TreeModelListener|TreeNode|TreePath|TreeSelectionEvent|TreeSelectionListener|TreeSelectionModel|TreeSet|TreeUI|TreeWillExpandListener|TrustAnchor|TrustManager|TrustManagerFactory|TrustManagerFactorySpi|TypeCode|TypeCodeHolder|TypeMismatch|TypeMismatchHelper|Types|UID|UIDefaults|UIManager|UIResource|ULongLongSeqHelper|ULongLongSeqHolder|ULongSeqHelper|ULongSeqHolder|UndeclaredThrowableException|UndoableEdit|UndoableEditEvent|UndoableEditListener|UndoableEditSupport|UndoManager|UnexpectedException|UnicastRemoteObject|UnionMember|UnionMemberHelper|UNKNOWN|UnknownEncoding|UnknownEncodingHelper|UnknownError|UnknownException|UnknownGroupException|UnknownHostException|UnknownObjectException|UnknownServiceException|UnknownUserException|UnknownUserExceptionHelper|UnknownUserExceptionHolder|UnmappableCharacterException|UnmarshalException|UnmodifiableSetException|UnrecoverableKeyException|Unreferenced|UnresolvedAddressException|UnresolvedPermission|UnsatisfiedLinkError|UnsolicitedNotification|UnsolicitedNotificationEvent|UnsolicitedNotificationListener|UNSUPPORTED_POLICY|UNSUPPORTED_POLICY_VALUE|UnsupportedAddressTypeException|UnsupportedAudioFileException|UnsupportedCallbackException|UnsupportedCharsetException|UnsupportedClassVersionError|UnsupportedEncodingException|UnsupportedFlavorException|UnsupportedLookAndFeelException|UnsupportedOperationException|URI|URIException|URIResolver|URISyntax|URISyntaxException|URL|URLClassLoader|URLConnection|URLDecoder|URLEncoder|URLStreamHandler|URLStreamHandlerFactory|URLStringHelper|USER_EXCEPTION|UserException|UShortSeqHelper|UShortSeqHolder|UTFDataFormatException|Util|UtilDelegate|Utilities|ValueBase|ValueBaseHelper|ValueBaseHolder|ValueFactory|ValueHandler|ValueMember|ValueMemberHelper|VariableHeightLayoutCache|Vector|VerifyError|VersionSpecHelper|VetoableChangeListener|VetoableChangeListenerProxy|VetoableChangeSupport|View|ViewFactory|ViewportLayout|ViewportUI|VirtualMachineError|Visibility|VisibilityHelper|VM_ABSTRACT|VM_CUSTOM|VM_NONE|VM_TRUNCATABLE|VMID|VoiceStatus|Void|VolatileImage|WCharSeqHelper|WCharSeqHolder|WeakHashMap|WeakReference|Window|WindowAdapter|WindowConstants|WindowEvent|WindowFocusListener|WindowListener|WindowStateListener|WrappedPlainView|WritableByteChannel|WritableRaster|WritableRenderedImage|WriteAbortedException|Writer|WrongAdapter|WrongAdapterHelper|WrongPolicy|WrongPolicyHelper|WrongTransaction|WrongTransactionHelper|WrongTransactionHolder|WStringSeqHelper|WStringSeqHolder|WStringValueHelper|X500Principal|X500PrivateCredential|X509Certificate|X509CertSelector|X509CRL|X509CRLEntry|X509CRLSelector|X509EncodedKeySpec|X509Extension|X509KeyManager|X509TrustManager|XAConnection|XADataSource|XAException|XAResource|Xid|XMLDecoder|XMLEncoder|XMLFilter|XMLFilterImpl|XMLFormatter|XMLReader|XMLReaderAdapter|XMLReaderFactory|ZipEntry|ZipException|ZipFile|ZipInputStream|ZipOutputStream|ZoneView|_BindingIteratorImplBase|_BindingIteratorStub|_DynAnyFactoryStub|_DynAnyStub|_DynArrayStub|_DynEnumStub|_DynFixedStub|_DynSequenceStub|_DynStructStub|_DynUnionStub|_DynValueStub|_IDLTypeStub|_NamingContextExtStub|_NamingContextImplBase|_NamingContextStub|_PolicyStub|_Remote_Stub|_ServantActivatorStub|_ServantLocatorStub)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => 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,
+ ),
+ 0 =>
+ array (
+ 0 => 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,
+ ),
+ 1 =>
+ array (
+ 0 => 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,
+ ),
+ 2 =>
+ array (
+ 0 => 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,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ );
+ $this->_conditions = array (
+ 'java.builtins' =>
+ array (
+ 0 =>
+ array (
+ 0 => 'builtin',
+ 1 => true,
+ ),
+ ),
+ );
+ $this->_kwmap = array (
+ 'types' => 'types',
+ 'reserved' => 'reserved',
+ 'builtin' => 'builtin',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php b/library/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php
new file mode 100644
index 000000000..51eae8f62
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php
@@ -0,0 +1,631 @@
+<?php
+/**
+ * Auto-generated class. JAVASCRIPT syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: javascript.xml
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. JAVASCRIPT syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_JAVASCRIPT extends Text_Highlighter
+{
+ var $_language = 'javascript';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_JAVASCRIPT($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0x\\d*|\\d*\\.?\\d+)/',
+ 0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0x\\d*|\\d*\\.?\\d+)/',
+ 1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0x\\d*|\\d*\\.?\\d+)/',
+ 2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)\')|((?i)\\/\\/)|((?i)[a-z_]\\w*)|((?i)0x\\d*|\\d*\\.?\\d+)/',
+ 3 => '/((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\b(note|fixme):)|((?i)\\$\\w+:.+\\$)/',
+ 4 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`|\\\\t|\\\\n|\\\\r)/',
+ 5 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 6 => '/((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\b(note|fixme):)|((?i)\\$\\w+:.+\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 3,
+ 1 => 1,
+ 2 => 1,
+ 3 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 3,
+ 1 => 1,
+ 2 => 1,
+ 3 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ ),
+ 0 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'comment',
+ 7 => '',
+ 8 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ ),
+ 0 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ ),
+ 1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ ),
+ 2 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'comment',
+ 7 => 'identifier',
+ 8 => 'number',
+ ),
+ 3 =>
+ array (
+ 0 => 'url',
+ 1 => 'url',
+ 2 => 'inlinedoc',
+ 3 => 'inlinedoc',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ ),
+ 6 =>
+ array (
+ 0 => 'url',
+ 1 => 'url',
+ 2 => 'inlinedoc',
+ 3 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\}/',
+ 1 => '/(?i)\\)/',
+ 2 => '/(?i)\\]/',
+ 3 => '/(?i)\\*\\//',
+ 4 => '/(?i)"/',
+ 5 => '/(?i)\'/',
+ 6 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => 6,
+ 7 => -1,
+ 8 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'builtin' => '/^(String|Array|RegExp|Function|Math|Number|Date|Image|window|document|navigator|onAbort|onBlur|onChange|onClick|onDblClick|onDragDrop|onError|onFocus|onKeyDown|onKeyPress|onKeyUp|onLoad|onMouseDown|onMouseOver|onMouseOut|onMouseMove|onMouseUp|onMove|onReset|onResize|onSelect|onSubmit|onUnload)$/',
+ 'reserved' => '/^(break|continue|do|while|export|for|in|if|else|import|return|label|switch|case|var|with|delete|new|this|typeof|void|abstract|boolean|byte|catch|char|class|const|debugger|default|double|enum|extends|false|final|finally|float|function|implements|goto|instanceof|int|interface|long|native|null|package|private|protected|public|short|static|super|synchronized|throw|throws|transient|true|try|volatile)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'builtin' => '/^(String|Array|RegExp|Function|Math|Number|Date|Image|window|document|navigator|onAbort|onBlur|onChange|onClick|onDblClick|onDragDrop|onError|onFocus|onKeyDown|onKeyPress|onKeyUp|onLoad|onMouseDown|onMouseOver|onMouseOut|onMouseMove|onMouseUp|onMove|onReset|onResize|onSelect|onSubmit|onUnload)$/',
+ 'reserved' => '/^(break|continue|do|while|export|for|in|if|else|import|return|label|switch|case|var|with|delete|new|this|typeof|void|abstract|boolean|byte|catch|char|class|const|debugger|default|double|enum|extends|false|final|finally|float|function|implements|goto|instanceof|int|interface|long|native|null|package|private|protected|public|short|static|super|synchronized|throw|throws|transient|true|try|volatile)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'builtin' => '/^(String|Array|RegExp|Function|Math|Number|Date|Image|window|document|navigator|onAbort|onBlur|onChange|onClick|onDblClick|onDragDrop|onError|onFocus|onKeyDown|onKeyPress|onKeyUp|onLoad|onMouseDown|onMouseOver|onMouseOut|onMouseMove|onMouseUp|onMove|onReset|onResize|onSelect|onSubmit|onUnload)$/',
+ 'reserved' => '/^(break|continue|do|while|export|for|in|if|else|import|return|label|switch|case|var|with|delete|new|this|typeof|void|abstract|boolean|byte|catch|char|class|const|debugger|default|double|enum|extends|false|final|finally|float|function|implements|goto|instanceof|int|interface|long|native|null|package|private|protected|public|short|static|super|synchronized|throw|throws|transient|true|try|volatile)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ 'builtin' => '/^(String|Array|RegExp|Function|Math|Number|Date|Image|window|document|navigator|onAbort|onBlur|onChange|onClick|onDblClick|onDragDrop|onError|onFocus|onKeyDown|onKeyPress|onKeyUp|onLoad|onMouseDown|onMouseOver|onMouseOut|onMouseMove|onMouseUp|onMove|onReset|onResize|onSelect|onSubmit|onUnload)$/',
+ 'reserved' => '/^(break|continue|do|while|export|for|in|if|else|import|return|label|switch|case|var|with|delete|new|this|typeof|void|abstract|boolean|byte|catch|char|class|const|debugger|default|double|enum|extends|false|final|finally|float|function|implements|goto|instanceof|int|interface|long|native|null|package|private|protected|public|short|static|super|synchronized|throw|throws|transient|true|try|volatile)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'builtin' => 'builtin',
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+}
diff --git a/library/Text_Highlighter/Text/Highlighter/MYSQL.php b/library/Text_Highlighter/Text/Highlighter/MYSQL.php
new file mode 100644
index 000000000..bdd74cc8b
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/MYSQL.php
@@ -0,0 +1,434 @@
+<?php
+/**
+ * Auto-generated class. MYSQL syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : mysql.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. MYSQL syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_MYSQL extends Text_Highlighter
+{
+ var $_language = 'mysql';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_MYSQL($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)`)|((?i)\\/\\*)|((?i)(#|--\\s).*)|((?i)[a-z_]\\w*(?=\\s*\\())|((?i)[a-z_]\\w*)|((?i)")|((?i)\\()|((?i)\')|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)/',
+ 0 => '//',
+ 1 => '//',
+ 2 => '/((?i)\\\\.)/',
+ 3 => '/((?i)`)|((?i)\\/\\*)|((?i)(#|--\\s).*)|((?i)[a-z_]\\w*(?=\\s*\\())|((?i)[a-z_]\\w*)|((?i)")|((?i)\\()|((?i)\')|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)/',
+ 4 => '/((?i)\\\\.)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 5,
+ 9 => 2,
+ 10 => 0,
+ 11 => 0,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 5,
+ 9 => 2,
+ 10 => 0,
+ 11 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'comment',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'brackets',
+ 7 => 'quotes',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ ),
+ 3 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'comment',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'brackets',
+ 7 => 'quotes',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'identifier',
+ 1 => 'comment',
+ 2 => 'comment',
+ 3 => 'identifier',
+ 4 => 'identifier',
+ 5 => 'string',
+ 6 => 'code',
+ 7 => 'string',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ ),
+ 3 =>
+ array (
+ 0 => 'identifier',
+ 1 => 'comment',
+ 2 => 'comment',
+ 3 => 'identifier',
+ 4 => 'identifier',
+ 5 => 'string',
+ 6 => 'code',
+ 7 => 'string',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)`/',
+ 1 => '/(?i)\\*\\//',
+ 2 => '/(?i)"/',
+ 3 => '/(?i)\\)/',
+ 4 => '/(?i)\'/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => 2,
+ 6 => 3,
+ 7 => 4,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => 2,
+ 6 => 3,
+ 7 => 4,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ 'function' => '/^((?i)abs|acos|adddate|ascii|asin|atan|atan2|avg|benchmark|bin|ceiling|char|coalesce|concat|conv|cos|cot|count|curdate|curtime|database|dayname|dayofmonth|dayofweek|dayofyear|decode|degrees|elt|encode|encrypt|exp|extract|field|floor|format|greatest|hex|hour|if|ifnull|insert|instr|interval|isnull|lcase|least|left|length|locate|log|log10|lower|lpad|ltrim|max|md5|mid|min|minute|mod|month|monthname|now|nullif|oct|ord|password|pi|position|pow|power|prepare|quarter|radians|rand|repeat|replace|reverse|right|round|rpad|rtrim|second|sign|sin|soundex|space|sqrt|std|stddev|strcmp|subdate|substring|sum|sysdate|tan|trim|truncate|ucase|upper|user|version|week|weekday|year)$/',
+ ),
+ 4 =>
+ array (
+ 'reserved' => '/^((?i)action|add|aggregate|all|alter|after|and|as|asc|avg|avg_row_length|auto_increment|between|bigint|bit|binary|blob|bool|both|by|cascade|case|char|character|change|check|checksum|column|columns|comment|constraint|create|cross|current_date|current_time|current_timestamp|data|database|databases|date|datetime|day|day_hour|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dec|decimal|default|delayed|delay_key_write|delete|desc|describe|distinct|distinctrow|double|drop|end|else|escape|escaped|enclosed|enum|explain|exists|fields|file|first|float|float4|float8|flush|foreign|from|for|full|function|global|grant|grants|group|having|heap|high_priority|hour|hour_minute|hour_second|hosts|identified|ignore|in|index|infile|inner|insert|insert_id|int|integer|interval|int1|int2|int3|int4|int8|into|if|is|isam|join|key|keys|kill|last_insert_id|leading|left|length|like|lines|limit|load|local|lock|logs|long|longblob|longtext|low_priority|max|max_rows|match|mediumblob|mediumtext|mediumint|middleint|min_rows|minute|minute_second|modify|month|monthname|myisam|natural|numeric|no|not|null|on|optimize|option|optionally|or|order|outer|outfile|pack_keys|partial|password|precision|primary|procedure|process|processlist|privileges|read|real|references|reload|regexp|rename|replace|restrict|returns|revoke|rlike|row|rows|second|select|set|show|shutdown|smallint|soname|sql_big_tables|sql_big_selects|sql_low_priority_updates|sql_log_off|sql_log_update|sql_select_limit|sql_small_result|sql_big_result|sql_warnings|straight_join|starting|status|string|table|tables|temporary|terminated|text|then|time|timestamp|tinyblob|tinytext|tinyint|trailing|to|type|use|using|unique|unlock|unsigned|update|usage|values|varchar|variables|varying|varbinary|with|write|when|where|year|year_month|zerofill)$/',
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ 'function' => '/^((?i)abs|acos|adddate|ascii|asin|atan|atan2|avg|benchmark|bin|ceiling|char|coalesce|concat|conv|cos|cot|count|curdate|curtime|database|dayname|dayofmonth|dayofweek|dayofyear|decode|degrees|elt|encode|encrypt|exp|extract|field|floor|format|greatest|hex|hour|if|ifnull|insert|instr|interval|isnull|lcase|least|left|length|locate|log|log10|lower|lpad|ltrim|max|md5|mid|min|minute|mod|month|monthname|now|nullif|oct|ord|password|pi|position|pow|power|prepare|quarter|radians|rand|repeat|replace|reverse|right|round|rpad|rtrim|second|sign|sin|soundex|space|sqrt|std|stddev|strcmp|subdate|substring|sum|sysdate|tan|trim|truncate|ucase|upper|user|version|week|weekday|year)$/',
+ ),
+ 4 =>
+ array (
+ 'reserved' => '/^((?i)action|add|aggregate|all|alter|after|and|as|asc|avg|avg_row_length|auto_increment|between|bigint|bit|binary|blob|bool|both|by|cascade|case|char|character|change|check|checksum|column|columns|comment|constraint|create|cross|current_date|current_time|current_timestamp|data|database|databases|date|datetime|day|day_hour|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dec|decimal|default|delayed|delay_key_write|delete|desc|describe|distinct|distinctrow|double|drop|end|else|escape|escaped|enclosed|enum|explain|exists|fields|file|first|float|float4|float8|flush|foreign|from|for|full|function|global|grant|grants|group|having|heap|high_priority|hour|hour_minute|hour_second|hosts|identified|ignore|in|index|infile|inner|insert|insert_id|int|integer|interval|int1|int2|int3|int4|int8|into|if|is|isam|join|key|keys|kill|last_insert_id|leading|left|length|like|lines|limit|load|local|lock|logs|long|longblob|longtext|low_priority|max|max_rows|match|mediumblob|mediumtext|mediumint|middleint|min_rows|minute|minute_second|modify|month|monthname|myisam|natural|numeric|no|not|null|on|optimize|option|optionally|or|order|outer|outfile|pack_keys|partial|password|precision|primary|procedure|process|processlist|privileges|read|real|references|reload|regexp|rename|replace|restrict|returns|revoke|rlike|row|rows|second|select|set|show|shutdown|smallint|soname|sql_big_tables|sql_big_selects|sql_low_priority_updates|sql_log_off|sql_log_update|sql_select_limit|sql_small_result|sql_big_result|sql_warnings|straight_join|starting|status|string|table|tables|temporary|terminated|text|then|time|timestamp|tinyblob|tinytext|tinyint|trailing|to|type|use|using|unique|unlock|unsigned|update|usage|values|varchar|variables|varying|varbinary|with|write|when|where|year|year_month|zerofill)$/',
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'function' => 'reserved',
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/PERL.php b/library/Text_Highlighter/Text/Highlighter/PERL.php
new file mode 100644
index 000000000..277a5ba45
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/PERL.php
@@ -0,0 +1,1352 @@
+<?php
+/**
+ * Auto-generated class. PERL syntax highlighting
+ *
+ * This highlighter is EXPERIMENTAL, so that it may work incorrectly.
+ * Most rules were created by Mariusz Jakubowski, and extended by me.
+ * My knowledge of Perl is poor, and Perl syntax seems too
+ * complicated to me.
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : perl.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Mariusz 'kg' Jakubowski <kg@alternatywa.info>
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. PERL syntax highlighting
+ *
+ * @author Mariusz 'kg' Jakubowski <kg@alternatywa.info>
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_PERL extends Text_Highlighter
+{
+ var $_language = 'perl';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_PERL($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?m)^(#!)(.*))|((?m)^=\\w+)|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|([& ](\\w{2,}::)+\\w{2,})|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(&|\\w+)\'[\\w_\']+\\b)|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 0 => '//',
+ 1 => '/((?m)^(#!)(.*))|((?m)^=\\w+)|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|([& ](\\w{2,}::)+\\w{2,})|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(&|\\w+)\'[\\w_\']+\\b)|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 2 => '/((?m)^(#!)(.*))|((?m)^=\\w+)|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|([& ](\\w{2,}::)+\\w{2,})|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|((?i)([a-z1-9_]+)(\\s*=>))|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(&|\\w+)\'[\\w_\']+\\b)|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 3 => '/((?m)^(#!)(.*))|((?m)^=\\w+)|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|([& ](\\w{2,}::)+\\w{2,})|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(&|\\w+)\'[\\w_\']+\\b)|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 4 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\[\\\\"\'`tnr\\$\\{@])/',
+ 5 => '/(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 6 => '/(\\\\\\/)/',
+ 7 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 8 => '/(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 9 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\[\\\\"\'`tnr\\$\\{@])/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 2,
+ 6 => 1,
+ 7 => 9,
+ 8 => 9,
+ 9 => 0,
+ 10 => 8,
+ 11 => 5,
+ 12 => 0,
+ 13 => 0,
+ 14 => 3,
+ 15 => 1,
+ 16 => 1,
+ 17 => 3,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 22 => 0,
+ 23 => 0,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 2,
+ 6 => 1,
+ 7 => 9,
+ 8 => 9,
+ 9 => 0,
+ 10 => 8,
+ 11 => 5,
+ 12 => 0,
+ 13 => 0,
+ 14 => 3,
+ 15 => 1,
+ 16 => 1,
+ 17 => 3,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 22 => 0,
+ 23 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 2,
+ 6 => 1,
+ 7 => 9,
+ 8 => 9,
+ 9 => 0,
+ 10 => 8,
+ 11 => 5,
+ 12 => 0,
+ 13 => 2,
+ 14 => 0,
+ 15 => 3,
+ 16 => 1,
+ 17 => 1,
+ 18 => 3,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 22 => 0,
+ 23 => 0,
+ 24 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 2,
+ 6 => 1,
+ 7 => 9,
+ 8 => 9,
+ 9 => 0,
+ 10 => 8,
+ 11 => 5,
+ 12 => 0,
+ 13 => 0,
+ 14 => 3,
+ 15 => 1,
+ 16 => 1,
+ 17 => 3,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ 22 => 0,
+ 23 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ 9 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => '',
+ 1 => 'comment',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => 'brackets',
+ 5 => '',
+ 6 => '',
+ 7 => 'quotes',
+ 8 => 'quotes',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => 'quotes',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => '',
+ 18 => '',
+ 19 => 'quotes',
+ 20 => 'quotes',
+ 21 => 'quotes',
+ 22 => '',
+ 23 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ 1 => 'comment',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => 'brackets',
+ 5 => '',
+ 6 => '',
+ 7 => 'quotes',
+ 8 => 'quotes',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => 'quotes',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => '',
+ 18 => '',
+ 19 => 'quotes',
+ 20 => 'quotes',
+ 21 => 'quotes',
+ 22 => '',
+ 23 => '',
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ 1 => 'comment',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => 'brackets',
+ 5 => '',
+ 6 => '',
+ 7 => 'quotes',
+ 8 => 'quotes',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => 'quotes',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => '',
+ 18 => '',
+ 19 => '',
+ 20 => 'quotes',
+ 21 => 'quotes',
+ 22 => 'quotes',
+ 23 => '',
+ 24 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ 1 => 'comment',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => 'brackets',
+ 5 => '',
+ 6 => '',
+ 7 => 'quotes',
+ 8 => 'quotes',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => 'quotes',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => '',
+ 18 => '',
+ 19 => 'quotes',
+ 20 => 'quotes',
+ 21 => 'quotes',
+ 22 => '',
+ 23 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ 9 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'special',
+ 1 => 'comment',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'code',
+ 5 => 'special',
+ 6 => 'special',
+ 7 => 'string',
+ 8 => 'string',
+ 9 => 'comment',
+ 10 => 'string',
+ 11 => 'string',
+ 12 => 'string',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'var',
+ 17 => 'var',
+ 18 => 'var',
+ 19 => 'string',
+ 20 => 'string',
+ 21 => 'string',
+ 22 => 'identifier',
+ 23 => 'number',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'special',
+ 1 => 'comment',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'code',
+ 5 => 'special',
+ 6 => 'special',
+ 7 => 'string',
+ 8 => 'string',
+ 9 => 'comment',
+ 10 => 'string',
+ 11 => 'string',
+ 12 => 'string',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'var',
+ 17 => 'var',
+ 18 => 'var',
+ 19 => 'string',
+ 20 => 'string',
+ 21 => 'string',
+ 22 => 'identifier',
+ 23 => 'number',
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ 1 => 'comment',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'code',
+ 5 => 'special',
+ 6 => 'special',
+ 7 => 'string',
+ 8 => 'string',
+ 9 => 'comment',
+ 10 => 'string',
+ 11 => 'string',
+ 12 => 'string',
+ 13 => 'string',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'var',
+ 17 => 'var',
+ 18 => 'var',
+ 19 => 'var',
+ 20 => 'string',
+ 21 => 'string',
+ 22 => 'string',
+ 23 => 'identifier',
+ 24 => 'number',
+ ),
+ 3 =>
+ array (
+ 0 => 'special',
+ 1 => 'comment',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'code',
+ 5 => 'special',
+ 6 => 'special',
+ 7 => 'string',
+ 8 => 'string',
+ 9 => 'comment',
+ 10 => 'string',
+ 11 => 'string',
+ 12 => 'string',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'var',
+ 17 => 'var',
+ 18 => 'var',
+ 19 => 'string',
+ 20 => 'string',
+ 21 => 'string',
+ 22 => 'identifier',
+ 23 => 'number',
+ ),
+ 4 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ ),
+ 6 =>
+ array (
+ 0 => 'string',
+ ),
+ 7 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ 8 =>
+ array (
+ 0 => 'special',
+ ),
+ 9 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?m)^=cut[^\\n]*/',
+ 1 => '/\\}/',
+ 2 => '/\\)/',
+ 3 => '/\\]/',
+ 4 => '/%b2%/',
+ 5 => '/%b2%/',
+ 6 => '/\\/[cgimosx]*/',
+ 7 => '/`/',
+ 8 => '/\'/',
+ 9 => '/"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => 3,
+ 5 => -1,
+ 6 => -1,
+ 7 => 4,
+ 8 => 5,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => 6,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 => 7,
+ 20 => 8,
+ 21 => 9,
+ 22 => -1,
+ 23 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => 3,
+ 5 => -1,
+ 6 => -1,
+ 7 => 4,
+ 8 => 5,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => 6,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 => 7,
+ 20 => 8,
+ 21 => 9,
+ 22 => -1,
+ 23 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => 3,
+ 5 => -1,
+ 6 => -1,
+ 7 => 4,
+ 8 => 5,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => 6,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 => -1,
+ 20 => 7,
+ 21 => 8,
+ 22 => 9,
+ 23 => -1,
+ 24 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => 3,
+ 5 => -1,
+ 6 => -1,
+ 7 => 4,
+ 8 => 5,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => 6,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 => 7,
+ 20 => 8,
+ 21 => 9,
+ 22 => -1,
+ 23 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ 9 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 =>
+ array (
+ ),
+ 18 =>
+ array (
+ ),
+ 19 => -1,
+ 20 => -1,
+ 21 => -1,
+ 22 =>
+ array (
+ 'reserved' => '/^(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|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|last|lc|lcfirst|length|link|listen|local|localtime|lock|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta|rand|read|readdir|readline|readlink|readpipe|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|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|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|tell|telldir|tie|tied|time|times|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|use|utime|values|vec|wait|waitpid|wantarray|warn|write|y)$/',
+ 'missingreserved' => '/^(new)$/',
+ 'flowcontrol' => '/^(if|else|elsif|while|unless|for|foreach|until|do|continue|not|or|and|eq|ne|gt|lt)$/',
+ ),
+ 23 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 =>
+ array (
+ ),
+ 18 =>
+ array (
+ ),
+ 19 => -1,
+ 20 => -1,
+ 21 => -1,
+ 22 =>
+ array (
+ 'reserved' => '/^(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|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|last|lc|lcfirst|length|link|listen|local|localtime|lock|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta|rand|read|readdir|readline|readlink|readpipe|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|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|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|tell|telldir|tie|tied|time|times|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|use|utime|values|vec|wait|waitpid|wantarray|warn|write|y)$/',
+ 'missingreserved' => '/^(new)$/',
+ 'flowcontrol' => '/^(if|else|elsif|while|unless|for|foreach|until|do|continue|not|or|and|eq|ne|gt|lt)$/',
+ ),
+ 23 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 =>
+ array (
+ ),
+ 18 =>
+ array (
+ ),
+ 19 =>
+ array (
+ ),
+ 20 => -1,
+ 21 => -1,
+ 22 => -1,
+ 23 =>
+ array (
+ 'reserved' => '/^(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|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|last|lc|lcfirst|length|link|listen|local|localtime|lock|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta|rand|read|readdir|readline|readlink|readpipe|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|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|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|tell|telldir|tie|tied|time|times|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|use|utime|values|vec|wait|waitpid|wantarray|warn|write|y)$/',
+ 'missingreserved' => '/^(new)$/',
+ 'flowcontrol' => '/^(if|else|elsif|while|unless|for|foreach|until|do|continue|not|or|and|eq|ne|gt|lt)$/',
+ ),
+ 24 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 =>
+ array (
+ ),
+ 18 =>
+ array (
+ ),
+ 19 => -1,
+ 20 => -1,
+ 21 => -1,
+ 22 =>
+ array (
+ 'reserved' => '/^(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|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|last|lc|lcfirst|length|link|listen|local|localtime|lock|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta|rand|read|readdir|readline|readlink|readpipe|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|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|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|tell|telldir|tie|tied|time|times|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|use|utime|values|vec|wait|waitpid|wantarray|warn|write|y)$/',
+ 'missingreserved' => '/^(new)$/',
+ 'flowcontrol' => '/^(if|else|elsif|while|unless|for|foreach|until|do|continue|not|or|and|eq|ne|gt|lt)$/',
+ ),
+ 23 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 9 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 11 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 18 => NULL,
+ 19 => NULL,
+ 20 => NULL,
+ 21 => NULL,
+ 22 => NULL,
+ 23 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 11 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 12 => NULL,
+ 13 =>
+ array (
+ 1 => 'string',
+ 2 => 'code',
+ ),
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ 18 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 19 => NULL,
+ 20 => NULL,
+ 21 => NULL,
+ 22 => NULL,
+ 23 => NULL,
+ 24 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 11 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 18 => NULL,
+ 19 => NULL,
+ 20 => NULL,
+ 21 => NULL,
+ 22 => NULL,
+ 23 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ 9 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => true,
+ 8 => true,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ 22 => false,
+ 23 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => true,
+ 8 => true,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ 22 => false,
+ 23 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => true,
+ 8 => true,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => 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,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => true,
+ 8 => true,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ 22 => false,
+ 23 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ 9 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'missingreserved' => 'reserved',
+ 'flowcontrol' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/PHP.php b/library/Text_Highlighter/Text/Highlighter/PHP.php
new file mode 100644
index 000000000..1ee2e6b90
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/PHP.php
@@ -0,0 +1,1107 @@
+<?php
+/**
+ * Auto-generated class. PHP syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : php.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. PHP syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_PHP extends Text_Highlighter
+{
+ var $_language = 'php';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_PHP($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\<\\?(php|=)?)/',
+ 0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)\\?\\>)|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 3 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
+ 4 => '/((?i)\\s@\\w+\\s)|((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\bnote:)|((?i)\\$\\w+\\s*:.*\\$)/',
+ 5 => '/((?i)\\\\[\\\\"\'`tnr\\$\\{])|((?i)\\{\\$[a-z_].*\\})|((?i)\\$[a-z_]\\w*)/',
+ 6 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`)|((?i)\\{\\$[a-z_].*\\})|((?i)\\$[a-z_]\\w*)/',
+ 7 => '/((?i)\\\\[\\\\"\'`tnr\\$\\{])|((?i)\\{\\$[a-z_].*\\})|((?i)\\$[a-z_]\\w*)/',
+ 8 => '/((?i)\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 9 => '/((?i)\\s@\\w+\\s)|((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\bnote:)|((?i)\\$\\w+\\s*:.*\\$)/',
+ 10 => '//',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 1,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 1,
+ 7 => 0,
+ 8 => 1,
+ 9 => 0,
+ 10 => 1,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 2,
+ 16 => 5,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 1,
+ 7 => 0,
+ 8 => 1,
+ 9 => 0,
+ 10 => 1,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 0,
+ 16 => 2,
+ 17 => 5,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 1,
+ 7 => 0,
+ 8 => 1,
+ 9 => 0,
+ 10 => 1,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 2,
+ 16 => 5,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 1,
+ 7 => 0,
+ 8 => 1,
+ 9 => 0,
+ 10 => 1,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 2,
+ 16 => 5,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ 1 => 3,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ 9 =>
+ array (
+ 0 => 0,
+ 1 => 3,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'inlinetags',
+ ),
+ 0 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => 'quotes',
+ 8 => 'comment',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => 'quotes',
+ 8 => 'comment',
+ 9 => '',
+ 10 => '',
+ 11 => 'inlinetags',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => '',
+ ),
+ 2 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => 'quotes',
+ 8 => 'comment',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ ),
+ 3 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'comment',
+ 4 => 'quotes',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => 'quotes',
+ 8 => 'comment',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ 9 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'code',
+ ),
+ 0 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'string',
+ 8 => 'comment',
+ 9 => 'identifier',
+ 10 => 'reserved',
+ 11 => 'number',
+ 12 => 'var',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'number',
+ 16 => 'number',
+ ),
+ 1 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'string',
+ 8 => 'comment',
+ 9 => 'identifier',
+ 10 => 'reserved',
+ 11 => 'default',
+ 12 => 'number',
+ 13 => 'var',
+ 14 => 'number',
+ 15 => 'number',
+ 16 => 'number',
+ 17 => 'number',
+ ),
+ 2 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'string',
+ 8 => 'comment',
+ 9 => 'identifier',
+ 10 => 'reserved',
+ 11 => 'number',
+ 12 => 'var',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'number',
+ 16 => 'number',
+ ),
+ 3 =>
+ array (
+ 0 => 'code',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'comment',
+ 4 => 'string',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'string',
+ 8 => 'comment',
+ 9 => 'identifier',
+ 10 => 'reserved',
+ 11 => 'number',
+ 12 => 'var',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'number',
+ 16 => 'number',
+ ),
+ 4 =>
+ array (
+ 0 => 'inlinedoc',
+ 1 => 'url',
+ 2 => 'url',
+ 3 => 'inlinedoc',
+ 4 => 'inlinedoc',
+ ),
+ 5 =>
+ array (
+ 0 => 'special',
+ 1 => 'var',
+ 2 => 'var',
+ ),
+ 6 =>
+ array (
+ 0 => 'special',
+ 1 => 'var',
+ 2 => 'var',
+ ),
+ 7 =>
+ array (
+ 0 => 'special',
+ 1 => 'var',
+ 2 => 'var',
+ ),
+ 8 =>
+ array (
+ 0 => 'special',
+ ),
+ 9 =>
+ array (
+ 0 => 'inlinedoc',
+ 1 => 'url',
+ 2 => 'url',
+ 3 => 'inlinedoc',
+ 4 => 'inlinedoc',
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\?\\>/',
+ 1 => '/(?i)\\}/',
+ 2 => '/(?i)\\)/',
+ 3 => '/(?i)\\]/',
+ 4 => '/(?i)\\*\\//',
+ 5 => '/(?i)"/',
+ 6 => '/(?i)`/',
+ 7 => '/(?mi)^%1%;?$/',
+ 8 => '/(?i)\'/',
+ 9 => '/(?mi)$|(?=\\?\\>)/',
+ 10 => '/(?i)\\<\\?(php|=)?/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ 2 => 3,
+ 3 => 4,
+ 4 => 5,
+ 5 => 6,
+ 6 => 7,
+ 7 => 8,
+ 8 => 9,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ 2 => 3,
+ 3 => 4,
+ 4 => 5,
+ 5 => 6,
+ 6 => 7,
+ 7 => 8,
+ 8 => 9,
+ 9 => -1,
+ 10 => -1,
+ 11 => 10,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ 2 => 3,
+ 3 => 4,
+ 4 => 5,
+ 5 => 6,
+ 6 => 7,
+ 7 => 8,
+ 8 => 9,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ 2 => 3,
+ 3 => 4,
+ 4 => 5,
+ 5 => 6,
+ 6 => 7,
+ 7 => 8,
+ 8 => 9,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ 9 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'constants' => '/^(DIRECTORY_SEPARATOR|PATH_SEPARATOR)$/',
+ 'reserved' => '/^((?i)echo|foreach|else|if|elseif|for|as|while|break|continue|class|const|declare|switch|case|endfor|endswitch|endforeach|endif|array|default|do|enddeclare|eval|exit|die|extends|function|global|include|include_once|require|require_once|isset|empty|list|new|static|unset|var|return|try|catch|final|throw|public|private|protected|abstract|interface|implements|define|__file__|__line__|__class__|__method__|__function__|null|true|false|and|or|xor)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'constants' => '/^(DIRECTORY_SEPARATOR|PATH_SEPARATOR)$/',
+ 'reserved' => '/^((?i)echo|foreach|else|if|elseif|for|as|while|break|continue|class|const|declare|switch|case|endfor|endswitch|endforeach|endif|array|default|do|enddeclare|eval|exit|die|extends|function|global|include|include_once|require|require_once|isset|empty|list|new|static|unset|var|return|try|catch|final|throw|public|private|protected|abstract|interface|implements|define|__file__|__line__|__class__|__method__|__function__|null|true|false|and|or|xor)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 => -1,
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'constants' => '/^(DIRECTORY_SEPARATOR|PATH_SEPARATOR)$/',
+ 'reserved' => '/^((?i)echo|foreach|else|if|elseif|for|as|while|break|continue|class|const|declare|switch|case|endfor|endswitch|endforeach|endif|array|default|do|enddeclare|eval|exit|die|extends|function|global|include|include_once|require|require_once|isset|empty|list|new|static|unset|var|return|try|catch|final|throw|public|private|protected|abstract|interface|implements|define|__file__|__line__|__class__|__method__|__function__|null|true|false|and|or|xor)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'constants' => '/^(DIRECTORY_SEPARATOR|PATH_SEPARATOR)$/',
+ 'reserved' => '/^((?i)echo|foreach|else|if|elseif|for|as|while|break|continue|class|const|declare|switch|case|endfor|endswitch|endforeach|endif|array|default|do|enddeclare|eval|exit|die|extends|function|global|include|include_once|require|require_once|isset|empty|list|new|static|unset|var|return|try|catch|final|throw|public|private|protected|abstract|interface|implements|define|__file__|__line__|__class__|__method__|__function__|null|true|false|and|or|xor)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 9 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ 9 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ 9 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 10 =>
+ array (
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'constants' => 'reserved',
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/PYTHON.php b/library/Text_Highlighter/Text/Highlighter/PYTHON.php
new file mode 100644
index 000000000..ed4f59dde
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/PYTHON.php
@@ -0,0 +1,647 @@
+<?php
+/**
+ * Auto-generated class. PYTHON syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : python.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. PYTHON syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_PYTHON extends Text_Highlighter
+{
+ var $_language = 'python';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_PYTHON($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\'\'\')|((?i)""")|((?i)")|((?i)\')|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*(?=\\s*\\())|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)((\\d*\\.\\d+)|(\\d+\\.\\d*)|(\\d+))j)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)|((?i)0[0-7]+l?)|((?i)#.+)/',
+ 0 => '/((?i)\\\\.)/',
+ 1 => '/((?i)\\\\.)/',
+ 2 => '/((?i)\\\\.)/',
+ 3 => '/((?i)\\\\.)/',
+ 4 => '/((?i)\'\'\')|((?i)""")|((?i)")|((?i)\')|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*(?=\\s*\\())|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)((\\d*\\.\\d+)|(\\d+\\.\\d*)|(\\d+))j)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)|((?i)0[0-7]+l?)|((?i)#.+)/',
+ 5 => '/((?i)\'\'\')|((?i)""")|((?i)")|((?i)\')|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*(?=\\s*\\())|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)((\\d*\\.\\d+)|(\\d+\\.\\d*)|(\\d+))j)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)|((?i)0[0-7]+l?)|((?i)#.+)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 5,
+ 9 => 4,
+ 10 => 2,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 5,
+ 9 => 4,
+ 10 => 2,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 5,
+ 9 => 4,
+ 10 => 2,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'brackets',
+ 5 => 'brackets',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ ),
+ 0 =>
+ array (
+ 0 => '',
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ ),
+ 4 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'brackets',
+ 5 => 'brackets',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ ),
+ 5 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'brackets',
+ 5 => 'brackets',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'code',
+ 5 => 'code',
+ 6 => 'identifier',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => 'special',
+ ),
+ 1 =>
+ array (
+ 0 => 'special',
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ ),
+ 3 =>
+ array (
+ 0 => 'special',
+ ),
+ 4 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'code',
+ 5 => 'code',
+ 6 => 'identifier',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'comment',
+ ),
+ 5 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'code',
+ 5 => 'code',
+ 6 => 'identifier',
+ 7 => 'identifier',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'comment',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\'\'\'/',
+ 1 => '/(?i)"""/',
+ 2 => '/(?i)"/',
+ 3 => '/(?i)\'/',
+ 4 => '/(?i)\\)/',
+ 5 => '/(?i)\\]/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => 5,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 =>
+ array (
+ 'builtin' => '/^(__import__|abs|apply|basestring|bool|buffer|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|min|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|round|setattr|slice|staticmethod|sum|super|str|tuple|type|unichr|unicode|vars|xrange|zip)$/',
+ ),
+ 7 =>
+ array (
+ 'reserved' => '/^(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|False|True|None|NotImplemented|Ellipsis|Exception|SystemExit|StopIteration|StandardError|KeyboardInterrupt|ImportError|EnvironmentError|IOError|OSError|WindowsError|EOFError|RuntimeError|NotImplementedError|NameError|UnboundLocalError|AttributeError|SyntaxError|IndentationError|TabError|TypeError|AssertionError|LookupError|IndexError|KeyError|ArithmeticError|OverflowError|ZeroDivisionError|FloatingPointError|ValueError|UnicodeError|UnicodeEncodeError|UnicodeDecodeError|UnicodeTranslateError|ReferenceError|SystemError|MemoryError|Warning|UserWarning|DeprecationWarning|PendingDeprecationWarning|SyntaxWarning|OverflowWarning|RuntimeWarning|FutureWarning)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 =>
+ array (
+ 'builtin' => '/^(__import__|abs|apply|basestring|bool|buffer|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|min|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|round|setattr|slice|staticmethod|sum|super|str|tuple|type|unichr|unicode|vars|xrange|zip)$/',
+ ),
+ 7 =>
+ array (
+ 'reserved' => '/^(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|False|True|None|NotImplemented|Ellipsis|Exception|SystemExit|StopIteration|StandardError|KeyboardInterrupt|ImportError|EnvironmentError|IOError|OSError|WindowsError|EOFError|RuntimeError|NotImplementedError|NameError|UnboundLocalError|AttributeError|SyntaxError|IndentationError|TabError|TypeError|AssertionError|LookupError|IndexError|KeyError|ArithmeticError|OverflowError|ZeroDivisionError|FloatingPointError|ValueError|UnicodeError|UnicodeEncodeError|UnicodeDecodeError|UnicodeTranslateError|ReferenceError|SystemError|MemoryError|Warning|UserWarning|DeprecationWarning|PendingDeprecationWarning|SyntaxWarning|OverflowWarning|RuntimeWarning|FutureWarning)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 =>
+ array (
+ 'builtin' => '/^(__import__|abs|apply|basestring|bool|buffer|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|min|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|round|setattr|slice|staticmethod|sum|super|str|tuple|type|unichr|unicode|vars|xrange|zip)$/',
+ ),
+ 7 =>
+ array (
+ 'reserved' => '/^(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|False|True|None|NotImplemented|Ellipsis|Exception|SystemExit|StopIteration|StandardError|KeyboardInterrupt|ImportError|EnvironmentError|IOError|OSError|WindowsError|EOFError|RuntimeError|NotImplementedError|NameError|UnboundLocalError|AttributeError|SyntaxError|IndentationError|TabError|TypeError|AssertionError|LookupError|IndexError|KeyError|ArithmeticError|OverflowError|ZeroDivisionError|FloatingPointError|ValueError|UnicodeError|UnicodeEncodeError|UnicodeDecodeError|UnicodeTranslateError|ReferenceError|SystemError|MemoryError|Warning|UserWarning|DeprecationWarning|PendingDeprecationWarning|SyntaxWarning|OverflowWarning|RuntimeWarning|FutureWarning)$/',
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => 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,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ ),
+ 4 =>
+ array (
+ 0 => 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,
+ ),
+ 5 =>
+ array (
+ 0 => 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,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'builtin' => 'builtin',
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/RUBY.php b/library/Text_Highlighter/Text/Highlighter/RUBY.php
new file mode 100644
index 000000000..ce20e9f2e
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/RUBY.php
@@ -0,0 +1,825 @@
+<?php
+/**
+ * Auto-generated class. RUBY syntax highlighting
+ *
+ *
+ * FIXME: While this construction : s.split /z/i
+ * is valid, regular expression is not recognized as such
+ * (/ folowing an identifier or number is not recognized as
+ * start of RE), making highlighting improper
+ *
+ * %q(a (nested) string) does not get highlighted correctly
+ *
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : ruby.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. RUBY syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_RUBY extends Text_Highlighter
+{
+ var $_language = 'ruby';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_RUBY($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?mi)^__END__$)|((?i)")|((?i)%[Qx]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\')|((?i)%[wq]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\\$(\\W|\\w+))|((?ii)@@?[_a-z][\\d_a-z]*)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)0[xX][\\da-f]+l?)|((?i)\\d+l?|\\b0l?\\b)|((?i)0[0-7]+l?)|((?mi)^=begin$)|((?i)#)|((?i)\\s*\\/)/',
+ 0 => '//',
+ 1 => '/((?i)\\\\.)/',
+ 2 => '/((?i)\\\\.)/',
+ 3 => '/((?i)\\\\.)/',
+ 4 => '/((?i)\\\\.)/',
+ 5 => '/((?mi)^__END__$)|((?i)")|((?i)%[Qx]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\')|((?i)%[wq]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\\$(\\W|\\w+))|((?ii)@@?[_a-z][\\d_a-z]*)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)0[xX][\\da-f]+l?)|((?i)\\d+l?|\\b0l?\\b)|((?i)0[0-7]+l?)|((?mi)^=begin$)|((?i)#)|((?i)\\s*\\/)/',
+ 6 => '/((?mi)^__END__$)|((?i)")|((?i)%[Qx]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\')|((?i)%[wq]([!"#\\$%&\'+\\-*.\\/:;=?@^`|~{<\\[(]))|((?i)\\$(\\W|\\w+))|((?ii)@@?[_a-z][\\d_a-z]*)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)0[xX][\\da-f]+l?)|((?i)\\d+l?|\\b0l?\\b)|((?i)0[0-7]+l?)|((?mi)^=begin$)|((?i)#)|((?i)\\s*\\/)/',
+ 7 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ 8 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ 9 => '/((?i)\\\\.)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 1,
+ 5 => 1,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 5,
+ 11 => 2,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 1,
+ 5 => 1,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 5,
+ 11 => 2,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 1,
+ 5 => 1,
+ 6 => 0,
+ 7 => 0,
+ 8 => 0,
+ 9 => 0,
+ 10 => 5,
+ 11 => 2,
+ 12 => 0,
+ 13 => 0,
+ 14 => 0,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ 9 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'reserved',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => 'brackets',
+ 8 => 'brackets',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'quotes',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => 'reserved',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => 'brackets',
+ 8 => 'brackets',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'quotes',
+ ),
+ 6 =>
+ array (
+ 0 => 'reserved',
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'quotes',
+ 4 => 'quotes',
+ 5 => '',
+ 6 => '',
+ 7 => 'brackets',
+ 8 => 'brackets',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'quotes',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ 9 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'string',
+ 5 => 'var',
+ 6 => 'var',
+ 7 => 'code',
+ 8 => 'code',
+ 9 => 'identifier',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'string',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => 'special',
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ ),
+ 3 =>
+ array (
+ 0 => 'special',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'comment',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'string',
+ 5 => 'var',
+ 6 => 'var',
+ 7 => 'code',
+ 8 => 'code',
+ 9 => 'identifier',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'string',
+ ),
+ 6 =>
+ array (
+ 0 => 'comment',
+ 1 => 'string',
+ 2 => 'string',
+ 3 => 'string',
+ 4 => 'string',
+ 5 => 'var',
+ 6 => 'var',
+ 7 => 'code',
+ 8 => 'code',
+ 9 => 'identifier',
+ 10 => 'number',
+ 11 => 'number',
+ 12 => 'number',
+ 13 => 'number',
+ 14 => 'number',
+ 15 => 'comment',
+ 16 => 'comment',
+ 17 => 'string',
+ ),
+ 7 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ 8 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ 9 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)$/',
+ 1 => '/(?i)"/',
+ 2 => '/(?i)%b1%/',
+ 3 => '/(?i)\'/',
+ 4 => '/(?i)%b1%/',
+ 5 => '/(?i)\\)/',
+ 6 => '/(?i)\\]/',
+ 7 => '/(?mi)^=end$/',
+ 8 => '/(?mi)$/',
+ 9 => '/(?i)\\/[iomx]*/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => 5,
+ 8 => 6,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => 7,
+ 16 => 8,
+ 17 => 9,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => 5,
+ 8 => 6,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => 7,
+ 16 => 8,
+ 17 => 9,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => 4,
+ 5 => -1,
+ 6 => -1,
+ 7 => 5,
+ 8 => 6,
+ 9 => -1,
+ 10 => -1,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => 7,
+ 16 => 8,
+ 17 => 9,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ 9 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'reserved' => '/^(__FILE__|require|and|def|end|in|or|self|unless|__LINE__|begin|defined?|ensure|module|redo|super|until|BEGIN|break|do|false|next|rescue|then|when|END|case|else|for|nil|retry|true|while|alias|module_function|private|public|protected|attr_reader|attr_writer|attr_accessor|class|elsif|if|not|return|undef|yield)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'reserved' => '/^(__FILE__|require|and|def|end|in|or|self|unless|__LINE__|begin|defined?|ensure|module|redo|super|until|BEGIN|break|do|false|next|rescue|then|when|END|case|else|for|nil|retry|true|while|alias|module_function|private|public|protected|attr_reader|attr_writer|attr_accessor|class|elsif|if|not|return|undef|yield)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 => -1,
+ 8 => -1,
+ 9 =>
+ array (
+ 'reserved' => '/^(__FILE__|require|and|def|end|in|or|self|unless|__LINE__|begin|defined?|ensure|module|redo|super|until|BEGIN|break|do|false|next|rescue|then|when|END|case|else|for|nil|retry|true|while|alias|module_function|private|public|protected|attr_reader|attr_writer|attr_accessor|class|elsif|if|not|return|undef|yield)$/',
+ ),
+ 10 =>
+ array (
+ ),
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 => -1,
+ 16 => -1,
+ 17 => -1,
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 9 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ 9 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => true,
+ 3 => false,
+ 4 => true,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => true,
+ 3 => false,
+ 4 => true,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => true,
+ 3 => false,
+ 4 => true,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ 9 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer.php b/library/Text_Highlighter/Text/Highlighter/Renderer.php
new file mode 100644
index 000000000..cb8993ff8
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer.php
@@ -0,0 +1,164 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * Abstract base class for Highlighter renderers
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * Abstract base class for Highlighter renderers
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @abstract
+ */
+
+class Text_Highlighter_Renderer
+{
+ /**
+ * Renderer options
+ *
+ * @var array
+ * @access protected
+ */
+ var $_options = array();
+
+ /**
+ * Current language
+ *
+ * @var string
+ * @access protected
+ */
+ var $_language = '';
+
+ /**
+ * Constructor
+ *
+ * @access public
+ *
+ * @param array $options Rendering options. Renderer-specific.
+ */
+ function __construct($options = array())
+ {
+ $this->_options = $options;
+ }
+
+ /**
+ * PHP4 compatable constructor
+ *
+ * @access public
+ *
+ * @param array $options Rendering options. Renderer-specific.
+ */
+ function Text_Highlighter_Renderer($options = array())
+ {
+ $this->__construct($options);
+ }
+
+ /**
+ * Resets renderer state
+ *
+ * @access public
+ *
+ * @param array $options Rendering options. Renderer-specific.
+ */
+ function reset()
+ {
+ return;
+ }
+
+ /**
+ * Preprocesses code
+ *
+ * @access public
+ *
+ * @param string $str Code to preprocess
+ * @return string Preprocessed code
+ */
+ function preprocess($str)
+ {
+ return $str;
+ }
+
+ /**
+ * Accepts next token
+ *
+ * @abstract
+ * @access public
+ *
+ * @param string $class Token class
+ * @param string $content Token content
+ */
+ function acceptToken($class, $content)
+ {
+ return;
+ }
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @access public
+ *
+ */
+ function finalize()
+ {
+ return;
+ }
+
+ /**
+ * Get generated output
+ *
+ * @abstract
+ * @return mixed Renderer-specific
+ * @access public
+ *
+ */
+ function getOutput()
+ {
+ return;
+ }
+
+ /**
+ * Set current language
+ *
+ * @abstract
+ * @return void
+ * @access public
+ *
+ */
+ function setCurrentLanguage($lang)
+ {
+ $this->_language = $lang;
+ }
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php b/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php
new file mode 100644
index 000000000..fd238a4d1
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/Array.php
@@ -0,0 +1,200 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * Array renderer.
+ *
+ * Produces an array that contains class names and content pairs.
+ * The array can be enumerated or associative. Associative means
+ * <code>class =&gt; content</code> pairs.
+ * Based on the HTML renderer by Andrey Demenev.
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+
+/**
+ * Array renderer, based on Andrey Demenev's HTML renderer.
+ *
+ * In addition to the options supported by the HTML renderer,
+ * the following options were also introduced:
+ * <ul><li>htmlspecialchars - whether or not htmlspecialchars() will
+ * be called on the content, default TRUE</li>
+ * <li>enumerated - type of array produced, default FALSE,
+ * meaning associative array</li>
+ * </ul>
+ *
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.5.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_Array extends Text_Highlighter_Renderer
+{
+
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * Tab size
+ *
+ * @var integer
+ */
+ var $_tabsize = 4;
+
+ /**
+ * Should htmlentities() will be called
+ *
+ * @var boolean
+ */
+ var $_htmlspecialchars = true;
+
+ /**
+ * Enumerated or associative array
+ *
+ * @var integer
+ */
+ var $_enumerated = false;
+
+ /**
+ * Array containing highlighting rules
+ *
+ * @var array
+ */
+ var $_output = array();
+
+ /**#@-*/
+
+ /**
+ * Preprocesses code
+ *
+ * @access public
+ *
+ * @param string $str Code to preprocess
+ * @return string Preprocessed code
+ */
+ function preprocess($str)
+ {
+ // normalize whitespace and tabs
+ $str = str_replace("\r\n","\n", $str);
+ $str = str_replace("\r","\n", $str);
+ // some browsers refuse to display empty lines
+ $str = preg_replace('~^$~m'," ", $str);
+ $str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str);
+ return rtrim($str);
+ }
+
+
+ /**
+ * Resets renderer state
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ *
+ * @access protected
+ */
+ function reset()
+ {
+ $this->_output = array();
+ $this->_lastClass = 'default';
+ if (isset($this->_options['tabsize'])) {
+ $this->_tabsize = $this->_options['tabsize'];
+ }
+ if (isset($this->_options['htmlspecialchars'])) {
+ $this->_htmlspecialchars = $this->_options['htmlspecialchars'];
+ }
+ if (isset($this->_options['enumerated'])) {
+ $this->_enumerated = $this->_options['enumerated'];
+ }
+ }
+
+
+
+ /**
+ * Accepts next token
+ *
+ * @abstract
+ * @access public
+ * @param string $class Token class
+ * @param string $content Token content
+ */
+ function acceptToken($class, $content)
+ {
+
+
+ $theClass = $this->_getFullClassName($class);
+ if ($this->_htmlspecialchars) {
+ $content = htmlspecialchars($content);
+ }
+ if ($this->_enumerated) {
+ $this->_output[] = array($class, $content);
+ } else {
+ $this->_output[][$class] = $content;
+ }
+ $this->_lastClass = $class;
+
+ }
+
+
+ /**
+ * Given a CSS class name, returns the class name
+ * with language name prepended, if necessary
+ *
+ * @access private
+ *
+ * @param string $class Token class
+ */
+ function _getFullClassName($class)
+ {
+ if (!empty($this->_options['use_language'])) {
+ $theClass = $this->_language . '-' . $class;
+ } else {
+ $theClass = $class;
+ }
+ return $theClass;
+ }
+
+ /**
+ * Get generated output
+ *
+ * @abstract
+ * @return array Highlighted code as an array
+ * @access public
+ */
+ function getOutput()
+ {
+ return $this->_output;
+ }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?> \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/BB.php b/library/Text_Highlighter/Text/Highlighter/Renderer/BB.php
new file mode 100644
index 000000000..abd77cfd8
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/BB.php
@@ -0,0 +1,238 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * BB code renderer.
+ *
+ * This BB renderer produces BB code, ready to be pasted in bulletin boards and
+ * other applications that accept BB code. Based on the HTML renderer by Andrey Demenev.
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @copyright 2005 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+
+/**
+ * BB code renderer, based on Andrey Demenev's HTML renderer.
+ *
+ * Elements of $options argument of constructor (each being optional):
+ *
+ * - 'numbers' - Line numbering TRUE or FALSE
+ * - 'tabsize' - Tab size, default is 4
+ * - 'bb_tags' - An array containing three BB tags, see below
+ * - 'tag_brackets' - An array that conains opening and closing tags, [ and ]
+ * - 'colors' - An array with all the colors to be used for highlighting
+ *
+ * The default BB tags are:
+ * - 'color' => 'color'
+ * - 'list' => 'list'
+ * - 'list_item' => '*'
+ *
+ * The default colors for the highlighter are:
+ * - 'default' => 'Black',
+ * - 'code' => 'Gray',
+ * - 'brackets' => 'Olive',
+ * - 'comment' => 'Orange',
+ * - 'mlcomment' => 'Orange',
+ * - 'quotes' => 'Darkred',
+ * - 'string' => 'Red',
+ * - 'identifier' => 'Blue',
+ * - 'builtin' => 'Teal',
+ * - 'reserved' => 'Green',
+ * - 'inlinedoc' => 'Blue',
+ * - 'var' => 'Darkblue',
+ * - 'url' => 'Blue',
+ * - 'special' => 'Navy',
+ * - 'number' => 'Maroon',
+ * - 'inlinetags' => 'Blue',
+ *
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 20045 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.5.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_BB extends Text_Highlighter_Renderer_Array
+{
+
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * Line numbering - will use the specified BB tag for listings
+ *
+ * @var boolean
+ */
+ var $_numbers = false;
+
+ /**
+ * BB tags to be used
+ *
+ * @var array
+ */
+ var $_bb_tags = array (
+ 'color' => 'color',
+ 'list' => 'list',
+ 'list_item' => '*',
+ 'code' => 'code',
+ );
+
+ /**
+ * BB brackets - [ and ]
+ *
+ * @var array
+ */
+ var $_tag_brackets = array ('start' => '[', 'end' => ']');
+
+ /**
+ * Colors map
+ *
+ * @var boolean
+ */
+ var $_colors = array(
+ 'default' => 'Black',
+ 'code' => 'Gray',
+ 'brackets' => 'Olive',
+ 'comment' => 'Orange',
+ 'mlcomment' => 'Orange',
+ 'quotes' => 'Darkred',
+ 'string' => 'Red',
+ 'identifier' => 'Blue',
+ 'builtin' => 'Teal',
+ 'reserved' => 'Green',
+ 'inlinedoc' => 'Blue',
+ 'var' => 'Darkblue',
+ 'url' => 'Blue',
+ 'special' => 'Navy',
+ 'number' => 'Maroon',
+ 'inlinetags' => 'Blue',
+ );
+
+ /**#@-*/
+
+ /**
+ * Resets renderer state
+ *
+ * @access protected
+ *
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ */
+ function reset()
+ {
+ parent::reset();
+ if (isset($this->_options['numbers'])) {
+ $this->_numbers = $this->_options['numbers'];
+ }
+ if (isset($this->_options['bb_tags'])) {
+ $this->_bb_tags = array_merge($this->_bb_tags, $this->_options['bb_tags']);
+ }
+ if (isset($this->_options['tag_brackets'])) {
+ $this->_tag_brackets = array_merge($this->_tag_brackets, $this->_options['tag_brackets']);
+ }
+ if (isset($this->_options['colors'])) {
+ $this->_colors = array_merge($this->_colors, $this->_options['colors']);
+ }
+ }
+
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @abstract
+ * @access public
+ *
+ */
+ function finalize()
+ {
+
+ // get parent's output
+ parent::finalize();
+ $output = parent::getOutput();
+
+ $bb_output = '';
+
+ $color_start = $this->_tag_brackets['start'] . $this->_bb_tags['color'] . '=%s' . $this->_tag_brackets['end'];
+ $color_end = $this->_tag_brackets['start'] . '/' . $this->_bb_tags['color'] . $this->_tag_brackets['end'];
+
+ // loop through each class=>content pair
+ foreach ($output AS $token) {
+
+ if ($this->_enumerated) {
+ $class = $token[0];
+ $content = $token[1];
+ } else {
+ $key = key($token);
+ $class = $key;
+ $content = $token[$key];
+ }
+
+ $iswhitespace = ctype_space($content);
+ if (!$iswhitespace && !empty($this->_colors[$class])) {
+ $bb_output .= sprintf($color_start, $this->_colors[$class]);
+ $bb_output .= $content;
+ $bb_output .= $color_end;
+ } else {
+ $bb_output .= $content;
+ }
+ }
+
+ if ($this->_numbers) {
+
+ $item_tag = $this->_tag_brackets['start'] .
+ $this->_bb_tags['list_item'] .
+ $this->_tag_brackets['end'];
+ $this->_output = $item_tag . str_replace("\n", "\n". $item_tag .' ', $bb_output);
+ $this->_output = $this->_tag_brackets['start'] .
+ $this->_bb_tags['list'] .
+ $this->_tag_brackets['end'] .
+ $this->_output .
+ $this->_tag_brackets['start'] .
+ '/'.
+ $this->_bb_tags['list'] .
+ $this->_tag_brackets['end']
+ ;
+ } else {
+ $this->_output = $this->_tag_brackets['start'] .
+ $this->_bb_tags['code'] .
+ $this->_tag_brackets['end'] .
+ $bb_output .
+ $this->_tag_brackets['start'] .
+ '/' .
+ $this->_bb_tags['code'] .
+ $this->_tag_brackets['end'];
+ }
+ }
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/Console.php b/library/Text_Highlighter/Text/Highlighter/Renderer/Console.php
new file mode 100644
index 000000000..d7b1fba88
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/Console.php
@@ -0,0 +1,208 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * Console renderer
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+
+define ('HL_CONSOLE_DEFCOLOR', "\033[0m");
+
+/**
+ * Console renderer
+ *
+ * Suitable for displaying text on color-capable terminals, directly
+ * or trough less -r
+ *
+ * Elements of $options argument of constructor (each being optional):
+ *
+ * - 'numbers' - whether to add line numbers
+ * - 'tabsize' - Tab size
+ * - 'colors' - additional colors
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_Console extends Text_Highlighter_Renderer
+{
+
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * class of last outputted text chunk
+ *
+ * @var string
+ */
+ var $_lastClass;
+
+ /**
+ * Line numbering
+ *
+ * @var boolean
+ */
+ var $_numbers = false;
+
+ /**
+ * Tab size
+ *
+ * @var integer
+ */
+ var $_tabsize = 4;
+
+ /**
+ * Highlighted code
+ *
+ * @var string
+ */
+ var $_output = '';
+
+ /**#@-*/
+
+ var $_colors = array();
+
+ var $_defColors = array(
+ 'default' => "\033[0m",
+ 'inlinetags' => "\033[31m",
+ 'brackets' => "\033[36m",
+ 'quotes' => "\033[34m",
+ 'inlinedoc' => "\033[34m",
+ 'var' => "\033[1m",
+ 'types' => "\033[32m",
+ 'number' => "\033[32m",
+ 'string' => "\033[31m",
+ 'reserved' => "\033[35m",
+ 'comment' => "\033[33m",
+ 'mlcomment' => "\033[33m",
+ );
+
+ function preprocess($str)
+ {
+ // normalize whitespace and tabs
+ $str = str_replace("\r\n","\n", $str);
+ $str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str);
+ return rtrim($str);
+ }
+
+
+ /**
+ * Resets renderer state
+ *
+ * @access protected
+ *
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ */
+ function reset()
+ {
+ $this->_lastClass = '';
+ if (isset($this->_options['numbers'])) {
+ $this->_numbers = (bool)$this->_options['numbers'];
+ } else {
+ $this->_numbers = false;
+ }
+ if (isset($this->_options['tabsize'])) {
+ $this->_tabsize = $this->_options['tabsize'];
+ } else {
+ $this->_tabsize = 4;
+ }
+ if (isset($this->_options['colors'])) {
+ $this->_colors = array_merge($this->_defColors, $this->_options['colors']);
+ } else {
+ $this->_colors = $this->_defColors;
+ }
+ $this->_output = '';
+ }
+
+
+
+ /**
+ * Accepts next token
+ *
+ * @access public
+ *
+ * @param string $class Token class
+ * @param string $content Token content
+ */
+ function acceptToken($class, $content)
+ {
+ if (isset($this->_colors[$class])) {
+ $color = $this->_colors[$class];
+ } else {
+ $color = $this->_colors['default'];
+ }
+ if ($this->_lastClass != $class) {
+ $this->_output .= $color;
+ }
+ $content = str_replace("\n", $this->_colors['default'] . "\n" . $color, $content);
+ $content .= $this->_colors['default'];
+ $this->_output .= $content;
+ }
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @access public
+ *
+ */
+ function finalize()
+ {
+ if ($this->_numbers) {
+ $nlines = substr_count($this->_output, "\n") + 1;
+ $len = strlen($nlines);
+ $i = 1;
+ $this->_output = preg_replace('~^~em', '" " . str_pad($i++, $len, " ", STR_PAD_LEFT) . ": "', $this->_output);
+ }
+ $this->_output .= HL_CONSOLE_DEFCOLOR . "\n";
+ }
+
+ /**
+ * Get generated output
+ *
+ * @return string Highlighted code
+ * @access public
+ *
+ */
+ function getOutput()
+ {
+ return $this->_output;
+ }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/Html.php b/library/Text_Highlighter/Text/Highlighter/Renderer/Html.php
new file mode 100644
index 000000000..5d6e56ae1
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/Html.php
@@ -0,0 +1,465 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * HTML renderer
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+require_once 'Text/Highlighter/Renderer/Array.php';
+
+// BC trick : only define constants if Text/Highlighter.php
+// is not yet included
+if (!defined('HL_NUMBERS_LI')) {
+ /**#@+
+ * Constant for use with $options['numbers']
+ */
+ /**
+ * use numbered list, deprecated, use HL_NUMBERS_OL instaed
+ * @deprecated
+ */
+ define ('HL_NUMBERS_LI' , 1);
+ /**
+ * Use 2-column table with line numbers in left column and code in right column.
+ */
+ define ('HL_NUMBERS_TABLE' , 2);
+ /**#@-*/
+}
+
+
+/**#@+
+ * Constant for use with $options['numbers']
+ */
+/**
+ * Use numbered list
+ */
+define ('HL_NUMBERS_OL', 1);
+/**
+ * Use non-numbered list
+ */
+define ('HL_NUMBERS_UL', 3);
+/**#@-*/
+
+
+/**
+ * HTML renderer
+ *
+ * Elements of $options argument of constructor (each being optional):
+ *
+ * - 'numbers' - Line numbering style 0 or {@link HL_NUMBERS_TABLE}
+ * or {@link HL_NUMBERS_UL} or {@link HL_NUMBERS_OL}
+ * - 'numbers_start' - starting number for numbered lines
+ * - 'tabsize' - Tab size
+ * - 'style_map' - Mapping of keywords to formatting rules using inline styles
+ * - 'class_map' - Mapping of keywords to formatting rules using class names
+ * - 'doclinks' - array that has keys "url", "target" and "elements", used for
+ * generating links to online documentation
+ * - 'use_language' - class names will be prefixed with language, like "php-reserved" or "css-code"
+ *
+ * Example of setting documentation links:
+ * $options['doclinks'] = array(
+ * 'url' => 'http://php.net/%s',
+ * 'target' => '_blank',
+ * 'elements' => array('reserved', 'identifier')
+ * );
+ *
+ * Example of setting class names map:
+ * $options['class_map'] = array(
+ * 'main' => 'my-main',
+ * 'table' => 'my-table',
+ * 'gutter' => 'my-gutter',
+ * 'brackets' => 'my-brackets',
+ * 'builtin' => 'my-builtin',
+ * 'code' => 'my-code',
+ * 'comment' => 'my-comment',
+ * 'default' => 'my-default',
+ * 'identifier' => 'my-identifier',
+ * 'inlinedoc' => 'my-inlinedoc',
+ * 'inlinetags' => 'my-inlinetags',
+ * 'mlcomment' => 'my-mlcomment',
+ * 'number' => 'my-number',
+ * 'quotes' => 'my-quotes',
+ * 'reserved' => 'my-reserved',
+ * 'special' => 'my-special',
+ * 'string' => 'my-string',
+ * 'url' => 'my-url',
+ * 'var' => 'my-var',
+ * );
+ *
+ * Example of setting styles mapping:
+ * $options['style_map'] = array(
+ * 'main' => 'color: black',
+ * 'table' => 'border: 1px solid black',
+ * 'gutter' => 'background-color: yellow',
+ * 'brackets' => 'color: blue',
+ * 'builtin' => 'color: red',
+ * 'code' => 'color: green',
+ * 'comment' => 'color: orange',
+ * // ....
+ * );
+ *
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_Html extends Text_Highlighter_Renderer_Array
+{
+
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * Line numbering style
+ *
+ * @var integer
+ */
+ var $_numbers = 0;
+
+ /**
+ * For numberered lines - where to start
+ *
+ * @var integer
+ */
+ var $_numbers_start = 0;
+
+ /**
+ * Tab size
+ *
+ * @var integer
+ */
+ var $_tabsize = 4;
+
+ /**
+ * Highlighted code
+ *
+ * @var string
+ */
+ var $_output = '';
+
+ /**
+ * Mapping of keywords to formatting rules using inline styles
+ *
+ * @var array
+ */
+ var $_style_map = array();
+
+ /**
+ * Mapping of keywords to formatting rules using class names
+ *
+ * @var array
+ */
+ var $_class_map = array(
+ 'main' => 'hl-main',
+ 'table' => 'hl-table',
+ 'gutter' => 'hl-gutter',
+ 'brackets' => 'hl-brackets',
+ 'builtin' => 'hl-builtin',
+ 'code' => 'hl-code',
+ 'comment' => 'hl-comment',
+ 'default' => 'hl-default',
+ 'identifier' => 'hl-identifier',
+ 'inlinedoc' => 'hl-inlinedoc',
+ 'inlinetags' => 'hl-inlinetags',
+ 'mlcomment' => 'hl-mlcomment',
+ 'number' => 'hl-number',
+ 'prepro' => 'hl-prepro',
+ 'quotes' => 'hl-quotes',
+ 'reserved' => 'hl-reserved',
+ 'special' => 'hl-special',
+ 'string' => 'hl-string',
+ 'types' => 'hl-types',
+ 'url' => 'hl-url',
+ 'var' => 'hl-var',
+ );
+
+ /**
+ * Setup for links to online documentation
+ *
+ * This is an array with keys:
+ * - url, ex. http://php.net/%s
+ * - target, ex. _blank, default - no target
+ * - elements, default is <code>array('reserved', 'identifier')</code>
+ *
+ * @var array
+ */
+ var $_doclinks = array();
+
+ /**#@-*/
+
+
+ /**
+ * Resets renderer state
+ *
+ * @access protected
+ *
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ */
+ function reset()
+ {
+ $this->_output = '';
+ if (isset($this->_options['numbers'])) {
+ $this->_numbers = (int)$this->_options['numbers'];
+ if ($this->_numbers != HL_NUMBERS_LI
+ && $this->_numbers != HL_NUMBERS_UL
+ && $this->_numbers != HL_NUMBERS_OL
+ && $this->_numbers != HL_NUMBERS_TABLE
+ ) {
+ $this->_numbers = 0;
+ }
+ }
+ if (isset($this->_options['tabsize'])) {
+ $this->_tabsize = $this->_options['tabsize'];
+ }
+ if (isset($this->_options['numbers_start'])) {
+ $this->_numbers_start = intval($this->_options['numbers_start']);
+ }
+ if (isset($this->_options['doclinks']) &&
+ is_array($this->_options['doclinks']) &&
+ !empty($this->_options['doclinks']['url'])
+ ) {
+
+ $this->_doclinks = $this->_options['doclinks']; // keys: url, target, elements array
+
+ if (empty($this->_options['doclinks']['elements'])) {
+ $this->_doclinks['elements'] = array('reserved', 'identifier');
+ }
+ }
+ if (isset($this->_options['style_map'])) {
+ $this->_style_map = $this->_options['style_map'];
+ }
+ if (isset($this->_options['class_map'])) {
+ $this->_class_map = array_merge($this->_class_map, $this->_options['class_map']);
+ }
+ $this->_htmlspecialchars = true;
+
+ }
+
+
+ /**
+ * Given a CSS class name, returns the class name
+ * with language name prepended, if necessary
+ *
+ * @access private
+ *
+ * @param string $class Token class
+ */
+ function _getFullClassName($class)
+ {
+ if (!empty($this->_options['use_language'])) {
+ $the_class = $this->_language . '-' . $class;
+ } else {
+ $the_class = $class;
+ }
+ return $the_class;
+ }
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @access public
+ */
+ function finalize()
+ {
+
+ // get parent's output
+ parent::finalize();
+ $output = parent::getOutput();
+
+ $html_output = '';
+
+ $numbers_li = false;
+
+ if (
+ $this->_numbers == HL_NUMBERS_LI ||
+ $this->_numbers == HL_NUMBERS_UL ||
+ $this->_numbers == HL_NUMBERS_OL
+ )
+ {
+ $numbers_li = true;
+ }
+
+ // loop through each class=>content pair
+ foreach ($output AS $token) {
+
+ if ($this->_enumerated) {
+ $key = false;
+ $the_class = $token[0];
+ $content = $token[1];
+ } else {
+ $key = key($token);
+ $the_class = $key;
+ $content = $token[$key];
+ }
+
+ $span = $this->_getStyling($the_class);
+ $decorated_output = $this->_decorate($content, $key);
+
+
+ if ($numbers_li == true) {
+ // end span tags before end of li, and re-open on next line
+ $lastSpanTag = str_replace("%s</span>", "", $span);
+ $span = sprintf($span, $decorated_output);
+ $span = str_replace("\n", "</span></li>\n<li>$lastSpanTag&nbsp;", $span);
+ $html_output .= $span;
+ } else {
+ $html_output .= sprintf($span, $decorated_output);
+ }
+
+
+ }
+
+ // format lists
+ if (!empty($this->_numbers) && $numbers_li == true) {
+
+
+ // additional whitespace for browsers that do not display
+ // empty list items correctly
+ $this->_output = '<li>&nbsp;' . $html_output . '</li>';
+
+ $start = '';
+ if ($this->_numbers == HL_NUMBERS_OL && intval($this->_numbers_start) > 0) {
+ $start = ' start="' . $this->_numbers_start . '"';
+ }
+
+ $list_tag = 'ol';
+ if ($this->_numbers == HL_NUMBERS_UL) {
+ $list_tag = 'ul';
+ }
+
+
+ $this->_output = '<' . $list_tag . $start
+ . ' ' . $this->_getStyling('main', false) . '>'
+ . $this->_output . '</'. $list_tag .'>';
+
+ // render a table
+ } else if ($this->_numbers == HL_NUMBERS_TABLE) {
+
+
+ $start_number = 0;
+ if (intval($this->_numbers_start)) {
+ $start_number = $this->_numbers_start - 1;
+ }
+
+ $numbers = '';
+
+ $nlines = substr_count($html_output,"\n")+1;
+ for ($i=1; $i <= $nlines; $i++) {
+ $numbers .= ($start_number + $i) . "\n";
+ }
+ $this->_output = '<table ' . $this->_getStyling('table', false) . ' width="100%"><tr>' .
+ '<td '. $this->_getStyling('gutter', false) .' align="right" valign="top">' .
+ '<pre>' . $numbers . '</pre></td><td '. $this->_getStyling('main', false) .
+ ' valign="top"><pre>' .
+ $html_output . '</pre></td></tr></table>';
+ }
+ if (!$this->_numbers) {
+ $this->_output = '<pre>' . $html_output . '</pre>';
+ }
+ $this->_output = '<div ' . $this->_getStyling('main', false) . '>' . $this->_output . '</div>';
+ }
+
+
+ /**
+ * Provides additional formatting to a keyword
+ *
+ * @param string $content Keyword
+ * @return string Keyword with additional formatting
+ * @access public
+ *
+ */
+ function _decorate($content, $key = false)
+ {
+ // links to online documentation
+ if (!empty($this->_doclinks) &&
+ !empty($this->_doclinks['url']) &&
+ in_array($key, $this->_doclinks['elements'])
+ ) {
+
+ $link = '<a href="'. sprintf($this->_doclinks['url'], $content) . '"';
+ if (!empty($this->_doclinks['target'])) {
+ $link.= ' target="' . $this->_doclinks['target'] . '"';
+ }
+ $link .= '>';
+ $link.= $content;
+ $link.= '</a>';
+
+ $content = $link;
+
+ }
+
+ return $content;
+ }
+
+ /**
+ * Returns <code>class</code> and/or <code>style</code> attribute,
+ * optionally enclosed in a <code>span</code> tag
+ *
+ * @param string $class Class name
+ * @paran boolean $span_tag Whether or not to return styling attributes in a <code>&gt;span&lt;</code> tag
+ * @return string <code>span</code> tag or just a <code>class</code> and/or <code>style</code> attributes
+ * @access private
+ */
+ function _getStyling($class, $span_tag = true)
+ {
+ $attrib = '';
+ if (!empty($this->_style_map) &&
+ !empty($this->_style_map[$class])
+ ) {
+ $attrib = 'style="'. $this->_style_map[$class] .'"';
+ }
+ if (!empty($this->_class_map) &&
+ !empty($this->_class_map[$class])
+ ) {
+ if ($attrib) {
+ $attrib .= ' ';
+ }
+ $attrib .= 'class="'. $this->_getFullClassName($this->_class_map[$class]) .'"';
+ }
+
+ if ($span_tag) {
+ $span = '<span ' . $attrib . '>%s</span>';
+ return $span;
+ } else {
+ return $attrib;
+ }
+
+ }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php b/library/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php
new file mode 100644
index 000000000..68e01d3e0
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php
@@ -0,0 +1,187 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * HTML renderer that uses only basic html tags
+ *
+ * PHP versions 4 and 5. Based on the "normal" HTML renderer by Andrey Demenev.
+ * It's designed to work with user agents that support only a limited number of
+ * HTML tags. Like the iPod which supports only b, i, u and a.
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @copyright 2005 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+require_once 'Text/Highlighter/Renderer/Array.php';
+
+/**
+ * HTML basic tags renderer, based on Andrey Demenev's HTML renderer.
+ *
+ * Elements of $options argument of constructor (each being optional):
+ *
+ * - 'numbers' - Line numbering TRUE or FALSE. Default is FALSE.
+ * - 'tabsize' - Tab size, default is 4.
+ * - 'tags' - Array, containing the tags to be used for highlighting
+ *
+ * Here's the listing of the default tags:
+ * - 'default' => '',
+ * - 'code' => '',
+ * - 'brackets' => 'b',
+ * - 'comment' => 'i',
+ * - 'mlcomment' => 'i',
+ * - 'quotes' => '',
+ * - 'string' => 'i',
+ * - 'identifier' => 'b',
+ * - 'builtin' => 'b',
+ * - 'reserved' => 'u',
+ * - 'inlinedoc' => 'i',
+ * - 'var' => 'b',
+ * - 'url' => 'i',
+ * - 'special' => '',
+ * - 'number' => '',
+ * - 'inlinetags' => ''
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2005 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.5.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_HtmlTags extends Text_Highlighter_Renderer_Array
+{
+
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * Line numbering - will use 'ol' tag
+ *
+ * @var boolean
+ */
+ var $_numbers = false;
+
+ /**
+ * HTML tags map
+ *
+ * @var array
+ */
+ var $_hilite_tags = array(
+ 'default' => '',
+ 'code' => '',
+ 'brackets' => 'b',
+ 'comment' => 'i',
+ 'mlcomment' => 'i',
+ 'quotes' => '',
+ 'string' => 'i',
+ 'identifier' => 'b',
+ 'builtin' => 'b',
+ 'reserved' => 'u',
+ 'inlinedoc' => 'i',
+ 'var' => 'b',
+ 'url' => 'i',
+ 'special' => '',
+ 'number' => '',
+ 'inlinetags' => '',
+ );
+
+ /**#@-*/
+
+ /**
+ * Resets renderer state
+ *
+ * @access protected
+ *
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ */
+ function reset()
+ {
+ parent::reset();
+ if (isset($this->_options['numbers'])) {
+ $this->_numbers = $this->_options['numbers'];
+ }
+ if (isset($this->_options['tags'])) {
+ $this->_hilite_tags = array_merge($this->_tags, $this->_options['tags']);
+ }
+ }
+
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @abstract
+ * @access public
+ *
+ */
+ function finalize()
+ {
+
+ // get parent's output
+ parent::finalize();
+ $output = parent::getOutput();
+
+ $html_output = '';
+
+ // loop through each class=>content pair
+ foreach ($output AS $token) {
+
+ if ($this->_enumerated) {
+ $class = $token[0];
+ $content = $token[1];
+ } else {
+ $key = key($token);
+ $class = $key;
+ $content = $token[$key];
+ }
+
+ $iswhitespace = ctype_space($content);
+ if (!$iswhitespace && !empty($this->_hilite_tags[$class])) {
+ $html_output .= '<'. $this->_hilite_tags[$class] . '>' . $content . '</'. $this->_hilite_tags[$class] . '>';
+ } else {
+ $html_output .= $content;
+ }
+ }
+
+
+ if ($this->_numbers) {
+ /* additional whitespace for browsers that do not display
+ empty list items correctly */
+ $html_output = '<li>&nbsp;' . str_replace("\n", "</li>\n<li>&nbsp;", $html_output) . '</li>';
+ $this->_output = '<ol>' . str_replace(' ', '&nbsp;', $html_output) . '</ol>';
+ } else {
+ $this->_output = '<pre>' . $html_output . '</pre>';
+ }
+ }
+
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/JSON.php b/library/Text_Highlighter/Text/Highlighter/Renderer/JSON.php
new file mode 100644
index 000000000..d4c926161
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/JSON.php
@@ -0,0 +1,86 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * JSON renderer.
+ *
+ * Based on the HTML renderer by Andrey Demenev.
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+require_once 'Text/Highlighter/Renderer/Array.php';
+
+/**
+ * JSON renderer, based on Andrey Demenev's HTML renderer.
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.5.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_JSON extends Text_Highlighter_Renderer_Array
+{
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @abstract
+ * @access public
+ */
+ function finalize()
+ {
+
+ parent::finalize();
+ $output = parent::getOutput();
+
+ $json_array = array();
+
+ foreach ($output AS $token) {
+
+ if ($this->_enumerated) {
+ $json_array[] = '["' . $token[0] . '","' . $token[1] . '"]';
+ } else {
+ $key = key($token);
+ $json_array[] = '{"class": "' . $key . '","content":"' . $token[$key] . '"}';
+ }
+
+ }
+
+ $this->_output = '['. implode(',', $json_array) .']';
+ $this->_output = str_replace("\n", '\n', $this->_output);
+
+ }
+
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?> \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/Renderer/XML.php b/library/Text_Highlighter/Text/Highlighter/Renderer/XML.php
new file mode 100644
index 000000000..7b6fb2106
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/Renderer/XML.php
@@ -0,0 +1,104 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * XML renderer.
+ *
+ * Based on the HTML renderer by Andrey Demenev.
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter/Renderer.php';
+require_once 'Text/Highlighter/Renderer/Array.php';
+require_once 'XML/Serializer.php';
+
+/**
+ * XML renderer, based on Andrey Demenev's HTML renderer.
+ *
+ * @author Stoyan Stefanov <ssttoo@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2006 Stoyan Stefanov
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.5.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+class Text_Highlighter_Renderer_XML extends Text_Highlighter_Renderer_Array
+{
+
+
+ /**
+ * Options for XML_Serializer
+ *
+ * @access private
+ * @var array
+ */
+ var $_serializer_options = array();
+
+
+ /**
+ * Resets renderer state
+ *
+ * Descendents of Text_Highlighter call this method from the constructor,
+ * passing $options they get as parameter.
+ *
+ * @access protected
+ */
+ function reset()
+ {
+ parent::reset();
+ if (isset($this->_options['xml_serializer'])) {
+ $this->_serializer_options = $this->_options['xml_serializer'];
+ }
+ }
+
+
+ /**
+ * Signals that no more tokens are available
+ *
+ * @abstract
+ * @access public
+ */
+ function finalize()
+ {
+
+ // call parent's finalize(), then serialize array into XML
+ parent::finalize();
+ $output = parent::getOutput();
+
+ $serializer = new XML_Serializer($this->_serializer_options);
+ $result = $serializer->serialize($output);
+ if ($result === true) {
+ $this->_output = $serializer->getSerializedData();
+ }
+ }
+
+
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * c-hanging-comment-ender-p: nil
+ * End:
+ */
+
+?>
diff --git a/library/Text_Highlighter/Text/Highlighter/SH.php b/library/Text_Highlighter/Text/Highlighter/SH.php
new file mode 100644
index 000000000..ff779868f
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/SH.php
@@ -0,0 +1,1225 @@
+<?php
+/**
+ * Auto-generated class. SH syntax highlighting
+ *
+ * This highlighter is EXPERIMENTAL. It may work incorrectly.
+ * It is a crude hack of the perl syntax, which itself wasn't so good.
+ * But this seems to work OK.
+ *
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : sh.xml,v 1.2 2007/06/14 00:15:50 ssttoo Exp
+ * @author Noah Spurrier <noah@noah.org>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. SH syntax highlighting
+ *
+ * @author Noah Spurrier <noah@noah.org>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_SH extends Text_Highlighter
+{
+ var $_language = 'sh';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_SH($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?m)^(#!)(.*))|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 0 => '/((?m)^(#!)(.*))|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 1 => '/((?m)^(#!)(.*))|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|((?i)([a-z1-9_]+)(\\s*=>))|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 2 => '/((?m)^(#!)(.*))|(\\{)|(\\()|(\\[)|((use)\\s+([\\w:]*))|((?Us)\\b(q[wq]\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|((?Us)\\b(q\\s*((\\{)|(\\()|(\\[)|(\\<)|([\\W\\S])))(?=(.*)((?(3)\\})(?(4)\\))(?(5)\\])(?(6)\\>)(?(7)\\7))))|(#.*)|((?x)(s|tr) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2)((\\\\.|[^\\\\])*?)(\\2[ecgimosx]*))|((?x)(m) ([|#~`!@$%^&*-+=\\\\;:\'",.\\/?]) ((\\\\.|[^\\\\])*?) (\\2[ecgimosx]*))|( \\/)|(\\$#?[1-9\'`@!])|((?i)(\\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)(\\{)([a-z1-9]+)(\\}))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(`)|(\')|(")|((?i)[a-z_]\\w*)|(\\d*\\.?\\d+)/',
+ 3 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\[\\\\"\'`tnr\\$\\{@])/',
+ 4 => '/(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 5 => '/(\\\\\\/)/',
+ 6 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 7 => '/(\\\\\\\\|\\\\"|\\\\\'|\\\\`)/',
+ 8 => '/(\\$#?[1-9\'`@!])|((?i)\\$([a-z1-9_]+|\\^(?-i)[A-Z]?(?i)))|((?i)[\\$@%]#?\\{[a-z1-9]+\\})|(\\\\[\\\\"\'`tnr\\$\\{@])/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 2,
+ 5 => 9,
+ 6 => 9,
+ 7 => 0,
+ 8 => 8,
+ 9 => 5,
+ 10 => 0,
+ 11 => 0,
+ 12 => 3,
+ 13 => 1,
+ 14 => 3,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 2,
+ 5 => 9,
+ 6 => 9,
+ 7 => 0,
+ 8 => 8,
+ 9 => 5,
+ 10 => 0,
+ 11 => 0,
+ 12 => 3,
+ 13 => 1,
+ 14 => 3,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 2,
+ 5 => 9,
+ 6 => 9,
+ 7 => 0,
+ 8 => 8,
+ 9 => 5,
+ 10 => 0,
+ 11 => 2,
+ 12 => 0,
+ 13 => 3,
+ 14 => 1,
+ 15 => 3,
+ 16 => 0,
+ 17 => 0,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ 21 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 2,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 2,
+ 5 => 9,
+ 6 => 9,
+ 7 => 0,
+ 8 => 8,
+ 9 => 5,
+ 10 => 0,
+ 11 => 0,
+ 12 => 3,
+ 13 => 1,
+ 14 => 3,
+ 15 => 0,
+ 16 => 0,
+ 17 => 0,
+ 18 => 0,
+ 19 => 0,
+ 20 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 0,
+ 3 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => '',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => 'quotes',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => 'quotes',
+ 17 => 'quotes',
+ 18 => 'quotes',
+ 19 => '',
+ 20 => '',
+ ),
+ 0 =>
+ array (
+ 0 => '',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => 'quotes',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => 'quotes',
+ 17 => 'quotes',
+ 18 => 'quotes',
+ 19 => '',
+ 20 => '',
+ ),
+ 1 =>
+ array (
+ 0 => '',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => 'quotes',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => 'quotes',
+ 18 => 'quotes',
+ 19 => 'quotes',
+ 20 => '',
+ 21 => '',
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => 'quotes',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => 'quotes',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => 'quotes',
+ 17 => 'quotes',
+ 18 => 'quotes',
+ 19 => '',
+ 20 => '',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ 5 =>
+ array (
+ 0 => '',
+ ),
+ 6 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'special',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'special',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'comment',
+ 8 => 'string',
+ 9 => 'string',
+ 10 => 'string',
+ 11 => 'var',
+ 12 => 'var',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'string',
+ 17 => 'string',
+ 18 => 'string',
+ 19 => 'identifier',
+ 20 => 'number',
+ ),
+ 0 =>
+ array (
+ 0 => 'special',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'special',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'comment',
+ 8 => 'string',
+ 9 => 'string',
+ 10 => 'string',
+ 11 => 'var',
+ 12 => 'var',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'string',
+ 17 => 'string',
+ 18 => 'string',
+ 19 => 'identifier',
+ 20 => 'number',
+ ),
+ 1 =>
+ array (
+ 0 => 'special',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'special',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'comment',
+ 8 => 'string',
+ 9 => 'string',
+ 10 => 'string',
+ 11 => 'string',
+ 12 => 'var',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'var',
+ 17 => 'string',
+ 18 => 'string',
+ 19 => 'string',
+ 20 => 'identifier',
+ 21 => 'number',
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'special',
+ 5 => 'string',
+ 6 => 'string',
+ 7 => 'comment',
+ 8 => 'string',
+ 9 => 'string',
+ 10 => 'string',
+ 11 => 'var',
+ 12 => 'var',
+ 13 => 'var',
+ 14 => 'var',
+ 15 => 'var',
+ 16 => 'string',
+ 17 => 'string',
+ 18 => 'string',
+ 19 => 'identifier',
+ 20 => 'number',
+ ),
+ 3 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ 5 =>
+ array (
+ 0 => 'string',
+ ),
+ 6 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ 7 =>
+ array (
+ 0 => 'special',
+ ),
+ 8 =>
+ array (
+ 0 => 'var',
+ 1 => 'var',
+ 2 => 'var',
+ 3 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/\\}/',
+ 1 => '/\\)/',
+ 2 => '/\\]/',
+ 3 => '/%b2%/',
+ 4 => '/%b2%/',
+ 5 => '/\\/[cgimosx]*/',
+ 6 => '/`/',
+ 7 => '/\'/',
+ 8 => '/"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => -1,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => 5,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => 6,
+ 17 => 7,
+ 18 => 8,
+ 19 => -1,
+ 20 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => -1,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => 5,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => 6,
+ 17 => 7,
+ 18 => 8,
+ 19 => -1,
+ 20 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => -1,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => 5,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => -1,
+ 17 => 6,
+ 18 => 7,
+ 19 => 8,
+ 20 => -1,
+ 21 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => 0,
+ 2 => 1,
+ 3 => 2,
+ 4 => -1,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => 5,
+ 11 => -1,
+ 12 => -1,
+ 13 => -1,
+ 14 => -1,
+ 15 => -1,
+ 16 => 6,
+ 17 => 7,
+ 18 => 8,
+ 19 => -1,
+ 20 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 =>
+ array (
+ 'reserved' => '/^(cd|cp|rm|echo|printf|exit|cut|join|comm|fmt|grep|egrep|fgrep|sed|awk|yes|false|true|test|expr|tee|basename|dirname|pathchk|pwd|stty|tty|env|printenv|id|logname|whoami|groups|users|who|date|uname|hostname|chroot|nice|nohup|sleep|factor|seq|getopt|getopts|options|shift)$/',
+ 'flowcontrol' => '/^(if|fi|then|else|elif|case|esac|while|done|for|in|function|until|do|select|time|read|set)$/',
+ ),
+ 20 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 =>
+ array (
+ 'reserved' => '/^(cd|cp|rm|echo|printf|exit|cut|join|comm|fmt|grep|egrep|fgrep|sed|awk|yes|false|true|test|expr|tee|basename|dirname|pathchk|pwd|stty|tty|env|printenv|id|logname|whoami|groups|users|who|date|uname|hostname|chroot|nice|nohup|sleep|factor|seq|getopt|getopts|options|shift)$/',
+ 'flowcontrol' => '/^(if|fi|then|else|elif|case|esac|while|done|for|in|function|until|do|select|time|read|set)$/',
+ ),
+ 20 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 =>
+ array (
+ ),
+ 17 => -1,
+ 18 => -1,
+ 19 => -1,
+ 20 =>
+ array (
+ 'reserved' => '/^(cd|cp|rm|echo|printf|exit|cut|join|comm|fmt|grep|egrep|fgrep|sed|awk|yes|false|true|test|expr|tee|basename|dirname|pathchk|pwd|stty|tty|env|printenv|id|logname|whoami|groups|users|who|date|uname|hostname|chroot|nice|nohup|sleep|factor|seq|getopt|getopts|options|shift)$/',
+ 'flowcontrol' => '/^(if|fi|then|else|elif|case|esac|while|done|for|in|function|until|do|select|time|read|set)$/',
+ ),
+ 21 =>
+ array (
+ ),
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ ),
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 =>
+ array (
+ ),
+ 13 =>
+ array (
+ ),
+ 14 =>
+ array (
+ ),
+ 15 =>
+ array (
+ ),
+ 16 => -1,
+ 17 => -1,
+ 18 => -1,
+ 19 =>
+ array (
+ 'reserved' => '/^(cd|cp|rm|echo|printf|exit|cut|join|comm|fmt|grep|egrep|fgrep|sed|awk|yes|false|true|test|expr|tee|basename|dirname|pathchk|pwd|stty|tty|env|printenv|id|logname|whoami|groups|users|who|date|uname|hostname|chroot|nice|nohup|sleep|factor|seq|getopt|getopts|options|shift)$/',
+ 'flowcontrol' => '/^(if|fi|then|else|elif|case|esac|while|done|for|in|function|until|do|select|time|read|set)$/',
+ ),
+ 20 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 5 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 6 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 9 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ 18 => NULL,
+ 19 => NULL,
+ 20 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 9 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 10 => NULL,
+ 11 =>
+ array (
+ 1 => 'string',
+ 2 => 'code',
+ ),
+ 12 => NULL,
+ 13 => NULL,
+ 14 => NULL,
+ 15 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 16 => NULL,
+ 17 => NULL,
+ 18 => NULL,
+ 19 => NULL,
+ 20 => NULL,
+ 21 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ 1 => 'special',
+ 2 => 'string',
+ ),
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 =>
+ array (
+ 1 => 'reserved',
+ 2 => 'special',
+ ),
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ 6 => 'string',
+ 8 => 'quotes',
+ ),
+ 9 =>
+ array (
+ 1 => 'quotes',
+ 2 => 'quotes',
+ 3 => 'string',
+ 5 => 'quotes',
+ ),
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ 14 =>
+ array (
+ 1 => 'brackets',
+ 2 => 'var',
+ 3 => 'brackets',
+ ),
+ 15 => NULL,
+ 16 => NULL,
+ 17 => NULL,
+ 18 => NULL,
+ 19 => NULL,
+ 20 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => true,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => true,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => true,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => true,
+ 6 => true,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'flowcontrol' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/SQL.php b/library/Text_Highlighter/Text/Highlighter/SQL.php
new file mode 100644
index 000000000..824864033
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/SQL.php
@@ -0,0 +1,419 @@
+<?php
+/**
+ * Auto-generated class. SQL syntax highlighting
+ *
+ * Based on SQL-99
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : sql.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. SQL syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_SQL extends Text_Highlighter
+{
+ var $_language = 'sql';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_SQL($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)`)|((?i)\\/\\*)|((?i)(#|--\\s).*)|((?i)[a-z_]\\w*)|((?i)")|((?i)\\()|((?i)\')|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)/',
+ 0 => '//',
+ 1 => '//',
+ 2 => '/((?i)\\\\.)/',
+ 3 => '/((?i)`)|((?i)\\/\\*)|((?i)(#|--\\s).*)|((?i)[a-z_]\\w*)|((?i)")|((?i)\\()|((?i)\')|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\d+l?|\\b0l?\\b)|((?i)0[xX][\\da-f]+l?)/',
+ 4 => '/((?i)\\\\.)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 5,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 1,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 5,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ ),
+ 4 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'comment',
+ 2 => '',
+ 3 => '',
+ 4 => 'quotes',
+ 5 => 'brackets',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ ),
+ 3 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'comment',
+ 2 => '',
+ 3 => '',
+ 4 => 'quotes',
+ 5 => 'brackets',
+ 6 => 'quotes',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ),
+ 4 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'identifier',
+ 1 => 'comment',
+ 2 => 'comment',
+ 3 => 'identifier',
+ 4 => 'string',
+ 5 => 'code',
+ 6 => 'string',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 'special',
+ ),
+ 3 =>
+ array (
+ 0 => 'identifier',
+ 1 => 'comment',
+ 2 => 'comment',
+ 3 => 'identifier',
+ 4 => 'string',
+ 5 => 'code',
+ 6 => 'string',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'number',
+ 10 => 'number',
+ ),
+ 4 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)`/',
+ 1 => '/(?i)\\*\\//',
+ 2 => '/(?i)"/',
+ 3 => '/(?i)\\)/',
+ 4 => '/(?i)\'/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ 3 => -1,
+ 4 => 2,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => -1,
+ 3 => -1,
+ 4 => 2,
+ 5 => 3,
+ 6 => 4,
+ 7 => -1,
+ 8 => -1,
+ 9 => -1,
+ 10 => -1,
+ ),
+ 4 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ 'reserved' => '/^((?i)absolute|action|add|admin|after|aggregate|alias|all|allocate|alter|and|any|are|array|as|asc|assertion|at|authorization|before|begin|binary|bit|blob|boolean|both|breadth|by|call|cascade|cascaded|case|cast|catalog|char|character|check|class|clob|close|collate|collation|column|commit|completion|connect|connection|constraint|constraints|constructor|continue|corresponding|create|cross|cube|current|current_date|current_path|current_role|current_time|current_timestamp|current_user|cursor|cycle|data|date|day|deallocate|dec|decimal|declare|default|deferrable|deferred|delete|depth|deref|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disconnect|distinct|domain|double|drop|dynamic|each|else|end|end-exec|equals|escape|every|except|exception|exec|execute|external|false|fetch|first|float|for|foreign|found|free|from|full|function|general|get|global|go|goto|grant|group|grouping|having|host|hour|identity|ignore|immediate|in|indicator|initialize|initially|inner|inout|input|insert|int|integer|intersect|interval|into|is|isolation|iterate|join|key|language|large|last|lateral|leading|left|less|level|like|limit|local|localtime|localtimestamp|locator|map|match|minute|modifies|modify|module|month|names|national|natural|nchar|nclob|new|next|no|none|not|null|numeric|object|of|off|old|on|only|open|operation|option|or|order|ordinality|out|outer|output|pad|parameter|parameters|partial|path|postfix|precision|prefix|preorder|prepare|preserve|primary|prior|privileges|procedure|public|read|reads|real|recursive|ref|references|referencing|relative|restrict|result|return|returns|revoke|right|role|rollback|rollup|routine|row|rows|savepoint|schema|scope|scroll|search|second|section|select|sequence|session|session_user|set|sets|size|smallint|some|space|specific|specifictype|sql|sqlexception|sqlstate|sqlwarning|start|state|statement|static|structure|system_user|table|temporary|terminate|than|then|time|timestamp|timezone_hour|timezone_minute|to|trailing|transaction|translation|treat|trigger|true|under|union|unique|unknown|unnest|update|usage|user|using|value|values|varchar|variable|varying|view|when|whenever|where|with|without|work|write|year|zone)$/',
+ 'keyword' => '/^((?i)abs|ada|asensitive|assignment|asymmetric|atomic|avg|between|bitvar|bit_length|c|called|cardinality|catalog_name|chain|character_length|character_set_catalog|character_set_name|character_set_schema|char_length|checked|class_origin|coalesce|cobol|collation_catalog|collation_name|collation_schema|column_name|command_function|command_function_code|committed|condition_number|connection_name|constraint_catalog|constraint_name|constraint_schema|contains|convert|count|cursor_name|datetime_interval_code|datetime_interval_precision|defined|definer|dispatch|dynamic_function|dynamic_function_code|existing|exists|extract|final|fortran|g|generated|granted|hierarchy|hold|implementation|infix|insensitive|instance|instantiable|invoker|k|key_member|key_type|length|lower|m|max|message_length|message_octet_length|message_text|method|min|mod|more|mumps|name|nullable|nullif|number|octet_length|options|overlaps|overlay|overriding|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|pascal|pli|position|repeatable|returned_length|returned_octet_length|returned_sqlstate|routine_catalog|routine_name|routine_schema|row_count|scale|schema_name|security|self|sensitive|serializable|server_name|similar|simple|source|specific_name|style|subclass_origin|sublist|substring|sum|symmetric|system|table_name|transactions_committed|transactions_rolled_back|transaction_active|transform|transforms|translate|trigger_catalog|trigger_name|trigger_schema|trim|type|uncommitted|unnamed|upper|user_defined_type_catalog|user_defined_type_name|user_defined_type_schema)$/',
+ ),
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ 'reserved' => '/^((?i)absolute|action|add|admin|after|aggregate|alias|all|allocate|alter|and|any|are|array|as|asc|assertion|at|authorization|before|begin|binary|bit|blob|boolean|both|breadth|by|call|cascade|cascaded|case|cast|catalog|char|character|check|class|clob|close|collate|collation|column|commit|completion|connect|connection|constraint|constraints|constructor|continue|corresponding|create|cross|cube|current|current_date|current_path|current_role|current_time|current_timestamp|current_user|cursor|cycle|data|date|day|deallocate|dec|decimal|declare|default|deferrable|deferred|delete|depth|deref|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disconnect|distinct|domain|double|drop|dynamic|each|else|end|end-exec|equals|escape|every|except|exception|exec|execute|external|false|fetch|first|float|for|foreign|found|free|from|full|function|general|get|global|go|goto|grant|group|grouping|having|host|hour|identity|ignore|immediate|in|indicator|initialize|initially|inner|inout|input|insert|int|integer|intersect|interval|into|is|isolation|iterate|join|key|language|large|last|lateral|leading|left|less|level|like|limit|local|localtime|localtimestamp|locator|map|match|minute|modifies|modify|module|month|names|national|natural|nchar|nclob|new|next|no|none|not|null|numeric|object|of|off|old|on|only|open|operation|option|or|order|ordinality|out|outer|output|pad|parameter|parameters|partial|path|postfix|precision|prefix|preorder|prepare|preserve|primary|prior|privileges|procedure|public|read|reads|real|recursive|ref|references|referencing|relative|restrict|result|return|returns|revoke|right|role|rollback|rollup|routine|row|rows|savepoint|schema|scope|scroll|search|second|section|select|sequence|session|session_user|set|sets|size|smallint|some|space|specific|specifictype|sql|sqlexception|sqlstate|sqlwarning|start|state|statement|static|structure|system_user|table|temporary|terminate|than|then|time|timestamp|timezone_hour|timezone_minute|to|trailing|transaction|translation|treat|trigger|true|under|union|unique|unknown|unnest|update|usage|user|using|value|values|varchar|variable|varying|view|when|whenever|where|with|without|work|write|year|zone)$/',
+ 'keyword' => '/^((?i)abs|ada|asensitive|assignment|asymmetric|atomic|avg|between|bitvar|bit_length|c|called|cardinality|catalog_name|chain|character_length|character_set_catalog|character_set_name|character_set_schema|char_length|checked|class_origin|coalesce|cobol|collation_catalog|collation_name|collation_schema|column_name|command_function|command_function_code|committed|condition_number|connection_name|constraint_catalog|constraint_name|constraint_schema|contains|convert|count|cursor_name|datetime_interval_code|datetime_interval_precision|defined|definer|dispatch|dynamic_function|dynamic_function_code|existing|exists|extract|final|fortran|g|generated|granted|hierarchy|hold|implementation|infix|insensitive|instance|instantiable|invoker|k|key_member|key_type|length|lower|m|max|message_length|message_octet_length|message_text|method|min|mod|more|mumps|name|nullable|nullif|number|octet_length|options|overlaps|overlay|overriding|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|pascal|pli|position|repeatable|returned_length|returned_octet_length|returned_sqlstate|routine_catalog|routine_name|routine_schema|row_count|scale|schema_name|security|self|sensitive|serializable|server_name|similar|simple|source|specific_name|style|subclass_origin|sublist|substring|sum|symmetric|system|table_name|transactions_committed|transactions_rolled_back|transaction_active|transform|transforms|translate|trigger_catalog|trigger_name|trigger_schema|trim|type|uncommitted|unnamed|upper|user_defined_type_catalog|user_defined_type_name|user_defined_type_schema)$/',
+ ),
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 =>
+ array (
+ ),
+ 10 =>
+ array (
+ ),
+ ),
+ 4 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ ),
+ 4 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ ),
+ 4 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'keyword' => 'var',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/Text/Highlighter/VBSCRIPT.php b/library/Text_Highlighter/Text/Highlighter/VBSCRIPT.php
new file mode 100644
index 000000000..31a7c7c9e
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/VBSCRIPT.php
@@ -0,0 +1,318 @@
+<?php
+/**
+ * Auto-generated class. VBSCRIPT syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: vbscript.xml
+ * @author Daniel Fruzynski <daniel-AT-poradnik-webmastera.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. VBSCRIPT syntax highlighting
+ *
+ * @author Daniel Fruzynski <daniel-AT-poradnik-webmastera.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_VBSCRIPT extends Text_Highlighter
+{
+ var $_language = 'vbscript';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_VBSCRIPT($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\()|((?i)")|((?i)\'|[Rr][Ee][Mm]\\b)|((?i)\\d*\\.?\\d+)|((?i)&H[0-9a-fA-F]+)|((?i)[a-z_]\\w*)/',
+ 0 => '/((?i)\\()|((?i)")|((?i)\'|[Rr][Ee][Mm]\\b)|((?i)\\d*\\.?\\d+)|((?i)&H[0-9a-fA-F]+)|((?i)[a-z_]\\w*)/',
+ 1 => '//',
+ 2 => '/((?i)((https?|ftp):\\/\\/[\\w\\?\\.\\-\\&=\\/%+]+)|(^|[\\s,!?])www\\.\\w+\\.\\w+[\\w\\?\\.\\&=\\/%+]*)|((?i)\\w+[\\.\\w\\-]+@(\\w+[\\.\\w\\-])+)|((?i)\\b(note|fixme):)|((?i)\\$\\w+:.+\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 3,
+ 1 => 1,
+ 2 => 1,
+ 3 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'quotes',
+ 2 => 'comment',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ ),
+ 0 =>
+ array (
+ 0 => 'brackets',
+ 1 => 'quotes',
+ 2 => 'comment',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'code',
+ 1 => 'string',
+ 2 => 'comment',
+ 3 => 'number',
+ 4 => 'number',
+ 5 => 'identifier',
+ ),
+ 0 =>
+ array (
+ 0 => 'code',
+ 1 => 'string',
+ 2 => 'comment',
+ 3 => 'number',
+ 4 => 'number',
+ 5 => 'identifier',
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 'url',
+ 1 => 'url',
+ 2 => 'inlinedoc',
+ 3 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\)/',
+ 1 => '/(?i)"/',
+ 2 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 'constants' => '/^((?i)vbblack|vbred|vbgreen|vbyellow|vbblue|vbmagenta|vbcyan|vbwhite|vbbinarycompare|vbtextcompare|vbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbokonly|vbokcancel|vbabortretryignore|vbyesnocancel|vbyesno|vbretrycancel|vbcritical|vbquestion|vbexclamation|vbinformation|vbdefaultbutton1|vbdefaultbutton2|vbdefaultbutton3|vbdefaultbutton4|vbapplicationmodal|vbsystemmodal|vbok|vbcancel|vbabort|vbretry|vbignore|vbyes|vbno|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|vbtab|vbverticaltab|vbusedefault|vbtrue|vbfalse|vbempty|vbnull|vbinteger|vblong|vbsingle|vbdouble|vbcurrency|vbdate|vbstring|vbobject|vberror|vbboolean|vbvariant|vbdataobject|vbdecimal|vbbyte|vbarray)$/',
+ 'functions' => '/^((?i)abs|array|asc|atn|cbool|cbyte|ccur|cdate|cdbl|chr|cint|clng|cos|createobject|csng|cstr|date|dateadd|datediff|datepart|dateserial|datevalue|day|escape|eval|exp|filter|formatcurrency|formatdatetime|formatnumber|formatpercent|getlocale|getobject|getref|hex|hour|inputbox|instr|instrrev|int|fix|isarray|isdate|isempty|isnull|isnumeric|isobject|join|lbound|lcase|left|len|loadpicture|log|ltrim|rtrim|trim|mid|minute|month|monthname|msgbox|now|oct|replace|rgb|right|rnd|round|scriptengine|scriptenginebuildversion|scriptenginemajorversion|scriptengineminorversion|second|setlocale|sgn|sin|space|split|sqr|strcomp|string|strreverse|tan|time|timer|timeserial|timevalue|typename|ubound|ucase|unescape|vartype|weekday|weekdayname|year)$/',
+ 'builtin' => '/^((?i)debug|err|match|regexp)$/',
+ 'reserved' => '/^((?i)empty|false|nothing|null|true|and|eqv|imp|is|mod|not|or|xor|call|class|end|const|public|private|dim|do|while|until|exit|loop|erase|execute|executeglobal|for|each|in|to|step|next|function|default|if|then|else|elseif|on|error|resume|goto|option|explicit|property|get|let|set|randomize|redim|preserve|select|case|stop|sub|wend|with)$/',
+ ),
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 'constants' => '/^((?i)vbblack|vbred|vbgreen|vbyellow|vbblue|vbmagenta|vbcyan|vbwhite|vbbinarycompare|vbtextcompare|vbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbokonly|vbokcancel|vbabortretryignore|vbyesnocancel|vbyesno|vbretrycancel|vbcritical|vbquestion|vbexclamation|vbinformation|vbdefaultbutton1|vbdefaultbutton2|vbdefaultbutton3|vbdefaultbutton4|vbapplicationmodal|vbsystemmodal|vbok|vbcancel|vbabort|vbretry|vbignore|vbyes|vbno|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|vbtab|vbverticaltab|vbusedefault|vbtrue|vbfalse|vbempty|vbnull|vbinteger|vblong|vbsingle|vbdouble|vbcurrency|vbdate|vbstring|vbobject|vberror|vbboolean|vbvariant|vbdataobject|vbdecimal|vbbyte|vbarray)$/',
+ 'functions' => '/^((?i)abs|array|asc|atn|cbool|cbyte|ccur|cdate|cdbl|chr|cint|clng|cos|createobject|csng|cstr|date|dateadd|datediff|datepart|dateserial|datevalue|day|escape|eval|exp|filter|formatcurrency|formatdatetime|formatnumber|formatpercent|getlocale|getobject|getref|hex|hour|inputbox|instr|instrrev|int|fix|isarray|isdate|isempty|isnull|isnumeric|isobject|join|lbound|lcase|left|len|loadpicture|log|ltrim|rtrim|trim|mid|minute|month|monthname|msgbox|now|oct|replace|rgb|right|rnd|round|scriptengine|scriptenginebuildversion|scriptenginemajorversion|scriptengineminorversion|second|setlocale|sgn|sin|space|split|sqr|strcomp|string|strreverse|tan|time|timer|timeserial|timevalue|typename|ubound|ucase|unescape|vartype|weekday|weekdayname|year)$/',
+ 'builtin' => '/^((?i)debug|err|match|regexp)$/',
+ 'reserved' => '/^((?i)empty|false|nothing|null|true|and|eqv|imp|is|mod|not|or|xor|call|class|end|const|public|private|dim|do|while|until|exit|loop|erase|execute|executeglobal|for|each|in|to|step|next|function|default|if|then|else|elseif|on|error|resume|goto|option|explicit|property|get|let|set|randomize|redim|preserve|select|case|stop|sub|wend|with)$/',
+ ),
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ ),
+ 3 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'constants' => 'builtin',
+ 'functions' => 'builtin',
+ 'builtin' => 'builtin',
+ 'reserved' => 'reserved',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+}
diff --git a/library/Text_Highlighter/Text/Highlighter/XML.php b/library/Text_Highlighter/Text/Highlighter/XML.php
new file mode 100644
index 000000000..2d85db5fd
--- /dev/null
+++ b/library/Text_Highlighter/Text/Highlighter/XML.php
@@ -0,0 +1,263 @@
+<?php
+/**
+ * Auto-generated class. XML syntax highlighting
+ *
+ * PHP version 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @link http://pear.php.net/package/Text_Highlighter
+ * @category Text
+ * @package Text_Highlighter
+ * @version generated from: : xml.xml,v 1.1 2007/06/03 02:35:28 ssttoo Exp
+ * @author Andrey Demenev <demenev@gmail.com>
+ *
+ */
+
+/**
+ * @ignore
+ */
+
+require_once 'Text/Highlighter.php';
+
+/**
+ * Auto-generated class. XML syntax highlighting
+ *
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_XML extends Text_Highlighter
+{
+ var $_language = 'xml';
+
+ /**
+ * PHP4 Compatible Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function Text_Highlighter_XML($options=array())
+ {
+ $this->__construct($options);
+ }
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)\\<\\!\\[CDATA\\[)|((?i)\\<!--)|((?i)\\<[\\?\\/]?)|((?i)(&|%)[\\w\\-\\.]+;)/',
+ 0 => '//',
+ 1 => '//',
+ 2 => '/((?i)(?<=[\\<\\/?])[\\w\\-\\:]+)|((?i)[\\w\\-\\:]+)|((?i)")/',
+ 3 => '/((?i)(&|%)[\\w\\-\\.]+;)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 1,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'comment',
+ 2 => 'brackets',
+ 3 => '',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => '',
+ 1 => '',
+ 2 => 'quotes',
+ ),
+ 3 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'comment',
+ 1 => 'comment',
+ 2 => 'code',
+ 3 => 'special',
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => 'reserved',
+ 1 => 'var',
+ 2 => 'string',
+ ),
+ 3 =>
+ array (
+ 0 => 'special',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)\\]\\]\\>/',
+ 1 => '/(?i)--\\>/',
+ 2 => '/(?i)[\\/\\?]?\\>/',
+ 3 => '/(?i)"/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => 3,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ ),
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 => -1,
+ ),
+ 3 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+} \ No newline at end of file
diff --git a/library/Text_Highlighter/abap.xml b/library/Text_Highlighter/abap.xml
new file mode 100644
index 000000000..06d26e507
--- /dev/null
+++ b/library/Text_Highlighter/abap.xml
@@ -0,0 +1,802 @@
+<?xml version="1.0"?>
+<!-- $Id: abap.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="abap" case = "no">
+
+ <authors>
+ <author name="Stoyan Stefanov" email ="ssttoo@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+ <region name="comment" start="^\*|&quot;" end="/$/m" innerClass="comment">
+ <contains all="no"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'" />
+
+ <block name="identifier" match="[a-zA-Z_]\w*" innerClass="identifier" contained="yes"/>
+
+ <block name="hexinteger" match="0[xX][\da-f]+" innerClass="number" contained="yes"/>
+
+ <block name="integer" match="\d\d*|\b0\b" innerClass="number" contained="yes"/>
+
+ <block name="octinteger" match="0[0-7]+" innerClass="number" contained="yes"/>
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number" contained="yes"/>
+
+
+ <block name="identifier" match="[a-z_\-]\w*" innerClass="identifier" case="no"/>
+
+ <keywords name="sy" inherits="identifier" innerClass="reserved">
+ <keyword match="SCREEN-NAME"/>
+ <keyword match="SCREEN-GROUP1"/>
+ <keyword match="SCREEN-GROUP2"/>
+ <keyword match="SCREEN-GROUP3"/>
+ <keyword match="SCREEN-GROUP4"/>
+ <keyword match="SCREEN-REQUIRED"/>
+ <keyword match="SCREEN-INPUT"/>
+ <keyword match="SCREEN-OUTPUT"/>
+ <keyword match="SCREEN-INTENSIFIED"/>
+ <keyword match="SCREEN-INVISIBLE"/>
+ <keyword match="SCREEN-LENGTH"/>
+ <keyword match="SCREEN-ACTIVE"/>
+ <keyword match="SY-INDEX"/>
+ <keyword match="SY-PAGNO"/>
+ <keyword match="SY-TABIX"/>
+ <keyword match="SY-TFILL"/>
+ <keyword match="SY-TLOPC"/>
+ <keyword match="SY-TMAXL"/>
+ <keyword match="SY-TOCCU"/>
+ <keyword match="SY-TTABC"/>
+ <keyword match="SY-TSTIS"/>
+ <keyword match="SY-TTABI"/>
+ <keyword match="SY-DBCNT"/>
+ <keyword match="SY-FDPOS"/>
+ <keyword match="SY-COLNO"/>
+ <keyword match="SY-LINCT"/>
+ <keyword match="SY-LINNO"/>
+ <keyword match="SY-LINSZ"/>
+ <keyword match="SY-PAGCT"/>
+ <keyword match="SY-MACOL"/>
+ <keyword match="SY-MAROW"/>
+ <keyword match="SY-TLENG"/>
+ <keyword match="SY-SFOFF"/>
+ <keyword match="SY-WILLI"/>
+ <keyword match="SY-LILLI"/>
+ <keyword match="SY-SUBRC"/>
+ <keyword match="SY-FLENG"/>
+ <keyword match="SY-CUCOL"/>
+ <keyword match="SY-CUROW"/>
+ <keyword match="SY-LSIND"/>
+ <keyword match="SY-LISTI"/>
+ <keyword match="SY-STEPL"/>
+ <keyword match="SY-TPAGI"/>
+ <keyword match="SY-WINX1"/>
+ <keyword match="SY-WINY1"/>
+ <keyword match="SY-WINX2"/>
+ <keyword match="SY-WINY2"/>
+ <keyword match="SY-WINCO"/>
+ <keyword match="SY-WINRO"/>
+ <keyword match="SY-WINDI"/>
+ <keyword match="SY-SROWS"/>
+ <keyword match="SY-SCOLS"/>
+ <keyword match="SY-LOOPC"/>
+ <keyword match="SY-FOLEN"/>
+ <keyword match="SY-FODEC"/>
+ <keyword match="SY-TZONE"/>
+ <keyword match="SY-DAYST"/>
+ <keyword match="SY-FTYPE"/>
+ <keyword match="SY-APPLI"/>
+ <keyword match="SY-FDAYW"/>
+ <keyword match="SY-CCURS"/>
+ <keyword match="SY-CCURT"/>
+ <keyword match="SY-DEBUG"/>
+ <keyword match="SY-CTYPE"/>
+ <keyword match="SY-INPUT"/>
+ <keyword match="SY-LANGU"/>
+ <keyword match="SY-MODNO"/>
+ <keyword match="SY-BATCH"/>
+ <keyword match="SY-BINPT"/>
+ <keyword match="SY-CALLD"/>
+ <keyword match="SY-DYNNR"/>
+ <keyword match="SY-DYNGR"/>
+ <keyword match="SY-NEWPA"/>
+ <keyword match="SY-PRI40"/>
+ <keyword match="SY-RSTRT"/>
+ <keyword match="SY-WTITL"/>
+ <keyword match="SY-CPAGE"/>
+ <keyword match="SY-DBNAM"/>
+ <keyword match="SY-MANDT"/>
+ <keyword match="SY-PREFX"/>
+ <keyword match="SY-FMKEY"/>
+ <keyword match="SY-PEXPI"/>
+ <keyword match="SY-PRINI"/>
+ <keyword match="SY-PRIMM"/>
+ <keyword match="SY-PRREL"/>
+ <keyword match="SY-PLAYO"/>
+ <keyword match="SY-PRBIG"/>
+ <keyword match="SY-PLAYP"/>
+ <keyword match="SY-PRNEW"/>
+ <keyword match="SY-PRLOG"/>
+ <keyword match="SY-PDEST"/>
+ <keyword match="SY-PLIST"/>
+ <keyword match="SY-PAUTH"/>
+ <keyword match="SY-PRDSN"/>
+ <keyword match="SY-PNWPA"/>
+ <keyword match="SY-CALLR"/>
+ <keyword match="SY-REPI2"/>
+ <keyword match="SY-RTITL"/>
+ <keyword match="SY-PRREC"/>
+ <keyword match="SY-PRTXT"/>
+ <keyword match="SY-PRABT"/>
+ <keyword match="SY-LPASS"/>
+ <keyword match="SY-NRPAG"/>
+ <keyword match="SY-PAART"/>
+ <keyword match="SY-PRCOP"/>
+ <keyword match="SY-BATZS"/>
+ <keyword match="SY-BSPLD"/>
+ <keyword match="SY-BREP4"/>
+ <keyword match="SY-BATZO"/>
+ <keyword match="SY-BATZD"/>
+ <keyword match="SY-BATZW"/>
+ <keyword match="SY-BATZM"/>
+ <keyword match="SY-CTABL"/>
+ <keyword match="SY-DBSYS"/>
+ <keyword match="SY-DCSYS"/>
+ <keyword match="SY-MACDB"/>
+ <keyword match="SY-SYSID"/>
+ <keyword match="SY-OPSYS"/>
+ <keyword match="SY-PFKEY"/>
+ <keyword match="SY-SAPRL"/>
+ <keyword match="SY-TCODE"/>
+ <keyword match="SY-UCOMM"/>
+ <keyword match="SY-CFWAE"/>
+ <keyword match="SY-CHWAE"/>
+ <keyword match="SY-SPONO"/>
+ <keyword match="SY-SPONR"/>
+ <keyword match="SY-WAERS"/>
+ <keyword match="SY-CDATE"/>
+ <keyword match="SY-DATUM"/>
+ <keyword match="SY-SLSET"/>
+ <keyword match="SY-SUBTY"/>
+ <keyword match="SY-SUBCS"/>
+ <keyword match="SY-GROUP"/>
+ <keyword match="SY-FFILE"/>
+ <keyword match="SY-UZEIT"/>
+ <keyword match="SY-DSNAM"/>
+ <keyword match="SY-REPID"/>
+ <keyword match="SY-TABID"/>
+ <keyword match="SY-TFDSN"/>
+ <keyword match="SY-UNAME"/>
+ <keyword match="SY-LSTAT"/>
+ <keyword match="SY-ABCDE"/>
+ <keyword match="SY-MARKY"/>
+ <keyword match="SY-SFNAM"/>
+ <keyword match="SY-TNAME"/>
+ <keyword match="SY-MSGLI"/>
+ <keyword match="SY-TITLE"/>
+ <keyword match="SY-ENTRY"/>
+ <keyword match="SY-LISEL"/>
+ <keyword match="SY-ULINE"/>
+ <keyword match="SY-XCODE"/>
+ <keyword match="SY-CPROG"/>
+ <keyword match="SY-XPROG"/>
+ <keyword match="SY-XFORM"/>
+ <keyword match="SY-LDBPG"/>
+ <keyword match="SY-TVAR0"/>
+ <keyword match="SY-TVAR1"/>
+ <keyword match="SY-TVAR2"/>
+ <keyword match="SY-TVAR3"/>
+ <keyword match="SY-TVAR4"/>
+ <keyword match="SY-TVAR5"/>
+ <keyword match="SY-TVAR6"/>
+ <keyword match="SY-TVAR7"/>
+ <keyword match="SY-TVAR8"/>
+ <keyword match="SY-TVAR9"/>
+ <keyword match="SY-MSGID"/>
+ <keyword match="SY-MSGTY"/>
+ <keyword match="SY-MSGNO"/>
+ <keyword match="SY-MSGV1"/>
+ <keyword match="SY-MSGV2"/>
+ <keyword match="SY-MSGV3"/>
+ <keyword match="SY-MSGV4"/>
+ <keyword match="SY-ONCOM"/>
+ <keyword match="SY-VLINE"/>
+ <keyword match="SY-WINSL"/>
+ <keyword match="SY-STACO"/>
+ <keyword match="SY-STARO"/>
+ <keyword match="SY-DATAR"/>
+ <keyword match="SY-HOST"/>
+ <keyword match="SY-LOCDB"/>
+ <keyword match="SY-LOCOP"/>
+ <keyword match="SY-DATLO"/>
+ <keyword match="SY-TIMLO"/>
+ <keyword match="SY-ZONLO"/>
+ <keyword match="SYST-INDEX"/>
+ <keyword match="SYST-PAGNO"/>
+ <keyword match="SYST-TABIX"/>
+ <keyword match="SYST-TFILL"/>
+ <keyword match="SYST-TLOPC"/>
+ <keyword match="SYST-TMAXL"/>
+ <keyword match="SYST-TOCCU"/>
+ <keyword match="SYST-TTABC"/>
+ <keyword match="SYST-TSTIS"/>
+ <keyword match="SYST-TTABI"/>
+ <keyword match="SYST-DBCNT"/>
+ <keyword match="SYST-FDPOS"/>
+ <keyword match="SYST-COLNO"/>
+ <keyword match="SYST-LINCT"/>
+ <keyword match="SYST-LINNO"/>
+ <keyword match="SYST-LINSZ"/>
+ <keyword match="SYST-PAGCT"/>
+ <keyword match="SYST-MACOL"/>
+ <keyword match="SYST-MAROW"/>
+ <keyword match="SYST-TLENG"/>
+ <keyword match="SYST-SFOFF"/>
+ <keyword match="SYST-WILLI"/>
+ <keyword match="SYST-LILLI"/>
+ <keyword match="SYST-SUBRC"/>
+ <keyword match="SYST-FLENG"/>
+ <keyword match="SYST-CUCOL"/>
+ <keyword match="SYST-CUROW"/>
+ <keyword match="SYST-LSIND"/>
+ <keyword match="SYST-LISTI"/>
+ <keyword match="SYST-STEPL"/>
+ <keyword match="SYST-TPAGI"/>
+ <keyword match="SYST-WINX1"/>
+ <keyword match="SYST-WINY1"/>
+ <keyword match="SYST-WINX2"/>
+ <keyword match="SYST-WINY2"/>
+ <keyword match="SYST-WINCO"/>
+ <keyword match="SYST-WINRO"/>
+ <keyword match="SYST-WINDI"/>
+ <keyword match="SYST-SROWS"/>
+ <keyword match="SYST-SCOLS"/>
+ <keyword match="SYST-LOOPC"/>
+ <keyword match="SYST-FOLEN"/>
+ <keyword match="SYST-FODEC"/>
+ <keyword match="SYST-TZONE"/>
+ <keyword match="SYST-DAYST"/>
+ <keyword match="SYST-FTYPE"/>
+ <keyword match="SYST-APPLI"/>
+ <keyword match="SYST-FDAYW"/>
+ <keyword match="SYST-CCURS"/>
+ <keyword match="SYST-CCURT"/>
+ <keyword match="SYST-DEBUG"/>
+ <keyword match="SYST-CTYPE"/>
+ <keyword match="SYST-INPUT"/>
+ <keyword match="SYST-LANGU"/>
+ <keyword match="SYST-MODNO"/>
+ <keyword match="SYST-BATCH"/>
+ <keyword match="SYST-BINPT"/>
+ <keyword match="SYST-CALLD"/>
+ <keyword match="SYST-DYNNR"/>
+ <keyword match="SYST-DYNGR"/>
+ <keyword match="SYST-NEWPA"/>
+ <keyword match="SYST-PRI40"/>
+ <keyword match="SYST-RSTRT"/>
+ <keyword match="SYST-WTITL"/>
+ <keyword match="SYST-CPAGE"/>
+ <keyword match="SYST-DBNAM"/>
+ <keyword match="SYST-MANDT"/>
+ <keyword match="SYST-PREFX"/>
+ <keyword match="SYST-FMKEY"/>
+ <keyword match="SYST-PEXPI"/>
+ <keyword match="SYST-PRINI"/>
+ <keyword match="SYST-PRIMM"/>
+ <keyword match="SYST-PRREL"/>
+ <keyword match="SYST-PLAYO"/>
+ <keyword match="SYST-PRBIG"/>
+ <keyword match="SYST-PLAYP"/>
+ <keyword match="SYST-PRNEW"/>
+ <keyword match="SYST-PRLOG"/>
+ <keyword match="SYST-PDEST"/>
+ <keyword match="SYST-PLIST"/>
+ <keyword match="SYST-PAUTH"/>
+ <keyword match="SYST-PRDSN"/>
+ <keyword match="SYST-PNWPA"/>
+ <keyword match="SYST-CALLR"/>
+ <keyword match="SYST-REPI2"/>
+ <keyword match="SYST-RTITL"/>
+ <keyword match="SYST-PRREC"/>
+ <keyword match="SYST-PRTXT"/>
+ <keyword match="SYST-PRABT"/>
+ <keyword match="SYST-LPASS"/>
+ <keyword match="SYST-NRPAG"/>
+ <keyword match="SYST-PAART"/>
+ <keyword match="SYST-PRCOP"/>
+ <keyword match="SYST-BATZS"/>
+ <keyword match="SYST-BSPLD"/>
+ <keyword match="SYST-BREP4"/>
+ <keyword match="SYST-BATZO"/>
+ <keyword match="SYST-BATZD"/>
+ <keyword match="SYST-BATZW"/>
+ <keyword match="SYST-BATZM"/>
+ <keyword match="SYST-CTABL"/>
+ <keyword match="SYST-DBSYS"/>
+ <keyword match="SYST-DCSYS"/>
+ <keyword match="SYST-MACDB"/>
+ <keyword match="SYST-SYSID"/>
+ <keyword match="SYST-OPSYS"/>
+ <keyword match="SYST-PFKEY"/>
+ <keyword match="SYST-SAPRL"/>
+ <keyword match="SYST-TCODE"/>
+ <keyword match="SYST-UCOMM"/>
+ <keyword match="SYST-CFWAE"/>
+ <keyword match="SYST-CHWAE"/>
+ <keyword match="SYST-SPONO"/>
+ <keyword match="SYST-SPONR"/>
+ <keyword match="SYST-WAERS"/>
+ <keyword match="SYST-CDATE"/>
+ <keyword match="SYST-DATUM"/>
+ <keyword match="SYST-SLSET"/>
+ <keyword match="SYST-SUBTY"/>
+ <keyword match="SYST-SUBCS"/>
+ <keyword match="SYST-GROUP"/>
+ <keyword match="SYST-FFILE"/>
+ <keyword match="SYST-UZEIT"/>
+ <keyword match="SYST-DSNAM"/>
+ <keyword match="SYST-REPID"/>
+ <keyword match="SYST-TABID"/>
+ <keyword match="SYST-TFDSN"/>
+ <keyword match="SYST-UNAME"/>
+ <keyword match="SYST-LSTAT"/>
+ <keyword match="SYST-ABCDE"/>
+ <keyword match="SYST-MARKY"/>
+ <keyword match="SYST-SFNAM"/>
+ <keyword match="SYST-TNAME"/>
+ <keyword match="SYST-MSGLI"/>
+ <keyword match="SYST-TITLE"/>
+ <keyword match="SYST-ENTRY"/>
+ <keyword match="SYST-LISEL"/>
+ <keyword match="SYST-ULINE"/>
+ <keyword match="SYST-XCODE"/>
+ <keyword match="SYST-CPROG"/>
+ <keyword match="SYST-XPROG"/>
+ <keyword match="SYST-XFORM"/>
+ <keyword match="SYST-LDBPG"/>
+ <keyword match="SYST-TVAR0"/>
+ <keyword match="SYST-TVAR1"/>
+ <keyword match="SYST-TVAR2"/>
+ <keyword match="SYST-TVAR3"/>
+ <keyword match="SYST-TVAR4"/>
+ <keyword match="SYST-TVAR5"/>
+ <keyword match="SYST-TVAR6"/>
+ <keyword match="SYST-TVAR7"/>
+ <keyword match="SYST-TVAR8"/>
+ <keyword match="SYST-TVAR9"/>
+ <keyword match="SYST-MSGID"/>
+ <keyword match="SYST-MSGTY"/>
+ <keyword match="SYST-MSGNO"/>
+ <keyword match="SYST-MSGV1"/>
+ <keyword match="SYST-MSGV2"/>
+ <keyword match="SYST-MSGV3"/>
+ <keyword match="SYST-MSGV4"/>
+ <keyword match="SYST-ONCOM"/>
+ <keyword match="SYST-VLINE"/>
+ <keyword match="SYST-WINSL"/>
+ <keyword match="SYST-STACO"/>
+ <keyword match="SYST-STARO"/>
+ <keyword match="SYST-DATAR"/>
+ <keyword match="SYST-HOST"/>
+ <keyword match="SYST-LOCDB"/>
+ <keyword match="SYST-LOCOP"/>
+ <keyword match="SYST-DATLO"/>
+ <keyword match="SYST-TIMLO"/>
+ <keyword match="SYST-ZONLO"/>
+ </keywords>
+
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved">
+ <keyword match="ABS"/>
+ <keyword match="ACOS"/>
+ <keyword match="ADD"/>
+ <keyword match="ADD-CORRESPONDING"/>
+ <keyword match="ADJACENT"/>
+ <keyword match="AFTER"/>
+ <keyword match="ALIASES"/>
+ <keyword match="ALL"/>
+ <keyword match="ANALYZER"/>
+ <keyword match="AND"/>
+ <keyword match="ANY"/>
+ <keyword match="APPEND"/>
+ <keyword match="AS"/>
+ <keyword match="ASCENDING"/>
+ <keyword match="ASIN"/>
+ <keyword match="ASSIGN"/>
+ <keyword match="ASSIGNED"/>
+ <keyword match="ASSIGNING"/>
+ <keyword match="AT"/>
+ <keyword match="ATAN"/>
+ <keyword match="AUTHORITY-CHECK"/>
+ <keyword match="AVG"/>
+ <keyword match="BACK"/>
+ <keyword match="BEFORE"/>
+ <keyword match="BEGIN"/>
+ <keyword match="BINARY"/>
+ <keyword match="BIT"/>
+ <keyword match="BIT-AND"/>
+ <keyword match="BIT-NOT"/>
+ <keyword match="BIT-OR"/>
+ <keyword match="BIT-XOR"/>
+ <keyword match="BLANK"/>
+ <keyword match="BLOCK"/>
+ <keyword match="BREAK-POINT"/>
+ <keyword match="BUFFER"/>
+ <keyword match="BY"/>
+ <keyword match="C"/>
+ <keyword match="CALL"/>
+ <keyword match="CASE"/>
+ <keyword match="CATCH"/>
+ <keyword match="CEIL"/>
+ <keyword match="CENTERED"/>
+ <keyword match="CHAIN"/>
+ <keyword match="CHANGE"/>
+ <keyword match="CHANGING"/>
+ <keyword match="CHECK"/>
+ <keyword match="CHECKBOX"/>
+ <keyword match="CLASS"/>
+ <keyword match="CLASS-DATA"/>
+ <keyword match="CLASS-EVENTS"/>
+ <keyword match="CLASS-METHODS"/>
+ <keyword match="CLASS-POOL"/>
+ <keyword match="CLEAR"/>
+ <keyword match="CLIENT"/>
+ <keyword match="CLOSE"/>
+ <keyword match="CNT"/>
+ <keyword match="CODE"/>
+ <keyword match="COLLECT"/>
+ <keyword match="COLOR"/>
+ <keyword match="COMMENT"/>
+ <keyword match="COMMIT"/>
+ <keyword match="COMMUNICATION"/>
+ <keyword match="COMPUTE"/>
+ <keyword match="CONCATENATE"/>
+ <keyword match="CONDENSE"/>
+ <keyword match="CONSTANTS"/>
+ <keyword match="CONTEXT"/>
+ <keyword match="CONTEXTS"/>
+ <keyword match="CONTINUE"/>
+ <keyword match="CONTROL"/>
+ <keyword match="CONTROLS"/>
+ <keyword match="CONVERT"/>
+ <keyword match="COPY"/>
+ <keyword match="CORRESPONDING"/>
+ <keyword match="COS"/>
+ <keyword match="COSH"/>
+ <keyword match="COUNT"/>
+ <keyword match="COUNTRY"/>
+ <keyword match="CREATE"/>
+ <keyword match="CURRENCY"/>
+ <keyword match="CURSOR"/>
+ <keyword match="CUSTOMER-FUNCTION"/>
+ <keyword match="DATA"/>
+ <keyword match="DATABASE"/>
+ <keyword match="DATASET"/>
+ <keyword match="DELETE"/>
+ <keyword match="DECIMALS"/>
+ <keyword match="DEFAULT"/>
+ <keyword match="DEFINE"/>
+ <keyword match="DELETE"/>
+ <keyword match="DEMAND"/>
+ <keyword match="DESCENDING"/>
+ <keyword match="DESCRIBE"/>
+ <keyword match="DIALOG"/>
+ <keyword match="DISTINCT"/>
+ <keyword match="DIV"/>
+ <keyword match="DIVIDE"/>
+ <keyword match="DIVIDE-CORRESPONDING"/>
+ <keyword match="DO"/>
+ <keyword match="DUPLICATES"/>
+ <keyword match="DYNPRO"/>
+ <keyword match="EDIT"/>
+ <keyword match="EDITOR-CALL"/>
+ <keyword match="ELSE"/>
+ <keyword match="ELSEIF"/>
+ <keyword match="END"/>
+ <keyword match="END-OF-DEFINITION"/>
+ <keyword match="END-OF-PAGE"/>
+ <keyword match="END-OF-SELECTION"/>
+ <keyword match="ENDAT"/>
+ <keyword match="ENDCASE"/>
+ <keyword match="ENDCATCH"/>
+ <keyword match="ENDCHAIN"/>
+ <keyword match="ENDCLASS"/>
+ <keyword match="ENDDO"/>
+ <keyword match="ENDEXEC"/>
+ <keyword match="ENDFORM"/>
+ <keyword match="ENDFUNCTION"/>
+ <keyword match="ENDIF"/>
+ <keyword match="ENDINTERFACE"/>
+ <keyword match="ENDLOOP"/>
+ <keyword match="ENDMETHOD"/>
+ <keyword match="ENDMODULE"/>
+ <keyword match="ENDON"/>
+ <keyword match="ENDPROVIDE"/>
+ <keyword match="ENDSELECT"/>
+ <keyword match="ENDWHILE"/>
+ <keyword match="ENTRIES"/>
+ <keyword match="EVENTS"/>
+ <keyword match="EXEC"/>
+ <keyword match="EXIT"/>
+ <keyword match="EXIT-COMMAND"/>
+ <keyword match="EXP"/>
+ <keyword match="EXPONENT"/>
+ <keyword match="EXPORT"/>
+ <keyword match="EXPORTING"/>
+ <keyword match="EXCEPTIONS"/>
+ <keyword match="EXTENDED"/>
+ <keyword match="EXTRACT"/>
+ <keyword match="FETCH"/>
+ <keyword match="FIELD"/>
+ <keyword match="FIELD-GROUPS"/>
+ <keyword match="FIELD-SYMBOLS"/>
+ <keyword match="FIELDS"/>
+ <keyword match="FLOOR"/>
+ <keyword match="FOR"/>
+ <keyword match="FORM"/>
+ <keyword match="FORMAT"/>
+ <keyword match="FRAC"/>
+ <keyword match="FRAME"/>
+ <keyword match="FREE"/>
+ <keyword match="FROM"/>
+ <keyword match="FUNCTION"/>
+ <keyword match="FUNCTION-POOL"/>
+ <keyword match="GENERATE"/>
+ <keyword match="GET"/>
+ <keyword match="GROUP"/>
+ <keyword match="HASHED"/>
+ <keyword match="HEADER"/>
+ <keyword match="HELP-ID"/>
+ <keyword match="HELP-REQUEST"/>
+ <keyword match="HIDE"/>
+ <keyword match="HOTSPOT"/>
+ <keyword match="ICON"/>
+ <keyword match="ID"/>
+ <keyword match="IF"/>
+ <keyword match="IMPORT"/>
+ <keyword match="IMPORTING"/>
+ <keyword match="INCLUDE"/>
+ <keyword match="INDEX"/>
+ <keyword match="INFOTYPES"/>
+ <keyword match="INITIALIZATION"/>
+ <keyword match="INNER"/>
+ <keyword match="INPUT"/>
+ <keyword match="INSERT"/>
+ <keyword match="INTENSIFIED"/>
+ <keyword match="INTERFACE"/>
+ <keyword match="INTERFACE-POOL"/>
+ <keyword match="INTERFACES"/>
+ <keyword match="INTO"/>
+ <keyword match="INVERSE"/>
+ <keyword match="JOIN"/>
+ <keyword match="KEY"/>
+ <keyword match="LANGUAGE"/>
+ <keyword match="LAST"/>
+ <keyword match="LEAVE"/>
+ <keyword match="LEFT"/>
+ <keyword match="LEFT-JUSTIFIED"/>
+ <keyword match="LIKE"/>
+ <keyword match="LINE"/>
+ <keyword match="LINE-COUNT"/>
+ <keyword match="LINE-SELECTION"/>
+ <keyword match="LINE-SIZE"/>
+ <keyword match="LINES"/>
+ <keyword match="LIST-PROCESSING"/>
+ <keyword match="LOAD"/>
+ <keyword match="LOAD-OF-PROGRAM"/>
+ <keyword match="LOCAL"/>
+ <keyword match="LOCALE"/>
+ <keyword match="LOG"/>
+ <keyword match="LOG10"/>
+ <keyword match="LOOP"/>
+ <keyword match="M"/>
+ <keyword match="MARGIN"/>
+ <keyword match="MASK"/>
+ <keyword match="MATCHCODE"/>
+ <keyword match="MAX"/>
+ <keyword match="MEMORY"/>
+ <keyword match="MESSAGE"/>
+ <keyword match="MESSAGE-ID"/>
+ <keyword match="MESSAGES"/>
+ <keyword match="METHOD"/>
+ <keyword match="METHODS"/>
+ <keyword match="MIN"/>
+ <keyword match="MOD"/>
+ <keyword match="MODE"/>
+ <keyword match="MODIF"/>
+ <keyword match="MODIFY"/>
+ <keyword match="MODULE"/>
+ <keyword match="MOVE"/>
+ <keyword match="MOVE-CORRESPONDING"/>
+ <keyword match="MULTIPLY"/>
+ <keyword match="MULTIPLY-CORRESPONDING"/>
+ <keyword match="NEW"/>
+ <keyword match="NEW-LINE"/>
+ <keyword match="NEW-PAGE"/>
+ <keyword match="NEXT"/>
+ <keyword match="NO"/>
+ <keyword match="NO-GAP"/>
+ <keyword match="NO-GAPS"/>
+ <keyword match="NO-HEADING"/>
+ <keyword match="NO-SCROLLING"/>
+ <keyword match="NO-SIGN"/>
+ <keyword match="NO-TITLE"/>
+ <keyword match="NO-ZERO"/>
+ <keyword match="NODES"/>
+ <keyword match="NON-UNIQUE"/>
+ <keyword match="O"/>
+ <keyword match="OBJECT"/>
+ <keyword match="OBLIGATORY"/>
+ <keyword match="OCCURS"/>
+ <keyword match="OF"/>
+ <keyword match="OFF"/>
+ <keyword match="ON"/>
+ <keyword match="OPEN"/>
+ <keyword match="OR"/>
+ <keyword match="ORDER"/>
+ <keyword match="OTHERS"/>
+ <keyword match="OUTER"/>
+ <keyword match="OUTPUT"/>
+ <keyword match="OVERLAY"/>
+ <keyword match="PACK"/>
+ <keyword match="PAGE"/>
+ <keyword match="PARAMETER"/>
+ <keyword match="PARAMETERS"/>
+ <keyword match="PERFORM"/>
+ <keyword match="PF-STATUS"/>
+ <keyword match="POSITION"/>
+ <keyword match="PRINT"/>
+ <keyword match="PRINT-CONTROL"/>
+ <keyword match="PRIVATE"/>
+ <keyword match="PROCESS"/>
+ <keyword match="PROGRAM"/>
+ <keyword match="PROPERTY"/>
+ <keyword match="PROTECTED"/>
+ <keyword match="PROVIDE"/>
+ <keyword match="PUBLIC"/>
+ <keyword match="PUT"/>
+ <keyword match="RADIOBUTTON"/>
+ <keyword match="RAISE"/>
+ <keyword match="RAISING"/>
+ <keyword match="RANGE"/>
+ <keyword match="RANGES"/>
+ <keyword match="READ"/>
+ <keyword match="RECEIVE"/>
+ <keyword match="REFRESH"/>
+ <keyword match="REJECT"/>
+ <keyword match="REPLACE"/>
+ <keyword match="REPORT"/>
+ <keyword match="REQUESTED"/>
+ <keyword match="RESERVE"/>
+ <keyword match="RESET"/>
+ <keyword match="RIGHT-JUSTIFIED"/>
+ <keyword match="ROLLBACK"/>
+ <keyword match="ROUND"/>
+ <keyword match="ROWS"/>
+ <keyword match="RTTI"/>
+ <keyword match="RUN"/>
+ <keyword match="SCAN"/>
+ <keyword match="SCREEN"/>
+ <keyword match="SEARCH"/>
+ <keyword match="SEPARATED"/>
+ <keyword match="SCROLL"/>
+ <keyword match="SCROLL-BOUNDARY"/>
+ <keyword match="SEARCH"/>
+ <keyword match="SELECT"/>
+ <keyword match="SELECT-OPTIONS"/>
+ <keyword match="SELECTION-SCREEN"/>
+ <keyword match="SELECTION-TABLE"/>
+ <keyword match="SET"/>
+ <keyword match="SHARED"/>
+ <keyword match="SHIFT"/>
+ <keyword match="SIGN"/>
+ <keyword match="SIN"/>
+ <keyword match="SINGLE"/>
+ <keyword match="SINH"/>
+ <keyword match="SIZE"/>
+ <keyword match="SKIP"/>
+ <keyword match="SORT"/>
+ <keyword match="SORTED"/>
+ <keyword match="SPLIT"/>
+ <keyword match="SQL"/>
+ <keyword match="SQRT"/>
+ <keyword match="STAMP"/>
+ <keyword match="STANDARD"/>
+ <keyword match="START-OF-SELECTION"/>
+ <keyword match="STATICS"/>
+ <keyword match="STOP"/>
+ <keyword match="STRING"/>
+ <keyword match="STRLEN"/>
+ <keyword match="STRUCTURE"/>
+ <keyword match="SUBMIT"/>
+ <keyword match="SUBTRACT"/>
+ <keyword match="SUBTRACT-CORRESPONDING"/>
+ <keyword match="SUM"/>
+ <keyword match="SUPPLY"/>
+ <keyword match="SUPPRESS"/>
+ <keyword match="SYMBOL"/>
+ <keyword match="SYNTAX-CHECK"/>
+ <keyword match="SYNTAX-TRACE"/>
+ <keyword match="SYSTEM-CALL"/>
+ <keyword match="SYSTEM-EXCEPTIONS"/>
+ <keyword match="TABLE"/>
+ <keyword match="TABLE_LINE"/>
+ <keyword match="TABLES"/>
+ <keyword match="TAN"/>
+ <keyword match="TANH"/>
+ <keyword match="TEXT"/>
+ <keyword match="TEXTPOOL"/>
+ <keyword match="TIME"/>
+ <keyword match="TIMES"/>
+ <keyword match="TITLE"/>
+ <keyword match="TITLEBAR"/>
+ <keyword match="TO"/>
+ <keyword match="TOP-OF-PAGE"/>
+ <keyword match="TRANSACTION"/>
+ <keyword match="TRANSFER"/>
+ <keyword match="TRANSLATE"/>
+ <keyword match="TRANSPORTING"/>
+ <keyword match="TRUNC"/>
+ <keyword match="TYPE"/>
+ <keyword match="TYPE-POOL"/>
+ <keyword match="TYPE-POOLS"/>
+ <keyword match="TYPES"/>
+ <keyword match="ULINE"/>
+ <keyword match="UNDER"/>
+ <keyword match="UNIQUE"/>
+ <keyword match="UNIT"/>
+ <keyword match="UNPACK"/>
+ <keyword match="UP"/>
+ <keyword match="UPDATE"/>
+ <keyword match="USER-COMMAND"/>
+ <keyword match="USING"/>
+ <keyword match="VALUE"/>
+ <keyword match="VALUE-REQUEST"/>
+ <keyword match="VALUES"/>
+ <keyword match="VARY"/>
+ <keyword match="WHEN"/>
+ <keyword match="WHERE"/>
+ <keyword match="WHILE"/>
+ <keyword match="WINDOW"/>
+ <keyword match="WITH"/>
+ <keyword match="WITH-TITLE"/>
+ <keyword match="WORK"/>
+ <keyword match="WRITE"/>
+ <keyword match="X"/>
+ <keyword match="XSTRING"/>
+ <keyword match="Z"/>
+ <keyword match="ZONE"/>
+ </keywords>
+
+
+ <keywords name="constants" inherits="identifier" innerClass="reserved">
+ <keyword match="INITIAL"/>
+ <keyword match="NULL"/>
+ <keyword match="SPACE"/>
+ <keyword match="COL_BACKGROUND"/>
+ <keyword match="COL_HEADING"/>
+ <keyword match="COL_NORMAL"/>
+ <keyword match="COL_TOTAL"/>
+ <keyword match="COL_KEY"/>
+ <keyword match="COL_POSITIVE"/>
+ <keyword match="COL_NEGATIVE"/>
+ <keyword match="COL_GROUP"/>
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/avrc.xml b/library/Text_Highlighter/avrc.xml
new file mode 100644
index 000000000..dec571e13
--- /dev/null
+++ b/library/Text_Highlighter/avrc.xml
@@ -0,0 +1,316 @@
+<?xml version="1.0"?>
+<!-- $Id: avrc.xml,v 1.1 2008-07-31 23:05:38 ssttoo Exp $ -->
+
+<highlight lang="AVRC" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+ <comment>
+ C/C++ highlighter specific to Atmel AVR microcontrollers
+ </comment>
+
+ <default innerClass="code" />
+
+ <block name="escaped" match="\\" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ </block>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;"/>
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <block name="hexinteger" match="\b0[xX][\da-f]+" innerClass="number"/>
+ <block name="integer" match="\b\d\d*|\b0\b" innerClass="number"/>
+ <block name="octinteger" match="\b0[0-7]+" innerClass="number"/>
+ <block name="float" match="\b(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+
+ <region name="strincl" delimClass="quotes" innerClass="string" start="&lt;" end="&gt;">
+ <onlyin region="include" />
+ </region>
+
+ <!-- <block name="preprocessor" match="^#[azAZ_]\w*" innerClass="prepro"/> -->
+ <region name="include" innerClass="prepro" start="/^[ \t]*#include/m" end="/(?&lt;!\\)$/m">
+ <contains region="strdouble"/>
+ <contains region="strincl"/>
+ </region>
+
+ <region name="preprocessor" delimClass="prepro" innerClass="code" start="/^[ \t]*#[ \t]*[a-z]+/mi" end="/(?&lt;!\\)$/m">
+ <contains region="comment"/>
+ <contains region="mlcomment"/>
+ <contains region="strdouble"/>
+ <contains region="brackets"/>
+ <contains region="block"/>
+ <contains block="identifier"/>
+ <contains block="integer"/>
+ <contains block="hexinteger"/>
+ <contains block="octinteger"/>
+ <contains block="float"/>
+
+ </region>
+
+ <block name="number" match="\d*\.?\d+" innerClass="number"/>
+
+
+ <region name="mlcomment" innerClass="mlcomment" start="\/\*" end="\*\/" >
+ <contains block="cvstag"/>
+ </region>
+
+ <block name="cvstag" match="\$\w+\s*:.+\$" innerClass="inlinedoc">
+
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <region name="comment" start="\/\/.+" end="/$/m" innerClass="comment" delimClass="comment">
+ <contains block="cvstag"/>
+ </region>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="yes">
+ <keyword match="and" />
+ <keyword match="and_eq" />
+ <keyword match="asm" />
+
+ <keyword match="bitand" />
+ <keyword match="bitor" />
+ <keyword match="break" />
+ <keyword match="case" />
+ <keyword match="catch" />
+ <keyword match="compl" />
+
+ <keyword match="const_cast" />
+ <keyword match="continue" />
+ <keyword match="default" />
+ <keyword match="delete" />
+ <keyword match="do" />
+ <keyword match="dynamic_cast" />
+
+ <keyword match="else" />
+ <keyword match="for" />
+ <keyword match="fortran" />
+ <keyword match="friend" />
+ <keyword match="goto" />
+ <keyword match="if" />
+
+ <keyword match="new" />
+ <keyword match="not" />
+ <keyword match="not_eq" />
+ <keyword match="operator" />
+ <keyword match="or" />
+ <keyword match="or_eq" />
+
+ <keyword match="private" />
+ <keyword match="protected" />
+ <keyword match="public" />
+ <keyword match="reinterpret_cast" />
+ <keyword match="return" />
+ <keyword match="sizeof" />
+
+ <keyword match="static_cast" />
+ <keyword match="switch" />
+ <keyword match="this" />
+ <keyword match="throw" />
+ <keyword match="try" />
+ <keyword match="typeid" />
+
+ <keyword match="using" />
+ <keyword match="while" />
+ <keyword match="xor" />
+ <keyword match="xor_eq" />
+
+ <keyword match="false" />
+ <keyword match="true" />
+ </keywords>
+
+ <keywords name="registers" inherits="identifier" innerClass="reserved" case="yes">
+ <keyword match="ACSR" />
+ <keyword match="ADCH" />
+ <keyword match="ADCL" />
+ <keyword match="ADCSRA" />
+ <keyword match="ADMUX" />
+ <keyword match="ASSR" />
+ <keyword match="DDRA" />
+ <keyword match="DDRB" />
+ <keyword match="DDRC" />
+ <keyword match="DDRD" />
+ <keyword match="DDRE" />
+ <keyword match="DDRF" />
+ <keyword match="DDRG" />
+ <keyword match="EEARH" />
+ <keyword match="EEARL" />
+ <keyword match="EECR" />
+ <keyword match="EEDR" />
+ <keyword match="EICRA" />
+ <keyword match="EICRB" />
+ <keyword match="EIFR" />
+ <keyword match="EIMSK" />
+ <keyword match="ETIFR" />
+ <keyword match="ETIMSK" />
+ <keyword match="GICR" />
+ <keyword match="GIFR" />
+ <keyword match="ICR1H" />
+ <keyword match="ICR1L" />
+ <keyword match="ICR3H" />
+ <keyword match="ICR3L" />
+ <keyword match="MCUCR" />
+ <keyword match="MCUCSR" />
+ <keyword match="OCDR" />
+ <keyword match="OCR0" />
+ <keyword match="OCR1AH" />
+ <keyword match="OCR1AL" />
+ <keyword match="OCR1BH" />
+ <keyword match="OCR1BL" />
+ <keyword match="OCR1CH" />
+ <keyword match="OCR1CL" />
+ <keyword match="OCR2" />
+ <keyword match="OCR3AH" />
+ <keyword match="OCR3AL" />
+ <keyword match="OCR3BH" />
+ <keyword match="OCR3BL" />
+ <keyword match="OCR3CH" />
+ <keyword match="OCR3CL" />
+ <keyword match="OSCCAL" />
+ <keyword match="PINA" />
+ <keyword match="PINB" />
+ <keyword match="PINC" />
+ <keyword match="PIND" />
+ <keyword match="PINE" />
+ <keyword match="PINF" />
+ <keyword match="PING" />
+ <keyword match="PORTA" />
+ <keyword match="PORTB" />
+ <keyword match="PORTC" />
+ <keyword match="PORTD" />
+ <keyword match="PORTE" />
+ <keyword match="PORTF" />
+ <keyword match="PORTG" />
+ <keyword match="RAMPZ" />
+ <keyword match="SFIOR" />
+ <keyword match="SPCR" />
+ <keyword match="SPDR" />
+ <keyword match="SPH" />
+ <keyword match="SPL" />
+ <keyword match="SPMCR" />
+ <keyword match="SPMCSR" />
+ <keyword match="SPSR" />
+ <keyword match="SREG" />
+ <keyword match="TCCR0" />
+ <keyword match="TCCR1A" />
+ <keyword match="TCCR1B" />
+ <keyword match="TCCR1C" />
+ <keyword match="TCCR2" />
+ <keyword match="TCCR3A" />
+ <keyword match="TCCR3B" />
+ <keyword match="TCCR3C" />
+ <keyword match="TCNT0" />
+ <keyword match="TCNT1H" />
+ <keyword match="TCNT1L" />
+ <keyword match="TCNT2" />
+ <keyword match="TCNT3H" />
+ <keyword match="TCNT3L" />
+ <keyword match="TIFR" />
+ <keyword match="TIMSK" />
+ <keyword match="TWAR" />
+ <keyword match="TWBR" />
+ <keyword match="TWCR" />
+ <keyword match="TWDR" />
+ <keyword match="TWSR" />
+ <keyword match="UBRR0H" />
+ <keyword match="UBRR0L" />
+ <keyword match="UBRR1H" />
+ <keyword match="UBRR1L" />
+ <keyword match="UBRRH" />
+ <keyword match="UBRRL" />
+ <keyword match="UCSR0A" />
+ <keyword match="UCSR0B" />
+ <keyword match="UCSR0C" />
+ <keyword match="UCSR1A" />
+ <keyword match="UCSR1B" />
+ <keyword match="UCSR1C" />
+ <keyword match="UCSRA" />
+ <keyword match="UCSRB" />
+ <keyword match="UCSRC" />
+ <keyword match="UDR" />
+ <keyword match="UDR0" />
+ <keyword match="UDR1" />
+ <keyword match="WDTCR" />
+ <keyword match="XDIV" />
+ <keyword match="XMCRA" />
+ <keyword match="XMCRB" />
+ </keywords>
+
+ <keywords name="types" inherits="identifier" innerClass="types" case="yes">
+
+ <keyword match="auto" />
+ <keyword match="bool" />
+ <keyword match="char" />
+ <keyword match="class" />
+ <keyword match="const" />
+ <keyword match="double" />
+
+ <keyword match="enum" />
+ <keyword match="explicit" />
+ <keyword match="export" />
+ <keyword match="extern" />
+ <keyword match="float" />
+ <keyword match="inline" />
+
+ <keyword match="int" />
+ <keyword match="long" />
+ <keyword match="mutable" />
+ <keyword match="namespace" />
+ <keyword match="register" />
+ <keyword match="short" />
+
+ <keyword match="signed" />
+ <keyword match="static" />
+ <keyword match="struct" />
+ <keyword match="template" />
+ <keyword match="typedef" />
+ <keyword match="typename" />
+
+ <keyword match="union" />
+ <keyword match="unsigned" />
+ <keyword match="virtual" />
+ <keyword match="void" />
+ <keyword match="volatile" />
+ <keyword match="wchar_t" />
+
+ </keywords>
+
+ <keywords name="Common Macros" inherits="identifier" innerClass="prepro" case="yes">
+ <keyword match="NULL" />
+ <keyword match="TRUE" />
+ <keyword match="FALSE" />
+ <keyword match="MAX" />
+
+ <keyword match="MIN" />
+ <keyword match="__LINE__" />
+ <keyword match="__DATA__" />
+ <keyword match="__FILE__" />
+ <keyword match="__TIME__" />
+ <keyword match="__STDC__" />
+
+ </keywords>
+
+
+ <!--
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="yes">
+ -->
+
+</highlight>
+
diff --git a/library/Text_Highlighter/cpp.xml b/library/Text_Highlighter/cpp.xml
new file mode 100644
index 000000000..2cbaa930f
--- /dev/null
+++ b/library/Text_Highlighter/cpp.xml
@@ -0,0 +1,201 @@
+<?xml version="1.0"?>
+<!-- $Id: cpp.xml,v 1.2 2008-07-31 23:06:30 ssttoo Exp $ -->
+
+<highlight lang="CPP" case="no">
+
+ <authors>
+ <author name="Aaron Kalin"/>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+ <comment>
+Thanks to Aaron Kalin for initial
+implementation of this highlighter
+ </comment>
+
+ <default innerClass="code" />
+
+ <block name="escaped" match="\\" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ </block>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;"/>
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <block name="hexinteger" match="\b0[xX][\da-f]+" innerClass="number"/>
+ <block name="integer" match="\b\d\d*|\b0\b" innerClass="number"/>
+ <block name="octinteger" match="\b0[0-7]+" innerClass="number"/>
+ <block name="float" match="\b(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+
+ <region name="strincl" delimClass="quotes" innerClass="string" start="&lt;" end="&gt;">
+ <onlyin region="include" />
+ </region>
+
+ <!-- <block name="preprocessor" match="^#[azAZ_]\w*" innerClass="prepro"/> -->
+ <region name="include" innerClass="prepro" start="/^[ \t]*#include/m" end="/(?&lt;!\\)$/m">
+ <contains region="strdouble"/>
+ <contains region="strincl"/>
+ </region>
+
+ <region name="preprocessor" delimClass="prepro" innerClass="code" start="/^[ \t]*#[ \t]*[a-z]+/mi" end="/(?&lt;!\\)$/m">
+ <contains region="comment"/>
+ <contains region="mlcomment"/>
+ <contains region="strdouble"/>
+ <contains region="brackets"/>
+ <contains region="block"/>
+ <contains block="identifier"/>
+ <contains block="integer"/>
+ <contains block="hexinteger"/>
+ <contains block="octinteger"/>
+ <contains block="float"/>
+
+ </region>
+
+ <block name="number" match="\d*\.?\d+" innerClass="number"/>
+
+
+ <region name="mlcomment" innerClass="mlcomment" start="\/\*" end="\*\/" >
+ <contains block="cvstag"/>
+ </region>
+
+ <block name="cvstag" match="\$\w+\s*:.+\$" innerClass="inlinedoc">
+
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <region name="comment" start="\/\/.+" end="/$/m" innerClass="comment" delimClass="comment">
+ <contains block="cvstag"/>
+ </region>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="yes">
+ <keyword match="and" />
+ <keyword match="and_eq" />
+ <keyword match="asm" />
+
+ <keyword match="bitand" />
+ <keyword match="bitor" />
+ <keyword match="break" />
+ <keyword match="case" />
+ <keyword match="catch" />
+ <keyword match="compl" />
+
+ <keyword match="const_cast" />
+ <keyword match="continue" />
+ <keyword match="default" />
+ <keyword match="delete" />
+ <keyword match="do" />
+ <keyword match="dynamic_cast" />
+
+ <keyword match="else" />
+ <keyword match="for" />
+ <keyword match="fortran" />
+ <keyword match="friend" />
+ <keyword match="goto" />
+ <keyword match="if" />
+
+ <keyword match="new" />
+ <keyword match="not" />
+ <keyword match="not_eq" />
+ <keyword match="operator" />
+ <keyword match="or" />
+ <keyword match="or_eq" />
+
+ <keyword match="private" />
+ <keyword match="protected" />
+ <keyword match="public" />
+ <keyword match="reinterpret_cast" />
+ <keyword match="return" />
+ <keyword match="sizeof" />
+
+ <keyword match="static_cast" />
+ <keyword match="switch" />
+ <keyword match="this" />
+ <keyword match="throw" />
+ <keyword match="try" />
+ <keyword match="typeid" />
+
+ <keyword match="using" />
+ <keyword match="while" />
+ <keyword match="xor" />
+ <keyword match="xor_eq" />
+
+ <keyword match="false" />
+ <keyword match="true" />
+ </keywords>
+
+ <keywords name="types" inherits="identifier" innerClass="types" case="yes">
+
+ <keyword match="auto" />
+ <keyword match="bool" />
+ <keyword match="char" />
+ <keyword match="class" />
+ <keyword match="const" />
+ <keyword match="double" />
+
+ <keyword match="enum" />
+ <keyword match="explicit" />
+ <keyword match="export" />
+ <keyword match="extern" />
+ <keyword match="float" />
+ <keyword match="inline" />
+
+ <keyword match="int" />
+ <keyword match="long" />
+ <keyword match="mutable" />
+ <keyword match="namespace" />
+ <keyword match="register" />
+ <keyword match="short" />
+
+ <keyword match="signed" />
+ <keyword match="static" />
+ <keyword match="struct" />
+ <keyword match="template" />
+ <keyword match="typedef" />
+ <keyword match="typename" />
+
+ <keyword match="union" />
+ <keyword match="unsigned" />
+ <keyword match="virtual" />
+ <keyword match="void" />
+ <keyword match="volatile" />
+ <keyword match="wchar_t" />
+
+ </keywords>
+
+ <keywords name="Common Macros" inherits="identifier" innerClass="prepro" case="yes">
+ <keyword match="NULL" />
+ <keyword match="TRUE" />
+ <keyword match="FALSE" />
+ <keyword match="MAX" />
+
+ <keyword match="MIN" />
+ <keyword match="__LINE__" />
+ <keyword match="__DATA__" />
+ <keyword match="__FILE__" />
+ <keyword match="__TIME__" />
+ <keyword match="__STDC__" />
+
+ </keywords>
+
+
+ <!--
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="yes">
+ -->
+
+</highlight>
+
diff --git a/library/Text_Highlighter/css.xml b/library/Text_Highlighter/css.xml
new file mode 100644
index 000000000..2473bcfb7
--- /dev/null
+++ b/library/Text_Highlighter/css.xml
@@ -0,0 +1,368 @@
+<?xml version="1.0"?>
+<!-- $Id: css.xml,v 1.2 2008-01-01 23:45:07 ssttoo Exp $ -->
+
+<highlight lang="css" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+
+ <region name="mlcomment" innerClass="comment" start="\/\*" end="\*\/" >
+
+ </region>
+
+
+ <block name="atrule" match="(@[a-z\d]+)"
+ innerClass="var" never-contained="yes"/>
+
+ <region name="property" start="[a-z][a-z\d\-]*\s*:" end="(?=;|\})"
+ innerClass="code" delimClass="reserved" contained="yes"/>
+
+ <block name="selector" match="(((\.|#)?[a-z]+[a-z\d\-]*(?![a-z\d\-]))|(\*))(?!\s*:\s*[\s\{])"
+ innerClass="identifier" >
+ </block>
+
+ <block name="pseudo" match=":[a-z][a-z\d\-]*"
+ innerClass="special" />
+
+ <block name="bescaped" match="\\[\\(\\)\\]"
+ innerClass="string" contained="yes"/>
+
+
+ <region name="paramselector" start="\[" end="\]" innerClass="code"
+ delimClass="brackets" >
+ <contains block="paramname" />
+ <not-contains block="identifier" />
+ <contains region="strdouble" />
+ <contains region="strsingle" />
+ </region>
+
+ <region name="block" start="\{" end="\}" innerClass="code"
+ delimClass="brackets" >
+ <contains region="block" />
+ <contains region="property" />
+ <contains block="selector" />
+ <contains region="mlcomment" />
+ </region>
+
+ <region name="brackets" start="\(" end="\)" innerClass="string"
+ delimClass="brackets" contained="yes">
+ <contains block="bescaped"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'" contained="yes"/>
+
+ <block name="escaped" match="\\\\|\\&quot;|\\'|\\`" innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ </block>
+
+ <block name="descaped" match="\\\\|\\&quot;|\\'|\\`|\\t|\\n|\\r" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ </block>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string"
+ start="&quot;" end="&quot;" contained="yes" />
+
+ <block name="measure" match="\d*\.?\d+(\%|em|ex|pc|pt|px|in|mm|cm)"
+ innerClass="number" contained="yes">
+ <onlyin region="property"/>
+ <partClass index="1" innerClass="string" />
+ </block>
+
+ <block name="number" match="\d*\.?\d+" innerClass="number" contained="yes" >
+ <onlyin region="property"/>
+ </block>
+
+ <block name="identifier" match="[a-z][a-z\d\-]*"
+ innerClass="code" contained="yes">
+ <onlyin region="property"/>
+ </block>
+
+ <block name="hexcolor" match="#([\da-f]{6}|[\da-f]{3})\b" innerClass="var" contained="yes">
+ <onlyin region="property"/>
+ </block>
+
+ <block name="paramname" match="[\w\-\:]+" innerClass="var" contained="yes">
+ <onlyin region="paramselector"/>
+ </block>
+
+ <keywords name="propertyValue" inherits="identifier" innerClass="string" case = "no">
+ <word name="left-side"/>
+ <keyword match="far-left"/>
+ <keyword match="left"/>
+ <keyword match="center-left"/>
+ <keyword match="center-right"/>
+ <keyword match="center"/>
+ <keyword match="far-right"/>
+ <keyword match="right-side"/>
+ <keyword match="right"/>
+ <keyword match="behind"/>
+ <keyword match="leftwards"/>
+ <keyword match="rightwards"/>
+ <keyword match="inherit"/>
+ <keyword match="scroll"/>
+ <keyword match="fixed"/>
+ <keyword match="transparent"/>
+ <keyword match="none"/>
+ <keyword match="repeat-x"/>
+ <keyword match="repeat-y"/>
+ <keyword match="repeat"/>
+ <keyword match="no-repeat"/>
+ <keyword match="collapse"/>
+ <keyword match="separate"/>
+ <keyword match="auto"/>
+ <keyword match="top"/>
+ <keyword match="bottom"/>
+ <keyword match="both"/>
+ <keyword match="open-quote"/>
+ <keyword match="close-quote"/>
+ <keyword match="no-open-quote"/>
+ <keyword match="no-close-quote"/>
+ <keyword match="crosshair"/>
+ <keyword match="default"/>
+ <keyword match="pointer"/>
+ <keyword match="move"/>
+ <keyword match="e-resize"/>
+ <keyword match="ne-resize"/>
+ <keyword match="nw-resize"/>
+ <keyword match="n-resize"/>
+ <keyword match="se-resize"/>
+ <keyword match="sw-resize"/>
+ <keyword match="s-resize"/>
+ <keyword match="text"/>
+ <keyword match="wait"/>
+ <keyword match="help"/>
+ <keyword match="ltr"/>
+ <keyword match="rtl"/>
+ <keyword match="inline"/>
+ <keyword match="block"/>
+ <keyword match="list-item"/>
+ <keyword match="run-in"/>
+ <keyword match="compact"/>
+ <keyword match="marker"/>
+ <keyword match="table"/>
+ <keyword match="inline-table"/>
+ <keyword match="table-row-group"/>
+ <keyword match="table-header-group"/>
+ <keyword match="table-footer-group"/>
+ <keyword match="table-row"/>
+ <keyword match="table-column-group"/>
+ <keyword match="table-column"/>
+ <keyword match="table-cell"/>
+ <keyword match="table-caption"/>
+ <keyword match="below"/>
+ <keyword match="level"/>
+ <keyword match="above"/>
+ <keyword match="higher"/>
+ <keyword match="lower"/>
+ <keyword match="show"/>
+ <keyword match="hide"/>
+ <keyword match="caption"/>
+ <keyword match="icon"/>
+ <keyword match="menu"/>
+ <keyword match="message-box"/>
+ <keyword match="small-caption"/>
+ <keyword match="status-bar"/>
+ <keyword match="normal"/>
+ <keyword match="wider"/>
+ <keyword match="narrower"/>
+ <keyword match="ultra-condensed"/>
+ <keyword match="extra-condensed"/>
+ <keyword match="condensed"/>
+ <keyword match="semi-condensed"/>
+ <keyword match="semi-expanded"/>
+ <keyword match="expanded"/>
+ <keyword match="extra-expanded"/>
+ <keyword match="ultra-expanded"/>
+ <keyword match="italic"/>
+ <keyword match="oblique"/>
+ <keyword match="small-caps"/>
+ <keyword match="bold"/>
+ <keyword match="bolder"/>
+ <keyword match="lighter"/>
+ <keyword match="inside"/>
+ <keyword match="outside"/>
+ <keyword match="disc"/>
+ <keyword match="circle"/>
+ <keyword match="square"/>
+ <keyword match="decimal"/>
+ <keyword match="decimal-leading-zero"/>
+ <keyword match="lower-roman"/>
+ <keyword match="upper-roman"/>
+ <keyword match="lower-greek"/>
+ <keyword match="lower-alpha"/>
+ <keyword match="lower-latin"/>
+ <keyword match="upper-alpha"/>
+ <keyword match="upper-latin"/>
+ <keyword match="hebrew"/>
+ <keyword match="armenian"/>
+ <keyword match="georgian"/>
+ <keyword match="cjk-ideographic"/>
+ <keyword match="hiragana"/>
+ <keyword match="katakana"/>
+ <keyword match="hiragana-iroha"/>
+ <keyword match="katakana-iroha"/>
+ <keyword match="crop"/>
+ <keyword match="cross"/>
+ <keyword match="invert"/>
+ <keyword match="visible"/>
+ <keyword match="hidden"/>
+ <keyword match="always"/>
+ <keyword match="avoid"/>
+ <keyword match="x-low"/>
+ <keyword match="low"/>
+ <keyword match="medium"/>
+ <keyword match="high"/>
+ <keyword match="x-high"/>
+ <keyword match="mix?"/>
+ <keyword match="repeat?"/>
+ <keyword match="static"/>
+ <keyword match="relative"/>
+ <keyword match="absolute"/>
+ <keyword match="portrait"/>
+ <keyword match="landscape"/>
+ <keyword match="spell-out"/>
+ <keyword match="once"/>
+ <keyword match="digits"/>
+ <keyword match="continuous"/>
+ <keyword match="code"/>
+ <keyword match="x-slow"/>
+ <keyword match="slow"/>
+ <keyword match="fast"/>
+ <keyword match="x-fast"/>
+ <keyword match="faster"/>
+ <keyword match="slower"/>
+ <keyword match="justify"/>
+ <keyword match="underline"/>
+ <keyword match="overline"/>
+ <keyword match="line-through"/>
+ <keyword match="blink"/>
+ <keyword match="capitalize"/>
+ <keyword match="uppercase"/>
+ <keyword match="lowercase"/>
+ <keyword match="embed"/>
+ <keyword match="bidi-override"/>
+ <keyword match="baseline"/>
+ <keyword match="sub"/>
+ <keyword match="super"/>
+ <keyword match="text-top"/>
+ <keyword match="middle"/>
+ <keyword match="text-bottom"/>
+ <keyword match="silent"/>
+ <keyword match="x-soft"/>
+ <keyword match="soft"/>
+ <keyword match="loud"/>
+ <keyword match="x-loud"/>
+ <keyword match="pre"/>
+ <keyword match="nowrap"/>
+ <keyword match="serif"/>
+ <keyword match="sans-serif"/>
+ <keyword match="cursive"/>
+ <keyword match="fantasy"/>
+ <keyword match="monospace"/>
+ <keyword match="empty"/>
+ <keyword match="string"/>
+ <keyword match="strict"/>
+ <keyword match="loose"/>
+ <keyword match="char"/>
+ <keyword match="true"/>
+ <keyword match="false"/>
+ <keyword match="dotted"/>
+ <keyword match="dashed"/>
+ <keyword match="solid"/>
+ <keyword match="double"/>
+ <keyword match="groove"/>
+ <keyword match="ridge"/>
+ <keyword match="inset"/>
+ <keyword match="outset"/>
+ <keyword match="larger"/>
+ <keyword match="smaller"/>
+ <keyword match="xx-small"/>
+ <keyword match="x-small"/>
+ <keyword match="small"/>
+ <keyword match="large"/>
+ <keyword match="x-large"/>
+ <keyword match="xx-large"/>
+ <keyword match="all"/>
+ <keyword match="newspaper"/>
+ <keyword match="distribute"/>
+ <keyword match="distribute-all-lines"/>
+ <keyword match="distribute-center-last"/>
+ <keyword match="inter-word"/>
+ <keyword match="inter-ideograph"/>
+ <keyword match="inter-cluster"/>
+ <keyword match="kashida"/>
+ <keyword match="ideograph-alpha"/>
+ <keyword match="ideograph-numeric"/>
+ <keyword match="ideograph-parenthesis"/>
+ <keyword match="ideograph-space"/>
+ <keyword match="keep-all"/>
+ <keyword match="break-all"/>
+ <keyword match="break-word"/>
+ <keyword match="lr-tb"/>
+ <keyword match="tb-rl"/>
+ <keyword match="thin"/>
+ <keyword match="thick"/>
+ <keyword match="inline-block"/>
+ <keyword match="w-resize"/>
+ <keyword match="hand"/>
+ <keyword match="distribute-letter"/>
+ <keyword match="distribute-space"/>
+ <keyword match="whitespace"/>
+ <keyword match="male"/>
+ <keyword match="female"/>
+ <keyword match="child"/>
+ </keywords>
+
+
+ <keywords name="namedcolor" inherits="identifier" innerClass="var" case = "no">
+ <keyword match="aqua"/>
+ <keyword match="black"/>
+ <keyword match="blue"/>
+ <keyword match="fuchsia"/>
+ <keyword match="gray"/>
+ <keyword match="green"/>
+ <keyword match="lime"/>
+ <keyword match="maroon"/>
+ <keyword match="navy"/>
+ <keyword match="olive"/>
+ <keyword match="purple"/>
+ <keyword match="red"/>
+ <keyword match="silver"/>
+ <keyword match="teal"/>
+ <keyword match="white"/>
+ <keyword match="yellow"/>
+ <keyword match="ActiveBorder"/>
+ <keyword match="ActiveCaption"/>
+ <keyword match="AppWorkspace"/>
+ <keyword match="Background"/>
+ <keyword match="ButtonFace"/>
+ <keyword match="ButtonHighlight"/>
+ <keyword match="ButtonShadow"/>
+ <keyword match="ButtonText"/>
+ <keyword match="CaptionText"/>
+ <keyword match="GrayText"/>
+ <keyword match="Highlight"/>
+ <keyword match="HighlightText"/>
+ <keyword match="InactiveBorder"/>
+ <keyword match="InactiveCaption"/>
+ <keyword match="InactiveCaptionText"/>
+ <keyword match="InfoBackground"/>
+ <keyword match="InfoText"/>
+ <keyword match="Menu"/>
+ <keyword match="MenuText"/>
+ <keyword match="Scrollbar"/>
+ <keyword match="ThreeDDarkShadow"/>
+ <keyword match="ThreeDFace"/>
+ <keyword match="ThreeDHighlight"/>
+ <keyword match="ThreeDLightShadow"/>
+ <keyword match="ThreeDShadow"/>
+ <keyword match="Window"/>
+ <keyword match="WindowFrame"/>
+ <keyword match="WindowText"/>
+ </keywords>
+</highlight>
diff --git a/library/Text_Highlighter/diff.xml b/library/Text_Highlighter/diff.xml
new file mode 100644
index 000000000..d088f9257
--- /dev/null
+++ b/library/Text_Highlighter/diff.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!-- $Id: diff.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="diff" case="yes">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="default" />
+
+ <block name="noNewLine" match="/^\\\sNo\snewline.+$/m" innerClass="special"/>
+
+ <block name="diffSeparator" match="/^\-\-\-$/m" innerClass="code"/>
+
+ <block name="diffCmdLine" match="/^(diff\s+\-|Only\s+|Index).*$/m" innerClass="var"/>
+ <block name="diffFiles" match="/^(\-\-\-|\+\+\+)\s.+$/m" innerClass="reserved"/>
+
+ <block name="contextOrg" match="/^\*.*$/m" innerClass="quotes"/>
+ <block name="contextNew" match="/^\+.*$/m" innerClass="string"/>
+ <block name="contextChg" match="/^!.*$/m" innerClass="inlinedoc"/>
+
+ <block name="defOrg" match="/^\&lt;\s.*$/m" innerClass="quotes"/>
+ <block name="defNew" match="/^\&gt;\s.*$/m" innerClass="string"/>
+ <block name="defChg" match="/^\d+(\,\d+)?[acd]\d+(,\d+)?$/m" innerClass="code"/>
+
+ <block name="uniOrg" match="/^\-.*$/m" innerClass="quotes"/>
+ <block name="uniNew" match="/^\+.*$/m" innerClass="string"/>
+ <block name="uniChg" match="/^@@.+@@$/m" innerClass="code"/>
+
+ <block name="normOrg" match="/^d\d+\s\d+$/m" innerClass="code"/>
+ <region name="normNew" start="/^a\d+\s\d+$/m" end="/(?=^[ad]\d+\s\d+)/m" innerClass="var" delimClass="code"/>
+
+ <region name="edNew" start="/^(\d+)(,\d+)?(a)$/m" end="/^(\.)$/m" innerClass="string" delimClass="code"/>
+ <region name="edChg" start="/^(\d+)(,\d+)?(c)$/m" end="/^(\.)$/m" innerClass="inlinedoc" delimClass="code"/>
+ <block name="edDel" match="/^(\d+)(,\d+)?(d)$/m" innerClass="code"/>
+
+ <region name="fedNew" start="/^a(\d+)(\s\d+)?$/m" end="/^(\.)$/m" innerClass="string" delimClass="code"/>
+ <region name="fedChg" start="/^c(\d+)(\s\d+)?$/m" end="/^(\.)$/m" innerClass="inlinedoc" delimClass="code"/>
+ <block name="fedDel" match="/^d(\d+)(\s\d+)?$/m"
+ innerClass="code"/>
+
+
+</highlight>
diff --git a/library/Text_Highlighter/dtd.xml b/library/Text_Highlighter/dtd.xml
new file mode 100644
index 000000000..18fa07db7
--- /dev/null
+++ b/library/Text_Highlighter/dtd.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<!-- $Id: dtd.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="dtd" case="yes">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+ <region name="comment" delimClass="comment" innerClass="comment"
+ start="\&lt;!--" end="--\&gt;">
+ </region>
+
+ <region name="redecl" start="\&lt;\!\[" end="\]\]\&gt;" delimClass="brackets"
+ innerClass="code" never-contained="yes">
+ <contains all="yes" />
+ </region>
+
+ <region name="tag" start="\&lt;" end="\&gt;" delimClass="brackets"
+ innerClass="code" >
+ <contains all="yes" />
+ <onlyin region="redecl"/>
+ </region>
+
+ <region name="brackets" start="\(" end="\)" delimClass="brackets"
+ innerClass="code" contained="yes">
+ <onlyin region="tag"/>
+ <onlyin region="brackets"/>
+ <contains block="entity" />
+ <contains block="identifier" />
+ </region>
+
+ <region name="strsingle" start="'" end="'" delimClass="quotes"
+ innerClass="string" contained="yes">
+ <onlyin region="tag"/>
+ <contains block="entity" />
+ </region>
+
+ <region name="strdouble" start="&quot;" end="&quot;" delimClass="quotes"
+ innerClass="string" contained="yes">
+ <onlyin region="tag"/>
+ <contains block="entity" />
+ </region>
+
+ <block name="tagname" match="(?&lt;=\&lt;)!(ENTITY|ATTLIST|ELEMENT|NOTATION)\b"
+ innerClass="var" contained="yes">
+ <onlyin region="tag"/>
+ </block>
+
+ <block name="reserved" match="\s(#(IMPLIED|REQUIRED|FIXED))|CDATA|ENTITY|NOTATION|NMTOKENS?|PUBLIC|SYSTEM\b"
+ innerClass="reserved" contained="yes">
+ <onlyin region="tag"/>
+ </block>
+
+ <block name="pcdata" match="#PCDATA\b"
+ innerClass="reserved" contained="yes" />
+
+ <block name="entity" match="(\&amp;|\%)[\w\-\.]+;" innerClass="special" />
+
+ <block name="identifier" match="[a-z][a-z\d\-\,:]+"
+ innerClass="identifier" contained="yes" case="no"/>
+
+</highlight>
diff --git a/library/Text_Highlighter/generate b/library/Text_Highlighter/generate
new file mode 100644
index 000000000..4e22e82fd
--- /dev/null
+++ b/library/Text_Highlighter/generate
@@ -0,0 +1,171 @@
+#!@php_bin@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+/**
+ * Console highlighter class generator
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * 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 web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Text
+ * @package Text_Highlighter
+ * @author Andrey Demenev <demenev@gmail.com>
+ * @copyright 2004 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+require_once 'Text/Highlighter/Generator.php';
+require_once 'Console/Getopt.php';
+
+$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help'));
+
+if (PEAR::isError($options)) {
+ $message = str_replace('Console_Getopt: ','',$options->message);
+ usage($message);
+}
+
+$source = array();
+$dest = array();
+$dir = '';
+
+$expectp = false;
+$expectx = false;
+$unexpectedx = false;
+$unexpectedp = false;
+$si = $di = 0;
+
+foreach ($options[0] as $option) {
+ switch ($option[0]) {
+ case 'x':
+ case '--xml':
+ $source[$si] = $option[1];
+ if ($si) {
+ $di++;
+ }
+ $si++;
+ if ($expectp) {
+ $unexpectedx = true;
+ }
+ $expectp = true;
+ $expectx = false;
+ break;
+
+ case 'p':
+ case '--php':
+ if ($expectx) {
+ $unexpectedp = true;
+ }
+ $dest[$di] = $option[1];
+ $expectp = false;
+ $expectx = true;
+ break;
+
+ case 'd':
+ case '--dir':
+ $dir = $option[1];
+ break;
+
+ case 'h':
+ case '--help':
+ usage();
+ break;
+ }
+}
+
+
+if ($unexpectedx && !$dir) {
+ usage('Unexpected -x or --xml', STDERR);
+}
+
+if ($unexpectedp) {
+ usage('Unexpected -p or --php', STDERR);
+}
+
+$nsource = count($source);
+$ndest = count($dest);
+
+if (!$nsource && !$ndest) {
+ $source[]='php://stdin';
+ if (!$dir) {
+ $dest[]='php://stdout';
+ } else {
+ $dest[] = null;
+ }
+} elseif ($expectp && !$dir && $nsource > 1) {
+ usage('-x or --xml without following -p or --php', STDERR);
+} elseif ($nsource == 1 && !$ndest && !$dir) {
+ $dest[]='php://stdout';
+}
+
+if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
+ $dir .= DIRECTORY_SEPARATOR;
+}
+
+
+foreach ($source as $i => $xmlfile)
+{
+ $gen = new Text_Highlighter_Generator;
+ $gen->setInputFile($xmlfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+ $gen->generate();
+ if ($gen->hasErrors()) {
+ break;
+ }
+ if (isset($dest[$i])) {
+ $phpfile = $dest[$i];
+ } else {
+ $phpfile = $dir . $gen->language . '.php';
+ }
+ $gen->saveCode($phpfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+}
+if ($gen->hasErrors()) {
+ $errors = $gen->getErrors();
+ foreach ($errors as $error) {
+ fwrite (STDERR, $error . "\n");
+ }
+ exit(1);
+}
+
+function usage($message='', $file=STDOUT)
+{
+ $code = 0;
+ if ($message) {
+ $message .= "\n\n";
+ $code = 1;
+ }
+ $message .= <<<MSG
+Generates a highlighter class from XML source
+Usage:
+generate options
+
+Options:
+ -x filename, --xml=filename
+ source XML file. Multiple input files can be specified, in which
+ case each -x option must be followed by -p unless -d is specified
+ Defaults to stdin
+ -p filename, --php=filename
+ destination PHP file. Defaults to stdout. If specied multiple times,
+ each -p must follow -x
+ -d dirname, --dir=dirname
+ Default destination directory. File names will be taken from XML input
+ ("lang" attribute of <highlight> tag)
+ -h, --help
+ This help
+MSG;
+ fwrite ($file, $message);
+ exit($code);
+}
+?>
+
diff --git a/library/Text_Highlighter/generate.bat b/library/Text_Highlighter/generate.bat
new file mode 100644
index 000000000..3960486c1
--- /dev/null
+++ b/library/Text_Highlighter/generate.bat
@@ -0,0 +1,188 @@
+@echo off
+rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+
+rem Console highlighter class generator
+
+rem PHP versions 4 and 5
+
+rem LICENSE: This source file is subject to version 3.0 of the PHP license
+rem that is available through the world-wide-web at the following URI:
+rem http://www.php.net/license/3_0.txt. If you did not receive a copy of
+rem the PHP License and are unable to obtain it through the web, please
+rem send a note to license@php.net so we can mail you a copy immediately.
+
+rem @category Text
+rem @package Text_Highlighter
+rem @author Andrey Demenev <demenev@gmail.com>
+rem @copyright 2004 Andrey Demenev
+rem @license http://www.php.net/license/3_0.txt PHP License
+rem @version CVS: $Id: generate.bat,v 1.1 2007-06-03 02:35:28 ssttoo Exp $
+rem @link http://pear.php.net/package/Text_Highlighter
+
+set "MHL_PARAMS="
+:doshift
+set "MHL_PARAMS=%MHL_PARAMS% %1"
+shift
+if -%1- == -- GOTO noshift
+GOTO doshift
+:noshift
+@php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS%
+
+GOTO finish
+<?php
+ob_end_clean();
+
+if (!defined('STDOUT')) {
+ define('STDOUT', fopen('php://stdout', 'wb'));
+ define('STDERR', fopen('php://stderr', 'wb'));
+}
+require_once 'Text/Highlighter/Generator.php';
+require_once 'Console/Getopt.php';
+
+$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help'));
+
+if (PEAR::isError($options)) {
+ $message = str_replace('Console_Getopt: ','',$options->message);
+ usage($message);
+}
+
+$source = array();
+$dest = array();
+$dir = '';
+
+$expectp = false;
+$expectx = false;
+$unexpectedx = false;
+$unexpectedp = false;
+$si = $di = 0;
+
+foreach ($options[0] as $option) {
+ switch ($option[0]) {
+ case 'x':
+ case '--xml':
+ $source[$si] = $option[1];
+ if ($si) {
+ $di++;
+ }
+ $si++;
+ if ($expectp) {
+ $unexpectedx = true;
+ }
+ $expectp = true;
+ $expectx = false;
+ break;
+
+ case 'p':
+ case '--php':
+ if ($expectx) {
+ $unexpectedp = true;
+ }
+ $dest[$di] = $option[1];
+ $expectp = false;
+ $expectx = true;
+ break;
+
+ case 'd':
+ case '--dir':
+ $dir = $option[1];
+ break;
+
+ case 'h':
+ case '--help':
+ usage();
+ break;
+ }
+}
+
+
+if ($unexpectedx && !$dir) {
+ usage('Unexpected -x or --xml', STDERR);
+}
+
+if ($unexpectedp) {
+ usage('Unexpected -p or --php', STDERR);
+}
+
+$nsource = count($source);
+$ndest = count($dest);
+
+if (!$nsource && !$ndest) {
+ $source[]='php://stdin';
+ if (!$dir) {
+ $dest[]='php://stdout';
+ } else {
+ $dest[] = null;
+ }
+} elseif ($expectp && !$dir && $nsource > 1) {
+ usage('-x or --xml without following -p or --php', STDERR);
+} elseif ($nsource == 1 && !$ndest && !$dir) {
+ $dest[]='php://stdout';
+}
+
+if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
+ $dir .= DIRECTORY_SEPARATOR;
+}
+
+
+foreach ($source as $i => $xmlfile)
+{
+ $gen = new Text_Highlighter_Generator;
+ $gen->setInputFile($xmlfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+ $gen->generate();
+ if ($gen->hasErrors()) {
+ break;
+ }
+ if (isset($dest[$i])) {
+ $phpfile = $dest[$i];
+ } else {
+ $phpfile = $dir . $gen->language . '.php';
+ }
+ $gen->saveCode($phpfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+}
+if ($gen->hasErrors()) {
+ $errors = $gen->getErrors();
+ foreach ($errors as $error) {
+ fwrite (STDERR, $error . "\n");
+ }
+ exit(1);
+}
+
+exit(0);
+
+function usage($message='', $file=STDOUT)
+{
+ $code = 0;
+ if ($message) {
+ $message .= "\n\n";
+ $code = 1;
+ }
+ $message .= <<<MSG
+Generates a highlighter class from XML source
+Usage:
+generate options
+
+Options:
+ -x filename, --xml=filename
+ source XML file. Multiple input files can be specified, in which
+ case each -x option must be followed by -p unless -d is specified
+ Defaults to stdin
+ -p filename, --php=filename
+ destination PHP file. Defaults to stdout. If specied multiple times,
+ each -p must follow -x
+ -d dirname, --dir=dirname
+ Default destination directory. File names will be taken from XML input
+ ("lang" attribute of <highlight> tag)
+ -h, --help
+ This help
+MSG;
+ fwrite ($file, $message);
+ exit($code);
+}
+?>
+:finish
diff --git a/library/Text_Highlighter/html.xml b/library/Text_Highlighter/html.xml
new file mode 100644
index 000000000..58d51fc5b
--- /dev/null
+++ b/library/Text_Highlighter/html.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!-- $Id: html.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="html" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+ <region name="comment" delimClass="comment" innerClass="comment"
+ start="\&lt;!--" end="--\&gt;">
+ </region>
+
+ <region name="tag" delimClass="brackets" innerClass="code" start="\&lt;[\?\/]?" end="[\/\?]?\&gt;">
+ <contains block="tagname"/>
+ <contains region="param"/>
+ <contains block="paramname"/>
+ </region>
+
+ <block name="tagname" match="(?&lt;=[\&lt;\/?])[\w\-\:]+" innerClass="reserved" contained="yes"/>
+
+ <block name="paramname" match="[\w\-\:]+" innerClass="var" contained="yes"/>
+
+ <block name="entity" match="(&amp;)[\w\-\.]+;" innerClass="special" />
+
+ <region name="param" start="&quot;" end="&quot;" delimClass="quotes" innerClass="string" contained="yes">
+ <contains block="entity"/>
+ </region>
+
+</highlight>
diff --git a/library/Text_Highlighter/java.xml b/library/Text_Highlighter/java.xml
new file mode 100644
index 000000000..12052b5db
--- /dev/null
+++ b/library/Text_Highlighter/java.xml
@@ -0,0 +1,2824 @@
+<?xml version="1.0"?>
+<!-- $Id: java.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="java">
+
+ <authors>
+ <author name="Andrey Demenev" email ="demenev@gmail.com"/>
+ </authors>
+
+ <default innerClass="code" />
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+
+ <region name="mlcomment" innerClass="comment" start="\/\*" end="\*\/">
+ <contains block="javadoc"/>
+ <contains block="cvstag"/>
+ </region>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;" />
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'"/>
+
+ <block name="escaped" match="\\." innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ </block>
+
+ <block name="descaped" match="\\[\\&quot;'`tnr\$\{]" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ </block>
+
+
+ <region name="comment" start="\/\/" end="/$/m" innerClass="comment">
+ <contains block="cvstag"/>
+ </region>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" />
+
+ <block name="hexinteger" match="0[xX][\da-f]+" innerClass="number" />
+ <block name="integer" match="\d\d*|\b0\b" innerClass="number" />
+ <block name="octinteger" match="0[0-7]+" innerClass="number" />
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number" />
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" />
+
+ <block name="javadoc" match="\s@\w+\s" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="url" match="((https?|ftp):\/\/[\w\?\.\-\&amp;=\/%+]+)|(^|[\s,!?])www\.\w+\.\w+[\w\?\.\&amp;=\/%+]*" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="email" match="\w+[\.\w\-]+@(\w+[\.\w\-])+" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="note" match="\bnote:" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+
+ <block name="cvstag" match="\$\w+\s*:.*\$" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <keywords name="types" inherits="identifier" innerClass="types" case = "yes">
+ <keyword match="boolean" />
+ <keyword match="byte" />
+ <keyword match="char" />
+ <keyword match="const" />
+ <keyword match="double" />
+ <keyword match="final" />
+ <keyword match="float" />
+ <keyword match="int" />
+ <keyword match="long" />
+ <keyword match="short" />
+ <keyword match="static" />
+ <keyword match="void" />
+ </keywords>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="yes">
+ <keyword match="import"/>
+ <keyword match="package"/>
+ <keyword match="abstract" />
+ <keyword match="break" />
+ <keyword match="case" />
+ <keyword match="catch" />
+ <keyword match="class" />
+ <keyword match="continue" />
+ <keyword match="default" />
+ <keyword match="do" />
+ <keyword match="else" />
+ <keyword match="extends" />
+ <keyword match="false" />
+ <keyword match="finally" />
+ <keyword match="for" />
+ <keyword match="goto" />
+ <keyword match="if" />
+ <keyword match="implements" />
+ <keyword match="instanceof" />
+ <keyword match="interface" />
+ <keyword match="native" />
+ <keyword match="new" />
+ <keyword match="null" />
+ <keyword match="private" />
+ <keyword match="protected" />
+ <keyword match="public" />
+ <keyword match="return" />
+ <keyword match="super" />
+ <keyword match="strictfp" />
+ <keyword match="switch" />
+ <keyword match="synchronized" />
+ <keyword match="this" />
+ <keyword match="throws" />
+ <keyword match="throw" />
+ <keyword match="transient" />
+ <keyword match="true" />
+ <keyword match="try" />
+ <keyword match="volatile" />
+ <keyword match="while" />
+ </keywords>
+
+ <keywords name="builtin" inherits="identifier" innerClass="builtin" case = "yes" ifdef="java.builtins">
+ <keyword match="AbstractAction" />
+ <keyword match="AbstractBorder" />
+ <keyword match="AbstractButton" />
+ <keyword match="AbstractCellEditor" />
+ <keyword match="AbstractCollection" />
+ <keyword match="AbstractColorChooserPanel" />
+ <keyword match="AbstractDocument" />
+ <keyword match="AbstractInterruptibleChannel" />
+ <keyword match="AbstractLayoutCache" />
+ <keyword match="AbstractList" />
+ <keyword match="AbstractListModel" />
+ <keyword match="AbstractMap" />
+ <keyword match="AbstractMethodError" />
+ <keyword match="AbstractPreferences" />
+ <keyword match="AbstractSelectableChannel" />
+ <keyword match="AbstractSelectionKey" />
+ <keyword match="AbstractSelector" />
+ <keyword match="AbstractSequentialList" />
+ <keyword match="AbstractSet" />
+ <keyword match="AbstractSpinnerModel" />
+ <keyword match="AbstractTableModel" />
+ <keyword match="AbstractUndoableEdit" />
+ <keyword match="AbstractWriter" />
+ <keyword match="AccessControlContext" />
+ <keyword match="AccessControlException" />
+ <keyword match="AccessController" />
+ <keyword match="AccessException" />
+ <keyword match="Accessible" />
+ <keyword match="AccessibleAction" />
+ <keyword match="AccessibleBundle" />
+ <keyword match="AccessibleComponent" />
+ <keyword match="AccessibleContext" />
+ <keyword match="AccessibleEditableText" />
+ <keyword match="AccessibleExtendedComponent" />
+ <keyword match="AccessibleExtendedTable" />
+ <keyword match="AccessibleHyperlink" />
+ <keyword match="AccessibleHypertext" />
+ <keyword match="AccessibleIcon" />
+ <keyword match="AccessibleKeyBinding" />
+ <keyword match="AccessibleObject" />
+ <keyword match="AccessibleRelation" />
+ <keyword match="AccessibleRelationSet" />
+ <keyword match="AccessibleResourceBundle" />
+ <keyword match="AccessibleRole" />
+ <keyword match="AccessibleSelection" />
+ <keyword match="AccessibleState" />
+ <keyword match="AccessibleStateSet" />
+ <keyword match="AccessibleTable" />
+ <keyword match="AccessibleTableModelChange" />
+ <keyword match="AccessibleText" />
+ <keyword match="AccessibleValue" />
+ <keyword match="AccountExpiredException" />
+ <keyword match="Acl" />
+ <keyword match="AclEntry" />
+ <keyword match="AclNotFoundException" />
+ <keyword match="Action" />
+ <keyword match="ActionEvent" />
+ <keyword match="ActionListener" />
+ <keyword match="ActionMap" />
+ <keyword match="ActionMapUIResource" />
+ <keyword match="Activatable" />
+ <keyword match="ActivateFailedException" />
+ <keyword match="ActivationDesc" />
+ <keyword match="ActivationException" />
+ <keyword match="ActivationGroup" />
+ <keyword match="ActivationGroup_Stub" />
+ <keyword match="ActivationGroupDesc" />
+ <keyword match="ActivationGroupID" />
+ <keyword match="ActivationID" />
+ <keyword match="ActivationInstantiator" />
+ <keyword match="ActivationMonitor" />
+ <keyword match="ActivationSystem" />
+ <keyword match="Activator" />
+ <keyword match="ActiveEvent" />
+ <keyword match="AdapterActivator" />
+ <keyword match="AdapterActivatorOperations" />
+ <keyword match="AdapterAlreadyExists" />
+ <keyword match="AdapterAlreadyExistsHelper" />
+ <keyword match="AdapterInactive" />
+ <keyword match="AdapterInactiveHelper" />
+ <keyword match="AdapterNonExistent" />
+ <keyword match="AdapterNonExistentHelper" />
+ <keyword match="AddressHelper" />
+ <keyword match="Adjustable" />
+ <keyword match="AdjustmentEvent" />
+ <keyword match="AdjustmentListener" />
+ <keyword match="Adler32" />
+ <keyword match="AffineTransform" />
+ <keyword match="AffineTransformOp" />
+ <keyword match="AlgorithmParameterGenerator" />
+ <keyword match="AlgorithmParameterGeneratorSpi" />
+ <keyword match="AlgorithmParameters" />
+ <keyword match="AlgorithmParameterSpec" />
+ <keyword match="AlgorithmParametersSpi" />
+ <keyword match="AllPermission" />
+ <keyword match="AlphaComposite" />
+ <keyword match="AlreadyBound" />
+ <keyword match="AlreadyBoundException" />
+ <keyword match="AlreadyBoundHelper" />
+ <keyword match="AlreadyBoundHolder" />
+ <keyword match="AlreadyConnectedException" />
+ <keyword match="AncestorEvent" />
+ <keyword match="AncestorListener" />
+ <keyword match="Annotation" />
+ <keyword match="Any" />
+ <keyword match="AnyHolder" />
+ <keyword match="AnySeqHelper" />
+ <keyword match="AnySeqHelper" />
+ <keyword match="AnySeqHolder" />
+ <keyword match="AppConfigurationEntry" />
+ <keyword match="Applet" />
+ <keyword match="AppletContext" />
+ <keyword match="AppletInitializer" />
+ <keyword match="AppletStub" />
+ <keyword match="ApplicationException" />
+ <keyword match="Arc2D" />
+ <keyword match="Area" />
+ <keyword match="AreaAveragingScaleFilter" />
+ <keyword match="ARG_IN" />
+ <keyword match="ARG_INOUT" />
+ <keyword match="ARG_OUT" />
+ <keyword match="ArithmeticException" />
+ <keyword match="Array" />
+ <keyword match="Array" />
+ <keyword match="ArrayIndexOutOfBoundsException" />
+ <keyword match="ArrayList" />
+ <keyword match="Arrays" />
+ <keyword match="ArrayStoreException" />
+ <keyword match="AssertionError" />
+ <keyword match="AsyncBoxView" />
+ <keyword match="AsynchronousCloseException" />
+ <keyword match="Attr" />
+ <keyword match="Attribute" />
+ <keyword match="Attribute" />
+ <keyword match="AttributedCharacterIterator" />
+ <keyword match="AttributedString" />
+ <keyword match="AttributeException" />
+ <keyword match="AttributeInUseException" />
+ <keyword match="AttributeList" />
+ <keyword match="AttributeList" />
+ <keyword match="AttributeListImpl" />
+ <keyword match="AttributeModificationException" />
+ <keyword match="Attributes" />
+ <keyword match="Attributes" />
+ <keyword match="Attributes" />
+ <keyword match="AttributeSet" />
+ <keyword match="AttributeSet" />
+ <keyword match="AttributeSetUtilities" />
+ <keyword match="AttributesImpl" />
+ <keyword match="AudioClip" />
+ <keyword match="AudioFileFormat" />
+ <keyword match="AudioFileReader" />
+ <keyword match="AudioFileWriter" />
+ <keyword match="AudioFormat" />
+ <keyword match="AudioInputStream" />
+ <keyword match="AudioPermission" />
+ <keyword match="AudioSystem" />
+ <keyword match="AuthenticationException" />
+ <keyword match="AuthenticationNotSupportedException" />
+ <keyword match="Authenticator" />
+ <keyword match="AuthPermission" />
+ <keyword match="Autoscroll" />
+ <keyword match="AWTError" />
+ <keyword match="AWTEvent" />
+ <keyword match="AWTEventListener" />
+ <keyword match="AWTEventListenerProxy" />
+ <keyword match="AWTEventMulticaster" />
+ <keyword match="AWTException" />
+ <keyword match="AWTKeyStroke" />
+ <keyword match="AWTPermission" />
+ <keyword match="BackingStoreException" />
+ <keyword match="BAD_CONTEXT" />
+ <keyword match="BAD_INV_ORDER" />
+ <keyword match="BAD_OPERATION" />
+ <keyword match="BAD_PARAM" />
+ <keyword match="BAD_POLICY" />
+ <keyword match="BAD_POLICY_TYPE" />
+ <keyword match="BAD_POLICY_VALUE" />
+ <keyword match="BAD_TYPECODE" />
+ <keyword match="BadKind" />
+ <keyword match="BadLocationException" />
+ <keyword match="BadPaddingException" />
+ <keyword match="BandCombineOp" />
+ <keyword match="BandedSampleModel" />
+ <keyword match="BasicArrowButton" />
+ <keyword match="BasicAttribute" />
+ <keyword match="BasicAttributes" />
+ <keyword match="BasicBorders" />
+ <keyword match="BasicButtonListener" />
+ <keyword match="BasicButtonUI" />
+ <keyword match="BasicCheckBoxMenuItemUI" />
+ <keyword match="BasicCheckBoxUI" />
+ <keyword match="BasicColorChooserUI" />
+ <keyword match="BasicComboBoxEditor" />
+ <keyword match="BasicComboBoxRenderer" />
+ <keyword match="BasicComboBoxUI" />
+ <keyword match="BasicComboPopup" />
+ <keyword match="BasicDesktopIconUI" />
+ <keyword match="BasicDesktopPaneUI" />
+ <keyword match="BasicDirectoryModel" />
+ <keyword match="BasicEditorPaneUI" />
+ <keyword match="BasicFileChooserUI" />
+ <keyword match="BasicFormattedTextFieldUI" />
+ <keyword match="BasicGraphicsUtils" />
+ <keyword match="BasicHTML" />
+ <keyword match="BasicIconFactory" />
+ <keyword match="BasicInternalFrameTitlePane" />
+ <keyword match="BasicInternalFrameUI" />
+ <keyword match="BasicLabelUI" />
+ <keyword match="BasicListUI" />
+ <keyword match="BasicLookAndFeel" />
+ <keyword match="BasicMenuBarUI" />
+ <keyword match="BasicMenuItemUI" />
+ <keyword match="BasicMenuUI" />
+ <keyword match="BasicOptionPaneUI" />
+ <keyword match="BasicPanelUI" />
+ <keyword match="BasicPasswordFieldUI" />
+ <keyword match="BasicPermission" />
+ <keyword match="BasicPopupMenuSeparatorUI" />
+ <keyword match="BasicPopupMenuUI" />
+ <keyword match="BasicProgressBarUI" />
+ <keyword match="BasicRadioButtonMenuItemUI" />
+ <keyword match="BasicRadioButtonUI" />
+ <keyword match="BasicRootPaneUI" />
+ <keyword match="BasicScrollBarUI" />
+ <keyword match="BasicScrollPaneUI" />
+ <keyword match="BasicSeparatorUI" />
+ <keyword match="BasicSliderUI" />
+ <keyword match="BasicSpinnerUI" />
+ <keyword match="BasicSplitPaneDivider" />
+ <keyword match="BasicSplitPaneUI" />
+ <keyword match="BasicStroke" />
+ <keyword match="BasicTabbedPaneUI" />
+ <keyword match="BasicTableHeaderUI" />
+ <keyword match="BasicTableUI" />
+ <keyword match="BasicTextAreaUI" />
+ <keyword match="BasicTextFieldUI" />
+ <keyword match="BasicTextPaneUI" />
+ <keyword match="BasicTextUI" />
+ <keyword match="BasicToggleButtonUI" />
+ <keyword match="BasicToolBarSeparatorUI" />
+ <keyword match="BasicToolBarUI" />
+ <keyword match="BasicToolTipUI" />
+ <keyword match="BasicTreeUI" />
+ <keyword match="BasicViewportUI" />
+ <keyword match="BatchUpdateException" />
+ <keyword match="BeanContext" />
+ <keyword match="BeanContextChild" />
+ <keyword match="BeanContextChildComponentProxy" />
+ <keyword match="BeanContextChildSupport" />
+ <keyword match="BeanContextContainerProxy" />
+ <keyword match="BeanContextEvent" />
+ <keyword match="BeanContextMembershipEvent" />
+ <keyword match="BeanContextMembershipListener" />
+ <keyword match="BeanContextProxy" />
+ <keyword match="BeanContextServiceAvailableEvent" />
+ <keyword match="BeanContextServiceProvider" />
+ <keyword match="BeanContextServiceProviderBeanInfo" />
+ <keyword match="BeanContextServiceRevokedEvent" />
+ <keyword match="BeanContextServiceRevokedListener" />
+ <keyword match="BeanContextServices" />
+ <keyword match="BeanContextServicesListener" />
+ <keyword match="BeanContextServicesSupport" />
+ <keyword match="BeanContextSupport" />
+ <keyword match="BeanDescriptor" />
+ <keyword match="BeanInfo" />
+ <keyword match="Beans" />
+ <keyword match="BevelBorder" />
+ <keyword match="Bidi" />
+ <keyword match="BigDecimal" />
+ <keyword match="BigInteger" />
+ <keyword match="BinaryRefAddr" />
+ <keyword match="BindException" />
+ <keyword match="Binding" />
+ <keyword match="Binding" />
+ <keyword match="BindingHelper" />
+ <keyword match="BindingHolder" />
+ <keyword match="BindingIterator" />
+ <keyword match="BindingIteratorHelper" />
+ <keyword match="BindingIteratorHolder" />
+ <keyword match="BindingIteratorOperations" />
+ <keyword match="BindingIteratorPOA" />
+ <keyword match="BindingListHelper" />
+ <keyword match="BindingListHolder" />
+ <keyword match="BindingType" />
+ <keyword match="BindingTypeHelper" />
+ <keyword match="BindingTypeHolder" />
+ <keyword match="BitSet" />
+ <keyword match="Blob" />
+ <keyword match="BlockView" />
+ <keyword match="Book" />
+ <keyword match="Boolean" />
+ <keyword match="BooleanControl" />
+ <keyword match="BooleanHolder" />
+ <keyword match="BooleanSeqHelper" />
+ <keyword match="BooleanSeqHolder" />
+ <keyword match="Border" />
+ <keyword match="BorderFactory" />
+ <keyword match="BorderLayout" />
+ <keyword match="BorderUIResource" />
+ <keyword match="BoundedRangeModel" />
+ <keyword match="Bounds" />
+ <keyword match="Bounds" />
+ <keyword match="Box" />
+ <keyword match="BoxedValueHelper" />
+ <keyword match="BoxLayout" />
+ <keyword match="BoxView" />
+ <keyword match="BreakIterator" />
+ <keyword match="Buffer" />
+ <keyword match="BufferCapabilities" />
+ <keyword match="BufferedImage" />
+ <keyword match="BufferedImageFilter" />
+ <keyword match="BufferedImageOp" />
+ <keyword match="BufferedInputStream" />
+ <keyword match="BufferedOutputStream" />
+ <keyword match="BufferedReader" />
+ <keyword match="BufferedWriter" />
+ <keyword match="BufferOverflowException" />
+ <keyword match="BufferStrategy" />
+ <keyword match="BufferUnderflowException" />
+ <keyword match="Button" />
+ <keyword match="ButtonGroup" />
+ <keyword match="ButtonModel" />
+ <keyword match="ButtonUI" />
+ <keyword match="Byte" />
+ <keyword match="ByteArrayInputStream" />
+ <keyword match="ByteArrayOutputStream" />
+ <keyword match="ByteBuffer" />
+ <keyword match="ByteChannel" />
+ <keyword match="ByteHolder" />
+ <keyword match="ByteLookupTable" />
+ <keyword match="ByteOrder" />
+ <keyword match="Calendar" />
+ <keyword match="CallableStatement" />
+ <keyword match="Callback" />
+ <keyword match="CallbackHandler" />
+ <keyword match="CancelablePrintJob" />
+ <keyword match="CancelledKeyException" />
+ <keyword match="CannotProceed" />
+ <keyword match="CannotProceedException" />
+ <keyword match="CannotProceedHelper" />
+ <keyword match="CannotProceedHolder" />
+ <keyword match="CannotRedoException" />
+ <keyword match="CannotUndoException" />
+ <keyword match="Canvas" />
+ <keyword match="CardLayout" />
+ <keyword match="Caret" />
+ <keyword match="CaretEvent" />
+ <keyword match="CaretListener" />
+ <keyword match="CDATASection" />
+ <keyword match="CellEditor" />
+ <keyword match="CellEditorListener" />
+ <keyword match="CellRendererPane" />
+ <keyword match="Certificate" />
+ <keyword match="Certificate" />
+ <keyword match="Certificate" />
+
+ <keyword match="CertificateEncodingException" />
+ <keyword match="CertificateEncodingException" />
+ <keyword match="CertificateException" />
+ <keyword match="CertificateException" />
+ <keyword match="CertificateExpiredException" />
+ <keyword match="CertificateExpiredException" />
+ <keyword match="CertificateFactory" />
+ <keyword match="CertificateFactorySpi" />
+ <keyword match="CertificateNotYetValidException" />
+ <keyword match="CertificateNotYetValidException" />
+ <keyword match="CertificateParsingException" />
+ <keyword match="CertificateParsingException" />
+ <keyword match="CertPath" />
+
+ <keyword match="CertPathBuilder" />
+ <keyword match="CertPathBuilderException" />
+ <keyword match="CertPathBuilderResult" />
+ <keyword match="CertPathBuilderSpi" />
+ <keyword match="CertPathParameters" />
+ <keyword match="CertPathValidator" />
+ <keyword match="CertPathValidatorException" />
+ <keyword match="CertPathValidatorResult" />
+ <keyword match="CertPathValidatorSpi" />
+ <keyword match="CertSelector" />
+ <keyword match="CertStore" />
+ <keyword match="CertStoreException" />
+ <keyword match="CertStoreParameters" />
+ <keyword match="CertStoreSpi" />
+ <keyword match="ChangedCharSetException" />
+ <keyword match="ChangeEvent" />
+ <keyword match="ChangeListener" />
+ <keyword match="Channel" />
+ <keyword match="ChannelBinding" />
+ <keyword match="Channels" />
+ <keyword match="Character" />
+
+
+ <keyword match="CharacterCodingException" />
+ <keyword match="CharacterData" />
+ <keyword match="CharacterIterator" />
+ <keyword match="CharArrayReader" />
+ <keyword match="CharArrayWriter" />
+ <keyword match="CharBuffer" />
+ <keyword match="CharConversionException" />
+ <keyword match="CharHolder" />
+ <keyword match="CharSeqHelper" />
+ <keyword match="CharSeqHolder" />
+ <keyword match="CharSequence" />
+ <keyword match="Charset" />
+ <keyword match="CharsetDecoder" />
+ <keyword match="CharsetEncoder" />
+ <keyword match="CharsetProvider" />
+ <keyword match="Checkbox" />
+ <keyword match="CheckboxGroup" />
+ <keyword match="CheckboxMenuItem" />
+ <keyword match="CheckedInputStream" />
+ <keyword match="CheckedOutputStream" />
+ <keyword match="Checksum" />
+ <keyword match="Choice" />
+ <keyword match="ChoiceCallback" />
+ <keyword match="ChoiceFormat" />
+ <keyword match="Chromaticity" />
+ <keyword match="Cipher" />
+ <keyword match="CipherInputStream" />
+ <keyword match="CipherOutputStream" />
+ <keyword match="CipherSpi" />
+ <keyword match="Class" />
+ <keyword match="ClassCastException" />
+ <keyword match="ClassCircularityError" />
+ <keyword match="ClassDesc" />
+ <keyword match="ClassFormatError" />
+ <keyword match="ClassLoader" />
+ <keyword match="ClassNotFoundException" />
+ <keyword match="ClientRequestInfo" />
+ <keyword match="ClientRequestInfoOperations" />
+ <keyword match="ClientRequestInterceptor" />
+ <keyword match="ClientRequestInterceptorOperations" />
+ <keyword match="Clip" />
+ <keyword match="Clipboard" />
+ <keyword match="ClipboardOwner" />
+ <keyword match="Clob" />
+ <keyword match="Cloneable" />
+ <keyword match="CloneNotSupportedException" />
+ <keyword match="ClosedByInterruptException" />
+ <keyword match="ClosedChannelException" />
+ <keyword match="ClosedSelectorException" />
+ <keyword match="CMMException" />
+ <keyword match="Codec" />
+ <keyword match="CodecFactory" />
+ <keyword match="CodecFactoryHelper" />
+ <keyword match="CodecFactoryOperations" />
+ <keyword match="CodecOperations" />
+ <keyword match="CoderMalfunctionError" />
+ <keyword match="CoderResult" />
+ <keyword match="CodeSets" />
+ <keyword match="CodeSource" />
+ <keyword match="CodingErrorAction" />
+ <keyword match="CollationElementIterator" />
+ <keyword match="CollationKey" />
+ <keyword match="Collator" />
+ <keyword match="Collection" />
+ <keyword match="CollectionCertStoreParameters" />
+ <keyword match="Collections" />
+ <keyword match="Color" />
+ <keyword match="ColorChooserComponentFactory" />
+ <keyword match="ColorChooserUI" />
+ <keyword match="ColorConvertOp" />
+ <keyword match="ColorModel" />
+ <keyword match="ColorSelectionModel" />
+ <keyword match="ColorSpace" />
+ <keyword match="ColorSupported" />
+ <keyword match="ColorUIResource" />
+ <keyword match="ComboBoxEditor" />
+ <keyword match="ComboBoxModel" />
+ <keyword match="ComboBoxUI" />
+ <keyword match="ComboPopup" />
+ <keyword match="COMM_FAILURE" />
+ <keyword match="Comment" />
+ <keyword match="CommunicationException" />
+ <keyword match="Comparable" />
+ <keyword match="Comparator" />
+ <keyword match="Compiler" />
+ <keyword match="CompletionStatus" />
+ <keyword match="CompletionStatusHelper" />
+ <keyword match="Component" />
+ <keyword match="ComponentAdapter" />
+ <keyword match="ComponentColorModel" />
+ <keyword match="ComponentEvent" />
+ <keyword match="ComponentIdHelper" />
+ <keyword match="ComponentInputMap" />
+ <keyword match="ComponentInputMapUIResource" />
+ <keyword match="ComponentListener" />
+ <keyword match="ComponentOrientation" />
+ <keyword match="ComponentSampleModel" />
+ <keyword match="ComponentUI" />
+ <keyword match="ComponentView" />
+ <keyword match="Composite" />
+ <keyword match="CompositeContext" />
+ <keyword match="CompositeName" />
+ <keyword match="CompositeView" />
+ <keyword match="CompoundBorder" />
+ <keyword match="CompoundControl" />
+
+ <keyword match="CompoundEdit" />
+ <keyword match="CompoundName" />
+ <keyword match="Compression" />
+ <keyword match="ConcurrentModificationException" />
+ <keyword match="Configuration" />
+ <keyword match="ConfigurationException" />
+ <keyword match="ConfirmationCallback" />
+ <keyword match="ConnectException" />
+ <keyword match="ConnectException" />
+ <keyword match="ConnectIOException" />
+ <keyword match="Connection" />
+ <keyword match="ConnectionEvent" />
+ <keyword match="ConnectionEventListener" />
+ <keyword match="ConnectionPendingException" />
+ <keyword match="ConnectionPoolDataSource" />
+ <keyword match="ConsoleHandler" />
+ <keyword match="Constructor" />
+ <keyword match="Container" />
+ <keyword match="ContainerAdapter" />
+ <keyword match="ContainerEvent" />
+ <keyword match="ContainerListener" />
+ <keyword match="ContainerOrderFocusTraversalPolicy" />
+ <keyword match="ContentHandler" />
+ <keyword match="ContentHandler" />
+ <keyword match="ContentHandlerFactory" />
+ <keyword match="ContentModel" />
+ <keyword match="Context" />
+ <keyword match="Context" />
+ <keyword match="ContextList" />
+ <keyword match="ContextNotEmptyException" />
+ <keyword match="ContextualRenderedImageFactory" />
+ <keyword match="Control" />
+ <keyword match="Control" />
+
+ <keyword match="ControlFactory" />
+ <keyword match="ControllerEventListener" />
+ <keyword match="ConvolveOp" />
+ <keyword match="CookieHolder" />
+ <keyword match="Copies" />
+ <keyword match="CopiesSupported" />
+ <keyword match="CRC32" />
+ <keyword match="CredentialExpiredException" />
+ <keyword match="CRL" />
+ <keyword match="CRLException" />
+ <keyword match="CRLSelector" />
+ <keyword match="CropImageFilter" />
+ <keyword match="CSS" />
+
+ <keyword match="CTX_RESTRICT_SCOPE" />
+ <keyword match="CubicCurve2D" />
+
+
+ <keyword match="Currency" />
+ <keyword match="Current" />
+ <keyword match="Current" />
+ <keyword match="Current" />
+ <keyword match="CurrentHelper" />
+ <keyword match="CurrentHelper" />
+ <keyword match="CurrentHelper" />
+ <keyword match="CurrentHolder" />
+ <keyword match="CurrentOperations" />
+ <keyword match="CurrentOperations" />
+ <keyword match="CurrentOperations" />
+ <keyword match="Cursor" />
+ <keyword match="Customizer" />
+ <keyword match="CustomMarshal" />
+ <keyword match="CustomValue" />
+ <keyword match="DATA_CONVERSION" />
+ <keyword match="DatabaseMetaData" />
+ <keyword match="DataBuffer" />
+ <keyword match="DataBufferByte" />
+ <keyword match="DataBufferDouble" />
+ <keyword match="DataBufferFloat" />
+ <keyword match="DataBufferInt" />
+ <keyword match="DataBufferShort" />
+ <keyword match="DataBufferUShort" />
+ <keyword match="DataFlavor" />
+ <keyword match="DataFormatException" />
+ <keyword match="DatagramChannel" />
+ <keyword match="DatagramPacket" />
+ <keyword match="DatagramSocket" />
+ <keyword match="DatagramSocketImpl" />
+ <keyword match="DatagramSocketImplFactory" />
+ <keyword match="DataInput" />
+ <keyword match="DataInputStream" />
+ <keyword match="DataInputStream" />
+ <keyword match="DataLine" />
+
+ <keyword match="DataOutput" />
+ <keyword match="DataOutputStream" />
+ <keyword match="DataOutputStream" />
+ <keyword match="DataSource" />
+ <keyword match="DataTruncation" />
+ <keyword match="Date" />
+ <keyword match="Date" />
+ <keyword match="DateFormat" />
+
+ <keyword match="DateFormatSymbols" />
+ <keyword match="DateFormatter" />
+ <keyword match="DateTimeAtCompleted" />
+ <keyword match="DateTimeAtCreation" />
+ <keyword match="DateTimeAtProcessing" />
+ <keyword match="DateTimeSyntax" />
+ <keyword match="DebugGraphics" />
+ <keyword match="DecimalFormat" />
+ <keyword match="DecimalFormatSymbols" />
+ <keyword match="DeclHandler" />
+ <keyword match="DefaultBoundedRangeModel" />
+ <keyword match="DefaultButtonModel" />
+ <keyword match="DefaultCaret" />
+ <keyword match="DefaultCellEditor" />
+ <keyword match="DefaultColorSelectionModel" />
+ <keyword match="DefaultComboBoxModel" />
+ <keyword match="DefaultDesktopManager" />
+ <keyword match="DefaultEditorKit" />
+
+
+
+
+
+
+
+
+ <keyword match="DefaultFocusManager" />
+ <keyword match="DefaultFocusTraversalPolicy" />
+ <keyword match="DefaultFormatter" />
+ <keyword match="DefaultFormatterFactory" />
+ <keyword match="DefaultHandler" />
+ <keyword match="DefaultHighlighter" />
+
+ <keyword match="DefaultKeyboardFocusManager" />
+ <keyword match="DefaultListCellRenderer" />
+
+ <keyword match="DefaultListModel" />
+ <keyword match="DefaultListSelectionModel" />
+ <keyword match="DefaultMenuLayout" />
+ <keyword match="DefaultMetalTheme" />
+ <keyword match="DefaultMutableTreeNode" />
+ <keyword match="DefaultPersistenceDelegate" />
+ <keyword match="DefaultSingleSelectionModel" />
+ <keyword match="DefaultStyledDocument" />
+
+
+ <keyword match="DefaultTableCellRenderer" />
+
+ <keyword match="DefaultTableColumnModel" />
+ <keyword match="DefaultTableModel" />
+ <keyword match="DefaultTextUI" />
+ <keyword match="DefaultTreeCellEditor" />
+ <keyword match="DefaultTreeCellRenderer" />
+ <keyword match="DefaultTreeModel" />
+ <keyword match="DefaultTreeSelectionModel" />
+ <keyword match="DefinitionKind" />
+ <keyword match="DefinitionKindHelper" />
+ <keyword match="Deflater" />
+ <keyword match="DeflaterOutputStream" />
+ <keyword match="Delegate" />
+ <keyword match="Delegate" />
+ <keyword match="Delegate" />
+ <keyword match="DelegationPermission" />
+ <keyword match="DESedeKeySpec" />
+ <keyword match="DesignMode" />
+ <keyword match="DESKeySpec" />
+ <keyword match="DesktopIconUI" />
+ <keyword match="DesktopManager" />
+ <keyword match="DesktopPaneUI" />
+ <keyword match="Destination" />
+ <keyword match="Destroyable" />
+ <keyword match="DestroyFailedException" />
+ <keyword match="DGC" />
+ <keyword match="DHGenParameterSpec" />
+ <keyword match="DHKey" />
+ <keyword match="DHParameterSpec" />
+ <keyword match="DHPrivateKey" />
+ <keyword match="DHPrivateKeySpec" />
+ <keyword match="DHPublicKey" />
+ <keyword match="DHPublicKeySpec" />
+ <keyword match="Dialog" />
+ <keyword match="Dictionary" />
+ <keyword match="DigestException" />
+ <keyword match="DigestInputStream" />
+ <keyword match="DigestOutputStream" />
+ <keyword match="Dimension" />
+ <keyword match="Dimension2D" />
+ <keyword match="DimensionUIResource" />
+ <keyword match="DirContext" />
+ <keyword match="DirectColorModel" />
+ <keyword match="DirectoryManager" />
+ <keyword match="DirObjectFactory" />
+ <keyword match="DirStateFactory" />
+
+ <keyword match="DisplayMode" />
+ <keyword match="DnDConstants" />
+ <keyword match="Doc" />
+ <keyword match="DocAttribute" />
+ <keyword match="DocAttributeSet" />
+ <keyword match="DocFlavor" />
+
+
+
+
+
+
+
+ <keyword match="DocPrintJob" />
+ <keyword match="Document" />
+ <keyword match="Document" />
+ <keyword match="DocumentBuilder" />
+ <keyword match="DocumentBuilderFactory" />
+ <keyword match="DocumentEvent" />
+
+
+ <keyword match="DocumentFilter" />
+
+ <keyword match="DocumentFragment" />
+ <keyword match="DocumentHandler" />
+ <keyword match="DocumentListener" />
+ <keyword match="DocumentName" />
+ <keyword match="DocumentParser" />
+ <keyword match="DocumentType" />
+ <keyword match="DomainCombiner" />
+ <keyword match="DomainManager" />
+ <keyword match="DomainManagerOperations" />
+ <keyword match="DOMException" />
+ <keyword match="DOMImplementation" />
+ <keyword match="DOMLocator" />
+ <keyword match="DOMResult" />
+ <keyword match="DOMSource" />
+ <keyword match="Double" />
+ <keyword match="DoubleBuffer" />
+ <keyword match="DoubleHolder" />
+ <keyword match="DoubleSeqHelper" />
+ <keyword match="DoubleSeqHolder" />
+ <keyword match="DragGestureEvent" />
+ <keyword match="DragGestureListener" />
+ <keyword match="DragGestureRecognizer" />
+ <keyword match="DragSource" />
+ <keyword match="DragSourceAdapter" />
+ <keyword match="DragSourceContext" />
+ <keyword match="DragSourceDragEvent" />
+ <keyword match="DragSourceDropEvent" />
+ <keyword match="DragSourceEvent" />
+ <keyword match="DragSourceListener" />
+ <keyword match="DragSourceMotionListener" />
+ <keyword match="Driver" />
+ <keyword match="DriverManager" />
+ <keyword match="DriverPropertyInfo" />
+ <keyword match="DropTarget" />
+
+ <keyword match="DropTargetAdapter" />
+ <keyword match="DropTargetContext" />
+ <keyword match="DropTargetDragEvent" />
+ <keyword match="DropTargetDropEvent" />
+ <keyword match="DropTargetEvent" />
+ <keyword match="DropTargetListener" />
+ <keyword match="DSAKey" />
+ <keyword match="DSAKeyPairGenerator" />
+ <keyword match="DSAParameterSpec" />
+ <keyword match="DSAParams" />
+ <keyword match="DSAPrivateKey" />
+ <keyword match="DSAPrivateKeySpec" />
+ <keyword match="DSAPublicKey" />
+ <keyword match="DSAPublicKeySpec" />
+ <keyword match="DTD" />
+ <keyword match="DTDConstants" />
+ <keyword match="DTDHandler" />
+ <keyword match="DuplicateName" />
+ <keyword match="DuplicateNameHelper" />
+ <keyword match="DynamicImplementation" />
+ <keyword match="DynamicImplementation" />
+ <keyword match="DynAny" />
+ <keyword match="DynAny" />
+ <keyword match="DynAnyFactory" />
+ <keyword match="DynAnyFactoryHelper" />
+ <keyword match="DynAnyFactoryOperations" />
+ <keyword match="DynAnyHelper" />
+ <keyword match="DynAnyOperations" />
+ <keyword match="DynAnySeqHelper" />
+ <keyword match="DynArray" />
+ <keyword match="DynArray" />
+ <keyword match="DynArrayHelper" />
+ <keyword match="DynArrayOperations" />
+ <keyword match="DynEnum" />
+ <keyword match="DynEnum" />
+ <keyword match="DynEnumHelper" />
+ <keyword match="DynEnumOperations" />
+ <keyword match="DynFixed" />
+ <keyword match="DynFixed" />
+ <keyword match="DynFixedHelper" />
+ <keyword match="DynFixedOperations" />
+ <keyword match="DynSequence" />
+ <keyword match="DynSequence" />
+ <keyword match="DynSequenceHelper" />
+ <keyword match="DynSequenceOperations" />
+ <keyword match="DynStruct" />
+ <keyword match="DynStruct" />
+ <keyword match="DynStructHelper" />
+ <keyword match="DynStructOperations" />
+ <keyword match="DynUnion" />
+ <keyword match="DynUnion" />
+ <keyword match="DynUnionHelper" />
+ <keyword match="DynUnionOperations" />
+ <keyword match="DynValue" />
+ <keyword match="DynValue" />
+ <keyword match="DynValueBox" />
+ <keyword match="DynValueBoxOperations" />
+ <keyword match="DynValueCommon" />
+ <keyword match="DynValueCommonOperations" />
+ <keyword match="DynValueHelper" />
+ <keyword match="DynValueOperations" />
+ <keyword match="EditorKit" />
+ <keyword match="Element" />
+ <keyword match="Element" />
+ <keyword match="Element" />
+ <keyword match="ElementIterator" />
+ <keyword match="Ellipse2D" />
+
+
+ <keyword match="EmptyBorder" />
+ <keyword match="EmptyStackException" />
+ <keyword match="EncodedKeySpec" />
+ <keyword match="Encoder" />
+ <keyword match="Encoding" />
+ <keyword match="ENCODING_CDR_ENCAPS" />
+ <keyword match="EncryptedPrivateKeyInfo" />
+ <keyword match="Entity" />
+ <keyword match="Entity" />
+ <keyword match="EntityReference" />
+ <keyword match="EntityResolver" />
+ <keyword match="EnumControl" />
+
+ <keyword match="Enumeration" />
+ <keyword match="EnumSyntax" />
+ <keyword match="Environment" />
+ <keyword match="EOFException" />
+ <keyword match="Error" />
+ <keyword match="ErrorHandler" />
+ <keyword match="ErrorListener" />
+ <keyword match="ErrorManager" />
+ <keyword match="EtchedBorder" />
+ <keyword match="Event" />
+ <keyword match="EventContext" />
+ <keyword match="EventDirContext" />
+ <keyword match="EventHandler" />
+ <keyword match="EventListener" />
+ <keyword match="EventListenerList" />
+ <keyword match="EventListenerProxy" />
+ <keyword match="EventObject" />
+ <keyword match="EventQueue" />
+ <keyword match="EventSetDescriptor" />
+ <keyword match="Exception" />
+ <keyword match="ExceptionInInitializerError" />
+ <keyword match="ExceptionList" />
+ <keyword match="ExceptionListener" />
+ <keyword match="ExemptionMechanism" />
+ <keyword match="ExemptionMechanismException" />
+ <keyword match="ExemptionMechanismSpi" />
+ <keyword match="ExpandVetoException" />
+ <keyword match="ExportException" />
+ <keyword match="Expression" />
+ <keyword match="ExtendedRequest" />
+ <keyword match="ExtendedResponse" />
+ <keyword match="Externalizable" />
+ <keyword match="FactoryConfigurationError" />
+ <keyword match="FailedLoginException" />
+ <keyword match="FeatureDescriptor" />
+ <keyword match="Fidelity" />
+ <keyword match="Field" />
+ <keyword match="FieldNameHelper" />
+ <keyword match="FieldNameHelper" />
+ <keyword match="FieldPosition" />
+ <keyword match="FieldView" />
+ <keyword match="File" />
+ <keyword match="FileCacheImageInputStream" />
+ <keyword match="FileCacheImageOutputStream" />
+ <keyword match="FileChannel" />
+
+ <keyword match="FileChooserUI" />
+ <keyword match="FileDescriptor" />
+ <keyword match="FileDialog" />
+ <keyword match="FileFilter" />
+ <keyword match="FileFilter" />
+ <keyword match="FileHandler" />
+ <keyword match="FileImageInputStream" />
+ <keyword match="FileImageOutputStream" />
+ <keyword match="FileInputStream" />
+ <keyword match="FileLock" />
+ <keyword match="FileLockInterruptionException" />
+ <keyword match="FilenameFilter" />
+ <keyword match="FileNameMap" />
+ <keyword match="FileNotFoundException" />
+ <keyword match="FileOutputStream" />
+ <keyword match="FilePermission" />
+ <keyword match="FileReader" />
+ <keyword match="FileSystemView" />
+ <keyword match="FileView" />
+ <keyword match="FileWriter" />
+ <keyword match="Filter" />
+ <keyword match="FilteredImageSource" />
+ <keyword match="FilterInputStream" />
+ <keyword match="FilterOutputStream" />
+ <keyword match="FilterReader" />
+ <keyword match="FilterWriter" />
+ <keyword match="Finishings" />
+ <keyword match="FixedHeightLayoutCache" />
+ <keyword match="FixedHolder" />
+ <keyword match="FlatteningPathIterator" />
+ <keyword match="FlavorException" />
+ <keyword match="FlavorMap" />
+ <keyword match="FlavorTable" />
+ <keyword match="Float" />
+ <keyword match="FloatBuffer" />
+ <keyword match="FloatControl" />
+
+ <keyword match="FloatHolder" />
+ <keyword match="FloatSeqHelper" />
+ <keyword match="FloatSeqHolder" />
+ <keyword match="FlowLayout" />
+ <keyword match="FlowView" />
+
+ <keyword match="FocusAdapter" />
+ <keyword match="FocusEvent" />
+ <keyword match="FocusListener" />
+ <keyword match="FocusManager" />
+ <keyword match="FocusTraversalPolicy" />
+ <keyword match="Font" />
+ <keyword match="FontFormatException" />
+ <keyword match="FontMetrics" />
+ <keyword match="FontRenderContext" />
+ <keyword match="FontUIResource" />
+ <keyword match="Format" />
+
+ <keyword match="FormatConversionProvider" />
+ <keyword match="FormatMismatch" />
+ <keyword match="FormatMismatchHelper" />
+ <keyword match="Formatter" />
+ <keyword match="FormView" />
+ <keyword match="ForwardRequest" />
+ <keyword match="ForwardRequest" />
+ <keyword match="ForwardRequestHelper" />
+ <keyword match="ForwardRequestHelper" />
+ <keyword match="Frame" />
+ <keyword match="FREE_MEM" />
+ <keyword match="GapContent" />
+ <keyword match="GatheringByteChannel" />
+ <keyword match="GeneralPath" />
+ <keyword match="GeneralSecurityException" />
+ <keyword match="GlyphJustificationInfo" />
+ <keyword match="GlyphMetrics" />
+ <keyword match="GlyphVector" />
+ <keyword match="GlyphView" />
+
+ <keyword match="GradientPaint" />
+ <keyword match="GraphicAttribute" />
+ <keyword match="Graphics" />
+ <keyword match="Graphics2D" />
+ <keyword match="GraphicsConfigTemplate" />
+ <keyword match="GraphicsConfiguration" />
+ <keyword match="GraphicsDevice" />
+ <keyword match="GraphicsEnvironment" />
+ <keyword match="GrayFilter" />
+ <keyword match="GregorianCalendar" />
+ <keyword match="GridBagConstraints" />
+ <keyword match="GridBagLayout" />
+ <keyword match="GridLayout" />
+ <keyword match="Group" />
+ <keyword match="GSSContext" />
+ <keyword match="GSSCredential" />
+ <keyword match="GSSException" />
+ <keyword match="GSSManager" />
+ <keyword match="GSSName" />
+ <keyword match="Guard" />
+ <keyword match="GuardedObject" />
+ <keyword match="GZIPInputStream" />
+ <keyword match="GZIPOutputStream" />
+ <keyword match="Handler" />
+ <keyword match="HandlerBase" />
+ <keyword match="HandshakeCompletedEvent" />
+ <keyword match="HandshakeCompletedListener" />
+ <keyword match="HasControls" />
+ <keyword match="HashAttributeSet" />
+ <keyword match="HashDocAttributeSet" />
+ <keyword match="HashMap" />
+ <keyword match="HashPrintJobAttributeSet" />
+ <keyword match="HashPrintRequestAttributeSet" />
+ <keyword match="HashPrintServiceAttributeSet" />
+ <keyword match="HashSet" />
+ <keyword match="Hashtable" />
+ <keyword match="HeadlessException" />
+ <keyword match="HierarchyBoundsAdapter" />
+ <keyword match="HierarchyBoundsListener" />
+ <keyword match="HierarchyEvent" />
+ <keyword match="HierarchyListener" />
+ <keyword match="Highlighter" />
+
+
+ <keyword match="HostnameVerifier" />
+ <keyword match="HTML" />
+
+
+
+ <keyword match="HTMLDocument" />
+
+ <keyword match="HTMLEditorKit" />
+
+
+
+
+
+
+ <keyword match="HTMLFrameHyperlinkEvent" />
+ <keyword match="HTMLWriter" />
+ <keyword match="HttpsURLConnection" />
+ <keyword match="HttpURLConnection" />
+ <keyword match="HyperlinkEvent" />
+
+ <keyword match="HyperlinkListener" />
+ <keyword match="ICC_ColorSpace" />
+ <keyword match="ICC_Profile" />
+ <keyword match="ICC_ProfileGray" />
+ <keyword match="ICC_ProfileRGB" />
+ <keyword match="Icon" />
+ <keyword match="IconUIResource" />
+ <keyword match="IconView" />
+ <keyword match="ID_ASSIGNMENT_POLICY_ID" />
+ <keyword match="ID_UNIQUENESS_POLICY_ID" />
+ <keyword match="IdAssignmentPolicy" />
+ <keyword match="IdAssignmentPolicyOperations" />
+ <keyword match="IdAssignmentPolicyValue" />
+ <keyword match="IdentifierHelper" />
+ <keyword match="Identity" />
+ <keyword match="IdentityHashMap" />
+ <keyword match="IdentityScope" />
+ <keyword match="IDLEntity" />
+ <keyword match="IDLType" />
+ <keyword match="IDLTypeHelper" />
+ <keyword match="IDLTypeOperations" />
+ <keyword match="IdUniquenessPolicy" />
+ <keyword match="IdUniquenessPolicyOperations" />
+ <keyword match="IdUniquenessPolicyValue" />
+ <keyword match="IIOByteBuffer" />
+ <keyword match="IIOException" />
+ <keyword match="IIOImage" />
+ <keyword match="IIOInvalidTreeException" />
+ <keyword match="IIOMetadata" />
+ <keyword match="IIOMetadataController" />
+ <keyword match="IIOMetadataFormat" />
+ <keyword match="IIOMetadataFormatImpl" />
+ <keyword match="IIOMetadataNode" />
+ <keyword match="IIOParam" />
+ <keyword match="IIOParamController" />
+ <keyword match="IIOReadProgressListener" />
+ <keyword match="IIOReadUpdateListener" />
+ <keyword match="IIOReadWarningListener" />
+ <keyword match="IIORegistry" />
+ <keyword match="IIOServiceProvider" />
+ <keyword match="IIOWriteProgressListener" />
+ <keyword match="IIOWriteWarningListener" />
+ <keyword match="IllegalAccessError" />
+ <keyword match="IllegalAccessException" />
+ <keyword match="IllegalArgumentException" />
+ <keyword match="IllegalBlockingModeException" />
+ <keyword match="IllegalBlockSizeException" />
+ <keyword match="IllegalCharsetNameException" />
+ <keyword match="IllegalComponentStateException" />
+ <keyword match="IllegalMonitorStateException" />
+ <keyword match="IllegalPathStateException" />
+ <keyword match="IllegalSelectorException" />
+ <keyword match="IllegalStateException" />
+ <keyword match="IllegalThreadStateException" />
+ <keyword match="Image" />
+ <keyword match="ImageCapabilities" />
+ <keyword match="ImageConsumer" />
+ <keyword match="ImageFilter" />
+ <keyword match="ImageGraphicAttribute" />
+ <keyword match="ImageIcon" />
+ <keyword match="ImageInputStream" />
+ <keyword match="ImageInputStreamImpl" />
+ <keyword match="ImageInputStreamSpi" />
+ <keyword match="ImageIO" />
+ <keyword match="ImageObserver" />
+ <keyword match="ImageOutputStream" />
+ <keyword match="ImageOutputStreamImpl" />
+ <keyword match="ImageOutputStreamSpi" />
+ <keyword match="ImageProducer" />
+ <keyword match="ImageReader" />
+ <keyword match="ImageReaderSpi" />
+ <keyword match="ImageReaderWriterSpi" />
+ <keyword match="ImageReadParam" />
+ <keyword match="ImageTranscoder" />
+ <keyword match="ImageTranscoderSpi" />
+ <keyword match="ImageTypeSpecifier" />
+ <keyword match="ImageView" />
+ <keyword match="ImageWriteParam" />
+ <keyword match="ImageWriter" />
+ <keyword match="ImageWriterSpi" />
+ <keyword match="ImagingOpException" />
+ <keyword match="IMP_LIMIT" />
+ <keyword match="IMPLICIT_ACTIVATION_POLICY_ID" />
+ <keyword match="ImplicitActivationPolicy" />
+ <keyword match="ImplicitActivationPolicyOperations" />
+ <keyword match="ImplicitActivationPolicyValue" />
+ <keyword match="IncompatibleClassChangeError" />
+ <keyword match="InconsistentTypeCode" />
+ <keyword match="InconsistentTypeCode" />
+ <keyword match="InconsistentTypeCodeHelper" />
+ <keyword match="IndexColorModel" />
+ <keyword match="IndexedPropertyDescriptor" />
+ <keyword match="IndexOutOfBoundsException" />
+ <keyword match="IndirectionException" />
+ <keyword match="Inet4Address" />
+ <keyword match="Inet6Address" />
+ <keyword match="InetAddress" />
+ <keyword match="InetSocketAddress" />
+ <keyword match="Inflater" />
+ <keyword match="InflaterInputStream" />
+ <keyword match="InheritableThreadLocal" />
+ <keyword match="InitialContext" />
+ <keyword match="InitialContextFactory" />
+ <keyword match="InitialContextFactoryBuilder" />
+ <keyword match="InitialDirContext" />
+ <keyword match="INITIALIZE" />
+ <keyword match="InitialLdapContext" />
+ <keyword match="InlineView" />
+ <keyword match="InputContext" />
+ <keyword match="InputEvent" />
+ <keyword match="InputMap" />
+ <keyword match="InputMapUIResource" />
+ <keyword match="InputMethod" />
+ <keyword match="InputMethodContext" />
+ <keyword match="InputMethodDescriptor" />
+ <keyword match="InputMethodEvent" />
+ <keyword match="InputMethodHighlight" />
+ <keyword match="InputMethodListener" />
+ <keyword match="InputMethodRequests" />
+ <keyword match="InputSource" />
+ <keyword match="InputStream" />
+ <keyword match="InputStream" />
+ <keyword match="InputStream" />
+ <keyword match="InputStreamReader" />
+ <keyword match="InputSubset" />
+ <keyword match="InputVerifier" />
+ <keyword match="Insets" />
+ <keyword match="InsetsUIResource" />
+ <keyword match="InstantiationError" />
+ <keyword match="InstantiationException" />
+ <keyword match="Instrument" />
+ <keyword match="InsufficientResourcesException" />
+ <keyword match="IntBuffer" />
+ <keyword match="Integer" />
+ <keyword match="IntegerSyntax" />
+ <keyword match="Interceptor" />
+ <keyword match="InterceptorOperations" />
+ <keyword match="INTERNAL" />
+ <keyword match="InternalError" />
+ <keyword match="InternalFrameAdapter" />
+ <keyword match="InternalFrameEvent" />
+ <keyword match="InternalFrameFocusTraversalPolicy" />
+ <keyword match="InternalFrameListener" />
+ <keyword match="InternalFrameUI" />
+ <keyword match="InternationalFormatter" />
+ <keyword match="InterruptedException" />
+ <keyword match="InterruptedIOException" />
+ <keyword match="InterruptedNamingException" />
+ <keyword match="InterruptibleChannel" />
+ <keyword match="INTF_REPOS" />
+ <keyword match="IntHolder" />
+ <keyword match="IntrospectionException" />
+ <keyword match="Introspector" />
+ <keyword match="INV_FLAG" />
+ <keyword match="INV_IDENT" />
+ <keyword match="INV_OBJREF" />
+ <keyword match="INV_POLICY" />
+ <keyword match="Invalid" />
+ <keyword match="INVALID_TRANSACTION" />
+ <keyword match="InvalidAddress" />
+ <keyword match="InvalidAddressHelper" />
+ <keyword match="InvalidAddressHolder" />
+ <keyword match="InvalidAlgorithmParameterException" />
+ <keyword match="InvalidAttributeIdentifierException" />
+ <keyword match="InvalidAttributesException" />
+ <keyword match="InvalidAttributeValueException" />
+ <keyword match="InvalidClassException" />
+ <keyword match="InvalidDnDOperationException" />
+ <keyword match="InvalidKeyException" />
+ <keyword match="InvalidKeySpecException" />
+ <keyword match="InvalidMarkException" />
+ <keyword match="InvalidMidiDataException" />
+ <keyword match="InvalidName" />
+ <keyword match="InvalidName" />
+ <keyword match="InvalidName" />
+ <keyword match="InvalidNameException" />
+ <keyword match="InvalidNameHelper" />
+ <keyword match="InvalidNameHelper" />
+ <keyword match="InvalidNameHolder" />
+ <keyword match="InvalidObjectException" />
+ <keyword match="InvalidParameterException" />
+ <keyword match="InvalidParameterSpecException" />
+ <keyword match="InvalidPolicy" />
+ <keyword match="InvalidPolicyHelper" />
+ <keyword match="InvalidPreferencesFormatException" />
+ <keyword match="InvalidSearchControlsException" />
+ <keyword match="InvalidSearchFilterException" />
+ <keyword match="InvalidSeq" />
+ <keyword match="InvalidSlot" />
+ <keyword match="InvalidSlotHelper" />
+ <keyword match="InvalidTransactionException" />
+ <keyword match="InvalidTypeForEncoding" />
+ <keyword match="InvalidTypeForEncodingHelper" />
+ <keyword match="InvalidValue" />
+ <keyword match="InvalidValue" />
+ <keyword match="InvalidValueHelper" />
+ <keyword match="InvocationEvent" />
+ <keyword match="InvocationHandler" />
+ <keyword match="InvocationTargetException" />
+ <keyword match="InvokeHandler" />
+ <keyword match="IOException" />
+ <keyword match="IOR" />
+ <keyword match="IORHelper" />
+ <keyword match="IORHolder" />
+ <keyword match="IORInfo" />
+ <keyword match="IORInfoOperations" />
+ <keyword match="IORInterceptor" />
+ <keyword match="IORInterceptorOperations" />
+ <keyword match="IRObject" />
+ <keyword match="IRObjectOperations" />
+ <keyword match="IstringHelper" />
+ <keyword match="ItemEvent" />
+ <keyword match="ItemListener" />
+ <keyword match="ItemSelectable" />
+ <keyword match="Iterator" />
+ <keyword match="IvParameterSpec" />
+ <keyword match="JApplet" />
+ <keyword match="JarEntry" />
+ <keyword match="JarException" />
+ <keyword match="JarFile" />
+ <keyword match="JarInputStream" />
+ <keyword match="JarOutputStream" />
+ <keyword match="JarURLConnection" />
+ <keyword match="JButton" />
+ <keyword match="JCheckBox" />
+ <keyword match="JCheckBoxMenuItem" />
+ <keyword match="JColorChooser" />
+ <keyword match="JComboBox" />
+
+ <keyword match="JComponent" />
+ <keyword match="JDesktopPane" />
+ <keyword match="JDialog" />
+ <keyword match="JEditorPane" />
+ <keyword match="JFileChooser" />
+ <keyword match="JFormattedTextField" />
+
+
+ <keyword match="JFrame" />
+ <keyword match="JInternalFrame" />
+
+ <keyword match="JLabel" />
+ <keyword match="JLayeredPane" />
+ <keyword match="JList" />
+ <keyword match="JMenu" />
+ <keyword match="JMenuBar" />
+ <keyword match="JMenuItem" />
+ <keyword match="JobAttributes" />
+
+
+
+
+
+ <keyword match="JobHoldUntil" />
+ <keyword match="JobImpressions" />
+ <keyword match="JobImpressionsCompleted" />
+ <keyword match="JobImpressionsSupported" />
+ <keyword match="JobKOctets" />
+ <keyword match="JobKOctetsProcessed" />
+ <keyword match="JobKOctetsSupported" />
+ <keyword match="JobMediaSheets" />
+ <keyword match="JobMediaSheetsCompleted" />
+ <keyword match="JobMediaSheetsSupported" />
+ <keyword match="JobMessageFromOperator" />
+ <keyword match="JobName" />
+ <keyword match="JobOriginatingUserName" />
+ <keyword match="JobPriority" />
+ <keyword match="JobPrioritySupported" />
+ <keyword match="JobSheets" />
+ <keyword match="JobState" />
+ <keyword match="JobStateReason" />
+ <keyword match="JobStateReasons" />
+ <keyword match="JOptionPane" />
+ <keyword match="JPanel" />
+ <keyword match="JPasswordField" />
+ <keyword match="JPEGHuffmanTable" />
+ <keyword match="JPEGImageReadParam" />
+ <keyword match="JPEGImageWriteParam" />
+ <keyword match="JPEGQTable" />
+ <keyword match="JPopupMenu" />
+
+ <keyword match="JProgressBar" />
+ <keyword match="JRadioButton" />
+ <keyword match="JRadioButtonMenuItem" />
+ <keyword match="JRootPane" />
+ <keyword match="JScrollBar" />
+ <keyword match="JScrollPane" />
+ <keyword match="JSeparator" />
+ <keyword match="JSlider" />
+ <keyword match="JSpinner" />
+
+
+
+
+ <keyword match="JSplitPane" />
+ <keyword match="JTabbedPane" />
+ <keyword match="JTable" />
+ <keyword match="JTableHeader" />
+ <keyword match="JTextArea" />
+ <keyword match="JTextComponent" />
+
+ <keyword match="JTextField" />
+ <keyword match="JTextPane" />
+ <keyword match="JToggleButton" />
+
+ <keyword match="JToolBar" />
+
+ <keyword match="JToolTip" />
+ <keyword match="JTree" />
+
+
+ <keyword match="JViewport" />
+ <keyword match="JWindow" />
+ <keyword match="KerberosKey" />
+ <keyword match="KerberosPrincipal" />
+ <keyword match="KerberosTicket" />
+ <keyword match="Kernel" />
+ <keyword match="Key" />
+ <keyword match="KeyAdapter" />
+ <keyword match="KeyAgreement" />
+ <keyword match="KeyAgreementSpi" />
+ <keyword match="KeyboardFocusManager" />
+ <keyword match="KeyEvent" />
+ <keyword match="KeyEventDispatcher" />
+ <keyword match="KeyEventPostProcessor" />
+ <keyword match="KeyException" />
+ <keyword match="KeyFactory" />
+ <keyword match="KeyFactorySpi" />
+ <keyword match="KeyGenerator" />
+ <keyword match="KeyGeneratorSpi" />
+ <keyword match="KeyListener" />
+ <keyword match="KeyManagementException" />
+ <keyword match="KeyManager" />
+ <keyword match="KeyManagerFactory" />
+ <keyword match="KeyManagerFactorySpi" />
+ <keyword match="Keymap" />
+ <keyword match="KeyPair" />
+ <keyword match="KeyPairGenerator" />
+ <keyword match="KeyPairGeneratorSpi" />
+ <keyword match="KeySpec" />
+ <keyword match="KeyStore" />
+ <keyword match="KeyStoreException" />
+ <keyword match="KeyStoreSpi" />
+ <keyword match="KeyStroke" />
+ <keyword match="Label" />
+ <keyword match="LabelUI" />
+ <keyword match="LabelView" />
+ <keyword match="LanguageCallback" />
+ <keyword match="LastOwnerException" />
+ <keyword match="LayeredHighlighter" />
+
+ <keyword match="LayoutFocusTraversalPolicy" />
+ <keyword match="LayoutManager" />
+ <keyword match="LayoutManager2" />
+ <keyword match="LayoutQueue" />
+ <keyword match="LDAPCertStoreParameters" />
+ <keyword match="LdapContext" />
+ <keyword match="LdapReferralException" />
+ <keyword match="Lease" />
+ <keyword match="Level" />
+ <keyword match="LexicalHandler" />
+ <keyword match="LIFESPAN_POLICY_ID" />
+ <keyword match="LifespanPolicy" />
+ <keyword match="LifespanPolicyOperations" />
+ <keyword match="LifespanPolicyValue" />
+ <keyword match="LimitExceededException" />
+ <keyword match="Line" />
+
+ <keyword match="Line2D" />
+
+
+ <keyword match="LineBorder" />
+ <keyword match="LineBreakMeasurer" />
+ <keyword match="LineEvent" />
+
+ <keyword match="LineListener" />
+ <keyword match="LineMetrics" />
+ <keyword match="LineNumberInputStream" />
+ <keyword match="LineNumberReader" />
+ <keyword match="LineUnavailableException" />
+ <keyword match="LinkageError" />
+ <keyword match="LinkedHashMap" />
+ <keyword match="LinkedHashSet" />
+ <keyword match="LinkedList" />
+ <keyword match="LinkException" />
+ <keyword match="LinkLoopException" />
+ <keyword match="LinkRef" />
+ <keyword match="List" />
+ <keyword match="List" />
+ <keyword match="ListCellRenderer" />
+ <keyword match="ListDataEvent" />
+ <keyword match="ListDataListener" />
+ <keyword match="ListIterator" />
+ <keyword match="ListModel" />
+ <keyword match="ListResourceBundle" />
+ <keyword match="ListSelectionEvent" />
+ <keyword match="ListSelectionListener" />
+ <keyword match="ListSelectionModel" />
+ <keyword match="ListUI" />
+ <keyword match="ListView" />
+ <keyword match="LoaderHandler" />
+ <keyword match="Locale" />
+ <keyword match="LocalObject" />
+ <keyword match="LocateRegistry" />
+ <keyword match="LOCATION_FORWARD" />
+ <keyword match="Locator" />
+ <keyword match="LocatorImpl" />
+ <keyword match="Logger" />
+ <keyword match="LoggingPermission" />
+ <keyword match="LoginContext" />
+ <keyword match="LoginException" />
+ <keyword match="LoginModule" />
+ <keyword match="LogManager" />
+ <keyword match="LogRecord" />
+ <keyword match="LogStream" />
+ <keyword match="Long" />
+ <keyword match="LongBuffer" />
+ <keyword match="LongHolder" />
+ <keyword match="LongLongSeqHelper" />
+ <keyword match="LongLongSeqHolder" />
+ <keyword match="LongSeqHelper" />
+ <keyword match="LongSeqHolder" />
+ <keyword match="LookAndFeel" />
+ <keyword match="LookupOp" />
+ <keyword match="LookupTable" />
+ <keyword match="Mac" />
+ <keyword match="MacSpi" />
+ <keyword match="MalformedInputException" />
+ <keyword match="MalformedLinkException" />
+ <keyword match="MalformedURLException" />
+ <keyword match="ManagerFactoryParameters" />
+ <keyword match="Manifest" />
+ <keyword match="Map" />
+
+ <keyword match="MappedByteBuffer" />
+ <keyword match="MARSHAL" />
+ <keyword match="MarshalException" />
+ <keyword match="MarshalledObject" />
+ <keyword match="MaskFormatter" />
+ <keyword match="Matcher" />
+ <keyword match="Math" />
+ <keyword match="MatteBorder" />
+ <keyword match="Media" />
+ <keyword match="MediaName" />
+ <keyword match="MediaPrintableArea" />
+ <keyword match="MediaSize" />
+
+
+
+
+
+ <keyword match="MediaSizeName" />
+ <keyword match="MediaTracker" />
+ <keyword match="MediaTray" />
+ <keyword match="Member" />
+ <keyword match="MemoryCacheImageInputStream" />
+ <keyword match="MemoryCacheImageOutputStream" />
+ <keyword match="MemoryHandler" />
+ <keyword match="MemoryImageSource" />
+ <keyword match="Menu" />
+ <keyword match="MenuBar" />
+ <keyword match="MenuBarUI" />
+ <keyword match="MenuComponent" />
+ <keyword match="MenuContainer" />
+ <keyword match="MenuDragMouseEvent" />
+ <keyword match="MenuDragMouseListener" />
+ <keyword match="MenuElement" />
+ <keyword match="MenuEvent" />
+ <keyword match="MenuItem" />
+ <keyword match="MenuItemUI" />
+ <keyword match="MenuKeyEvent" />
+ <keyword match="MenuKeyListener" />
+ <keyword match="MenuListener" />
+ <keyword match="MenuSelectionManager" />
+ <keyword match="MenuShortcut" />
+ <keyword match="MessageDigest" />
+ <keyword match="MessageDigestSpi" />
+ <keyword match="MessageFormat" />
+
+ <keyword match="MessageProp" />
+ <keyword match="MetaEventListener" />
+ <keyword match="MetalBorders" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <keyword match="MetalButtonUI" />
+ <keyword match="MetalCheckBoxIcon" />
+ <keyword match="MetalCheckBoxUI" />
+ <keyword match="MetalComboBoxButton" />
+ <keyword match="MetalComboBoxEditor" />
+
+ <keyword match="MetalComboBoxIcon" />
+ <keyword match="MetalComboBoxUI" />
+ <keyword match="MetalDesktopIconUI" />
+ <keyword match="MetalFileChooserUI" />
+ <keyword match="MetalIconFactory" />
+
+
+
+
+
+
+ <keyword match="MetalInternalFrameTitlePane" />
+ <keyword match="MetalInternalFrameUI" />
+ <keyword match="MetalLabelUI" />
+ <keyword match="MetalLookAndFeel" />
+ <keyword match="MetalPopupMenuSeparatorUI" />
+ <keyword match="MetalProgressBarUI" />
+ <keyword match="MetalRadioButtonUI" />
+ <keyword match="MetalRootPaneUI" />
+ <keyword match="MetalScrollBarUI" />
+ <keyword match="MetalScrollButton" />
+ <keyword match="MetalScrollPaneUI" />
+ <keyword match="MetalSeparatorUI" />
+ <keyword match="MetalSliderUI" />
+ <keyword match="MetalSplitPaneUI" />
+ <keyword match="MetalTabbedPaneUI" />
+ <keyword match="MetalTextFieldUI" />
+ <keyword match="MetalTheme" />
+ <keyword match="MetalToggleButtonUI" />
+ <keyword match="MetalToolBarUI" />
+ <keyword match="MetalToolTipUI" />
+ <keyword match="MetalTreeUI" />
+ <keyword match="MetaMessage" />
+ <keyword match="Method" />
+ <keyword match="MethodDescriptor" />
+ <keyword match="MidiChannel" />
+ <keyword match="MidiDevice" />
+
+ <keyword match="MidiDeviceProvider" />
+ <keyword match="MidiEvent" />
+ <keyword match="MidiFileFormat" />
+ <keyword match="MidiFileReader" />
+ <keyword match="MidiFileWriter" />
+ <keyword match="MidiMessage" />
+ <keyword match="MidiSystem" />
+ <keyword match="MidiUnavailableException" />
+ <keyword match="MimeTypeParseException" />
+ <keyword match="MinimalHTMLWriter" />
+ <keyword match="MissingResourceException" />
+ <keyword match="Mixer" />
+
+ <keyword match="MixerProvider" />
+ <keyword match="ModificationItem" />
+ <keyword match="Modifier" />
+ <keyword match="MouseAdapter" />
+ <keyword match="MouseDragGestureRecognizer" />
+ <keyword match="MouseEvent" />
+ <keyword match="MouseInputAdapter" />
+ <keyword match="MouseInputListener" />
+ <keyword match="MouseListener" />
+ <keyword match="MouseMotionAdapter" />
+ <keyword match="MouseMotionListener" />
+ <keyword match="MouseWheelEvent" />
+ <keyword match="MouseWheelListener" />
+ <keyword match="MultiButtonUI" />
+ <keyword match="MulticastSocket" />
+ <keyword match="MultiColorChooserUI" />
+ <keyword match="MultiComboBoxUI" />
+ <keyword match="MultiDesktopIconUI" />
+ <keyword match="MultiDesktopPaneUI" />
+ <keyword match="MultiDoc" />
+ <keyword match="MultiDocPrintJob" />
+ <keyword match="MultiDocPrintService" />
+ <keyword match="MultiFileChooserUI" />
+ <keyword match="MultiInternalFrameUI" />
+ <keyword match="MultiLabelUI" />
+ <keyword match="MultiListUI" />
+ <keyword match="MultiLookAndFeel" />
+ <keyword match="MultiMenuBarUI" />
+ <keyword match="MultiMenuItemUI" />
+ <keyword match="MultiOptionPaneUI" />
+ <keyword match="MultiPanelUI" />
+ <keyword match="MultiPixelPackedSampleModel" />
+ <keyword match="MultipleComponentProfileHelper" />
+ <keyword match="MultipleComponentProfileHolder" />
+ <keyword match="MultipleDocumentHandling" />
+ <keyword match="MultipleMaster" />
+ <keyword match="MultiPopupMenuUI" />
+ <keyword match="MultiProgressBarUI" />
+ <keyword match="MultiRootPaneUI" />
+ <keyword match="MultiScrollBarUI" />
+ <keyword match="MultiScrollPaneUI" />
+ <keyword match="MultiSeparatorUI" />
+ <keyword match="MultiSliderUI" />
+ <keyword match="MultiSpinnerUI" />
+ <keyword match="MultiSplitPaneUI" />
+ <keyword match="MultiTabbedPaneUI" />
+ <keyword match="MultiTableHeaderUI" />
+ <keyword match="MultiTableUI" />
+ <keyword match="MultiTextUI" />
+ <keyword match="MultiToolBarUI" />
+ <keyword match="MultiToolTipUI" />
+ <keyword match="MultiTreeUI" />
+ <keyword match="MultiViewportUI" />
+ <keyword match="MutableAttributeSet" />
+ <keyword match="MutableComboBoxModel" />
+ <keyword match="MutableTreeNode" />
+ <keyword match="Name" />
+ <keyword match="NameAlreadyBoundException" />
+ <keyword match="NameCallback" />
+ <keyword match="NameClassPair" />
+ <keyword match="NameComponent" />
+ <keyword match="NameComponentHelper" />
+ <keyword match="NameComponentHolder" />
+ <keyword match="NamedNodeMap" />
+ <keyword match="NamedValue" />
+ <keyword match="NameDynAnyPair" />
+ <keyword match="NameDynAnyPairHelper" />
+ <keyword match="NameDynAnyPairSeqHelper" />
+ <keyword match="NameHelper" />
+ <keyword match="NameHolder" />
+ <keyword match="NameNotFoundException" />
+ <keyword match="NameParser" />
+ <keyword match="NamespaceChangeListener" />
+ <keyword match="NamespaceSupport" />
+ <keyword match="NameValuePair" />
+ <keyword match="NameValuePair" />
+ <keyword match="NameValuePairHelper" />
+ <keyword match="NameValuePairHelper" />
+ <keyword match="NameValuePairSeqHelper" />
+ <keyword match="Naming" />
+ <keyword match="NamingContext" />
+ <keyword match="NamingContextExt" />
+ <keyword match="NamingContextExtHelper" />
+ <keyword match="NamingContextExtHolder" />
+ <keyword match="NamingContextExtOperations" />
+ <keyword match="NamingContextExtPOA" />
+ <keyword match="NamingContextHelper" />
+ <keyword match="NamingContextHolder" />
+ <keyword match="NamingContextOperations" />
+ <keyword match="NamingContextPOA" />
+ <keyword match="NamingEnumeration" />
+ <keyword match="NamingEvent" />
+ <keyword match="NamingException" />
+ <keyword match="NamingExceptionEvent" />
+ <keyword match="NamingListener" />
+ <keyword match="NamingManager" />
+ <keyword match="NamingSecurityException" />
+ <keyword match="NavigationFilter" />
+
+ <keyword match="NegativeArraySizeException" />
+ <keyword match="NetPermission" />
+ <keyword match="NetworkInterface" />
+ <keyword match="NO_IMPLEMENT" />
+ <keyword match="NO_MEMORY" />
+ <keyword match="NO_PERMISSION" />
+ <keyword match="NO_RESOURCES" />
+ <keyword match="NO_RESPONSE" />
+ <keyword match="NoClassDefFoundError" />
+ <keyword match="NoConnectionPendingException" />
+ <keyword match="NoContext" />
+ <keyword match="NoContextHelper" />
+ <keyword match="Node" />
+ <keyword match="NodeChangeEvent" />
+ <keyword match="NodeChangeListener" />
+ <keyword match="NodeList" />
+ <keyword match="NoInitialContextException" />
+ <keyword match="NoninvertibleTransformException" />
+ <keyword match="NonReadableChannelException" />
+ <keyword match="NonWritableChannelException" />
+ <keyword match="NoPermissionException" />
+ <keyword match="NoRouteToHostException" />
+ <keyword match="NoServant" />
+ <keyword match="NoServantHelper" />
+ <keyword match="NoSuchAlgorithmException" />
+ <keyword match="NoSuchAttributeException" />
+ <keyword match="NoSuchElementException" />
+ <keyword match="NoSuchFieldError" />
+ <keyword match="NoSuchFieldException" />
+ <keyword match="NoSuchMethodError" />
+ <keyword match="NoSuchMethodException" />
+ <keyword match="NoSuchObjectException" />
+ <keyword match="NoSuchPaddingException" />
+ <keyword match="NoSuchProviderException" />
+ <keyword match="NotActiveException" />
+ <keyword match="Notation" />
+ <keyword match="NotBoundException" />
+ <keyword match="NotContextException" />
+ <keyword match="NotEmpty" />
+ <keyword match="NotEmptyHelper" />
+ <keyword match="NotEmptyHolder" />
+ <keyword match="NotFound" />
+ <keyword match="NotFoundHelper" />
+ <keyword match="NotFoundHolder" />
+ <keyword match="NotFoundReason" />
+ <keyword match="NotFoundReasonHelper" />
+ <keyword match="NotFoundReasonHolder" />
+ <keyword match="NotOwnerException" />
+ <keyword match="NotSerializableException" />
+ <keyword match="NotYetBoundException" />
+ <keyword match="NotYetConnectedException" />
+ <keyword match="NullCipher" />
+ <keyword match="NullPointerException" />
+ <keyword match="Number" />
+ <keyword match="NumberFormat" />
+
+ <keyword match="NumberFormatException" />
+ <keyword match="NumberFormatter" />
+ <keyword match="NumberOfDocuments" />
+ <keyword match="NumberOfInterveningJobs" />
+ <keyword match="NumberUp" />
+ <keyword match="NumberUpSupported" />
+ <keyword match="NumericShaper" />
+ <keyword match="NVList" />
+ <keyword match="OBJ_ADAPTER" />
+ <keyword match="Object" />
+ <keyword match="OBJECT_NOT_EXIST" />
+ <keyword match="ObjectAlreadyActive" />
+ <keyword match="ObjectAlreadyActiveHelper" />
+ <keyword match="ObjectChangeListener" />
+ <keyword match="ObjectFactory" />
+ <keyword match="ObjectFactoryBuilder" />
+ <keyword match="ObjectHelper" />
+ <keyword match="ObjectHolder" />
+ <keyword match="ObjectIdHelper" />
+ <keyword match="ObjectImpl" />
+ <keyword match="ObjectImpl" />
+ <keyword match="ObjectInput" />
+ <keyword match="ObjectInputStream" />
+
+ <keyword match="ObjectInputValidation" />
+ <keyword match="ObjectNotActive" />
+ <keyword match="ObjectNotActiveHelper" />
+ <keyword match="ObjectOutput" />
+ <keyword match="ObjectOutputStream" />
+
+ <keyword match="ObjectStreamClass" />
+ <keyword match="ObjectStreamConstants" />
+ <keyword match="ObjectStreamException" />
+ <keyword match="ObjectStreamField" />
+ <keyword match="ObjectView" />
+ <keyword match="ObjID" />
+ <keyword match="Observable" />
+ <keyword match="Observer" />
+ <keyword match="OctetSeqHelper" />
+ <keyword match="OctetSeqHolder" />
+ <keyword match="Oid" />
+ <keyword match="OMGVMCID" />
+ <keyword match="OpenType" />
+ <keyword match="Operation" />
+ <keyword match="OperationNotSupportedException" />
+ <keyword match="Option" />
+ <keyword match="OptionalDataException" />
+ <keyword match="OptionPaneUI" />
+ <keyword match="ORB" />
+ <keyword match="ORB" />
+ <keyword match="ORBInitializer" />
+ <keyword match="ORBInitializerOperations" />
+ <keyword match="ORBInitInfo" />
+ <keyword match="ORBInitInfoOperations" />
+ <keyword match="OrientationRequested" />
+ <keyword match="OutOfMemoryError" />
+ <keyword match="OutputDeviceAssigned" />
+ <keyword match="OutputKeys" />
+ <keyword match="OutputStream" />
+ <keyword match="OutputStream" />
+ <keyword match="OutputStream" />
+ <keyword match="OutputStreamWriter" />
+ <keyword match="OverlappingFileLockException" />
+ <keyword match="OverlayLayout" />
+ <keyword match="Owner" />
+ <keyword match="Package" />
+ <keyword match="PackedColorModel" />
+ <keyword match="Pageable" />
+ <keyword match="PageAttributes" />
+
+
+
+
+
+ <keyword match="PageFormat" />
+ <keyword match="PageRanges" />
+ <keyword match="PagesPerMinute" />
+ <keyword match="PagesPerMinuteColor" />
+ <keyword match="Paint" />
+ <keyword match="PaintContext" />
+ <keyword match="PaintEvent" />
+ <keyword match="Panel" />
+ <keyword match="PanelUI" />
+ <keyword match="Paper" />
+ <keyword match="ParagraphView" />
+ <keyword match="ParagraphView" />
+ <keyword match="Parameter" />
+ <keyword match="ParameterBlock" />
+ <keyword match="ParameterDescriptor" />
+ <keyword match="ParameterMetaData" />
+ <keyword match="ParameterMode" />
+ <keyword match="ParameterModeHelper" />
+ <keyword match="ParameterModeHolder" />
+ <keyword match="ParseException" />
+ <keyword match="ParsePosition" />
+ <keyword match="Parser" />
+ <keyword match="Parser" />
+ <keyword match="ParserAdapter" />
+ <keyword match="ParserConfigurationException" />
+ <keyword match="ParserDelegator" />
+ <keyword match="ParserFactory" />
+ <keyword match="PartialResultException" />
+ <keyword match="PasswordAuthentication" />
+ <keyword match="PasswordCallback" />
+ <keyword match="PasswordView" />
+ <keyword match="Patch" />
+ <keyword match="PathIterator" />
+ <keyword match="Pattern" />
+ <keyword match="PatternSyntaxException" />
+ <keyword match="PBEKey" />
+ <keyword match="PBEKeySpec" />
+ <keyword match="PBEParameterSpec" />
+ <keyword match="PDLOverrideSupported" />
+ <keyword match="Permission" />
+ <keyword match="Permission" />
+ <keyword match="PermissionCollection" />
+ <keyword match="Permissions" />
+ <keyword match="PERSIST_STORE" />
+ <keyword match="PersistenceDelegate" />
+ <keyword match="PhantomReference" />
+ <keyword match="Pipe" />
+
+
+ <keyword match="PipedInputStream" />
+ <keyword match="PipedOutputStream" />
+ <keyword match="PipedReader" />
+ <keyword match="PipedWriter" />
+ <keyword match="PixelGrabber" />
+ <keyword match="PixelInterleavedSampleModel" />
+ <keyword match="PKCS8EncodedKeySpec" />
+ <keyword match="PKIXBuilderParameters" />
+ <keyword match="PKIXCertPathBuilderResult" />
+ <keyword match="PKIXCertPathChecker" />
+ <keyword match="PKIXCertPathValidatorResult" />
+ <keyword match="PKIXParameters" />
+ <keyword match="PlainDocument" />
+ <keyword match="PlainView" />
+ <keyword match="POA" />
+ <keyword match="POAHelper" />
+ <keyword match="POAManager" />
+ <keyword match="POAManagerOperations" />
+ <keyword match="POAOperations" />
+ <keyword match="Point" />
+ <keyword match="Point2D" />
+
+
+ <keyword match="Policy" />
+ <keyword match="Policy" />
+ <keyword match="Policy" />
+ <keyword match="PolicyError" />
+ <keyword match="PolicyErrorCodeHelper" />
+ <keyword match="PolicyErrorHelper" />
+ <keyword match="PolicyErrorHolder" />
+ <keyword match="PolicyFactory" />
+ <keyword match="PolicyFactoryOperations" />
+ <keyword match="PolicyHelper" />
+ <keyword match="PolicyHolder" />
+ <keyword match="PolicyListHelper" />
+ <keyword match="PolicyListHolder" />
+ <keyword match="PolicyNode" />
+ <keyword match="PolicyOperations" />
+ <keyword match="PolicyQualifierInfo" />
+ <keyword match="PolicyTypeHelper" />
+ <keyword match="Polygon" />
+ <keyword match="PooledConnection" />
+ <keyword match="Popup" />
+ <keyword match="PopupFactory" />
+ <keyword match="PopupMenu" />
+ <keyword match="PopupMenuEvent" />
+ <keyword match="PopupMenuListener" />
+ <keyword match="PopupMenuUI" />
+ <keyword match="Port" />
+
+ <keyword match="PortableRemoteObject" />
+ <keyword match="PortableRemoteObjectDelegate" />
+ <keyword match="PortUnreachableException" />
+ <keyword match="Position" />
+
+ <keyword match="PreferenceChangeEvent" />
+ <keyword match="PreferenceChangeListener" />
+ <keyword match="Preferences" />
+ <keyword match="PreferencesFactory" />
+ <keyword match="PreparedStatement" />
+ <keyword match="PresentationDirection" />
+ <keyword match="Principal" />
+ <keyword match="Principal" />
+ <keyword match="PrincipalHolder" />
+ <keyword match="Printable" />
+ <keyword match="PrinterAbortException" />
+ <keyword match="PrinterException" />
+ <keyword match="PrinterGraphics" />
+ <keyword match="PrinterInfo" />
+ <keyword match="PrinterIOException" />
+ <keyword match="PrinterIsAcceptingJobs" />
+ <keyword match="PrinterJob" />
+ <keyword match="PrinterLocation" />
+ <keyword match="PrinterMakeAndModel" />
+ <keyword match="PrinterMessageFromOperator" />
+ <keyword match="PrinterMoreInfo" />
+ <keyword match="PrinterMoreInfoManufacturer" />
+ <keyword match="PrinterName" />
+ <keyword match="PrinterResolution" />
+ <keyword match="PrinterState" />
+ <keyword match="PrinterStateReason" />
+ <keyword match="PrinterStateReasons" />
+ <keyword match="PrinterURI" />
+ <keyword match="PrintEvent" />
+ <keyword match="PrintException" />
+ <keyword match="PrintGraphics" />
+ <keyword match="PrintJob" />
+ <keyword match="PrintJobAdapter" />
+ <keyword match="PrintJobAttribute" />
+ <keyword match="PrintJobAttributeEvent" />
+ <keyword match="PrintJobAttributeListener" />
+ <keyword match="PrintJobAttributeSet" />
+ <keyword match="PrintJobEvent" />
+ <keyword match="PrintJobListener" />
+ <keyword match="PrintQuality" />
+ <keyword match="PrintRequestAttribute" />
+ <keyword match="PrintRequestAttributeSet" />
+ <keyword match="PrintService" />
+ <keyword match="PrintServiceAttribute" />
+ <keyword match="PrintServiceAttributeEvent" />
+ <keyword match="PrintServiceAttributeListener" />
+ <keyword match="PrintServiceAttributeSet" />
+ <keyword match="PrintServiceLookup" />
+ <keyword match="PrintStream" />
+ <keyword match="PrintWriter" />
+ <keyword match="PRIVATE_MEMBER" />
+ <keyword match="PrivateCredentialPermission" />
+ <keyword match="PrivateKey" />
+ <keyword match="PrivilegedAction" />
+ <keyword match="PrivilegedActionException" />
+ <keyword match="PrivilegedExceptionAction" />
+ <keyword match="Process" />
+ <keyword match="ProcessingInstruction" />
+ <keyword match="ProfileDataException" />
+ <keyword match="ProfileIdHelper" />
+ <keyword match="ProgressBarUI" />
+ <keyword match="ProgressMonitor" />
+ <keyword match="ProgressMonitorInputStream" />
+ <keyword match="Properties" />
+ <keyword match="PropertyChangeEvent" />
+ <keyword match="PropertyChangeListener" />
+ <keyword match="PropertyChangeListenerProxy" />
+ <keyword match="PropertyChangeSupport" />
+ <keyword match="PropertyDescriptor" />
+ <keyword match="PropertyEditor" />
+ <keyword match="PropertyEditorManager" />
+ <keyword match="PropertyEditorSupport" />
+ <keyword match="PropertyPermission" />
+ <keyword match="PropertyResourceBundle" />
+ <keyword match="PropertyVetoException" />
+ <keyword match="ProtectionDomain" />
+ <keyword match="ProtocolException" />
+ <keyword match="Provider" />
+ <keyword match="ProviderException" />
+ <keyword match="Proxy" />
+ <keyword match="PSSParameterSpec" />
+ <keyword match="PUBLIC_MEMBER" />
+ <keyword match="PublicKey" />
+ <keyword match="PushbackInputStream" />
+ <keyword match="PushbackReader" />
+ <keyword match="QuadCurve2D" />
+
+
+ <keyword match="QueuedJobCount" />
+ <keyword match="Random" />
+ <keyword match="RandomAccess" />
+ <keyword match="RandomAccessFile" />
+ <keyword match="Raster" />
+ <keyword match="RasterFormatException" />
+ <keyword match="RasterOp" />
+ <keyword match="RC2ParameterSpec" />
+ <keyword match="RC5ParameterSpec" />
+ <keyword match="ReadableByteChannel" />
+ <keyword match="Reader" />
+ <keyword match="ReadOnlyBufferException" />
+ <keyword match="Receiver" />
+ <keyword match="Rectangle" />
+ <keyword match="Rectangle2D" />
+
+
+ <keyword match="RectangularShape" />
+ <keyword match="Ref" />
+ <keyword match="RefAddr" />
+ <keyword match="Reference" />
+ <keyword match="Reference" />
+ <keyword match="Referenceable" />
+ <keyword match="ReferenceQueue" />
+ <keyword match="ReferenceUriSchemesSupported" />
+ <keyword match="ReferralException" />
+ <keyword match="ReflectPermission" />
+ <keyword match="Refreshable" />
+ <keyword match="RefreshFailedException" />
+ <keyword match="RegisterableService" />
+ <keyword match="Registry" />
+ <keyword match="RegistryHandler" />
+ <keyword match="RemarshalException" />
+ <keyword match="Remote" />
+ <keyword match="RemoteCall" />
+ <keyword match="RemoteException" />
+ <keyword match="RemoteObject" />
+ <keyword match="RemoteRef" />
+ <keyword match="RemoteServer" />
+ <keyword match="RemoteStub" />
+ <keyword match="RenderableImage" />
+ <keyword match="RenderableImageOp" />
+ <keyword match="RenderableImageProducer" />
+ <keyword match="RenderContext" />
+ <keyword match="RenderedImage" />
+ <keyword match="RenderedImageFactory" />
+ <keyword match="Renderer" />
+ <keyword match="RenderingHints" />
+
+ <keyword match="RepaintManager" />
+ <keyword match="ReplicateScaleFilter" />
+ <keyword match="RepositoryIdHelper" />
+ <keyword match="Request" />
+ <keyword match="REQUEST_PROCESSING_POLICY_ID" />
+ <keyword match="RequestInfo" />
+ <keyword match="RequestInfoOperations" />
+ <keyword match="RequestingUserName" />
+ <keyword match="RequestProcessingPolicy" />
+ <keyword match="RequestProcessingPolicyOperations" />
+ <keyword match="RequestProcessingPolicyValue" />
+ <keyword match="RescaleOp" />
+ <keyword match="ResolutionSyntax" />
+ <keyword match="Resolver" />
+ <keyword match="ResolveResult" />
+ <keyword match="ResourceBundle" />
+ <keyword match="ResponseHandler" />
+ <keyword match="Result" />
+ <keyword match="ResultSet" />
+ <keyword match="ResultSetMetaData" />
+ <keyword match="ReverbType" />
+ <keyword match="RGBImageFilter" />
+ <keyword match="RMIClassLoader" />
+ <keyword match="RMIClassLoaderSpi" />
+ <keyword match="RMIClientSocketFactory" />
+ <keyword match="RMIFailureHandler" />
+ <keyword match="RMISecurityException" />
+ <keyword match="RMISecurityManager" />
+ <keyword match="RMIServerSocketFactory" />
+ <keyword match="RMISocketFactory" />
+ <keyword match="Robot" />
+ <keyword match="RootPaneContainer" />
+ <keyword match="RootPaneUI" />
+ <keyword match="RoundRectangle2D" />
+
+
+ <keyword match="RowMapper" />
+ <keyword match="RowSet" />
+ <keyword match="RowSetEvent" />
+ <keyword match="RowSetInternal" />
+ <keyword match="RowSetListener" />
+ <keyword match="RowSetMetaData" />
+ <keyword match="RowSetReader" />
+ <keyword match="RowSetWriter" />
+ <keyword match="RSAKey" />
+ <keyword match="RSAKeyGenParameterSpec" />
+ <keyword match="RSAMultiPrimePrivateCrtKey" />
+ <keyword match="RSAMultiPrimePrivateCrtKeySpec" />
+ <keyword match="RSAOtherPrimeInfo" />
+ <keyword match="RSAPrivateCrtKey" />
+ <keyword match="RSAPrivateCrtKeySpec" />
+ <keyword match="RSAPrivateKey" />
+ <keyword match="RSAPrivateKeySpec" />
+ <keyword match="RSAPublicKey" />
+ <keyword match="RSAPublicKeySpec" />
+ <keyword match="RTFEditorKit" />
+ <keyword match="RuleBasedCollator" />
+ <keyword match="Runnable" />
+ <keyword match="Runtime" />
+ <keyword match="RunTime" />
+ <keyword match="RuntimeException" />
+ <keyword match="RunTimeOperations" />
+ <keyword match="RuntimePermission" />
+ <keyword match="SampleModel" />
+ <keyword match="Savepoint" />
+ <keyword match="SAXException" />
+ <keyword match="SAXNotRecognizedException" />
+ <keyword match="SAXNotSupportedException" />
+ <keyword match="SAXParseException" />
+ <keyword match="SAXParser" />
+ <keyword match="SAXParserFactory" />
+ <keyword match="SAXResult" />
+ <keyword match="SAXSource" />
+ <keyword match="SAXTransformerFactory" />
+ <keyword match="ScatteringByteChannel" />
+ <keyword match="SchemaViolationException" />
+ <keyword match="Scrollable" />
+ <keyword match="Scrollbar" />
+ <keyword match="ScrollBarUI" />
+ <keyword match="ScrollPane" />
+ <keyword match="ScrollPaneAdjustable" />
+ <keyword match="ScrollPaneConstants" />
+ <keyword match="ScrollPaneLayout" />
+
+ <keyword match="ScrollPaneUI" />
+ <keyword match="SealedObject" />
+ <keyword match="SearchControls" />
+ <keyword match="SearchResult" />
+ <keyword match="SecretKey" />
+ <keyword match="SecretKeyFactory" />
+ <keyword match="SecretKeyFactorySpi" />
+ <keyword match="SecretKeySpec" />
+ <keyword match="SecureClassLoader" />
+ <keyword match="SecureRandom" />
+ <keyword match="SecureRandomSpi" />
+ <keyword match="Security" />
+ <keyword match="SecurityException" />
+ <keyword match="SecurityManager" />
+ <keyword match="SecurityPermission" />
+ <keyword match="Segment" />
+ <keyword match="SelectableChannel" />
+ <keyword match="SelectionKey" />
+ <keyword match="Selector" />
+ <keyword match="SelectorProvider" />
+ <keyword match="SeparatorUI" />
+ <keyword match="Sequence" />
+ <keyword match="SequenceInputStream" />
+ <keyword match="Sequencer" />
+
+ <keyword match="Serializable" />
+ <keyword match="SerializablePermission" />
+ <keyword match="Servant" />
+ <keyword match="SERVANT_RETENTION_POLICY_ID" />
+ <keyword match="ServantActivator" />
+ <keyword match="ServantActivatorHelper" />
+ <keyword match="ServantActivatorOperations" />
+ <keyword match="ServantActivatorPOA" />
+ <keyword match="ServantAlreadyActive" />
+ <keyword match="ServantAlreadyActiveHelper" />
+ <keyword match="ServantLocator" />
+ <keyword match="ServantLocatorHelper" />
+ <keyword match="ServantLocatorOperations" />
+ <keyword match="ServantLocatorPOA" />
+ <keyword match="ServantManager" />
+ <keyword match="ServantManagerOperations" />
+ <keyword match="ServantNotActive" />
+ <keyword match="ServantNotActiveHelper" />
+ <keyword match="ServantObject" />
+ <keyword match="ServantRetentionPolicy" />
+ <keyword match="ServantRetentionPolicyOperations" />
+ <keyword match="ServantRetentionPolicyValue" />
+ <keyword match="ServerCloneException" />
+ <keyword match="ServerError" />
+ <keyword match="ServerException" />
+ <keyword match="ServerNotActiveException" />
+ <keyword match="ServerRef" />
+ <keyword match="ServerRequest" />
+ <keyword match="ServerRequestInfo" />
+ <keyword match="ServerRequestInfoOperations" />
+ <keyword match="ServerRequestInterceptor" />
+ <keyword match="ServerRequestInterceptorOperations" />
+ <keyword match="ServerRuntimeException" />
+ <keyword match="ServerSocket" />
+ <keyword match="ServerSocketChannel" />
+ <keyword match="ServerSocketFactory" />
+ <keyword match="ServiceContext" />
+ <keyword match="ServiceContextHelper" />
+ <keyword match="ServiceContextHolder" />
+ <keyword match="ServiceContextListHelper" />
+ <keyword match="ServiceContextListHolder" />
+ <keyword match="ServiceDetail" />
+ <keyword match="ServiceDetailHelper" />
+ <keyword match="ServiceIdHelper" />
+ <keyword match="ServiceInformation" />
+ <keyword match="ServiceInformationHelper" />
+ <keyword match="ServiceInformationHolder" />
+ <keyword match="ServicePermission" />
+ <keyword match="ServiceRegistry" />
+
+ <keyword match="ServiceUI" />
+ <keyword match="ServiceUIFactory" />
+ <keyword match="ServiceUnavailableException" />
+ <keyword match="Set" />
+ <keyword match="SetOfIntegerSyntax" />
+ <keyword match="SetOverrideType" />
+ <keyword match="SetOverrideTypeHelper" />
+ <keyword match="Severity" />
+ <keyword match="Shape" />
+ <keyword match="ShapeGraphicAttribute" />
+ <keyword match="SheetCollate" />
+ <keyword match="Short" />
+ <keyword match="ShortBuffer" />
+ <keyword match="ShortBufferException" />
+ <keyword match="ShortHolder" />
+ <keyword match="ShortLookupTable" />
+ <keyword match="ShortMessage" />
+ <keyword match="ShortSeqHelper" />
+ <keyword match="ShortSeqHolder" />
+ <keyword match="Sides" />
+ <keyword match="Signature" />
+ <keyword match="SignatureException" />
+ <keyword match="SignatureSpi" />
+ <keyword match="SignedObject" />
+ <keyword match="Signer" />
+ <keyword match="SimpleAttributeSet" />
+ <keyword match="SimpleBeanInfo" />
+ <keyword match="SimpleDateFormat" />
+ <keyword match="SimpleDoc" />
+ <keyword match="SimpleFormatter" />
+ <keyword match="SimpleTimeZone" />
+ <keyword match="SinglePixelPackedSampleModel" />
+ <keyword match="SingleSelectionModel" />
+ <keyword match="Size2DSyntax" />
+ <keyword match="SizeLimitExceededException" />
+ <keyword match="SizeRequirements" />
+ <keyword match="SizeSequence" />
+ <keyword match="Skeleton" />
+ <keyword match="SkeletonMismatchException" />
+ <keyword match="SkeletonNotFoundException" />
+ <keyword match="SliderUI" />
+ <keyword match="Socket" />
+ <keyword match="SocketAddress" />
+ <keyword match="SocketChannel" />
+ <keyword match="SocketException" />
+ <keyword match="SocketFactory" />
+ <keyword match="SocketHandler" />
+ <keyword match="SocketImpl" />
+ <keyword match="SocketImplFactory" />
+ <keyword match="SocketOptions" />
+ <keyword match="SocketPermission" />
+ <keyword match="SocketSecurityException" />
+ <keyword match="SocketTimeoutException" />
+ <keyword match="SoftBevelBorder" />
+ <keyword match="SoftReference" />
+ <keyword match="SortedMap" />
+ <keyword match="SortedSet" />
+ <keyword match="SortingFocusTraversalPolicy" />
+ <keyword match="Soundbank" />
+ <keyword match="SoundbankReader" />
+ <keyword match="SoundbankResource" />
+ <keyword match="Source" />
+ <keyword match="SourceDataLine" />
+ <keyword match="SourceLocator" />
+ <keyword match="SpinnerDateModel" />
+ <keyword match="SpinnerListModel" />
+ <keyword match="SpinnerModel" />
+ <keyword match="SpinnerNumberModel" />
+ <keyword match="SpinnerUI" />
+ <keyword match="SplitPaneUI" />
+ <keyword match="Spring" />
+ <keyword match="SpringLayout" />
+
+ <keyword match="SQLData" />
+ <keyword match="SQLException" />
+ <keyword match="SQLInput" />
+ <keyword match="SQLOutput" />
+ <keyword match="SQLPermission" />
+ <keyword match="SQLWarning" />
+ <keyword match="SSLContext" />
+ <keyword match="SSLContextSpi" />
+ <keyword match="SSLException" />
+ <keyword match="SSLHandshakeException" />
+ <keyword match="SSLKeyException" />
+ <keyword match="SSLPeerUnverifiedException" />
+ <keyword match="SSLPermission" />
+ <keyword match="SSLProtocolException" />
+ <keyword match="SSLServerSocket" />
+ <keyword match="SSLServerSocketFactory" />
+ <keyword match="SSLSession" />
+ <keyword match="SSLSessionBindingEvent" />
+ <keyword match="SSLSessionBindingListener" />
+ <keyword match="SSLSessionContext" />
+ <keyword match="SSLSocket" />
+ <keyword match="SSLSocketFactory" />
+ <keyword match="Stack" />
+ <keyword match="StackOverflowError" />
+ <keyword match="StackTraceElement" />
+ <keyword match="StartTlsRequest" />
+ <keyword match="StartTlsResponse" />
+ <keyword match="State" />
+ <keyword match="StateEdit" />
+ <keyword match="StateEditable" />
+ <keyword match="StateFactory" />
+ <keyword match="Statement" />
+ <keyword match="Statement" />
+ <keyword match="Streamable" />
+ <keyword match="StreamableValue" />
+ <keyword match="StreamCorruptedException" />
+ <keyword match="StreamHandler" />
+ <keyword match="StreamPrintService" />
+ <keyword match="StreamPrintServiceFactory" />
+ <keyword match="StreamResult" />
+ <keyword match="StreamSource" />
+ <keyword match="StreamTokenizer" />
+ <keyword match="StrictMath" />
+ <keyword match="String" />
+ <keyword match="StringBuffer" />
+ <keyword match="StringBufferInputStream" />
+ <keyword match="StringCharacterIterator" />
+ <keyword match="StringContent" />
+ <keyword match="StringHolder" />
+ <keyword match="StringIndexOutOfBoundsException" />
+ <keyword match="StringNameHelper" />
+ <keyword match="StringReader" />
+ <keyword match="StringRefAddr" />
+ <keyword match="StringSelection" />
+ <keyword match="StringSeqHelper" />
+ <keyword match="StringSeqHolder" />
+ <keyword match="StringTokenizer" />
+ <keyword match="StringValueHelper" />
+ <keyword match="StringWriter" />
+ <keyword match="Stroke" />
+ <keyword match="Struct" />
+ <keyword match="StructMember" />
+ <keyword match="StructMemberHelper" />
+ <keyword match="Stub" />
+ <keyword match="StubDelegate" />
+ <keyword match="StubNotFoundException" />
+ <keyword match="Style" />
+ <keyword match="StyleConstants" />
+
+
+
+
+ <keyword match="StyleContext" />
+ <keyword match="StyledDocument" />
+ <keyword match="StyledEditorKit" />
+
+
+
+
+
+
+
+
+ <keyword match="StyleSheet" />
+
+
+ <keyword match="Subject" />
+ <keyword match="SubjectDomainCombiner" />
+ <keyword match="SUCCESSFUL" />
+ <keyword match="SupportedValuesAttribute" />
+ <keyword match="SwingConstants" />
+ <keyword match="SwingPropertyChangeSupport" />
+ <keyword match="SwingUtilities" />
+ <keyword match="SYNC_WITH_TRANSPORT" />
+ <keyword match="SyncFailedException" />
+ <keyword match="SyncScopeHelper" />
+ <keyword match="Synthesizer" />
+ <keyword match="SysexMessage" />
+ <keyword match="System" />
+ <keyword match="SYSTEM_EXCEPTION" />
+ <keyword match="SystemColor" />
+ <keyword match="SystemException" />
+ <keyword match="SystemFlavorMap" />
+ <keyword match="TabableView" />
+ <keyword match="TabbedPaneUI" />
+ <keyword match="TabExpander" />
+ <keyword match="TableCellEditor" />
+ <keyword match="TableCellRenderer" />
+ <keyword match="TableColumn" />
+ <keyword match="TableColumnModel" />
+ <keyword match="TableColumnModelEvent" />
+ <keyword match="TableColumnModelListener" />
+ <keyword match="TableHeaderUI" />
+ <keyword match="TableModel" />
+ <keyword match="TableModelEvent" />
+ <keyword match="TableModelListener" />
+ <keyword match="TableUI" />
+ <keyword match="TableView" />
+ <keyword match="TabSet" />
+ <keyword match="TabStop" />
+ <keyword match="TAG_ALTERNATE_IIOP_ADDRESS" />
+ <keyword match="TAG_CODE_SETS" />
+ <keyword match="TAG_INTERNET_IOP" />
+ <keyword match="TAG_JAVA_CODEBASE" />
+ <keyword match="TAG_MULTIPLE_COMPONENTS" />
+ <keyword match="TAG_ORB_TYPE" />
+ <keyword match="TAG_POLICIES" />
+ <keyword match="TagElement" />
+ <keyword match="TaggedComponent" />
+ <keyword match="TaggedComponentHelper" />
+ <keyword match="TaggedComponentHolder" />
+ <keyword match="TaggedProfile" />
+ <keyword match="TaggedProfileHelper" />
+ <keyword match="TaggedProfileHolder" />
+ <keyword match="TargetDataLine" />
+ <keyword match="TCKind" />
+ <keyword match="Templates" />
+ <keyword match="TemplatesHandler" />
+ <keyword match="Text" />
+ <keyword match="TextAction" />
+ <keyword match="TextArea" />
+ <keyword match="TextAttribute" />
+ <keyword match="TextComponent" />
+ <keyword match="TextEvent" />
+ <keyword match="TextField" />
+ <keyword match="TextHitInfo" />
+ <keyword match="TextInputCallback" />
+ <keyword match="TextLayout" />
+
+ <keyword match="TextListener" />
+ <keyword match="TextMeasurer" />
+ <keyword match="TextOutputCallback" />
+ <keyword match="TextSyntax" />
+ <keyword match="TextUI" />
+ <keyword match="TexturePaint" />
+ <keyword match="Thread" />
+ <keyword match="THREAD_POLICY_ID" />
+ <keyword match="ThreadDeath" />
+ <keyword match="ThreadGroup" />
+ <keyword match="ThreadLocal" />
+ <keyword match="ThreadPolicy" />
+ <keyword match="ThreadPolicyOperations" />
+ <keyword match="ThreadPolicyValue" />
+ <keyword match="Throwable" />
+ <keyword match="Tie" />
+ <keyword match="TileObserver" />
+ <keyword match="Time" />
+ <keyword match="TimeLimitExceededException" />
+ <keyword match="Timer" />
+ <keyword match="Timer" />
+ <keyword match="TimerTask" />
+ <keyword match="Timestamp" />
+ <keyword match="TimeZone" />
+ <keyword match="TitledBorder" />
+ <keyword match="ToolBarUI" />
+ <keyword match="Toolkit" />
+ <keyword match="ToolTipManager" />
+ <keyword match="ToolTipUI" />
+ <keyword match="TooManyListenersException" />
+ <keyword match="Track" />
+ <keyword match="TRANSACTION_REQUIRED" />
+ <keyword match="TRANSACTION_ROLLEDBACK" />
+ <keyword match="TransactionRequiredException" />
+ <keyword match="TransactionRolledbackException" />
+ <keyword match="TransactionService" />
+ <keyword match="Transferable" />
+ <keyword match="TransferHandler" />
+ <keyword match="TransformAttribute" />
+ <keyword match="Transformer" />
+ <keyword match="TransformerConfigurationException" />
+ <keyword match="TransformerException" />
+ <keyword match="TransformerFactory" />
+ <keyword match="TransformerFactoryConfigurationError" />
+ <keyword match="TransformerHandler" />
+ <keyword match="TRANSIENT" />
+ <keyword match="Transmitter" />
+ <keyword match="Transparency" />
+ <keyword match="TRANSPORT_RETRY" />
+ <keyword match="TreeCellEditor" />
+ <keyword match="TreeCellRenderer" />
+ <keyword match="TreeExpansionEvent" />
+ <keyword match="TreeExpansionListener" />
+ <keyword match="TreeMap" />
+ <keyword match="TreeModel" />
+ <keyword match="TreeModelEvent" />
+ <keyword match="TreeModelListener" />
+ <keyword match="TreeNode" />
+ <keyword match="TreePath" />
+ <keyword match="TreeSelectionEvent" />
+ <keyword match="TreeSelectionListener" />
+ <keyword match="TreeSelectionModel" />
+ <keyword match="TreeSet" />
+ <keyword match="TreeUI" />
+ <keyword match="TreeWillExpandListener" />
+ <keyword match="TrustAnchor" />
+ <keyword match="TrustManager" />
+ <keyword match="TrustManagerFactory" />
+ <keyword match="TrustManagerFactorySpi" />
+ <keyword match="TypeCode" />
+ <keyword match="TypeCodeHolder" />
+ <keyword match="TypeMismatch" />
+ <keyword match="TypeMismatch" />
+ <keyword match="TypeMismatch" />
+ <keyword match="TypeMismatchHelper" />
+ <keyword match="TypeMismatchHelper" />
+ <keyword match="Types" />
+ <keyword match="UID" />
+ <keyword match="UIDefaults" />
+
+
+
+
+ <keyword match="UIManager" />
+
+ <keyword match="UIResource" />
+ <keyword match="ULongLongSeqHelper" />
+ <keyword match="ULongLongSeqHolder" />
+ <keyword match="ULongSeqHelper" />
+ <keyword match="ULongSeqHolder" />
+ <keyword match="UndeclaredThrowableException" />
+ <keyword match="UndoableEdit" />
+ <keyword match="UndoableEditEvent" />
+ <keyword match="UndoableEditListener" />
+ <keyword match="UndoableEditSupport" />
+ <keyword match="UndoManager" />
+ <keyword match="UnexpectedException" />
+ <keyword match="UnicastRemoteObject" />
+ <keyword match="UnionMember" />
+ <keyword match="UnionMemberHelper" />
+ <keyword match="UNKNOWN" />
+ <keyword match="UnknownEncoding" />
+ <keyword match="UnknownEncodingHelper" />
+ <keyword match="UnknownError" />
+ <keyword match="UnknownException" />
+ <keyword match="UnknownGroupException" />
+ <keyword match="UnknownHostException" />
+ <keyword match="UnknownHostException" />
+ <keyword match="UnknownObjectException" />
+ <keyword match="UnknownServiceException" />
+ <keyword match="UnknownUserException" />
+ <keyword match="UnknownUserExceptionHelper" />
+ <keyword match="UnknownUserExceptionHolder" />
+ <keyword match="UnmappableCharacterException" />
+ <keyword match="UnmarshalException" />
+ <keyword match="UnmodifiableSetException" />
+ <keyword match="UnrecoverableKeyException" />
+ <keyword match="Unreferenced" />
+ <keyword match="UnresolvedAddressException" />
+ <keyword match="UnresolvedPermission" />
+ <keyword match="UnsatisfiedLinkError" />
+ <keyword match="UnsolicitedNotification" />
+ <keyword match="UnsolicitedNotificationEvent" />
+ <keyword match="UnsolicitedNotificationListener" />
+ <keyword match="UNSUPPORTED_POLICY" />
+ <keyword match="UNSUPPORTED_POLICY_VALUE" />
+ <keyword match="UnsupportedAddressTypeException" />
+ <keyword match="UnsupportedAudioFileException" />
+ <keyword match="UnsupportedCallbackException" />
+ <keyword match="UnsupportedCharsetException" />
+ <keyword match="UnsupportedClassVersionError" />
+ <keyword match="UnsupportedEncodingException" />
+ <keyword match="UnsupportedFlavorException" />
+ <keyword match="UnsupportedLookAndFeelException" />
+ <keyword match="UnsupportedOperationException" />
+ <keyword match="URI" />
+ <keyword match="URIException" />
+ <keyword match="URIResolver" />
+ <keyword match="URISyntax" />
+ <keyword match="URISyntaxException" />
+ <keyword match="URL" />
+ <keyword match="URLClassLoader" />
+ <keyword match="URLConnection" />
+ <keyword match="URLDecoder" />
+ <keyword match="URLEncoder" />
+ <keyword match="URLStreamHandler" />
+ <keyword match="URLStreamHandlerFactory" />
+ <keyword match="URLStringHelper" />
+ <keyword match="USER_EXCEPTION" />
+ <keyword match="UserException" />
+ <keyword match="UShortSeqHelper" />
+ <keyword match="UShortSeqHolder" />
+ <keyword match="UTFDataFormatException" />
+ <keyword match="Util" />
+ <keyword match="UtilDelegate" />
+ <keyword match="Utilities" />
+ <keyword match="ValueBase" />
+ <keyword match="ValueBaseHelper" />
+ <keyword match="ValueBaseHolder" />
+ <keyword match="ValueFactory" />
+ <keyword match="ValueHandler" />
+ <keyword match="ValueMember" />
+ <keyword match="ValueMemberHelper" />
+ <keyword match="VariableHeightLayoutCache" />
+ <keyword match="Vector" />
+ <keyword match="VerifyError" />
+ <keyword match="VersionSpecHelper" />
+ <keyword match="VetoableChangeListener" />
+ <keyword match="VetoableChangeListenerProxy" />
+ <keyword match="VetoableChangeSupport" />
+ <keyword match="View" />
+ <keyword match="ViewFactory" />
+ <keyword match="ViewportLayout" />
+ <keyword match="ViewportUI" />
+ <keyword match="VirtualMachineError" />
+ <keyword match="Visibility" />
+ <keyword match="VisibilityHelper" />
+ <keyword match="VM_ABSTRACT" />
+ <keyword match="VM_CUSTOM" />
+ <keyword match="VM_NONE" />
+ <keyword match="VM_TRUNCATABLE" />
+ <keyword match="VMID" />
+ <keyword match="VoiceStatus" />
+ <keyword match="Void" />
+ <keyword match="VolatileImage" />
+ <keyword match="WCharSeqHelper" />
+ <keyword match="WCharSeqHolder" />
+ <keyword match="WeakHashMap" />
+ <keyword match="WeakReference" />
+ <keyword match="Window" />
+ <keyword match="WindowAdapter" />
+ <keyword match="WindowConstants" />
+ <keyword match="WindowEvent" />
+ <keyword match="WindowFocusListener" />
+ <keyword match="WindowListener" />
+ <keyword match="WindowStateListener" />
+ <keyword match="WrappedPlainView" />
+ <keyword match="WritableByteChannel" />
+ <keyword match="WritableRaster" />
+ <keyword match="WritableRenderedImage" />
+ <keyword match="WriteAbortedException" />
+ <keyword match="Writer" />
+ <keyword match="WrongAdapter" />
+ <keyword match="WrongAdapterHelper" />
+ <keyword match="WrongPolicy" />
+ <keyword match="WrongPolicyHelper" />
+ <keyword match="WrongTransaction" />
+ <keyword match="WrongTransactionHelper" />
+ <keyword match="WrongTransactionHolder" />
+ <keyword match="WStringSeqHelper" />
+ <keyword match="WStringSeqHolder" />
+ <keyword match="WStringValueHelper" />
+ <keyword match="X500Principal" />
+ <keyword match="X500PrivateCredential" />
+ <keyword match="X509Certificate" />
+ <keyword match="X509Certificate" />
+ <keyword match="X509CertSelector" />
+ <keyword match="X509CRL" />
+ <keyword match="X509CRLEntry" />
+ <keyword match="X509CRLSelector" />
+ <keyword match="X509EncodedKeySpec" />
+ <keyword match="X509Extension" />
+ <keyword match="X509KeyManager" />
+ <keyword match="X509TrustManager" />
+ <keyword match="XAConnection" />
+ <keyword match="XADataSource" />
+ <keyword match="XAException" />
+ <keyword match="XAResource" />
+ <keyword match="Xid" />
+ <keyword match="XMLDecoder" />
+ <keyword match="XMLEncoder" />
+ <keyword match="XMLFilter" />
+ <keyword match="XMLFilterImpl" />
+ <keyword match="XMLFormatter" />
+ <keyword match="XMLReader" />
+ <keyword match="XMLReaderAdapter" />
+ <keyword match="XMLReaderFactory" />
+ <keyword match="ZipEntry" />
+ <keyword match="ZipException" />
+ <keyword match="ZipFile" />
+ <keyword match="ZipInputStream" />
+ <keyword match="ZipOutputStream" />
+ <keyword match="ZoneView" />
+ <keyword match="_BindingIteratorImplBase" />
+ <keyword match="_BindingIteratorStub" />
+ <keyword match="_DynAnyFactoryStub" />
+ <keyword match="_DynAnyStub" />
+ <keyword match="_DynArrayStub" />
+ <keyword match="_DynEnumStub" />
+ <keyword match="_DynFixedStub" />
+ <keyword match="_DynSequenceStub" />
+ <keyword match="_DynStructStub" />
+ <keyword match="_DynUnionStub" />
+ <keyword match="_DynValueStub" />
+ <keyword match="_IDLTypeStub" />
+ <keyword match="_NamingContextExtStub" />
+ <keyword match="_NamingContextImplBase" />
+ <keyword match="_NamingContextStub" />
+ <keyword match="_PolicyStub" />
+ <keyword match="_Remote_Stub" />
+ <keyword match="_ServantActivatorStub" />
+ <keyword match="_ServantLocatorStub" />
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/javascript.xml b/library/Text_Highlighter/javascript.xml
new file mode 100644
index 000000000..e478515a7
--- /dev/null
+++ b/library/Text_Highlighter/javascript.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0"?>
+<!-- $Id: javascript.xml,v 1.3 2008-01-01 23:43:36 ssttoo Exp $ -->
+
+<highlight lang="javascript" case = "no">
+
+ <authors>
+ <author name="Andrey Demenev" email ="demenev@gmail.com"/>
+ </authors>
+
+ <default innerClass="code" />
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+
+ <region name="mlcomment" innerClass="comment" start="\/\*" end="\*\/" >
+ <contains block="cvstag"/>
+ </region>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;"/>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'" />
+
+ <block name="escaped" match="\\\\|\\&quot;|\\'|\\`" innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ </block>
+
+ <block name="descaped" match="\\\\|\\&quot;|\\'|\\`|\\t|\\n|\\r" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ </block>
+
+ <region name="comment" start="\/\/" end="/$/m" innerClass="comment">
+ <contains block="cvstag"/>
+ </region>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <block name="number" match="0x\d*|\d*\.?\d+" innerClass="number"/>
+
+
+ <block name="url" match="((https?|ftp):\/\/[\w\?\.\-\&amp;=\/%+]+)|(^|[\s,!?])www\.\w+\.\w+[\w\?\.\&amp;=\/%+]*" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="email" match="\w+[\.\w\-]+@(\w+[\.\w\-])+" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="note" match="\b(note|fixme):" innerClass="inlinedoc" contained="yes" case="no">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+
+ <block name="cvstag" match="\$\w+:.+\$" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <keywords name="builtin" inherits="identifier" innerClass="builtin" case = "yes">
+ <keyword match="String"/>
+ <keyword match="Array"/>
+ <keyword match="RegExp"/>
+ <keyword match="Function"/>
+ <keyword match="Math"/>
+ <keyword match="Number"/>
+ <keyword match="Date"/>
+ <keyword match="Image"/>
+ <keyword match="window"/>
+ <keyword match="document"/>
+ <keyword match="navigator"/>
+ <keyword match="onAbort"/>
+ <keyword match="onBlur"/>
+ <keyword match="onChange"/>
+ <keyword match="onClick"/>
+ <keyword match="onDblClick"/>
+ <keyword match="onDragDrop"/>
+ <keyword match="onError"/>
+ <keyword match="onFocus"/>
+ <keyword match="onKeyDown"/>
+ <keyword match="onKeyPress"/>
+ <keyword match="onKeyUp"/>
+ <keyword match="onLoad"/>
+ <keyword match="onMouseDown"/>
+ <keyword match="onMouseOver"/>
+ <keyword match="onMouseOut"/>
+ <keyword match="onMouseMove"/>
+ <keyword match="onMouseUp"/>
+ <keyword match="onMove"/>
+ <keyword match="onReset"/>
+ <keyword match="onResize"/>
+ <keyword match="onSelect"/>
+ <keyword match="onSubmit"/>
+ <keyword match="onUnload"/>
+ </keywords>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="break"/>
+ <keyword match="continue"/>
+ <keyword match="do"/>
+ <keyword match="while"/>
+ <keyword match="do"/>
+ <keyword match="export"/>
+ <keyword match="for"/>
+ <keyword match="in"/>
+ <keyword match="if"/>
+ <keyword match="else"/>
+ <keyword match="import"/>
+ <keyword match="return"/>
+ <keyword match="label"/>
+ <keyword match="switch"/>
+ <keyword match="case"/>
+ <keyword match="var"/>
+ <keyword match="with"/>
+ <keyword match="delete"/>
+ <keyword match="new"/>
+ <keyword match="this"/>
+ <keyword match="typeof"/>
+ <keyword match="void"/>
+ <keyword match="abstract"/>
+ <keyword match="boolean"/>
+ <keyword match="byte"/>
+ <keyword match="catch"/>
+ <keyword match="char"/>
+ <keyword match="class"/>
+ <keyword match="const"/>
+ <keyword match="continue"/>
+ <keyword match="debugger"/>
+ <keyword match="default"/>
+ <keyword match="double"/>
+ <keyword match="enum"/>
+ <keyword match="extends"/>
+ <keyword match="false"/>
+ <keyword match="final"/>
+ <keyword match="finally"/>
+ <keyword match="float"/>
+ <keyword match="function"/>
+ <keyword match="implements"/>
+ <keyword match="goto"/>
+ <keyword match="in"/>
+ <keyword match="instanceof"/>
+ <keyword match="int"/>
+ <keyword match="interface"/>
+ <keyword match="long"/>
+ <keyword match="native"/>
+ <keyword match="null"/>
+ <keyword match="package"/>
+ <keyword match="private"/>
+ <keyword match="protected"/>
+ <keyword match="public"/>
+ <keyword match="short"/>
+ <keyword match="static"/>
+ <keyword match="super"/>
+ <keyword match="synchronized"/>
+ <keyword match="throw"/>
+ <keyword match="throws"/>
+ <keyword match="transient"/>
+ <keyword match="true"/>
+ <keyword match="try"/>
+ <keyword match="volatile"/>
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/mysql.xml b/library/Text_Highlighter/mysql.xml
new file mode 100644
index 000000000..082b62795
--- /dev/null
+++ b/library/Text_Highlighter/mysql.xml
@@ -0,0 +1,424 @@
+<?xml version="1.0"?>
+<!-- $Id: mysql.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="mysql" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+ <region name="qidentifier" delimClass="quotes" innerClass="identifier"
+ start="`" end="`" />
+
+ <region name="mlcomment" delimClass="comment" innerClass="comment"
+ start="\/\*" end="\*\/" />
+
+ <block name="comment" match="(#|--\s).*" innerClass="comment" />
+
+ <block name="possiblefunction" match="[a-z_]\w*(?=\s*\()" innerClass="identifier" />
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" />
+
+ <region name="strdouble" delimClass="quotes" innerClass="string"
+ start="&quot;" end="&quot;" >
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code"
+ start="\(" end="\)" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string"
+ start="'" end="'" />
+
+ <block name="escaped" match="\\." innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ <onlyin region="strdouble"/>
+ </block>
+
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" />
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+ <block name="integer" match="\d+l?|\b0l?\b" innerClass="number" />
+
+ <block name="hexinteger" match="0[xX][\da-f]+l?" innerClass="number" />
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved"
+ case="no">
+ <keyword match="action" />
+ <keyword match="add" />
+ <keyword match="aggregate" />
+ <keyword match="all" />
+ <keyword match="alter" />
+ <keyword match="after" />
+ <keyword match="and" />
+ <keyword match="as" />
+ <keyword match="asc" />
+ <keyword match="avg" />
+ <keyword match="avg_row_length" />
+ <keyword match="auto_increment" />
+ <keyword match="between" />
+ <keyword match="bigint" />
+ <keyword match="bit" />
+
+ <keyword match="binary" />
+ <keyword match="blob" />
+ <keyword match="bool" />
+ <keyword match="both" />
+ <keyword match="by" />
+ <keyword match="cascade" />
+ <keyword match="case" />
+ <keyword match="char" />
+ <keyword match="character" />
+ <keyword match="change" />
+ <keyword match="check" />
+ <keyword match="checksum" />
+ <keyword match="column" />
+ <keyword match="columns" />
+ <keyword match="comment" />
+ <keyword match="constraint" />
+ <keyword match="create" />
+
+ <keyword match="cross" />
+ <keyword match="current_date" />
+ <keyword match="current_time" />
+ <keyword match="current_timestamp" />
+ <keyword match="data" />
+ <keyword match="database" />
+ <keyword match="databases" />
+ <keyword match="date" />
+ <keyword match="datetime" />
+ <keyword match="day" />
+ <keyword match="day_hour" />
+ <keyword match="day_minute" />
+ <keyword match="day_second" />
+ <keyword match="dayofmonth" />
+ <keyword match="dayofweek" />
+ <keyword match="dayofyear" />
+ <keyword match="dec" />
+
+ <keyword match="decimal" />
+ <keyword match="default" />
+ <keyword match="delayed" />
+ <keyword match="delay_key_write" />
+ <keyword match="delete" />
+ <keyword match="desc" />
+ <keyword match="describe" />
+ <keyword match="distinct" />
+ <keyword match="distinctrow" />
+ <keyword match="double" />
+ <keyword match="drop" />
+ <keyword match="end" />
+ <keyword match="else" />
+ <keyword match="escape" />
+ <keyword match="escaped" />
+ <keyword match="enclosed" />
+ <keyword match="enum" />
+
+ <keyword match="explain" />
+ <keyword match="exists" />
+ <keyword match="fields" />
+ <keyword match="file" />
+ <keyword match="first" />
+ <keyword match="float" />
+ <keyword match="float4" />
+ <keyword match="float8" />
+ <keyword match="flush" />
+ <keyword match="foreign" />
+ <keyword match="from" />
+ <keyword match="for" />
+ <keyword match="full" />
+ <keyword match="function" />
+ <keyword match="global" />
+ <keyword match="grant" />
+ <keyword match="grants" />
+
+ <keyword match="group" />
+ <keyword match="having" />
+ <keyword match="heap" />
+ <keyword match="high_priority" />
+ <keyword match="hour" />
+ <keyword match="hour_minute" />
+ <keyword match="hour_second" />
+ <keyword match="hosts" />
+ <keyword match="identified" />
+ <keyword match="ignore" />
+ <keyword match="in" />
+ <keyword match="index" />
+ <keyword match="infile" />
+ <keyword match="inner" />
+ <keyword match="insert" />
+ <keyword match="insert_id" />
+ <keyword match="int" />
+
+ <keyword match="integer" />
+ <keyword match="interval" />
+ <keyword match="int1" />
+ <keyword match="int2" />
+ <keyword match="int3" />
+ <keyword match="int4" />
+ <keyword match="int8" />
+ <keyword match="into" />
+ <keyword match="if" />
+ <keyword match="is" />
+ <keyword match="isam" />
+ <keyword match="join" />
+ <keyword match="key" />
+ <keyword match="keys" />
+ <keyword match="kill" />
+ <keyword match="last_insert_id" />
+ <keyword match="leading" />
+
+ <keyword match="left" />
+ <keyword match="length" />
+ <keyword match="like" />
+ <keyword match="lines" />
+ <keyword match="limit" />
+ <keyword match="load" />
+ <keyword match="local" />
+ <keyword match="lock" />
+ <keyword match="logs" />
+ <keyword match="long" />
+ <keyword match="longblob" />
+ <keyword match="longtext" />
+ <keyword match="low_priority" />
+ <keyword match="max" />
+ <keyword match="max_rows" />
+ <keyword match="match" />
+ <keyword match="mediumblob" />
+
+ <keyword match="mediumtext" />
+ <keyword match="mediumint" />
+ <keyword match="middleint" />
+ <keyword match="min_rows" />
+ <keyword match="minute" />
+ <keyword match="minute_second" />
+ <keyword match="modify" />
+ <keyword match="month" />
+ <keyword match="monthname" />
+ <keyword match="myisam" />
+ <keyword match="natural" />
+ <keyword match="numeric" />
+ <keyword match="no" />
+ <keyword match="not" />
+ <keyword match="null" />
+ <keyword match="on" />
+ <keyword match="optimize" />
+
+ <keyword match="option" />
+ <keyword match="optionally" />
+ <keyword match="or" />
+ <keyword match="order" />
+ <keyword match="outer" />
+ <keyword match="outfile" />
+ <keyword match="pack_keys" />
+ <keyword match="partial" />
+ <keyword match="password" />
+ <keyword match="precision" />
+ <keyword match="primary" />
+ <keyword match="procedure" />
+ <keyword match="process" />
+ <keyword match="processlist" />
+ <keyword match="privileges" />
+ <keyword match="read" />
+ <keyword match="real" />
+
+ <keyword match="references" />
+ <keyword match="reload" />
+ <keyword match="regexp" />
+ <keyword match="rename" />
+ <keyword match="replace" />
+ <keyword match="restrict" />
+ <keyword match="returns" />
+ <keyword match="revoke" />
+ <keyword match="rlike" />
+ <keyword match="row" />
+ <keyword match="rows" />
+ <keyword match="second" />
+ <keyword match="select" />
+ <keyword match="set" />
+ <keyword match="show" />
+ <keyword match="shutdown" />
+ <keyword match="smallint" />
+
+ <keyword match="soname" />
+ <keyword match="sql_big_tables" />
+ <keyword match="sql_big_selects" />
+ <keyword match="sql_low_priority_updates" />
+ <keyword match="sql_log_off" />
+ <keyword match="sql_log_update" />
+ <keyword match="sql_select_limit" />
+ <keyword match="sql_small_result" />
+ <keyword match="sql_big_result" />
+ <keyword match="sql_warnings" />
+ <keyword match="straight_join" />
+ <keyword match="starting" />
+ <keyword match="status" />
+ <keyword match="string" />
+ <keyword match="table" />
+ <keyword match="tables" />
+ <keyword match="temporary" />
+
+ <keyword match="terminated" />
+ <keyword match="text" />
+ <keyword match="then" />
+ <keyword match="time" />
+ <keyword match="timestamp" />
+ <keyword match="tinyblob" />
+ <keyword match="tinytext" />
+ <keyword match="tinyint" />
+ <keyword match="trailing" />
+ <keyword match="to" />
+ <keyword match="type" />
+ <keyword match="use" />
+ <keyword match="using" />
+ <keyword match="unique" />
+ <keyword match="unlock" />
+ <keyword match="unsigned" />
+ <keyword match="update" />
+
+ <keyword match="usage" />
+ <keyword match="values" />
+ <keyword match="varchar" />
+ <keyword match="variables" />
+ <keyword match="varying" />
+ <keyword match="varbinary" />
+ <keyword match="with" />
+ <keyword match="write" />
+ <keyword match="when" />
+ <keyword match="where" />
+ <keyword match="year" />
+ <keyword match="year_month" />
+ <keyword match="zerofill" />
+ </keywords>
+
+ <keywords name="function" inherits="possiblefunction" innerClass="reserved"
+ case="no" otherwise="identifier">
+ <keyword match="ABS" />
+ <keyword match="ACOS" />
+ <keyword match="ADDDATE" />
+ <keyword match="ASCII" />
+ <keyword match="ASIN" />
+ <keyword match="ATAN" />
+ <keyword match="ATAN2" />
+ <keyword match="AVG" />
+ <keyword match="BENCHMARK" />
+ <keyword match="BIN" />
+ <keyword match="CEILING" />
+ <keyword match="CHAR" />
+ <keyword match="COALESCE" />
+ <keyword match="CONCAT" />
+ <keyword match="CONV" />
+ <keyword match="COS" />
+ <keyword match="COT" />
+ <keyword match="COUNT" />
+ <keyword match="CURDATE" />
+ <keyword match="CURTIME" />
+ <keyword match="DATABASE" />
+ <keyword match="DAYNAME" />
+ <keyword match="DAYOFMONTH" />
+ <keyword match="DAYOFWEEK" />
+ <keyword match="DAYOFYEAR" />
+ <keyword match="DECODE" />
+ <keyword match="DEGREES" />
+ <keyword match="ELT" />
+
+ <keyword match="ENCODE" />
+ <keyword match="ENCRYPT" />
+ <keyword match="EXP" />
+ <keyword match="EXTRACT" />
+
+ <keyword match="EXTRACT" />
+ <keyword match="FIELD" />
+ <keyword match="FLOOR" />
+ <keyword match="FORMAT" />
+ <keyword match="GREATEST" />
+ <keyword match="HEX" />
+ <keyword match="HOUR" />
+ <keyword match="IF" />
+ <keyword match="IFNULL" />
+ <keyword match="INSERT" />
+ <keyword match="INSTR" />
+ <keyword match="INTERVAL" />
+
+ <keyword match="ISNULL" />
+ <keyword match="LCASE" />
+ <keyword match="LEAST" />
+ <keyword match="LEFT" />
+ <keyword match="LENGTH" />
+ <keyword match="LOCATE" />
+
+ <keyword match="LOCATE" />
+ <keyword match="LOG" />
+ <keyword match="LOG10" />
+ <keyword match="LOWER" />
+ <keyword match="LPAD" />
+ <keyword match="LTRIM" />
+ <keyword match="MAX" />
+ <keyword match="MD5" />
+ <keyword match="MID" />
+ <keyword match="MIN" />
+
+ <keyword match="MINUTE" />
+ <keyword match="MOD" />
+ <keyword match="MONTH" />
+ <keyword match="MONTHNAME" />
+ <keyword match="NOW" />
+ <keyword match="NULLIF" />
+ <keyword match="OCT" />
+ <keyword match="ORD" />
+ <keyword match="PASSWORD" />
+ <keyword match="PI" />
+ <keyword match="POSITION" />
+
+ <keyword match="POW" />
+ <keyword match="POWER" />
+ <keyword match="prepare" />
+ <keyword match="QUARTER" />
+ <keyword match="RADIANS" />
+ <keyword match="RAND" />
+ <keyword match="REPEAT" />
+ <keyword match="REPLACE" />
+ <keyword match="REVERSE" />
+ <keyword match="RIGHT" />
+ <keyword match="ROUND" />
+
+ <keyword match="ROUND" />
+ <keyword match="RPAD" />
+
+ <keyword match="RTRIM" />
+ <keyword match="SECOND" />
+ <keyword match="SIGN" />
+ <keyword match="SIN" />
+ <keyword match="SOUNDEX" />
+ <keyword match="SPACE" />
+ <keyword match="SQRT" />
+ <keyword match="STD" />
+ <keyword match="STDDEV" />
+ <keyword match="STRCMP" />
+ <keyword match="SUBDATE" />
+ <keyword match="SUBSTRING" />
+
+ <keyword match="SUBSTRING" />
+ <keyword match="SUM" />
+ <keyword match="SYSDATE" />
+ <keyword match="TAN" />
+
+ <keyword match="TRIM" />
+ <keyword match="TRUNCATE" />
+ <keyword match="UCASE" />
+ <keyword match="UPPER" />
+ <keyword match="USER" />
+ <keyword match="VERSION" />
+ <keyword match="WEEK" />
+ <keyword match="WEEKDAY" />
+ <keyword match="YEAR" />
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/perl.xml b/library/Text_Highlighter/perl.xml
new file mode 100644
index 000000000..54f8835ea
--- /dev/null
+++ b/library/Text_Highlighter/perl.xml
@@ -0,0 +1,439 @@
+<?xml version="1.0"?>
+<!-- $Id: perl.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="perl" case = "yes">
+
+ <authors>
+ <author name="Mariusz 'kg' Jakubowski" email="kg@alternatywa.info" jid="kg@chrome.pl"/>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+ <comment>This highlighter is EXPERIMENTAL, so that it may work incorrectly.
+Most rules were created by Mariusz Jakubowski, and extended by me.
+My knowledge of Perl is poor, and Perl syntax seems too
+complicated to me.</comment>
+
+ <default innerClass="code"/>
+
+ <block name="interpreter" match="/^(#!)(.*)/m" innerClass="special">
+ <partClass index="1" innerClass="special" />
+ <partClass index="2" innerClass="string" />
+ </block>
+
+ <region name="pod" innerClass="comment" start="/^=\w+/m" end="/^=cut[^\n]*/m" startBOL="yes" endBOL="yes"/>
+
+ <!--
+ brackets
+ -->
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+ <!--
+ use smth
+ -->
+ <block name="usestatement" match="(use)\s+([\w:]*)" innerClass="special">
+ <partClass index="1" innerClass="reserved" />
+ <partClass index="2" innerClass="special" />
+ </block>
+
+ <block name="packagereference" match="[&amp; ](\w{2,}::)+\w{2,}" innerClass="special"/>
+
+ <region name="q-w-q-statement"
+ start="/\b(q[wq]\s*((\{)|(\()|(\[)|(\&lt;)|([\W\S])))(?=(.*)((?(3)\})(?(4)\))(?(5)\])(?(6)\&gt;)(?(7)\7)))/Us"
+ end="%b2%"
+ innerClass="string" delimClass="quotes" remember="yes">
+
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+
+ </region>
+
+ <region name="qstatement"
+ start="/\b(q\s*((\{)|(\()|(\[)|(\&lt;)|([\W\S])))(?=(.*)((?(3)\})(?(4)\))(?(5)\])(?(6)\&gt;)(?(7)\7)))/Us"
+ end="%b2%"
+ innerClass="string" delimClass="quotes" remember="yes">
+
+ </region>
+
+ <!--
+ comments
+ -->
+ <block name="comment" match="#.*" innerClass="comment" />
+
+
+ <!--
+ regexpr
+ FIXME: this should be rewrited
+ -->
+ <block name="dblregexprver1" match="/(s|tr) ([|#~`!@$%^&amp;*-+=\\;:'&quot;,.\/?]) ((\\.|[^\\])*?) (\2)((\\.|[^\\])*?)(\2[ecgimosx]*)/x" innerClass="string">
+ <partClass index="1" innerClass="quotes" />
+ <partClass index="2" innerClass="quotes" />
+ <partClass index="3" innerClass="string" />
+ <partClass index="5" innerClass="quotes" />
+ <partClass index="6" innerClass="string" />
+ <partClass index="8" innerClass="quotes" />
+ </block>
+
+ <block name="dblregexprver2" match="/(m) ([|#~`!@$%^&amp;*-+=\\;:'&quot;,.\/?]) ((\\.|[^\\])*?) (\2[ecgimosx]*)/x" innerClass="string">
+ <partClass index="1" innerClass="quotes" />
+ <partClass index="2" innerClass="quotes" />
+ <partClass index="3" innerClass="string" />
+ <partClass index="5" innerClass="quotes" />
+ </block>
+
+
+ <region name="regexp" start=" \/" end="\/[cgimosx]*" innerClass="string" delimClass="quotes" case="yes">
+ <contains block="reescaped"/>
+ </region>
+
+ <block name="reescaped" match="\\\/" innerClass="string" contained="yes">
+ <onlyin region="regexp"/>
+ </block>
+
+ <!--
+ variables
+ FIXME: @{...}
+ -->
+ <block name="bracketsvars" match="([a-z1-9_]+)(\s*=>)" innerClass="string" contained="yes" case="no">
+ <partClass index="1" innerClass="string" />
+ <partClass index="2" innerClass="code" />
+ <onlyin region="brackets"/>
+ </block>
+
+ <block name="specialvar" match="\$#?[1-9'`@!]" innerClass="var"/>
+
+ <block name="var" match="(\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\^(?-i)[A-Z]?(?i))" innerClass="var" case="no"/>
+ <block name="containedvar" match="\$([a-z1-9_]+|\^(?-i)[A-Z]?(?i))" innerClass="var" case="no"/>
+
+ <!-- not shure what is this, but the Perlers do it :) -->
+ <block name="var2" match="(&amp;|\w+)'[\w_']+\b" innerClass="var" case="no"/>
+
+ <block name="classvar" match="(\{)([a-z1-9]+)(\})" innerClass="var" case="no">
+ <partClass index="1" innerClass="brackets" />
+ <partClass index="2" innerClass="var" />
+ <partClass index="3" innerClass="brackets" />
+ </block>
+
+ <block name="curlyvar" match="[\$@%]#?\{[a-z1-9]+\}" innerClass="var" case="no"/>
+
+ <!--
+ quotes
+ -->
+ <region name="exec" delimClass="quotes" innerClass="string" start="`" end="`">
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'"/>
+
+ <block name="escaped" match="\\\\|\\&quot;|\\'|\\`" innerClass="special" contained="yes">
+ <onlyin region="qstatement"/>
+ <onlyin region="strsingle"/>
+ <onlyin region="exec"/>
+ </block>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;">
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+ </region>
+
+ <block name="descaped" match="\\[\\&quot;'`tnr\$\{@]" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ <onlyin region="q-w-q-statement"/>
+ </block>
+
+ <!-- logical op.
+ <block name="logic" match="\|\||&amp;&amp;" innerClass="reserved" contained="yes"/>-->
+
+ <!--
+ identifiers
+ -->
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <!--
+ numbers
+ -->
+ <block name="number" match="\d*\.?\d+" innerClass="number"/>
+
+ <!--
+ http://www.perldoc.com/perl5.6/pod/perlfunc.html
+ Alphabetical Listing of Perl Functions
+ -->
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="abs"/>
+ <keyword match="accept"/>
+ <keyword match="alarm"/>
+ <keyword match="atan2"/>
+
+ <keyword match="bind"/>
+ <keyword match="binmode"/>
+ <keyword match="bless"/>
+
+ <keyword match="caller"/>
+ <keyword match="chdir"/>
+ <keyword match="chmod"/>
+ <keyword match="chomp"/>
+ <keyword match="chop"/>
+ <keyword match="chown"/>
+ <keyword match="chr"/>
+ <keyword match="chroot"/>
+ <keyword match="close"/>
+ <keyword match="closedir"/>
+ <keyword match="connect"/>
+ <keyword match="continue"/>
+ <keyword match="cos"/>
+ <keyword match="crypt"/>
+
+ <keyword match="dbmclose"/>
+ <keyword match="dbmopen"/>
+ <keyword match="defined"/>
+ <keyword match="delete"/>
+ <keyword match="die"/>
+ <keyword match="do"/>
+ <keyword match="dump"/>
+
+ <keyword match="each"/>
+ <keyword match="endgrent"/>
+ <keyword match="endhostent"/>
+ <keyword match="endnetent"/>
+ <keyword match="endprotoent"/>
+ <keyword match="endpwent"/>
+ <keyword match="endservent"/>
+ <keyword match="eof"/>
+ <keyword match="eval"/>
+ <keyword match="exec"/>
+ <keyword match="exists"/>
+ <keyword match="exit"/>
+ <keyword match="exp"/>
+
+ <keyword match="fcntl"/>
+ <keyword match="fileno"/>
+ <keyword match="flock"/>
+ <keyword match="fork"/>
+ <keyword match="format"/>
+ <keyword match="formline"/>
+
+ <keyword match="getc"/>
+ <keyword match="getgrent"/>
+ <keyword match="getgrgid"/>
+ <keyword match="getgrnam"/>
+ <keyword match="gethostbyaddr"/>
+ <keyword match="gethostbyname"/>
+ <keyword match="gethostent"/>
+ <keyword match="getlogin"/>
+ <keyword match="getnetbyaddr"/>
+ <keyword match="getnetbyname"/>
+ <keyword match="getnetent"/>
+ <keyword match="getpeername"/>
+ <keyword match="getpgrp"/>
+ <keyword match="getppid"/>
+ <keyword match="getpriority"/>
+ <keyword match="getprotobyname"/>
+ <keyword match="getprotobynumber"/>
+ <keyword match="getprotoent"/>
+ <keyword match="getpwent"/>
+ <keyword match="getpwnam"/>
+ <keyword match="getpwuid"/>
+ <keyword match="getservbyname"/>
+ <keyword match="getservbyport"/>
+ <keyword match="getservent"/>
+ <keyword match="getsockname"/>
+ <keyword match="getsockopt"/>
+ <keyword match="glob"/>
+ <keyword match="gmtime"/>
+ <keyword match="goto"/>
+ <keyword match="grep"/>
+
+ <keyword match="hex"/>
+
+ <keyword match="import"/>
+ <keyword match="index"/>
+ <keyword match="int"/>
+ <keyword match="ioctl"/>
+
+ <keyword match="join"/>
+
+ <keyword match="keys"/>
+ <keyword match="kill"/>
+
+ <keyword match="last"/>
+ <keyword match="lc"/>
+ <keyword match="lcfirst"/>
+ <keyword match="length"/>
+ <keyword match="link"/>
+ <keyword match="listen"/>
+ <keyword match="local"/>
+ <keyword match="localtime"/>
+ <keyword match="lock"/>
+ <keyword match="log"/>
+ <keyword match="lstat"/>
+
+ <!--<keyword match="m"/>-->
+ <keyword match="map"/>
+ <keyword match="mkdir"/>
+ <keyword match="msgctl"/>
+ <keyword match="msgget"/>
+ <keyword match="msgrcv"/>
+ <keyword match="msgsnd"/>
+ <keyword match="my"/>
+
+ <keyword match="next"/>
+ <keyword match="no"/>
+
+ <keyword match="oct"/>
+ <keyword match="open"/>
+ <keyword match="opendir"/>
+ <keyword match="ord"/>
+ <keyword match="our"/>
+
+ <keyword match="pack"/>
+ <keyword match="package"/>
+ <keyword match="pipe"/>
+ <keyword match="pop"/>
+ <keyword match="pos"/>
+ <keyword match="print"/>
+ <keyword match="printf"/>
+ <keyword match="prototype"/>
+ <keyword match="push"/>
+
+ <!--<keyword match="q"/>
+ <keyword match="qq"/>
+ <keyword match="qr"/>-->
+ <keyword match="quotemeta"/>
+ <!--<keyword match="qw"/>
+ <keyword match="qx"/>-->
+
+ <keyword match="rand"/>
+ <keyword match="read"/>
+ <keyword match="readdir"/>
+ <keyword match="readline"/>
+ <keyword match="readlink"/>
+ <keyword match="readpipe"/>
+ <keyword match="recv"/>
+ <keyword match="redo"/>
+ <keyword match="ref"/>
+ <keyword match="rename"/>
+ <keyword match="require"/>
+ <keyword match="reset"/>
+ <keyword match="return"/>
+ <keyword match="reverse"/>
+ <keyword match="rewinddir"/>
+ <keyword match="rindex"/>
+ <keyword match="rmdir"/>
+
+ <!--<keyword match="s"/>-->
+ <keyword match="scalar"/>
+ <keyword match="seek"/>
+ <keyword match="seekdir"/>
+ <keyword match="select"/>
+ <keyword match="semctl"/>
+ <keyword match="semget"/>
+ <keyword match="semop"/>
+ <keyword match="send"/>
+ <keyword match="setgrent"/>
+ <keyword match="sethostent"/>
+ <keyword match="setnetent"/>
+ <keyword match="setpgrp"/>
+ <keyword match="setpriority"/>
+ <keyword match="setprotoent"/>
+ <keyword match="setpwent"/>
+ <keyword match="setservent"/>
+ <keyword match="setsockopt"/>
+ <keyword match="shift"/>
+ <keyword match="shmctl"/>
+ <keyword match="shmget"/>
+ <keyword match="shmread"/>
+ <keyword match="shmwrite"/>
+ <keyword match="shutdown"/>
+ <keyword match="sin"/>
+ <keyword match="sleep"/>
+ <keyword match="socket"/>
+ <keyword match="socketpair"/>
+ <keyword match="sort"/>
+ <keyword match="splice"/>
+ <keyword match="split"/>
+ <keyword match="sprintf"/>
+ <keyword match="sqrt"/>
+ <keyword match="srand"/>
+ <keyword match="stat"/>
+ <keyword match="study"/>
+ <keyword match="sub"/>
+ <keyword match="substr"/>
+ <keyword match="symlink"/>
+ <keyword match="syscall"/>
+ <keyword match="sysopen"/>
+ <keyword match="sysread"/>
+ <keyword match="sysseek"/>
+ <keyword match="system"/>
+ <keyword match="syswrite"/>
+
+ <keyword match="tell"/>
+ <keyword match="telldir"/>
+ <keyword match="tie"/>
+ <keyword match="tied"/>
+ <keyword match="time"/>
+ <keyword match="times"/>
+ <!--<keyword match="tr"/>-->
+ <keyword match="truncate"/>
+
+ <keyword match="uc"/>
+ <keyword match="ucfirst"/>
+ <keyword match="umask"/>
+ <keyword match="undef"/>
+ <keyword match="unlink"/>
+ <keyword match="unpack"/>
+ <keyword match="unshift"/>
+ <keyword match="untie"/>
+ <keyword match="use"/>
+ <keyword match="utime"/>
+
+ <keyword match="values"/>
+ <keyword match="vec"/>
+
+ <keyword match="wait"/>
+ <keyword match="waitpid"/>
+ <keyword match="wantarray"/>
+ <keyword match="warn"/>
+ <keyword match="write"/>
+
+ <keyword match="y"/>
+ </keywords>
+
+ <keywords name="missingreserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="new"/>
+ </keywords>
+
+
+ <keywords name="flowcontrol" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="if"/>
+ <keyword match="else"/>
+ <keyword match="elsif"/>
+ <keyword match="while"/>
+ <keyword match="unless"/>
+ <keyword match="for"/>
+ <keyword match="foreach"/>
+ <keyword match="until"/>
+ <keyword match="do"/>
+ <keyword match="continue"/>
+ <keyword match="not"/>
+ <keyword match="or"/>
+ <keyword match="and"/>
+ <keyword match="eq"/>
+ <keyword match="ne"/>
+ <keyword match="gt"/>
+ <keyword match="lt"/>
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/php.xml b/library/Text_Highlighter/php.xml
new file mode 100644
index 000000000..1b08ea203
--- /dev/null
+++ b/library/Text_Highlighter/php.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0"?>
+<!-- $Id: php.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="php">
+
+ <authors>
+ <author name="Andrey Demenev" email ="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+ <region name="phpCode" delimClass="inlinetags" innerClass="code"
+ start="\&lt;\?(php|=)?" end="\?\>" never-contained="yes">
+ <contains all="yes"/>
+ </region>
+
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}" contained="yes">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)" contained="yes" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]" contained="yes">
+ <contains all="yes"/>
+ </region>
+
+
+ <region name="mlcomment" innerClass="comment" start="\/\*" end="\*\/" contained="yes">
+ <contains block="phpdoc"/>
+ <contains block="cvstag"/>
+ </region>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;" contained="yes">
+ <contains block="var"/>
+ </region>
+
+ <region name="exec" delimClass="quotes" innerClass="string" start="`" end="`" contained="yes">
+ <contains block="var"/>
+ </region>
+
+ <region name="heredoc" delimClass="quotes" innerClass="string" start="/\&lt;\&lt;\&lt;[\x20\x09]*(\w+)$/m" end="/^%1%;?$/m" contained="yes" remember="yes">
+ <contains block="var"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'" contained="yes"/>
+
+ <block name="escaped" match="\\\\|\\&quot;|\\'|\\`" innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ <onlyin region="exec"/>
+ </block>
+
+ <block name="descaped" match="\\[\\&quot;'`tnr\$\{]" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ <onlyin region="heredoc"/>
+ </block>
+
+
+ <region name="comment" start="(#|\/\/)" end="/$|(?=\?\>)/m" innerClass="comment" contained="yes">
+ <contains block="cvstag"/>
+ </region>
+
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" contained="yes"/>
+
+ <block name="typecast" match="\((array|int|integer|string|bool|boolean|object|float|double)\)" innerClass="reserved" contained="yes"/>
+
+ <block name="curlyvar" match="\{\$[a-z_].*\}" innerClass="var" contained="yes">
+ <onlyin region="strdouble"/>
+ <onlyin region="heredoc"/>
+ <onlyin region="exec"/>
+ </block>
+
+ <region name="codeescape" delimClass="inlinetags" innerClass="default" end="\&lt;\?(php|=)?" start="\?\>" contained="yes">
+ <onlyin region="block"/>
+ </region>
+
+ <block name="hexinteger" match="0[xX][\da-f]+" innerClass="number" contained="yes"/>
+ <block name="var" match="\$[a-z_]\w*" innerClass="var" contained="yes"/>
+
+ <block name="integer" match="\d\d*|\b0\b" innerClass="number" contained="yes"/>
+
+
+ <block name="octinteger" match="0[0-7]+" innerClass="number" contained="yes"/>
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number" contained="yes"/>
+
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" contained="yes"/>
+
+ <block name="phpdoc" match="\s@\w+\s" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="url" match="((https?|ftp):\/\/[\w\?\.\-\&amp;=\/%+]+)|(^|[\s,!?])www\.\w+\.\w+[\w\?\.\&amp;=\/%+]*" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="email" match="\w+[\.\w\-]+@(\w+[\.\w\-])+" innerClass="url" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="note" match="\bnote:" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+
+ <block name="cvstag" match="\$\w+\s*:.*\$" innerClass="inlinedoc" contained="yes">
+ <onlyin region="mlcomment"/>
+ <onlyin region="comment"/>
+ </block>
+
+ <keywords name="constants" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="DIRECTORY_SEPARATOR"/>
+ <keyword match="PATH_SEPARATOR"/>
+ </keywords>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved">
+ <keyword match="echo"/>
+ <keyword match="foreach"/>
+ <keyword match="else"/>
+ <keyword match="if"/>
+ <keyword match="elseif"/>
+ <keyword match="for"/>
+ <keyword match="as"/>
+ <keyword match="while"/>
+ <keyword match="foreach"/>
+ <keyword match="break"/>
+ <keyword match="continue"/>
+ <keyword match="class"/>
+ <keyword match="const"/>
+ <keyword match="declare"/>
+ <keyword match="switch"/>
+ <keyword match="case"/>
+ <keyword match="endfor"/>
+ <keyword match="endswitch"/>
+ <keyword match="endforeach"/>
+ <keyword match="endswitch"/>
+ <keyword match="endif"/>
+ <keyword match="array"/>
+ <keyword match="default"/>
+ <keyword match="do"/>
+ <keyword match="enddeclare"/>
+ <keyword match="eval"/>
+ <keyword match="exit"/>
+ <keyword match="die"/>
+ <keyword match="extends"/>
+ <keyword match="function"/>
+ <keyword match="global"/>
+ <keyword match="include"/>
+ <keyword match="include_once"/>
+ <keyword match="require"/>
+ <keyword match="require_once"/>
+ <keyword match="isset"/>
+ <keyword match="empty"/>
+ <keyword match="list"/>
+ <keyword match="new"/>
+ <keyword match="static"/>
+ <keyword match="unset"/>
+ <keyword match="var"/>
+ <keyword match="return"/>
+ <keyword match="try"/>
+ <keyword match="catch"/>
+ <keyword match="final"/>
+ <keyword match="throw"/>
+ <keyword match="public"/>
+ <keyword match="private"/>
+ <keyword match="protected"/>
+ <keyword match="abstract"/>
+ <keyword match="interface"/>
+ <keyword match="implements"/>
+ <keyword match="const"/>
+ <keyword match="define"/>
+ <keyword match="__FILE__"/>
+ <keyword match="__LINE__"/>
+ <keyword match="__CLASS__"/>
+ <keyword match="__METHOD__"/>
+ <keyword match="__FUNCTION__"/>
+ <keyword match="NULL"/>
+ <keyword match="true"/>
+ <keyword match="false"/>
+ <keyword match="and"/>
+ <keyword match="or"/>
+ <keyword match="xor"/>
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/python.xml b/library/Text_Highlighter/python.xml
new file mode 100644
index 000000000..29e77203c
--- /dev/null
+++ b/library/Text_Highlighter/python.xml
@@ -0,0 +1,229 @@
+<?xml version="1.0"?>
+<!-- $Id: python.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="python" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+ <default innerClass="code" />
+
+ <region name="strsingle3" delimClass="quotes" innerClass="string"
+ start="'''" end="'''" />
+
+ <region name="strdouble3" delimClass="quotes" innerClass="string"
+ start="&quot;&quot;&quot;" end="&quot;&quot;&quot;">
+ </region>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string"
+ start="&quot;" end="&quot;" >
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string"
+ start="'" end="'" />
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]" >
+ <contains all="yes"/>
+ </region>
+
+ <block name="escaped" match="\\." innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ <onlyin region="strsingle3"/>
+ <onlyin region="strdouble"/>
+ <onlyin region="strdouble3"/>
+ </block>
+
+ <block name="possiblefunction" match="[a-z_]\w*(?=\s*\()" innerClass="identifier" />
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" />
+
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" />
+
+ <block name="imaginary" match="((\d*\.\d+)|(\d+\.\d*)|(\d+))j" innerClass="number"/>
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+ <block name="integer" match="\d+l?|\b0l?\b" innerClass="number" />
+
+ <block name="hexinteger" match="0[xX][\da-f]+l?" innerClass="number" />
+
+ <block name="octinteger" match="0[0-7]+l?" innerClass="number" />
+
+ <block name="comment" innerClass="comment"
+ match="#.+" />
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="and"/>
+ <keyword match="del"/>
+ <keyword match="for"/>
+ <keyword match="is"/>
+ <keyword match="raise"/>
+ <keyword match="assert"/>
+ <keyword match="elif"/>
+ <keyword match="from"/>
+ <keyword match="lambda"/>
+ <keyword match="return"/>
+ <keyword match="break"/>
+ <keyword match="else"/>
+ <keyword match="global"/>
+ <keyword match="not"/>
+ <keyword match="try"/>
+ <keyword match="class"/>
+ <keyword match="except"/>
+ <keyword match="if"/>
+ <keyword match="or"/>
+ <keyword match="while"/>
+ <keyword match="continue"/>
+ <keyword match="exec"/>
+ <keyword match="import"/>
+ <keyword match="pass"/>
+ <keyword match="yield"/>
+ <keyword match="def"/>
+ <keyword match="finally"/>
+ <keyword match="in"/>
+ <keyword match="print"/>
+ <keyword match="False"/>
+ <keyword match="True"/>
+ <keyword match="None"/>
+ <keyword match="NotImplemented"/>
+ <keyword match="Ellipsis"/>
+
+ <keyword match="Exception" />
+ <keyword match="SystemExit" />
+ <keyword match="StopIteration" />
+ <keyword match="StandardError" />
+ <keyword match="KeyboardInterrupt" />
+ <keyword match="ImportError" />
+ <keyword match="EnvironmentError" />
+ <keyword match="IOError" />
+ <keyword match="OSError" />
+ <keyword match="WindowsError" />
+ <keyword match="EOFError" />
+ <keyword match="RuntimeError" />
+ <keyword match="NotImplementedError" />
+ <keyword match="NameError" />
+ <keyword match="UnboundLocalError" />
+
+ <keyword match="AttributeError" />
+ <keyword match="SyntaxError" />
+ <keyword match="IndentationError" />
+ <keyword match="TabError" />
+ <keyword match="TypeError" />
+ <keyword match="AssertionError" />
+ <keyword match="LookupError" />
+ <keyword match="IndexError" />
+ <keyword match="KeyError" />
+ <keyword match="ArithmeticError" />
+ <keyword match="OverflowError" />
+ <keyword match="ZeroDivisionError" />
+ <keyword match="FloatingPointError" />
+ <keyword match="ValueError" />
+ <keyword match="UnicodeError" />
+ <keyword match="UnicodeEncodeError" />
+ <keyword match="UnicodeDecodeError" />
+
+ <keyword match="UnicodeTranslateError" />
+ <keyword match="ReferenceError" />
+ <keyword match="SystemError" />
+ <keyword match="MemoryError" />
+ <keyword match="Warning" />
+ <keyword match="UserWarning" />
+ <keyword match="DeprecationWarning" />
+ <keyword match="PendingDeprecationWarning" />
+ <keyword match="SyntaxWarning" />
+ <keyword match="OverflowWarning" />
+ <keyword match="RuntimeWarning" />
+ <keyword match="FutureWarning" />
+
+ </keywords>
+
+ <keywords name="builtin" inherits="possiblefunction"
+ innerClass="builtin" otherwise="identifier" case = "yes">
+ <keyword match="__import__"/>
+
+ <keyword match="abs"/>
+ <keyword match="apply"/>
+ <keyword match="basestring"/>
+ <keyword match="bool"/>
+ <keyword match="buffer"/>
+ <keyword match="callable"/>
+ <keyword match="chr"/>
+ <keyword match="classmethod"/>
+ <keyword match="cmp"/>
+
+ <keyword match="coerce"/>
+ <keyword match="compile"/>
+ <keyword match="complex"/>
+ <keyword match="delattr"/>
+ <keyword match="dict"/>
+ <keyword match="dir"/>
+ <keyword match="divmod"/>
+ <keyword match="enumerate"/>
+ <keyword match="eval"/>
+
+ <keyword match="execfile"/>
+ <keyword match="file"/>
+ <keyword match="filter"/>
+ <keyword match="float"/>
+ <keyword match="getattr"/>
+ <keyword match="globals"/>
+ <keyword match="hasattr"/>
+ <keyword match="hash"/>
+ <keyword match="help"/>
+
+ <keyword match="hex"/>
+ <keyword match="id"/>
+ <keyword match="input"/>
+ <keyword match="int"/>
+ <keyword match="intern"/>
+ <keyword match="isinstance"/>
+ <keyword match="issubclass"/>
+ <keyword match="iter"/>
+ <keyword match="len"/>
+
+ <keyword match="list"/>
+ <keyword match="locals"/>
+ <keyword match="long"/>
+ <keyword match="map"/>
+ <keyword match="max"/>
+ <keyword match="min"/>
+ <keyword match="object"/>
+ <keyword match="oct"/>
+ <keyword match="open"/>
+
+ <keyword match="ord"/>
+ <keyword match="pow"/>
+ <keyword match="property"/>
+ <keyword match="range"/>
+ <keyword match="raw_input"/>
+ <keyword match="reduce"/>
+ <keyword match="reload"/>
+ <keyword match="repr"/>
+ <keyword match="round"/>
+
+ <keyword match="setattr"/>
+ <keyword match="slice"/>
+ <keyword match="staticmethod"/>
+ <keyword match="sum"/>
+ <keyword match="super"/>
+ <keyword match="str"/>
+ <keyword match="tuple"/>
+ <keyword match="type"/>
+ <keyword match="unichr"/>
+
+ <keyword match="unicode"/>
+ <keyword match="vars"/>
+ <keyword match="xrange"/>
+ <keyword match="zip"/>
+
+ </keywords>
+
+</highlight>
+
diff --git a/library/Text_Highlighter/release b/library/Text_Highlighter/release
new file mode 100644
index 000000000..66f1fa603
--- /dev/null
+++ b/library/Text_Highlighter/release
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+/usr/local/bin/php package.php make
+/usr/local/bin/pear package
diff --git a/library/Text_Highlighter/ruby.xml b/library/Text_Highlighter/ruby.xml
new file mode 100644
index 000000000..599f5af17
--- /dev/null
+++ b/library/Text_Highlighter/ruby.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0"?>
+<!-- $Id: ruby.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="ruby" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+ <comment>
+FIXME: While this construction : s.split /z/i
+is valid, regular expression is not recognized as such
+(/ folowing an identifier or number is not recognized as
+start of RE), making highlighting improper
+
+%q(a (nested) string) does not get highlighted correctly
+ </comment>
+
+ <default innerClass="code" />
+
+ <region name="data" start="/^__END__$/m" end="$" delimClass="reserved" innerClass="comment" never-conteined="yes" />
+
+ <region name="strdouble" delimClass="quotes" innerClass="string"
+ start="&quot;" end="&quot;" >
+ </region>
+
+ <region name="qstrdouble" delimClass="quotes" innerClass="string"
+ start="%[Qx]([!&quot;#\$%&amp;'+\-*.\/:;=?@^`|~{&lt;\[(])" end="%b1%" remember="yes" />
+
+ <region name="strsingle" delimClass="quotes" innerClass="string"
+ start="'" end="'" />
+
+ <region name="qstrsingle" delimClass="quotes" innerClass="string"
+ start="%[wq]([!&quot;#\$%&amp;'+\-*.\/:;=?@^`|~{&lt;\[(])" end="%b1%" remember="yes" />
+
+ <block name="global" match="\$(\W|\w+)" innerClass="var" />
+
+ <block name="classvar" match="/@@?[_a-z][\d_a-z]*/i" innerClass="var" />
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]" >
+ <contains all="yes"/>
+ </region>
+
+ <block name="escaped" match="\\." innerClass="special" contained="yes">
+ <onlyin region="qstrsingle"/>
+ <onlyin region="strsingle"/>
+ <onlyin region="qstrdouble"/>
+ <onlyin region="strdouble"/>
+ <onlyin region="regexp"/>
+ </block>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" />
+
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" />
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+ <block name="hexinteger" match="0[xX][\da-f]+l?" innerClass="number" />
+
+ <block name="integer" match="\d+l?|\b0l?\b" innerClass="number" />
+
+ <block name="octinteger" match="0[0-7]+l?" innerClass="number" />
+
+
+ <region name="rubydoc" start="/^=begin$/m" end="/^=end$/m" delimClass="comment" innerClass="comment">
+ <contains block="cvstag" />
+ </region>
+
+ <block name="cvstag" match="\$\w+\s*:.+\$" innerClass="inlinedoc" contained="yes">
+ <onlyin region="comment"/>
+ <onlyin region="rubydoc"/>
+ </block>
+
+ <region name="comment" innerClass="comment" start="#" end="/$/m" delimClass="comment" >
+ <contains block="cvstag" />
+ </region>
+
+ <region name="regexp" delimClass="quotes" innerClass="string" start="\s*\/" end="\/[iomx]*"
+ neverAfter="(?&lt;!\band|\bor|\bwhile|\buntil|\bunless|\bif|\belsif|\bwhen|[~=!|&amp;(,\[])$">
+ </region>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="__FILE__" />
+ <keyword match="require" />
+ <keyword match="and" />
+ <keyword match="def" />
+ <keyword match="end" />
+ <keyword match="in" />
+ <keyword match="or" />
+ <keyword match="self" />
+ <keyword match="unless" />
+ <keyword match="__LINE__" />
+ <keyword match="begin" />
+ <keyword match="defined?" />
+ <keyword match="ensure" />
+ <keyword match="module" />
+ <keyword match="redo" />
+ <keyword match="super" />
+ <keyword match="until" />
+ <keyword match="BEGIN" />
+ <keyword match="break" />
+ <keyword match="do" />
+ <keyword match="false" />
+ <keyword match="next" />
+ <keyword match="rescue" />
+ <keyword match="then" />
+ <keyword match="when" />
+ <keyword match="END" />
+ <keyword match="case" />
+ <keyword match="else" />
+ <keyword match="for" />
+ <keyword match="nil" />
+ <keyword match="retry" />
+ <keyword match="true" />
+ <keyword match="while" />
+ <keyword match="alias" />
+ <keyword match="module_function" />
+ <keyword match="private" />
+ <keyword match="public" />
+ <keyword match="protected" />
+ <keyword match="attr_reader" />
+ <keyword match="attr_writer" />
+ <keyword match="attr_accessor" />
+ <keyword match="class" />
+ <keyword match="elsif" />
+ <keyword match="if" />
+ <keyword match="not" />
+ <keyword match="return" />
+ <keyword match="undef" />
+ <keyword match="yield" />
+ </keywords>
+
+
+</highlight>
+
diff --git a/library/Text_Highlighter/sample.css b/library/Text_Highlighter/sample.css
new file mode 100644
index 000000000..b4b38c5fc
--- /dev/null
+++ b/library/Text_Highlighter/sample.css
@@ -0,0 +1,62 @@
+.hl-main ol {
+ line-height: 1.0;
+}
+.hl-default {
+ color: Black;
+}
+.hl-code {
+ color: Black;
+}
+.hl-brackets {
+ color: Olive;
+}
+.hl-comment {
+ color: Purple;
+}
+.hl-quotes {
+ color: Darkred;
+}
+.hl-string {
+ color: Red;
+}
+.hl-identifier {
+ color: Blue;
+}
+.hl-builtin {
+ color: Teal;
+}
+.hl-reserved {
+ color: Green;
+}
+.hl-inlinedoc {
+ color: Blue;
+}
+.hl-var {
+ color: Darkblue;
+}
+.hl-url {
+ color: Blue;
+}
+.hl-special {
+ color: Navy;
+}
+.hl-number {
+ color: Maroon;
+}
+.hl-inlinetags {
+ color: Blue;
+}
+.hl-main {
+ background: #ccc none repeat scroll 0 0;
+ color: #000;
+/* background-color: White; */
+}
+.hl-gutter {
+ background-color: #999999;
+ color: White
+}
+.hl-table {
+ font-family: courier;
+ font-size: 12px;
+ border: solid 1px Lightgrey;
+}
diff --git a/library/Text_Highlighter/sh.xml b/library/Text_Highlighter/sh.xml
new file mode 100644
index 000000000..1250de3bc
--- /dev/null
+++ b/library/Text_Highlighter/sh.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0"?>
+<!-- $Id: sh.xml,v 1.2 2007-06-14 00:15:50 ssttoo Exp $ -->
+
+<highlight lang="sh" case = "yes">
+
+ <authors>
+ <author name="Noah Spurrier" email="noah@noah.org" />
+ </authors>
+
+ <comment>This highlighter is EXPERIMENTAL. It may work incorrectly.
+ It is a crude hack of the perl syntax, which itself wasn't so good.
+ But this seems to work OK.
+ </comment>
+
+ <default innerClass="code"/>
+
+ <block name="interpreter" match="/^(#!)(.*)/m" innerClass="special">
+ <partClass index="1" innerClass="special" />
+ <partClass index="2" innerClass="string" />
+ </block>
+
+ <!--
+ brackets
+ -->
+ <region name="block" delimClass="brackets" innerClass="code" start="\{" end="\}">
+ <contains all="yes"/>
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+ <region name="sqbrackets" delimClass="brackets" innerClass="code" start="\[" end="\]">
+ <contains all="yes"/>
+ </region>
+
+ <!--
+ use smth
+ -->
+ <block name="usestatement" match="(use)\s+([\w:]*)" innerClass="special">
+ <partClass index="1" innerClass="reserved" />
+ <partClass index="2" innerClass="special" />
+ </block>
+
+
+ <region name="q-w-q-statement"
+ start="/\b(q[wq]\s*((\{)|(\()|(\[)|(\&lt;)|([\W\S])))(?=(.*)((?(3)\})(?(4)\))(?(5)\])(?(6)\&gt;)(?(7)\7)))/Us"
+ end="%b2%"
+ innerClass="string" delimClass="quotes" remember="yes">
+
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+
+ </region>
+
+ <region name="qstatement"
+ start="/\b(q\s*((\{)|(\()|(\[)|(\&lt;)|([\W\S])))(?=(.*)((?(3)\})(?(4)\))(?(5)\])(?(6)\&gt;)(?(7)\7)))/Us"
+ end="%b2%"
+ innerClass="string" delimClass="quotes" remember="yes">
+
+ </region>
+
+ <!--
+ comments
+ -->
+ <block name="comment" match="#.*" innerClass="comment" />
+
+
+ <!--
+ regexpr
+ FIXME: this should be rewritten
+ -->
+ <block name="dblregexprver1" match="/(s|tr) ([|#~`!@$%^&amp;*-+=\\;:'&quot;,.\/?]) ((\\.|[^\\])*?) (\2)((\\.|[^\\])*?)(\2[ecgimosx]*)/x" innerClass="string">
+ <partClass index="1" innerClass="quotes" />
+ <partClass index="2" innerClass="quotes" />
+ <partClass index="3" innerClass="string" />
+ <partClass index="5" innerClass="quotes" />
+ <partClass index="6" innerClass="string" />
+ <partClass index="8" innerClass="quotes" />
+ </block>
+
+ <block name="dblregexprver2" match="/(m) ([|#~`!@$%^&amp;*-+=\\;:'&quot;,.\/?]) ((\\.|[^\\])*?) (\2[ecgimosx]*)/x" innerClass="string">
+ <partClass index="1" innerClass="quotes" />
+ <partClass index="2" innerClass="quotes" />
+ <partClass index="3" innerClass="string" />
+ <partClass index="5" innerClass="quotes" />
+ </block>
+
+
+ <region name="regexp" start=" \/" end="\/[cgimosx]*" innerClass="string" delimClass="quotes" case="yes">
+ <contains block="reescaped"/>
+ </region>
+
+ <block name="reescaped" match="\\\/" innerClass="string" contained="yes">
+ <onlyin region="regexp"/>
+ </block>
+
+ <!--
+ variables
+ FIXME: @{...}
+ -->
+ <block name="bracketsvars" match="([a-z1-9_]+)(\s*=>)" innerClass="string" contained="yes" case="no">
+ <partClass index="1" innerClass="string" />
+ <partClass index="2" innerClass="code" />
+ <onlyin region="brackets"/>
+ </block>
+
+ <block name="specialvar" match="\$#?[1-9'`@!]" innerClass="var"/>
+
+ <block name="var" match="(\$#?|[@%*])([a-z1-9_]+::)*([a-z1-9_]+|\^(?-i)[A-Z]?(?i))" innerClass="var" case="no"/>
+ <block name="containedvar" match="\$([a-z1-9_]+|\^(?-i)[A-Z]?(?i))" innerClass="var" case="no"/>
+
+ <block name="classvar" match="(\{)([a-z1-9]+)(\})" innerClass="var" case="no">
+ <partClass index="1" innerClass="brackets" />
+ <partClass index="2" innerClass="var" />
+ <partClass index="3" innerClass="brackets" />
+ </block>
+
+ <block name="curlyvar" match="[\$@%]#?\{[a-z1-9]+\}" innerClass="var" case="no"/>
+
+ <!--
+ quotes
+ -->
+ <region name="exec" delimClass="quotes" innerClass="string" start="`" end="`">
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string" start="'" end="'"/>
+
+ <block name="escaped" match="\\\\|\\&quot;|\\'|\\`" innerClass="special" contained="yes">
+ <onlyin region="qstatement"/>
+ <onlyin region="strsingle"/>
+ <onlyin region="exec"/>
+ </block>
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;">
+ <contains block="containedvar"/>
+ <contains block="specialvar"/>
+ <contains block="curlyvar"/>
+ </region>
+
+ <block name="descaped" match="\\[\\&quot;'`tnr\$\{@]" innerClass="special" contained="yes">
+ <onlyin region="strdouble"/>
+ <onlyin region="q-w-q-statement"/>
+ </block>
+
+ <!-- logical op.
+ <block name="logic" match="\|\||&amp;&amp;" innerClass="reserved" contained="yes"/>-->
+
+ <!--
+ identifiers
+ -->
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <!--
+ numbers
+ -->
+ <block name="number" match="\d*\.?\d+" innerClass="number"/>
+
+ <!--
+ GNU and posix standard shell utilities here.
+ -->
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="cd"/>
+ <keyword match="cp"/>
+ <keyword match="rm"/>
+ <keyword match="echo"/>
+ <keyword match="printf"/>
+ <keyword match="exit"/>
+ <keyword match="cut"/>
+ <keyword match="join"/>
+ <keyword match="comm"/>
+ <keyword match="fmt"/>
+ <keyword match="grep"/>
+ <keyword match="egrep"/>
+ <keyword match="fgrep"/>
+ <keyword match="sed"/>
+ <keyword match="awk"/>
+ <keyword match="yes"/>
+ <keyword match="false"/>
+ <keyword match="true"/>
+ <keyword match="test"/>
+ <keyword match="expr"/>
+ <keyword match="tee"/>
+ <keyword match="basename"/>
+ <keyword match="dirname"/>
+ <keyword match="pathchk"/>
+ <keyword match="pwd"/>
+ <keyword match="stty"/>
+ <keyword match="tty"/>
+ <keyword match="env"/>
+ <keyword match="printenv"/>
+ <keyword match="id"/>
+ <keyword match="logname"/>
+ <keyword match="whoami"/>
+ <keyword match="groups"/>
+ <keyword match="users"/>
+ <keyword match="who"/>
+ <keyword match="date"/>
+ <keyword match="uname"/>
+ <keyword match="hostname"/>
+ <keyword match="chroot"/>
+ <keyword match="nice"/>
+ <keyword match="nohup"/>
+ <keyword match="sleep"/>
+ <keyword match="factor"/>
+ <keyword match="seq"/>
+ <keyword match="getopt"/>
+ <keyword match="getopts"/>
+ <keyword match="options"/>
+ <keyword match="shift"/>
+ </keywords>
+
+ <keywords name="flowcontrol" inherits="identifier" innerClass="reserved" case = "yes">
+ <keyword match="if"/>
+ <keyword match="fi"/>
+ <keyword match="then"/>
+ <keyword match="else"/>
+ <keyword match="elif"/>
+ <keyword match="case"/>
+ <keyword match="esac"/>
+ <keyword match="while"/>
+ <keyword match="done"/>
+ <keyword match="for"/>
+ <keyword match="in"/>
+ <keyword match="function"/>
+ <keyword match="until"/>
+ <keyword match="do"/>
+ <keyword match="select"/>
+ <keyword match="time"/>
+ <!--
+ <keyword match="[["/>
+ <keyword match="]]"/>
+ -->
+ <keyword match="read"/>
+ <keyword match="set"/>
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/sql.xml b/library/Text_Highlighter/sql.xml
new file mode 100644
index 000000000..19cae49a0
--- /dev/null
+++ b/library/Text_Highlighter/sql.xml
@@ -0,0 +1,496 @@
+<?xml version="1.0"?>
+<!-- $Id: sql.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="sql" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <comment>Based on SQL-99</comment>
+
+ <default innerClass="code" />
+
+ <region name="qidentifier" delimClass="quotes" innerClass="identifier"
+ start="`" end="`" />
+
+ <region name="mlcomment" delimClass="comment" innerClass="comment"
+ start="\/\*" end="\*\/" />
+
+ <block name="comment" match="(#|--\s).*" innerClass="comment" />
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" />
+
+ <region name="strdouble" delimClass="quotes" innerClass="string"
+ start="&quot;" end="&quot;" >
+ </region>
+
+ <region name="brackets" delimClass="brackets" innerClass="code"
+ start="\(" end="\)" >
+ <contains all="yes"/>
+ </region>
+
+ <region name="strsingle" delimClass="quotes" innerClass="string"
+ start="'" end="'" />
+
+ <block name="escaped" match="\\." innerClass="special" contained="yes">
+ <onlyin region="strsingle"/>
+ <onlyin region="strdouble"/>
+ </block>
+
+ <block name="exponent"
+ match="((\d+|((\d*\.\d+)|(\d+\.\d*)))[eE][+-]?\d+)"
+ innerClass="number" />
+
+ <block name="float" match="(\d*\.\d+)|(\d+\.\d*)" innerClass="number"/>
+
+ <block name="integer" match="\d+l?|\b0l?\b" innerClass="number" />
+
+ <block name="hexinteger" match="0[xX][\da-f]+l?" innerClass="number" />
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case = "no">
+ <keyword match="ABSOLUTE" />
+ <keyword match="ACTION" />
+ <keyword match="ADD" />
+ <keyword match="ADMIN" />
+ <keyword match="AFTER" />
+ <keyword match="AGGREGATE" />
+ <keyword match="ALIAS" />
+ <keyword match="ALL" />
+ <keyword match="ALLOCATE" />
+ <keyword match="ALTER" />
+ <keyword match="AND" />
+ <keyword match="ANY" />
+ <keyword match="ARE" />
+ <keyword match="ARRAY" />
+ <keyword match="AS" />
+ <keyword match="ASC" />
+ <keyword match="ASSERTION" />
+ <keyword match="AT" />
+ <keyword match="AUTHORIZATION" />
+ <keyword match="BEFORE" />
+ <keyword match="BEGIN" />
+ <keyword match="BINARY" />
+ <keyword match="BIT" />
+ <keyword match="BLOB" />
+ <keyword match="BOOLEAN" />
+ <keyword match="BOTH" />
+ <keyword match="BREADTH" />
+ <keyword match="BY" />
+ <keyword match="CALL" />
+ <keyword match="CASCADE" />
+ <keyword match="CASCADED" />
+ <keyword match="CASE" />
+ <keyword match="CAST" />
+ <keyword match="CATALOG" />
+ <keyword match="CHAR" />
+ <keyword match="CHARACTER" />
+ <keyword match="CHECK" />
+ <keyword match="CLASS" />
+ <keyword match="CLOB" />
+ <keyword match="CLOSE" />
+ <keyword match="COLLATE" />
+ <keyword match="COLLATION" />
+ <keyword match="COLUMN" />
+ <keyword match="COMMIT" />
+ <keyword match="COMPLETION" />
+ <keyword match="CONNECT" />
+ <keyword match="CONNECTION" />
+ <keyword match="CONSTRAINT" />
+ <keyword match="CONSTRAINTS" />
+ <keyword match="CONSTRUCTOR" />
+ <keyword match="CONTINUE" />
+ <keyword match="CORRESPONDING" />
+ <keyword match="CREATE" />
+ <keyword match="CROSS" />
+ <keyword match="CUBE" />
+ <keyword match="CURRENT" />
+ <keyword match="CURRENT_DATE" />
+ <keyword match="CURRENT_PATH" />
+ <keyword match="CURRENT_ROLE" />
+ <keyword match="CURRENT_TIME" />
+ <keyword match="CURRENT_TIMESTAMP" />
+ <keyword match="CURRENT_USER" />
+ <keyword match="CURSOR" />
+ <keyword match="CYCLE" />
+ <keyword match="DATA" />
+ <keyword match="DATE" />
+ <keyword match="DAY" />
+ <keyword match="DEALLOCATE" />
+ <keyword match="DEC" />
+ <keyword match="DECIMAL" />
+ <keyword match="DECLARE" />
+ <keyword match="DEFAULT" />
+ <keyword match="DEFERRABLE" />
+ <keyword match="DEFERRED" />
+ <keyword match="DELETE" />
+ <keyword match="DEPTH" />
+ <keyword match="DEREF" />
+ <keyword match="DESC" />
+ <keyword match="DESCRIBE" />
+ <keyword match="DESCRIPTOR" />
+ <keyword match="DESTROY" />
+ <keyword match="DESTRUCTOR" />
+ <keyword match="DETERMINISTIC" />
+ <keyword match="DIAGNOSTICS" />
+ <keyword match="DICTIONARY" />
+ <keyword match="DISCONNECT" />
+ <keyword match="DISTINCT" />
+ <keyword match="DOMAIN" />
+ <keyword match="DOUBLE" />
+ <keyword match="DROP" />
+ <keyword match="DYNAMIC" />
+ <keyword match="EACH" />
+ <keyword match="ELSE" />
+ <keyword match="END" />
+ <keyword match="END-EXEC" />
+ <keyword match="EQUALS" />
+ <keyword match="ESCAPE" />
+ <keyword match="EVERY" />
+ <keyword match="EXCEPT" />
+ <keyword match="EXCEPTION" />
+ <keyword match="EXEC" />
+ <keyword match="EXECUTE" />
+ <keyword match="EXTERNAL" />
+ <keyword match="FALSE" />
+ <keyword match="FETCH" />
+ <keyword match="FIRST" />
+ <keyword match="FLOAT" />
+ <keyword match="FOR" />
+ <keyword match="FOREIGN" />
+ <keyword match="FOUND" />
+ <keyword match="FREE" />
+ <keyword match="FROM" />
+ <keyword match="FULL" />
+ <keyword match="FUNCTION" />
+ <keyword match="GENERAL" />
+ <keyword match="GET" />
+ <keyword match="GLOBAL" />
+ <keyword match="GO" />
+ <keyword match="GOTO" />
+ <keyword match="GRANT" />
+ <keyword match="GROUP" />
+ <keyword match="GROUPING" />
+ <keyword match="HAVING" />
+ <keyword match="HOST" />
+ <keyword match="HOUR" />
+ <keyword match="IDENTITY" />
+ <keyword match="IGNORE" />
+ <keyword match="IMMEDIATE" />
+ <keyword match="IN" />
+ <keyword match="INDICATOR" />
+ <keyword match="INITIALIZE" />
+ <keyword match="INITIALLY" />
+ <keyword match="INNER" />
+ <keyword match="INOUT" />
+ <keyword match="INPUT" />
+ <keyword match="INSERT" />
+ <keyword match="INT" />
+ <keyword match="INTEGER" />
+ <keyword match="INTERSECT" />
+ <keyword match="INTERVAL" />
+ <keyword match="INTO" />
+ <keyword match="IS" />
+ <keyword match="ISOLATION" />
+ <keyword match="ITERATE" />
+ <keyword match="JOIN" />
+ <keyword match="KEY" />
+ <keyword match="LANGUAGE" />
+ <keyword match="LARGE" />
+ <keyword match="LAST" />
+ <keyword match="LATERAL" />
+ <keyword match="LEADING" />
+ <keyword match="LEFT" />
+ <keyword match="LESS" />
+ <keyword match="LEVEL" />
+ <keyword match="LIKE" />
+ <keyword match="LIMIT" />
+ <keyword match="LOCAL" />
+ <keyword match="LOCALTIME" />
+ <keyword match="LOCALTIMESTAMP" />
+ <keyword match="LOCATOR" />
+ <keyword match="MAP" />
+ <keyword match="MATCH" />
+ <keyword match="MINUTE" />
+ <keyword match="MODIFIES" />
+ <keyword match="MODIFY" />
+ <keyword match="MODULE" />
+ <keyword match="MONTH" />
+ <keyword match="NAMES" />
+ <keyword match="NATIONAL" />
+ <keyword match="NATURAL" />
+ <keyword match="NCHAR" />
+ <keyword match="NCLOB" />
+ <keyword match="NEW" />
+ <keyword match="NEXT" />
+ <keyword match="NO" />
+ <keyword match="NONE" />
+ <keyword match="NOT" />
+ <keyword match="NULL" />
+ <keyword match="NUMERIC" />
+ <keyword match="OBJECT" />
+ <keyword match="OF" />
+ <keyword match="OFF" />
+ <keyword match="OLD" />
+ <keyword match="ON" />
+ <keyword match="ONLY" />
+ <keyword match="OPEN" />
+ <keyword match="OPERATION" />
+ <keyword match="OPTION" />
+ <keyword match="OR" />
+ <keyword match="ORDER" />
+ <keyword match="ORDINALITY" />
+ <keyword match="OUT" />
+ <keyword match="OUTER" />
+ <keyword match="OUTPUT" />
+ <keyword match="PAD" />
+ <keyword match="PARAMETER" />
+ <keyword match="PARAMETERS" />
+ <keyword match="PARTIAL" />
+ <keyword match="PATH" />
+ <keyword match="POSTFIX" />
+ <keyword match="PRECISION" />
+ <keyword match="PREFIX" />
+ <keyword match="PREORDER" />
+ <keyword match="PREPARE" />
+ <keyword match="PRESERVE" />
+ <keyword match="PRIMARY" />
+ <keyword match="PRIOR" />
+ <keyword match="PRIVILEGES" />
+ <keyword match="PROCEDURE" />
+ <keyword match="PUBLIC" />
+ <keyword match="READ" />
+ <keyword match="READS" />
+ <keyword match="REAL" />
+ <keyword match="RECURSIVE" />
+ <keyword match="REF" />
+ <keyword match="REFERENCES" />
+ <keyword match="REFERENCING" />
+ <keyword match="RELATIVE" />
+ <keyword match="RESTRICT" />
+ <keyword match="RESULT" />
+ <keyword match="RETURN" />
+ <keyword match="RETURNS" />
+ <keyword match="REVOKE" />
+ <keyword match="RIGHT" />
+ <keyword match="ROLE" />
+ <keyword match="ROLLBACK" />
+ <keyword match="ROLLUP" />
+ <keyword match="ROUTINE" />
+ <keyword match="ROW" />
+ <keyword match="ROWS" />
+ <keyword match="SAVEPOINT" />
+ <keyword match="SCHEMA" />
+ <keyword match="SCOPE" />
+ <keyword match="SCROLL" />
+ <keyword match="SEARCH" />
+ <keyword match="SECOND" />
+ <keyword match="SECTION" />
+ <keyword match="SELECT" />
+ <keyword match="SEQUENCE" />
+ <keyword match="SESSION" />
+ <keyword match="SESSION_USER" />
+ <keyword match="SET" />
+ <keyword match="SETS" />
+ <keyword match="SIZE" />
+ <keyword match="SMALLINT" />
+ <keyword match="SOME" />
+ <keyword match="SPACE" />
+ <keyword match="SPECIFIC" />
+ <keyword match="SPECIFICTYPE" />
+ <keyword match="SQL" />
+ <keyword match="SQLEXCEPTION" />
+ <keyword match="SQLSTATE" />
+ <keyword match="SQLWARNING" />
+ <keyword match="START" />
+ <keyword match="STATE" />
+ <keyword match="STATEMENT" />
+ <keyword match="STATIC" />
+ <keyword match="STRUCTURE" />
+ <keyword match="SYSTEM_USER" />
+ <keyword match="TABLE" />
+ <keyword match="TEMPORARY" />
+ <keyword match="TERMINATE" />
+ <keyword match="THAN" />
+ <keyword match="THEN" />
+ <keyword match="TIME" />
+ <keyword match="TIMESTAMP" />
+ <keyword match="TIMEZONE_HOUR" />
+ <keyword match="TIMEZONE_MINUTE" />
+ <keyword match="TO" />
+ <keyword match="TRAILING" />
+ <keyword match="TRANSACTION" />
+ <keyword match="TRANSLATION" />
+ <keyword match="TREAT" />
+ <keyword match="TRIGGER" />
+ <keyword match="TRUE" />
+ <keyword match="UNDER" />
+ <keyword match="UNION" />
+ <keyword match="UNIQUE" />
+ <keyword match="UNKNOWN" />
+ <keyword match="UNNEST" />
+ <keyword match="UPDATE" />
+ <keyword match="USAGE" />
+ <keyword match="USER" />
+ <keyword match="USING" />
+ <keyword match="VALUE" />
+ <keyword match="VALUES" />
+ <keyword match="VARCHAR" />
+ <keyword match="VARIABLE" />
+ <keyword match="VARYING" />
+ <keyword match="VIEW" />
+ <keyword match="WHEN" />
+ <keyword match="WHENEVER" />
+ <keyword match="WHERE" />
+ <keyword match="WITH" />
+ <keyword match="WITHOUT" />
+ <keyword match="WORK" />
+ <keyword match="WRITE" />
+ <keyword match="YEAR" />
+ <keyword match="ZONE" />
+ </keywords>
+ <keywords name="keyword" inherits="identifier" innerClass="var" case = "no">
+ <keyword match="ABS" />
+ <keyword match="ADA" />
+ <keyword match="ASENSITIVE" />
+ <keyword match="ASSIGNMENT" />
+ <keyword match="ASYMMETRIC" />
+ <keyword match="ATOMIC" />
+ <keyword match="AVG" />
+ <keyword match="BETWEEN" />
+ <keyword match="BITVAR" />
+ <keyword match="BIT_LENGTH" />
+ <keyword match="C" />
+ <keyword match="CALLED" />
+ <keyword match="CARDINALITY" />
+ <keyword match="CATALOG_NAME" />
+ <keyword match="CHAIN" />
+ <keyword match="CHARACTER_LENGTH" />
+ <keyword match="CHARACTER_SET_CATALOG" />
+ <keyword match="CHARACTER_SET_NAME" />
+ <keyword match="CHARACTER_SET_SCHEMA" />
+ <keyword match="CHAR_LENGTH" />
+ <keyword match="CHECKED" />
+ <keyword match="CLASS_ORIGIN" />
+ <keyword match="COALESCE" />
+ <keyword match="COBOL" />
+ <keyword match="COLLATION_CATALOG" />
+ <keyword match="COLLATION_NAME" />
+ <keyword match="COLLATION_SCHEMA" />
+ <keyword match="COLUMN_NAME" />
+ <keyword match="COMMAND_FUNCTION" />
+ <keyword match="COMMAND_FUNCTION_CODE" />
+ <keyword match="COMMITTED" />
+ <keyword match="CONDITION_NUMBER" />
+ <keyword match="CONNECTION_NAME" />
+ <keyword match="CONSTRAINT_CATALOG" />
+ <keyword match="CONSTRAINT_NAME" />
+ <keyword match="CONSTRAINT_SCHEMA" />
+ <keyword match="CONTAINS" />
+ <keyword match="CONVERT" />
+ <keyword match="COUNT" />
+ <keyword match="CURSOR_NAME" />
+ <keyword match="DATETIME_INTERVAL_CODE" />
+ <keyword match="DATETIME_INTERVAL_PRECISION" />
+ <keyword match="DEFINED" />
+ <keyword match="DEFINER" />
+ <keyword match="DISPATCH" />
+ <keyword match="DYNAMIC_FUNCTION" />
+ <keyword match="DYNAMIC_FUNCTION_CODE" />
+ <keyword match="EXISTING" />
+ <keyword match="EXISTS" />
+ <keyword match="EXTRACT" />
+ <keyword match="FINAL" />
+ <keyword match="FORTRAN" />
+ <keyword match="G" />
+ <keyword match="GENERATED" />
+ <keyword match="GRANTED" />
+ <keyword match="HIERARCHY" />
+ <keyword match="HOLD" />
+ <keyword match="IMPLEMENTATION" />
+ <keyword match="INFIX" />
+ <keyword match="INSENSITIVE" />
+ <keyword match="INSTANCE" />
+ <keyword match="INSTANTIABLE" />
+ <keyword match="INVOKER" />
+ <keyword match="K" />
+ <keyword match="KEY_MEMBER" />
+ <keyword match="KEY_TYPE" />
+ <keyword match="LENGTH" />
+ <keyword match="LOWER" />
+ <keyword match="M" />
+ <keyword match="MAX" />
+ <keyword match="MESSAGE_LENGTH" />
+ <keyword match="MESSAGE_OCTET_LENGTH" />
+ <keyword match="MESSAGE_TEXT" />
+ <keyword match="METHOD" />
+ <keyword match="MIN" />
+ <keyword match="MOD" />
+ <keyword match="MORE" />
+ <keyword match="MUMPS" />
+ <keyword match="NAME" />
+ <keyword match="NULLABLE" />
+ <keyword match="NULLIF" />
+ <keyword match="NUMBER" />
+ <keyword match="OCTET_LENGTH" />
+ <keyword match="OPTIONS" />
+ <keyword match="OVERLAPS" />
+ <keyword match="OVERLAY" />
+ <keyword match="OVERRIDING" />
+ <keyword match="PARAMETER_MODE" />
+ <keyword match="PARAMETER_NAME" />
+ <keyword match="PARAMETER_ORDINAL_POSITION" />
+ <keyword match="PARAMETER_SPECIFIC_CATALOG" />
+ <keyword match="PARAMETER_SPECIFIC_NAME" />
+ <keyword match="PARAMETER_SPECIFIC_SCHEMA" />
+ <keyword match="PASCAL" />
+ <keyword match="PLI" />
+ <keyword match="POSITION" />
+ <keyword match="REPEATABLE" />
+ <keyword match="RETURNED_LENGTH" />
+ <keyword match="RETURNED_OCTET_LENGTH" />
+ <keyword match="RETURNED_SQLSTATE" />
+ <keyword match="ROUTINE_CATALOG" />
+ <keyword match="ROUTINE_NAME" />
+ <keyword match="ROUTINE_SCHEMA" />
+ <keyword match="ROW_COUNT" />
+ <keyword match="SCALE" />
+ <keyword match="SCHEMA_NAME" />
+ <keyword match="SECURITY" />
+ <keyword match="SELF" />
+ <keyword match="SENSITIVE" />
+ <keyword match="SERIALIZABLE" />
+ <keyword match="SERVER_NAME" />
+ <keyword match="SIMILAR" />
+ <keyword match="SIMPLE" />
+ <keyword match="SOURCE" />
+ <keyword match="SPECIFIC_NAME" />
+ <keyword match="STYLE" />
+ <keyword match="SUBCLASS_ORIGIN" />
+ <keyword match="SUBLIST" />
+ <keyword match="SUBSTRING" />
+ <keyword match="SUM" />
+ <keyword match="SYMMETRIC" />
+ <keyword match="SYSTEM" />
+ <keyword match="TABLE_NAME" />
+ <keyword match="TRANSACTIONS_COMMITTED" />
+ <keyword match="TRANSACTIONS_ROLLED_BACK" />
+ <keyword match="TRANSACTION_ACTIVE" />
+ <keyword match="TRANSFORM" />
+ <keyword match="TRANSFORMS" />
+ <keyword match="TRANSLATE" />
+ <keyword match="TRIGGER_CATALOG" />
+ <keyword match="TRIGGER_NAME" />
+ <keyword match="TRIGGER_SCHEMA" />
+ <keyword match="TRIM" />
+ <keyword match="TYPE" />
+ <keyword match="UNCOMMITTED" />
+ <keyword match="UNNAMED" />
+ <keyword match="UPPER" />
+ <keyword match="USER_DEFINED_TYPE_CATALOG" />
+ <keyword match="USER_DEFINED_TYPE_NAME" />
+ <keyword match="USER_DEFINED_TYPE_SCHEMA" />
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/vbscript.xml b/library/Text_Highlighter/vbscript.xml
new file mode 100644
index 000000000..09c37ffde
--- /dev/null
+++ b/library/Text_Highlighter/vbscript.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0"?>
+<!-- $Id: vbscript.xml,v 1.2 2008-01-02 00:05:52 ssttoo Exp $ -->
+
+<highlight lang="vbscript" case="no">
+
+ <authors>
+ <author name="Daniel Fruzynski" email="daniel-AT-poradnik-webmastera.com" />
+ </authors>
+
+ <default innerClass="code" />
+
+ <region name="brackets" delimClass="brackets" innerClass="code" start="\(" end="\)">
+ <contains all="yes"/>
+ </region>
+
+
+ <region name="strdouble" delimClass="quotes" innerClass="string" start="&quot;" end="&quot;"/>
+
+ <region name="comment" start="'|[Rr][Ee][Mm]\b" end="/$/m" innerClass="comment">
+ <contains block="cvstag"/>
+ </region>
+
+ <block name="number" match="\d*\.?\d+" innerClass="number"/>
+ <block name="hexnumber" match="&amp;H[0-9a-fA-F]+" innerClass="number"/>
+
+ <block name="identifier" match="[a-z_]\w*" innerClass="identifier" case="no"/>
+
+ <block name="url" match="((https?|ftp):\/\/[\w\?\.\-\&amp;=\/%+]+)|(^|[\s,!?])www\.\w+\.\w+[\w\?\.\&amp;=\/%+]*" innerClass="url" contained="yes">
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="email" match="\w+[\.\w\-]+@(\w+[\.\w\-])+" innerClass="url" contained="yes">
+ <onlyin region="comment"/>
+ </block>
+
+ <block name="note" match="\b(note|fixme):" innerClass="inlinedoc" contained="yes" case="no">
+ <onlyin region="comment"/>
+ </block>
+
+
+ <block name="cvstag" match="\$\w+:.+\$" innerClass="inlinedoc" contained="yes">
+ <onlyin region="comment"/>
+ </block>
+
+ <keywords name="constants" inherits="identifier" innerClass="builtin" case="no">
+ <!-- Color Constants -->
+ <keyword match="vbBlack" />
+ <keyword match="vbRed" />
+ <keyword match="vbGreen" />
+ <keyword match="vbYellow" />
+ <keyword match="vbBlue" />
+ <keyword match="vbMagenta" />
+ <keyword match="vbCyan" />
+ <keyword match="vbWhite" />
+ <!-- Comparison Constants -->
+ <keyword match="vbBinaryCompare" />
+ <keyword match="vbTextCompare" />
+ <!-- Date and Time Constants -->
+ <keyword match="vbSunday" />
+ <keyword match="vbMonday" />
+ <keyword match="vbTuesday" />
+ <keyword match="vbWednesday" />
+ <keyword match="vbThursday" />
+ <keyword match="vbFriday" />
+ <keyword match="vbSaturday" />
+ <keyword match="vbUseSystemDayOfWeek" />
+ <keyword match="vbFirstJan1" />
+ <keyword match="vbFirstFourDays" />
+ <keyword match="vbFirstFullWeek" />
+ <!-- Date Format Constants -->
+ <keyword match="vbGeneralDate" />
+ <keyword match="vbLongDate" />
+ <keyword match="vbShortDate" />
+ <keyword match="vbLongTime" />
+ <keyword match="vbShortTime" />
+ <!-- Miscellaneous Constants -->
+ <keyword match="vbObjectError" />
+ <!-- MsgBox Constants -->
+ <keyword match="vbOKOnly" />
+ <keyword match="vbOKCancel" />
+ <keyword match="vbAbortRetryIgnore" />
+ <keyword match="vbYesNoCancel" />
+ <keyword match="vbYesNo" />
+ <keyword match="vbRetryCancel" />
+ <keyword match="vbCritical" />
+ <keyword match="vbQuestion" />
+ <keyword match="vbExclamation" />
+ <keyword match="vbInformation" />
+ <keyword match="vbDefaultButton1" />
+ <keyword match="vbDefaultButton2" />
+ <keyword match="vbDefaultButton3" />
+ <keyword match="vbDefaultButton4" />
+ <keyword match="vbApplicationModal" />
+ <keyword match="vbSystemModal" />
+ <keyword match="vbOK" />
+ <keyword match="vbCancel" />
+ <keyword match="vbAbort" />
+ <keyword match="vbRetry" />
+ <keyword match="vbIgnore" />
+ <keyword match="vbYes" />
+ <keyword match="vbNo" />
+ <!-- String Constants -->
+ <keyword match="vbCr" />
+ <keyword match="VbCrLf" />
+ <keyword match="vbFormFeed" />
+ <keyword match="vbLf" />
+ <keyword match="vbNewLine" />
+ <keyword match="vbNullChar" />
+ <keyword match="vbNullString" />
+ <keyword match="vbTab" />
+ <keyword match="vbVerticalTab" />
+ <!-- Tristate Constants -->
+ <keyword match="vbUseDefault" />
+ <keyword match="vbTrue" />
+ <keyword match="vbFalse" />
+ <!-- VarType Constants -->
+ <keyword match="vbEmpty" />
+ <keyword match="vbNull" />
+ <keyword match="vbInteger" />
+ <keyword match="vbLong" />
+ <keyword match="vbSingle" />
+ <keyword match="vbDouble" />
+ <keyword match="vbCurrency" />
+ <keyword match="vbDate" />
+ <keyword match="vbString" />
+ <keyword match="vbObject" />
+ <keyword match="vbError" />
+ <keyword match="vbBoolean" />
+ <keyword match="vbVariant" />
+ <keyword match="vbDataObject" />
+ <keyword match="vbDecimal" />
+ <keyword match="vbByte" />
+ <keyword match="vbArray" />
+ </keywords>
+
+ <keywords name="functions" inherits="identifier" innerClass="builtin" case="no">
+ <keyword match="Abs" />
+ <keyword match="Array" />
+ <keyword match="Asc" />
+ <keyword match="Atn" />
+ <keyword match="CBool" />
+ <keyword match="CByte" />
+ <keyword match="CCur" />
+ <keyword match="CDate" />
+ <keyword match="CDbl" />
+ <keyword match="Chr" />
+ <keyword match="CInt" />
+ <keyword match="CLng" />
+ <keyword match="Cos" />
+ <keyword match="CreateObject" />
+ <keyword match="CSng" />
+ <keyword match="CStr" />
+ <keyword match="Date" />
+ <keyword match="DateAdd" />
+ <keyword match="DateDiff" />
+ <keyword match="DatePart" />
+ <keyword match="DateSerial" />
+ <keyword match="DateValue" />
+ <keyword match="Day" />
+ <keyword match="Escape" />
+ <keyword match="Eval" />
+ <keyword match="Exp" />
+ <keyword match="Filter" />
+ <keyword match="FormatCurrency" />
+ <keyword match="FormatDateTime" />
+ <keyword match="FormatNumber" />
+ <keyword match="FormatPercent" />
+ <keyword match="GetLocale" />
+ <keyword match="GetObject" />
+ <keyword match="GetRef" />
+ <keyword match="Hex" />
+ <keyword match="Hour" />
+ <keyword match="InputBox" />
+ <keyword match="InStr" />
+ <keyword match="InStrRev" />
+ <keyword match="Int" />
+ <keyword match="Fix" />
+ <keyword match="IsArray" />
+ <keyword match="IsDate" />
+ <keyword match="IsEmpty" />
+ <keyword match="IsNull" />
+ <keyword match="IsNumeric" />
+ <keyword match="IsObject" />
+ <keyword match="Join" />
+ <keyword match="LBound" />
+ <keyword match="LCase" />
+ <keyword match="Left" />
+ <keyword match="Len" />
+ <keyword match="LoadPicture" />
+ <keyword match="Log" />
+ <keyword match="LTrim" />
+ <keyword match="RTrim" />
+ <keyword match="Trim" />
+ <keyword match="Mid" />
+ <keyword match="Minute" />
+ <keyword match="Month" />
+ <keyword match="MonthName" />
+ <keyword match="MsgBox" />
+ <keyword match="Now" />
+ <keyword match="Oct" />
+ <keyword match="Replace" />
+ <keyword match="RGB" />
+ <keyword match="Right" />
+ <keyword match="Rnd" />
+ <keyword match="Round" />
+ <keyword match="ScriptEngine" />
+ <keyword match="ScriptEngineBuildVersion" />
+ <keyword match="ScriptEngineMajorVersion" />
+ <keyword match="ScriptEngineMinorVersion" />
+ <keyword match="Second" />
+ <keyword match="SetLocale" />
+ <keyword match="Sgn" />
+ <keyword match="Sin" />
+ <keyword match="Space" />
+ <keyword match="Split" />
+ <keyword match="Sqr" />
+ <keyword match="StrComp" />
+ <keyword match="String" />
+ <keyword match="StrReverse" />
+ <keyword match="Tan" />
+ <keyword match="Time" />
+ <keyword match="Timer" />
+ <keyword match="TimeSerial" />
+ <keyword match="TimeValue" />
+ <keyword match="TypeName" />
+ <keyword match="UBound" />
+ <keyword match="UCase" />
+ <keyword match="Unescape" />
+ <keyword match="VarType" />
+ <keyword match="Weekday" />
+ <keyword match="WeekdayName" />
+ <keyword match="Year" />
+ </keywords>
+
+ <keywords name="builtin" inherits="identifier" innerClass="builtin" case="no">
+ <!--<keyword match="Class" />-->
+ <keyword match="Debug" />
+ <keyword match="Err" />
+ <keyword match="Match" />
+ <keyword match="RegExp" />
+ </keywords>
+
+ <keywords name="reserved" inherits="identifier" innerClass="reserved" case="no">
+ <keyword match="Empty" />
+ <keyword match="False" />
+ <keyword match="Nothing" />
+ <keyword match="Null" />
+ <keyword match="True" />
+ <keyword match="And" />
+ <keyword match="Eqv" />
+ <keyword match="Imp" />
+ <keyword match="Is" />
+ <keyword match="Mod" />
+ <keyword match="Not" />
+ <keyword match="Or" />
+ <keyword match="Xor" />
+ <keyword match="Call" />
+ <keyword match="Class" />
+ <keyword match="End" />
+ <keyword match="Const" />
+ <keyword match="Public" />
+ <keyword match="Private" />
+ <keyword match="Dim" />
+ <keyword match="Do" />
+ <keyword match="While" />
+ <keyword match="Until" />
+ <keyword match="Exit" />
+ <keyword match="Loop" />
+ <keyword match="Erase" />
+ <keyword match="Execute" />
+ <keyword match="ExecuteGlobal" />
+ <keyword match="For" />
+ <keyword match="Each" />
+ <keyword match="In" />
+ <keyword match="To" />
+ <keyword match="Step" />
+ <keyword match="Next" />
+ <keyword match="Function" />
+ <keyword match="Default" />
+ <keyword match="If" />
+ <keyword match="Then" />
+ <keyword match="Else" />
+ <keyword match="ElseIf" />
+ <keyword match="On" />
+ <keyword match="Error" />
+ <keyword match="Resume" />
+ <keyword match="Goto" />
+ <keyword match="Option" />
+ <keyword match="Explicit" />
+ <keyword match="Property" />
+ <keyword match="Get" />
+ <keyword match="Let" />
+ <keyword match="Set" />
+ <keyword match="Randomize" />
+ <keyword match="ReDim" />
+ <keyword match="Preserve" />
+ <keyword match="Select" />
+ <keyword match="Case" />
+ <keyword match="Stop" />
+ <keyword match="Sub" />
+ <keyword match="Wend" />
+ <keyword match="With" />
+ </keywords>
+
+</highlight>
diff --git a/library/Text_Highlighter/xml.xml b/library/Text_Highlighter/xml.xml
new file mode 100644
index 000000000..2271ff3ae
--- /dev/null
+++ b/library/Text_Highlighter/xml.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!-- $Id: xml.xml,v 1.1 2007-06-03 02:35:28 ssttoo Exp $ -->
+
+<highlight lang="xml" case="no">
+
+ <authors>
+ <author name="Andrey Demenev" email="demenev@gmail.com"/>
+ </authors>
+
+
+ <default innerClass="code" />
+
+ <region name="cdata" delimClass="comment" innerClass="comment"
+ start="\&lt;\!\[CDATA\[" end="\]\]\&gt;">
+ </region>
+
+ <region name="comment" delimClass="comment" innerClass="comment"
+ start="\&lt;!--" end="--\&gt;">
+ </region>
+
+ <region name="tag" delimClass="brackets" innerClass="code" start="\&lt;[\?\/]?" end="[\/\?]?\&gt;">
+ <contains block="tagname"/>
+ <contains region="param"/>
+ <contains block="paramname"/>
+ </region>
+
+ <block name="tagname" match="(?&lt;=[\&lt;\/?])[\w\-\:]+" innerClass="reserved" contained="yes"/>
+
+ <block name="paramname" match="[\w\-\:]+" innerClass="var" contained="yes"/>
+
+ <block name="entity" match="(&amp;|%)[\w\-\.]+;" innerClass="special" />
+
+ <region name="param" start="&quot;" end="&quot;" delimClass="quotes" innerClass="string" contained="yes">
+ <contains block="entity"/>
+ </region>
+
+</highlight>
diff --git a/library/fullcalendar/CHANGELOG.txt b/library/fullcalendar/CHANGELOG.txt
index d753163e3..32559a8ad 100644
--- a/library/fullcalendar/CHANGELOG.txt
+++ b/library/fullcalendar/CHANGELOG.txt
@@ -1,8 +1,51 @@
+v2.7.3 (2016-06-02)
+-------------------
+
+internal enhancements that plugins can benefit from:
+- EventEmitter not correctly working with stopListeningTo
+- normalizeEvent hook for manipulating event data
+
+
+v2.7.2 (2016-05-20)
+-------------------
+
+- fixed desktops/laptops with touch support not accepting mouse events for
+ dayClick/dragging/resizing (#3154, #3149)
+- fixed dayClick incorrectly triggered on touch scroll (#3152)
+- fixed touch event dragging wrongfully beginning upon scrolling document (#3160)
+- fixed minified JS still contained comments
+- UI change: mouse users must hover over an event to reveal its resizers
+
+
+v2.7.1 (2016-05-01)
+-------------------
+
+- dayClick not firing on touch devices (#3138)
+- icons for prev/next not working in MS Edge (#2852)
+- fix bad languages troubles with firewalls (#3133, #3132)
+- update all dev dependencies (#3145, #3010, #2901, #251)
+- git-ignore npm debug logs (#3011)
+- misc automated test updates (#3139, #3147)
+- Google Calendar htmlLink not always defined (#2844)
+
+
+v2.7.0 (2016-04-23)
+-------------------
+
+touch device support (#994):
+ - smoother scrolling
+ - interactions initiated via "long press":
+ - event drag-n-drop
+ - event resize
+ - time-range selecting
+ - `longPressDelay`
+
+
v2.6.1 (2016-02-17)
-------------------
-- make nowIndicator positioning refresh on window resize
+- make `nowIndicator` positioning refresh on window resize
v2.6.0 (2016-01-07)
diff --git a/library/fullcalendar/CONTRIBUTING.txt b/library/fullcalendar/CONTRIBUTING.txt
index 0204d12c7..5c6dce4ac 100644
--- a/library/fullcalendar/CONTRIBUTING.txt
+++ b/library/fullcalendar/CONTRIBUTING.txt
@@ -41,7 +41,7 @@ Also, you will need the [grunt-cli][grunt-cli] and [bower][bower] packages insta
Then, clone FullCalendar's git repo:
- git clone git://github.com/arshaw/fullcalendar.git
+ git clone git://github.com/fullcalendar/fullcalendar.git
Enter the directory and install FullCalendar's development dependencies:
diff --git a/library/fullcalendar/fullcalendar.css b/library/fullcalendar/fullcalendar.css
index b43d666ef..81e9c1ee2 100644
--- a/library/fullcalendar/fullcalendar.css
+++ b/library/fullcalendar/fullcalendar.css
@@ -1,7 +1,7 @@
/*!
- * FullCalendar v2.6.1 Stylesheet
+ * FullCalendar v2.7.3 Stylesheet
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
+ * (c) 2016 Adam Shaw
*/
@@ -28,6 +28,7 @@ body .fc { /* extra precedence to overcome jqui */
.fc-unthemed tbody,
.fc-unthemed .fc-divider,
.fc-unthemed .fc-row,
+.fc-unthemed .fc-content, /* for gutter border */
.fc-unthemed .fc-popover {
border-color: #ddd;
}
@@ -72,7 +73,6 @@ body .fc { /* extra precedence to overcome jqui */
.fc-icon {
display: inline-block;
- width: 1em;
height: 1em;
line-height: 1em;
font-size: 1em;
@@ -99,7 +99,6 @@ NOTE: use percentage font sizes or else old IE chokes
.fc-icon:after {
position: relative;
- margin: 0 -1em; /* ensures character will be centered, regardless of width */
}
.fc-icon-left-single-arrow:after {
@@ -107,7 +106,6 @@ NOTE: use percentage font sizes or else old IE chokes
font-weight: bold;
font-size: 200%;
top: -7%;
- left: 3%;
}
.fc-icon-right-single-arrow:after {
@@ -115,7 +113,6 @@ NOTE: use percentage font sizes or else old IE chokes
font-weight: bold;
font-size: 200%;
top: -7%;
- left: -3%;
}
.fc-icon-left-double-arrow:after {
@@ -134,14 +131,12 @@ NOTE: use percentage font sizes or else old IE chokes
content: "\25C4";
font-size: 125%;
top: 3%;
- left: -2%;
}
.fc-icon-right-triangle:after {
content: "\25BA";
font-size: 125%;
top: 3%;
- left: 2%;
}
.fc-icon-down-triangle:after {
@@ -491,15 +486,15 @@ temporary rendered events).
/* Scrolling Container
--------------------------------------------------------------------------------------------------*/
-.fc-scroller { /* this class goes on elements for guaranteed vertical scrollbars */
- overflow-y: scroll;
- overflow-x: hidden;
+.fc-scroller {
+ -webkit-overflow-scrolling: touch;
}
-.fc-scroller > * { /* we expect an immediate inner element */
+/* TODO: move to agenda/basic */
+.fc-scroller > .fc-day-grid,
+.fc-scroller > .fc-time-grid {
position: relative; /* re-scope all positions */
width: 100%; /* hack to force re-sizing this inner element when scrollbars appear/disappear */
- overflow: hidden; /* don't let negative margins or absolute positioning create further scroll */
}
@@ -547,15 +542,68 @@ temporary rendered events).
z-index: 2;
}
+/* resizer (cursor AND touch devices) */
+
.fc-event .fc-resizer {
position: absolute;
- z-index: 3;
+ z-index: 4;
+}
+
+/* resizer (touch devices) */
+
+.fc-event .fc-resizer {
+ display: none;
+}
+
+.fc-event.fc-allow-mouse-resize .fc-resizer,
+.fc-event.fc-selected .fc-resizer {
+ /* only show when hovering or selected (with touch) */
+ display: block;
+}
+
+/* hit area */
+
+.fc-event.fc-selected .fc-resizer:before {
+ /* 40x40 touch area */
+ content: "";
+ position: absolute;
+ z-index: 9999; /* user of this util can scope within a lower z-index */
+ top: 50%;
+ left: 50%;
+ width: 40px;
+ height: 40px;
+ margin-left: -20px;
+ margin-top: -20px;
+}
+
+
+/* Event Selection (only for touch devices)
+--------------------------------------------------------------------------------------------------*/
+
+.fc-event.fc-selected {
+ z-index: 9999 !important; /* overcomes inline z-index */
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
+}
+
+.fc-event.fc-selected.fc-dragging {
+ box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3);
}
/* Horizontal Events
--------------------------------------------------------------------------------------------------*/
+/* bigger touch area when selected */
+.fc-h-event.fc-selected:before {
+ content: "";
+ position: absolute;
+ z-index: 3; /* below resizers */
+ top: -10px;
+ bottom: -10px;
+ left: 0;
+ right: 0;
+}
+
/* events that are continuing to/from another week. kill rounded corners and butt up against edge */
.fc-ltr .fc-h-event.fc-not-start,
@@ -576,36 +624,56 @@ temporary rendered events).
border-bottom-right-radius: 0;
}
-/* resizer */
-
-.fc-h-event .fc-resizer { /* positioned it to overcome the event's borders */
- top: -1px;
- bottom: -1px;
- left: -1px;
- right: -1px;
- width: 5px;
-}
+/* resizer (cursor AND touch devices) */
/* left resizer */
.fc-ltr .fc-h-event .fc-start-resizer,
-.fc-ltr .fc-h-event .fc-start-resizer:before,
-.fc-ltr .fc-h-event .fc-start-resizer:after,
-.fc-rtl .fc-h-event .fc-end-resizer,
-.fc-rtl .fc-h-event .fc-end-resizer:before,
-.fc-rtl .fc-h-event .fc-end-resizer:after {
- right: auto; /* ignore the right and only use the left */
+.fc-rtl .fc-h-event .fc-end-resizer {
cursor: w-resize;
+ left: -1px; /* overcome border */
}
/* right resizer */
.fc-ltr .fc-h-event .fc-end-resizer,
-.fc-ltr .fc-h-event .fc-end-resizer:before,
-.fc-ltr .fc-h-event .fc-end-resizer:after,
-.fc-rtl .fc-h-event .fc-start-resizer,
-.fc-rtl .fc-h-event .fc-start-resizer:before,
-.fc-rtl .fc-h-event .fc-start-resizer:after {
- left: auto; /* ignore the left and only use the right */
+.fc-rtl .fc-h-event .fc-start-resizer {
cursor: e-resize;
+ right: -1px; /* overcome border */
+}
+
+/* resizer (mouse devices) */
+
+.fc-h-event.fc-allow-mouse-resize .fc-resizer {
+ width: 7px;
+ top: -1px; /* overcome top border */
+ bottom: -1px; /* overcome bottom border */
+}
+
+/* resizer (touch devices) */
+
+.fc-h-event.fc-selected .fc-resizer {
+ /* 8x8 little dot */
+ border-radius: 4px;
+ border-width: 1px;
+ width: 6px;
+ height: 6px;
+ border-style: solid;
+ border-color: inherit;
+ background: #fff;
+ /* vertically center */
+ top: 50%;
+ margin-top: -4px;
+}
+
+/* left resizer */
+.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,
+.fc-rtl .fc-h-event.fc-selected .fc-end-resizer {
+ margin-left: -4px; /* centers the 8x8 dot on the left edge */
+}
+
+/* right resizer */
+.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,
+.fc-rtl .fc-h-event.fc-selected .fc-start-resizer {
+ margin-right: -4px; /* centers the 8x8 dot on the right edge */
}
@@ -620,6 +688,20 @@ be a descendant of the grid when it is being dragged.
padding: 0 1px;
}
+.fc-day-grid-event.fc-selected:after {
+ content: "";
+ position: absolute;
+ z-index: 1; /* same z-index as fc-bg, behind text */
+ /* overcome the borders */
+ top: -1px;
+ right: -1px;
+ bottom: -1px;
+ left: -1px;
+ /* darkening effect */
+ background: #000;
+ opacity: .25;
+ filter: alpha(opacity=25); /* for IE */
+}
.fc-day-grid-event .fc-content { /* force events to be one-line tall */
white-space: nowrap;
@@ -630,10 +712,18 @@ be a descendant of the grid when it is being dragged.
font-weight: bold;
}
-.fc-day-grid-event .fc-resizer { /* enlarge the default hit area */
- left: -3px;
- right: -3px;
- width: 7px;
+/* resizer (cursor devices) */
+
+/* left resizer */
+.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,
+.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer {
+ margin-left: -2px; /* to the day cell's edge */
+}
+
+/* right resizer */
+.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,
+.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer {
+ margin-right: -2px; /* to the day cell's edge */
}
@@ -681,6 +771,20 @@ a.fc-more:hover {
border: 0 solid red;
}
+
+/* Utilities
+--------------------------------------------------------------------------------------------------*/
+
+.fc-unselectable {
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-touch-callout: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
/* Toolbar
--------------------------------------------------------------------------------------------------*/
@@ -1031,6 +1135,20 @@ be a descendant of the grid when it is being dragged.
overflow: hidden; /* don't let the bg flow over rounded corners */
}
+.fc-time-grid-event.fc-selected {
+ /* need to allow touch resizers to extend outside event's bounding box */
+ /* common fc-selected styles hide the fc-bg, so don't need this anyway */
+ overflow: visible;
+}
+
+.fc-time-grid-event.fc-selected .fc-bg {
+ display: none; /* hide semi-white background, to appear darker */
+}
+
+.fc-time-grid-event .fc-content {
+ overflow: hidden; /* for when .fc-selected */
+}
+
.fc-time-grid-event .fc-time,
.fc-time-grid-event .fc-title {
padding: 0 1px;
@@ -1072,9 +1190,9 @@ be a descendant of the grid when it is being dragged.
padding: 0; /* undo padding from above */
}
-/* resizer */
+/* resizer (cursor device) */
-.fc-time-grid-event .fc-resizer {
+.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
left: 0;
right: 0;
bottom: 0;
@@ -1087,10 +1205,28 @@ be a descendant of the grid when it is being dragged.
cursor: s-resize;
}
-.fc-time-grid-event .fc-resizer:after {
+.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
content: "=";
}
+/* resizer (touch device) */
+
+.fc-time-grid-event.fc-selected .fc-resizer {
+ /* 10x10 dot */
+ border-radius: 5px;
+ border-width: 1px;
+ width: 8px;
+ height: 8px;
+ border-style: solid;
+ border-color: inherit;
+ background: #fff;
+ /* horizontally center */
+ left: 50%;
+ margin-left: -5px;
+ /* center on the bottom edge */
+ bottom: -5px;
+}
+
/* Now Indicator
--------------------------------------------------------------------------------------------------*/
diff --git a/library/fullcalendar/fullcalendar.js b/library/fullcalendar/fullcalendar.js
index d6042cc17..cbe67697d 100644
--- a/library/fullcalendar/fullcalendar.js
+++ b/library/fullcalendar/fullcalendar.js
@@ -1,7 +1,7 @@
/*!
- * FullCalendar v2.6.1
+ * FullCalendar v2.7.3
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
+ * (c) 2016 Adam Shaw
*/
(function(factory) {
@@ -19,8 +19,8 @@
;;
var FC = $.fullCalendar = {
- version: "2.6.1",
- internalApiVersion: 3
+ version: "2.7.3",
+ internalApiVersion: 4
};
var fcViews = FC.views = {};
@@ -262,29 +262,25 @@ function matchCellWidths(els) {
}
-// Turns a container element into a scroller if its contents is taller than the allotted height.
-// Returns true if the element is now a scroller, false otherwise.
-// NOTE: this method is best because it takes weird zooming dimensions into account
-function setPotentialScroller(containerEl, height) {
- containerEl.height(height).addClass('fc-scroller');
-
- // are scrollbars needed?
- if (containerEl[0].scrollHeight - 1 > containerEl[0].clientHeight) { // !!! -1 because IE is often off-by-one :(
- return true;
- }
-
- unsetScroller(containerEl); // undo
- return false;
-}
+// Given one element that resides inside another,
+// Subtracts the height of the inner element from the outer element.
+function subtractInnerElHeight(outerEl, innerEl) {
+ var both = outerEl.add(innerEl);
+ var diff;
+ // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked
+ both.css({
+ position: 'relative', // cause a reflow, which will force fresh dimension recalculation
+ left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll
+ });
+ diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions
+ both.css({ position: '', left: '' }); // undo hack
-// Takes an element that might have been a scroller, and turns it back into a normal element.
-function unsetScroller(containerEl) {
- containerEl.height('').removeClass('fc-scroller');
+ return diff;
}
-/* General DOM Utilities
+/* Element Geom Utilities
----------------------------------------------------------------------------------------------------------------------*/
FC.getOuterRect = getOuterRect;
@@ -309,26 +305,30 @@ function getScrollParent(el) {
// Queries the outer bounding area of a jQuery element.
// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
-function getOuterRect(el) {
+// Origin is optional.
+function getOuterRect(el, origin) {
var offset = el.offset();
+ var left = offset.left - (origin ? origin.left : 0);
+ var top = offset.top - (origin ? origin.top : 0);
return {
- left: offset.left,
- right: offset.left + el.outerWidth(),
- top: offset.top,
- bottom: offset.top + el.outerHeight()
+ left: left,
+ right: left + el.outerWidth(),
+ top: top,
+ bottom: top + el.outerHeight()
};
}
// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.
// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
+// Origin is optional.
// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.
-function getClientRect(el) {
+function getClientRect(el, origin) {
var offset = el.offset();
var scrollbarWidths = getScrollbarWidths(el);
- var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left;
- var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top;
+ var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);
+ var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);
return {
left: left,
@@ -341,10 +341,13 @@ function getClientRect(el) {
// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.
// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).
-function getContentRect(el) {
+// Origin is optional.
+function getContentRect(el, origin) {
var offset = el.offset(); // just outside of border, margin not included
- var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left');
- var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top');
+ var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -
+ (origin ? origin.left : 0);
+ var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -
+ (origin ? origin.top : 0);
return {
left: left,
@@ -414,13 +417,82 @@ function getCssFloat(el, prop) {
}
+/* Mouse / Touch Utilities
+----------------------------------------------------------------------------------------------------------------------*/
+
+FC.preventDefault = preventDefault;
+
+
// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
function isPrimaryMouseButton(ev) {
return ev.which == 1 && !ev.ctrlKey;
}
-/* Geometry
+function getEvX(ev) {
+ if (ev.pageX !== undefined) {
+ return ev.pageX;
+ }
+ var touches = ev.originalEvent.touches;
+ if (touches) {
+ return touches[0].pageX;
+ }
+}
+
+
+function getEvY(ev) {
+ if (ev.pageY !== undefined) {
+ return ev.pageY;
+ }
+ var touches = ev.originalEvent.touches;
+ if (touches) {
+ return touches[0].pageY;
+ }
+}
+
+
+function getEvIsTouch(ev) {
+ return /^touch/.test(ev.type);
+}
+
+
+function preventSelection(el) {
+ el.addClass('fc-unselectable')
+ .on('selectstart', preventDefault);
+}
+
+
+// Stops a mouse/touch event from doing it's native browser action
+function preventDefault(ev) {
+ ev.preventDefault();
+}
+
+
+// attach a handler to get called when ANY scroll action happens on the page.
+// this was impossible to do with normal on/off because 'scroll' doesn't bubble.
+// http://stackoverflow.com/a/32954565/96342
+// returns `true` on success.
+function bindAnyScroll(handler) {
+ if (window.addEventListener) {
+ window.addEventListener('scroll', handler, true); // useCapture=true
+ return true;
+ }
+ return false;
+}
+
+
+// undoes bindAnyScroll. must pass in the original function.
+// returns `true` on success.
+function unbindAnyScroll(handler) {
+ if (window.removeEventListener) {
+ window.removeEventListener('scroll', handler, true); // useCapture=true
+ return true;
+ }
+ return false;
+}
+
+
+/* General Geometry Utils
----------------------------------------------------------------------------------------------------------------------*/
FC.intersectRects = intersectRects;
@@ -946,22 +1018,21 @@ function proxy(obj, methodName) {
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
-// N milliseconds.
+// N milliseconds. If `immediate` is passed, trigger the function on the
+// leading edge, instead of the trailing.
// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714
-function debounce(func, wait) {
- var timeoutId;
- var args;
- var context;
- var timestamp; // of most recent call
+function debounce(func, wait, immediate) {
+ var timeout, args, context, timestamp, result;
+
var later = function() {
var last = +new Date() - timestamp;
- if (last < wait && last > 0) {
- timeoutId = setTimeout(later, wait - last);
+ if (last < wait) {
+ timeout = setTimeout(later, wait - last);
}
else {
- timeoutId = null;
- func.apply(context, args);
- if (!timeoutId) {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
context = args = null;
}
}
@@ -971,9 +1042,15 @@ function debounce(func, wait) {
context = this;
args = arguments;
timestamp = +new Date();
- if (!timeoutId) {
- timeoutId = setTimeout(later, wait);
+ var callNow = immediate && !timeout;
+ if (!timeout) {
+ timeout = setTimeout(later, wait);
+ }
+ if (callNow) {
+ result = func.apply(context, args);
+ context = args = null;
}
+ return result;
};
}
@@ -1777,61 +1854,162 @@ function extendClass(superClass, members) {
function mixIntoClass(theClass, members) {
- copyOwnProps(members.prototype || members, theClass.prototype); // TODO: copyNativeMethods?
+ copyOwnProps(members, theClass.prototype); // TODO: copyNativeMethods?
}
;;
-var Emitter = FC.Emitter = Class.extend({
+var EmitterMixin = FC.EmitterMixin = {
+
+ // jQuery-ification via $(this) allows a non-DOM object to have
+ // the same event handling capabilities (including namespaces).
+
+
+ on: function(types, handler) {
- callbackHash: null,
+ // handlers are always called with an "event" object as their first param.
+ // sneak the `this` context and arguments into the extra parameter object
+ // and forward them on to the original handler.
+ var intercept = function(ev, extra) {
+ return handler.apply(
+ extra.context || this,
+ extra.args || []
+ );
+ };
+
+ // mimick jQuery's internal "proxy" system (risky, I know)
+ // causing all functions with the same .guid to appear to be the same.
+ // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448
+ // this is needed for calling .off with the original non-intercept handler.
+ if (!handler.guid) {
+ handler.guid = $.guid++;
+ }
+ intercept.guid = handler.guid;
+ $(this).on(types, intercept);
- on: function(name, callback) {
- this.getCallbacks(name).add(callback);
return this; // for chaining
},
- off: function(name, callback) {
- this.getCallbacks(name).remove(callback);
+ off: function(types, handler) {
+ $(this).off(types, handler);
+
return this; // for chaining
},
- trigger: function(name) { // args...
- var args = Array.prototype.slice.call(arguments, 1);
+ trigger: function(types) {
+ var args = Array.prototype.slice.call(arguments, 1); // arguments after the first
- this.triggerWith(name, this, args);
+ // pass in "extra" info to the intercept
+ $(this).triggerHandler(types, { args: args });
return this; // for chaining
},
- triggerWith: function(name, context, args) {
- var callbacks = this.getCallbacks(name);
+ triggerWith: function(types, context, args) {
- callbacks.fireWith(context, args);
+ // `triggerHandler` is less reliant on the DOM compared to `trigger`.
+ // pass in "extra" info to the intercept.
+ $(this).triggerHandler(types, { context: context, args: args });
return this; // for chaining
- },
+ }
+};
- getCallbacks: function(name) {
- var callbacks;
+;;
- if (!this.callbackHash) {
- this.callbackHash = {};
- }
+/*
+Utility methods for easily listening to events on another object,
+and more importantly, easily unlistening from them.
+*/
+var ListenerMixin = FC.ListenerMixin = (function() {
+ var guid = 0;
+ var ListenerMixin = {
+
+ listenerId: null,
+
+ /*
+ Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.
+ The `callback` will be called with the `this` context of the object that .listenTo is being called on.
+ Can be called:
+ .listenTo(other, eventName, callback)
+ OR
+ .listenTo(other, {
+ eventName1: callback1,
+ eventName2: callback2
+ })
+ */
+ listenTo: function(other, arg, callback) {
+ if (typeof arg === 'object') { // given dictionary of callbacks
+ for (var eventName in arg) {
+ if (arg.hasOwnProperty(eventName)) {
+ this.listenTo(other, eventName, arg[eventName]);
+ }
+ }
+ }
+ else if (typeof arg === 'string') {
+ other.on(
+ arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object
+ $.proxy(callback, this) // always use `this` context
+ // the usually-undesired jQuery guid behavior doesn't matter,
+ // because we always unbind via namespace
+ );
+ }
+ },
+
+ /*
+ Causes the current object to stop listening to events on the `other` object.
+ `eventName` is optional. If omitted, will stop listening to ALL events on `other`.
+ */
+ stopListeningTo: function(other, eventName) {
+ other.off((eventName || '') + '.' + this.getListenerNamespace());
+ },
- callbacks = this.callbackHash[name];
- if (!callbacks) {
- callbacks = this.callbackHash[name] = $.Callbacks();
+ /*
+ Returns a string, unique to this object, to be used for event namespacing
+ */
+ getListenerNamespace: function() {
+ if (this.listenerId == null) {
+ this.listenerId = guid++;
+ }
+ return '_listener' + this.listenerId;
}
- return callbacks;
+ };
+ return ListenerMixin;
+})();
+;;
+
+// simple class for toggle a `isIgnoringMouse` flag on delay
+// initMouseIgnoring must first be called, with a millisecond delay setting.
+var MouseIgnorerMixin = {
+
+ isIgnoringMouse: false, // bool
+ delayUnignoreMouse: null, // method
+
+
+ initMouseIgnoring: function(delay) {
+ this.delayUnignoreMouse = debounce(proxy(this, 'unignoreMouse'), delay || 1000);
+ },
+
+
+ // temporarily ignore mouse actions on segments
+ tempIgnoreMouse: function() {
+ this.isIgnoringMouse = true;
+ this.delayUnignoreMouse();
+ },
+
+
+ // delayUnignoreMouse eventually calls this
+ unignoreMouse: function() {
+ this.isIgnoringMouse = false;
}
-});
+};
+
;;
/* A rectangular panel that is absolutely positioned over other content
@@ -1848,12 +2026,11 @@ Options:
- hide (callback)
*/
-var Popover = Class.extend({
+var Popover = Class.extend(ListenerMixin, {
isHidden: true,
options: null,
el: null, // the container element for the popover. generated by this object
- documentMousedownProxy: null, // document mousedown handler bound to `this`
margin: 10, // the space required between the popover and the edges of the scroll container
@@ -1907,7 +2084,7 @@ var Popover = Class.extend({
});
if (options.autoHide) {
- $(document).on('mousedown', this.documentMousedownProxy = proxy(this, 'documentMousedown'));
+ this.listenTo($(document), 'mousedown', this.documentMousedown);
}
},
@@ -1930,7 +2107,7 @@ var Popover = Class.extend({
this.el = null;
}
- $(document).off('mousedown', this.documentMousedownProxy);
+ this.stopListeningTo($(document), 'mousedown');
},
@@ -2243,257 +2420,421 @@ var CoordCache = FC.CoordCache = Class.extend({
----------------------------------------------------------------------------------------------------------------------*/
// TODO: use Emitter
-var DragListener = FC.DragListener = Class.extend({
+var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMixin, {
options: null,
- isListening: false,
- isDragging: false,
+ // for IE8 bug-fighting behavior
+ subjectEl: null,
+ subjectHref: null,
// coordinates of the initial mousedown
originX: null,
originY: null,
- // handler attached to the document, bound to the DragListener's `this`
- mousemoveProxy: null,
- mouseupProxy: null,
+ // the wrapping element that scrolls, or MIGHT scroll if there's overflow.
+ // TODO: do this for wrappers that have overflow:hidden as well.
+ scrollEl: null,
- // for IE8 bug-fighting behavior, for now
- subjectEl: null, // the element being draged. optional
- subjectHref: null,
+ isInteracting: false,
+ isDistanceSurpassed: false,
+ isDelayEnded: false,
+ isDragging: false,
+ isTouch: false,
- scrollEl: null,
- scrollBounds: null, // { top, bottom, left, right }
- scrollTopVel: null, // pixels per second
- scrollLeftVel: null, // pixels per second
- scrollIntervalId: null, // ID of setTimeout for scrolling animation loop
- scrollHandlerProxy: null, // this-scoped function for handling when scrollEl is scrolled
+ delay: null,
+ delayTimeoutId: null,
+ minDistance: null,
- scrollSensitivity: 30, // pixels from edge for scrolling to start
- scrollSpeed: 200, // pixels per second, at maximum speed
- scrollIntervalMs: 50, // millisecond wait between scroll increment
+ handleTouchScrollProxy: null, // calls handleTouchScroll, always bound to `this`
constructor: function(options) {
- options = options || {};
- this.options = options;
- this.subjectEl = options.subjectEl;
+ this.options = options || {};
+ this.handleTouchScrollProxy = proxy(this, 'handleTouchScroll');
+ this.initMouseIgnoring(500);
},
- // Call this when the user does a mousedown. Will probably lead to startListening
- mousedown: function(ev) {
- if (isPrimaryMouseButton(ev)) {
+ // Interaction (high-level)
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ startInteraction: function(ev, extraOptions) {
+ var isTouch = getEvIsTouch(ev);
+
+ if (ev.type === 'mousedown') {
+ if (this.isIgnoringMouse) {
+ return;
+ }
+ else if (!isPrimaryMouseButton(ev)) {
+ return;
+ }
+ else {
+ ev.preventDefault(); // prevents native selection in most browsers
+ }
+ }
+
+ if (!this.isInteracting) {
+
+ // process options
+ extraOptions = extraOptions || {};
+ this.delay = firstDefined(extraOptions.delay, this.options.delay, 0);
+ this.minDistance = firstDefined(extraOptions.distance, this.options.distance, 0);
+ this.subjectEl = this.options.subjectEl;
+
+ this.isInteracting = true;
+ this.isTouch = isTouch;
+ this.isDelayEnded = false;
+ this.isDistanceSurpassed = false;
- ev.preventDefault(); // prevents native selection in most browsers
+ this.originX = getEvX(ev);
+ this.originY = getEvY(ev);
+ this.scrollEl = getScrollParent($(ev.target));
- this.startListening(ev);
+ this.bindHandlers();
+ this.initAutoScroll();
+ this.handleInteractionStart(ev);
+ this.startDelay(ev);
- // start the drag immediately if there is no minimum distance for a drag start
- if (!this.options.distance) {
- this.startDrag(ev);
+ if (!this.minDistance) {
+ this.handleDistanceSurpassed(ev);
}
}
},
- // Call this to start tracking mouse movements
- startListening: function(ev) {
- var scrollParent;
+ handleInteractionStart: function(ev) {
+ this.trigger('interactionStart', ev);
+ },
- if (!this.isListening) {
- // grab scroll container and attach handler
- if (ev && this.options.scroll) {
- scrollParent = getScrollParent($(ev.target));
- if (!scrollParent.is(window) && !scrollParent.is(document)) {
- this.scrollEl = scrollParent;
+ endInteraction: function(ev, isCancelled) {
+ if (this.isInteracting) {
+ this.endDrag(ev);
- // scope to `this`, and use `debounce` to make sure rapid calls don't happen
- this.scrollHandlerProxy = debounce(proxy(this, 'scrollHandler'), 100);
- this.scrollEl.on('scroll', this.scrollHandlerProxy);
- }
+ if (this.delayTimeoutId) {
+ clearTimeout(this.delayTimeoutId);
+ this.delayTimeoutId = null;
}
- $(document)
- .on('mousemove', this.mousemoveProxy = proxy(this, 'mousemove'))
- .on('mouseup', this.mouseupProxy = proxy(this, 'mouseup'))
- .on('selectstart', this.preventDefault); // prevents native selection in IE<=8
+ this.destroyAutoScroll();
+ this.unbindHandlers();
+
+ this.isInteracting = false;
+ this.handleInteractionEnd(ev, isCancelled);
- if (ev) {
- this.originX = ev.pageX;
- this.originY = ev.pageY;
+ // a touchstart+touchend on the same element will result in the following addition simulated events:
+ // mouseover + mouseout + click
+ // let's ignore these bogus events
+ if (this.isTouch) {
+ this.tempIgnoreMouse();
}
- else {
- // if no starting information was given, origin will be the topleft corner of the screen.
- // if so, dx/dy in the future will be the absolute coordinates.
- this.originX = 0;
- this.originY = 0;
+ }
+ },
+
+
+ handleInteractionEnd: function(ev, isCancelled) {
+ this.trigger('interactionEnd', ev, isCancelled || false);
+ },
+
+
+ // Binding To DOM
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ bindHandlers: function() {
+ var _this = this;
+ var touchStartIgnores = 1;
+
+ if (this.isTouch) {
+ this.listenTo($(document), {
+ touchmove: this.handleTouchMove,
+ touchend: this.endInteraction,
+ touchcancel: this.endInteraction,
+
+ // Sometimes touchend doesn't fire
+ // (can't figure out why. touchcancel doesn't fire either. has to do with scrolling?)
+ // If another touchstart happens, we know it's bogus, so cancel the drag.
+ // touchend will continue to be broken until user does a shorttap/scroll, but this is best we can do.
+ touchstart: function(ev) {
+ if (touchStartIgnores) { // bindHandlers is called from within a touchstart,
+ touchStartIgnores--; // and we don't want this to fire immediately, so ignore.
+ }
+ else {
+ _this.endInteraction(ev, true); // isCancelled=true
+ }
+ }
+ });
+
+ // listen to ALL scroll actions on the page
+ if (
+ !bindAnyScroll(this.handleTouchScrollProxy) && // hopefully this works and short-circuits the rest
+ this.scrollEl // otherwise, attach a single handler to this
+ ) {
+ this.listenTo(this.scrollEl, 'scroll', this.handleTouchScroll);
}
+ }
+ else {
+ this.listenTo($(document), {
+ mousemove: this.handleMouseMove,
+ mouseup: this.endInteraction
+ });
+ }
- this.isListening = true;
- this.listenStart(ev);
+ this.listenTo($(document), {
+ selectstart: preventDefault, // don't allow selection while dragging
+ contextmenu: preventDefault // long taps would open menu on Chrome dev tools
+ });
+ },
+
+
+ unbindHandlers: function() {
+ this.stopListeningTo($(document));
+
+ // unbind scroll listening
+ unbindAnyScroll(this.handleTouchScrollProxy);
+ if (this.scrollEl) {
+ this.stopListeningTo(this.scrollEl, 'scroll');
+ }
+ },
+
+
+ // Drag (high-level)
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ // extraOptions ignored if drag already started
+ startDrag: function(ev, extraOptions) {
+ this.startInteraction(ev, extraOptions); // ensure interaction began
+
+ if (!this.isDragging) {
+ this.isDragging = true;
+ this.handleDragStart(ev);
}
},
- // Called when drag listening has started (but a real drag has not necessarily began)
- listenStart: function(ev) {
- this.trigger('listenStart', ev);
+ handleDragStart: function(ev) {
+ this.trigger('dragStart', ev);
+ this.initHrefHack();
},
- // Called when the user moves the mouse
- mousemove: function(ev) {
- var dx = ev.pageX - this.originX;
- var dy = ev.pageY - this.originY;
- var minDistance;
+ handleMove: function(ev) {
+ var dx = getEvX(ev) - this.originX;
+ var dy = getEvY(ev) - this.originY;
+ var minDistance = this.minDistance;
var distanceSq; // current distance from the origin, squared
- if (!this.isDragging) { // if not already dragging...
- // then start the drag if the minimum distance criteria is met
- minDistance = this.options.distance || 1;
+ if (!this.isDistanceSurpassed) {
distanceSq = dx * dx + dy * dy;
if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
- this.startDrag(ev);
+ this.handleDistanceSurpassed(ev);
}
}
if (this.isDragging) {
- this.drag(dx, dy, ev); // report a drag, even if this mousemove initiated the drag
+ this.handleDrag(dx, dy, ev);
}
},
- // Call this to initiate a legitimate drag.
- // This function is called internally from this class, but can also be called explicitly from outside
- startDrag: function(ev) {
+ // Called while the mouse is being moved and when we know a legitimate drag is taking place
+ handleDrag: function(dx, dy, ev) {
+ this.trigger('drag', dx, dy, ev);
+ this.updateAutoScroll(ev); // will possibly cause scrolling
+ },
- if (!this.isListening) { // startDrag must have manually initiated
- this.startListening();
- }
- if (!this.isDragging) {
- this.isDragging = true;
- this.dragStart(ev);
+ endDrag: function(ev) {
+ if (this.isDragging) {
+ this.isDragging = false;
+ this.handleDragEnd(ev);
}
},
- // Called when the actual drag has started (went beyond minDistance)
- dragStart: function(ev) {
- var subjectEl = this.subjectEl;
+ handleDragEnd: function(ev) {
+ this.trigger('dragEnd', ev);
+ this.destroyHrefHack();
+ },
- this.trigger('dragStart', ev);
- // remove a mousedown'd <a>'s href so it is not visited (IE8 bug)
- if ((this.subjectHref = subjectEl ? subjectEl.attr('href') : null)) {
- subjectEl.removeAttr('href');
+ // Delay
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ startDelay: function(initialEv) {
+ var _this = this;
+
+ if (this.delay) {
+ this.delayTimeoutId = setTimeout(function() {
+ _this.handleDelayEnd(initialEv);
+ }, this.delay);
+ }
+ else {
+ this.handleDelayEnd(initialEv);
}
},
- // Called while the mouse is being moved and when we know a legitimate drag is taking place
- drag: function(dx, dy, ev) {
- this.trigger('drag', dx, dy, ev);
- this.updateScroll(ev); // will possibly cause scrolling
+ handleDelayEnd: function(initialEv) {
+ this.isDelayEnded = true;
+
+ if (this.isDistanceSurpassed) {
+ this.startDrag(initialEv);
+ }
},
- // Called when the user does a mouseup
- mouseup: function(ev) {
- this.stopListening(ev);
+ // Distance
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ handleDistanceSurpassed: function(ev) {
+ this.isDistanceSurpassed = true;
+
+ if (this.isDelayEnded) {
+ this.startDrag(ev);
+ }
},
- // Called when the drag is over. Will not cause listening to stop however.
- // A concluding 'cellOut' event will NOT be triggered.
- stopDrag: function(ev) {
+ // Mouse / Touch
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ handleTouchMove: function(ev) {
+ // prevent inertia and touchmove-scrolling while dragging
if (this.isDragging) {
- this.stopScrolling();
- this.dragStop(ev);
- this.isDragging = false;
+ ev.preventDefault();
}
+
+ this.handleMove(ev);
},
- // Called when dragging has been stopped
- dragStop: function(ev) {
- var _this = this;
+ handleMouseMove: function(ev) {
+ this.handleMove(ev);
+ },
- this.trigger('dragStop', ev);
- // restore a mousedown'd <a>'s href (for IE8 bug)
- setTimeout(function() { // must be outside of the click's execution
- if (_this.subjectHref) {
- _this.subjectEl.attr('href', _this.subjectHref);
- }
- }, 0);
- },
+ // Scrolling (unrelated to auto-scroll)
+ // -----------------------------------------------------------------------------------------------------------------
- // Call this to stop listening to the user's mouse events
- stopListening: function(ev) {
- this.stopDrag(ev); // if there's a current drag, kill it
+ handleTouchScroll: function(ev) {
+ // if the drag is being initiated by touch, but a scroll happens before
+ // the drag-initiating delay is over, cancel the drag
+ if (!this.isDragging) {
+ this.endInteraction(ev, true); // isCancelled=true
+ }
+ },
- if (this.isListening) {
- // remove the scroll handler if there is a scrollEl
- if (this.scrollEl) {
- this.scrollEl.off('scroll', this.scrollHandlerProxy);
- this.scrollHandlerProxy = null;
- }
+ // <A> HREF Hack
+ // -----------------------------------------------------------------------------------------------------------------
- $(document)
- .off('mousemove', this.mousemoveProxy)
- .off('mouseup', this.mouseupProxy)
- .off('selectstart', this.preventDefault);
- this.mousemoveProxy = null;
- this.mouseupProxy = null;
+ initHrefHack: function() {
+ var subjectEl = this.subjectEl;
- this.isListening = false;
- this.listenStop(ev);
+ // remove a mousedown'd <a>'s href so it is not visited (IE8 bug)
+ if ((this.subjectHref = subjectEl ? subjectEl.attr('href') : null)) {
+ subjectEl.removeAttr('href');
}
},
- // Called when drag listening has stopped
- listenStop: function(ev) {
- this.trigger('listenStop', ev);
+ destroyHrefHack: function() {
+ var subjectEl = this.subjectEl;
+ var subjectHref = this.subjectHref;
+
+ // restore a mousedown'd <a>'s href (for IE8 bug)
+ setTimeout(function() { // must be outside of the click's execution
+ if (subjectHref) {
+ subjectEl.attr('href', subjectHref);
+ }
+ }, 0);
},
+ // Utils
+ // -----------------------------------------------------------------------------------------------------------------
+
+
// Triggers a callback. Calls a function in the option hash of the same name.
// Arguments beyond the first `name` are forwarded on.
trigger: function(name) {
if (this.options[name]) {
this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
}
- },
+ // makes _methods callable by event name. TODO: kill this
+ if (this['_' + name]) {
+ this['_' + name].apply(this, Array.prototype.slice.call(arguments, 1));
+ }
+ }
+
+
+});
+
+;;
+/*
+this.scrollEl is set in DragListener
+*/
+DragListener.mixin({
+ isAutoScroll: false,
- // Stops a given mouse event from doing it's native browser action. In our case, text selection.
- preventDefault: function(ev) {
- ev.preventDefault();
+ scrollBounds: null, // { top, bottom, left, right }
+ scrollTopVel: null, // pixels per second
+ scrollLeftVel: null, // pixels per second
+ scrollIntervalId: null, // ID of setTimeout for scrolling animation loop
+
+ // defaults
+ scrollSensitivity: 30, // pixels from edge for scrolling to start
+ scrollSpeed: 200, // pixels per second, at maximum speed
+ scrollIntervalMs: 50, // millisecond wait between scroll increment
+
+
+ initAutoScroll: function() {
+ var scrollEl = this.scrollEl;
+
+ this.isAutoScroll =
+ this.options.scroll &&
+ scrollEl &&
+ !scrollEl.is(window) &&
+ !scrollEl.is(document);
+
+ if (this.isAutoScroll) {
+ // debounce makes sure rapid calls don't happen
+ this.listenTo(scrollEl, 'scroll', debounce(this.handleDebouncedScroll, 100));
+ }
},
- /* Scrolling
- ------------------------------------------------------------------------------------------------------------------*/
+ destroyAutoScroll: function() {
+ this.endAutoScroll(); // kill any animation loop
+
+ // remove the scroll handler if there is a scrollEl
+ if (this.isAutoScroll) {
+ this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(
+ }
+ },
// Computes and stores the bounding rectangle of scrollEl
computeScrollBounds: function() {
- var el = this.scrollEl;
-
- this.scrollBounds = el ? getOuterRect(el) : null;
+ if (this.isAutoScroll) {
+ this.scrollBounds = getOuterRect(this.scrollEl);
// TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars
+ }
},
// Called when the dragging is in progress and scrolling should be updated
- updateScroll: function(ev) {
+ updateAutoScroll: function(ev) {
var sensitivity = this.scrollSensitivity;
var bounds = this.scrollBounds;
var topCloseness, bottomCloseness;
@@ -2504,10 +2845,10 @@ var DragListener = FC.DragListener = Class.extend({
if (bounds) { // only scroll if scrollEl exists
// compute closeness to edges. valid range is from 0.0 - 1.0
- topCloseness = (sensitivity - (ev.pageY - bounds.top)) / sensitivity;
- bottomCloseness = (sensitivity - (bounds.bottom - ev.pageY)) / sensitivity;
- leftCloseness = (sensitivity - (ev.pageX - bounds.left)) / sensitivity;
- rightCloseness = (sensitivity - (bounds.right - ev.pageX)) / sensitivity;
+ topCloseness = (sensitivity - (getEvY(ev) - bounds.top)) / sensitivity;
+ bottomCloseness = (sensitivity - (bounds.bottom - getEvY(ev))) / sensitivity;
+ leftCloseness = (sensitivity - (getEvX(ev) - bounds.left)) / sensitivity;
+ rightCloseness = (sensitivity - (bounds.right - getEvX(ev))) / sensitivity;
// translate vertical closeness into velocity.
// mouse must be completely in bounds for velocity to happen.
@@ -2594,38 +2935,36 @@ var DragListener = FC.DragListener = Class.extend({
// if scrolled all the way, which causes the vels to be zero, stop the animation loop
if (!this.scrollTopVel && !this.scrollLeftVel) {
- this.stopScrolling();
+ this.endAutoScroll();
}
},
// Kills any existing scrolling animation loop
- stopScrolling: function() {
+ endAutoScroll: function() {
if (this.scrollIntervalId) {
clearInterval(this.scrollIntervalId);
this.scrollIntervalId = null;
- // when all done with scrolling, recompute positions since they probably changed
- this.scrollStop();
+ this.handleScrollEnd();
}
},
// Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)
- scrollHandler: function() {
+ handleDebouncedScroll: function() {
// recompute all coordinates, but *only* if this is *not* part of our scrolling animation
if (!this.scrollIntervalId) {
- this.scrollStop();
+ this.handleScrollEnd();
}
},
// Called when scrolling has stopped, whether through auto scroll, or the user scrolling
- scrollStop: function() {
+ handleScrollEnd: function() {
}
});
-
;;
/* Tracks mouse movements over a component and raises events about which hit the mouse is over.
@@ -2654,18 +2993,16 @@ var HitDragListener = DragListener.extend({
// Called when drag listening starts (but a real drag has not necessarily began).
// ev might be undefined if dragging was started manually.
- listenStart: function(ev) {
+ handleInteractionStart: function(ev) {
var subjectEl = this.subjectEl;
var subjectRect;
var origPoint;
var point;
- DragListener.prototype.listenStart.apply(this, arguments); // call the super-method
-
this.computeCoords();
if (ev) {
- origPoint = { left: ev.pageX, top: ev.pageY };
+ origPoint = { left: getEvX(ev), top: getEvY(ev) };
point = origPoint;
// constrain the point to bounds of the element being dragged
@@ -2695,61 +3032,64 @@ var HitDragListener = DragListener.extend({
this.origHit = null;
this.coordAdjust = null;
}
+
+ // call the super-method. do it after origHit has been computed
+ DragListener.prototype.handleInteractionStart.apply(this, arguments);
},
// Recomputes the drag-critical positions of elements
computeCoords: function() {
this.component.prepareHits();
- this.computeScrollBounds(); // why is this here???
+ this.computeScrollBounds(); // why is this here??????
},
// Called when the actual drag has started
- dragStart: function(ev) {
+ handleDragStart: function(ev) {
var hit;
- DragListener.prototype.dragStart.apply(this, arguments); // call the super-method
+ DragListener.prototype.handleDragStart.apply(this, arguments); // call the super-method
// might be different from this.origHit if the min-distance is large
- hit = this.queryHit(ev.pageX, ev.pageY);
+ hit = this.queryHit(getEvX(ev), getEvY(ev));
// report the initial hit the mouse is over
// especially important if no min-distance and drag starts immediately
if (hit) {
- this.hitOver(hit);
+ this.handleHitOver(hit);
}
},
// Called when the drag moves
- drag: function(dx, dy, ev) {
+ handleDrag: function(dx, dy, ev) {
var hit;
- DragListener.prototype.drag.apply(this, arguments); // call the super-method
+ DragListener.prototype.handleDrag.apply(this, arguments); // call the super-method
- hit = this.queryHit(ev.pageX, ev.pageY);
+ hit = this.queryHit(getEvX(ev), getEvY(ev));
if (!isHitsEqual(hit, this.hit)) { // a different hit than before?
if (this.hit) {
- this.hitOut();
+ this.handleHitOut();
}
if (hit) {
- this.hitOver(hit);
+ this.handleHitOver(hit);
}
}
},
// Called when dragging has been stopped
- dragStop: function() {
- this.hitDone();
- DragListener.prototype.dragStop.apply(this, arguments); // call the super-method
+ handleDragEnd: function() {
+ this.handleHitDone();
+ DragListener.prototype.handleDragEnd.apply(this, arguments); // call the super-method
},
// Called when a the mouse has just moved over a new hit
- hitOver: function(hit) {
+ handleHitOver: function(hit) {
var isOrig = isHitsEqual(hit, this.origHit);
this.hit = hit;
@@ -2759,26 +3099,26 @@ var HitDragListener = DragListener.extend({
// Called when the mouse has just moved out of a hit
- hitOut: function() {
+ handleHitOut: function() {
if (this.hit) {
this.trigger('hitOut', this.hit);
- this.hitDone();
+ this.handleHitDone();
this.hit = null;
}
},
// Called after a hitOut. Also called before a dragStop
- hitDone: function() {
+ handleHitDone: function() {
if (this.hit) {
this.trigger('hitDone', this.hit);
}
},
- // Called when drag listening has stopped
- listenStop: function() {
- DragListener.prototype.listenStop.apply(this, arguments); // call the super-method
+ // Called when the interaction ends, whether there was a real drag or not
+ handleInteractionEnd: function() {
+ DragListener.prototype.handleInteractionEnd.apply(this, arguments); // call the super-method
this.origHit = null;
this.hit = null;
@@ -2788,8 +3128,8 @@ var HitDragListener = DragListener.extend({
// Called when scrolling has stopped, whether through auto scroll, or the user scrolling
- scrollStop: function() {
- DragListener.prototype.scrollStop.apply(this, arguments); // call the super-method
+ handleScrollEnd: function() {
+ DragListener.prototype.handleScrollEnd.apply(this, arguments); // call the super-method
this.computeCoords(); // hits' absolute positions will be in new places. recompute
},
@@ -2844,7 +3184,7 @@ function isHitPropsWithin(subHit, superHit) {
/* Creates a clone of an element and lets it track the mouse as it moves
----------------------------------------------------------------------------------------------------------------------*/
-var MouseFollower = Class.extend({
+var MouseFollower = Class.extend(ListenerMixin, {
options: null,
@@ -2856,16 +3196,14 @@ var MouseFollower = Class.extend({
top0: null,
left0: null,
- // the initial position of the mouse
- mouseY0: null,
- mouseX0: null,
+ // the absolute coordinates of the initiating touch/mouse action
+ y0: null,
+ x0: null,
// the number of pixels the mouse has moved from its initial position
topDelta: null,
leftDelta: null,
- mousemoveProxy: null, // document mousemove handler, bound to the MouseFollower's `this`
-
isFollowing: false,
isHidden: false,
isAnimating: false, // doing the revert animation?
@@ -2882,8 +3220,8 @@ var MouseFollower = Class.extend({
if (!this.isFollowing) {
this.isFollowing = true;
- this.mouseY0 = ev.pageY;
- this.mouseX0 = ev.pageX;
+ this.y0 = getEvY(ev);
+ this.x0 = getEvX(ev);
this.topDelta = 0;
this.leftDelta = 0;
@@ -2891,7 +3229,12 @@ var MouseFollower = Class.extend({
this.updatePosition();
}
- $(document).on('mousemove', this.mousemoveProxy = proxy(this, 'mousemove'));
+ if (getEvIsTouch(ev)) {
+ this.listenTo($(document), 'touchmove', this.handleMove);
+ }
+ else {
+ this.listenTo($(document), 'mousemove', this.handleMove);
+ }
}
},
@@ -2916,7 +3259,7 @@ var MouseFollower = Class.extend({
if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time
this.isFollowing = false;
- $(document).off('mousemove', this.mousemoveProxy);
+ this.stopListeningTo($(document));
if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?
this.isAnimating = true;
@@ -2942,6 +3285,7 @@ var MouseFollower = Class.extend({
if (!el) {
this.sourceEl.width(); // hack to force IE8 to compute correct bounding box
el = this.el = this.sourceEl.clone()
+ .addClass(this.options.additionalClass || '')
.css({
position: 'absolute',
visibility: '', // in case original element was hidden (commonly through hideEvents())
@@ -2953,8 +3297,13 @@ var MouseFollower = Class.extend({
height: this.sourceEl.height(), // explicit width in case there was a 'bottom' value
opacity: this.options.opacity || '',
zIndex: this.options.zIndex
- })
- .appendTo(this.parentEl);
+ });
+
+ // we don't want long taps or any mouse interaction causing selection/menus.
+ // would use preventSelection(), but that prevents selectstart, causing problems.
+ el.addClass('fc-unselectable');
+
+ el.appendTo(this.parentEl);
}
return el;
@@ -2994,9 +3343,9 @@ var MouseFollower = Class.extend({
// Gets called when the user moves the mouse
- mousemove: function(ev) {
- this.topDelta = ev.pageY - this.mouseY0;
- this.leftDelta = ev.pageX - this.mouseX0;
+ handleMove: function(ev) {
+ this.topDelta = getEvY(ev) - this.y0;
+ this.leftDelta = getEvX(ev) - this.x0;
if (!this.isHidden) {
this.updatePosition();
@@ -3031,7 +3380,7 @@ var MouseFollower = Class.extend({
/* An abstract class comprised of a "grid" of areas that each represent a specific datetime
----------------------------------------------------------------------------------------------------------------------*/
-var Grid = FC.Grid = Class.extend({
+var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, {
view: null, // a View object
isRTL: null, // shortcut to the view's isRTL option
@@ -3042,8 +3391,6 @@ var Grid = FC.Grid = Class.extend({
el: null, // the containing element
elsByFill: null, // a hash of jQuery element sets used for rendering each fill. Keyed by fill name.
- externalDragStartProxy: null, // binds the Grid's scope to externalDragStart (in DayGrid.events)
-
// derived from options
eventTimeFormat: null,
displayEventTime: null,
@@ -3056,13 +3403,19 @@ var Grid = FC.Grid = Class.extend({
// TODO: port isTimeScale into same system?
largeUnit: null,
+ dayDragListener: null,
+ segDragListener: null,
+ segResizeListener: null,
+ externalDragListener: null,
+
constructor: function(view) {
this.view = view;
this.isRTL = view.opt('isRTL');
-
this.elsByFill = {};
- this.externalDragStartProxy = proxy(this, 'externalDragStart');
+
+ this.dayDragListener = this.buildDayDragListener();
+ this.initMouseIgnoring();
},
@@ -3195,26 +3548,33 @@ var Grid = FC.Grid = Class.extend({
// Sets the container element that the grid should render inside of.
// Does other DOM-related initializations.
setElement: function(el) {
- var _this = this;
-
this.el = el;
+ preventSelection(el);
+
+ this.bindDayHandler('touchstart', this.dayTouchStart);
+ this.bindDayHandler('mousedown', this.dayMousedown);
+
+ // attach event-element-related handlers. in Grid.events
+ // same garbage collection note as above.
+ this.bindSegHandlers();
+
+ this.bindGlobalHandlers();
+ },
+
+
+ bindDayHandler: function(name, handler) {
+ var _this = this;
// attach a handler to the grid's root element.
// jQuery will take care of unregistering them when removeElement gets called.
- el.on('mousedown', function(ev) {
+ this.el.on(name, function(ev) {
if (
!$(ev.target).is('.fc-event-container *, .fc-more') && // not an an event element, or "more.." link
!$(ev.target).closest('.fc-popover').length // not on a popover (like the "more.." events one)
) {
- _this.dayMousedown(ev);
+ return handler.call(_this, ev);
}
});
-
- // attach event-element-related handlers. in Grid.events
- // same garbage collection note as above.
- this.bindSegHandlers();
-
- this.bindGlobalHandlers();
},
@@ -3222,6 +3582,7 @@ var Grid = FC.Grid = Class.extend({
// DOES NOT remove any content beforehand (doesn't clear events or call unrenderDates), unlike View
removeElement: function() {
this.unbindGlobalHandlers();
+ this.clearDragListeners();
this.el.remove();
@@ -3254,18 +3615,47 @@ var Grid = FC.Grid = Class.extend({
// Binds DOM handlers to elements that reside outside the grid, such as the document
bindGlobalHandlers: function() {
- $(document).on('dragstart sortstart', this.externalDragStartProxy); // jqui
+ this.listenTo($(document), {
+ dragstart: this.externalDragStart, // jqui
+ sortstart: this.externalDragStart // jqui
+ });
},
// Unbinds DOM handlers from elements that reside outside the grid
unbindGlobalHandlers: function() {
- $(document).off('dragstart sortstart', this.externalDragStartProxy); // jqui
+ this.stopListeningTo($(document));
},
// Process a mousedown on an element that represents a day. For day clicking and selecting.
dayMousedown: function(ev) {
+ if (!this.isIgnoringMouse) {
+ this.dayDragListener.startInteraction(ev, {
+ //distance: 5, // needs more work if we want dayClick to fire correctly
+ });
+ }
+ },
+
+
+ dayTouchStart: function(ev) {
+ var view = this.view;
+
+ // HACK to prevent a user's clickaway for unselecting a range or an event
+ // from causing a dayClick.
+ if (view.isSelected || view.selectedEvent) {
+ this.tempIgnoreMouse();
+ }
+
+ this.dayDragListener.startInteraction(ev, {
+ delay: this.view.opt('longPressDelay')
+ });
+ },
+
+
+ // Creates a listener that tracks the user's drag across day elements.
+ // For day clicking and selecting.
+ buildDayDragListener: function() {
var _this = this;
var view = this.view;
var isSelectable = view.opt('selectable');
@@ -3276,14 +3666,21 @@ var Grid = FC.Grid = Class.extend({
// if the drag ends on the same day, it is a 'dayClick'.
// if 'selectable' is enabled, this listener also detects selections.
var dragListener = new HitDragListener(this, {
- //distance: 5, // needs more work if we want dayClick to fire correctly
scroll: view.opt('dragScroll'),
+ interactionStart: function() {
+ dayClickHit = dragListener.origHit; // for dayClick, where no dragging happens
+ },
dragStart: function() {
view.unselect(); // since we could be rendering a new selection, we want to clear any old one
},
hitOver: function(hit, isOrig, origHit) {
if (origHit) { // click needs to have started on a hit
- dayClickHit = isOrig ? hit : null; // single-hit selection is a day click
+
+ // if user dragged to another cell at any point, it can no longer be a dayClick
+ if (!isOrig) {
+ dayClickHit = null;
+ }
+
if (isSelectable) {
selectionSpan = _this.computeSelection(
_this.getHitSpan(origHit),
@@ -3304,23 +3701,46 @@ var Grid = FC.Grid = Class.extend({
_this.unrenderSelection();
enableCursor();
},
- listenStop: function(ev) {
- if (dayClickHit) {
- view.triggerDayClick(
- _this.getHitSpan(dayClickHit),
- _this.getHitEl(dayClickHit),
- ev
- );
- }
- if (selectionSpan) {
- // the selection will already have been rendered. just report it
- view.reportSelection(selectionSpan, ev);
+ interactionEnd: function(ev, isCancelled) {
+ if (!isCancelled) {
+ if (
+ dayClickHit &&
+ !_this.isIgnoringMouse // see hack in dayTouchStart
+ ) {
+ view.triggerDayClick(
+ _this.getHitSpan(dayClickHit),
+ _this.getHitEl(dayClickHit),
+ ev
+ );
+ }
+ if (selectionSpan) {
+ // the selection will already have been rendered. just report it
+ view.reportSelection(selectionSpan, ev);
+ }
+ enableCursor();
}
- enableCursor();
}
});
- dragListener.mousedown(ev); // start listening, which will eventually initiate a dragStart
+ return dragListener;
+ },
+
+
+ // Kills all in-progress dragging.
+ // Useful for when public API methods that result in re-rendering are invoked during a drag.
+ // Also useful for when touch devices misbehave and don't fire their touchend.
+ clearDragListeners: function() {
+ this.dayDragListener.endInteraction();
+
+ if (this.segDragListener) {
+ this.segDragListener.endInteraction(); // will clear this.segDragListener
+ }
+ if (this.segResizeListener) {
+ this.segResizeListener.endInteraction(); // will clear this.segResizeListener
+ }
+ if (this.externalDragListener) {
+ this.externalDragListener.endInteraction(); // will clear this.externalDragListener
+ }
},
@@ -3330,10 +3750,11 @@ var Grid = FC.Grid = Class.extend({
// Renders a mock event at the given event location, which contains zoned start/end properties.
+ // Returns all mock event elements.
renderEventLocationHelper: function(eventLocation, sourceSeg) {
var fakeEvent = this.fabricateHelperEvent(eventLocation, sourceSeg);
- this.renderHelper(fakeEvent, sourceSeg); // do the actual rendering
+ return this.renderHelper(fakeEvent, sourceSeg); // do the actual rendering
},
@@ -3361,6 +3782,7 @@ var Grid = FC.Grid = Class.extend({
// Renders a mock event. Given zoned event date properties.
+ // Must return all mock event elements.
renderHelper: function(eventLocation, sourceSeg) {
// subclasses must implement
},
@@ -3640,7 +4062,8 @@ Grid.mixin({
// Unrenders all events currently rendered on the grid
unrenderEvents: function() {
- this.triggerSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
+ this.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
+ this.clearDragListeners();
this.unrenderFgSegs();
this.unrenderBgSegs();
@@ -3768,48 +4191,44 @@ Grid.mixin({
// Attaches event-element-related handlers to the container element and leverage bubbling
bindSegHandlers: function() {
+ this.bindSegHandler('touchstart', this.handleSegTouchStart);
+ this.bindSegHandler('touchend', this.handleSegTouchEnd);
+ this.bindSegHandler('mouseenter', this.handleSegMouseover);
+ this.bindSegHandler('mouseleave', this.handleSegMouseout);
+ this.bindSegHandler('mousedown', this.handleSegMousedown);
+ this.bindSegHandler('click', this.handleSegClick);
+ },
+
+
+ // Executes a handler for any a user-interaction on a segment.
+ // Handler gets called with (seg, ev), and with the `this` context of the Grid
+ bindSegHandler: function(name, handler) {
var _this = this;
- var view = this.view;
- $.each(
- {
- mouseenter: function(seg, ev) {
- _this.triggerSegMouseover(seg, ev);
- },
- mouseleave: function(seg, ev) {
- _this.triggerSegMouseout(seg, ev);
- },
- click: function(seg, ev) {
- return view.trigger('eventClick', this, seg.event, ev); // can return `false` to cancel
- },
- mousedown: function(seg, ev) {
- if ($(ev.target).is('.fc-resizer') && view.isEventResizable(seg.event)) {
- _this.segResizeMousedown(seg, ev, $(ev.target).is('.fc-start-resizer'));
- }
- else if (view.isEventDraggable(seg.event)) {
- _this.segDragMousedown(seg, ev);
- }
- }
- },
- function(name, func) {
- // attach the handler to the container element and only listen for real event elements via bubbling
- _this.el.on(name, '.fc-event-container > *', function(ev) {
- var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents
-
- // only call the handlers if there is not a drag/resize in progress
- if (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {
- return func.call(this, seg, ev); // `this` will be the event element
- }
- });
+ this.el.on(name, '.fc-event-container > *', function(ev) {
+ var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents
+
+ // only call the handlers if there is not a drag/resize in progress
+ if (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {
+ return handler.call(_this, seg, ev); // context will be the Grid
}
- );
+ });
+ },
+
+
+ handleSegClick: function(seg, ev) {
+ return this.view.trigger('eventClick', seg.el[0], seg.event, ev); // can return `false` to cancel
},
// Updates internal state and triggers handlers for when an event element is moused over
- triggerSegMouseover: function(seg, ev) {
- if (!this.mousedOverSeg) {
+ handleSegMouseover: function(seg, ev) {
+ if (
+ !this.isIgnoringMouse &&
+ !this.mousedOverSeg
+ ) {
this.mousedOverSeg = seg;
+ seg.el.addClass('fc-allow-mouse-resize');
this.view.trigger('eventMouseover', seg.el[0], seg.event, ev);
}
},
@@ -3817,56 +4236,132 @@ Grid.mixin({
// Updates internal state and triggers handlers for when an event element is moused out.
// Can be given no arguments, in which case it will mouseout the segment that was previously moused over.
- triggerSegMouseout: function(seg, ev) {
+ handleSegMouseout: function(seg, ev) {
ev = ev || {}; // if given no args, make a mock mouse event
if (this.mousedOverSeg) {
seg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment
this.mousedOverSeg = null;
+ seg.el.removeClass('fc-allow-mouse-resize');
this.view.trigger('eventMouseout', seg.el[0], seg.event, ev);
}
},
+ handleSegMousedown: function(seg, ev) {
+ var isResizing = this.startSegResize(seg, ev, { distance: 5 });
+
+ if (!isResizing && this.view.isEventDraggable(seg.event)) {
+ this.buildSegDragListener(seg)
+ .startInteraction(ev, {
+ distance: 5
+ });
+ }
+ },
+
+
+ handleSegTouchStart: function(seg, ev) {
+ var view = this.view;
+ var event = seg.event;
+ var isSelected = view.isEventSelected(event);
+ var isDraggable = view.isEventDraggable(event);
+ var isResizable = view.isEventResizable(event);
+ var isResizing = false;
+ var dragListener;
+
+ if (isSelected && isResizable) {
+ // only allow resizing of the event is selected
+ isResizing = this.startSegResize(seg, ev);
+ }
+
+ if (!isResizing && (isDraggable || isResizable)) { // allowed to be selected?
+
+ dragListener = isDraggable ?
+ this.buildSegDragListener(seg) :
+ this.buildSegSelectListener(seg); // seg isn't draggable, but still needs to be selected
+
+ dragListener.startInteraction(ev, { // won't start if already started
+ delay: isSelected ? 0 : this.view.opt('longPressDelay') // do delay if not already selected
+ });
+ }
+
+ // a long tap simulates a mouseover. ignore this bogus mouseover.
+ this.tempIgnoreMouse();
+ },
+
+
+ handleSegTouchEnd: function(seg, ev) {
+ // touchstart+touchend = click, which simulates a mouseover.
+ // ignore this bogus mouseover.
+ this.tempIgnoreMouse();
+ },
+
+
+ // returns boolean whether resizing actually started or not.
+ // assumes the seg allows resizing.
+ // `dragOptions` are optional.
+ startSegResize: function(seg, ev, dragOptions) {
+ if ($(ev.target).is('.fc-resizer')) {
+ this.buildSegResizeListener(seg, $(ev.target).is('.fc-start-resizer'))
+ .startInteraction(ev, dragOptions);
+ return true;
+ }
+ return false;
+ },
+
+
+
/* Event Dragging
------------------------------------------------------------------------------------------------------------------*/
- // Called when the user does a mousedown on an event, which might lead to dragging.
+ // Builds a listener that will track user-dragging on an event segment.
// Generic enough to work with any type of Grid.
- segDragMousedown: function(seg, ev) {
+ // Has side effect of setting/unsetting `segDragListener`
+ buildSegDragListener: function(seg) {
var _this = this;
var view = this.view;
var calendar = view.calendar;
var el = seg.el;
var event = seg.event;
+ var isDragging;
+ var mouseFollower; // A clone of the original element that will move with the mouse
var dropLocation; // zoned event date properties
- // A clone of the original element that will move with the mouse
- var mouseFollower = new MouseFollower(seg.el, {
- parentEl: view.el,
- opacity: view.opt('dragOpacity'),
- revertDuration: view.opt('dragRevertDuration'),
- zIndex: 2 // one above the .fc-view
- });
+ if (this.segDragListener) {
+ return this.segDragListener;
+ }
// Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents
// of the view.
- var dragListener = new HitDragListener(view, {
- distance: 5,
+ var dragListener = this.segDragListener = new HitDragListener(view, {
scroll: view.opt('dragScroll'),
subjectEl: el,
subjectCenter: true,
- listenStart: function(ev) {
+ interactionStart: function(ev) {
+ isDragging = false;
+ mouseFollower = new MouseFollower(seg.el, {
+ additionalClass: 'fc-dragging',
+ parentEl: view.el,
+ opacity: dragListener.isTouch ? null : view.opt('dragOpacity'),
+ revertDuration: view.opt('dragRevertDuration'),
+ zIndex: 2 // one above the .fc-view
+ });
mouseFollower.hide(); // don't show until we know this is a real drag
mouseFollower.start(ev);
},
dragStart: function(ev) {
- _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
+ if (dragListener.isTouch && !view.isEventSelected(event)) {
+ // if not previously selected, will fire after a delay. then, select the event
+ view.selectEvent(event);
+ }
+ isDragging = true;
+ _this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
_this.segDragStart(seg, ev);
view.hideEvent(event); // hide all event segments. our mouseFollower will take over
},
hitOver: function(hit, isOrig, origHit) {
+ var dragHelperEls;
// starting hit could be forced (DayGrid.limit)
if (seg.hit) {
@@ -3886,7 +4381,13 @@ Grid.mixin({
}
// if a valid drop location, have the subclass render a visual indication
- if (dropLocation && view.renderDrag(dropLocation, seg)) {
+ if (dropLocation && (dragHelperEls = view.renderDrag(dropLocation, seg))) {
+
+ dragHelperEls.addClass('fc-dragging');
+ if (!dragListener.isTouch) {
+ _this.applyDragOpacity(dragHelperEls);
+ }
+
mouseFollower.hide(); // if the subclass is already using a mock event "helper", hide our own
}
else {
@@ -3902,27 +4403,54 @@ Grid.mixin({
mouseFollower.show(); // show in case we are moving out of all hits
dropLocation = null;
},
- hitDone: function() { // Called after a hitOut OR before a dragStop
+ hitDone: function() { // Called after a hitOut OR before a dragEnd
enableCursor();
},
- dragStop: function(ev) {
+ interactionEnd: function(ev) {
// do revert animation if hasn't changed. calls a callback when finished (whether animation or not)
mouseFollower.stop(!dropLocation, function() {
- view.unrenderDrag();
- view.showEvent(event);
- _this.segDragStop(seg, ev);
-
+ if (isDragging) {
+ view.unrenderDrag();
+ view.showEvent(event);
+ _this.segDragStop(seg, ev);
+ }
if (dropLocation) {
view.reportEventDrop(event, dropLocation, this.largeUnit, el, ev);
}
});
+ _this.segDragListener = null;
+ }
+ });
+
+ return dragListener;
+ },
+
+
+ // seg isn't draggable, but let's use a generic DragListener
+ // simply for the delay, so it can be selected.
+ // Has side effect of setting/unsetting `segDragListener`
+ buildSegSelectListener: function(seg) {
+ var _this = this;
+ var view = this.view;
+ var event = seg.event;
+
+ if (this.segDragListener) {
+ return this.segDragListener;
+ }
+
+ var dragListener = this.segDragListener = new DragListener({
+ dragStart: function(ev) {
+ if (dragListener.isTouch && !view.isEventSelected(event)) {
+ // if not previously selected, will fire after a delay. then, select the event
+ view.selectEvent(event);
+ }
},
- listenStop: function() {
- mouseFollower.stop(); // put in listenStop in case there was a mousedown but the drag never started
+ interactionEnd: function(ev) {
+ _this.segDragListener = null;
}
});
- dragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart
+ return dragListener;
},
@@ -4038,8 +4566,8 @@ Grid.mixin({
var dropLocation; // a null value signals an unsuccessful drag
// listener that tracks mouse movement over date-associated pixel regions
- var dragListener = new HitDragListener(this, {
- listenStart: function() {
+ var dragListener = _this.externalDragListener = new HitDragListener(this, {
+ interactionStart: function() {
_this.isDraggingExternal = true;
},
hitOver: function(hit) {
@@ -4063,17 +4591,16 @@ Grid.mixin({
hitOut: function() {
dropLocation = null; // signal unsuccessful
},
- hitDone: function() { // Called after a hitOut OR before a dragStop
+ hitDone: function() { // Called after a hitOut OR before a dragEnd
enableCursor();
_this.unrenderDrag();
},
- dragStop: function() {
+ interactionEnd: function(ev) {
if (dropLocation) { // element was dropped on a valid hit
_this.view.reportExternalDrop(meta, dropLocation, el, ev, ui);
}
- },
- listenStop: function() {
_this.isDraggingExternal = false;
+ _this.externalDragListener = null;
}
});
@@ -4114,6 +4641,7 @@ Grid.mixin({
// `dropLocation` contains hypothetical start/end/allDay values the event would have if dropped. end can be null.
// `seg` is the internal segment object that is being dragged. If dragging an external element, `seg` is null.
// A truthy returned value indicates this method has rendered a helper element.
+ // Must return elements used for any mock events.
renderDrag: function(dropLocation, seg) {
// subclasses must implement
},
@@ -4129,24 +4657,28 @@ Grid.mixin({
------------------------------------------------------------------------------------------------------------------*/
- // Called when the user does a mousedown on an event's resizer, which might lead to resizing.
+ // Creates a listener that tracks the user as they resize an event segment.
// Generic enough to work with any type of Grid.
- segResizeMousedown: function(seg, ev, isStart) {
+ buildSegResizeListener: function(seg, isStart) {
var _this = this;
var view = this.view;
var calendar = view.calendar;
var el = seg.el;
var event = seg.event;
var eventEnd = calendar.getEventEnd(event);
+ var isDragging;
var resizeLocation; // zoned event date properties. falsy if invalid resize
// Tracks mouse movement over the *grid's* coordinate map
- var dragListener = new HitDragListener(this, {
- distance: 5,
+ var dragListener = this.segResizeListener = new HitDragListener(this, {
scroll: view.opt('dragScroll'),
subjectEl: el,
+ interactionStart: function() {
+ isDragging = false;
+ },
dragStart: function(ev) {
- _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
+ isDragging = true;
+ _this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
_this.segResizeStart(seg, ev);
},
hitOver: function(hit, isOrig, origHit) {
@@ -4181,16 +4713,18 @@ Grid.mixin({
view.showEvent(event);
enableCursor();
},
- dragStop: function(ev) {
- _this.segResizeStop(seg, ev);
-
+ interactionEnd: function(ev) {
+ if (isDragging) {
+ _this.segResizeStop(seg, ev);
+ }
if (resizeLocation) { // valid date to resize to?
view.reportEventResize(event, resizeLocation, this.largeUnit, el, ev);
}
+ _this.segResizeListener = null;
}
});
- dragListener.mousedown(ev); // start listening, which will eventually lead to a dragStart
+ return dragListener;
},
@@ -4267,6 +4801,7 @@ Grid.mixin({
// Renders a visual indication of an event being resized.
// `range` has the updated dates of the event. `seg` is the original segment object involved in the drag.
+ // Must return elements used for any mock events.
renderEventResize: function(range, seg) {
// subclasses must implement
},
@@ -4312,6 +4847,7 @@ Grid.mixin({
// Generic utility for generating the HTML classNames for an event segment's element
getSegClasses: function(seg, isDraggable, isResizable) {
+ var view = this.view;
var event = seg.event;
var classes = [
'fc-event',
@@ -4329,6 +4865,11 @@ Grid.mixin({
classes.push('fc-resizable');
}
+ // event is currently selected? attach a className.
+ if (view.isEventSelected(event)) {
+ classes.push('fc-selected');
+ }
+
return classes;
},
@@ -5311,10 +5852,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
// if a segment from the same calendar but another component is being dragged, render a helper event
if (seg && !seg.el.closest(this.el).length) {
- this.renderEventLocationHelper(eventLocation, seg);
- this.applyDragOpacity(this.helperEls);
-
- return true; // a helper has been rendered
+ return this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements
}
},
@@ -5333,7 +5871,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
// Renders a visual indication of an event being resized
renderEventResize: function(eventLocation, seg) {
this.renderHighlight(this.eventToSpan(eventLocation));
- this.renderEventLocationHelper(eventLocation, seg);
+ return this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements
},
@@ -5379,7 +5917,9 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
helperNodes.push(skeletonEl[0]);
});
- this.helperEls = $(helperNodes); // array -> jQuery set
+ return ( // must return the elements rendered
+ this.helperEls = $(helperNodes) // array -> jQuery set
+ );
},
@@ -6165,6 +6705,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
labelInterval: null, // duration of how often a label should be displayed for a slot
colEls: null, // cells elements in the day-row background
+ slatContainerEl: null, // div that wraps all the slat rows
slatEls: null, // elements running horizontally across all columns
nowIndicatorEls: null,
@@ -6184,7 +6725,8 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
renderDates: function() {
this.el.html(this.renderHtml());
this.colEls = this.el.find('.fc-day');
- this.slatEls = this.el.find('.fc-slats tr');
+ this.slatContainerEl = this.el.find('.fc-slats');
+ this.slatEls = this.slatContainerEl.find('tr');
this.colCoordCache = new CoordCache({
els: this.colEls,
@@ -6463,6 +7005,11 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
},
+ getTotalSlatHeight: function() {
+ return this.slatContainerEl.outerHeight();
+ },
+
+
// Computes the top coordinate, relative to the bounds of the grid, of the given date.
// A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
computeDateTop: function(date, startOfDayDate) {
@@ -6511,13 +7058,10 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
renderDrag: function(eventLocation, seg) {
if (seg) { // if there is event information for this drag, render a helper event
- this.renderEventLocationHelper(eventLocation, seg);
- for (var i = 0; i < this.helperSegs.length; i++) {
- this.applyDragOpacity(this.helperSegs[i].el);
- }
-
- return true; // signal that a helper has been rendered
+ // returns mock event elements
+ // signal that a helper has been rendered
+ return this.renderEventLocationHelper(eventLocation, seg);
}
else {
// otherwise, just render a highlight
@@ -6539,7 +7083,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
// Renders a visual indication of an event being resized
renderEventResize: function(eventLocation, seg) {
- this.renderEventLocationHelper(eventLocation, seg);
+ return this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements
},
@@ -6555,7 +7099,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
// Renders a mock "helper" event. `sourceSeg` is the original segment object and might be null (an external drag)
renderHelper: function(event, sourceSeg) {
- this.renderHelperSegs(this.eventToSegs(event), sourceSeg);
+ return this.renderHelperSegs(this.eventToSegs(event), sourceSeg); // returns mock event elements
},
@@ -6749,6 +7293,7 @@ TimeGrid.mixin({
renderHelperSegs: function(segs, sourceSeg) {
+ var helperEls = [];
var i, seg;
var sourceEl;
@@ -6766,9 +7311,12 @@ TimeGrid.mixin({
'margin-right': sourceEl.css('margin-right')
});
}
+ helperEls.push(seg.el[0]);
}
this.helperSegs = segs;
+
+ return $(helperEls); // must return rendered helpers
},
@@ -7279,7 +7827,7 @@ function isSlotSegCollision(seg1, seg2) {
/* An abstract class from which other views inherit from
----------------------------------------------------------------------------------------------------------------------*/
-var View = FC.View = Class.extend({
+var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
type: null, // subclass' view name (string)
name: null, // deprecated. use `type` instead
@@ -7306,13 +7854,10 @@ var View = FC.View = Class.extend({
isRTL: false,
isSelected: false, // boolean whether a range of time is user-selected or not
+ selectedEvent: null,
eventOrderSpecs: null, // criteria for ordering events when they have same date/time
- // subclasses can optionally use a scroll container
- scrollerEl: null, // the element that will most likely scroll when content is too tall
- scrollTop: null, // cached vertical scroll value
-
// classNames styled by jqui themes
widgetHeaderClass: null,
widgetContentClass: null,
@@ -7322,9 +7867,6 @@ var View = FC.View = Class.extend({
nextDayThreshold: null,
isHiddenDayHash: null,
- // document handlers, bound to `this` object
- documentMousedownProxy: null, // TODO: doesn't work with touch
-
// now indicator
isNowIndicatorRendered: null,
initialNowDate: null, // result first getNow call
@@ -7347,8 +7889,6 @@ var View = FC.View = Class.extend({
this.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder'));
- this.documentMousedownProxy = proxy(this, 'documentMousedown');
-
this.initialize();
},
@@ -7674,13 +8214,14 @@ var View = FC.View = Class.extend({
// Binds DOM handlers to elements that reside outside the view container, such as the document
bindGlobalHandlers: function() {
- $(document).on('mousedown', this.documentMousedownProxy);
+ this.listenTo($(document), 'mousedown', this.handleDocumentMousedown);
+ this.listenTo($(document), 'touchstart', this.processUnselect);
},
// Unbinds DOM handlers from elements that reside outside the view container
unbindGlobalHandlers: function() {
- $(document).off('mousedown', this.documentMousedownProxy);
+ this.stopListeningTo($(document));
},
@@ -7848,27 +8389,6 @@ var View = FC.View = Class.extend({
------------------------------------------------------------------------------------------------------------------*/
- // Given the total height of the view, return the number of pixels that should be used for the scroller.
- // Utility for subclasses.
- computeScrollerHeight: function(totalHeight) {
- var scrollerEl = this.scrollerEl;
- var both;
- var otherHeight; // cumulative height of everything that is not the scrollerEl in the view (header+borders)
-
- both = this.el.add(scrollerEl);
-
- // fuckin IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked
- both.css({
- position: 'relative', // cause a reflow, which will force fresh dimension recalculation
- left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll
- });
- otherHeight = this.el.outerHeight() - scrollerEl.height(); // grab the dimensions
- both.css({ position: '', left: '' }); // undo hack
-
- return totalHeight - otherHeight;
- },
-
-
// Computes the initial pre-configured scroll state prior to allowing the user to change it.
// Given the scroll state from the previous rendering. If first time rendering, given null.
computeInitialScroll: function(previousScrollState) {
@@ -7878,17 +8398,13 @@ var View = FC.View = Class.extend({
// Retrieves the view's current natural scroll state. Can return an arbitrary format.
queryScroll: function() {
- if (this.scrollerEl) {
- return this.scrollerEl.scrollTop(); // operates on scrollerEl by default
- }
+ // subclasses must implement
},
// Sets the view's scroll state. Will accept the same format computeInitialScroll and queryScroll produce.
setScroll: function(scrollState) {
- if (this.scrollerEl) {
- return this.scrollerEl.scrollTop(scrollState); // operates on scrollerEl by default
- }
+ // subclasses must implement
},
@@ -8103,7 +8619,8 @@ var View = FC.View = Class.extend({
// Renders a visual indication of a event or external-element drag over the given drop zone.
- // If an external-element, seg will be `null`
+ // If an external-element, seg will be `null`.
+ // Must return elements used for any mock events.
renderDrag: function(dropLocation, seg) {
// subclasses must implement
},
@@ -8166,7 +8683,7 @@ var View = FC.View = Class.extend({
},
- /* Selection
+ /* Selection (time range)
------------------------------------------------------------------------------------------------------------------*/
@@ -8224,13 +8741,62 @@ var View = FC.View = Class.extend({
},
- // Handler for unselecting when the user clicks something and the 'unselectAuto' setting is on
- documentMousedown: function(ev) {
- var ignore;
+ /* Event Selection
+ ------------------------------------------------------------------------------------------------------------------*/
+
+
+ selectEvent: function(event) {
+ if (!this.selectedEvent || this.selectedEvent !== event) {
+ this.unselectEvent();
+ this.renderedEventSegEach(function(seg) {
+ seg.el.addClass('fc-selected');
+ }, event);
+ this.selectedEvent = event;
+ }
+ },
+
+
+ unselectEvent: function() {
+ if (this.selectedEvent) {
+ this.renderedEventSegEach(function(seg) {
+ seg.el.removeClass('fc-selected');
+ }, this.selectedEvent);
+ this.selectedEvent = null;
+ }
+ },
- // is there a selection, and has the user made a proper left click?
- if (this.isSelected && this.opt('unselectAuto') && isPrimaryMouseButton(ev)) {
+ isEventSelected: function(event) {
+ // event references might change on refetchEvents(), while selectedEvent doesn't,
+ // so compare IDs
+ return this.selectedEvent && this.selectedEvent._id === event._id;
+ },
+
+
+ /* Mouse / Touch Unselecting (time range & event unselection)
+ ------------------------------------------------------------------------------------------------------------------*/
+ // TODO: move consistently to down/start or up/end?
+ // TODO: don't kill previous selection if touch scrolling
+
+
+ handleDocumentMousedown: function(ev) {
+ if (isPrimaryMouseButton(ev)) {
+ this.processUnselect(ev);
+ }
+ },
+
+
+ processUnselect: function(ev) {
+ this.processRangeUnselect(ev);
+ this.processEventUnselect(ev);
+ },
+
+
+ processRangeUnselect: function(ev) {
+ var ignore;
+
+ // is there a time-range selection?
+ if (this.isSelected && this.opt('unselectAuto')) {
// only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element
ignore = this.opt('unselectCancel');
if (!ignore || !$(ev.target).closest(ignore).length) {
@@ -8240,6 +8806,15 @@ var View = FC.View = Class.extend({
},
+ processEventUnselect: function(ev) {
+ if (this.selectedEvent) {
+ if (!$(ev.target).closest('.fc-selected').length) {
+ this.unselectEvent();
+ }
+ }
+ },
+
+
/* Day Click
------------------------------------------------------------------------------------------------------------------*/
@@ -8354,6 +8929,127 @@ var View = FC.View = Class.extend({
;;
+/*
+Embodies a div that has potential scrollbars
+*/
+var Scroller = FC.Scroller = Class.extend({
+
+ el: null, // the guaranteed outer element
+ scrollEl: null, // the element with the scrollbars
+ overflowX: null,
+ overflowY: null,
+
+
+ constructor: function(options) {
+ options = options || {};
+ this.overflowX = options.overflowX || options.overflow || 'auto';
+ this.overflowY = options.overflowY || options.overflow || 'auto';
+ },
+
+
+ render: function() {
+ this.el = this.renderEl();
+ this.applyOverflow();
+ },
+
+
+ renderEl: function() {
+ return (this.scrollEl = $('<div class="fc-scroller"></div>'));
+ },
+
+
+ // sets to natural height, unlocks overflow
+ clear: function() {
+ this.setHeight('auto');
+ this.applyOverflow();
+ },
+
+
+ destroy: function() {
+ this.el.remove();
+ },
+
+
+ // Overflow
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ applyOverflow: function() {
+ this.scrollEl.css({
+ 'overflow-x': this.overflowX,
+ 'overflow-y': this.overflowY
+ });
+ },
+
+
+ // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.
+ // Useful for preserving scrollbar widths regardless of future resizes.
+ // Can pass in scrollbarWidths for optimization.
+ lockOverflow: function(scrollbarWidths) {
+ var overflowX = this.overflowX;
+ var overflowY = this.overflowY;
+
+ scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();
+
+ if (overflowX === 'auto') {
+ overflowX = (
+ scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?
+ // OR scrolling pane with massless scrollbars?
+ this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth
+ // subtract 1 because of IE off-by-one issue
+ ) ? 'scroll' : 'hidden';
+ }
+
+ if (overflowY === 'auto') {
+ overflowY = (
+ scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?
+ // OR scrolling pane with massless scrollbars?
+ this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight
+ // subtract 1 because of IE off-by-one issue
+ ) ? 'scroll' : 'hidden';
+ }
+
+ this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });
+ },
+
+
+ // Getters / Setters
+ // -----------------------------------------------------------------------------------------------------------------
+
+
+ setHeight: function(height) {
+ this.scrollEl.height(height);
+ },
+
+
+ getScrollTop: function() {
+ return this.scrollEl.scrollTop();
+ },
+
+
+ setScrollTop: function(top) {
+ this.scrollEl.scrollTop(top);
+ },
+
+
+ getClientWidth: function() {
+ return this.scrollEl[0].clientWidth;
+ },
+
+
+ getClientHeight: function() {
+ return this.scrollEl[0].clientHeight;
+ },
+
+
+ getScrollbarWidths: function() {
+ return getScrollbarWidths(this.scrollEl);
+ }
+
+});
+
+;;
+
var Calendar = FC.Calendar = Class.extend({
dirDefaults: null, // option defaults related to LTR or RTL
@@ -8608,7 +9304,7 @@ var Calendar = FC.Calendar = Class.extend({
});
-Calendar.mixin(Emitter);
+Calendar.mixin(EmitterMixin);
function Calendar_constructor(element, overrides) {
@@ -9369,7 +10065,9 @@ Calendar.defaults = {
dayPopoverFormat: 'LL',
handleWindowResize: true,
- windowResizeDelay: 200 // milliseconds before an updateSize happens
+ windowResizeDelay: 200, // milliseconds before an updateSize happens
+
+ longPressDelay: 1000
};
@@ -10368,6 +11066,8 @@ function EventManager(options) { // assumed to be a calendar
assignDatesToEvent(start, end, allDay, out);
}
+ t.normalizeEvent(out); // hook for external use. a prototype method
+
return out;
}
@@ -10900,6 +11600,12 @@ function EventManager(options) { // assumed to be a calendar
}
+// hook for external libs to manipulate event properties upon creation.
+// should manipulate the event in-place.
+Calendar.prototype.normalizeEvent = function(event) {
+};
+
+
// Returns a list of events that the given event should be compared against when being considered for a move to
// the specified span. Attached to the Calendar's prototype because EventManager is a mixin for a Calendar.
Calendar.prototype.getPeerEvents = function(span, event) {
@@ -10937,6 +11643,8 @@ function backupEventDates(event) {
var BasicView = FC.BasicView = View.extend({
+ scroller: null,
+
dayGridClass: DayGrid, // class the dayGrid will be instantiated from (overridable by subclasses)
dayGrid: null, // the main subcomponent that does most of the heavy lifting
@@ -10951,6 +11659,11 @@ var BasicView = FC.BasicView = View.extend({
initialize: function() {
this.dayGrid = this.instantiateDayGrid();
+
+ this.scroller = new Scroller({
+ overflowX: 'hidden',
+ overflowY: 'auto'
+ });
},
@@ -11003,9 +11716,12 @@ var BasicView = FC.BasicView = View.extend({
this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());
this.renderHead();
- this.scrollerEl = this.el.find('.fc-day-grid-container');
+ this.scroller.render();
+ var dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');
+ var dayGridEl = $('<div class="fc-day-grid" />').appendTo(dayGridContainerEl);
+ this.el.find('.fc-body > tr > td').append(dayGridContainerEl);
- this.dayGrid.setElement(this.el.find('.fc-day-grid'));
+ this.dayGrid.setElement(dayGridEl);
this.dayGrid.renderDates(this.hasRigidRows());
},
@@ -11024,6 +11740,7 @@ var BasicView = FC.BasicView = View.extend({
unrenderDates: function() {
this.dayGrid.unrenderDates();
this.dayGrid.removeElement();
+ this.scroller.destroy();
},
@@ -11044,11 +11761,7 @@ var BasicView = FC.BasicView = View.extend({
'</thead>' +
'<tbody class="fc-body">' +
'<tr>' +
- '<td class="' + this.widgetContentClass + '">' +
- '<div class="fc-day-grid-container">' +
- '<div class="fc-day-grid"/>' +
- '</div>' +
- '</td>' +
+ '<td class="' + this.widgetContentClass + '"></td>' +
'</tr>' +
'</tbody>' +
'</table>';
@@ -11091,9 +11804,10 @@ var BasicView = FC.BasicView = View.extend({
setHeight: function(totalHeight, isAuto) {
var eventLimit = this.opt('eventLimit');
var scrollerHeight;
+ var scrollbarWidths;
// reset all heights to be natural
- unsetScroller(this.scrollerEl);
+ this.scroller.clear();
uncompensateScroll(this.headRowEl);
this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
@@ -11103,6 +11817,8 @@ var BasicView = FC.BasicView = View.extend({
this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
}
+ // distribute the height to the rows
+ // (totalHeight is a "recommended" value if isAuto)
scrollerHeight = this.computeScrollerHeight(totalHeight);
this.setGridHeight(scrollerHeight, isAuto);
@@ -11111,17 +11827,33 @@ var BasicView = FC.BasicView = View.extend({
this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
}
- if (!isAuto && setPotentialScroller(this.scrollerEl, scrollerHeight)) { // using scrollbars?
+ if (!isAuto) { // should we force dimensions of the scroll container?
- compensateScroll(this.headRowEl, getScrollbarWidths(this.scrollerEl));
+ this.scroller.setHeight(scrollerHeight);
+ scrollbarWidths = this.scroller.getScrollbarWidths();
- // doing the scrollbar compensation might have created text overflow which created more height. redo
- scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scrollerEl.height(scrollerHeight);
+ if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
+
+ compensateScroll(this.headRowEl, scrollbarWidths);
+
+ // doing the scrollbar compensation might have created text overflow which created more height. redo
+ scrollerHeight = this.computeScrollerHeight(totalHeight);
+ this.scroller.setHeight(scrollerHeight);
+ }
+
+ // guarantees the same scrollbar widths
+ this.scroller.lockOverflow(scrollbarWidths);
}
},
+ // given a desired total height of the view, returns what the height of the scroller should be
+ computeScrollerHeight: function(totalHeight) {
+ return totalHeight -
+ subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ },
+
+
// Sets the height of just the DayGrid component in this view
setGridHeight: function(height, isAuto) {
if (isAuto) {
@@ -11133,6 +11865,20 @@ var BasicView = FC.BasicView = View.extend({
},
+ /* Scroll
+ ------------------------------------------------------------------------------------------------------------------*/
+
+
+ queryScroll: function() {
+ return this.scroller.getScrollTop();
+ },
+
+
+ setScroll: function(top) {
+ this.scroller.setScrollTop(top);
+ },
+
+
/* Hit Areas
------------------------------------------------------------------------------------------------------------------*/
// forward all hit-related method calls to dayGrid
@@ -11368,6 +12114,8 @@ fcViews.month = {
var AgendaView = FC.AgendaView = View.extend({
+ scroller: null,
+
timeGridClass: TimeGrid, // class used to instantiate the timeGrid. subclasses can override
timeGrid: null, // the main time-grid subcomponent of this view
@@ -11377,11 +12125,10 @@ var AgendaView = FC.AgendaView = View.extend({
axisWidth: null, // the width of the time axis running down the side
headContainerEl: null, // div that hold's the timeGrid's rendered date header
- noScrollRowEls: null, // set of fake row elements that must compensate when scrollerEl has scrollbars
+ noScrollRowEls: null, // set of fake row elements that must compensate when scroller has scrollbars
// when the time-grid isn't tall enough to occupy the given height, we render an <hr> underneath
bottomRuleEl: null,
- bottomRuleHeight: null,
initialize: function() {
@@ -11390,6 +12137,11 @@ var AgendaView = FC.AgendaView = View.extend({
if (this.opt('allDaySlot')) { // should we display the "all-day" area?
this.dayGrid = this.instantiateDayGrid(); // the all-day subcomponent of this view
}
+
+ this.scroller = new Scroller({
+ overflowX: 'hidden',
+ overflowY: 'auto'
+ });
},
@@ -11430,10 +12182,12 @@ var AgendaView = FC.AgendaView = View.extend({
this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());
this.renderHead();
- // the element that wraps the time-grid that will probably scroll
- this.scrollerEl = this.el.find('.fc-time-grid-container');
+ this.scroller.render();
+ var timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');
+ var timeGridEl = $('<div class="fc-time-grid" />').appendTo(timeGridWrapEl);
+ this.el.find('.fc-body > tr > td').append(timeGridWrapEl);
- this.timeGrid.setElement(this.el.find('.fc-time-grid'));
+ this.timeGrid.setElement(timeGridEl);
this.timeGrid.renderDates();
// the <hr> that sometimes displays under the time-grid
@@ -11470,6 +12224,8 @@ var AgendaView = FC.AgendaView = View.extend({
this.dayGrid.unrenderDates();
this.dayGrid.removeElement();
}
+
+ this.scroller.destroy();
},
@@ -11491,9 +12247,6 @@ var AgendaView = FC.AgendaView = View.extend({
'<hr class="fc-divider ' + this.widgetHeaderClass + '"/>' :
''
) +
- '<div class="fc-time-grid-container">' +
- '<div class="fc-time-grid"/>' +
- '</div>' +
'</td>' +
'</tr>' +
'</tbody>' +
@@ -11573,16 +12326,11 @@ var AgendaView = FC.AgendaView = View.extend({
setHeight: function(totalHeight, isAuto) {
var eventLimit;
var scrollerHeight;
-
- if (this.bottomRuleHeight === null) {
- // calculate the height of the rule the very first time
- this.bottomRuleHeight = this.bottomRuleEl.outerHeight();
- }
- this.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary
+ var scrollbarWidths;
// reset all dimensions back to the original state
- this.scrollerEl.css('overflow', '');
- unsetScroller(this.scrollerEl);
+ this.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary
+ this.scroller.clear(); // sets height to 'auto' and clears overflow
uncompensateScroll(this.noScrollRowEls);
// limit number of events in the all-day area
@@ -11598,28 +12346,46 @@ var AgendaView = FC.AgendaView = View.extend({
}
}
- if (!isAuto) { // should we force dimensions of the scroll container, or let the contents be natural height?
+ if (!isAuto) { // should we force dimensions of the scroll container?
scrollerHeight = this.computeScrollerHeight(totalHeight);
- if (setPotentialScroller(this.scrollerEl, scrollerHeight)) { // using scrollbars?
+ this.scroller.setHeight(scrollerHeight);
+ scrollbarWidths = this.scroller.getScrollbarWidths();
+
+ if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
// make the all-day and header rows lines up
- compensateScroll(this.noScrollRowEls, getScrollbarWidths(this.scrollerEl));
+ compensateScroll(this.noScrollRowEls, scrollbarWidths);
// the scrollbar compensation might have changed text flow, which might affect height, so recalculate
// and reapply the desired height to the scroller.
scrollerHeight = this.computeScrollerHeight(totalHeight);
- this.scrollerEl.height(scrollerHeight);
+ this.scroller.setHeight(scrollerHeight);
}
- else { // no scrollbars
- // still, force a height and display the bottom rule (marks the end of day)
- this.scrollerEl.height(scrollerHeight).css('overflow', 'hidden'); // in case <hr> goes outside
+
+ // guarantees the same scrollbar widths
+ this.scroller.lockOverflow(scrollbarWidths);
+
+ // if there's any space below the slats, show the horizontal rule.
+ // this won't cause any new overflow, because lockOverflow already called.
+ if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
this.bottomRuleEl.show();
}
}
},
+ // given a desired total height of the view, returns what the height of the scroller should be
+ computeScrollerHeight: function(totalHeight) {
+ return totalHeight -
+ subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
+ },
+
+
+ /* Scroll
+ ------------------------------------------------------------------------------------------------------------------*/
+
+
// Computes the initial pre-configured scroll state prior to allowing the user to change it
computeInitialScroll: function() {
var scrollTime = moment.duration(this.opt('scrollTime'));
@@ -11636,6 +12402,16 @@ var AgendaView = FC.AgendaView = View.extend({
},
+ queryScroll: function() {
+ return this.scroller.getScrollTop();
+ },
+
+
+ setScroll: function(top) {
+ this.scroller.setScrollTop(top);
+ },
+
+
/* Hit Areas
------------------------------------------------------------------------------------------------------------------*/
// forward all hit-related method calls to the grids (dayGrid might not be defined)
diff --git a/library/fullcalendar/fullcalendar.min.css b/library/fullcalendar/fullcalendar.min.css
index 2dc7e9f8a..3a251eb19 100644
--- a/library/fullcalendar/fullcalendar.min.css
+++ b/library/fullcalendar/fullcalendar.min.css
@@ -1,5 +1,5 @@
/*!
- * FullCalendar v2.6.1 Stylesheet
+ * FullCalendar v2.7.3 Stylesheet
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
- */.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed .fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1;opacity:.3;filter:alpha(opacity=30)}.fc-bgevent{background:#8fdf82;opacity:.3;filter:alpha(opacity=30)}.fc-nonbusiness{background:#d7d7d7}.fc-icon{display:inline-block;width:1em;height:1em;line-height:1em;font-size:1em;text-align:center;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative;margin:0 -1em}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%;left:3%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%;left:-3%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%;left:-2%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%;left:2%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-default{background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.fc-button-group{display:inline-block}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{overflow-y:scroll;overflow-x:hidden}.fc-scroller>*{position:relative;width:100%;overflow:hidden}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;background-color:#3a87ad;font-weight:400}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-event[href]{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25;filter:alpha(opacity=25)}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:3}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-h-event .fc-resizer{top:-1px;bottom:-1px;left:-1px;right:-1px;width:5px}.fc-ltr .fc-h-event .fc-start-resizer,.fc-ltr .fc-h-event .fc-start-resizer:after,.fc-ltr .fc-h-event .fc-start-resizer:before,.fc-rtl .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-end-resizer:after,.fc-rtl .fc-h-event .fc-end-resizer:before{right:auto;cursor:w-resize}.fc-ltr .fc-h-event .fc-end-resizer,.fc-ltr .fc-h-event .fc-end-resizer:after,.fc-ltr .fc-h-event .fc-end-resizer:before,.fc-rtl .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-start-resizer:after,.fc-rtl .fc-h-event .fc-start-resizer:before{left:auto;cursor:e-resize}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-day-grid-event .fc-resizer{left:-3px;right:-3px;width:7px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-toolbar{text-align:center;margin-bottom:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:0 2px}.fc-basic-view td.fc-day-number,.fc-basic-view td.fc-week-number span{padding-top:2px;padding-bottom:2px}.fc-basic-view .fc-week-number{text-align:center}.fc-basic-view .fc-week-number span{display:inline-block;min-width:1.25em}.fc-ltr .fc-basic-view .fc-day-number{text-align:right}.fc-rtl .fc-basic-view .fc-day-number{text-align:left}.fc-day-number.fc-other-month{opacity:.3;filter:alpha(opacity=30)}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event .fc-resizer:after{content:"="}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent} \ No newline at end of file
+ * (c) 2016 Adam Shaw
+ */.fc-bgevent,.fc-highlight{opacity:.3;filter:alpha(opacity=30)}.fc-icon,body .fc{font-size:1em}.fc-button-group,.fc-icon{display:inline-block}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-khtml-user-select:none;-webkit-touch-callout:none}.fc .fc-axis,.fc button,.fc-time-grid-event .fc-time,.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view .fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed .fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1}.fc-bgevent{background:#8fdf82}.fc-nonbusiness{background:#d7d7d7}.fc-icon{height:1em;line-height:1em;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close{cursor:pointer}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;background-color:#3a87ad;font-weight:400}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25;filter:alpha(opacity=25)}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25;filter:alpha(opacity=25)}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-toolbar{margin-bottom:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:0 2px}.fc-basic-view td.fc-day-number,.fc-basic-view td.fc-week-number span{padding-top:2px;padding-bottom:2px}.fc-basic-view .fc-week-number span{display:inline-block;min-width:1.25em}.fc-ltr .fc-basic-view .fc-day-number{text-align:right}.fc-rtl .fc-basic-view .fc-day-number{text-align:left}.fc-day-number.fc-other-month{opacity:.3;filter:alpha(opacity=30)}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent} \ No newline at end of file
diff --git a/library/fullcalendar/fullcalendar.min.js b/library/fullcalendar/fullcalendar.min.js
index 5c3cce29f..f27380229 100644
--- a/library/fullcalendar/fullcalendar.min.js
+++ b/library/fullcalendar/fullcalendar.min.js
@@ -1,9 +1,9 @@
/*!
- * FullCalendar v2.6.1
+ * FullCalendar v2.7.3
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
+ * (c) 2016 Adam Shaw
*/
-!function(a){"function"==typeof define&&define.amd?define(["jquery","moment"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("moment")):a(jQuery,moment)}(function(a,b){function c(a){return Q(a,Ra)}function d(b){var c,d={views:b.views||{}};return a.each(b,function(b,e){"views"!=b&&(a.isPlainObject(e)&&!/(time|duration|interval)$/i.test(b)&&-1==a.inArray(b,Ra)?(c=null,a.each(e,function(a,e){/^(month|week|day|default|basic(Week|Day)?|agenda(Week|Day)?)$/.test(a)?(d.views[a]||(d.views[a]={}),d.views[a][b]=e):(c||(c={}),c[a]=e)}),c&&(d[b]=c)):d[b]=e)}),d}function e(a,b){b.left&&a.css({"border-left-width":1,"margin-left":b.left-1}),b.right&&a.css({"border-right-width":1,"margin-right":b.right-1})}function f(a){a.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function g(){a("body").addClass("fc-not-allowed")}function h(){a("body").removeClass("fc-not-allowed")}function i(b,c,d){var e=Math.floor(c/b.length),f=Math.floor(c-e*(b.length-1)),g=[],h=[],i=[],k=0;j(b),b.each(function(c,d){var j=c===b.length-1?f:e,l=a(d).outerHeight(!0);j>l?(g.push(d),h.push(l),i.push(a(d).height())):k+=l}),d&&(c-=k,e=Math.floor(c/g.length),f=Math.floor(c-e*(g.length-1))),a(g).each(function(b,c){var d=b===g.length-1?f:e,j=h[b],k=i[b],l=d-(j-k);d>j&&a(c).height(l)})}function j(a){a.height("")}function k(b){var c=0;return b.find("> span").each(function(b,d){var e=a(d).outerWidth();e>c&&(c=e)}),c++,b.width(c),c}function l(a,b){return a.height(b).addClass("fc-scroller"),a[0].scrollHeight-1>a[0].clientHeight?!0:(m(a),!1)}function m(a){a.height("").removeClass("fc-scroller")}function n(b){var c=b.css("position"),d=b.parents().filter(function(){var b=a(this);return/(auto|scroll)/.test(b.css("overflow")+b.css("overflow-y")+b.css("overflow-x"))}).eq(0);return"fixed"!==c&&d.length?d:a(b[0].ownerDocument||document)}function o(a){var b=a.offset();return{left:b.left,right:b.left+a.outerWidth(),top:b.top,bottom:b.top+a.outerHeight()}}function p(a){var b=a.offset(),c=r(a),d=b.left+u(a,"border-left-width")+c.left,e=b.top+u(a,"border-top-width")+c.top;return{left:d,right:d+a[0].clientWidth,top:e,bottom:e+a[0].clientHeight}}function q(a){var b=a.offset(),c=b.left+u(a,"border-left-width")+u(a,"padding-left"),d=b.top+u(a,"border-top-width")+u(a,"padding-top");return{left:c,right:c+a.width(),top:d,bottom:d+a.height()}}function r(a){var b=a.innerWidth()-a[0].clientWidth,c={left:0,right:0,top:0,bottom:a.innerHeight()-a[0].clientHeight};return s()&&"rtl"==a.css("direction")?c.left=b:c.right=b,c}function s(){return null===Sa&&(Sa=t()),Sa}function t(){var b=a("<div><div/></div>").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),c=b.children(),d=c.offset().left>b.offset().left;return b.remove(),d}function u(a,b){return parseFloat(a.css(b))||0}function v(a){return 1==a.which&&!a.ctrlKey}function w(a,b){var c={left:Math.max(a.left,b.left),right:Math.min(a.right,b.right),top:Math.max(a.top,b.top),bottom:Math.min(a.bottom,b.bottom)};return c.left<c.right&&c.top<c.bottom?c:!1}function x(a,b){return{left:Math.min(Math.max(a.left,b.left),b.right),top:Math.min(Math.max(a.top,b.top),b.bottom)}}function y(a){return{left:(a.left+a.right)/2,top:(a.top+a.bottom)/2}}function z(a,b){return{left:a.left-b.left,top:a.top-b.top}}function A(b){var c,d,e=[],f=[];for("string"==typeof b?f=b.split(/\s*,\s*/):"function"==typeof b?f=[b]:a.isArray(b)&&(f=b),c=0;c<f.length;c++)d=f[c],"string"==typeof d?e.push("-"==d.charAt(0)?{field:d.substring(1),order:-1}:{field:d,order:1}):"function"==typeof d&&e.push({func:d});return e}function B(a,b,c){var d,e;for(d=0;d<c.length;d++)if(e=C(a,b,c[d]))return e;return 0}function C(a,b,c){return c.func?c.func(a,b):D(a[c.field],b[c.field])*(c.order||1)}function D(b,c){return b||c?null==c?-1:null==b?1:"string"===a.type(b)||"string"===a.type(c)?String(b).localeCompare(String(c)):b-c:0}function E(a,b){var c,d,e,f,g=a.start,h=a.end,i=b.start,j=b.end;return h>i&&j>g?(g>=i?(c=g.clone(),e=!0):(c=i.clone(),e=!1),j>=h?(d=h.clone(),f=!0):(d=j.clone(),f=!1),{start:c,end:d,isStart:e,isEnd:f}):void 0}function F(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days"),ms:a.time()-c.time()})}function G(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days")})}function H(a,c,d){return b.duration(Math.round(a.diff(c,d,!0)),d)}function I(a,b){var c,d,e;for(c=0;c<Ua.length&&(d=Ua[c],e=J(d,a,b),!(e>=1&&ba(e)));c++);return d}function J(a,c,d){return null!=d?d.diff(c,a,!0):b.isDuration(c)?c.as(a):c.end.diff(c.start,a,!0)}function K(a,b,c){var d;return N(c)?(b-a)/c:(d=c.asMonths(),Math.abs(d)>=1&&ba(d)?b.diff(a,"months",!0)/d:b.diff(a,"days",!0)/c.asDays())}function L(a,b){var c,d;return N(a)||N(b)?a/b:(c=a.asMonths(),d=b.asMonths(),Math.abs(c)>=1&&ba(c)&&Math.abs(d)>=1&&ba(d)?c/d:a.asDays()/b.asDays())}function M(a,c){var d;return N(a)?b.duration(a*c):(d=a.asMonths(),Math.abs(d)>=1&&ba(d)?b.duration({months:d*c}):b.duration({days:a.asDays()*c}))}function N(a){return Boolean(a.hours()||a.minutes()||a.seconds()||a.milliseconds())}function O(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function P(a){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(a)}function Q(a,b){var c,d,e,f,g,h,i={};if(b)for(c=0;c<b.length;c++){for(d=b[c],e=[],f=a.length-1;f>=0;f--)if(g=a[f][d],"object"==typeof g)e.unshift(g);else if(void 0!==g){i[d]=g;break}e.length&&(i[d]=Q(e))}for(c=a.length-1;c>=0;c--){h=a[c];for(d in h)d in i||(i[d]=h[d])}return i}function R(a){var b=function(){};return b.prototype=a,new b}function S(a,b){for(var c in a)U(a,c)&&(b[c]=a[c])}function T(a,b){var c,d,e=["constructor","toString","valueOf"];for(c=0;c<e.length;c++)d=e[c],a[d]!==Object.prototype[d]&&(b[d]=a[d])}function U(a,b){return Ya.call(a,b)}function V(b){return/undefined|null|boolean|number|string/.test(a.type(b))}function W(b,c,d){if(a.isFunction(b)&&(b=[b]),b){var e,f;for(e=0;e<b.length;e++)f=b[e].apply(c,d)||f;return f}}function X(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]}function Y(a){return(a+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#039;").replace(/"/g,"&quot;").replace(/\n/g,"<br />")}function Z(a){return a.replace(/&.*?;/g,"")}function $(b){var c=[];return a.each(b,function(a,b){null!=b&&c.push(a+":"+b)}),c.join(";")}function _(a){return a.charAt(0).toUpperCase()+a.slice(1)}function aa(a,b){return a-b}function ba(a){return a%1===0}function ca(a,b){var c=a[b];return function(){return c.apply(a,arguments)}}function da(a,b){var c,d,e,f,g=function(){var h=+new Date-f;b>h&&h>0?c=setTimeout(g,b-h):(c=null,a.apply(e,d),c||(e=d=null))};return function(){e=this,d=arguments,f=+new Date,c||(c=setTimeout(g,b))}}function ea(c,d,e){var f,g,h,i,j=c[0],k=1==c.length&&"string"==typeof j;return b.isMoment(j)?(i=b.apply(null,c),ga(j,i)):O(j)||void 0===j?i=b.apply(null,c):(f=!1,g=!1,k?Za.test(j)?(j+="-01",c=[j],f=!0,g=!0):(h=$a.exec(j))&&(f=!h[5],g=!0):a.isArray(j)&&(g=!0),i=d||f?b.utc.apply(b,c):b.apply(null,c),f?(i._ambigTime=!0,i._ambigZone=!0):e&&(g?i._ambigZone=!0:k&&(i.utcOffset?i.utcOffset(j):i.zone(j)))),i._fullCalendar=!0,i}function fa(a,c){var d,e,f=!1,g=!1,h=a.length,i=[];for(d=0;h>d;d++)e=a[d],b.isMoment(e)||(e=Pa.moment.parseZone(e)),f=f||e._ambigTime,g=g||e._ambigZone,i.push(e);for(d=0;h>d;d++)e=i[d],c||!f||e._ambigTime?g&&!e._ambigZone&&(i[d]=e.clone().stripZone()):i[d]=e.clone().stripTime();return i}function ga(a,b){a._ambigTime?b._ambigTime=!0:b._ambigTime&&(b._ambigTime=!1),a._ambigZone?b._ambigZone=!0:b._ambigZone&&(b._ambigZone=!1)}function ha(a,b){a.year(b[0]||0).month(b[1]||0).date(b[2]||0).hours(b[3]||0).minutes(b[4]||0).seconds(b[5]||0).milliseconds(b[6]||0)}function ia(a,b){return ab.format.call(a,b)}function ja(a,b){return ka(a,pa(b))}function ka(a,b){var c,d="";for(c=0;c<b.length;c++)d+=la(a,b[c]);return d}function la(a,b){var c,d;return"string"==typeof b?b:(c=b.token)?bb[c]?bb[c](a):ia(a,c):b.maybe&&(d=ka(a,b.maybe),d.match(/[1-9]/))?d:""}function ma(a,b,c,d,e){var f;return a=Pa.moment.parseZone(a),b=Pa.moment.parseZone(b),f=(a.localeData||a.lang).call(a),c=f.longDateFormat(c)||c,d=d||" - ",na(a,b,pa(c),d,e)}function na(a,b,c,d,e){var f,g,h,i,j=a.clone().stripZone(),k=b.clone().stripZone(),l="",m="",n="",o="",p="";for(g=0;g<c.length&&(f=oa(a,b,j,k,c[g]),f!==!1);g++)l+=f;for(h=c.length-1;h>g&&(f=oa(a,b,j,k,c[h]),f!==!1);h--)m=f+m;for(i=g;h>=i;i++)n+=la(a,c[i]),o+=la(b,c[i]);return(n||o)&&(p=e?o+d+n:n+d+o),l+p+m}function oa(a,b,c,d,e){var f,g;return"string"==typeof e?e:(f=e.token)&&(g=cb[f.charAt(0)],g&&c.isSame(d,g))?ia(a,f):!1}function pa(a){return a in db?db[a]:db[a]=qa(a)}function qa(a){for(var b,c=[],d=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;b=d.exec(a);)b[1]?c.push(b[1]):b[2]?c.push({maybe:qa(b[2])}):b[3]?c.push({token:b[3]}):b[5]&&c.push(b[5]);return c}function ra(){}function sa(a,b){var c;return U(b,"constructor")&&(c=b.constructor),"function"!=typeof c&&(c=b.constructor=function(){a.apply(this,arguments)}),c.prototype=R(a.prototype),S(b,c.prototype),T(b,c.prototype),S(a,c),c}function ta(a,b){S(b.prototype||b,a.prototype)}function ua(a,b){return a||b?a&&b?a.component===b.component&&va(a,b)&&va(b,a):!1:!0}function va(a,b){for(var c in a)if(!/^(component|left|right|top|bottom)$/.test(c)&&a[c]!==b[c])return!1;return!0}function wa(a){var b=ya(a);return"background"===b||"inverse-background"===b}function xa(a){return"inverse-background"===ya(a)}function ya(a){return X((a.source||{}).rendering,a.rendering)}function za(a){var b,c,d={};for(b=0;b<a.length;b++)c=a[b],(d[c._id]||(d[c._id]=[])).push(c);return d}function Aa(a,b){return a.start-b.start}function Ba(c){var d,e,f,g,h=Pa.dataAttrPrefix;return h&&(h+="-"),d=c.data(h+"event")||null,d&&(d="object"==typeof d?a.extend({},d):{},e=d.start,null==e&&(e=d.time),f=d.duration,g=d.stick,delete d.start,delete d.time,delete d.duration,delete d.stick),null==e&&(e=c.data(h+"start")),null==e&&(e=c.data(h+"time")),null==f&&(f=c.data(h+"duration")),null==g&&(g=c.data(h+"stick")),e=null!=e?b.duration(e):null,f=null!=f?b.duration(f):null,g=Boolean(g),{eventProps:d,startTime:e,duration:f,stick:g}}function Ca(a,b){var c,d;for(c=0;c<b.length;c++)if(d=b[c],d.leftCol<=a.rightCol&&d.rightCol>=a.leftCol)return!0;return!1}function Da(a,b){return a.leftCol-b.leftCol}function Ea(a){var b,c,d,e=[];for(b=0;b<a.length;b++){for(c=a[b],d=0;d<e.length&&Ha(c,e[d]).length;d++);c.level=d,(e[d]||(e[d]=[])).push(c)}return e}function Fa(a){var b,c,d,e,f;for(b=0;b<a.length;b++)for(c=a[b],d=0;d<c.length;d++)for(e=c[d],e.forwardSegs=[],f=b+1;f<a.length;f++)Ha(e,a[f],e.forwardSegs)}function Ga(a){var b,c,d=a.forwardSegs,e=0;if(void 0===a.forwardPressure){for(b=0;b<d.length;b++)c=d[b],Ga(c),e=Math.max(e,1+c.forwardPressure);a.forwardPressure=e}}function Ha(a,b,c){c=c||[];for(var d=0;d<b.length;d++)Ia(a,b[d])&&c.push(b[d]);return c}function Ia(a,b){return a.bottom>b.top&&a.top<b.bottom}function Ja(c,d){function e(){U?h()&&(k(),i()):f()}function f(){V=O.theme?"ui":"fc",c.addClass("fc"),O.isRTL?c.addClass("fc-rtl"):c.addClass("fc-ltr"),O.theme?c.addClass("ui-widget"):c.addClass("fc-unthemed"),U=a("<div class='fc-view-container'/>").prependTo(c),S=N.header=new Ma(N,O),T=S.render(),T&&c.prepend(T),i(O.defaultView),O.handleWindowResize&&(Y=da(m,O.windowResizeDelay),a(window).resize(Y))}function g(){W&&W.removeElement(),S.removeElement(),U.remove(),c.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),Y&&a(window).unbind("resize",Y)}function h(){return c.is(":visible")}function i(b){ca++,W&&b&&W.type!==b&&(S.deactivateButton(W.type),H(),W.removeElement(),W=N.view=null),!W&&b&&(W=N.view=ba[b]||(ba[b]=N.instantiateView(b)),W.setElement(a("<div class='fc-view fc-"+b+"-view' />").appendTo(U)),S.activateButton(b)),W&&(Z=W.massageCurrentDate(Z),W.displaying&&Z.isWithin(W.intervalStart,W.intervalEnd)||h()&&(W.display(Z),I(),u(),v(),q())),I(),ca--}function j(a){return h()?(a&&l(),ca++,W.updateSize(!0),ca--,!0):void 0}function k(){h()&&l()}function l(){X="number"==typeof O.contentHeight?O.contentHeight:"number"==typeof O.height?O.height-(T?T.outerHeight(!0):0):Math.round(U.width()/Math.max(O.aspectRatio,.5))}function m(a){!ca&&a.target===window&&W.start&&j(!0)&&W.trigger("windowResize",aa)}function n(){p(),r()}function o(){h()&&(H(),W.displayEvents(ea),I())}function p(){H(),W.clearEvents(),I()}function q(){!O.lazyFetching||$(W.start,W.end)?r():o()}function r(){_(W.start,W.end)}function s(a){ea=a,o()}function t(){o()}function u(){S.updateTitle(W.title)}function v(){var a=N.getNow();a.isWithin(W.intervalStart,W.intervalEnd)?S.disableButton("today"):S.enableButton("today")}function w(a,b){W.select(N.buildSelectSpan.apply(N,arguments))}function x(){W&&W.unselect()}function y(){Z=W.computePrevDate(Z),i()}function z(){Z=W.computeNextDate(Z),i()}function A(){Z.add(-1,"years"),i()}function B(){Z.add(1,"years"),i()}function C(){Z=N.getNow(),i()}function D(a){Z=N.moment(a).stripZone(),i()}function E(a){Z.add(b.duration(a)),i()}function F(a,b){var c;b=b||"day",c=N.getViewSpec(b)||N.getUnitViewSpec(b),Z=a.clone(),i(c?c.type:null)}function G(){return N.applyTimezone(Z)}function H(){U.css({width:"100%",height:U.height(),overflow:"hidden"})}function I(){U.css({width:"",height:"",overflow:""})}function J(){return N}function K(){return W}function L(a,b){return void 0===b?O[a]:void(("height"==a||"contentHeight"==a||"aspectRatio"==a)&&(O[a]=b,j(!0)))}function M(a,b){var c=Array.prototype.slice.call(arguments,2);return b=b||aa,this.triggerWith(a,b,c),O[a]?O[a].apply(b,c):void 0}var N=this;N.initOptions(d||{});var O=this.options;N.render=e,N.destroy=g,N.refetchEvents=n,N.reportEvents=s,N.reportEventChange=t,N.rerenderEvents=o,N.changeView=i,N.select=w,N.unselect=x,N.prev=y,N.next=z,N.prevYear=A,N.nextYear=B,N.today=C,N.gotoDate=D,N.incrementDate=E,N.zoomTo=F,N.getDate=G,N.getCalendar=J,N.getView=K,N.option=L,N.trigger=M;var P=R(La(O.lang));if(O.monthNames&&(P._months=O.monthNames),O.monthNamesShort&&(P._monthsShort=O.monthNamesShort),O.dayNames&&(P._weekdays=O.dayNames),O.dayNamesShort&&(P._weekdaysShort=O.dayNamesShort),null!=O.firstDay){var Q=R(P._week);Q.dow=O.firstDay,P._week=Q}P._fullCalendar_weekCalc=function(a){return"function"==typeof a?a:"local"===a?a:"iso"===a||"ISO"===a?"ISO":void 0}(O.weekNumberCalculation),N.defaultAllDayEventDuration=b.duration(O.defaultAllDayEventDuration),N.defaultTimedEventDuration=b.duration(O.defaultTimedEventDuration),N.moment=function(){var a;return"local"===O.timezone?(a=Pa.moment.apply(null,arguments),a.hasTime()&&a.local()):a="UTC"===O.timezone?Pa.moment.utc.apply(null,arguments):Pa.moment.parseZone.apply(null,arguments),"_locale"in a?a._locale=P:a._lang=P,a},N.getIsAmbigTimezone=function(){return"local"!==O.timezone&&"UTC"!==O.timezone},N.applyTimezone=function(a){if(!a.hasTime())return a.clone();var b,c=N.moment(a.toArray()),d=a.time()-c.time();return d&&(b=c.clone().add(d),a.time()-b.time()===0&&(c=b)),c},N.getNow=function(){var a=O.now;return"function"==typeof a&&(a=a()),N.moment(a).stripZone()},N.getEventEnd=function(a){return a.end?a.end.clone():N.getDefaultEventEnd(a.allDay,a.start)},N.getDefaultEventEnd=function(a,b){var c=b.clone();return a?c.stripTime().add(N.defaultAllDayEventDuration):c.add(N.defaultTimedEventDuration),N.getIsAmbigTimezone()&&c.stripZone(),c},N.humanizeDuration=function(a){return(a.locale||a.lang).call(a,O.lang).humanize()},Na.call(N,O);var S,T,U,V,W,X,Y,Z,$=N.isFetchNeeded,_=N.fetchEvents,aa=c[0],ba={},ca=0,ea=[];Z=null!=O.defaultDate?N.moment(O.defaultDate).stripZone():N.getNow(),N.getSuggestedViewHeight=function(){return void 0===X&&k(),X},N.isHeightAuto=function(){return"auto"===O.contentHeight||"auto"===O.height},N.freezeContentHeight=H,N.unfreezeContentHeight=I,N.initialize()}function Ka(b){a.each(tb,function(a,c){null==b[a]&&(b[a]=c(b))})}function La(a){var c=b.localeData||b.langData;return c.call(b,a)||c.call(b,"en")}function Ma(b,c){function d(){var b=c.header;return n=c.theme?"ui":"fc",b?o=a("<div class='fc-toolbar'/>").append(f("left")).append(f("right")).append(f("center")).append('<div class="fc-clear"/>'):void 0}function e(){o.remove(),o=a()}function f(d){var e=a('<div class="fc-'+d+'"/>'),f=c.header[d];return f&&a.each(f.split(" "),function(d){var f,g=a(),h=!0;a.each(this.split(","),function(d,e){var f,i,j,k,l,m,o,q,r,s;"title"==e?(g=g.add(a("<h2>&nbsp;</h2>")),h=!1):((f=(b.options.customButtons||{})[e])?(j=function(a){f.click&&f.click.call(s[0],a)},k="",l=f.text):(i=b.getViewSpec(e))?(j=function(){b.changeView(e)},p.push(e),k=i.buttonTextOverride,l=i.buttonTextDefault):b[e]&&(j=function(){b[e]()},k=(b.overrides.buttonText||{})[e],l=c.buttonText[e]),j&&(m=f?f.themeIcon:c.themeButtonIcons[e],o=f?f.icon:c.buttonIcons[e],q=k?Y(k):m&&c.theme?"<span class='ui-icon ui-icon-"+m+"'></span>":o&&!c.theme?"<span class='fc-icon fc-icon-"+o+"'></span>":Y(l),r=["fc-"+e+"-button",n+"-button",n+"-state-default"],s=a('<button type="button" class="'+r.join(" ")+'">'+q+"</button>").click(function(a){s.hasClass(n+"-state-disabled")||(j(a),(s.hasClass(n+"-state-active")||s.hasClass(n+"-state-disabled"))&&s.removeClass(n+"-state-hover"))}).mousedown(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-down")}).mouseup(function(){s.removeClass(n+"-state-down")}).hover(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-hover")},function(){s.removeClass(n+"-state-hover").removeClass(n+"-state-down")}),g=g.add(s)))}),h&&g.first().addClass(n+"-corner-left").end().last().addClass(n+"-corner-right").end(),g.length>1?(f=a("<div/>"),h&&f.addClass("fc-button-group"),f.append(g),e.append(f)):e.append(g)}),e}function g(a){o.find("h2").text(a)}function h(a){o.find(".fc-"+a+"-button").addClass(n+"-state-active")}function i(a){o.find(".fc-"+a+"-button").removeClass(n+"-state-active")}function j(a){o.find(".fc-"+a+"-button").attr("disabled","disabled").addClass(n+"-state-disabled")}function k(a){o.find(".fc-"+a+"-button").removeAttr("disabled").removeClass(n+"-state-disabled")}function l(){return p}var m=this;m.render=d,m.removeElement=e,m.updateTitle=g,m.activateButton=h,m.deactivateButton=i,m.disableButton=j,m.enableButton=k,m.getViewsWithButtons=l;var n,o=a(),p=[]}function Na(c){function d(a,b){return!L||L>a||b>M}function e(a,b){L=a,M=b,T=[];var c=++R,d=Q.length;S=d;for(var e=0;d>e;e++)f(Q[e],c)}function f(b,c){g(b,function(d){var e,f,g,h=a.isArray(b.events);if(c==R){if(d)for(e=0;e<d.length;e++)f=d[e],g=h?f:s(f,b),g&&T.push.apply(T,w(g));S--,S||N(T)}})}function g(b,d){var e,f,h=Pa.sourceFetchers;for(e=0;e<h.length;e++){if(f=h[e].call(K,b,L.clone(),M.clone(),c.timezone,d),f===!0)return;if("object"==typeof f)return void g(f,d)}var i=b.events;if(i)a.isFunction(i)?(K.pushLoading(),i.call(K,L.clone(),M.clone(),c.timezone,function(a){d(a),K.popLoading()})):a.isArray(i)?d(i):d();else{var j=b.url;if(j){var k,l=b.success,m=b.error,n=b.complete;k=a.isFunction(b.data)?b.data():b.data;var o=a.extend({},k||{}),p=X(b.startParam,c.startParam),q=X(b.endParam,c.endParam),r=X(b.timezoneParam,c.timezoneParam);p&&(o[p]=L.format()),q&&(o[q]=M.format()),c.timezone&&"local"!=c.timezone&&(o[r]=c.timezone),K.pushLoading(),a.ajax(a.extend({},ub,b,{data:o,success:function(b){b=b||[];var c=W(l,this,arguments);a.isArray(c)&&(b=c),d(b)},error:function(){W(m,this,arguments),d()},complete:function(){W(n,this,arguments),K.popLoading()}}))}else d()}}function h(a){var b=i(a);b&&(Q.push(b),S++,f(b,R))}function i(b){var c,d,e=Pa.sourceNormalizers;if(a.isFunction(b)||a.isArray(b)?c={events:b}:"string"==typeof b?c={url:b}:"object"==typeof b&&(c=a.extend({},b)),c){for(c.className?"string"==typeof c.className&&(c.className=c.className.split(/\s+/)):c.className=[],a.isArray(c.events)&&(c.origArray=c.events,c.events=a.map(c.events,function(a){return s(a,c)})),d=0;d<e.length;d++)e[d].call(K,c);return c}}function j(b){Q=a.grep(Q,function(a){return!k(a,b)}),T=a.grep(T,function(a){return!k(a.source,b)}),N(T)}function k(a,b){return a&&b&&l(a)==l(b)}function l(a){return("object"==typeof a?a.origArray||a.googleCalendarId||a.url||a.events:null)||a}function m(a){a.start=K.moment(a.start),a.end?a.end=K.moment(a.end):a.end=null,x(a,n(a)),N(T)}function n(b){var c={};return a.each(b,function(a,b){o(a)&&void 0!==b&&V(b)&&(c[a]=b)}),c}function o(a){return!/^_|^(id|allDay|start|end)$/.test(a)}function p(a,b){var c,d,e,f=s(a);if(f){for(c=w(f),d=0;d<c.length;d++)e=c[d],e.source||(b&&(O.events.push(e),e.source=O),T.push(e));return N(T),c}return[]}function q(b){var c,d;for(null==b?b=function(){return!0}:a.isFunction(b)||(c=b+"",b=function(a){return a._id==c}),T=a.grep(T,b,!0),d=0;d<Q.length;d++)a.isArray(Q[d].events)&&(Q[d].events=a.grep(Q[d].events,b,!0));N(T)}function r(b){return a.isFunction(b)?a.grep(T,b):null!=b?(b+="",a.grep(T,function(a){return a._id==b})):T}function s(d,e){var f,g,h,i={};if(c.eventDataTransform&&(d=c.eventDataTransform(d)),e&&e.eventDataTransform&&(d=e.eventDataTransform(d)),a.extend(i,d),e&&(i.source=e),i._id=d._id||(void 0===d.id?"_fc"+vb++:d.id+""),d.className?"string"==typeof d.className?i.className=d.className.split(/\s+/):i.className=d.className:i.className=[],f=d.start||d.date,g=d.end,P(f)&&(f=b.duration(f)),P(g)&&(g=b.duration(g)),d.dow||b.isDuration(f)||b.isDuration(g))i.start=f?b.duration(f):null,i.end=g?b.duration(g):null,i._recurring=!0;else{if(f&&(f=K.moment(f),!f.isValid()))return!1;g&&(g=K.moment(g),g.isValid()||(g=null)),h=d.allDay,void 0===h&&(h=X(e?e.allDayDefault:void 0,c.allDayDefault)),t(f,g,h,i)}return i}function t(a,b,c,d){d.start=a,d.end=b,d.allDay=c,u(d),Oa(d)}function u(a){v(a),a.end&&!a.end.isAfter(a.start)&&(a.end=null),a.end||(c.forceEventDuration?a.end=K.getDefaultEventEnd(a.allDay,a.start):a.end=null)}function v(a){null==a.allDay&&(a.allDay=!(a.start.hasTime()||a.end&&a.end.hasTime())),a.allDay?(a.start.stripTime(),a.end&&a.end.stripTime()):(a.start.hasTime()||(a.start=K.applyTimezone(a.start.time(0))),a.end&&!a.end.hasTime()&&(a.end=K.applyTimezone(a.end.time(0))))}function w(b,c,d){var e,f,g,h,i,j,k,l,m,n=[];if(c=c||L,d=d||M,b)if(b._recurring){if(f=b.dow)for(e={},g=0;g<f.length;g++)e[f[g]]=!0;for(h=c.clone().stripTime();h.isBefore(d);)(!e||e[h.day()])&&(i=b.start,j=b.end,k=h.clone(),l=null,i&&(k=k.time(i)),j&&(l=h.clone().time(j)),m=a.extend({},b),t(k,l,!i&&!j,m),n.push(m)),h.add(1,"days")}else n.push(b);return n}function x(b,c,d){function e(a,b){return d?H(a,b,d):c.allDay?G(a,b):F(a,b)}var f,g,h,i,j,k,l={};return c=c||{},c.start||(c.start=b.start.clone()),void 0===c.end&&(c.end=b.end?b.end.clone():null),null==c.allDay&&(c.allDay=b.allDay),u(c),f={start:b._start.clone(),end:b._end?b._end.clone():K.getDefaultEventEnd(b._allDay,b._start),allDay:c.allDay},u(f),g=null!==b._end&&null===c.end,h=e(c.start,f.start),c.end?(i=e(c.end,f.end),j=i.subtract(h)):j=null,a.each(c,function(a,b){o(a)&&void 0!==b&&(l[a]=b)}),k=y(r(b._id),g,c.allDay,h,j,l),{dateDelta:h,durationDelta:j,undo:k}}function y(b,c,d,e,f,g){var h=K.getIsAmbigTimezone(),i=[];return e&&!e.valueOf()&&(e=null),f&&!f.valueOf()&&(f=null),a.each(b,function(b,j){var k,l;k={start:j.start.clone(),end:j.end?j.end.clone():null,allDay:j.allDay},a.each(g,function(a){k[a]=j[a]}),l={start:j._start,end:j._end,allDay:d},u(l),c?l.end=null:f&&!l.end&&(l.end=K.getDefaultEventEnd(l.allDay,l.start)),e&&(l.start.add(e),l.end&&l.end.add(e)),f&&l.end.add(f),h&&!l.allDay&&(e||f)&&(l.start.stripZone(),l.end&&l.end.stripZone()),a.extend(j,g,l),Oa(j),i.push(function(){a.extend(j,k),Oa(j)})}),function(){for(var a=0;a<i.length;a++)i[a]()}}function z(b){var d,e=c.businessHours,f={className:"fc-nonbusiness",start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"},g=K.getView();return e&&(d=a.extend({},f,"object"==typeof e?e:{})),d?(b&&(d.start=null,d.end=null),w(s(d),g.start,g.end)):[]}function A(a,b){var d=b.source||{},e=X(b.constraint,d.constraint,c.eventConstraint),f=X(b.overlap,d.overlap,c.eventOverlap);return D(a,e,f,b)}function B(b,c,d){var e,f;return d&&(e=a.extend({},d,c),f=w(s(e))[0]),f?A(b,f):C(b)}function C(a){return D(a,c.selectConstraint,c.selectOverlap)}function D(a,b,c,d){var e,f,g,h,i,j;if(null!=b){for(e=E(b),f=!1,h=0;h<e.length;h++)if(I(e[h],a)){f=!0;break}if(!f)return!1}for(g=K.getPeerEvents(a,d),h=0;h<g.length;h++)if(i=g[h],J(i,a)){if(c===!1)return!1;if("function"==typeof c&&!c(i,d))return!1;if(d){if(j=X(i.overlap,(i.source||{}).overlap),j===!1)return!1;if("function"==typeof j&&!j(d,i))return!1}}return!0}function E(a){return"businessHours"===a?z():"object"==typeof a?w(s(a)):r(a)}function I(a,b){var c=a.start.clone().stripZone(),d=K.getEventEnd(a).stripZone();return b.start>=c&&b.end<=d}function J(a,b){var c=a.start.clone().stripZone(),d=K.getEventEnd(a).stripZone();return b.start<d&&b.end>c}var K=this;K.isFetchNeeded=d,K.fetchEvents=e,K.addEventSource=h,K.removeEventSource=j,K.updateEvent=m,K.renderEvent=p,K.removeEvents=q,K.clientEvents=r,K.mutateEvent=x,K.normalizeEventDates=u,K.normalizeEventTimes=v;var L,M,N=K.reportEvents,O={events:[]},Q=[O],R=0,S=0,T=[];a.each((c.events?[c.events]:[]).concat(c.eventSources||[]),function(a,b){var c=i(b);c&&Q.push(c)}),K.getBusinessHoursEvents=z,K.isEventSpanAllowed=A,K.isExternalSpanAllowed=B,K.isSelectionSpanAllowed=C,K.getEventCache=function(){return T}}function Oa(a){a._allDay=a.allDay,a._start=a.start.clone(),a._end=a.end?a.end.clone():null}var Pa=a.fullCalendar={version:"2.6.1",internalApiVersion:3},Qa=Pa.views={};a.fn.fullCalendar=function(b){var c=Array.prototype.slice.call(arguments,1),d=this;return this.each(function(e,f){var g,h=a(f),i=h.data("fullCalendar");"string"==typeof b?i&&a.isFunction(i[b])&&(g=i[b].apply(i,c),e||(d=g),"destroy"===b&&h.removeData("fullCalendar")):i||(i=new pb(h,b),h.data("fullCalendar",i),i.render())}),d};var Ra=["header","buttonText","buttonIcons","themeButtonIcons"];Pa.intersectRanges=E,Pa.applyAll=W,Pa.debounce=da,Pa.isInt=ba,Pa.htmlEscape=Y,Pa.cssToStr=$,Pa.proxy=ca,Pa.capitaliseFirstLetter=_,Pa.getOuterRect=o,Pa.getClientRect=p,Pa.getContentRect=q,Pa.getScrollbarWidths=r;var Sa=null;Pa.intersectRects=w,Pa.parseFieldSpecs=A,Pa.compareByFieldSpecs=B,Pa.compareByFieldSpec=C,Pa.flexibleCompare=D,Pa.computeIntervalUnit=I,Pa.divideRangeByDuration=K,Pa.divideDurationByDuration=L,Pa.multiplyDuration=M,Pa.durationHasTime=N;var Ta=["sun","mon","tue","wed","thu","fri","sat"],Ua=["year","month","week","day","hour","minute","second","millisecond"];Pa.log=function(){var a=window.console;return a&&a.log?a.log.apply(a,arguments):void 0},Pa.warn=function(){var a=window.console;return a&&a.warn?a.warn.apply(a,arguments):Pa.log.apply(Pa,arguments)};var Va,Wa,Xa,Ya={}.hasOwnProperty,Za=/^\s*\d{4}-\d\d$/,$a=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,_a=b.fn,ab=a.extend({},_a);Pa.moment=function(){return ea(arguments)},Pa.moment.utc=function(){var a=ea(arguments,!0);return a.hasTime()&&a.utc(),a},Pa.moment.parseZone=function(){return ea(arguments,!0,!0)},_a.clone=function(){var a=ab.clone.apply(this,arguments);return ga(this,a),this._fullCalendar&&(a._fullCalendar=!0),a},_a.week=_a.weeks=function(a){var b=(this._locale||this._lang)._fullCalendar_weekCalc;return null==a&&"function"==typeof b?b(this):"ISO"===b?ab.isoWeek.apply(this,arguments):ab.week.apply(this,arguments)},_a.time=function(a){if(!this._fullCalendar)return ab.time.apply(this,arguments);if(null==a)return b.duration({hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()});this._ambigTime=!1,b.isDuration(a)||b.isMoment(a)||(a=b.duration(a));var c=0;return b.isDuration(a)&&(c=24*Math.floor(a.asDays())),this.hours(c+a.hours()).minutes(a.minutes()).seconds(a.seconds()).milliseconds(a.milliseconds())},_a.stripTime=function(){var a;return this._ambigTime||(a=this.toArray(),this.utc(),Wa(this,a.slice(0,3)),this._ambigTime=!0,this._ambigZone=!0),this},_a.hasTime=function(){return!this._ambigTime},_a.stripZone=function(){var a,b;return this._ambigZone||(a=this.toArray(),b=this._ambigTime,this.utc(),Wa(this,a),this._ambigTime=b||!1,this._ambigZone=!0),this},_a.hasZone=function(){return!this._ambigZone},_a.local=function(){var a=this.toArray(),b=this._ambigZone;return ab.local.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,b&&Xa(this,a),this},_a.utc=function(){return ab.utc.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,this},a.each(["zone","utcOffset"],function(a,b){ab[b]&&(_a[b]=function(a){return null!=a&&(this._ambigTime=!1,this._ambigZone=!1),ab[b].apply(this,arguments)})}),_a.format=function(){return this._fullCalendar&&arguments[0]?ja(this,arguments[0]):this._ambigTime?ia(this,"YYYY-MM-DD"):this._ambigZone?ia(this,"YYYY-MM-DD[T]HH:mm:ss"):ab.format.apply(this,arguments)},_a.toISOString=function(){return this._ambigTime?ia(this,"YYYY-MM-DD"):this._ambigZone?ia(this,"YYYY-MM-DD[T]HH:mm:ss"):ab.toISOString.apply(this,arguments)},_a.isWithin=function(a,b){var c=fa([this,a,b]);return c[0]>=c[1]&&c[0]<c[2]},_a.isSame=function(a,b){var c;return this._fullCalendar?b?(c=fa([this,a],!0),ab.isSame.call(c[0],c[1],b)):(a=Pa.moment.parseZone(a),ab.isSame.call(this,a)&&Boolean(this._ambigTime)===Boolean(a._ambigTime)&&Boolean(this._ambigZone)===Boolean(a._ambigZone)):ab.isSame.apply(this,arguments)},a.each(["isBefore","isAfter"],function(a,b){_a[b]=function(a,c){var d;return this._fullCalendar?(d=fa([this,a]),ab[b].call(d[0],d[1],c)):ab[b].apply(this,arguments)}}),Va="_d"in b()&&"updateOffset"in b,Wa=Va?function(a,c){a._d.setTime(Date.UTC.apply(Date,c)),b.updateOffset(a,!1)}:ha,Xa=Va?function(a,c){a._d.setTime(+new Date(c[0]||0,c[1]||0,c[2]||0,c[3]||0,c[4]||0,c[5]||0,c[6]||0)),b.updateOffset(a,!1)}:ha;var bb={t:function(a){return ia(a,"a").charAt(0)},T:function(a){return ia(a,"A").charAt(0)}};Pa.formatRange=ma;var cb={Y:"year",M:"month",D:"day",d:"day",A:"second",a:"second",T:"second",t:"second",H:"second",h:"second",m:"second",s:"second"},db={};Pa.Class=ra,ra.extend=function(){var a,b,c=arguments.length;for(a=0;c>a;a++)b=arguments[a],c-1>a&&ta(this,b);return sa(this,b||{})},ra.mixin=function(a){ta(this,a)};var eb=Pa.Emitter=ra.extend({callbackHash:null,on:function(a,b){return this.getCallbacks(a).add(b),this},off:function(a,b){return this.getCallbacks(a).remove(b),this},trigger:function(a){var b=Array.prototype.slice.call(arguments,1);return this.triggerWith(a,this,b),this},triggerWith:function(a,b,c){var d=this.getCallbacks(a);return d.fireWith(b,c),this},getCallbacks:function(b){var c;return this.callbackHash||(this.callbackHash={}),c=this.callbackHash[b],c||(c=this.callbackHash[b]=a.Callbacks()),c}}),fb=ra.extend({isHidden:!0,options:null,el:null,documentMousedownProxy:null,margin:10,constructor:function(a){this.options=a||{}},show:function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},hide:function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},render:function(){var b=this,c=this.options;this.el=a('<div class="fc-popover"/>').addClass(c.className||"").css({top:0,left:0}).append(c.content).appendTo(c.parentEl),this.el.on("click",".fc-close",function(){b.hide()}),c.autoHide&&a(document).on("mousedown",this.documentMousedownProxy=ca(this,"documentMousedown"))},documentMousedown:function(b){this.el&&!a(b.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),a(document).off("mousedown",this.documentMousedownProxy)},position:function(){var b,c,d,e,f,g=this.options,h=this.el.offsetParent().offset(),i=this.el.outerWidth(),j=this.el.outerHeight(),k=a(window),l=n(this.el);e=g.top||0,f=void 0!==g.left?g.left:void 0!==g.right?g.right-i:0,l.is(window)||l.is(document)?(l=k,b=0,c=0):(d=l.offset(),b=d.top,c=d.left),b+=k.scrollTop(),c+=k.scrollLeft(),g.viewportConstrain!==!1&&(e=Math.min(e,b+l.outerHeight()-j-this.margin),e=Math.max(e,b+this.margin),f=Math.min(f,c+l.outerWidth()-i-this.margin),
-f=Math.max(f,c+this.margin)),this.el.css({top:e-h.top,left:f-h.left})},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1))}}),gb=Pa.CoordCache=ra.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(b){this.els=a(b.els),this.isHorizontal=b.isHorizontal,this.isVertical=b.isVertical,this.forcedOffsetParentEl=b.offsetParent?a(b.offsetParent):null},build:function(){var a=this.forcedOffsetParentEl||this.els.eq(0).offsetParent();this.origin=a.offset(),this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},queryBoundingRect:function(){var a=n(this.els.eq(0));return a.is(document)?void 0:p(a)},buildElHorizontals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().left,h=f.outerWidth();b.push(g),c.push(g+h)}),this.lefts=b,this.rights=c},buildElVerticals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().top,h=f.outerHeight();b.push(g),c.push(g+h)}),this.tops=b,this.bottoms=c},getHorizontalIndex:function(a){this.ensureBuilt();var b,c=this.boundingRect,d=this.lefts,e=this.rights,f=d.length;if(!c||a>=c.left&&a<c.right)for(b=0;f>b;b++)if(a>=d[b]&&a<e[b])return b},getVerticalIndex:function(a){this.ensureBuilt();var b,c=this.boundingRect,d=this.tops,e=this.bottoms,f=d.length;if(!c||a>=c.top&&a<c.bottom)for(b=0;f>b;b++)if(a>=d[b]&&a<e[b])return b},getLeftOffset:function(a){return this.ensureBuilt(),this.lefts[a]},getLeftPosition:function(a){return this.ensureBuilt(),this.lefts[a]-this.origin.left},getRightOffset:function(a){return this.ensureBuilt(),this.rights[a]},getRightPosition:function(a){return this.ensureBuilt(),this.rights[a]-this.origin.left},getWidth:function(a){return this.ensureBuilt(),this.rights[a]-this.lefts[a]},getTopOffset:function(a){return this.ensureBuilt(),this.tops[a]},getTopPosition:function(a){return this.ensureBuilt(),this.tops[a]-this.origin.top},getBottomOffset:function(a){return this.ensureBuilt(),this.bottoms[a]},getBottomPosition:function(a){return this.ensureBuilt(),this.bottoms[a]-this.origin.top},getHeight:function(a){return this.ensureBuilt(),this.bottoms[a]-this.tops[a]}}),hb=Pa.DragListener=ra.extend({options:null,isListening:!1,isDragging:!1,originX:null,originY:null,mousemoveProxy:null,mouseupProxy:null,subjectEl:null,subjectHref:null,scrollEl:null,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollHandlerProxy:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,constructor:function(a){a=a||{},this.options=a,this.subjectEl=a.subjectEl},mousedown:function(a){v(a)&&(a.preventDefault(),this.startListening(a),this.options.distance||this.startDrag(a))},startListening:function(b){var c;this.isListening||(b&&this.options.scroll&&(c=n(a(b.target)),c.is(window)||c.is(document)||(this.scrollEl=c,this.scrollHandlerProxy=da(ca(this,"scrollHandler"),100),this.scrollEl.on("scroll",this.scrollHandlerProxy))),a(document).on("mousemove",this.mousemoveProxy=ca(this,"mousemove")).on("mouseup",this.mouseupProxy=ca(this,"mouseup")).on("selectstart",this.preventDefault),b?(this.originX=b.pageX,this.originY=b.pageY):(this.originX=0,this.originY=0),this.isListening=!0,this.listenStart(b))},listenStart:function(a){this.trigger("listenStart",a)},mousemove:function(a){var b,c,d=a.pageX-this.originX,e=a.pageY-this.originY;this.isDragging||(b=this.options.distance||1,c=d*d+e*e,c>=b*b&&this.startDrag(a)),this.isDragging&&this.drag(d,e,a)},startDrag:function(a){this.isListening||this.startListening(),this.isDragging||(this.isDragging=!0,this.dragStart(a))},dragStart:function(a){var b=this.subjectEl;this.trigger("dragStart",a),(this.subjectHref=b?b.attr("href"):null)&&b.removeAttr("href")},drag:function(a,b,c){this.trigger("drag",a,b,c),this.updateScroll(c)},mouseup:function(a){this.stopListening(a)},stopDrag:function(a){this.isDragging&&(this.stopScrolling(),this.dragStop(a),this.isDragging=!1)},dragStop:function(a){var b=this;this.trigger("dragStop",a),setTimeout(function(){b.subjectHref&&b.subjectEl.attr("href",b.subjectHref)},0)},stopListening:function(b){this.stopDrag(b),this.isListening&&(this.scrollEl&&(this.scrollEl.off("scroll",this.scrollHandlerProxy),this.scrollHandlerProxy=null),a(document).off("mousemove",this.mousemoveProxy).off("mouseup",this.mouseupProxy).off("selectstart",this.preventDefault),this.mousemoveProxy=null,this.mouseupProxy=null,this.isListening=!1,this.listenStop(b))},listenStop:function(a){this.trigger("listenStop",a)},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1))},preventDefault:function(a){a.preventDefault()},computeScrollBounds:function(){var a=this.scrollEl;this.scrollBounds=a?o(a):null},updateScroll:function(a){var b,c,d,e,f=this.scrollSensitivity,g=this.scrollBounds,h=0,i=0;g&&(b=(f-(a.pageY-g.top))/f,c=(f-(g.bottom-a.pageY))/f,d=(f-(a.pageX-g.left))/f,e=(f-(g.right-a.pageX))/f,b>=0&&1>=b?h=b*this.scrollSpeed*-1:c>=0&&1>=c&&(h=c*this.scrollSpeed),d>=0&&1>=d?i=d*this.scrollSpeed*-1:e>=0&&1>=e&&(i=e*this.scrollSpeed)),this.setScrollVel(h,i)},setScrollVel:function(a,b){this.scrollTopVel=a,this.scrollLeftVel=b,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(ca(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var a=this.scrollEl;this.scrollTopVel<0?a.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&a.scrollTop()+a[0].clientHeight>=a[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?a.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&a.scrollLeft()+a[0].clientWidth>=a[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var a=this.scrollEl,b=this.scrollIntervalMs/1e3;this.scrollTopVel&&a.scrollTop(a.scrollTop()+this.scrollTopVel*b),this.scrollLeftVel&&a.scrollLeft(a.scrollLeft()+this.scrollLeftVel*b),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.stopScrolling()},stopScrolling:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.scrollStop())},scrollHandler:function(){this.scrollIntervalId||this.scrollStop()},scrollStop:function(){}}),ib=hb.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(a,b){hb.call(this,b),this.component=a},listenStart:function(a){var b,c,d,e=this.subjectEl;hb.prototype.listenStart.apply(this,arguments),this.computeCoords(),a?(c={left:a.pageX,top:a.pageY},d=c,e&&(b=o(e),d=x(d,b)),this.origHit=this.queryHit(d.left,d.top),e&&this.options.subjectCenter&&(this.origHit&&(b=w(this.origHit,b)||b),d=y(b)),this.coordAdjust=z(d,c)):(this.origHit=null,this.coordAdjust=null)},computeCoords:function(){this.component.prepareHits(),this.computeScrollBounds()},dragStart:function(a){var b;hb.prototype.dragStart.apply(this,arguments),b=this.queryHit(a.pageX,a.pageY),b&&this.hitOver(b)},drag:function(a,b,c){var d;hb.prototype.drag.apply(this,arguments),d=this.queryHit(c.pageX,c.pageY),ua(d,this.hit)||(this.hit&&this.hitOut(),d&&this.hitOver(d))},dragStop:function(){this.hitDone(),hb.prototype.dragStop.apply(this,arguments)},hitOver:function(a){var b=ua(a,this.origHit);this.hit=a,this.trigger("hitOver",this.hit,b,this.origHit)},hitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.hitDone(),this.hit=null)},hitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},listenStop:function(){hb.prototype.listenStop.apply(this,arguments),this.origHit=null,this.hit=null,this.component.releaseHits()},scrollStop:function(){hb.prototype.scrollStop.apply(this,arguments),this.computeCoords()},queryHit:function(a,b){return this.coordAdjust&&(a+=this.coordAdjust.left,b+=this.coordAdjust.top),this.component.queryHit(a,b)}}),jb=ra.extend({options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,mouseY0:null,mouseX0:null,topDelta:null,leftDelta:null,mousemoveProxy:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(b,c){this.options=c=c||{},this.sourceEl=b,this.parentEl=c.parentEl?a(c.parentEl):b.parent()},start:function(b){this.isFollowing||(this.isFollowing=!0,this.mouseY0=b.pageY,this.mouseX0=b.pageX,this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),a(document).on("mousemove",this.mousemoveProxy=ca(this,"mousemove")))},stop:function(b,c){function d(){this.isAnimating=!1,e.removeElement(),this.top0=this.left0=null,c&&c()}var e=this,f=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,a(document).off("mousemove",this.mousemoveProxy),b&&f&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:f,complete:d})):d())},getEl:function(){var a=this.el;return a||(this.sourceEl.width(),a=this.el=this.sourceEl.clone().css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}).appendTo(this.parentEl)),a},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var a,b;this.getEl(),null===this.top0&&(this.sourceEl.width(),a=this.sourceEl.offset(),b=this.el.offsetParent().offset(),this.top0=a.top-b.top,this.left0=a.left-b.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},mousemove:function(a){this.topDelta=a.pageY-this.mouseY0,this.leftDelta=a.pageX-this.mouseX0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),kb=Pa.Grid=ra.extend({view:null,isRTL:null,start:null,end:null,el:null,elsByFill:null,externalDragStartProxy:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,minResizeDuration:null,largeUnit:null,constructor:function(a){this.view=a,this.isRTL=a.opt("isRTL"),this.elsByFill={},this.externalDragStartProxy=ca(this,"externalDragStart")},computeEventTimeFormat:function(){return this.view.opt("smallTimeFormat")},computeDisplayEventTime:function(){return!0},computeDisplayEventEnd:function(){return!0},setRange:function(a){this.start=a.start.clone(),this.end=a.end.clone(),this.rangeUpdated(),this.processRangeOptions()},rangeUpdated:function(){},processRangeOptions:function(){var a,b,c=this.view;this.eventTimeFormat=c.opt("eventTimeFormat")||c.opt("timeFormat")||this.computeEventTimeFormat(),a=c.opt("displayEventTime"),null==a&&(a=this.computeDisplayEventTime()),b=c.opt("displayEventEnd"),null==b&&(b=this.computeDisplayEventEnd()),this.displayEventTime=a,this.displayEventEnd=b},spanToSegs:function(a){},diffDates:function(a,b){return this.largeUnit?H(a,b,this.largeUnit):F(a,b)},prepareHits:function(){},releaseHits:function(){},queryHit:function(a,b){},getHitSpan:function(a){},getHitEl:function(a){},setElement:function(b){var c=this;this.el=b,b.on("mousedown",function(b){a(b.target).is(".fc-event-container *, .fc-more")||a(b.target).closest(".fc-popover").length||c.dayMousedown(b)}),this.bindSegHandlers(),this.bindGlobalHandlers()},removeElement:function(){this.unbindGlobalHandlers(),this.el.remove()},renderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},bindGlobalHandlers:function(){a(document).on("dragstart sortstart",this.externalDragStartProxy)},unbindGlobalHandlers:function(){a(document).off("dragstart sortstart",this.externalDragStartProxy)},dayMousedown:function(a){var b,c,d=this,e=this.view,f=e.opt("selectable"),i=new ib(this,{scroll:e.opt("dragScroll"),dragStart:function(){e.unselect()},hitOver:function(a,e,h){h&&(b=e?a:null,f&&(c=d.computeSelection(d.getHitSpan(h),d.getHitSpan(a)),c?d.renderSelection(c):c===!1&&g()))},hitOut:function(){b=null,c=null,d.unrenderSelection(),h()},listenStop:function(a){b&&e.triggerDayClick(d.getHitSpan(b),d.getHitEl(b),a),c&&e.reportSelection(c,a),h()}});i.mousedown(a)},renderEventLocationHelper:function(a,b){var c=this.fabricateHelperEvent(a,b);this.renderHelper(c,b)},fabricateHelperEvent:function(a,b){var c=b?R(b.event):{};return c.start=a.start.clone(),c.end=a.end?a.end.clone():null,c.allDay=null,this.view.calendar.normalizeEventDates(c),c.className=(c.className||[]).concat("fc-helper"),b||(c.editable=!1),c},renderHelper:function(a,b){},unrenderHelper:function(){},renderSelection:function(a){this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHighlight()},computeSelection:function(a,b){var c=this.computeSelectionSpan(a,b);return c&&!this.view.calendar.isSelectionSpanAllowed(c)?!1:c},computeSelectionSpan:function(a,b){var c=[a.start,a.end,b.start,b.end];return c.sort(aa),{start:c[0].clone(),end:c[3].clone()}},renderHighlight:function(a){this.renderFill("highlight",this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderBusinessHours:function(){},unrenderBusinessHours:function(){},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},renderFill:function(a,b){},unrenderFill:function(a){var b=this.elsByFill[a];b&&(b.remove(),delete this.elsByFill[a])},renderFillSegEls:function(b,c){var d,e=this,f=this[b+"SegEl"],g="",h=[];if(c.length){for(d=0;d<c.length;d++)g+=this.fillSegHtml(b,c[d]);a(g).each(function(b,d){var g=c[b],i=a(d);f&&(i=f.call(e,g,i)),i&&(i=a(i),i.is(e.fillSegTag)&&(g.el=i,h.push(g)))})}return h},fillSegTag:"div",fillSegHtml:function(a,b){var c=this[a+"SegClasses"],d=this[a+"SegCss"],e=c?c.call(this,b):[],f=$(d?d.call(this,b):{});return"<"+this.fillSegTag+(e.length?' class="'+e.join(" ")+'"':"")+(f?' style="'+f+'"':"")+" />"},getDayClasses:function(a){var b=this.view,c=b.calendar.getNow(),d=["fc-"+Ta[a.day()]];return 1==b.intervalDuration.as("months")&&a.month()!=b.intervalStart.month()&&d.push("fc-other-month"),a.isSame(c,"day")?d.push("fc-today",b.highlightStateClass):c>a?d.push("fc-past"):d.push("fc-future"),d}});kb.mixin({mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,isDraggingExternal:!1,segs:null,renderEvents:function(a){var b,c=[],d=[];for(b=0;b<a.length;b++)(wa(a[b])?c:d).push(a[b]);this.segs=[].concat(this.renderBgEvents(c),this.renderFgEvents(d))},renderBgEvents:function(a){var b=this.eventsToSegs(a);return this.renderBgSegs(b)||b},renderFgEvents:function(a){var b=this.eventsToSegs(a);return this.renderFgSegs(b)||b},unrenderEvents:function(){this.triggerSegMouseout(),this.unrenderFgSegs(),this.unrenderBgSegs(),this.segs=null},getEventSegs:function(){return this.segs||[]},renderFgSegs:function(a){},unrenderFgSegs:function(){},renderFgSegEls:function(b,c){var d,e=this.view,f="",g=[];if(b.length){for(d=0;d<b.length;d++)f+=this.fgSegHtml(b[d],c);a(f).each(function(c,d){var f=b[c],h=e.resolveEventEl(f.event,a(d));h&&(h.data("fc-seg",f),f.el=h,g.push(f))})}return g},fgSegHtml:function(a,b){},renderBgSegs:function(a){return this.renderFill("bgEvent",a)},unrenderBgSegs:function(){this.unrenderFill("bgEvent")},bgEventSegEl:function(a,b){return this.view.resolveEventEl(a.event,b)},bgEventSegClasses:function(a){var b=a.event,c=b.source||{};return["fc-bgevent"].concat(b.className,c.className||[])},bgEventSegCss:function(a){return{"background-color":this.getSegSkinCss(a)["background-color"]}},businessHoursSegClasses:function(a){return["fc-nonbusiness","fc-bgevent"]},bindSegHandlers:function(){var b=this,c=this.view;a.each({mouseenter:function(a,c){b.triggerSegMouseover(a,c)},mouseleave:function(a,c){b.triggerSegMouseout(a,c)},click:function(a,b){return c.trigger("eventClick",this,a.event,b)},mousedown:function(d,e){a(e.target).is(".fc-resizer")&&c.isEventResizable(d.event)?b.segResizeMousedown(d,e,a(e.target).is(".fc-start-resizer")):c.isEventDraggable(d.event)&&b.segDragMousedown(d,e)}},function(c,d){b.el.on(c,".fc-event-container > *",function(c){var e=a(this).data("fc-seg");return!e||b.isDraggingSeg||b.isResizingSeg?void 0:d.call(this,e,c)})})},triggerSegMouseover:function(a,b){this.mousedOverSeg||(this.mousedOverSeg=a,this.view.trigger("eventMouseover",a.el[0],a.event,b))},triggerSegMouseout:function(a,b){b=b||{},this.mousedOverSeg&&(a=a||this.mousedOverSeg,this.mousedOverSeg=null,this.view.trigger("eventMouseout",a.el[0],a.event,b))},segDragMousedown:function(a,b){var c,d=this,e=this.view,f=e.calendar,i=a.el,j=a.event,k=new jb(a.el,{parentEl:e.el,opacity:e.opt("dragOpacity"),revertDuration:e.opt("dragRevertDuration"),zIndex:2}),l=new ib(e,{distance:5,scroll:e.opt("dragScroll"),subjectEl:i,subjectCenter:!0,listenStart:function(a){k.hide(),k.start(a)},dragStart:function(b){d.triggerSegMouseout(a,b),d.segDragStart(a,b),e.hideEvent(j)},hitOver:function(b,h,i){a.hit&&(i=a.hit),c=d.computeEventDrop(i.component.getHitSpan(i),b.component.getHitSpan(b),j),c&&!f.isEventSpanAllowed(d.eventToSpan(c),j)&&(g(),c=null),c&&e.renderDrag(c,a)?k.hide():k.show(),h&&(c=null)},hitOut:function(){e.unrenderDrag(),k.show(),c=null},hitDone:function(){h()},dragStop:function(b){k.stop(!c,function(){e.unrenderDrag(),e.showEvent(j),d.segDragStop(a,b),c&&e.reportEventDrop(j,c,this.largeUnit,i,b)})},listenStop:function(){k.stop()}});l.mousedown(b)},segDragStart:function(a,b){this.isDraggingSeg=!0,this.view.trigger("eventDragStart",a.el[0],a.event,b,{})},segDragStop:function(a,b){this.isDraggingSeg=!1,this.view.trigger("eventDragStop",a.el[0],a.event,b,{})},computeEventDrop:function(a,b,c){var d,e,f=this.view.calendar,g=a.start,h=b.start;return g.hasTime()===h.hasTime()?(d=this.diffDates(h,g),c.allDay&&N(d)?(e={start:c.start.clone(),end:f.getEventEnd(c),allDay:!1},f.normalizeEventTimes(e)):e={start:c.start.clone(),end:c.end?c.end.clone():null,allDay:c.allDay},e.start.add(d),e.end&&e.end.add(d)):e={start:h.clone(),end:null,allDay:!h.hasTime()},e},applyDragOpacity:function(a){var b=this.view.opt("dragOpacity");null!=b&&a.each(function(a,c){c.style.opacity=b})},externalDragStart:function(b,c){var d,e,f=this.view;f.opt("droppable")&&(d=a((c?c.item:null)||b.target),e=f.opt("dropAccept"),(a.isFunction(e)?e.call(d[0],d):d.is(e))&&(this.isDraggingExternal||this.listenToExternalDrag(d,b,c)))},listenToExternalDrag:function(a,b,c){var d,e=this,f=this.view.calendar,i=Ba(a),j=new ib(this,{listenStart:function(){e.isDraggingExternal=!0},hitOver:function(a){d=e.computeExternalDrop(a.component.getHitSpan(a),i),d&&!f.isExternalSpanAllowed(e.eventToSpan(d),d,i.eventProps)&&(g(),d=null),d&&e.renderDrag(d)},hitOut:function(){d=null},hitDone:function(){h(),e.unrenderDrag()},dragStop:function(){d&&e.view.reportExternalDrop(i,d,a,b,c)},listenStop:function(){e.isDraggingExternal=!1}});j.startDrag(b)},computeExternalDrop:function(a,b){var c=this.view.calendar,d={start:c.applyTimezone(a.start),end:null};return b.startTime&&!d.start.hasTime()&&d.start.time(b.startTime),b.duration&&(d.end=d.start.clone().add(b.duration)),d},renderDrag:function(a,b){},unrenderDrag:function(){},segResizeMousedown:function(a,b,c){var d,e=this,f=this.view,i=f.calendar,j=a.el,k=a.event,l=i.getEventEnd(k),m=new ib(this,{distance:5,scroll:f.opt("dragScroll"),subjectEl:j,dragStart:function(b){e.triggerSegMouseout(a,b),e.segResizeStart(a,b)},hitOver:function(b,h,j){var m=e.getHitSpan(j),n=e.getHitSpan(b);d=c?e.computeEventStartResize(m,n,k):e.computeEventEndResize(m,n,k),d&&(i.isEventSpanAllowed(e.eventToSpan(d),k)?d.start.isSame(k.start)&&d.end.isSame(l)&&(d=null):(g(),d=null)),d&&(f.hideEvent(k),e.renderEventResize(d,a))},hitOut:function(){d=null},hitDone:function(){e.unrenderEventResize(),f.showEvent(k),h()},dragStop:function(b){e.segResizeStop(a,b),d&&f.reportEventResize(k,d,this.largeUnit,j,b)}});m.mousedown(b)},segResizeStart:function(a,b){this.isResizingSeg=!0,this.view.trigger("eventResizeStart",a.el[0],a.event,b,{})},segResizeStop:function(a,b){this.isResizingSeg=!1,this.view.trigger("eventResizeStop",a.el[0],a.event,b,{})},computeEventStartResize:function(a,b,c){return this.computeEventResize("start",a,b,c)},computeEventEndResize:function(a,b,c){return this.computeEventResize("end",a,b,c)},computeEventResize:function(a,b,c,d){var e,f,g=this.view.calendar,h=this.diffDates(c[a],b[a]);return e={start:d.start.clone(),end:g.getEventEnd(d),allDay:d.allDay},e.allDay&&N(h)&&(e.allDay=!1,g.normalizeEventTimes(e)),e[a].add(h),e.start.isBefore(e.end)||(f=this.minResizeDuration||(d.allDay?g.defaultAllDayEventDuration:g.defaultTimedEventDuration),"start"==a?e.start=e.end.clone().subtract(f):e.end=e.start.clone().add(f)),e},renderEventResize:function(a,b){},unrenderEventResize:function(){},getEventTimeText:function(a,b,c){return null==b&&(b=this.eventTimeFormat),null==c&&(c=this.displayEventEnd),this.displayEventTime&&a.start.hasTime()?c&&a.end?this.view.formatRange(a,b):a.start.format(b):""},getSegClasses:function(a,b,c){var d=a.event,e=["fc-event",a.isStart?"fc-start":"fc-not-start",a.isEnd?"fc-end":"fc-not-end"].concat(d.className,d.source?d.source.className:[]);return b&&e.push("fc-draggable"),c&&e.push("fc-resizable"),e},getSegSkinCss:function(a){var b=a.event,c=this.view,d=b.source||{},e=b.color,f=d.color,g=c.opt("eventColor");return{"background-color":b.backgroundColor||e||d.backgroundColor||f||c.opt("eventBackgroundColor")||g,"border-color":b.borderColor||e||d.borderColor||f||c.opt("eventBorderColor")||g,color:b.textColor||d.textColor||c.opt("eventTextColor")}},eventToSegs:function(a){return this.eventsToSegs([a])},eventToSpan:function(a){return this.eventToSpans(a)[0]},eventToSpans:function(a){var b=this.eventToRange(a);return this.eventRangeToSpans(b,a)},eventsToSegs:function(b,c){var d=this,e=za(b),f=[];return a.each(e,function(a,b){var e,g=[];for(e=0;e<b.length;e++)g.push(d.eventToRange(b[e]));if(xa(b[0]))for(g=d.invertRanges(g),e=0;e<g.length;e++)f.push.apply(f,d.eventRangeToSegs(g[e],b[0],c));else for(e=0;e<g.length;e++)f.push.apply(f,d.eventRangeToSegs(g[e],b[e],c))}),f},eventToRange:function(a){return{start:a.start.clone().stripZone(),end:(a.end?a.end.clone():this.view.calendar.getDefaultEventEnd(null!=a.allDay?a.allDay:!a.start.hasTime(),a.start)).stripZone()}},eventRangeToSegs:function(a,b,c){var d,e=this.eventRangeToSpans(a,b),f=[];for(d=0;d<e.length;d++)f.push.apply(f,this.eventSpanToSegs(e[d],b,c));return f},eventRangeToSpans:function(b,c){return[a.extend({},b)]},eventSpanToSegs:function(a,b,c){var d,e,f=c?c(a):this.spanToSegs(a);for(d=0;d<f.length;d++)e=f[d],e.event=b,e.eventStartMS=+a.start,e.eventDurationMS=a.end-a.start;return f},invertRanges:function(a){var b,c,d=this.view,e=d.start.clone(),f=d.end.clone(),g=[],h=e;for(a.sort(Aa),b=0;b<a.length;b++)c=a[b],c.start>h&&g.push({start:h,end:c.start}),h=c.end;return f>h&&g.push({start:h,end:f}),g},sortEventSegs:function(a){a.sort(ca(this,"compareEventSegs"))},compareEventSegs:function(a,b){return a.eventStartMS-b.eventStartMS||b.eventDurationMS-a.eventDurationMS||b.event.allDay-a.event.allDay||B(a.event,b.event,this.view.eventOrderSpecs)}}),Pa.isBgEvent=wa,Pa.dataAttrPrefix="";var lb=Pa.DayTableMixin={breakOnWeeks:!1,dayDates:null,dayIndices:null,daysPerRow:null,rowCnt:null,colCnt:null,colHeadFormat:null,updateDayTable:function(){for(var a,b,c,d=this.view,e=this.start.clone(),f=-1,g=[],h=[];e.isBefore(this.end);)d.isHiddenDay(e)?g.push(f+.5):(f++,g.push(f),h.push(e.clone())),e.add(1,"days");if(this.breakOnWeeks){for(b=h[0].day(),a=1;a<h.length&&h[a].day()!=b;a++);c=Math.ceil(h.length/a)}else c=1,a=h.length;this.dayDates=h,this.dayIndices=g,this.daysPerRow=a,this.rowCnt=c,this.updateDayTableCols()},updateDayTableCols:function(){this.colCnt=this.computeColCnt(),this.colHeadFormat=this.view.opt("columnFormat")||this.computeColHeadFormat()},computeColCnt:function(){return this.daysPerRow},getCellDate:function(a,b){return this.dayDates[this.getCellDayIndex(a,b)].clone()},getCellRange:function(a,b){var c=this.getCellDate(a,b),d=c.clone().add(1,"days");return{start:c,end:d}},getCellDayIndex:function(a,b){return a*this.daysPerRow+this.getColDayIndex(b)},getColDayIndex:function(a){return this.isRTL?this.colCnt-1-a:a},getDateDayIndex:function(a){var b=this.dayIndices,c=a.diff(this.start,"days");return 0>c?b[0]-1:c>=b.length?b[b.length-1]+1:b[c]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.view.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(a){var b,c,d,e,f,g=this.daysPerRow,h=this.view.computeDayRange(a),i=this.getDateDayIndex(h.start),j=this.getDateDayIndex(h.end.clone().subtract(1,"days")),k=[];for(b=0;b<this.rowCnt;b++)c=b*g,d=c+g-1,e=Math.max(i,c),f=Math.min(j,d),e=Math.ceil(e),f=Math.floor(f),f>=e&&k.push({row:b,firstRowDayIndex:e-c,lastRowDayIndex:f-c,isStart:e===i,isEnd:f===j});return k},sliceRangeByDay:function(a){var b,c,d,e,f,g,h=this.daysPerRow,i=this.view.computeDayRange(a),j=this.getDateDayIndex(i.start),k=this.getDateDayIndex(i.end.clone().subtract(1,"days")),l=[];for(b=0;b<this.rowCnt;b++)for(c=b*h,d=c+h-1,e=c;d>=e;e++)f=Math.max(j,e),g=Math.min(k,e),f=Math.ceil(f),g=Math.floor(g),g>=f&&l.push({row:b,firstRowDayIndex:f-c,lastRowDayIndex:g-c,isStart:f===j,isEnd:g===k});return l},renderHeadHtml:function(){var a=this.view;return'<div class="fc-row '+a.widgetHeaderClass+'"><table><thead>'+this.renderHeadTrHtml()+"</thead></table></div>"},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return"<tr>"+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+"</tr>"},renderHeadDateCellsHtml:function(){var a,b,c=[];for(a=0;a<this.colCnt;a++)b=this.getCellDate(0,a),c.push(this.renderHeadDateCellHtml(b));return c.join("")},renderHeadDateCellHtml:function(a,b,c){var d=this.view;return'<th class="fc-day-header '+d.widgetHeaderClass+" fc-"+Ta[a.day()]+'"'+(1==this.rowCnt?' data-date="'+a.format("YYYY-MM-DD")+'"':"")+(b>1?' colspan="'+b+'"':"")+(c?" "+c:"")+">"+Y(a.format(this.colHeadFormat))+"</th>"},renderBgTrHtml:function(a){return"<tr>"+(this.isRTL?"":this.renderBgIntroHtml(a))+this.renderBgCellsHtml(a)+(this.isRTL?this.renderBgIntroHtml(a):"")+"</tr>"},renderBgIntroHtml:function(a){return this.renderIntroHtml()},renderBgCellsHtml:function(a){var b,c,d=[];for(b=0;b<this.colCnt;b++)c=this.getCellDate(a,b),d.push(this.renderBgCellHtml(c));return d.join("")},renderBgCellHtml:function(a,b){var c=this.view,d=this.getDayClasses(a);return d.unshift("fc-day",c.widgetContentClass),'<td class="'+d.join(" ")+'" data-date="'+a.format("YYYY-MM-DD")+'"'+(b?" "+b:"")+"></td>"},renderIntroHtml:function(){},bookendCells:function(a){var b=this.renderIntroHtml();b&&(this.isRTL?a.append(b):a.prepend(b))}},mb=Pa.DayGrid=kb.extend(lb,{numbersVisible:!1,bottomCoordPadding:0,rowEls:null,cellEls:null,helperEls:null,rowCoordCache:null,colCoordCache:null,renderDates:function(a){var b,c,d=this.view,e=this.rowCnt,f=this.colCnt,g="";for(b=0;e>b;b++)g+=this.renderDayRowHtml(b,a);for(this.el.html(g),this.rowEls=this.el.find(".fc-row"),this.cellEls=this.el.find(".fc-day"),this.rowCoordCache=new gb({els:this.rowEls,isVertical:!0}),this.colCoordCache=new gb({els:this.cellEls.slice(0,this.colCnt),isHorizontal:!0}),b=0;e>b;b++)for(c=0;f>c;c++)d.trigger("dayRender",null,this.getCellDate(b,c),this.getCellEl(b,c))},unrenderDates:function(){this.removeSegPopover()},renderBusinessHours:function(){var a=this.view.calendar.getBusinessHoursEvents(!0),b=this.eventsToSegs(a);this.renderFill("businessHours",b,"bgevent")},renderDayRowHtml:function(a,b){var c=this.view,d=["fc-row","fc-week",c.widgetContentClass];return b&&d.push("fc-rigid"),'<div class="'+d.join(" ")+'"><div class="fc-bg"><table>'+this.renderBgTrHtml(a)+'</table></div><div class="fc-content-skeleton"><table>'+(this.numbersVisible?"<thead>"+this.renderNumberTrHtml(a)+"</thead>":"")+"</table></div></div>"},renderNumberTrHtml:function(a){return"<tr>"+(this.isRTL?"":this.renderNumberIntroHtml(a))+this.renderNumberCellsHtml(a)+(this.isRTL?this.renderNumberIntroHtml(a):"")+"</tr>"},renderNumberIntroHtml:function(a){return this.renderIntroHtml()},renderNumberCellsHtml:function(a){var b,c,d=[];for(b=0;b<this.colCnt;b++)c=this.getCellDate(a,b),d.push(this.renderNumberCellHtml(c));return d.join("")},renderNumberCellHtml:function(a){var b;return this.view.dayNumbersVisible?(b=this.getDayClasses(a),b.unshift("fc-day-number"),'<td class="'+b.join(" ")+'" data-date="'+a.format()+'">'+a.date()+"</td>"):"<td/>"},computeEventTimeFormat:function(){return this.view.opt("extraSmallTimeFormat")},computeDisplayEventEnd:function(){return 1==this.colCnt},rangeUpdated:function(){this.updateDayTable()},spanToSegs:function(a){var b,c,d=this.sliceRangeByRow(a);for(b=0;b<d.length;b++)c=d[b],this.isRTL?(c.leftCol=this.daysPerRow-1-c.lastRowDayIndex,c.rightCol=this.daysPerRow-1-c.firstRowDayIndex):(c.leftCol=c.firstRowDayIndex,c.rightCol=c.lastRowDayIndex);return d},prepareHits:function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},releaseHits:function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},queryHit:function(a,b){var c=this.colCoordCache.getHorizontalIndex(a),d=this.rowCoordCache.getVerticalIndex(b);return null!=d&&null!=c?this.getCellHit(d,c):void 0},getHitSpan:function(a){return this.getCellRange(a.row,a.col)},getHitEl:function(a){return this.getCellEl(a.row,a.col)},getCellHit:function(a,b){return{row:a,col:b,component:this,left:this.colCoordCache.getLeftOffset(b),right:this.colCoordCache.getRightOffset(b),top:this.rowCoordCache.getTopOffset(a),bottom:this.rowCoordCache.getBottomOffset(a)}},getCellEl:function(a,b){return this.cellEls.eq(a*this.colCnt+b)},renderDrag:function(a,b){return this.renderHighlight(this.eventToSpan(a)),b&&!b.el.closest(this.el).length?(this.renderEventLocationHelper(a,b),this.applyDragOpacity(this.helperEls),!0):void 0},unrenderDrag:function(){this.unrenderHighlight(),this.unrenderHelper()},renderEventResize:function(a,b){this.renderHighlight(this.eventToSpan(a)),this.renderEventLocationHelper(a,b)},unrenderEventResize:function(){this.unrenderHighlight(),this.unrenderHelper()},renderHelper:function(b,c){var d,e=[],f=this.eventToSegs(b);f=this.renderFgSegEls(f),d=this.renderSegRows(f),this.rowEls.each(function(b,f){var g,h=a(f),i=a('<div class="fc-helper-skeleton"><table/></div>');g=c&&c.row===b?c.el.position().top:h.find(".fc-content-skeleton tbody").position().top,i.css("top",g).find("table").append(d[b].tbodyEl),h.append(i),e.push(i[0])}),this.helperEls=a(e)},unrenderHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(b,c,d){var e,f,g,h=[];for(c=this.renderFillSegEls(b,c),e=0;e<c.length;e++)f=c[e],g=this.renderFillRow(b,f,d),this.rowEls.eq(f.row).append(g),h.push(g[0]);return this.elsByFill[b]=a(h),c},renderFillRow:function(b,c,d){var e,f,g=this.colCnt,h=c.leftCol,i=c.rightCol+1;return d=d||b.toLowerCase(),e=a('<div class="fc-'+d+'-skeleton"><table><tr/></table></div>'),f=e.find("tr"),h>0&&f.append('<td colspan="'+h+'"/>'),f.append(c.el.attr("colspan",i-h)),g>i&&f.append('<td colspan="'+(g-i)+'"/>'),this.bookendCells(f),e}});mb.mixin({rowStructs:null,unrenderEvents:function(){this.removeSegPopover(),kb.prototype.unrenderEvents.apply(this,arguments)},getEventSegs:function(){return kb.prototype.getEventSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(b){var c=a.grep(b,function(a){return a.event.allDay});return kb.prototype.renderBgSegs.call(this,c)},renderFgSegs:function(b){var c;return b=this.renderFgSegEls(b),c=this.rowStructs=this.renderSegRows(b),this.rowEls.each(function(b,d){a(d).find(".fc-content-skeleton > table").append(c[b].tbodyEl)}),b},unrenderFgSegs:function(){for(var a,b=this.rowStructs||[];a=b.pop();)a.tbodyEl.remove();
-this.rowStructs=null},renderSegRows:function(a){var b,c,d=[];for(b=this.groupSegRows(a),c=0;c<b.length;c++)d.push(this.renderSegRow(c,b[c]));return d},fgSegHtml:function(a,b){var c,d,e=this.view,f=a.event,g=e.isEventDraggable(f),h=!b&&f.allDay&&a.isStart&&e.isEventResizableFromStart(f),i=!b&&f.allDay&&a.isEnd&&e.isEventResizableFromEnd(f),j=this.getSegClasses(a,g,h||i),k=$(this.getSegSkinCss(a)),l="";return j.unshift("fc-day-grid-event","fc-h-event"),a.isStart&&(c=this.getEventTimeText(f),c&&(l='<span class="fc-time">'+Y(c)+"</span>")),d='<span class="fc-title">'+(Y(f.title||"")||"&nbsp;")+"</span>",'<a class="'+j.join(" ")+'"'+(f.url?' href="'+Y(f.url)+'"':"")+(k?' style="'+k+'"':"")+'><div class="fc-content">'+(this.isRTL?d+" "+l:l+" "+d)+"</div>"+(h?'<div class="fc-resizer fc-start-resizer" />':"")+(i?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},renderSegRow:function(b,c){function d(b){for(;b>g;)k=(r[e-1]||[])[g],k?k.attr("rowspan",parseInt(k.attr("rowspan")||1,10)+1):(k=a("<td/>"),h.append(k)),q[e][g]=k,r[e][g]=k,g++}var e,f,g,h,i,j,k,l=this.colCnt,m=this.buildSegLevels(c),n=Math.max(1,m.length),o=a("<tbody/>"),p=[],q=[],r=[];for(e=0;n>e;e++){if(f=m[e],g=0,h=a("<tr/>"),p.push([]),q.push([]),r.push([]),f)for(i=0;i<f.length;i++){for(j=f[i],d(j.leftCol),k=a('<td class="fc-event-container"/>').append(j.el),j.leftCol!=j.rightCol?k.attr("colspan",j.rightCol-j.leftCol+1):r[e][g]=k;g<=j.rightCol;)q[e][g]=k,p[e][g]=j,g++;h.append(k)}d(l),this.bookendCells(h),o.append(h)}return{row:b,tbodyEl:o,cellMatrix:q,segMatrix:p,segLevels:m,segs:c}},buildSegLevels:function(a){var b,c,d,e=[];for(this.sortEventSegs(a),b=0;b<a.length;b++){for(c=a[b],d=0;d<e.length&&Ca(c,e[d]);d++);c.level=d,(e[d]||(e[d]=[])).push(c)}for(d=0;d<e.length;d++)e[d].sort(Da);return e},groupSegRows:function(a){var b,c=[];for(b=0;b<this.rowCnt;b++)c.push([]);for(b=0;b<a.length;b++)c[a[b].row].push(a[b]);return c}}),mb.mixin({segPopover:null,popoverSegs:null,removeSegPopover:function(){this.segPopover&&this.segPopover.hide()},limitRows:function(a){var b,c,d=this.rowStructs||[];for(b=0;b<d.length;b++)this.unlimitRow(b),c=a?"number"==typeof a?a:this.computeRowLevelLimit(b):!1,c!==!1&&this.limitRow(b,c)},computeRowLevelLimit:function(b){function c(b,c){f=Math.max(f,a(c).outerHeight())}var d,e,f,g=this.rowEls.eq(b),h=g.height(),i=this.rowStructs[b].tbodyEl.children();for(d=0;d<i.length;d++)if(e=i.eq(d).removeClass("fc-limited"),f=0,e.find("> td > :first-child").each(c),e.position().top+f>h)return d;return!1},limitRow:function(b,c){function d(d){for(;d>w;)j=t.getCellSegs(b,w,c),j.length&&(m=f[c-1][w],s=t.renderMoreLink(b,w,j),r=a("<div/>").append(s),m.append(r),v.push(r[0])),w++}var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t=this,u=this.rowStructs[b],v=[],w=0;if(c&&c<u.segLevels.length){for(e=u.segLevels[c-1],f=u.cellMatrix,g=u.tbodyEl.children().slice(c).addClass("fc-limited").get(),h=0;h<e.length;h++){for(i=e[h],d(i.leftCol),l=[],k=0;w<=i.rightCol;)j=this.getCellSegs(b,w,c),l.push(j),k+=j.length,w++;if(k){for(m=f[c-1][i.leftCol],n=m.attr("rowspan")||1,o=[],p=0;p<l.length;p++)q=a('<td class="fc-more-cell"/>').attr("rowspan",n),j=l[p],s=this.renderMoreLink(b,i.leftCol+p,[i].concat(j)),r=a("<div/>").append(s),q.append(r),o.push(q[0]),v.push(q[0]);m.addClass("fc-limited").after(a(o)),g.push(m[0])}}d(this.colCnt),u.moreEls=a(v),u.limitedEls=a(g)}},unlimitRow:function(a){var b=this.rowStructs[a];b.moreEls&&(b.moreEls.remove(),b.moreEls=null),b.limitedEls&&(b.limitedEls.removeClass("fc-limited"),b.limitedEls=null)},renderMoreLink:function(b,c,d){var e=this,f=this.view;return a('<a class="fc-more"/>').text(this.getMoreLinkText(d.length)).on("click",function(g){var h=f.opt("eventLimitClick"),i=e.getCellDate(b,c),j=a(this),k=e.getCellEl(b,c),l=e.getCellSegs(b,c),m=e.resliceDaySegs(l,i),n=e.resliceDaySegs(d,i);"function"==typeof h&&(h=f.trigger("eventLimitClick",null,{date:i,dayEl:k,moreEl:j,segs:m,hiddenSegs:n},g)),"popover"===h?e.showSegPopover(b,c,j,m):"string"==typeof h&&f.calendar.zoomTo(i,h)})},showSegPopover:function(a,b,c,d){var e,f,g=this,h=this.view,i=c.parent();e=1==this.rowCnt?h.el:this.rowEls.eq(a),f={className:"fc-more-popover",content:this.renderSegPopoverContent(a,b,d),parentEl:this.el,top:e.offset().top,autoHide:!0,viewportConstrain:h.opt("popoverViewportConstrain"),hide:function(){g.segPopover.removeElement(),g.segPopover=null,g.popoverSegs=null}},this.isRTL?f.right=i.offset().left+i.outerWidth()+1:f.left=i.offset().left-1,this.segPopover=new fb(f),this.segPopover.show()},renderSegPopoverContent:function(b,c,d){var e,f=this.view,g=f.opt("theme"),h=this.getCellDate(b,c).format(f.opt("dayPopoverFormat")),i=a('<div class="fc-header '+f.widgetHeaderClass+'"><span class="fc-close '+(g?"ui-icon ui-icon-closethick":"fc-icon fc-icon-x")+'"></span><span class="fc-title">'+Y(h)+'</span><div class="fc-clear"/></div><div class="fc-body '+f.widgetContentClass+'"><div class="fc-event-container"></div></div>'),j=i.find(".fc-event-container");for(d=this.renderFgSegEls(d,!0),this.popoverSegs=d,e=0;e<d.length;e++)this.prepareHits(),d[e].hit=this.getCellHit(b,c),this.releaseHits(),j.append(d[e].el);return i},resliceDaySegs:function(b,c){var d=a.map(b,function(a){return a.event}),e=c.clone(),f=e.clone().add(1,"days"),g={start:e,end:f};return b=this.eventsToSegs(d,function(a){var b=E(a,g);return b?[b]:[]}),this.sortEventSegs(b),b},getMoreLinkText:function(a){var b=this.view.opt("eventLimitText");return"function"==typeof b?b(a):"+"+a+" "+b},getCellSegs:function(a,b,c){for(var d,e=this.rowStructs[a].segMatrix,f=c||0,g=[];f<e.length;)d=e[f][b],d&&g.push(d),f++;return g}});var nb=Pa.TimeGrid=kb.extend(lb,{slotDuration:null,snapDuration:null,snapsPerSlot:null,minTime:null,maxTime:null,labelFormat:null,labelInterval:null,colEls:null,slatEls:null,nowIndicatorEls:null,colCoordCache:null,slatCoordCache:null,constructor:function(){kb.apply(this,arguments),this.processOptions()},renderDates:function(){this.el.html(this.renderHtml()),this.colEls=this.el.find(".fc-day"),this.slatEls=this.el.find(".fc-slats tr"),this.colCoordCache=new gb({els:this.colEls,isHorizontal:!0}),this.slatCoordCache=new gb({els:this.slatEls,isVertical:!0}),this.renderContentSkeleton()},renderHtml:function(){return'<div class="fc-bg"><table>'+this.renderBgTrHtml(0)+'</table></div><div class="fc-slats"><table>'+this.renderSlatRowHtml()+"</table></div>"},renderSlatRowHtml:function(){for(var a,c,d,e=this.view,f=this.isRTL,g="",h=b.duration(+this.minTime);h<this.maxTime;)a=this.start.clone().time(h),c=ba(L(h,this.labelInterval)),d='<td class="fc-axis fc-time '+e.widgetContentClass+'" '+e.axisStyleAttr()+">"+(c?"<span>"+Y(a.format(this.labelFormat))+"</span>":"")+"</td>",g+='<tr data-time="'+a.format("HH:mm:ss")+'"'+(c?"":' class="fc-minor"')+">"+(f?"":d)+'<td class="'+e.widgetContentClass+'"/>'+(f?d:"")+"</tr>",h.add(this.slotDuration);return g},processOptions:function(){var c,d=this.view,e=d.opt("slotDuration"),f=d.opt("snapDuration");e=b.duration(e),f=f?b.duration(f):e,this.slotDuration=e,this.snapDuration=f,this.snapsPerSlot=e/f,this.minResizeDuration=f,this.minTime=b.duration(d.opt("minTime")),this.maxTime=b.duration(d.opt("maxTime")),c=d.opt("slotLabelFormat"),a.isArray(c)&&(c=c[c.length-1]),this.labelFormat=c||d.opt("axisFormat")||d.opt("smallTimeFormat"),c=d.opt("slotLabelInterval"),this.labelInterval=c?b.duration(c):this.computeLabelInterval(e)},computeLabelInterval:function(a){var c,d,e;for(c=Db.length-1;c>=0;c--)if(d=b.duration(Db[c]),e=L(d,a),ba(e)&&e>1)return d;return b.duration(a)},computeEventTimeFormat:function(){return this.view.opt("noMeridiemTimeFormat")},computeDisplayEventEnd:function(){return!0},prepareHits:function(){this.colCoordCache.build(),this.slatCoordCache.build()},releaseHits:function(){this.colCoordCache.clear()},queryHit:function(a,b){var c=this.snapsPerSlot,d=this.colCoordCache,e=this.slatCoordCache,f=d.getHorizontalIndex(a),g=e.getVerticalIndex(b);if(null!=f&&null!=g){var h=e.getTopOffset(g),i=e.getHeight(g),j=(b-h)/i,k=Math.floor(j*c),l=g*c+k,m=h+k/c*i,n=h+(k+1)/c*i;return{col:f,snap:l,component:this,left:d.getLeftOffset(f),right:d.getRightOffset(f),top:m,bottom:n}}},getHitSpan:function(a){var b,c=this.getCellDate(0,a.col),d=this.computeSnapTime(a.snap);return c.time(d),b=c.clone().add(this.snapDuration),{start:c,end:b}},getHitEl:function(a){return this.colEls.eq(a.col)},rangeUpdated:function(){this.updateDayTable()},computeSnapTime:function(a){return b.duration(this.minTime+this.snapDuration*a)},spanToSegs:function(a){var b,c=this.sliceRangeByTimes(a);for(b=0;b<c.length;b++)this.isRTL?c[b].col=this.daysPerRow-1-c[b].dayIndex:c[b].col=c[b].dayIndex;return c},sliceRangeByTimes:function(a){var b,c,d,e,f=[];for(c=0;c<this.daysPerRow;c++)d=this.dayDates[c].clone(),e={start:d.clone().time(this.minTime),end:d.clone().time(this.maxTime)},b=E(a,e),b&&(b.dayIndex=c,f.push(b));return f},updateSize:function(a){this.slatCoordCache.build(),a&&this.updateSegVerticals([].concat(this.fgSegs||[],this.bgSegs||[],this.businessSegs||[]))},computeDateTop:function(a,c){return this.computeTimeTop(b.duration(a-c.clone().stripTime()))},computeTimeTop:function(a){var b,c,d=this.slatEls.length,e=(a-this.minTime)/this.slotDuration;return e=Math.max(0,e),e=Math.min(d,e),b=Math.floor(e),b=Math.min(b,d-1),c=e-b,this.slatCoordCache.getTopPosition(b)+this.slatCoordCache.getHeight(b)*c},renderDrag:function(a,b){if(b){this.renderEventLocationHelper(a,b);for(var c=0;c<this.helperSegs.length;c++)this.applyDragOpacity(this.helperSegs[c].el);return!0}this.renderHighlight(this.eventToSpan(a))},unrenderDrag:function(){this.unrenderHelper(),this.unrenderHighlight()},renderEventResize:function(a,b){this.renderEventLocationHelper(a,b)},unrenderEventResize:function(){this.unrenderHelper()},renderHelper:function(a,b){this.renderHelperSegs(this.eventToSegs(a),b)},unrenderHelper:function(){this.unrenderHelperSegs()},renderBusinessHours:function(){var a=this.view.calendar.getBusinessHoursEvents(),b=this.eventsToSegs(a);this.renderBusinessSegs(b)},unrenderBusinessHours:function(){this.unrenderBusinessSegs()},getNowIndicatorUnit:function(){return"minute"},renderNowIndicator:function(b){var c,d=this.spanToSegs({start:b,end:b}),e=this.computeDateTop(b,b),f=[];for(c=0;c<d.length;c++)f.push(a('<div class="fc-now-indicator fc-now-indicator-line"></div>').css("top",e).appendTo(this.colContainerEls.eq(d[c].col))[0]);d.length>0&&f.push(a('<div class="fc-now-indicator fc-now-indicator-arrow"></div>').css("top",e).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=a(f)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},renderSelection:function(a){this.view.opt("selectHelper")?this.renderEventLocationHelper(a):this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHelper(),this.unrenderHighlight()},renderHighlight:function(a){this.renderHighlightSegs(this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderHighlightSegs()}});nb.mixin({colContainerEls:null,fgContainerEls:null,bgContainerEls:null,helperContainerEls:null,highlightContainerEls:null,businessContainerEls:null,fgSegs:null,bgSegs:null,helperSegs:null,highlightSegs:null,businessSegs:null,renderContentSkeleton:function(){var b,c,d="";for(b=0;b<this.colCnt;b++)d+='<td><div class="fc-content-col"><div class="fc-event-container fc-helper-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>';c=a('<div class="fc-content-skeleton"><table><tr>'+d+"</tr></table></div>"),this.colContainerEls=c.find(".fc-content-col"),this.helperContainerEls=c.find(".fc-helper-container"),this.fgContainerEls=c.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=c.find(".fc-bgevent-container"),this.highlightContainerEls=c.find(".fc-highlight-container"),this.businessContainerEls=c.find(".fc-business-container"),this.bookendCells(c.find("tr")),this.el.append(c)},renderFgSegs:function(a){return a=this.renderFgSegsIntoContainers(a,this.fgContainerEls),this.fgSegs=a,a},unrenderFgSegs:function(){this.unrenderNamedSegs("fgSegs")},renderHelperSegs:function(a,b){var c,d,e;for(a=this.renderFgSegsIntoContainers(a,this.helperContainerEls),c=0;c<a.length;c++)d=a[c],b&&b.col===d.col&&(e=b.el,d.el.css({left:e.css("left"),right:e.css("right"),"margin-left":e.css("margin-left"),"margin-right":e.css("margin-right")}));this.helperSegs=a},unrenderHelperSegs:function(){this.unrenderNamedSegs("helperSegs")},renderBgSegs:function(a){return a=this.renderFillSegEls("bgEvent",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.bgContainerEls),this.bgSegs=a,a},unrenderBgSegs:function(){this.unrenderNamedSegs("bgSegs")},renderHighlightSegs:function(a){a=this.renderFillSegEls("highlight",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.highlightContainerEls),this.highlightSegs=a},unrenderHighlightSegs:function(){this.unrenderNamedSegs("highlightSegs")},renderBusinessSegs:function(a){a=this.renderFillSegEls("businessHours",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.businessContainerEls),this.businessSegs=a},unrenderBusinessSegs:function(){this.unrenderNamedSegs("businessSegs")},groupSegsByCol:function(a){var b,c=[];for(b=0;b<this.colCnt;b++)c.push([]);for(b=0;b<a.length;b++)c[a[b].col].push(a[b]);return c},attachSegsByCol:function(a,b){var c,d,e;for(c=0;c<this.colCnt;c++)for(d=a[c],e=0;e<d.length;e++)b.eq(c).append(d[e].el)},unrenderNamedSegs:function(a){var b,c=this[a];if(c){for(b=0;b<c.length;b++)c[b].el.remove();this[a]=null}},renderFgSegsIntoContainers:function(a,b){var c,d;for(a=this.renderFgSegEls(a),c=this.groupSegsByCol(a),d=0;d<this.colCnt;d++)this.updateFgSegCoords(c[d]);return this.attachSegsByCol(c,b),a},fgSegHtml:function(a,b){var c,d,e,f=this.view,g=a.event,h=f.isEventDraggable(g),i=!b&&a.isStart&&f.isEventResizableFromStart(g),j=!b&&a.isEnd&&f.isEventResizableFromEnd(g),k=this.getSegClasses(a,h,i||j),l=$(this.getSegSkinCss(a));return k.unshift("fc-time-grid-event","fc-v-event"),f.isMultiDayEvent(g)?(a.isStart||a.isEnd)&&(c=this.getEventTimeText(a),d=this.getEventTimeText(a,"LT"),e=this.getEventTimeText(a,null,!1)):(c=this.getEventTimeText(g),d=this.getEventTimeText(g,"LT"),e=this.getEventTimeText(g,null,!1)),'<a class="'+k.join(" ")+'"'+(g.url?' href="'+Y(g.url)+'"':"")+(l?' style="'+l+'"':"")+'><div class="fc-content">'+(c?'<div class="fc-time" data-start="'+Y(e)+'" data-full="'+Y(d)+'"><span>'+Y(c)+"</span></div>":"")+(g.title?'<div class="fc-title">'+Y(g.title)+"</div>":"")+'</div><div class="fc-bg"/>'+(j?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},updateSegVerticals:function(a){this.computeSegVerticals(a),this.assignSegVerticals(a)},computeSegVerticals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.top=this.computeDateTop(c.start,c.start),c.bottom=this.computeDateTop(c.end,c.start)},assignSegVerticals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.el.css(this.generateSegVerticalCss(c))},generateSegVerticalCss:function(a){return{top:a.top,bottom:-a.bottom}},updateFgSegCoords:function(a){this.computeSegVerticals(a),this.computeFgSegHorizontals(a),this.assignSegVerticals(a),this.assignFgSegHorizontals(a)},computeFgSegHorizontals:function(a){var b,c,d;if(this.sortEventSegs(a),b=Ea(a),Fa(b),c=b[0]){for(d=0;d<c.length;d++)Ga(c[d]);for(d=0;d<c.length;d++)this.computeFgSegForwardBack(c[d],0,0)}},computeFgSegForwardBack:function(a,b,c){var d,e=a.forwardSegs;if(void 0===a.forwardCoord)for(e.length?(this.sortForwardSegs(e),this.computeFgSegForwardBack(e[0],b+1,c),a.forwardCoord=e[0].backwardCoord):a.forwardCoord=1,a.backwardCoord=a.forwardCoord-(a.forwardCoord-c)/(b+1),d=0;d<e.length;d++)this.computeFgSegForwardBack(e[d],0,a.forwardCoord)},sortForwardSegs:function(a){a.sort(ca(this,"compareForwardSegs"))},compareForwardSegs:function(a,b){return b.forwardPressure-a.forwardPressure||(a.backwardCoord||0)-(b.backwardCoord||0)||this.compareEventSegs(a,b)},assignFgSegHorizontals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.el.css(this.generateFgSegHorizontalCss(c)),c.bottom-c.top<30&&c.el.addClass("fc-short")},generateFgSegHorizontalCss:function(a){var b,c,d=this.view.opt("slotEventOverlap"),e=a.backwardCoord,f=a.forwardCoord,g=this.generateSegVerticalCss(a);return d&&(f=Math.min(1,e+2*(f-e))),this.isRTL?(b=1-f,c=e):(b=e,c=1-f),g.zIndex=a.level+1,g.left=100*b+"%",g.right=100*c+"%",d&&a.forwardPressure&&(g[this.isRTL?"marginLeft":"marginRight"]=20),g}});var ob=Pa.View=ra.extend({type:null,name:null,title:null,calendar:null,options:null,el:null,displaying:null,isSkeletonRendered:!1,isEventsRendered:!1,start:null,end:null,intervalStart:null,intervalEnd:null,intervalDuration:null,intervalUnit:null,isRTL:!1,isSelected:!1,eventOrderSpecs:null,scrollerEl:null,scrollTop:null,widgetHeaderClass:null,widgetContentClass:null,highlightStateClass:null,nextDayThreshold:null,isHiddenDayHash:null,documentMousedownProxy:null,isNowIndicatorRendered:null,initialNowDate:null,initialNowQueriedMs:null,nowIndicatorTimeoutID:null,nowIndicatorIntervalID:null,constructor:function(a,c,d,e){this.calendar=a,this.type=this.name=c,this.options=d,this.intervalDuration=e||b.duration(1,"day"),this.nextDayThreshold=b.duration(this.opt("nextDayThreshold")),this.initThemingProps(),this.initHiddenDays(),this.isRTL=this.opt("isRTL"),this.eventOrderSpecs=A(this.opt("eventOrder")),this.documentMousedownProxy=ca(this,"documentMousedown"),this.initialize()},initialize:function(){},opt:function(a){return this.options[a]},trigger:function(a,b){var c=this.calendar;return c.trigger.apply(c,[a,b||this].concat(Array.prototype.slice.call(arguments,2),[this]))},setDate:function(a){this.setRange(this.computeRange(a))},setRange:function(b){a.extend(this,b),this.updateTitle()},computeRange:function(a){var b,c,d=I(this.intervalDuration),e=a.clone().startOf(d),f=e.clone().add(this.intervalDuration);return/year|month|week|day/.test(d)?(e.stripTime(),f.stripTime()):(e.hasTime()||(e=this.calendar.time(0)),f.hasTime()||(f=this.calendar.time(0))),b=e.clone(),b=this.skipHiddenDays(b),c=f.clone(),c=this.skipHiddenDays(c,-1,!0),{intervalUnit:d,intervalStart:e,intervalEnd:f,start:b,end:c}},computePrevDate:function(a){return this.massageCurrentDate(a.clone().startOf(this.intervalUnit).subtract(this.intervalDuration),-1)},computeNextDate:function(a){return this.massageCurrentDate(a.clone().startOf(this.intervalUnit).add(this.intervalDuration))},massageCurrentDate:function(a,b){return this.intervalDuration.as("days")<=1&&this.isHiddenDay(a)&&(a=this.skipHiddenDays(a,b),a.startOf("day")),a},updateTitle:function(){this.title=this.computeTitle()},computeTitle:function(){return this.formatRange({start:this.calendar.applyTimezone(this.intervalStart),end:this.calendar.applyTimezone(this.intervalEnd)},this.opt("titleFormat")||this.computeTitleFormat(),this.opt("titleRangeSeparator"))},computeTitleFormat:function(){return"year"==this.intervalUnit?"YYYY":"month"==this.intervalUnit?this.opt("monthYearFormat"):this.intervalDuration.as("days")>1?"ll":"LL"},formatRange:function(a,b,c){var d=a.end;return d.hasTime()||(d=d.clone().subtract(1)),ma(a.start,d,b,c,this.opt("isRTL"))},setElement:function(a){this.el=a,this.bindGlobalHandlers()},removeElement:function(){this.clear(),this.isSkeletonRendered&&(this.unrenderSkeleton(),this.isSkeletonRendered=!1),this.unbindGlobalHandlers(),this.el.remove()},display:function(b){var c=this,d=null;return this.displaying&&(d=this.queryScroll()),this.calendar.freezeContentHeight(),this.clear().then(function(){return c.displaying=a.when(c.displayView(b)).then(function(){c.forceScroll(c.computeInitialScroll(d)),c.calendar.unfreezeContentHeight(),c.triggerRender()})})},clear:function(){var b=this,c=this.displaying;return c?c.then(function(){return b.displaying=null,b.clearEvents(),b.clearView()}):a.when()},displayView:function(a){this.isSkeletonRendered||(this.renderSkeleton(),this.isSkeletonRendered=!0),a&&this.setDate(a),this.render&&this.render(),this.renderDates(),this.updateSize(),this.renderBusinessHours(),this.startNowIndicator()},clearView:function(){this.unselect(),this.stopNowIndicator(),this.triggerUnrender(),this.unrenderBusinessHours(),this.unrenderDates(),this.destroy&&this.destroy()},renderSkeleton:function(){},unrenderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},triggerRender:function(){this.trigger("viewRender",this,this,this.el)},triggerUnrender:function(){this.trigger("viewDestroy",this,this,this.el)},bindGlobalHandlers:function(){a(document).on("mousedown",this.documentMousedownProxy)},unbindGlobalHandlers:function(){a(document).off("mousedown",this.documentMousedownProxy)},initThemingProps:function(){var a=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=a+"-widget-header",this.widgetContentClass=a+"-widget-content",this.highlightStateClass=a+"-state-highlight"},renderBusinessHours:function(){},unrenderBusinessHours:function(){},startNowIndicator:function(){var a,c,d,e=this;this.opt("nowIndicator")&&(a=this.getNowIndicatorUnit(),a&&(c=ca(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,this.renderNowIndicator(this.initialNowDate),this.isNowIndicatorRendered=!0,d=this.initialNowDate.clone().startOf(a).add(1,a)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){e.nowIndicatorTimeoutID=null,c(),d=+b.duration(1,a),d=Math.max(100,d),e.nowIndicatorIntervalID=setInterval(c,d)},d)))},updateNowIndicator:function(){this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)))},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearTimeout(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},updateSize:function(a){var b;a&&(b=this.queryScroll()),this.updateHeight(a),this.updateWidth(a),this.updateNowIndicator(),a&&this.setScroll(b)},updateWidth:function(a){},updateHeight:function(a){var b=this.calendar;this.setHeight(b.getSuggestedViewHeight(),b.isHeightAuto())},setHeight:function(a,b){},computeScrollerHeight:function(a){var b,c,d=this.scrollerEl;return b=this.el.add(d),b.css({position:"relative",left:-1}),c=this.el.outerHeight()-d.height(),b.css({position:"",left:""}),a-c},computeInitialScroll:function(a){return 0},queryScroll:function(){return this.scrollerEl?this.scrollerEl.scrollTop():void 0},setScroll:function(a){return this.scrollerEl?this.scrollerEl.scrollTop(a):void 0},forceScroll:function(a){var b=this;this.setScroll(a),setTimeout(function(){b.setScroll(a)},0)},displayEvents:function(a){var b=this.queryScroll();this.clearEvents(),this.renderEvents(a),this.isEventsRendered=!0,this.setScroll(b),this.triggerEventRender()},clearEvents:function(){var a;this.isEventsRendered&&(a=this.queryScroll(),this.triggerEventUnrender(),this.destroyEvents&&this.destroyEvents(),this.unrenderEvents(),this.setScroll(a),this.isEventsRendered=!1)},renderEvents:function(a){},unrenderEvents:function(){},triggerEventRender:function(){this.renderedEventSegEach(function(a){this.trigger("eventAfterRender",a.event,a.event,a.el)}),this.trigger("eventAfterAllRender")},triggerEventUnrender:function(){this.renderedEventSegEach(function(a){this.trigger("eventDestroy",a.event,a.event,a.el)})},resolveEventEl:function(b,c){var d=this.trigger("eventRender",b,b,c);return d===!1?c=null:d&&d!==!0&&(c=a(d)),c},showEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","")},a)},hideEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","hidden")},a)},renderedEventSegEach:function(a,b){var c,d=this.getEventSegs();for(c=0;c<d.length;c++)b&&d[c].event._id!==b._id||d[c].el&&a.call(this,d[c])},getEventSegs:function(){return[]},isEventDraggable:function(a){var b=a.source||{};return X(a.startEditable,b.startEditable,this.opt("eventStartEditable"),a.editable,b.editable,this.opt("editable"))},reportEventDrop:function(a,b,c,d,e){var f=this.calendar,g=f.mutateEvent(a,b,c),h=function(){g.undo(),f.reportEventChange()};this.triggerEventDrop(a,g.dateDelta,h,d,e),f.reportEventChange()},triggerEventDrop:function(a,b,c,d,e){this.trigger("eventDrop",d[0],a,b,c,e,{})},reportExternalDrop:function(b,c,d,e,f){var g,h,i=b.eventProps;i&&(g=a.extend({},i,c),h=this.calendar.renderEvent(g,b.stick)[0]),this.triggerExternalDrop(h,c,d,e,f)},triggerExternalDrop:function(a,b,c,d,e){this.trigger("drop",c[0],b.start,d,e),a&&this.trigger("eventReceive",null,a)},renderDrag:function(a,b){},unrenderDrag:function(){},isEventResizableFromStart:function(a){return this.opt("eventResizableFromStart")&&this.isEventResizable(a)},isEventResizableFromEnd:function(a){return this.isEventResizable(a)},isEventResizable:function(a){var b=a.source||{};return X(a.durationEditable,b.durationEditable,this.opt("eventDurationEditable"),a.editable,b.editable,this.opt("editable"))},reportEventResize:function(a,b,c,d,e){var f=this.calendar,g=f.mutateEvent(a,b,c),h=function(){g.undo(),f.reportEventChange()};this.triggerEventResize(a,g.durationDelta,h,d,e),f.reportEventChange()},triggerEventResize:function(a,b,c,d,e){this.trigger("eventResize",d[0],a,b,c,e,{})},select:function(a,b){this.unselect(b),this.renderSelection(a),this.reportSelection(a,b)},renderSelection:function(a){},reportSelection:function(a,b){this.isSelected=!0,this.triggerSelect(a,b)},triggerSelect:function(a,b){this.trigger("select",null,this.calendar.applyTimezone(a.start),this.calendar.applyTimezone(a.end),b)},unselect:function(a){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.trigger("unselect",null,a))},unrenderSelection:function(){},documentMousedown:function(b){var c;this.isSelected&&this.opt("unselectAuto")&&v(b)&&(c=this.opt("unselectCancel"),c&&a(b.target).closest(c).length||this.unselect(b))},triggerDayClick:function(a,b,c){this.trigger("dayClick",b,this.calendar.applyTimezone(a.start),c)},initHiddenDays:function(){var b,c=this.opt("hiddenDays")||[],d=[],e=0;for(this.opt("weekends")===!1&&c.push(0,6),b=0;7>b;b++)(d[b]=-1!==a.inArray(b,c))||e++;if(!e)throw"invalid hiddenDays";this.isHiddenDayHash=d},isHiddenDay:function(a){return b.isMoment(a)&&(a=a.day()),this.isHiddenDayHash[a]},skipHiddenDays:function(a,b,c){var d=a.clone();for(b=b||1;this.isHiddenDayHash[(d.day()+(c?b:0)+7)%7];)d.add(b,"days");return d},computeDayRange:function(a){var b,c=a.start.clone().stripTime(),d=a.end,e=null;return d&&(e=d.clone().stripTime(),b=+d.time(),b&&b>=this.nextDayThreshold&&e.add(1,"days")),(!d||c>=e)&&(e=c.clone().add(1,"days")),{start:c,end:e}},isMultiDayEvent:function(a){var b=this.computeDayRange(a);return b.end.diff(b.start,"days")>1}}),pb=Pa.Calendar=ra.extend({dirDefaults:null,langDefaults:null,overrides:null,options:null,viewSpecCache:null,view:null,header:null,loadingLevel:0,constructor:Ja,initialize:function(){},initOptions:function(a){var b,e,f,g;a=d(a),b=a.lang,e=qb[b],e||(b=pb.defaults.lang,e=qb[b]||{}),f=X(a.isRTL,e.isRTL,pb.defaults.isRTL),g=f?pb.rtlDefaults:{},this.dirDefaults=g,this.langDefaults=e,this.overrides=a,this.options=c([pb.defaults,g,e,a]),Ka(this.options),this.viewSpecCache={}},getViewSpec:function(a){var b=this.viewSpecCache;return b[a]||(b[a]=this.buildViewSpec(a))},getUnitViewSpec:function(b){var c,d,e;if(-1!=a.inArray(b,Ua))for(c=this.header.getViewsWithButtons(),a.each(Pa.views,function(a){c.push(a)}),d=0;d<c.length;d++)if(e=this.getViewSpec(c[d]),e&&e.singleUnit==b)return e},buildViewSpec:function(a){for(var d,e,f,g,h=this.overrides.views||{},i=[],j=[],k=[],l=a;l;)d=Qa[l],e=h[l],l=null,"function"==typeof d&&(d={"class":d}),d&&(i.unshift(d),j.unshift(d.defaults||{}),f=f||d.duration,l=l||d.type),e&&(k.unshift(e),f=f||e.duration,l=l||e.type);return d=Q(i),d.type=a,d["class"]?(f&&(f=b.duration(f),f.valueOf()&&(d.duration=f,g=I(f),1===f.as(g)&&(d.singleUnit=g,k.unshift(h[g]||{})))),d.defaults=c(j),d.overrides=c(k),this.buildViewSpecOptions(d),this.buildViewSpecButtonText(d,a),d):!1},buildViewSpecOptions:function(a){a.options=c([pb.defaults,a.defaults,this.dirDefaults,this.langDefaults,this.overrides,a.overrides]),Ka(a.options)},buildViewSpecButtonText:function(a,b){function c(c){var d=c.buttonText||{};return d[b]||(a.singleUnit?d[a.singleUnit]:null)}a.buttonTextOverride=c(this.overrides)||a.overrides.buttonText,a.buttonTextDefault=c(this.langDefaults)||c(this.dirDefaults)||a.defaults.buttonText||c(pb.defaults)||(a.duration?this.humanizeDuration(a.duration):null)||b},instantiateView:function(a){var b=this.getViewSpec(a);return new b["class"](this,a,b.options,b.duration)},isValidViewType:function(a){return Boolean(this.getViewSpec(a))},pushLoading:function(){this.loadingLevel++||this.trigger("loading",null,!0,this.view)},popLoading:function(){--this.loadingLevel||this.trigger("loading",null,!1,this.view)},buildSelectSpan:function(a,b){var c,d=this.moment(a).stripZone();return c=b?this.moment(b).stripZone():d.hasTime()?d.clone().add(this.defaultTimedEventDuration):d.clone().add(this.defaultAllDayEventDuration),{start:d,end:c}}});pb.mixin(eb),pb.defaults={titleRangeSeparator:" — ",monthYearFormat:"MMMM YYYY",defaultTimedEventDuration:"02:00:00",defaultAllDayEventDuration:{days:1},forceEventDuration:!1,nextDayThreshold:"09:00:00",defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberTitle:"W",weekNumberCalculation:"local",scrollTime:"06:00:00",lazyFetching:!0,startParam:"start",endParam:"end",timezoneParam:"timezone",timezone:!1,isRTL:!1,buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day"},buttonIcons:{prev:"left-single-arrow",next:"right-single-arrow",prevYear:"left-double-arrow",nextYear:"right-double-arrow"},theme:!1,themeButtonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e",prevYear:"seek-prev",nextYear:"seek-next"},dragOpacity:.75,dragRevertDuration:500,dragScroll:!0,unselectAuto:!0,dropAccept:"*",eventOrder:"title",eventLimit:!1,eventLimitText:"more",eventLimitClick:"popover",dayPopoverFormat:"LL",handleWindowResize:!0,windowResizeDelay:200},pb.englishDefaults={dayPopoverFormat:"dddd, MMMM D"},pb.rtlDefaults={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"right-single-arrow",next:"left-single-arrow",prevYear:"right-double-arrow",nextYear:"left-double-arrow"},themeButtonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w",nextYear:"seek-prev",prevYear:"seek-next"}};var qb=Pa.langs={};Pa.datepickerLang=function(b,c,d){var e=qb[b]||(qb[b]={});e.isRTL=d.isRTL,e.weekNumberTitle=d.weekHeader,a.each(rb,function(a,b){e[a]=b(d)}),a.datepicker&&(a.datepicker.regional[c]=a.datepicker.regional[b]=d,a.datepicker.regional.en=a.datepicker.regional[""],a.datepicker.setDefaults(d))},Pa.lang=function(b,d){var e,f;e=qb[b]||(qb[b]={}),d&&(e=qb[b]=c([e,d])),f=La(b),a.each(sb,function(a,b){null==e[a]&&(e[a]=b(f,e))}),pb.defaults.lang=b};var rb={buttonText:function(a){return{prev:Z(a.prevText),next:Z(a.nextText),today:Z(a.currentText)}},monthYearFormat:function(a){return a.showMonthAfterYear?"YYYY["+a.yearSuffix+"] MMMM":"MMMM YYYY["+a.yearSuffix+"]"}},sb={dayOfMonthFormat:function(a,b){var c=a.longDateFormat("l");return c=c.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g,""),b.isRTL?c+=" ddd":c="ddd "+c,c},mediumTimeFormat:function(a){return a.longDateFormat("LT").replace(/\s*a$/i,"a")},smallTimeFormat:function(a){return a.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"a");
-},extraSmallTimeFormat:function(a){return a.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"t")},hourFormat:function(a){return a.longDateFormat("LT").replace(":mm","").replace(/(\Wmm)$/,"").replace(/\s*a$/i,"a")},noMeridiemTimeFormat:function(a){return a.longDateFormat("LT").replace(/\s*a$/i,"")}},tb={smallDayDateFormat:function(a){return a.isRTL?"D dd":"dd D"},weekFormat:function(a){return a.isRTL?"w[ "+a.weekNumberTitle+"]":"["+a.weekNumberTitle+" ]w"},smallWeekFormat:function(a){return a.isRTL?"w["+a.weekNumberTitle+"]":"["+a.weekNumberTitle+"]w"}};Pa.lang("en",pb.englishDefaults),Pa.sourceNormalizers=[],Pa.sourceFetchers=[];var ub={dataType:"json",cache:!1},vb=1;pb.prototype.getPeerEvents=function(a,b){var c,d,e=this.getEventCache(),f=[];for(c=0;c<e.length;c++)d=e[c],b&&b._id===d._id||f.push(d);return f};var wb=Pa.BasicView=ob.extend({dayGridClass:mb,dayGrid:null,dayNumbersVisible:!1,weekNumbersVisible:!1,weekNumberWidth:null,headContainerEl:null,headRowEl:null,initialize:function(){this.dayGrid=this.instantiateDayGrid()},instantiateDayGrid:function(){var a=this.dayGridClass.extend(xb);return new a(this)},setRange:function(a){ob.prototype.setRange.call(this,a),this.dayGrid.breakOnWeeks=/year|month|week/.test(this.intervalUnit),this.dayGrid.setRange(a)},computeRange:function(a){var b=ob.prototype.computeRange.call(this,a);return/year|month/.test(b.intervalUnit)&&(b.start.startOf("week"),b.start=this.skipHiddenDays(b.start),b.end.weekday()&&(b.end.add(1,"week").startOf("week"),b.end=this.skipHiddenDays(b.end,-1,!0))),b},renderDates:function(){this.dayNumbersVisible=this.dayGrid.rowCnt>1,this.weekNumbersVisible=this.opt("weekNumbers"),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.weekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scrollerEl=this.el.find(".fc-day-grid-container"),this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(this.hasRigidRows())},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()),this.headRowEl=this.headContainerEl.find(".fc-row")},unrenderDates:function(){this.dayGrid.unrenderDates(),this.dayGrid.removeElement()},renderBusinessHours:function(){this.dayGrid.renderBusinessHours()},renderSkeletonHtml:function(){return'<table><thead class="fc-head"><tr><td class="fc-head-container '+this.widgetHeaderClass+'"></td></tr></thead><tbody class="fc-body"><tr><td class="'+this.widgetContentClass+'"><div class="fc-day-grid-container"><div class="fc-day-grid"/></div></td></tr></tbody></table>'},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var a=this.opt("eventLimit");return a&&"number"!=typeof a},updateWidth:function(){this.weekNumbersVisible&&(this.weekNumberWidth=k(this.el.find(".fc-week-number")))},setHeight:function(a,b){var c,d=this.opt("eventLimit");m(this.scrollerEl),f(this.headRowEl),this.dayGrid.removeSegPopover(),d&&"number"==typeof d&&this.dayGrid.limitRows(d),c=this.computeScrollerHeight(a),this.setGridHeight(c,b),d&&"number"!=typeof d&&this.dayGrid.limitRows(d),!b&&l(this.scrollerEl,c)&&(e(this.headRowEl,r(this.scrollerEl)),c=this.computeScrollerHeight(a),this.scrollerEl.height(c))},setGridHeight:function(a,b){b?j(this.dayGrid.rowEls):i(this.dayGrid.rowEls,a,!0)},prepareHits:function(){this.dayGrid.prepareHits()},releaseHits:function(){this.dayGrid.releaseHits()},queryHit:function(a,b){return this.dayGrid.queryHit(a,b)},getHitSpan:function(a){return this.dayGrid.getHitSpan(a)},getHitEl:function(a){return this.dayGrid.getHitEl(a)},renderEvents:function(a){this.dayGrid.renderEvents(a),this.updateHeight()},getEventSegs:function(){return this.dayGrid.getEventSegs()},unrenderEvents:function(){this.dayGrid.unrenderEvents()},renderDrag:function(a,b){return this.dayGrid.renderDrag(a,b)},unrenderDrag:function(){this.dayGrid.unrenderDrag()},renderSelection:function(a){this.dayGrid.renderSelection(a)},unrenderSelection:function(){this.dayGrid.unrenderSelection()}}),xb={renderHeadIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<th class="fc-week-number '+a.widgetHeaderClass+'" '+a.weekNumberStyleAttr()+"><span>"+Y(a.opt("weekNumberTitle"))+"</span></th>":""},renderNumberIntroHtml:function(a){var b=this.view;return b.weekNumbersVisible?'<td class="fc-week-number" '+b.weekNumberStyleAttr()+"><span>"+this.getCellDate(a,0).format("w")+"</span></td>":""},renderBgIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<td class="fc-week-number '+a.widgetContentClass+'" '+a.weekNumberStyleAttr()+"></td>":""},renderIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<td class="fc-week-number" '+a.weekNumberStyleAttr()+"></td>":""}},yb=Pa.MonthView=wb.extend({computeRange:function(a){var b,c=wb.prototype.computeRange.call(this,a);return this.isFixedWeeks()&&(b=Math.ceil(c.end.diff(c.start,"weeks",!0)),c.end.add(6-b,"weeks")),c},setGridHeight:function(a,b){b=b||"variable"===this.opt("weekMode"),b&&(a*=this.rowCnt/6),i(this.dayGrid.rowEls,a,!b)},isFixedWeeks:function(){var a=this.opt("weekMode");return a?"fixed"===a:this.opt("fixedWeekCount")}});Qa.basic={"class":wb},Qa.basicDay={type:"basic",duration:{days:1}},Qa.basicWeek={type:"basic",duration:{weeks:1}},Qa.month={"class":yb,duration:{months:1},defaults:{fixedWeekCount:!0}};var zb=Pa.AgendaView=ob.extend({timeGridClass:nb,timeGrid:null,dayGridClass:mb,dayGrid:null,axisWidth:null,headContainerEl:null,noScrollRowEls:null,bottomRuleEl:null,bottomRuleHeight:null,initialize:function(){this.timeGrid=this.instantiateTimeGrid(),this.opt("allDaySlot")&&(this.dayGrid=this.instantiateDayGrid())},instantiateTimeGrid:function(){var a=this.timeGridClass.extend(Ab);return new a(this)},instantiateDayGrid:function(){var a=this.dayGridClass.extend(Bb);return new a(this)},setRange:function(a){ob.prototype.setRange.call(this,a),this.timeGrid.setRange(a),this.dayGrid&&this.dayGrid.setRange(a)},renderDates:function(){this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scrollerEl=this.el.find(".fc-time-grid-container"),this.timeGrid.setElement(this.el.find(".fc-time-grid")),this.timeGrid.renderDates(),this.bottomRuleEl=a('<hr class="fc-divider '+this.widgetHeaderClass+'"/>').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)")},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml())},unrenderDates:function(){this.timeGrid.unrenderDates(),this.timeGrid.removeElement(),this.dayGrid&&(this.dayGrid.unrenderDates(),this.dayGrid.removeElement())},renderSkeletonHtml:function(){return'<table><thead class="fc-head"><tr><td class="fc-head-container '+this.widgetHeaderClass+'"></td></tr></thead><tbody class="fc-body"><tr><td class="'+this.widgetContentClass+'">'+(this.dayGrid?'<div class="fc-day-grid"/><hr class="fc-divider '+this.widgetHeaderClass+'"/>':"")+'<div class="fc-time-grid-container"><div class="fc-time-grid"/></div></td></tr></tbody></table>'},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},renderBusinessHours:function(){this.timeGrid.renderBusinessHours(),this.dayGrid&&this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.timeGrid.unrenderBusinessHours(),this.dayGrid&&this.dayGrid.unrenderBusinessHours()},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},renderNowIndicator:function(a){this.timeGrid.renderNowIndicator(a)},unrenderNowIndicator:function(){this.timeGrid.unrenderNowIndicator()},updateSize:function(a){this.timeGrid.updateSize(a),ob.prototype.updateSize.call(this,a)},updateWidth:function(){this.axisWidth=k(this.el.find(".fc-axis"))},setHeight:function(a,b){var c,d;null===this.bottomRuleHeight&&(this.bottomRuleHeight=this.bottomRuleEl.outerHeight()),this.bottomRuleEl.hide(),this.scrollerEl.css("overflow",""),m(this.scrollerEl),f(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.removeSegPopover(),c=this.opt("eventLimit"),c&&"number"!=typeof c&&(c=Cb),c&&this.dayGrid.limitRows(c)),b||(d=this.computeScrollerHeight(a),l(this.scrollerEl,d)?(e(this.noScrollRowEls,r(this.scrollerEl)),d=this.computeScrollerHeight(a),this.scrollerEl.height(d)):(this.scrollerEl.height(d).css("overflow","hidden"),this.bottomRuleEl.show()))},computeInitialScroll:function(){var a=b.duration(this.opt("scrollTime")),c=this.timeGrid.computeTimeTop(a);return c=Math.ceil(c),c&&c++,c},prepareHits:function(){this.timeGrid.prepareHits(),this.dayGrid&&this.dayGrid.prepareHits()},releaseHits:function(){this.timeGrid.releaseHits(),this.dayGrid&&this.dayGrid.releaseHits()},queryHit:function(a,b){var c=this.timeGrid.queryHit(a,b);return!c&&this.dayGrid&&(c=this.dayGrid.queryHit(a,b)),c},getHitSpan:function(a){return a.component.getHitSpan(a)},getHitEl:function(a){return a.component.getHitEl(a)},renderEvents:function(a){var b,c,d=[],e=[],f=[];for(c=0;c<a.length;c++)a[c].allDay?d.push(a[c]):e.push(a[c]);b=this.timeGrid.renderEvents(e),this.dayGrid&&(f=this.dayGrid.renderEvents(d)),this.updateHeight()},getEventSegs:function(){return this.timeGrid.getEventSegs().concat(this.dayGrid?this.dayGrid.getEventSegs():[])},unrenderEvents:function(){this.timeGrid.unrenderEvents(),this.dayGrid&&this.dayGrid.unrenderEvents()},renderDrag:function(a,b){return a.start.hasTime()?this.timeGrid.renderDrag(a,b):this.dayGrid?this.dayGrid.renderDrag(a,b):void 0},unrenderDrag:function(){this.timeGrid.unrenderDrag(),this.dayGrid&&this.dayGrid.unrenderDrag()},renderSelection:function(a){a.start.hasTime()||a.end.hasTime()?this.timeGrid.renderSelection(a):this.dayGrid&&this.dayGrid.renderSelection(a)},unrenderSelection:function(){this.timeGrid.unrenderSelection(),this.dayGrid&&this.dayGrid.unrenderSelection()}}),Ab={renderHeadIntroHtml:function(){var a,b=this.view;return b.opt("weekNumbers")?(a=this.start.format(b.opt("smallWeekFormat")),'<th class="fc-axis fc-week-number '+b.widgetHeaderClass+'" '+b.axisStyleAttr()+"><span>"+Y(a)+"</span></th>"):'<th class="fc-axis '+b.widgetHeaderClass+'" '+b.axisStyleAttr()+"></th>"},renderBgIntroHtml:function(){var a=this.view;return'<td class="fc-axis '+a.widgetContentClass+'" '+a.axisStyleAttr()+"></td>"},renderIntroHtml:function(){var a=this.view;return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"}},Bb={renderBgIntroHtml:function(){var a=this.view;return'<td class="fc-axis '+a.widgetContentClass+'" '+a.axisStyleAttr()+"><span>"+(a.opt("allDayHtml")||Y(a.opt("allDayText")))+"</span></td>"},renderIntroHtml:function(){var a=this.view;return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"}},Cb=5,Db=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];return Qa.agenda={"class":zb,defaults:{allDaySlot:!0,allDayText:"all-day",slotDuration:"00:30:00",minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0}},Qa.agendaDay={type:"agenda",duration:{days:1}},Qa.agendaWeek={type:"agenda",duration:{weeks:1}},Pa}); \ No newline at end of file
+!function(a){"function"==typeof define&&define.amd?define(["jquery","moment"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("moment")):a(jQuery,moment)}(function(a,b){function c(a){return W(a,Xa)}function d(b){var c,d={views:b.views||{}};return a.each(b,function(b,e){"views"!=b&&(a.isPlainObject(e)&&!/(time|duration|interval)$/i.test(b)&&-1==a.inArray(b,Xa)?(c=null,a.each(e,function(a,e){/^(month|week|day|default|basic(Week|Day)?|agenda(Week|Day)?)$/.test(a)?(d.views[a]||(d.views[a]={}),d.views[a][b]=e):(c||(c={}),c[a]=e)}),c&&(d[b]=c)):d[b]=e)}),d}function e(a,b){b.left&&a.css({"border-left-width":1,"margin-left":b.left-1}),b.right&&a.css({"border-right-width":1,"margin-right":b.right-1})}function f(a){a.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function g(){a("body").addClass("fc-not-allowed")}function h(){a("body").removeClass("fc-not-allowed")}function i(b,c,d){var e=Math.floor(c/b.length),f=Math.floor(c-e*(b.length-1)),g=[],h=[],i=[],k=0;j(b),b.each(function(c,d){var j=c===b.length-1?f:e,l=a(d).outerHeight(!0);j>l?(g.push(d),h.push(l),i.push(a(d).height())):k+=l}),d&&(c-=k,e=Math.floor(c/g.length),f=Math.floor(c-e*(g.length-1))),a(g).each(function(b,c){var d=b===g.length-1?f:e,j=h[b],k=i[b],l=d-(j-k);d>j&&a(c).height(l)})}function j(a){a.height("")}function k(b){var c=0;return b.find("> span").each(function(b,d){var e=a(d).outerWidth();e>c&&(c=e)}),c++,b.width(c),c}function l(a,b){var c,d=a.add(b);return d.css({position:"relative",left:-1}),c=a.outerHeight()-b.outerHeight(),d.css({position:"",left:""}),c}function m(b){var c=b.css("position"),d=b.parents().filter(function(){var b=a(this);return/(auto|scroll)/.test(b.css("overflow")+b.css("overflow-y")+b.css("overflow-x"))}).eq(0);return"fixed"!==c&&d.length?d:a(b[0].ownerDocument||document)}function n(a,b){var c=a.offset(),d=c.left-(b?b.left:0),e=c.top-(b?b.top:0);return{left:d,right:d+a.outerWidth(),top:e,bottom:e+a.outerHeight()}}function o(a,b){var c=a.offset(),d=q(a),e=c.left+t(a,"border-left-width")+d.left-(b?b.left:0),f=c.top+t(a,"border-top-width")+d.top-(b?b.top:0);return{left:e,right:e+a[0].clientWidth,top:f,bottom:f+a[0].clientHeight}}function p(a,b){var c=a.offset(),d=c.left+t(a,"border-left-width")+t(a,"padding-left")-(b?b.left:0),e=c.top+t(a,"border-top-width")+t(a,"padding-top")-(b?b.top:0);return{left:d,right:d+a.width(),top:e,bottom:e+a.height()}}function q(a){var b=a.innerWidth()-a[0].clientWidth,c={left:0,right:0,top:0,bottom:a.innerHeight()-a[0].clientHeight};return r()&&"rtl"==a.css("direction")?c.left=b:c.right=b,c}function r(){return null===Ya&&(Ya=s()),Ya}function s(){var b=a("<div><div/></div>").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),c=b.children(),d=c.offset().left>b.offset().left;return b.remove(),d}function t(a,b){return parseFloat(a.css(b))||0}function u(a){return 1==a.which&&!a.ctrlKey}function v(a){if(void 0!==a.pageX)return a.pageX;var b=a.originalEvent.touches;return b?b[0].pageX:void 0}function w(a){if(void 0!==a.pageY)return a.pageY;var b=a.originalEvent.touches;return b?b[0].pageY:void 0}function x(a){return/^touch/.test(a.type)}function y(a){a.addClass("fc-unselectable").on("selectstart",z)}function z(a){a.preventDefault()}function A(a){return window.addEventListener?(window.addEventListener("scroll",a,!0),!0):!1}function B(a){return window.removeEventListener?(window.removeEventListener("scroll",a,!0),!0):!1}function C(a,b){var c={left:Math.max(a.left,b.left),right:Math.min(a.right,b.right),top:Math.max(a.top,b.top),bottom:Math.min(a.bottom,b.bottom)};return c.left<c.right&&c.top<c.bottom?c:!1}function D(a,b){return{left:Math.min(Math.max(a.left,b.left),b.right),top:Math.min(Math.max(a.top,b.top),b.bottom)}}function E(a){return{left:(a.left+a.right)/2,top:(a.top+a.bottom)/2}}function F(a,b){return{left:a.left-b.left,top:a.top-b.top}}function G(b){var c,d,e=[],f=[];for("string"==typeof b?f=b.split(/\s*,\s*/):"function"==typeof b?f=[b]:a.isArray(b)&&(f=b),c=0;c<f.length;c++)d=f[c],"string"==typeof d?e.push("-"==d.charAt(0)?{field:d.substring(1),order:-1}:{field:d,order:1}):"function"==typeof d&&e.push({func:d});return e}function H(a,b,c){var d,e;for(d=0;d<c.length;d++)if(e=I(a,b,c[d]))return e;return 0}function I(a,b,c){return c.func?c.func(a,b):J(a[c.field],b[c.field])*(c.order||1)}function J(b,c){return b||c?null==c?-1:null==b?1:"string"===a.type(b)||"string"===a.type(c)?String(b).localeCompare(String(c)):b-c:0}function K(a,b){var c,d,e,f,g=a.start,h=a.end,i=b.start,j=b.end;return h>i&&j>g?(g>=i?(c=g.clone(),e=!0):(c=i.clone(),e=!1),j>=h?(d=h.clone(),f=!0):(d=j.clone(),f=!1),{start:c,end:d,isStart:e,isEnd:f}):void 0}function L(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days"),ms:a.time()-c.time()})}function M(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days")})}function N(a,c,d){return b.duration(Math.round(a.diff(c,d,!0)),d)}function O(a,b){var c,d,e;for(c=0;c<$a.length&&(d=$a[c],e=P(d,a,b),!(e>=1&&ha(e)));c++);return d}function P(a,c,d){return null!=d?d.diff(c,a,!0):b.isDuration(c)?c.as(a):c.end.diff(c.start,a,!0)}function Q(a,b,c){var d;return T(c)?(b-a)/c:(d=c.asMonths(),Math.abs(d)>=1&&ha(d)?b.diff(a,"months",!0)/d:b.diff(a,"days",!0)/c.asDays())}function R(a,b){var c,d;return T(a)||T(b)?a/b:(c=a.asMonths(),d=b.asMonths(),Math.abs(c)>=1&&ha(c)&&Math.abs(d)>=1&&ha(d)?c/d:a.asDays()/b.asDays())}function S(a,c){var d;return T(a)?b.duration(a*c):(d=a.asMonths(),Math.abs(d)>=1&&ha(d)?b.duration({months:d*c}):b.duration({days:a.asDays()*c}))}function T(a){return Boolean(a.hours()||a.minutes()||a.seconds()||a.milliseconds())}function U(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function V(a){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(a)}function W(a,b){var c,d,e,f,g,h,i={};if(b)for(c=0;c<b.length;c++){for(d=b[c],e=[],f=a.length-1;f>=0;f--)if(g=a[f][d],"object"==typeof g)e.unshift(g);else if(void 0!==g){i[d]=g;break}e.length&&(i[d]=W(e))}for(c=a.length-1;c>=0;c--){h=a[c];for(d in h)d in i||(i[d]=h[d])}return i}function X(a){var b=function(){};return b.prototype=a,new b}function Y(a,b){for(var c in a)$(a,c)&&(b[c]=a[c])}function Z(a,b){var c,d,e=["constructor","toString","valueOf"];for(c=0;c<e.length;c++)d=e[c],a[d]!==Object.prototype[d]&&(b[d]=a[d])}function $(a,b){return cb.call(a,b)}function _(b){return/undefined|null|boolean|number|string/.test(a.type(b))}function aa(b,c,d){if(a.isFunction(b)&&(b=[b]),b){var e,f;for(e=0;e<b.length;e++)f=b[e].apply(c,d)||f;return f}}function ba(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]}function ca(a){return(a+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#039;").replace(/"/g,"&quot;").replace(/\n/g,"<br />")}function da(a){return a.replace(/&.*?;/g,"")}function ea(b){var c=[];return a.each(b,function(a,b){null!=b&&c.push(a+":"+b)}),c.join(";")}function fa(a){return a.charAt(0).toUpperCase()+a.slice(1)}function ga(a,b){return a-b}function ha(a){return a%1===0}function ia(a,b){var c=a[b];return function(){return c.apply(a,arguments)}}function ja(a,b,c){var d,e,f,g,h,i=function(){var j=+new Date-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=+new Date;var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}}function ka(c,d,e){var f,g,h,i,j=c[0],k=1==c.length&&"string"==typeof j;return b.isMoment(j)?(i=b.apply(null,c),ma(j,i)):U(j)||void 0===j?i=b.apply(null,c):(f=!1,g=!1,k?db.test(j)?(j+="-01",c=[j],f=!0,g=!0):(h=eb.exec(j))&&(f=!h[5],g=!0):a.isArray(j)&&(g=!0),i=d||f?b.utc.apply(b,c):b.apply(null,c),f?(i._ambigTime=!0,i._ambigZone=!0):e&&(g?i._ambigZone=!0:k&&(i.utcOffset?i.utcOffset(j):i.zone(j)))),i._fullCalendar=!0,i}function la(a,c){var d,e,f=!1,g=!1,h=a.length,i=[];for(d=0;h>d;d++)e=a[d],b.isMoment(e)||(e=Va.moment.parseZone(e)),f=f||e._ambigTime,g=g||e._ambigZone,i.push(e);for(d=0;h>d;d++)e=i[d],c||!f||e._ambigTime?g&&!e._ambigZone&&(i[d]=e.clone().stripZone()):i[d]=e.clone().stripTime();return i}function ma(a,b){a._ambigTime?b._ambigTime=!0:b._ambigTime&&(b._ambigTime=!1),a._ambigZone?b._ambigZone=!0:b._ambigZone&&(b._ambigZone=!1)}function na(a,b){a.year(b[0]||0).month(b[1]||0).date(b[2]||0).hours(b[3]||0).minutes(b[4]||0).seconds(b[5]||0).milliseconds(b[6]||0)}function oa(a,b){return gb.format.call(a,b)}function pa(a,b){return qa(a,va(b))}function qa(a,b){var c,d="";for(c=0;c<b.length;c++)d+=ra(a,b[c]);return d}function ra(a,b){var c,d;return"string"==typeof b?b:(c=b.token)?hb[c]?hb[c](a):oa(a,c):b.maybe&&(d=qa(a,b.maybe),d.match(/[1-9]/))?d:""}function sa(a,b,c,d,e){var f;return a=Va.moment.parseZone(a),b=Va.moment.parseZone(b),f=(a.localeData||a.lang).call(a),c=f.longDateFormat(c)||c,d=d||" - ",ta(a,b,va(c),d,e)}function ta(a,b,c,d,e){var f,g,h,i,j=a.clone().stripZone(),k=b.clone().stripZone(),l="",m="",n="",o="",p="";for(g=0;g<c.length&&(f=ua(a,b,j,k,c[g]),f!==!1);g++)l+=f;for(h=c.length-1;h>g&&(f=ua(a,b,j,k,c[h]),f!==!1);h--)m=f+m;for(i=g;h>=i;i++)n+=ra(a,c[i]),o+=ra(b,c[i]);return(n||o)&&(p=e?o+d+n:n+d+o),l+p+m}function ua(a,b,c,d,e){var f,g;return"string"==typeof e?e:(f=e.token)&&(g=ib[f.charAt(0)],g&&c.isSame(d,g))?oa(a,f):!1}function va(a){return a in jb?jb[a]:jb[a]=wa(a)}function wa(a){for(var b,c=[],d=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;b=d.exec(a);)b[1]?c.push(b[1]):b[2]?c.push({maybe:wa(b[2])}):b[3]?c.push({token:b[3]}):b[5]&&c.push(b[5]);return c}function xa(){}function ya(a,b){var c;return $(b,"constructor")&&(c=b.constructor),"function"!=typeof c&&(c=b.constructor=function(){a.apply(this,arguments)}),c.prototype=X(a.prototype),Y(b,c.prototype),Z(b,c.prototype),Y(a,c),c}function za(a,b){Y(b,a.prototype)}function Aa(a,b){return a||b?a&&b?a.component===b.component&&Ba(a,b)&&Ba(b,a):!1:!0}function Ba(a,b){for(var c in a)if(!/^(component|left|right|top|bottom)$/.test(c)&&a[c]!==b[c])return!1;return!0}function Ca(a){var b=Ea(a);return"background"===b||"inverse-background"===b}function Da(a){return"inverse-background"===Ea(a)}function Ea(a){return ba((a.source||{}).rendering,a.rendering)}function Fa(a){var b,c,d={};for(b=0;b<a.length;b++)c=a[b],(d[c._id]||(d[c._id]=[])).push(c);return d}function Ga(a,b){return a.start-b.start}function Ha(c){var d,e,f,g,h=Va.dataAttrPrefix;return h&&(h+="-"),d=c.data(h+"event")||null,d&&(d="object"==typeof d?a.extend({},d):{},e=d.start,null==e&&(e=d.time),f=d.duration,g=d.stick,delete d.start,delete d.time,delete d.duration,delete d.stick),null==e&&(e=c.data(h+"start")),null==e&&(e=c.data(h+"time")),null==f&&(f=c.data(h+"duration")),null==g&&(g=c.data(h+"stick")),e=null!=e?b.duration(e):null,f=null!=f?b.duration(f):null,g=Boolean(g),{eventProps:d,startTime:e,duration:f,stick:g}}function Ia(a,b){var c,d;for(c=0;c<b.length;c++)if(d=b[c],d.leftCol<=a.rightCol&&d.rightCol>=a.leftCol)return!0;return!1}function Ja(a,b){return a.leftCol-b.leftCol}function Ka(a){var b,c,d,e=[];for(b=0;b<a.length;b++){for(c=a[b],d=0;d<e.length&&Na(c,e[d]).length;d++);c.level=d,(e[d]||(e[d]=[])).push(c)}return e}function La(a){var b,c,d,e,f;for(b=0;b<a.length;b++)for(c=a[b],d=0;d<c.length;d++)for(e=c[d],e.forwardSegs=[],f=b+1;f<a.length;f++)Na(e,a[f],e.forwardSegs)}function Ma(a){var b,c,d=a.forwardSegs,e=0;if(void 0===a.forwardPressure){for(b=0;b<d.length;b++)c=d[b],Ma(c),e=Math.max(e,1+c.forwardPressure);a.forwardPressure=e}}function Na(a,b,c){c=c||[];for(var d=0;d<b.length;d++)Oa(a,b[d])&&c.push(b[d]);return c}function Oa(a,b){return a.bottom>b.top&&a.top<b.bottom}function Pa(c,d){function e(){T?h()&&(k(),i()):f()}function f(){U=O.theme?"ui":"fc",c.addClass("fc"),O.isRTL?c.addClass("fc-rtl"):c.addClass("fc-ltr"),O.theme?c.addClass("ui-widget"):c.addClass("fc-unthemed"),T=a("<div class='fc-view-container'/>").prependTo(c),R=N.header=new Sa(N,O),S=R.render(),S&&c.prepend(S),i(O.defaultView),O.handleWindowResize&&(Y=ja(m,O.windowResizeDelay),a(window).resize(Y))}function g(){V&&V.removeElement(),R.removeElement(),T.remove(),c.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),Y&&a(window).unbind("resize",Y)}function h(){return c.is(":visible")}function i(b){ca++,V&&b&&V.type!==b&&(R.deactivateButton(V.type),H(),V.removeElement(),V=N.view=null),!V&&b&&(V=N.view=ba[b]||(ba[b]=N.instantiateView(b)),V.setElement(a("<div class='fc-view fc-"+b+"-view' />").appendTo(T)),R.activateButton(b)),V&&(Z=V.massageCurrentDate(Z),V.displaying&&Z.isWithin(V.intervalStart,V.intervalEnd)||h()&&(V.display(Z),I(),u(),v(),q())),I(),ca--}function j(a){return h()?(a&&l(),ca++,V.updateSize(!0),ca--,!0):void 0}function k(){h()&&l()}function l(){W="number"==typeof O.contentHeight?O.contentHeight:"number"==typeof O.height?O.height-(S?S.outerHeight(!0):0):Math.round(T.width()/Math.max(O.aspectRatio,.5))}function m(a){!ca&&a.target===window&&V.start&&j(!0)&&V.trigger("windowResize",aa)}function n(){p(),r()}function o(){h()&&(H(),V.displayEvents(da),I())}function p(){H(),V.clearEvents(),I()}function q(){!O.lazyFetching||$(V.start,V.end)?r():o()}function r(){_(V.start,V.end)}function s(a){da=a,o()}function t(){o()}function u(){R.updateTitle(V.title)}function v(){var a=N.getNow();a.isWithin(V.intervalStart,V.intervalEnd)?R.disableButton("today"):R.enableButton("today")}function w(a,b){V.select(N.buildSelectSpan.apply(N,arguments))}function x(){V&&V.unselect()}function y(){Z=V.computePrevDate(Z),i()}function z(){Z=V.computeNextDate(Z),i()}function A(){Z.add(-1,"years"),i()}function B(){Z.add(1,"years"),i()}function C(){Z=N.getNow(),i()}function D(a){Z=N.moment(a).stripZone(),i()}function E(a){Z.add(b.duration(a)),i()}function F(a,b){var c;b=b||"day",c=N.getViewSpec(b)||N.getUnitViewSpec(b),Z=a.clone(),i(c?c.type:null)}function G(){return N.applyTimezone(Z)}function H(){T.css({width:"100%",height:T.height(),overflow:"hidden"})}function I(){T.css({width:"",height:"",overflow:""})}function J(){return N}function K(){return V}function L(a,b){return void 0===b?O[a]:void("height"!=a&&"contentHeight"!=a&&"aspectRatio"!=a||(O[a]=b,j(!0)))}function M(a,b){var c=Array.prototype.slice.call(arguments,2);return b=b||aa,this.triggerWith(a,b,c),O[a]?O[a].apply(b,c):void 0}var N=this;N.initOptions(d||{});var O=this.options;N.render=e,N.destroy=g,N.refetchEvents=n,N.reportEvents=s,N.reportEventChange=t,N.rerenderEvents=o,N.changeView=i,N.select=w,N.unselect=x,N.prev=y,N.next=z,N.prevYear=A,N.nextYear=B,N.today=C,N.gotoDate=D,N.incrementDate=E,N.zoomTo=F,N.getDate=G,N.getCalendar=J,N.getView=K,N.option=L,N.trigger=M;var P=X(Ra(O.lang));if(O.monthNames&&(P._months=O.monthNames),O.monthNamesShort&&(P._monthsShort=O.monthNamesShort),O.dayNames&&(P._weekdays=O.dayNames),O.dayNamesShort&&(P._weekdaysShort=O.dayNamesShort),null!=O.firstDay){var Q=X(P._week);Q.dow=O.firstDay,P._week=Q}P._fullCalendar_weekCalc=function(a){return"function"==typeof a?a:"local"===a?a:"iso"===a||"ISO"===a?"ISO":void 0}(O.weekNumberCalculation),N.defaultAllDayEventDuration=b.duration(O.defaultAllDayEventDuration),N.defaultTimedEventDuration=b.duration(O.defaultTimedEventDuration),N.moment=function(){var a;return"local"===O.timezone?(a=Va.moment.apply(null,arguments),a.hasTime()&&a.local()):a="UTC"===O.timezone?Va.moment.utc.apply(null,arguments):Va.moment.parseZone.apply(null,arguments),"_locale"in a?a._locale=P:a._lang=P,a},N.getIsAmbigTimezone=function(){return"local"!==O.timezone&&"UTC"!==O.timezone},N.applyTimezone=function(a){if(!a.hasTime())return a.clone();var b,c=N.moment(a.toArray()),d=a.time()-c.time();return d&&(b=c.clone().add(d),a.time()-b.time()===0&&(c=b)),c},N.getNow=function(){var a=O.now;return"function"==typeof a&&(a=a()),N.moment(a).stripZone()},N.getEventEnd=function(a){return a.end?a.end.clone():N.getDefaultEventEnd(a.allDay,a.start)},N.getDefaultEventEnd=function(a,b){var c=b.clone();return a?c.stripTime().add(N.defaultAllDayEventDuration):c.add(N.defaultTimedEventDuration),N.getIsAmbigTimezone()&&c.stripZone(),c},N.humanizeDuration=function(a){return(a.locale||a.lang).call(a,O.lang).humanize()},Ta.call(N,O);var R,S,T,U,V,W,Y,Z,$=N.isFetchNeeded,_=N.fetchEvents,aa=c[0],ba={},ca=0,da=[];Z=null!=O.defaultDate?N.moment(O.defaultDate).stripZone():N.getNow(),N.getSuggestedViewHeight=function(){return void 0===W&&k(),W},N.isHeightAuto=function(){return"auto"===O.contentHeight||"auto"===O.height},N.freezeContentHeight=H,N.unfreezeContentHeight=I,N.initialize()}function Qa(b){a.each(Cb,function(a,c){null==b[a]&&(b[a]=c(b))})}function Ra(a){var c=b.localeData||b.langData;return c.call(b,a)||c.call(b,"en")}function Sa(b,c){function d(){var b=c.header;return n=c.theme?"ui":"fc",b?o=a("<div class='fc-toolbar'/>").append(f("left")).append(f("right")).append(f("center")).append('<div class="fc-clear"/>'):void 0}function e(){o.remove(),o=a()}function f(d){var e=a('<div class="fc-'+d+'"/>'),f=c.header[d];return f&&a.each(f.split(" "),function(d){var f,g=a(),h=!0;a.each(this.split(","),function(d,e){var f,i,j,k,l,m,o,q,r,s;"title"==e?(g=g.add(a("<h2>&nbsp;</h2>")),h=!1):((f=(b.options.customButtons||{})[e])?(j=function(a){f.click&&f.click.call(s[0],a)},k="",l=f.text):(i=b.getViewSpec(e))?(j=function(){b.changeView(e)},p.push(e),k=i.buttonTextOverride,l=i.buttonTextDefault):b[e]&&(j=function(){b[e]()},k=(b.overrides.buttonText||{})[e],l=c.buttonText[e]),j&&(m=f?f.themeIcon:c.themeButtonIcons[e],o=f?f.icon:c.buttonIcons[e],q=k?ca(k):m&&c.theme?"<span class='ui-icon ui-icon-"+m+"'></span>":o&&!c.theme?"<span class='fc-icon fc-icon-"+o+"'></span>":ca(l),r=["fc-"+e+"-button",n+"-button",n+"-state-default"],s=a('<button type="button" class="'+r.join(" ")+'">'+q+"</button>").click(function(a){s.hasClass(n+"-state-disabled")||(j(a),(s.hasClass(n+"-state-active")||s.hasClass(n+"-state-disabled"))&&s.removeClass(n+"-state-hover"))}).mousedown(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-down")}).mouseup(function(){s.removeClass(n+"-state-down")}).hover(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-hover")},function(){s.removeClass(n+"-state-hover").removeClass(n+"-state-down")}),g=g.add(s)))}),h&&g.first().addClass(n+"-corner-left").end().last().addClass(n+"-corner-right").end(),g.length>1?(f=a("<div/>"),h&&f.addClass("fc-button-group"),f.append(g),e.append(f)):e.append(g)}),e}function g(a){o.find("h2").text(a)}function h(a){o.find(".fc-"+a+"-button").addClass(n+"-state-active")}function i(a){o.find(".fc-"+a+"-button").removeClass(n+"-state-active")}function j(a){o.find(".fc-"+a+"-button").attr("disabled","disabled").addClass(n+"-state-disabled")}function k(a){o.find(".fc-"+a+"-button").removeAttr("disabled").removeClass(n+"-state-disabled")}function l(){return p}var m=this;m.render=d,m.removeElement=e,m.updateTitle=g,m.activateButton=h,m.deactivateButton=i,m.disableButton=j,m.enableButton=k,m.getViewsWithButtons=l;var n,o=a(),p=[]}function Ta(c){function d(a,b){return!I||I>a||b>J}function e(a,b){I=a,J=b,S=[];var c=++Q,d=P.length;R=d;for(var e=0;d>e;e++)f(P[e],c)}function f(b,c){g(b,function(d){var e,f,g,h=a.isArray(b.events);if(c==Q){if(d)for(e=0;e<d.length;e++)f=d[e],g=h?f:s(f,b),g&&S.push.apply(S,w(g));R--,R||K(S)}})}function g(b,d){var e,f,h=Va.sourceFetchers;for(e=0;e<h.length;e++){if(f=h[e].call(H,b,I.clone(),J.clone(),c.timezone,d),f===!0)return;if("object"==typeof f)return void g(f,d)}var i=b.events;if(i)a.isFunction(i)?(H.pushLoading(),i.call(H,I.clone(),J.clone(),c.timezone,function(a){d(a),H.popLoading()})):a.isArray(i)?d(i):d();else{var j=b.url;if(j){var k,l=b.success,m=b.error,n=b.complete;k=a.isFunction(b.data)?b.data():b.data;var o=a.extend({},k||{}),p=ba(b.startParam,c.startParam),q=ba(b.endParam,c.endParam),r=ba(b.timezoneParam,c.timezoneParam);p&&(o[p]=I.format()),q&&(o[q]=J.format()),c.timezone&&"local"!=c.timezone&&(o[r]=c.timezone),H.pushLoading(),a.ajax(a.extend({},Db,b,{data:o,success:function(b){b=b||[];var c=aa(l,this,arguments);a.isArray(c)&&(b=c),d(b)},error:function(){aa(m,this,arguments),d()},complete:function(){aa(n,this,arguments),H.popLoading()}}))}else d()}}function h(a){var b=i(a);b&&(P.push(b),R++,f(b,Q))}function i(b){var c,d,e=Va.sourceNormalizers;if(a.isFunction(b)||a.isArray(b)?c={events:b}:"string"==typeof b?c={url:b}:"object"==typeof b&&(c=a.extend({},b)),c){for(c.className?"string"==typeof c.className&&(c.className=c.className.split(/\s+/)):c.className=[],a.isArray(c.events)&&(c.origArray=c.events,c.events=a.map(c.events,function(a){return s(a,c)})),d=0;d<e.length;d++)e[d].call(H,c);return c}}function j(b){P=a.grep(P,function(a){return!k(a,b)}),S=a.grep(S,function(a){return!k(a.source,b)}),K(S)}function k(a,b){return a&&b&&l(a)==l(b)}function l(a){return("object"==typeof a?a.origArray||a.googleCalendarId||a.url||a.events:null)||a}function m(a){a.start=H.moment(a.start),a.end?a.end=H.moment(a.end):a.end=null,x(a,n(a)),K(S)}function n(b){var c={};return a.each(b,function(a,b){o(a)&&void 0!==b&&_(b)&&(c[a]=b)}),c}function o(a){return!/^_|^(id|allDay|start|end)$/.test(a)}function p(a,b){var c,d,e,f=s(a);if(f){for(c=w(f),d=0;d<c.length;d++)e=c[d],e.source||(b&&(O.events.push(e),e.source=O),S.push(e));return K(S),c}return[]}function q(b){var c,d;for(null==b?b=function(){return!0}:a.isFunction(b)||(c=b+"",b=function(a){return a._id==c}),S=a.grep(S,b,!0),d=0;d<P.length;d++)a.isArray(P[d].events)&&(P[d].events=a.grep(P[d].events,b,!0));K(S)}function r(b){return a.isFunction(b)?a.grep(S,b):null!=b?(b+="",a.grep(S,function(a){return a._id==b})):S}function s(d,e){var f,g,h,i={};if(c.eventDataTransform&&(d=c.eventDataTransform(d)),e&&e.eventDataTransform&&(d=e.eventDataTransform(d)),a.extend(i,d),e&&(i.source=e),i._id=d._id||(void 0===d.id?"_fc"+Eb++:d.id+""),d.className?"string"==typeof d.className?i.className=d.className.split(/\s+/):i.className=d.className:i.className=[],f=d.start||d.date,g=d.end,V(f)&&(f=b.duration(f)),V(g)&&(g=b.duration(g)),d.dow||b.isDuration(f)||b.isDuration(g))i.start=f?b.duration(f):null,i.end=g?b.duration(g):null,i._recurring=!0;else{if(f&&(f=H.moment(f),!f.isValid()))return!1;g&&(g=H.moment(g),g.isValid()||(g=null)),h=d.allDay,void 0===h&&(h=ba(e?e.allDayDefault:void 0,c.allDayDefault)),t(f,g,h,i)}return H.normalizeEvent(i),i}function t(a,b,c,d){d.start=a,d.end=b,d.allDay=c,u(d),Ua(d)}function u(a){v(a),a.end&&!a.end.isAfter(a.start)&&(a.end=null),a.end||(c.forceEventDuration?a.end=H.getDefaultEventEnd(a.allDay,a.start):a.end=null)}function v(a){null==a.allDay&&(a.allDay=!(a.start.hasTime()||a.end&&a.end.hasTime())),a.allDay?(a.start.stripTime(),a.end&&a.end.stripTime()):(a.start.hasTime()||(a.start=H.applyTimezone(a.start.time(0))),a.end&&!a.end.hasTime()&&(a.end=H.applyTimezone(a.end.time(0))))}function w(b,c,d){var e,f,g,h,i,j,k,l,m,n=[];if(c=c||I,d=d||J,b)if(b._recurring){if(f=b.dow)for(e={},g=0;g<f.length;g++)e[f[g]]=!0;for(h=c.clone().stripTime();h.isBefore(d);)e&&!e[h.day()]||(i=b.start,j=b.end,k=h.clone(),l=null,i&&(k=k.time(i)),j&&(l=h.clone().time(j)),m=a.extend({},b),t(k,l,!i&&!j,m),n.push(m)),h.add(1,"days")}else n.push(b);return n}function x(b,c,d){function e(a,b){return d?N(a,b,d):c.allDay?M(a,b):L(a,b)}var f,g,h,i,j,k,l={};return c=c||{},c.start||(c.start=b.start.clone()),void 0===c.end&&(c.end=b.end?b.end.clone():null),null==c.allDay&&(c.allDay=b.allDay),u(c),f={start:b._start.clone(),end:b._end?b._end.clone():H.getDefaultEventEnd(b._allDay,b._start),allDay:c.allDay},u(f),g=null!==b._end&&null===c.end,h=e(c.start,f.start),c.end?(i=e(c.end,f.end),j=i.subtract(h)):j=null,a.each(c,function(a,b){o(a)&&void 0!==b&&(l[a]=b)}),k=y(r(b._id),g,c.allDay,h,j,l),{dateDelta:h,durationDelta:j,undo:k}}function y(b,c,d,e,f,g){var h=H.getIsAmbigTimezone(),i=[];return e&&!e.valueOf()&&(e=null),f&&!f.valueOf()&&(f=null),a.each(b,function(b,j){var k,l;k={start:j.start.clone(),end:j.end?j.end.clone():null,allDay:j.allDay},a.each(g,function(a){k[a]=j[a]}),l={start:j._start,end:j._end,allDay:d},u(l),c?l.end=null:f&&!l.end&&(l.end=H.getDefaultEventEnd(l.allDay,l.start)),e&&(l.start.add(e),l.end&&l.end.add(e)),f&&l.end.add(f),h&&!l.allDay&&(e||f)&&(l.start.stripZone(),l.end&&l.end.stripZone()),a.extend(j,g,l),Ua(j),i.push(function(){a.extend(j,k),Ua(j)})}),function(){for(var a=0;a<i.length;a++)i[a]()}}function z(b){var d,e=c.businessHours,f={className:"fc-nonbusiness",start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"},g=H.getView();return e&&(d=a.extend({},f,"object"==typeof e?e:{})),d?(b&&(d.start=null,d.end=null),w(s(d),g.start,g.end)):[]}function A(a,b){var d=b.source||{},e=ba(b.constraint,d.constraint,c.eventConstraint),f=ba(b.overlap,d.overlap,c.eventOverlap);return D(a,e,f,b)}function B(b,c,d){var e,f;return d&&(e=a.extend({},d,c),f=w(s(e))[0]),f?A(b,f):C(b)}function C(a){return D(a,c.selectConstraint,c.selectOverlap)}function D(a,b,c,d){var e,f,g,h,i,j;if(null!=b){for(e=E(b),f=!1,h=0;h<e.length;h++)if(F(e[h],a)){f=!0;break}if(!f)return!1}for(g=H.getPeerEvents(a,d),h=0;h<g.length;h++)if(i=g[h],G(i,a)){if(c===!1)return!1;if("function"==typeof c&&!c(i,d))return!1;if(d){if(j=ba(i.overlap,(i.source||{}).overlap),j===!1)return!1;if("function"==typeof j&&!j(d,i))return!1}}return!0}function E(a){return"businessHours"===a?z():"object"==typeof a?w(s(a)):r(a)}function F(a,b){var c=a.start.clone().stripZone(),d=H.getEventEnd(a).stripZone();return b.start>=c&&b.end<=d}function G(a,b){var c=a.start.clone().stripZone(),d=H.getEventEnd(a).stripZone();return b.start<d&&b.end>c}var H=this;H.isFetchNeeded=d,H.fetchEvents=e,H.addEventSource=h,H.removeEventSource=j,H.updateEvent=m,H.renderEvent=p,H.removeEvents=q,H.clientEvents=r,H.mutateEvent=x,H.normalizeEventDates=u,H.normalizeEventTimes=v;var I,J,K=H.reportEvents,O={events:[]},P=[O],Q=0,R=0,S=[];a.each((c.events?[c.events]:[]).concat(c.eventSources||[]),function(a,b){var c=i(b);c&&P.push(c)}),H.getBusinessHoursEvents=z,H.isEventSpanAllowed=A,H.isExternalSpanAllowed=B,H.isSelectionSpanAllowed=C,H.getEventCache=function(){return S}}function Ua(a){a._allDay=a.allDay,a._start=a.start.clone(),a._end=a.end?a.end.clone():null}var Va=a.fullCalendar={version:"2.7.3",internalApiVersion:4},Wa=Va.views={};a.fn.fullCalendar=function(b){var c=Array.prototype.slice.call(arguments,1),d=this;return this.each(function(e,f){var g,h=a(f),i=h.data("fullCalendar");"string"==typeof b?i&&a.isFunction(i[b])&&(g=i[b].apply(i,c),e||(d=g),"destroy"===b&&h.removeData("fullCalendar")):i||(i=new yb(h,b),h.data("fullCalendar",i),i.render())}),d};var Xa=["header","buttonText","buttonIcons","themeButtonIcons"];Va.intersectRanges=K,Va.applyAll=aa,Va.debounce=ja,Va.isInt=ha,Va.htmlEscape=ca,Va.cssToStr=ea,Va.proxy=ia,Va.capitaliseFirstLetter=fa,Va.getOuterRect=n,Va.getClientRect=o,Va.getContentRect=p,Va.getScrollbarWidths=q;var Ya=null;Va.preventDefault=z,Va.intersectRects=C,Va.parseFieldSpecs=G,Va.compareByFieldSpecs=H,Va.compareByFieldSpec=I,Va.flexibleCompare=J,Va.computeIntervalUnit=O,Va.divideRangeByDuration=Q,Va.divideDurationByDuration=R,Va.multiplyDuration=S,Va.durationHasTime=T;var Za=["sun","mon","tue","wed","thu","fri","sat"],$a=["year","month","week","day","hour","minute","second","millisecond"];Va.log=function(){var a=window.console;return a&&a.log?a.log.apply(a,arguments):void 0},Va.warn=function(){var a=window.console;return a&&a.warn?a.warn.apply(a,arguments):Va.log.apply(Va,arguments)};var _a,ab,bb,cb={}.hasOwnProperty,db=/^\s*\d{4}-\d\d$/,eb=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,fb=b.fn,gb=a.extend({},fb);Va.moment=function(){return ka(arguments)},Va.moment.utc=function(){var a=ka(arguments,!0);return a.hasTime()&&a.utc(),a},Va.moment.parseZone=function(){return ka(arguments,!0,!0)},fb.clone=function(){var a=gb.clone.apply(this,arguments);return ma(this,a),this._fullCalendar&&(a._fullCalendar=!0),a},fb.week=fb.weeks=function(a){var b=(this._locale||this._lang)._fullCalendar_weekCalc;return null==a&&"function"==typeof b?b(this):"ISO"===b?gb.isoWeek.apply(this,arguments):gb.week.apply(this,arguments)},fb.time=function(a){if(!this._fullCalendar)return gb.time.apply(this,arguments);if(null==a)return b.duration({hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()});this._ambigTime=!1,b.isDuration(a)||b.isMoment(a)||(a=b.duration(a));var c=0;return b.isDuration(a)&&(c=24*Math.floor(a.asDays())),this.hours(c+a.hours()).minutes(a.minutes()).seconds(a.seconds()).milliseconds(a.milliseconds())},fb.stripTime=function(){var a;return this._ambigTime||(a=this.toArray(),this.utc(),ab(this,a.slice(0,3)),this._ambigTime=!0,this._ambigZone=!0),this},fb.hasTime=function(){return!this._ambigTime},fb.stripZone=function(){var a,b;return this._ambigZone||(a=this.toArray(),b=this._ambigTime,this.utc(),ab(this,a),this._ambigTime=b||!1,this._ambigZone=!0),this},fb.hasZone=function(){return!this._ambigZone},fb.local=function(){var a=this.toArray(),b=this._ambigZone;return gb.local.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,b&&bb(this,a),this},fb.utc=function(){return gb.utc.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,this},a.each(["zone","utcOffset"],function(a,b){gb[b]&&(fb[b]=function(a){return null!=a&&(this._ambigTime=!1,this._ambigZone=!1),gb[b].apply(this,arguments)})}),fb.format=function(){return this._fullCalendar&&arguments[0]?pa(this,arguments[0]):this._ambigTime?oa(this,"YYYY-MM-DD"):this._ambigZone?oa(this,"YYYY-MM-DD[T]HH:mm:ss"):gb.format.apply(this,arguments)},fb.toISOString=function(){return this._ambigTime?oa(this,"YYYY-MM-DD"):this._ambigZone?oa(this,"YYYY-MM-DD[T]HH:mm:ss"):gb.toISOString.apply(this,arguments)},fb.isWithin=function(a,b){var c=la([this,a,b]);return c[0]>=c[1]&&c[0]<c[2]},fb.isSame=function(a,b){var c;return this._fullCalendar?b?(c=la([this,a],!0),gb.isSame.call(c[0],c[1],b)):(a=Va.moment.parseZone(a),gb.isSame.call(this,a)&&Boolean(this._ambigTime)===Boolean(a._ambigTime)&&Boolean(this._ambigZone)===Boolean(a._ambigZone)):gb.isSame.apply(this,arguments)},a.each(["isBefore","isAfter"],function(a,b){fb[b]=function(a,c){var d;return this._fullCalendar?(d=la([this,a]),gb[b].call(d[0],d[1],c)):gb[b].apply(this,arguments)}}),_a="_d"in b()&&"updateOffset"in b,ab=_a?function(a,c){a._d.setTime(Date.UTC.apply(Date,c)),b.updateOffset(a,!1)}:na,bb=_a?function(a,c){a._d.setTime(+new Date(c[0]||0,c[1]||0,c[2]||0,c[3]||0,c[4]||0,c[5]||0,c[6]||0)),b.updateOffset(a,!1)}:na;var hb={t:function(a){return oa(a,"a").charAt(0)},T:function(a){return oa(a,"A").charAt(0)}};Va.formatRange=sa;var ib={Y:"year",M:"month",D:"day",d:"day",A:"second",a:"second",T:"second",t:"second",H:"second",h:"second",m:"second",s:"second"},jb={};Va.Class=xa,xa.extend=function(){var a,b,c=arguments.length;for(a=0;c>a;a++)b=arguments[a],c-1>a&&za(this,b);return ya(this,b||{})},xa.mixin=function(a){za(this,a)};var kb=Va.EmitterMixin={on:function(b,c){var d=function(a,b){return c.apply(b.context||this,b.args||[])};return c.guid||(c.guid=a.guid++),d.guid=c.guid,a(this).on(b,d),this},off:function(b,c){return a(this).off(b,c),this},trigger:function(b){var c=Array.prototype.slice.call(arguments,1);return a(this).triggerHandler(b,{args:c}),this},triggerWith:function(b,c,d){return a(this).triggerHandler(b,{context:c,args:d}),this}},lb=Va.ListenerMixin=function(){var b=0,c={listenerId:null,listenTo:function(b,c,d){if("object"==typeof c)for(var e in c)c.hasOwnProperty(e)&&this.listenTo(b,e,c[e]);else"string"==typeof c&&b.on(c+"."+this.getListenerNamespace(),a.proxy(d,this))},stopListeningTo:function(a,b){a.off((b||"")+"."+this.getListenerNamespace())},getListenerNamespace:function(){return null==this.listenerId&&(this.listenerId=b++),"_listener"+this.listenerId}};return c}(),mb={isIgnoringMouse:!1,delayUnignoreMouse:null,initMouseIgnoring:function(a){this.delayUnignoreMouse=ja(ia(this,"unignoreMouse"),a||1e3)},tempIgnoreMouse:function(){this.isIgnoringMouse=!0,this.delayUnignoreMouse()},unignoreMouse:function(){this.isIgnoringMouse=!1;
+}},nb=xa.extend(lb,{isHidden:!0,options:null,el:null,margin:10,constructor:function(a){this.options=a||{}},show:function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},hide:function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},render:function(){var b=this,c=this.options;this.el=a('<div class="fc-popover"/>').addClass(c.className||"").css({top:0,left:0}).append(c.content).appendTo(c.parentEl),this.el.on("click",".fc-close",function(){b.hide()}),c.autoHide&&this.listenTo(a(document),"mousedown",this.documentMousedown)},documentMousedown:function(b){this.el&&!a(b.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(a(document),"mousedown")},position:function(){var b,c,d,e,f,g=this.options,h=this.el.offsetParent().offset(),i=this.el.outerWidth(),j=this.el.outerHeight(),k=a(window),l=m(this.el);e=g.top||0,f=void 0!==g.left?g.left:void 0!==g.right?g.right-i:0,l.is(window)||l.is(document)?(l=k,b=0,c=0):(d=l.offset(),b=d.top,c=d.left),b+=k.scrollTop(),c+=k.scrollLeft(),g.viewportConstrain!==!1&&(e=Math.min(e,b+l.outerHeight()-j-this.margin),e=Math.max(e,b+this.margin),f=Math.min(f,c+l.outerWidth()-i-this.margin),f=Math.max(f,c+this.margin)),this.el.css({top:e-h.top,left:f-h.left})},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1))}}),ob=Va.CoordCache=xa.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(b){this.els=a(b.els),this.isHorizontal=b.isHorizontal,this.isVertical=b.isVertical,this.forcedOffsetParentEl=b.offsetParent?a(b.offsetParent):null},build:function(){var a=this.forcedOffsetParentEl||this.els.eq(0).offsetParent();this.origin=a.offset(),this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},queryBoundingRect:function(){var a=m(this.els.eq(0));return a.is(document)?void 0:o(a)},buildElHorizontals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().left,h=f.outerWidth();b.push(g),c.push(g+h)}),this.lefts=b,this.rights=c},buildElVerticals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().top,h=f.outerHeight();b.push(g),c.push(g+h)}),this.tops=b,this.bottoms=c},getHorizontalIndex:function(a){this.ensureBuilt();var b,c=this.boundingRect,d=this.lefts,e=this.rights,f=d.length;if(!c||a>=c.left&&a<c.right)for(b=0;f>b;b++)if(a>=d[b]&&a<e[b])return b},getVerticalIndex:function(a){this.ensureBuilt();var b,c=this.boundingRect,d=this.tops,e=this.bottoms,f=d.length;if(!c||a>=c.top&&a<c.bottom)for(b=0;f>b;b++)if(a>=d[b]&&a<e[b])return b},getLeftOffset:function(a){return this.ensureBuilt(),this.lefts[a]},getLeftPosition:function(a){return this.ensureBuilt(),this.lefts[a]-this.origin.left},getRightOffset:function(a){return this.ensureBuilt(),this.rights[a]},getRightPosition:function(a){return this.ensureBuilt(),this.rights[a]-this.origin.left},getWidth:function(a){return this.ensureBuilt(),this.rights[a]-this.lefts[a]},getTopOffset:function(a){return this.ensureBuilt(),this.tops[a]},getTopPosition:function(a){return this.ensureBuilt(),this.tops[a]-this.origin.top},getBottomOffset:function(a){return this.ensureBuilt(),this.bottoms[a]},getBottomPosition:function(a){return this.ensureBuilt(),this.bottoms[a]-this.origin.top},getHeight:function(a){return this.ensureBuilt(),this.bottoms[a]-this.tops[a]}}),pb=Va.DragListener=xa.extend(lb,mb,{options:null,subjectEl:null,subjectHref:null,originX:null,originY:null,scrollEl:null,isInteracting:!1,isDistanceSurpassed:!1,isDelayEnded:!1,isDragging:!1,isTouch:!1,delay:null,delayTimeoutId:null,minDistance:null,handleTouchScrollProxy:null,constructor:function(a){this.options=a||{},this.handleTouchScrollProxy=ia(this,"handleTouchScroll"),this.initMouseIgnoring(500)},startInteraction:function(b,c){var d=x(b);if("mousedown"===b.type){if(this.isIgnoringMouse)return;if(!u(b))return;b.preventDefault()}this.isInteracting||(c=c||{},this.delay=ba(c.delay,this.options.delay,0),this.minDistance=ba(c.distance,this.options.distance,0),this.subjectEl=this.options.subjectEl,this.isInteracting=!0,this.isTouch=d,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.originX=v(b),this.originY=w(b),this.scrollEl=m(a(b.target)),this.bindHandlers(),this.initAutoScroll(),this.handleInteractionStart(b),this.startDelay(b),this.minDistance||this.handleDistanceSurpassed(b))},handleInteractionStart:function(a){this.trigger("interactionStart",a)},endInteraction:function(a,b){this.isInteracting&&(this.endDrag(a),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null),this.destroyAutoScroll(),this.unbindHandlers(),this.isInteracting=!1,this.handleInteractionEnd(a,b),this.isTouch&&this.tempIgnoreMouse())},handleInteractionEnd:function(a,b){this.trigger("interactionEnd",a,b||!1)},bindHandlers:function(){var b=this,c=1;this.isTouch?(this.listenTo(a(document),{touchmove:this.handleTouchMove,touchend:this.endInteraction,touchcancel:this.endInteraction,touchstart:function(a){c?c--:b.endInteraction(a,!0)}}),!A(this.handleTouchScrollProxy)&&this.scrollEl&&this.listenTo(this.scrollEl,"scroll",this.handleTouchScroll)):this.listenTo(a(document),{mousemove:this.handleMouseMove,mouseup:this.endInteraction}),this.listenTo(a(document),{selectstart:z,contextmenu:z})},unbindHandlers:function(){this.stopListeningTo(a(document)),B(this.handleTouchScrollProxy),this.scrollEl&&this.stopListeningTo(this.scrollEl,"scroll")},startDrag:function(a,b){this.startInteraction(a,b),this.isDragging||(this.isDragging=!0,this.handleDragStart(a))},handleDragStart:function(a){this.trigger("dragStart",a),this.initHrefHack()},handleMove:function(a){var b,c=v(a)-this.originX,d=w(a)-this.originY,e=this.minDistance;this.isDistanceSurpassed||(b=c*c+d*d,b>=e*e&&this.handleDistanceSurpassed(a)),this.isDragging&&this.handleDrag(c,d,a)},handleDrag:function(a,b,c){this.trigger("drag",a,b,c),this.updateAutoScroll(c)},endDrag:function(a){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(a))},handleDragEnd:function(a){this.trigger("dragEnd",a),this.destroyHrefHack()},startDelay:function(a){var b=this;this.delay?this.delayTimeoutId=setTimeout(function(){b.handleDelayEnd(a)},this.delay):this.handleDelayEnd(a)},handleDelayEnd:function(a){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(a)},handleDistanceSurpassed:function(a){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(a)},handleTouchMove:function(a){this.isDragging&&a.preventDefault(),this.handleMove(a)},handleMouseMove:function(a){this.handleMove(a)},handleTouchScroll:function(a){this.isDragging||this.endInteraction(a,!0)},initHrefHack:function(){var a=this.subjectEl;(this.subjectHref=a?a.attr("href"):null)&&a.removeAttr("href")},destroyHrefHack:function(){var a=this.subjectEl,b=this.subjectHref;setTimeout(function(){b&&a.attr("href",b)},0)},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+a]&&this["_"+a].apply(this,Array.prototype.slice.call(arguments,1))}});pb.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var a=this.scrollEl;this.isAutoScroll=this.options.scroll&&a&&!a.is(window)&&!a.is(document),this.isAutoScroll&&this.listenTo(a,"scroll",ja(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=n(this.scrollEl))},updateAutoScroll:function(a){var b,c,d,e,f=this.scrollSensitivity,g=this.scrollBounds,h=0,i=0;g&&(b=(f-(w(a)-g.top))/f,c=(f-(g.bottom-w(a)))/f,d=(f-(v(a)-g.left))/f,e=(f-(g.right-v(a)))/f,b>=0&&1>=b?h=b*this.scrollSpeed*-1:c>=0&&1>=c&&(h=c*this.scrollSpeed),d>=0&&1>=d?i=d*this.scrollSpeed*-1:e>=0&&1>=e&&(i=e*this.scrollSpeed)),this.setScrollVel(h,i)},setScrollVel:function(a,b){this.scrollTopVel=a,this.scrollLeftVel=b,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(ia(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var a=this.scrollEl;this.scrollTopVel<0?a.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&a.scrollTop()+a[0].clientHeight>=a[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?a.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&a.scrollLeft()+a[0].clientWidth>=a[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var a=this.scrollEl,b=this.scrollIntervalMs/1e3;this.scrollTopVel&&a.scrollTop(a.scrollTop()+this.scrollTopVel*b),this.scrollLeftVel&&a.scrollLeft(a.scrollLeft()+this.scrollLeftVel*b),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var qb=pb.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(a,b){pb.call(this,b),this.component=a},handleInteractionStart:function(a){var b,c,d,e=this.subjectEl;this.computeCoords(),a?(c={left:v(a),top:w(a)},d=c,e&&(b=n(e),d=D(d,b)),this.origHit=this.queryHit(d.left,d.top),e&&this.options.subjectCenter&&(this.origHit&&(b=C(this.origHit,b)||b),d=E(b)),this.coordAdjust=F(d,c)):(this.origHit=null,this.coordAdjust=null),pb.prototype.handleInteractionStart.apply(this,arguments)},computeCoords:function(){this.component.prepareHits(),this.computeScrollBounds()},handleDragStart:function(a){var b;pb.prototype.handleDragStart.apply(this,arguments),b=this.queryHit(v(a),w(a)),b&&this.handleHitOver(b)},handleDrag:function(a,b,c){var d;pb.prototype.handleDrag.apply(this,arguments),d=this.queryHit(v(c),w(c)),Aa(d,this.hit)||(this.hit&&this.handleHitOut(),d&&this.handleHitOver(d))},handleDragEnd:function(){this.handleHitDone(),pb.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(a){var b=Aa(a,this.origHit);this.hit=a,this.trigger("hitOver",this.hit,b,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){pb.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.releaseHits()},handleScrollEnd:function(){pb.prototype.handleScrollEnd.apply(this,arguments),this.computeCoords()},queryHit:function(a,b){return this.coordAdjust&&(a+=this.coordAdjust.left,b+=this.coordAdjust.top),this.component.queryHit(a,b)}}),rb=xa.extend(lb,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(b,c){this.options=c=c||{},this.sourceEl=b,this.parentEl=c.parentEl?a(c.parentEl):b.parent()},start:function(b){this.isFollowing||(this.isFollowing=!0,this.y0=w(b),this.x0=v(b),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),x(b)?this.listenTo(a(document),"touchmove",this.handleMove):this.listenTo(a(document),"mousemove",this.handleMove))},stop:function(b,c){function d(){this.isAnimating=!1,e.removeElement(),this.top0=this.left0=null,c&&c()}var e=this,f=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(a(document)),b&&f&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:f,complete:d})):d())},getEl:function(){var a=this.el;return a||(this.sourceEl.width(),a=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),a.addClass("fc-unselectable"),a.appendTo(this.parentEl)),a},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var a,b;this.getEl(),null===this.top0&&(this.sourceEl.width(),a=this.sourceEl.offset(),b=this.el.offsetParent().offset(),this.top0=a.top-b.top,this.left0=a.left-b.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(a){this.topDelta=w(a)-this.y0,this.leftDelta=v(a)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),sb=Va.Grid=xa.extend(lb,mb,{view:null,isRTL:null,start:null,end:null,el:null,elsByFill:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,minResizeDuration:null,largeUnit:null,dayDragListener:null,segDragListener:null,segResizeListener:null,externalDragListener:null,constructor:function(a){this.view=a,this.isRTL=a.opt("isRTL"),this.elsByFill={},this.dayDragListener=this.buildDayDragListener(),this.initMouseIgnoring()},computeEventTimeFormat:function(){return this.view.opt("smallTimeFormat")},computeDisplayEventTime:function(){return!0},computeDisplayEventEnd:function(){return!0},setRange:function(a){this.start=a.start.clone(),this.end=a.end.clone(),this.rangeUpdated(),this.processRangeOptions()},rangeUpdated:function(){},processRangeOptions:function(){var a,b,c=this.view;this.eventTimeFormat=c.opt("eventTimeFormat")||c.opt("timeFormat")||this.computeEventTimeFormat(),a=c.opt("displayEventTime"),null==a&&(a=this.computeDisplayEventTime()),b=c.opt("displayEventEnd"),null==b&&(b=this.computeDisplayEventEnd()),this.displayEventTime=a,this.displayEventEnd=b},spanToSegs:function(a){},diffDates:function(a,b){return this.largeUnit?N(a,b,this.largeUnit):L(a,b)},prepareHits:function(){},releaseHits:function(){},queryHit:function(a,b){},getHitSpan:function(a){},getHitEl:function(a){},setElement:function(a){this.el=a,y(a),this.bindDayHandler("touchstart",this.dayTouchStart),this.bindDayHandler("mousedown",this.dayMousedown),this.bindSegHandlers(),this.bindGlobalHandlers()},bindDayHandler:function(b,c){var d=this;this.el.on(b,function(b){return a(b.target).is(".fc-event-container *, .fc-more")||a(b.target).closest(".fc-popover").length?void 0:c.call(d,b)})},removeElement:function(){this.unbindGlobalHandlers(),this.clearDragListeners(),this.el.remove()},renderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},bindGlobalHandlers:function(){this.listenTo(a(document),{dragstart:this.externalDragStart,sortstart:this.externalDragStart})},unbindGlobalHandlers:function(){this.stopListeningTo(a(document))},dayMousedown:function(a){this.isIgnoringMouse||this.dayDragListener.startInteraction(a,{})},dayTouchStart:function(a){var b=this.view;(b.isSelected||b.selectedEvent)&&this.tempIgnoreMouse(),this.dayDragListener.startInteraction(a,{delay:this.view.opt("longPressDelay")})},buildDayDragListener:function(){var a,b,c=this,d=this.view,e=d.opt("selectable"),f=new qb(this,{scroll:d.opt("dragScroll"),interactionStart:function(){a=f.origHit},dragStart:function(){d.unselect()},hitOver:function(d,f,h){h&&(f||(a=null),e&&(b=c.computeSelection(c.getHitSpan(h),c.getHitSpan(d)),b?c.renderSelection(b):b===!1&&g()))},hitOut:function(){a=null,b=null,c.unrenderSelection(),h()},interactionEnd:function(e,f){f||(a&&!c.isIgnoringMouse&&d.triggerDayClick(c.getHitSpan(a),c.getHitEl(a),e),b&&d.reportSelection(b,e),h())}});return f},clearDragListeners:function(){this.dayDragListener.endInteraction(),this.segDragListener&&this.segDragListener.endInteraction(),this.segResizeListener&&this.segResizeListener.endInteraction(),this.externalDragListener&&this.externalDragListener.endInteraction()},renderEventLocationHelper:function(a,b){var c=this.fabricateHelperEvent(a,b);return this.renderHelper(c,b)},fabricateHelperEvent:function(a,b){var c=b?X(b.event):{};return c.start=a.start.clone(),c.end=a.end?a.end.clone():null,c.allDay=null,this.view.calendar.normalizeEventDates(c),c.className=(c.className||[]).concat("fc-helper"),b||(c.editable=!1),c},renderHelper:function(a,b){},unrenderHelper:function(){},renderSelection:function(a){this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHighlight()},computeSelection:function(a,b){var c=this.computeSelectionSpan(a,b);return c&&!this.view.calendar.isSelectionSpanAllowed(c)?!1:c},computeSelectionSpan:function(a,b){var c=[a.start,a.end,b.start,b.end];return c.sort(ga),{start:c[0].clone(),end:c[3].clone()}},renderHighlight:function(a){this.renderFill("highlight",this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderBusinessHours:function(){},unrenderBusinessHours:function(){},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},renderFill:function(a,b){},unrenderFill:function(a){var b=this.elsByFill[a];b&&(b.remove(),delete this.elsByFill[a])},renderFillSegEls:function(b,c){var d,e=this,f=this[b+"SegEl"],g="",h=[];if(c.length){for(d=0;d<c.length;d++)g+=this.fillSegHtml(b,c[d]);a(g).each(function(b,d){var g=c[b],i=a(d);f&&(i=f.call(e,g,i)),i&&(i=a(i),i.is(e.fillSegTag)&&(g.el=i,h.push(g)))})}return h},fillSegTag:"div",fillSegHtml:function(a,b){var c=this[a+"SegClasses"],d=this[a+"SegCss"],e=c?c.call(this,b):[],f=ea(d?d.call(this,b):{});return"<"+this.fillSegTag+(e.length?' class="'+e.join(" ")+'"':"")+(f?' style="'+f+'"':"")+" />"},getDayClasses:function(a){var b=this.view,c=b.calendar.getNow(),d=["fc-"+Za[a.day()]];return 1==b.intervalDuration.as("months")&&a.month()!=b.intervalStart.month()&&d.push("fc-other-month"),a.isSame(c,"day")?d.push("fc-today",b.highlightStateClass):c>a?d.push("fc-past"):d.push("fc-future"),d}});sb.mixin({mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,isDraggingExternal:!1,segs:null,renderEvents:function(a){var b,c=[],d=[];for(b=0;b<a.length;b++)(Ca(a[b])?c:d).push(a[b]);this.segs=[].concat(this.renderBgEvents(c),this.renderFgEvents(d))},renderBgEvents:function(a){var b=this.eventsToSegs(a);return this.renderBgSegs(b)||b},renderFgEvents:function(a){var b=this.eventsToSegs(a);return this.renderFgSegs(b)||b},unrenderEvents:function(){this.handleSegMouseout(),this.clearDragListeners(),this.unrenderFgSegs(),this.unrenderBgSegs(),this.segs=null},getEventSegs:function(){return this.segs||[]},renderFgSegs:function(a){},unrenderFgSegs:function(){},renderFgSegEls:function(b,c){var d,e=this.view,f="",g=[];if(b.length){for(d=0;d<b.length;d++)f+=this.fgSegHtml(b[d],c);a(f).each(function(c,d){var f=b[c],h=e.resolveEventEl(f.event,a(d));h&&(h.data("fc-seg",f),f.el=h,g.push(f))})}return g},fgSegHtml:function(a,b){},renderBgSegs:function(a){return this.renderFill("bgEvent",a)},unrenderBgSegs:function(){this.unrenderFill("bgEvent")},bgEventSegEl:function(a,b){return this.view.resolveEventEl(a.event,b)},bgEventSegClasses:function(a){var b=a.event,c=b.source||{};return["fc-bgevent"].concat(b.className,c.className||[])},bgEventSegCss:function(a){return{"background-color":this.getSegSkinCss(a)["background-color"]}},businessHoursSegClasses:function(a){return["fc-nonbusiness","fc-bgevent"]},bindSegHandlers:function(){this.bindSegHandler("touchstart",this.handleSegTouchStart),this.bindSegHandler("touchend",this.handleSegTouchEnd),this.bindSegHandler("mouseenter",this.handleSegMouseover),this.bindSegHandler("mouseleave",this.handleSegMouseout),this.bindSegHandler("mousedown",this.handleSegMousedown),this.bindSegHandler("click",this.handleSegClick)},bindSegHandler:function(b,c){var d=this;this.el.on(b,".fc-event-container > *",function(b){var e=a(this).data("fc-seg");return!e||d.isDraggingSeg||d.isResizingSeg?void 0:c.call(d,e,b)})},handleSegClick:function(a,b){return this.view.trigger("eventClick",a.el[0],a.event,b)},handleSegMouseover:function(a,b){this.isIgnoringMouse||this.mousedOverSeg||(this.mousedOverSeg=a,a.el.addClass("fc-allow-mouse-resize"),this.view.trigger("eventMouseover",a.el[0],a.event,b))},handleSegMouseout:function(a,b){b=b||{},this.mousedOverSeg&&(a=a||this.mousedOverSeg,this.mousedOverSeg=null,a.el.removeClass("fc-allow-mouse-resize"),this.view.trigger("eventMouseout",a.el[0],a.event,b))},handleSegMousedown:function(a,b){var c=this.startSegResize(a,b,{distance:5});!c&&this.view.isEventDraggable(a.event)&&this.buildSegDragListener(a).startInteraction(b,{distance:5})},handleSegTouchStart:function(a,b){var c,d=this.view,e=a.event,f=d.isEventSelected(e),g=d.isEventDraggable(e),h=d.isEventResizable(e),i=!1;f&&h&&(i=this.startSegResize(a,b)),i||!g&&!h||(c=g?this.buildSegDragListener(a):this.buildSegSelectListener(a),c.startInteraction(b,{delay:f?0:this.view.opt("longPressDelay")})),this.tempIgnoreMouse()},handleSegTouchEnd:function(a,b){this.tempIgnoreMouse()},startSegResize:function(b,c,d){return a(c.target).is(".fc-resizer")?(this.buildSegResizeListener(b,a(c.target).is(".fc-start-resizer")).startInteraction(c,d),!0):!1},buildSegDragListener:function(a){var b,c,d,e=this,f=this.view,i=f.calendar,j=a.el,k=a.event;if(this.segDragListener)return this.segDragListener;var l=this.segDragListener=new qb(f,{scroll:f.opt("dragScroll"),subjectEl:j,subjectCenter:!0,interactionStart:function(d){b=!1,c=new rb(a.el,{additionalClass:"fc-dragging",parentEl:f.el,opacity:l.isTouch?null:f.opt("dragOpacity"),revertDuration:f.opt("dragRevertDuration"),zIndex:2}),c.hide(),c.start(d)},dragStart:function(c){l.isTouch&&!f.isEventSelected(k)&&f.selectEvent(k),b=!0,e.handleSegMouseout(a,c),e.segDragStart(a,c),f.hideEvent(k)},hitOver:function(b,h,j){var m;a.hit&&(j=a.hit),d=e.computeEventDrop(j.component.getHitSpan(j),b.component.getHitSpan(b),k),d&&!i.isEventSpanAllowed(e.eventToSpan(d),k)&&(g(),d=null),d&&(m=f.renderDrag(d,a))?(m.addClass("fc-dragging"),l.isTouch||e.applyDragOpacity(m),c.hide()):c.show(),h&&(d=null)},hitOut:function(){f.unrenderDrag(),c.show(),d=null},hitDone:function(){h()},interactionEnd:function(g){c.stop(!d,function(){b&&(f.unrenderDrag(),f.showEvent(k),e.segDragStop(a,g)),d&&f.reportEventDrop(k,d,this.largeUnit,j,g)}),e.segDragListener=null}});return l},buildSegSelectListener:function(a){var b=this,c=this.view,d=a.event;if(this.segDragListener)return this.segDragListener;var e=this.segDragListener=new pb({dragStart:function(a){e.isTouch&&!c.isEventSelected(d)&&c.selectEvent(d)},interactionEnd:function(a){b.segDragListener=null}});return e},segDragStart:function(a,b){this.isDraggingSeg=!0,this.view.trigger("eventDragStart",a.el[0],a.event,b,{})},segDragStop:function(a,b){this.isDraggingSeg=!1,this.view.trigger("eventDragStop",a.el[0],a.event,b,{})},computeEventDrop:function(a,b,c){var d,e,f=this.view.calendar,g=a.start,h=b.start;return g.hasTime()===h.hasTime()?(d=this.diffDates(h,g),c.allDay&&T(d)?(e={start:c.start.clone(),end:f.getEventEnd(c),allDay:!1},f.normalizeEventTimes(e)):e={start:c.start.clone(),end:c.end?c.end.clone():null,allDay:c.allDay},e.start.add(d),e.end&&e.end.add(d)):e={start:h.clone(),end:null,allDay:!h.hasTime()},e},applyDragOpacity:function(a){var b=this.view.opt("dragOpacity");null!=b&&a.each(function(a,c){c.style.opacity=b})},externalDragStart:function(b,c){var d,e,f=this.view;f.opt("droppable")&&(d=a((c?c.item:null)||b.target),e=f.opt("dropAccept"),(a.isFunction(e)?e.call(d[0],d):d.is(e))&&(this.isDraggingExternal||this.listenToExternalDrag(d,b,c)))},listenToExternalDrag:function(a,b,c){var d,e=this,f=this.view.calendar,i=Ha(a),j=e.externalDragListener=new qb(this,{interactionStart:function(){e.isDraggingExternal=!0},hitOver:function(a){d=e.computeExternalDrop(a.component.getHitSpan(a),i),d&&!f.isExternalSpanAllowed(e.eventToSpan(d),d,i.eventProps)&&(g(),d=null),d&&e.renderDrag(d)},hitOut:function(){d=null},hitDone:function(){h(),e.unrenderDrag()},interactionEnd:function(b){d&&e.view.reportExternalDrop(i,d,a,b,c),e.isDraggingExternal=!1,e.externalDragListener=null}});j.startDrag(b)},computeExternalDrop:function(a,b){var c=this.view.calendar,d={start:c.applyTimezone(a.start),end:null};return b.startTime&&!d.start.hasTime()&&d.start.time(b.startTime),b.duration&&(d.end=d.start.clone().add(b.duration)),d},renderDrag:function(a,b){},unrenderDrag:function(){},buildSegResizeListener:function(a,b){var c,d,e=this,f=this.view,i=f.calendar,j=a.el,k=a.event,l=i.getEventEnd(k),m=this.segResizeListener=new qb(this,{scroll:f.opt("dragScroll"),subjectEl:j,interactionStart:function(){c=!1},dragStart:function(b){c=!0,e.handleSegMouseout(a,b),e.segResizeStart(a,b)},hitOver:function(c,h,j){var m=e.getHitSpan(j),n=e.getHitSpan(c);d=b?e.computeEventStartResize(m,n,k):e.computeEventEndResize(m,n,k),d&&(i.isEventSpanAllowed(e.eventToSpan(d),k)?d.start.isSame(k.start)&&d.end.isSame(l)&&(d=null):(g(),d=null)),d&&(f.hideEvent(k),e.renderEventResize(d,a))},hitOut:function(){d=null},hitDone:function(){e.unrenderEventResize(),f.showEvent(k),h()},interactionEnd:function(b){c&&e.segResizeStop(a,b),d&&f.reportEventResize(k,d,this.largeUnit,j,b),e.segResizeListener=null}});return m},segResizeStart:function(a,b){this.isResizingSeg=!0,this.view.trigger("eventResizeStart",a.el[0],a.event,b,{})},segResizeStop:function(a,b){this.isResizingSeg=!1,this.view.trigger("eventResizeStop",a.el[0],a.event,b,{})},computeEventStartResize:function(a,b,c){return this.computeEventResize("start",a,b,c)},computeEventEndResize:function(a,b,c){return this.computeEventResize("end",a,b,c)},computeEventResize:function(a,b,c,d){var e,f,g=this.view.calendar,h=this.diffDates(c[a],b[a]);return e={start:d.start.clone(),end:g.getEventEnd(d),allDay:d.allDay},e.allDay&&T(h)&&(e.allDay=!1,g.normalizeEventTimes(e)),e[a].add(h),e.start.isBefore(e.end)||(f=this.minResizeDuration||(d.allDay?g.defaultAllDayEventDuration:g.defaultTimedEventDuration),"start"==a?e.start=e.end.clone().subtract(f):e.end=e.start.clone().add(f)),e},renderEventResize:function(a,b){},unrenderEventResize:function(){},getEventTimeText:function(a,b,c){return null==b&&(b=this.eventTimeFormat),null==c&&(c=this.displayEventEnd),this.displayEventTime&&a.start.hasTime()?c&&a.end?this.view.formatRange(a,b):a.start.format(b):""},getSegClasses:function(a,b,c){var d=this.view,e=a.event,f=["fc-event",a.isStart?"fc-start":"fc-not-start",a.isEnd?"fc-end":"fc-not-end"].concat(e.className,e.source?e.source.className:[]);return b&&f.push("fc-draggable"),c&&f.push("fc-resizable"),d.isEventSelected(e)&&f.push("fc-selected"),f},getSegSkinCss:function(a){var b=a.event,c=this.view,d=b.source||{},e=b.color,f=d.color,g=c.opt("eventColor");return{"background-color":b.backgroundColor||e||d.backgroundColor||f||c.opt("eventBackgroundColor")||g,"border-color":b.borderColor||e||d.borderColor||f||c.opt("eventBorderColor")||g,color:b.textColor||d.textColor||c.opt("eventTextColor")}},eventToSegs:function(a){return this.eventsToSegs([a])},eventToSpan:function(a){return this.eventToSpans(a)[0]},eventToSpans:function(a){var b=this.eventToRange(a);return this.eventRangeToSpans(b,a)},eventsToSegs:function(b,c){var d=this,e=Fa(b),f=[];return a.each(e,function(a,b){var e,g=[];for(e=0;e<b.length;e++)g.push(d.eventToRange(b[e]));if(Da(b[0]))for(g=d.invertRanges(g),e=0;e<g.length;e++)f.push.apply(f,d.eventRangeToSegs(g[e],b[0],c));else for(e=0;e<g.length;e++)f.push.apply(f,d.eventRangeToSegs(g[e],b[e],c))}),f},eventToRange:function(a){return{start:a.start.clone().stripZone(),end:(a.end?a.end.clone():this.view.calendar.getDefaultEventEnd(null!=a.allDay?a.allDay:!a.start.hasTime(),a.start)).stripZone()}},eventRangeToSegs:function(a,b,c){var d,e=this.eventRangeToSpans(a,b),f=[];for(d=0;d<e.length;d++)f.push.apply(f,this.eventSpanToSegs(e[d],b,c));return f},eventRangeToSpans:function(b,c){return[a.extend({},b)]},eventSpanToSegs:function(a,b,c){var d,e,f=c?c(a):this.spanToSegs(a);for(d=0;d<f.length;d++)e=f[d],e.event=b,e.eventStartMS=+a.start,e.eventDurationMS=a.end-a.start;return f},invertRanges:function(a){var b,c,d=this.view,e=d.start.clone(),f=d.end.clone(),g=[],h=e;for(a.sort(Ga),b=0;b<a.length;b++)c=a[b],c.start>h&&g.push({start:h,end:c.start}),h=c.end;return f>h&&g.push({start:h,end:f}),g},sortEventSegs:function(a){a.sort(ia(this,"compareEventSegs"))},compareEventSegs:function(a,b){return a.eventStartMS-b.eventStartMS||b.eventDurationMS-a.eventDurationMS||b.event.allDay-a.event.allDay||H(a.event,b.event,this.view.eventOrderSpecs)}}),Va.isBgEvent=Ca,Va.dataAttrPrefix="";var tb=Va.DayTableMixin={breakOnWeeks:!1,dayDates:null,dayIndices:null,daysPerRow:null,rowCnt:null,colCnt:null,colHeadFormat:null,updateDayTable:function(){for(var a,b,c,d=this.view,e=this.start.clone(),f=-1,g=[],h=[];e.isBefore(this.end);)d.isHiddenDay(e)?g.push(f+.5):(f++,g.push(f),h.push(e.clone())),e.add(1,"days");if(this.breakOnWeeks){for(b=h[0].day(),a=1;a<h.length&&h[a].day()!=b;a++);c=Math.ceil(h.length/a)}else c=1,a=h.length;this.dayDates=h,this.dayIndices=g,this.daysPerRow=a,this.rowCnt=c,this.updateDayTableCols()},updateDayTableCols:function(){this.colCnt=this.computeColCnt(),this.colHeadFormat=this.view.opt("columnFormat")||this.computeColHeadFormat()},computeColCnt:function(){return this.daysPerRow},getCellDate:function(a,b){return this.dayDates[this.getCellDayIndex(a,b)].clone()},getCellRange:function(a,b){var c=this.getCellDate(a,b),d=c.clone().add(1,"days");return{start:c,end:d}},getCellDayIndex:function(a,b){return a*this.daysPerRow+this.getColDayIndex(b)},getColDayIndex:function(a){return this.isRTL?this.colCnt-1-a:a},getDateDayIndex:function(a){var b=this.dayIndices,c=a.diff(this.start,"days");return 0>c?b[0]-1:c>=b.length?b[b.length-1]+1:b[c]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.view.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(a){var b,c,d,e,f,g=this.daysPerRow,h=this.view.computeDayRange(a),i=this.getDateDayIndex(h.start),j=this.getDateDayIndex(h.end.clone().subtract(1,"days")),k=[];for(b=0;b<this.rowCnt;b++)c=b*g,d=c+g-1,e=Math.max(i,c),f=Math.min(j,d),e=Math.ceil(e),f=Math.floor(f),f>=e&&k.push({row:b,firstRowDayIndex:e-c,lastRowDayIndex:f-c,isStart:e===i,isEnd:f===j});return k},sliceRangeByDay:function(a){var b,c,d,e,f,g,h=this.daysPerRow,i=this.view.computeDayRange(a),j=this.getDateDayIndex(i.start),k=this.getDateDayIndex(i.end.clone().subtract(1,"days")),l=[];for(b=0;b<this.rowCnt;b++)for(c=b*h,d=c+h-1,e=c;d>=e;e++)f=Math.max(j,e),g=Math.min(k,e),f=Math.ceil(f),g=Math.floor(g),g>=f&&l.push({row:b,firstRowDayIndex:f-c,lastRowDayIndex:g-c,isStart:f===j,isEnd:g===k});return l},renderHeadHtml:function(){var a=this.view;return'<div class="fc-row '+a.widgetHeaderClass+'"><table><thead>'+this.renderHeadTrHtml()+"</thead></table></div>"},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return"<tr>"+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+"</tr>"},renderHeadDateCellsHtml:function(){var a,b,c=[];for(a=0;a<this.colCnt;a++)b=this.getCellDate(0,a),c.push(this.renderHeadDateCellHtml(b));return c.join("")},renderHeadDateCellHtml:function(a,b,c){var d=this.view;return'<th class="fc-day-header '+d.widgetHeaderClass+" fc-"+Za[a.day()]+'"'+(1==this.rowCnt?' data-date="'+a.format("YYYY-MM-DD")+'"':"")+(b>1?' colspan="'+b+'"':"")+(c?" "+c:"")+">"+ca(a.format(this.colHeadFormat))+"</th>"},renderBgTrHtml:function(a){return"<tr>"+(this.isRTL?"":this.renderBgIntroHtml(a))+this.renderBgCellsHtml(a)+(this.isRTL?this.renderBgIntroHtml(a):"")+"</tr>";
+},renderBgIntroHtml:function(a){return this.renderIntroHtml()},renderBgCellsHtml:function(a){var b,c,d=[];for(b=0;b<this.colCnt;b++)c=this.getCellDate(a,b),d.push(this.renderBgCellHtml(c));return d.join("")},renderBgCellHtml:function(a,b){var c=this.view,d=this.getDayClasses(a);return d.unshift("fc-day",c.widgetContentClass),'<td class="'+d.join(" ")+'" data-date="'+a.format("YYYY-MM-DD")+'"'+(b?" "+b:"")+"></td>"},renderIntroHtml:function(){},bookendCells:function(a){var b=this.renderIntroHtml();b&&(this.isRTL?a.append(b):a.prepend(b))}},ub=Va.DayGrid=sb.extend(tb,{numbersVisible:!1,bottomCoordPadding:0,rowEls:null,cellEls:null,helperEls:null,rowCoordCache:null,colCoordCache:null,renderDates:function(a){var b,c,d=this.view,e=this.rowCnt,f=this.colCnt,g="";for(b=0;e>b;b++)g+=this.renderDayRowHtml(b,a);for(this.el.html(g),this.rowEls=this.el.find(".fc-row"),this.cellEls=this.el.find(".fc-day"),this.rowCoordCache=new ob({els:this.rowEls,isVertical:!0}),this.colCoordCache=new ob({els:this.cellEls.slice(0,this.colCnt),isHorizontal:!0}),b=0;e>b;b++)for(c=0;f>c;c++)d.trigger("dayRender",null,this.getCellDate(b,c),this.getCellEl(b,c))},unrenderDates:function(){this.removeSegPopover()},renderBusinessHours:function(){var a=this.view.calendar.getBusinessHoursEvents(!0),b=this.eventsToSegs(a);this.renderFill("businessHours",b,"bgevent")},renderDayRowHtml:function(a,b){var c=this.view,d=["fc-row","fc-week",c.widgetContentClass];return b&&d.push("fc-rigid"),'<div class="'+d.join(" ")+'"><div class="fc-bg"><table>'+this.renderBgTrHtml(a)+'</table></div><div class="fc-content-skeleton"><table>'+(this.numbersVisible?"<thead>"+this.renderNumberTrHtml(a)+"</thead>":"")+"</table></div></div>"},renderNumberTrHtml:function(a){return"<tr>"+(this.isRTL?"":this.renderNumberIntroHtml(a))+this.renderNumberCellsHtml(a)+(this.isRTL?this.renderNumberIntroHtml(a):"")+"</tr>"},renderNumberIntroHtml:function(a){return this.renderIntroHtml()},renderNumberCellsHtml:function(a){var b,c,d=[];for(b=0;b<this.colCnt;b++)c=this.getCellDate(a,b),d.push(this.renderNumberCellHtml(c));return d.join("")},renderNumberCellHtml:function(a){var b;return this.view.dayNumbersVisible?(b=this.getDayClasses(a),b.unshift("fc-day-number"),'<td class="'+b.join(" ")+'" data-date="'+a.format()+'">'+a.date()+"</td>"):"<td/>"},computeEventTimeFormat:function(){return this.view.opt("extraSmallTimeFormat")},computeDisplayEventEnd:function(){return 1==this.colCnt},rangeUpdated:function(){this.updateDayTable()},spanToSegs:function(a){var b,c,d=this.sliceRangeByRow(a);for(b=0;b<d.length;b++)c=d[b],this.isRTL?(c.leftCol=this.daysPerRow-1-c.lastRowDayIndex,c.rightCol=this.daysPerRow-1-c.firstRowDayIndex):(c.leftCol=c.firstRowDayIndex,c.rightCol=c.lastRowDayIndex);return d},prepareHits:function(){this.colCoordCache.build(),this.rowCoordCache.build(),this.rowCoordCache.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},releaseHits:function(){this.colCoordCache.clear(),this.rowCoordCache.clear()},queryHit:function(a,b){var c=this.colCoordCache.getHorizontalIndex(a),d=this.rowCoordCache.getVerticalIndex(b);return null!=d&&null!=c?this.getCellHit(d,c):void 0},getHitSpan:function(a){return this.getCellRange(a.row,a.col)},getHitEl:function(a){return this.getCellEl(a.row,a.col)},getCellHit:function(a,b){return{row:a,col:b,component:this,left:this.colCoordCache.getLeftOffset(b),right:this.colCoordCache.getRightOffset(b),top:this.rowCoordCache.getTopOffset(a),bottom:this.rowCoordCache.getBottomOffset(a)}},getCellEl:function(a,b){return this.cellEls.eq(a*this.colCnt+b)},renderDrag:function(a,b){return this.renderHighlight(this.eventToSpan(a)),b&&!b.el.closest(this.el).length?this.renderEventLocationHelper(a,b):void 0},unrenderDrag:function(){this.unrenderHighlight(),this.unrenderHelper()},renderEventResize:function(a,b){return this.renderHighlight(this.eventToSpan(a)),this.renderEventLocationHelper(a,b)},unrenderEventResize:function(){this.unrenderHighlight(),this.unrenderHelper()},renderHelper:function(b,c){var d,e=[],f=this.eventToSegs(b);return f=this.renderFgSegEls(f),d=this.renderSegRows(f),this.rowEls.each(function(b,f){var g,h=a(f),i=a('<div class="fc-helper-skeleton"><table/></div>');g=c&&c.row===b?c.el.position().top:h.find(".fc-content-skeleton tbody").position().top,i.css("top",g).find("table").append(d[b].tbodyEl),h.append(i),e.push(i[0])}),this.helperEls=a(e)},unrenderHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(b,c,d){var e,f,g,h=[];for(c=this.renderFillSegEls(b,c),e=0;e<c.length;e++)f=c[e],g=this.renderFillRow(b,f,d),this.rowEls.eq(f.row).append(g),h.push(g[0]);return this.elsByFill[b]=a(h),c},renderFillRow:function(b,c,d){var e,f,g=this.colCnt,h=c.leftCol,i=c.rightCol+1;return d=d||b.toLowerCase(),e=a('<div class="fc-'+d+'-skeleton"><table><tr/></table></div>'),f=e.find("tr"),h>0&&f.append('<td colspan="'+h+'"/>'),f.append(c.el.attr("colspan",i-h)),g>i&&f.append('<td colspan="'+(g-i)+'"/>'),this.bookendCells(f),e}});ub.mixin({rowStructs:null,unrenderEvents:function(){this.removeSegPopover(),sb.prototype.unrenderEvents.apply(this,arguments)},getEventSegs:function(){return sb.prototype.getEventSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(b){var c=a.grep(b,function(a){return a.event.allDay});return sb.prototype.renderBgSegs.call(this,c)},renderFgSegs:function(b){var c;return b=this.renderFgSegEls(b),c=this.rowStructs=this.renderSegRows(b),this.rowEls.each(function(b,d){a(d).find(".fc-content-skeleton > table").append(c[b].tbodyEl)}),b},unrenderFgSegs:function(){for(var a,b=this.rowStructs||[];a=b.pop();)a.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(a){var b,c,d=[];for(b=this.groupSegRows(a),c=0;c<b.length;c++)d.push(this.renderSegRow(c,b[c]));return d},fgSegHtml:function(a,b){var c,d,e=this.view,f=a.event,g=e.isEventDraggable(f),h=!b&&f.allDay&&a.isStart&&e.isEventResizableFromStart(f),i=!b&&f.allDay&&a.isEnd&&e.isEventResizableFromEnd(f),j=this.getSegClasses(a,g,h||i),k=ea(this.getSegSkinCss(a)),l="";return j.unshift("fc-day-grid-event","fc-h-event"),a.isStart&&(c=this.getEventTimeText(f),c&&(l='<span class="fc-time">'+ca(c)+"</span>")),d='<span class="fc-title">'+(ca(f.title||"")||"&nbsp;")+"</span>",'<a class="'+j.join(" ")+'"'+(f.url?' href="'+ca(f.url)+'"':"")+(k?' style="'+k+'"':"")+'><div class="fc-content">'+(this.isRTL?d+" "+l:l+" "+d)+"</div>"+(h?'<div class="fc-resizer fc-start-resizer" />':"")+(i?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},renderSegRow:function(b,c){function d(b){for(;b>g;)k=(r[e-1]||[])[g],k?k.attr("rowspan",parseInt(k.attr("rowspan")||1,10)+1):(k=a("<td/>"),h.append(k)),q[e][g]=k,r[e][g]=k,g++}var e,f,g,h,i,j,k,l=this.colCnt,m=this.buildSegLevels(c),n=Math.max(1,m.length),o=a("<tbody/>"),p=[],q=[],r=[];for(e=0;n>e;e++){if(f=m[e],g=0,h=a("<tr/>"),p.push([]),q.push([]),r.push([]),f)for(i=0;i<f.length;i++){for(j=f[i],d(j.leftCol),k=a('<td class="fc-event-container"/>').append(j.el),j.leftCol!=j.rightCol?k.attr("colspan",j.rightCol-j.leftCol+1):r[e][g]=k;g<=j.rightCol;)q[e][g]=k,p[e][g]=j,g++;h.append(k)}d(l),this.bookendCells(h),o.append(h)}return{row:b,tbodyEl:o,cellMatrix:q,segMatrix:p,segLevels:m,segs:c}},buildSegLevels:function(a){var b,c,d,e=[];for(this.sortEventSegs(a),b=0;b<a.length;b++){for(c=a[b],d=0;d<e.length&&Ia(c,e[d]);d++);c.level=d,(e[d]||(e[d]=[])).push(c)}for(d=0;d<e.length;d++)e[d].sort(Ja);return e},groupSegRows:function(a){var b,c=[];for(b=0;b<this.rowCnt;b++)c.push([]);for(b=0;b<a.length;b++)c[a[b].row].push(a[b]);return c}}),ub.mixin({segPopover:null,popoverSegs:null,removeSegPopover:function(){this.segPopover&&this.segPopover.hide()},limitRows:function(a){var b,c,d=this.rowStructs||[];for(b=0;b<d.length;b++)this.unlimitRow(b),c=a?"number"==typeof a?a:this.computeRowLevelLimit(b):!1,c!==!1&&this.limitRow(b,c)},computeRowLevelLimit:function(b){function c(b,c){f=Math.max(f,a(c).outerHeight())}var d,e,f,g=this.rowEls.eq(b),h=g.height(),i=this.rowStructs[b].tbodyEl.children();for(d=0;d<i.length;d++)if(e=i.eq(d).removeClass("fc-limited"),f=0,e.find("> td > :first-child").each(c),e.position().top+f>h)return d;return!1},limitRow:function(b,c){function d(d){for(;d>w;)j=t.getCellSegs(b,w,c),j.length&&(m=f[c-1][w],s=t.renderMoreLink(b,w,j),r=a("<div/>").append(s),m.append(r),v.push(r[0])),w++}var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t=this,u=this.rowStructs[b],v=[],w=0;if(c&&c<u.segLevels.length){for(e=u.segLevels[c-1],f=u.cellMatrix,g=u.tbodyEl.children().slice(c).addClass("fc-limited").get(),h=0;h<e.length;h++){for(i=e[h],d(i.leftCol),l=[],k=0;w<=i.rightCol;)j=this.getCellSegs(b,w,c),l.push(j),k+=j.length,w++;if(k){for(m=f[c-1][i.leftCol],n=m.attr("rowspan")||1,o=[],p=0;p<l.length;p++)q=a('<td class="fc-more-cell"/>').attr("rowspan",n),j=l[p],s=this.renderMoreLink(b,i.leftCol+p,[i].concat(j)),r=a("<div/>").append(s),q.append(r),o.push(q[0]),v.push(q[0]);m.addClass("fc-limited").after(a(o)),g.push(m[0])}}d(this.colCnt),u.moreEls=a(v),u.limitedEls=a(g)}},unlimitRow:function(a){var b=this.rowStructs[a];b.moreEls&&(b.moreEls.remove(),b.moreEls=null),b.limitedEls&&(b.limitedEls.removeClass("fc-limited"),b.limitedEls=null)},renderMoreLink:function(b,c,d){var e=this,f=this.view;return a('<a class="fc-more"/>').text(this.getMoreLinkText(d.length)).on("click",function(g){var h=f.opt("eventLimitClick"),i=e.getCellDate(b,c),j=a(this),k=e.getCellEl(b,c),l=e.getCellSegs(b,c),m=e.resliceDaySegs(l,i),n=e.resliceDaySegs(d,i);"function"==typeof h&&(h=f.trigger("eventLimitClick",null,{date:i,dayEl:k,moreEl:j,segs:m,hiddenSegs:n},g)),"popover"===h?e.showSegPopover(b,c,j,m):"string"==typeof h&&f.calendar.zoomTo(i,h)})},showSegPopover:function(a,b,c,d){var e,f,g=this,h=this.view,i=c.parent();e=1==this.rowCnt?h.el:this.rowEls.eq(a),f={className:"fc-more-popover",content:this.renderSegPopoverContent(a,b,d),parentEl:this.el,top:e.offset().top,autoHide:!0,viewportConstrain:h.opt("popoverViewportConstrain"),hide:function(){g.segPopover.removeElement(),g.segPopover=null,g.popoverSegs=null}},this.isRTL?f.right=i.offset().left+i.outerWidth()+1:f.left=i.offset().left-1,this.segPopover=new nb(f),this.segPopover.show()},renderSegPopoverContent:function(b,c,d){var e,f=this.view,g=f.opt("theme"),h=this.getCellDate(b,c).format(f.opt("dayPopoverFormat")),i=a('<div class="fc-header '+f.widgetHeaderClass+'"><span class="fc-close '+(g?"ui-icon ui-icon-closethick":"fc-icon fc-icon-x")+'"></span><span class="fc-title">'+ca(h)+'</span><div class="fc-clear"/></div><div class="fc-body '+f.widgetContentClass+'"><div class="fc-event-container"></div></div>'),j=i.find(".fc-event-container");for(d=this.renderFgSegEls(d,!0),this.popoverSegs=d,e=0;e<d.length;e++)this.prepareHits(),d[e].hit=this.getCellHit(b,c),this.releaseHits(),j.append(d[e].el);return i},resliceDaySegs:function(b,c){var d=a.map(b,function(a){return a.event}),e=c.clone(),f=e.clone().add(1,"days"),g={start:e,end:f};return b=this.eventsToSegs(d,function(a){var b=K(a,g);return b?[b]:[]}),this.sortEventSegs(b),b},getMoreLinkText:function(a){var b=this.view.opt("eventLimitText");return"function"==typeof b?b(a):"+"+a+" "+b},getCellSegs:function(a,b,c){for(var d,e=this.rowStructs[a].segMatrix,f=c||0,g=[];f<e.length;)d=e[f][b],d&&g.push(d),f++;return g}});var vb=Va.TimeGrid=sb.extend(tb,{slotDuration:null,snapDuration:null,snapsPerSlot:null,minTime:null,maxTime:null,labelFormat:null,labelInterval:null,colEls:null,slatContainerEl:null,slatEls:null,nowIndicatorEls:null,colCoordCache:null,slatCoordCache:null,constructor:function(){sb.apply(this,arguments),this.processOptions()},renderDates:function(){this.el.html(this.renderHtml()),this.colEls=this.el.find(".fc-day"),this.slatContainerEl=this.el.find(".fc-slats"),this.slatEls=this.slatContainerEl.find("tr"),this.colCoordCache=new ob({els:this.colEls,isHorizontal:!0}),this.slatCoordCache=new ob({els:this.slatEls,isVertical:!0}),this.renderContentSkeleton()},renderHtml:function(){return'<div class="fc-bg"><table>'+this.renderBgTrHtml(0)+'</table></div><div class="fc-slats"><table>'+this.renderSlatRowHtml()+"</table></div>"},renderSlatRowHtml:function(){for(var a,c,d,e=this.view,f=this.isRTL,g="",h=b.duration(+this.minTime);h<this.maxTime;)a=this.start.clone().time(h),c=ha(R(h,this.labelInterval)),d='<td class="fc-axis fc-time '+e.widgetContentClass+'" '+e.axisStyleAttr()+">"+(c?"<span>"+ca(a.format(this.labelFormat))+"</span>":"")+"</td>",g+='<tr data-time="'+a.format("HH:mm:ss")+'"'+(c?"":' class="fc-minor"')+">"+(f?"":d)+'<td class="'+e.widgetContentClass+'"/>'+(f?d:"")+"</tr>",h.add(this.slotDuration);return g},processOptions:function(){var c,d=this.view,e=d.opt("slotDuration"),f=d.opt("snapDuration");e=b.duration(e),f=f?b.duration(f):e,this.slotDuration=e,this.snapDuration=f,this.snapsPerSlot=e/f,this.minResizeDuration=f,this.minTime=b.duration(d.opt("minTime")),this.maxTime=b.duration(d.opt("maxTime")),c=d.opt("slotLabelFormat"),a.isArray(c)&&(c=c[c.length-1]),this.labelFormat=c||d.opt("axisFormat")||d.opt("smallTimeFormat"),c=d.opt("slotLabelInterval"),this.labelInterval=c?b.duration(c):this.computeLabelInterval(e)},computeLabelInterval:function(a){var c,d,e;for(c=Mb.length-1;c>=0;c--)if(d=b.duration(Mb[c]),e=R(d,a),ha(e)&&e>1)return d;return b.duration(a)},computeEventTimeFormat:function(){return this.view.opt("noMeridiemTimeFormat")},computeDisplayEventEnd:function(){return!0},prepareHits:function(){this.colCoordCache.build(),this.slatCoordCache.build()},releaseHits:function(){this.colCoordCache.clear()},queryHit:function(a,b){var c=this.snapsPerSlot,d=this.colCoordCache,e=this.slatCoordCache,f=d.getHorizontalIndex(a),g=e.getVerticalIndex(b);if(null!=f&&null!=g){var h=e.getTopOffset(g),i=e.getHeight(g),j=(b-h)/i,k=Math.floor(j*c),l=g*c+k,m=h+k/c*i,n=h+(k+1)/c*i;return{col:f,snap:l,component:this,left:d.getLeftOffset(f),right:d.getRightOffset(f),top:m,bottom:n}}},getHitSpan:function(a){var b,c=this.getCellDate(0,a.col),d=this.computeSnapTime(a.snap);return c.time(d),b=c.clone().add(this.snapDuration),{start:c,end:b}},getHitEl:function(a){return this.colEls.eq(a.col)},rangeUpdated:function(){this.updateDayTable()},computeSnapTime:function(a){return b.duration(this.minTime+this.snapDuration*a)},spanToSegs:function(a){var b,c=this.sliceRangeByTimes(a);for(b=0;b<c.length;b++)this.isRTL?c[b].col=this.daysPerRow-1-c[b].dayIndex:c[b].col=c[b].dayIndex;return c},sliceRangeByTimes:function(a){var b,c,d,e,f=[];for(c=0;c<this.daysPerRow;c++)d=this.dayDates[c].clone(),e={start:d.clone().time(this.minTime),end:d.clone().time(this.maxTime)},b=K(a,e),b&&(b.dayIndex=c,f.push(b));return f},updateSize:function(a){this.slatCoordCache.build(),a&&this.updateSegVerticals([].concat(this.fgSegs||[],this.bgSegs||[],this.businessSegs||[]))},getTotalSlatHeight:function(){return this.slatContainerEl.outerHeight()},computeDateTop:function(a,c){return this.computeTimeTop(b.duration(a-c.clone().stripTime()))},computeTimeTop:function(a){var b,c,d=this.slatEls.length,e=(a-this.minTime)/this.slotDuration;return e=Math.max(0,e),e=Math.min(d,e),b=Math.floor(e),b=Math.min(b,d-1),c=e-b,this.slatCoordCache.getTopPosition(b)+this.slatCoordCache.getHeight(b)*c},renderDrag:function(a,b){return b?this.renderEventLocationHelper(a,b):void this.renderHighlight(this.eventToSpan(a))},unrenderDrag:function(){this.unrenderHelper(),this.unrenderHighlight()},renderEventResize:function(a,b){return this.renderEventLocationHelper(a,b)},unrenderEventResize:function(){this.unrenderHelper()},renderHelper:function(a,b){return this.renderHelperSegs(this.eventToSegs(a),b)},unrenderHelper:function(){this.unrenderHelperSegs()},renderBusinessHours:function(){var a=this.view.calendar.getBusinessHoursEvents(),b=this.eventsToSegs(a);this.renderBusinessSegs(b)},unrenderBusinessHours:function(){this.unrenderBusinessSegs()},getNowIndicatorUnit:function(){return"minute"},renderNowIndicator:function(b){var c,d=this.spanToSegs({start:b,end:b}),e=this.computeDateTop(b,b),f=[];for(c=0;c<d.length;c++)f.push(a('<div class="fc-now-indicator fc-now-indicator-line"></div>').css("top",e).appendTo(this.colContainerEls.eq(d[c].col))[0]);d.length>0&&f.push(a('<div class="fc-now-indicator fc-now-indicator-arrow"></div>').css("top",e).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=a(f)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},renderSelection:function(a){this.view.opt("selectHelper")?this.renderEventLocationHelper(a):this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHelper(),this.unrenderHighlight()},renderHighlight:function(a){this.renderHighlightSegs(this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderHighlightSegs()}});vb.mixin({colContainerEls:null,fgContainerEls:null,bgContainerEls:null,helperContainerEls:null,highlightContainerEls:null,businessContainerEls:null,fgSegs:null,bgSegs:null,helperSegs:null,highlightSegs:null,businessSegs:null,renderContentSkeleton:function(){var b,c,d="";for(b=0;b<this.colCnt;b++)d+='<td><div class="fc-content-col"><div class="fc-event-container fc-helper-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>';c=a('<div class="fc-content-skeleton"><table><tr>'+d+"</tr></table></div>"),this.colContainerEls=c.find(".fc-content-col"),this.helperContainerEls=c.find(".fc-helper-container"),this.fgContainerEls=c.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=c.find(".fc-bgevent-container"),this.highlightContainerEls=c.find(".fc-highlight-container"),this.businessContainerEls=c.find(".fc-business-container"),this.bookendCells(c.find("tr")),this.el.append(c)},renderFgSegs:function(a){return a=this.renderFgSegsIntoContainers(a,this.fgContainerEls),this.fgSegs=a,a},unrenderFgSegs:function(){this.unrenderNamedSegs("fgSegs")},renderHelperSegs:function(b,c){var d,e,f,g=[];for(b=this.renderFgSegsIntoContainers(b,this.helperContainerEls),d=0;d<b.length;d++)e=b[d],c&&c.col===e.col&&(f=c.el,e.el.css({left:f.css("left"),right:f.css("right"),"margin-left":f.css("margin-left"),"margin-right":f.css("margin-right")})),g.push(e.el[0]);return this.helperSegs=b,a(g)},unrenderHelperSegs:function(){this.unrenderNamedSegs("helperSegs")},renderBgSegs:function(a){return a=this.renderFillSegEls("bgEvent",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.bgContainerEls),this.bgSegs=a,a},unrenderBgSegs:function(){this.unrenderNamedSegs("bgSegs")},renderHighlightSegs:function(a){a=this.renderFillSegEls("highlight",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.highlightContainerEls),this.highlightSegs=a},unrenderHighlightSegs:function(){this.unrenderNamedSegs("highlightSegs")},renderBusinessSegs:function(a){a=this.renderFillSegEls("businessHours",a),this.updateSegVerticals(a),this.attachSegsByCol(this.groupSegsByCol(a),this.businessContainerEls),this.businessSegs=a},unrenderBusinessSegs:function(){this.unrenderNamedSegs("businessSegs")},groupSegsByCol:function(a){var b,c=[];for(b=0;b<this.colCnt;b++)c.push([]);for(b=0;b<a.length;b++)c[a[b].col].push(a[b]);return c},attachSegsByCol:function(a,b){var c,d,e;for(c=0;c<this.colCnt;c++)for(d=a[c],e=0;e<d.length;e++)b.eq(c).append(d[e].el)},unrenderNamedSegs:function(a){var b,c=this[a];if(c){for(b=0;b<c.length;b++)c[b].el.remove();this[a]=null}},renderFgSegsIntoContainers:function(a,b){var c,d;for(a=this.renderFgSegEls(a),c=this.groupSegsByCol(a),d=0;d<this.colCnt;d++)this.updateFgSegCoords(c[d]);return this.attachSegsByCol(c,b),a},fgSegHtml:function(a,b){var c,d,e,f=this.view,g=a.event,h=f.isEventDraggable(g),i=!b&&a.isStart&&f.isEventResizableFromStart(g),j=!b&&a.isEnd&&f.isEventResizableFromEnd(g),k=this.getSegClasses(a,h,i||j),l=ea(this.getSegSkinCss(a));return k.unshift("fc-time-grid-event","fc-v-event"),f.isMultiDayEvent(g)?(a.isStart||a.isEnd)&&(c=this.getEventTimeText(a),d=this.getEventTimeText(a,"LT"),e=this.getEventTimeText(a,null,!1)):(c=this.getEventTimeText(g),d=this.getEventTimeText(g,"LT"),e=this.getEventTimeText(g,null,!1)),'<a class="'+k.join(" ")+'"'+(g.url?' href="'+ca(g.url)+'"':"")+(l?' style="'+l+'"':"")+'><div class="fc-content">'+(c?'<div class="fc-time" data-start="'+ca(e)+'" data-full="'+ca(d)+'"><span>'+ca(c)+"</span></div>":"")+(g.title?'<div class="fc-title">'+ca(g.title)+"</div>":"")+'</div><div class="fc-bg"/>'+(j?'<div class="fc-resizer fc-end-resizer" />':"")+"</a>"},updateSegVerticals:function(a){this.computeSegVerticals(a),this.assignSegVerticals(a)},computeSegVerticals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.top=this.computeDateTop(c.start,c.start),c.bottom=this.computeDateTop(c.end,c.start)},assignSegVerticals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.el.css(this.generateSegVerticalCss(c))},generateSegVerticalCss:function(a){return{top:a.top,bottom:-a.bottom}},updateFgSegCoords:function(a){this.computeSegVerticals(a),this.computeFgSegHorizontals(a),this.assignSegVerticals(a),this.assignFgSegHorizontals(a)},computeFgSegHorizontals:function(a){var b,c,d;if(this.sortEventSegs(a),b=Ka(a),La(b),c=b[0]){for(d=0;d<c.length;d++)Ma(c[d]);for(d=0;d<c.length;d++)this.computeFgSegForwardBack(c[d],0,0)}},computeFgSegForwardBack:function(a,b,c){var d,e=a.forwardSegs;if(void 0===a.forwardCoord)for(e.length?(this.sortForwardSegs(e),this.computeFgSegForwardBack(e[0],b+1,c),a.forwardCoord=e[0].backwardCoord):a.forwardCoord=1,a.backwardCoord=a.forwardCoord-(a.forwardCoord-c)/(b+1),d=0;d<e.length;d++)this.computeFgSegForwardBack(e[d],0,a.forwardCoord)},sortForwardSegs:function(a){a.sort(ia(this,"compareForwardSegs"))},compareForwardSegs:function(a,b){return b.forwardPressure-a.forwardPressure||(a.backwardCoord||0)-(b.backwardCoord||0)||this.compareEventSegs(a,b)},assignFgSegHorizontals:function(a){var b,c;for(b=0;b<a.length;b++)c=a[b],c.el.css(this.generateFgSegHorizontalCss(c)),c.bottom-c.top<30&&c.el.addClass("fc-short")},generateFgSegHorizontalCss:function(a){var b,c,d=this.view.opt("slotEventOverlap"),e=a.backwardCoord,f=a.forwardCoord,g=this.generateSegVerticalCss(a);return d&&(f=Math.min(1,e+2*(f-e))),this.isRTL?(b=1-f,c=e):(b=e,c=1-f),g.zIndex=a.level+1,g.left=100*b+"%",g.right=100*c+"%",d&&a.forwardPressure&&(g[this.isRTL?"marginLeft":"marginRight"]=20),g}});var wb=Va.View=xa.extend(kb,lb,{type:null,name:null,title:null,calendar:null,options:null,el:null,displaying:null,isSkeletonRendered:!1,isEventsRendered:!1,start:null,end:null,intervalStart:null,intervalEnd:null,intervalDuration:null,intervalUnit:null,isRTL:!1,isSelected:!1,selectedEvent:null,eventOrderSpecs:null,widgetHeaderClass:null,widgetContentClass:null,highlightStateClass:null,nextDayThreshold:null,isHiddenDayHash:null,isNowIndicatorRendered:null,initialNowDate:null,initialNowQueriedMs:null,nowIndicatorTimeoutID:null,nowIndicatorIntervalID:null,constructor:function(a,c,d,e){this.calendar=a,this.type=this.name=c,this.options=d,this.intervalDuration=e||b.duration(1,"day"),this.nextDayThreshold=b.duration(this.opt("nextDayThreshold")),this.initThemingProps(),this.initHiddenDays(),this.isRTL=this.opt("isRTL"),this.eventOrderSpecs=G(this.opt("eventOrder")),this.initialize()},initialize:function(){},opt:function(a){return this.options[a]},trigger:function(a,b){var c=this.calendar;return c.trigger.apply(c,[a,b||this].concat(Array.prototype.slice.call(arguments,2),[this]))},setDate:function(a){this.setRange(this.computeRange(a))},setRange:function(b){a.extend(this,b),this.updateTitle()},computeRange:function(a){var b,c,d=O(this.intervalDuration),e=a.clone().startOf(d),f=e.clone().add(this.intervalDuration);return/year|month|week|day/.test(d)?(e.stripTime(),f.stripTime()):(e.hasTime()||(e=this.calendar.time(0)),f.hasTime()||(f=this.calendar.time(0))),b=e.clone(),b=this.skipHiddenDays(b),c=f.clone(),c=this.skipHiddenDays(c,-1,!0),{intervalUnit:d,intervalStart:e,intervalEnd:f,start:b,end:c}},computePrevDate:function(a){return this.massageCurrentDate(a.clone().startOf(this.intervalUnit).subtract(this.intervalDuration),-1)},computeNextDate:function(a){return this.massageCurrentDate(a.clone().startOf(this.intervalUnit).add(this.intervalDuration))},massageCurrentDate:function(a,b){return this.intervalDuration.as("days")<=1&&this.isHiddenDay(a)&&(a=this.skipHiddenDays(a,b),a.startOf("day")),a},updateTitle:function(){this.title=this.computeTitle()},computeTitle:function(){return this.formatRange({start:this.calendar.applyTimezone(this.intervalStart),end:this.calendar.applyTimezone(this.intervalEnd)},this.opt("titleFormat")||this.computeTitleFormat(),this.opt("titleRangeSeparator"))},computeTitleFormat:function(){return"year"==this.intervalUnit?"YYYY":"month"==this.intervalUnit?this.opt("monthYearFormat"):this.intervalDuration.as("days")>1?"ll":"LL"},formatRange:function(a,b,c){var d=a.end;return d.hasTime()||(d=d.clone().subtract(1)),sa(a.start,d,b,c,this.opt("isRTL"))},setElement:function(a){this.el=a,this.bindGlobalHandlers()},removeElement:function(){this.clear(),this.isSkeletonRendered&&(this.unrenderSkeleton(),this.isSkeletonRendered=!1),this.unbindGlobalHandlers(),this.el.remove()},display:function(b){var c=this,d=null;return this.displaying&&(d=this.queryScroll()),this.calendar.freezeContentHeight(),this.clear().then(function(){return c.displaying=a.when(c.displayView(b)).then(function(){c.forceScroll(c.computeInitialScroll(d)),c.calendar.unfreezeContentHeight(),c.triggerRender()})})},clear:function(){var b=this,c=this.displaying;return c?c.then(function(){return b.displaying=null,b.clearEvents(),b.clearView()}):a.when()},displayView:function(a){this.isSkeletonRendered||(this.renderSkeleton(),this.isSkeletonRendered=!0),a&&this.setDate(a),this.render&&this.render(),this.renderDates(),this.updateSize(),this.renderBusinessHours(),this.startNowIndicator()},clearView:function(){this.unselect(),this.stopNowIndicator(),this.triggerUnrender(),this.unrenderBusinessHours(),this.unrenderDates(),this.destroy&&this.destroy()},renderSkeleton:function(){},unrenderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},triggerRender:function(){this.trigger("viewRender",this,this,this.el)},triggerUnrender:function(){this.trigger("viewDestroy",this,this,this.el)},bindGlobalHandlers:function(){this.listenTo(a(document),"mousedown",this.handleDocumentMousedown),this.listenTo(a(document),"touchstart",this.processUnselect)},unbindGlobalHandlers:function(){this.stopListeningTo(a(document))},initThemingProps:function(){var a=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=a+"-widget-header",this.widgetContentClass=a+"-widget-content",this.highlightStateClass=a+"-state-highlight"},renderBusinessHours:function(){},unrenderBusinessHours:function(){},startNowIndicator:function(){var a,c,d,e=this;this.opt("nowIndicator")&&(a=this.getNowIndicatorUnit(),a&&(c=ia(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,this.renderNowIndicator(this.initialNowDate),this.isNowIndicatorRendered=!0,d=this.initialNowDate.clone().startOf(a).add(1,a)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){e.nowIndicatorTimeoutID=null,c(),d=+b.duration(1,a),d=Math.max(100,d),e.nowIndicatorIntervalID=setInterval(c,d)},d)))},updateNowIndicator:function(){this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)))},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearTimeout(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},updateSize:function(a){var b;a&&(b=this.queryScroll()),this.updateHeight(a),this.updateWidth(a),this.updateNowIndicator(),a&&this.setScroll(b)},updateWidth:function(a){},updateHeight:function(a){var b=this.calendar;this.setHeight(b.getSuggestedViewHeight(),b.isHeightAuto())},setHeight:function(a,b){},computeInitialScroll:function(a){return 0},queryScroll:function(){},setScroll:function(a){},forceScroll:function(a){var b=this;this.setScroll(a),setTimeout(function(){b.setScroll(a)},0)},displayEvents:function(a){var b=this.queryScroll();this.clearEvents(),this.renderEvents(a),this.isEventsRendered=!0,this.setScroll(b),this.triggerEventRender()},clearEvents:function(){var a;this.isEventsRendered&&(a=this.queryScroll(),this.triggerEventUnrender(),this.destroyEvents&&this.destroyEvents(),this.unrenderEvents(),this.setScroll(a),this.isEventsRendered=!1)},renderEvents:function(a){},unrenderEvents:function(){},triggerEventRender:function(){this.renderedEventSegEach(function(a){this.trigger("eventAfterRender",a.event,a.event,a.el)}),this.trigger("eventAfterAllRender")},triggerEventUnrender:function(){this.renderedEventSegEach(function(a){this.trigger("eventDestroy",a.event,a.event,a.el)})},resolveEventEl:function(b,c){var d=this.trigger("eventRender",b,b,c);return d===!1?c=null:d&&d!==!0&&(c=a(d)),c},showEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","")},a)},hideEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","hidden")},a)},renderedEventSegEach:function(a,b){var c,d=this.getEventSegs();for(c=0;c<d.length;c++)b&&d[c].event._id!==b._id||d[c].el&&a.call(this,d[c])},getEventSegs:function(){return[]},isEventDraggable:function(a){var b=a.source||{};return ba(a.startEditable,b.startEditable,this.opt("eventStartEditable"),a.editable,b.editable,this.opt("editable"))},reportEventDrop:function(a,b,c,d,e){var f=this.calendar,g=f.mutateEvent(a,b,c),h=function(){g.undo(),f.reportEventChange()};this.triggerEventDrop(a,g.dateDelta,h,d,e),f.reportEventChange()},triggerEventDrop:function(a,b,c,d,e){this.trigger("eventDrop",d[0],a,b,c,e,{})},reportExternalDrop:function(b,c,d,e,f){var g,h,i=b.eventProps;i&&(g=a.extend({},i,c),h=this.calendar.renderEvent(g,b.stick)[0]),this.triggerExternalDrop(h,c,d,e,f)},triggerExternalDrop:function(a,b,c,d,e){this.trigger("drop",c[0],b.start,d,e),a&&this.trigger("eventReceive",null,a)},renderDrag:function(a,b){},unrenderDrag:function(){},isEventResizableFromStart:function(a){return this.opt("eventResizableFromStart")&&this.isEventResizable(a)},isEventResizableFromEnd:function(a){return this.isEventResizable(a)},isEventResizable:function(a){var b=a.source||{};return ba(a.durationEditable,b.durationEditable,this.opt("eventDurationEditable"),a.editable,b.editable,this.opt("editable"))},reportEventResize:function(a,b,c,d,e){var f=this.calendar,g=f.mutateEvent(a,b,c),h=function(){g.undo(),f.reportEventChange()};this.triggerEventResize(a,g.durationDelta,h,d,e),f.reportEventChange()},triggerEventResize:function(a,b,c,d,e){this.trigger("eventResize",d[0],a,b,c,e,{})},select:function(a,b){this.unselect(b),this.renderSelection(a),this.reportSelection(a,b)},renderSelection:function(a){},reportSelection:function(a,b){this.isSelected=!0,this.triggerSelect(a,b)},triggerSelect:function(a,b){this.trigger("select",null,this.calendar.applyTimezone(a.start),this.calendar.applyTimezone(a.end),b)},unselect:function(a){this.isSelected&&(this.isSelected=!1,this.destroySelection&&this.destroySelection(),this.unrenderSelection(),this.trigger("unselect",null,a))},unrenderSelection:function(){},selectEvent:function(a){this.selectedEvent&&this.selectedEvent===a||(this.unselectEvent(),this.renderedEventSegEach(function(a){a.el.addClass("fc-selected")},a),this.selectedEvent=a)},unselectEvent:function(){this.selectedEvent&&(this.renderedEventSegEach(function(a){a.el.removeClass("fc-selected")},this.selectedEvent),this.selectedEvent=null)},isEventSelected:function(a){return this.selectedEvent&&this.selectedEvent._id===a._id},handleDocumentMousedown:function(a){
+u(a)&&this.processUnselect(a)},processUnselect:function(a){this.processRangeUnselect(a),this.processEventUnselect(a)},processRangeUnselect:function(b){var c;this.isSelected&&this.opt("unselectAuto")&&(c=this.opt("unselectCancel"),c&&a(b.target).closest(c).length||this.unselect(b))},processEventUnselect:function(b){this.selectedEvent&&(a(b.target).closest(".fc-selected").length||this.unselectEvent())},triggerDayClick:function(a,b,c){this.trigger("dayClick",b,this.calendar.applyTimezone(a.start),c)},initHiddenDays:function(){var b,c=this.opt("hiddenDays")||[],d=[],e=0;for(this.opt("weekends")===!1&&c.push(0,6),b=0;7>b;b++)(d[b]=-1!==a.inArray(b,c))||e++;if(!e)throw"invalid hiddenDays";this.isHiddenDayHash=d},isHiddenDay:function(a){return b.isMoment(a)&&(a=a.day()),this.isHiddenDayHash[a]},skipHiddenDays:function(a,b,c){var d=a.clone();for(b=b||1;this.isHiddenDayHash[(d.day()+(c?b:0)+7)%7];)d.add(b,"days");return d},computeDayRange:function(a){var b,c=a.start.clone().stripTime(),d=a.end,e=null;return d&&(e=d.clone().stripTime(),b=+d.time(),b&&b>=this.nextDayThreshold&&e.add(1,"days")),(!d||c>=e)&&(e=c.clone().add(1,"days")),{start:c,end:e}},isMultiDayEvent:function(a){var b=this.computeDayRange(a);return b.end.diff(b.start,"days")>1}}),xb=Va.Scroller=xa.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(a){a=a||{},this.overflowX=a.overflowX||a.overflow||"auto",this.overflowY=a.overflowY||a.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=a('<div class="fc-scroller"></div>')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(a){var b=this.overflowX,c=this.overflowY;a=a||this.getScrollbarWidths(),"auto"===b&&(b=a.top||a.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===c&&(c=a.left||a.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":b,"overflow-y":c})},setHeight:function(a){this.scrollEl.height(a)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(a){this.scrollEl.scrollTop(a)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return q(this.scrollEl)}}),yb=Va.Calendar=xa.extend({dirDefaults:null,langDefaults:null,overrides:null,options:null,viewSpecCache:null,view:null,header:null,loadingLevel:0,constructor:Pa,initialize:function(){},initOptions:function(a){var b,e,f,g;a=d(a),b=a.lang,e=zb[b],e||(b=yb.defaults.lang,e=zb[b]||{}),f=ba(a.isRTL,e.isRTL,yb.defaults.isRTL),g=f?yb.rtlDefaults:{},this.dirDefaults=g,this.langDefaults=e,this.overrides=a,this.options=c([yb.defaults,g,e,a]),Qa(this.options),this.viewSpecCache={}},getViewSpec:function(a){var b=this.viewSpecCache;return b[a]||(b[a]=this.buildViewSpec(a))},getUnitViewSpec:function(b){var c,d,e;if(-1!=a.inArray(b,$a))for(c=this.header.getViewsWithButtons(),a.each(Va.views,function(a){c.push(a)}),d=0;d<c.length;d++)if(e=this.getViewSpec(c[d]),e&&e.singleUnit==b)return e},buildViewSpec:function(a){for(var d,e,f,g,h=this.overrides.views||{},i=[],j=[],k=[],l=a;l;)d=Wa[l],e=h[l],l=null,"function"==typeof d&&(d={"class":d}),d&&(i.unshift(d),j.unshift(d.defaults||{}),f=f||d.duration,l=l||d.type),e&&(k.unshift(e),f=f||e.duration,l=l||e.type);return d=W(i),d.type=a,d["class"]?(f&&(f=b.duration(f),f.valueOf()&&(d.duration=f,g=O(f),1===f.as(g)&&(d.singleUnit=g,k.unshift(h[g]||{})))),d.defaults=c(j),d.overrides=c(k),this.buildViewSpecOptions(d),this.buildViewSpecButtonText(d,a),d):!1},buildViewSpecOptions:function(a){a.options=c([yb.defaults,a.defaults,this.dirDefaults,this.langDefaults,this.overrides,a.overrides]),Qa(a.options)},buildViewSpecButtonText:function(a,b){function c(c){var d=c.buttonText||{};return d[b]||(a.singleUnit?d[a.singleUnit]:null)}a.buttonTextOverride=c(this.overrides)||a.overrides.buttonText,a.buttonTextDefault=c(this.langDefaults)||c(this.dirDefaults)||a.defaults.buttonText||c(yb.defaults)||(a.duration?this.humanizeDuration(a.duration):null)||b},instantiateView:function(a){var b=this.getViewSpec(a);return new b["class"](this,a,b.options,b.duration)},isValidViewType:function(a){return Boolean(this.getViewSpec(a))},pushLoading:function(){this.loadingLevel++||this.trigger("loading",null,!0,this.view)},popLoading:function(){--this.loadingLevel||this.trigger("loading",null,!1,this.view)},buildSelectSpan:function(a,b){var c,d=this.moment(a).stripZone();return c=b?this.moment(b).stripZone():d.hasTime()?d.clone().add(this.defaultTimedEventDuration):d.clone().add(this.defaultAllDayEventDuration),{start:d,end:c}}});yb.mixin(kb),yb.defaults={titleRangeSeparator:" — ",monthYearFormat:"MMMM YYYY",defaultTimedEventDuration:"02:00:00",defaultAllDayEventDuration:{days:1},forceEventDuration:!1,nextDayThreshold:"09:00:00",defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberTitle:"W",weekNumberCalculation:"local",scrollTime:"06:00:00",lazyFetching:!0,startParam:"start",endParam:"end",timezoneParam:"timezone",timezone:!1,isRTL:!1,buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day"},buttonIcons:{prev:"left-single-arrow",next:"right-single-arrow",prevYear:"left-double-arrow",nextYear:"right-double-arrow"},theme:!1,themeButtonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e",prevYear:"seek-prev",nextYear:"seek-next"},dragOpacity:.75,dragRevertDuration:500,dragScroll:!0,unselectAuto:!0,dropAccept:"*",eventOrder:"title",eventLimit:!1,eventLimitText:"more",eventLimitClick:"popover",dayPopoverFormat:"LL",handleWindowResize:!0,windowResizeDelay:200,longPressDelay:1e3},yb.englishDefaults={dayPopoverFormat:"dddd, MMMM D"},yb.rtlDefaults={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"right-single-arrow",next:"left-single-arrow",prevYear:"right-double-arrow",nextYear:"left-double-arrow"},themeButtonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w",nextYear:"seek-prev",prevYear:"seek-next"}};var zb=Va.langs={};Va.datepickerLang=function(b,c,d){var e=zb[b]||(zb[b]={});e.isRTL=d.isRTL,e.weekNumberTitle=d.weekHeader,a.each(Ab,function(a,b){e[a]=b(d)}),a.datepicker&&(a.datepicker.regional[c]=a.datepicker.regional[b]=d,a.datepicker.regional.en=a.datepicker.regional[""],a.datepicker.setDefaults(d))},Va.lang=function(b,d){var e,f;e=zb[b]||(zb[b]={}),d&&(e=zb[b]=c([e,d])),f=Ra(b),a.each(Bb,function(a,b){null==e[a]&&(e[a]=b(f,e))}),yb.defaults.lang=b};var Ab={buttonText:function(a){return{prev:da(a.prevText),next:da(a.nextText),today:da(a.currentText)}},monthYearFormat:function(a){return a.showMonthAfterYear?"YYYY["+a.yearSuffix+"] MMMM":"MMMM YYYY["+a.yearSuffix+"]"}},Bb={dayOfMonthFormat:function(a,b){var c=a.longDateFormat("l");return c=c.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g,""),b.isRTL?c+=" ddd":c="ddd "+c,c},mediumTimeFormat:function(a){return a.longDateFormat("LT").replace(/\s*a$/i,"a")},smallTimeFormat:function(a){return a.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"a")},extraSmallTimeFormat:function(a){return a.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"t")},hourFormat:function(a){return a.longDateFormat("LT").replace(":mm","").replace(/(\Wmm)$/,"").replace(/\s*a$/i,"a")},noMeridiemTimeFormat:function(a){return a.longDateFormat("LT").replace(/\s*a$/i,"")}},Cb={smallDayDateFormat:function(a){return a.isRTL?"D dd":"dd D"},weekFormat:function(a){return a.isRTL?"w[ "+a.weekNumberTitle+"]":"["+a.weekNumberTitle+" ]w"},smallWeekFormat:function(a){return a.isRTL?"w["+a.weekNumberTitle+"]":"["+a.weekNumberTitle+"]w"}};Va.lang("en",yb.englishDefaults),Va.sourceNormalizers=[],Va.sourceFetchers=[];var Db={dataType:"json",cache:!1},Eb=1;yb.prototype.normalizeEvent=function(a){},yb.prototype.getPeerEvents=function(a,b){var c,d,e=this.getEventCache(),f=[];for(c=0;c<e.length;c++)d=e[c],b&&b._id===d._id||f.push(d);return f};var Fb=Va.BasicView=wb.extend({scroller:null,dayGridClass:ub,dayGrid:null,dayNumbersVisible:!1,weekNumbersVisible:!1,weekNumberWidth:null,headContainerEl:null,headRowEl:null,initialize:function(){this.dayGrid=this.instantiateDayGrid(),this.scroller=new xb({overflowX:"hidden",overflowY:"auto"})},instantiateDayGrid:function(){var a=this.dayGridClass.extend(Gb);return new a(this)},setRange:function(a){wb.prototype.setRange.call(this,a),this.dayGrid.breakOnWeeks=/year|month|week/.test(this.intervalUnit),this.dayGrid.setRange(a)},computeRange:function(a){var b=wb.prototype.computeRange.call(this,a);return/year|month/.test(b.intervalUnit)&&(b.start.startOf("week"),b.start=this.skipHiddenDays(b.start),b.end.weekday()&&(b.end.add(1,"week").startOf("week"),b.end=this.skipHiddenDays(b.end,-1,!0))),b},renderDates:function(){this.dayNumbersVisible=this.dayGrid.rowCnt>1,this.weekNumbersVisible=this.opt("weekNumbers"),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.weekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var b=this.scroller.el.addClass("fc-day-grid-container"),c=a('<div class="fc-day-grid" />').appendTo(b);this.el.find(".fc-body > tr > td").append(b),this.dayGrid.setElement(c),this.dayGrid.renderDates(this.hasRigidRows())},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()),this.headRowEl=this.headContainerEl.find(".fc-row")},unrenderDates:function(){this.dayGrid.unrenderDates(),this.dayGrid.removeElement(),this.scroller.destroy()},renderBusinessHours:function(){this.dayGrid.renderBusinessHours()},renderSkeletonHtml:function(){return'<table><thead class="fc-head"><tr><td class="fc-head-container '+this.widgetHeaderClass+'"></td></tr></thead><tbody class="fc-body"><tr><td class="'+this.widgetContentClass+'"></td></tr></tbody></table>'},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var a=this.opt("eventLimit");return a&&"number"!=typeof a},updateWidth:function(){this.weekNumbersVisible&&(this.weekNumberWidth=k(this.el.find(".fc-week-number")))},setHeight:function(a,b){var c,d,g=this.opt("eventLimit");this.scroller.clear(),f(this.headRowEl),this.dayGrid.removeSegPopover(),g&&"number"==typeof g&&this.dayGrid.limitRows(g),c=this.computeScrollerHeight(a),this.setGridHeight(c,b),g&&"number"!=typeof g&&this.dayGrid.limitRows(g),b||(this.scroller.setHeight(c),d=this.scroller.getScrollbarWidths(),(d.left||d.right)&&(e(this.headRowEl,d),c=this.computeScrollerHeight(a),this.scroller.setHeight(c)),this.scroller.lockOverflow(d))},computeScrollerHeight:function(a){return a-l(this.el,this.scroller.el)},setGridHeight:function(a,b){b?j(this.dayGrid.rowEls):i(this.dayGrid.rowEls,a,!0)},queryScroll:function(){return this.scroller.getScrollTop()},setScroll:function(a){this.scroller.setScrollTop(a)},prepareHits:function(){this.dayGrid.prepareHits()},releaseHits:function(){this.dayGrid.releaseHits()},queryHit:function(a,b){return this.dayGrid.queryHit(a,b)},getHitSpan:function(a){return this.dayGrid.getHitSpan(a)},getHitEl:function(a){return this.dayGrid.getHitEl(a)},renderEvents:function(a){this.dayGrid.renderEvents(a),this.updateHeight()},getEventSegs:function(){return this.dayGrid.getEventSegs()},unrenderEvents:function(){this.dayGrid.unrenderEvents()},renderDrag:function(a,b){return this.dayGrid.renderDrag(a,b)},unrenderDrag:function(){this.dayGrid.unrenderDrag()},renderSelection:function(a){this.dayGrid.renderSelection(a)},unrenderSelection:function(){this.dayGrid.unrenderSelection()}}),Gb={renderHeadIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<th class="fc-week-number '+a.widgetHeaderClass+'" '+a.weekNumberStyleAttr()+"><span>"+ca(a.opt("weekNumberTitle"))+"</span></th>":""},renderNumberIntroHtml:function(a){var b=this.view;return b.weekNumbersVisible?'<td class="fc-week-number" '+b.weekNumberStyleAttr()+"><span>"+this.getCellDate(a,0).format("w")+"</span></td>":""},renderBgIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<td class="fc-week-number '+a.widgetContentClass+'" '+a.weekNumberStyleAttr()+"></td>":""},renderIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'<td class="fc-week-number" '+a.weekNumberStyleAttr()+"></td>":""}},Hb=Va.MonthView=Fb.extend({computeRange:function(a){var b,c=Fb.prototype.computeRange.call(this,a);return this.isFixedWeeks()&&(b=Math.ceil(c.end.diff(c.start,"weeks",!0)),c.end.add(6-b,"weeks")),c},setGridHeight:function(a,b){b=b||"variable"===this.opt("weekMode"),b&&(a*=this.rowCnt/6),i(this.dayGrid.rowEls,a,!b)},isFixedWeeks:function(){var a=this.opt("weekMode");return a?"fixed"===a:this.opt("fixedWeekCount")}});Wa.basic={"class":Fb},Wa.basicDay={type:"basic",duration:{days:1}},Wa.basicWeek={type:"basic",duration:{weeks:1}},Wa.month={"class":Hb,duration:{months:1},defaults:{fixedWeekCount:!0}};var Ib=Va.AgendaView=wb.extend({scroller:null,timeGridClass:vb,timeGrid:null,dayGridClass:ub,dayGrid:null,axisWidth:null,headContainerEl:null,noScrollRowEls:null,bottomRuleEl:null,initialize:function(){this.timeGrid=this.instantiateTimeGrid(),this.opt("allDaySlot")&&(this.dayGrid=this.instantiateDayGrid()),this.scroller=new xb({overflowX:"hidden",overflowY:"auto"})},instantiateTimeGrid:function(){var a=this.timeGridClass.extend(Jb);return new a(this)},instantiateDayGrid:function(){var a=this.dayGridClass.extend(Kb);return new a(this)},setRange:function(a){wb.prototype.setRange.call(this,a),this.timeGrid.setRange(a),this.dayGrid&&this.dayGrid.setRange(a)},renderDates:function(){this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var b=this.scroller.el.addClass("fc-time-grid-container"),c=a('<div class="fc-time-grid" />').appendTo(b);this.el.find(".fc-body > tr > td").append(b),this.timeGrid.setElement(c),this.timeGrid.renderDates(),this.bottomRuleEl=a('<hr class="fc-divider '+this.widgetHeaderClass+'"/>').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)")},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml())},unrenderDates:function(){this.timeGrid.unrenderDates(),this.timeGrid.removeElement(),this.dayGrid&&(this.dayGrid.unrenderDates(),this.dayGrid.removeElement()),this.scroller.destroy()},renderSkeletonHtml:function(){return'<table><thead class="fc-head"><tr><td class="fc-head-container '+this.widgetHeaderClass+'"></td></tr></thead><tbody class="fc-body"><tr><td class="'+this.widgetContentClass+'">'+(this.dayGrid?'<div class="fc-day-grid"/><hr class="fc-divider '+this.widgetHeaderClass+'"/>':"")+"</td></tr></tbody></table>"},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},renderBusinessHours:function(){this.timeGrid.renderBusinessHours(),this.dayGrid&&this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.timeGrid.unrenderBusinessHours(),this.dayGrid&&this.dayGrid.unrenderBusinessHours()},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},renderNowIndicator:function(a){this.timeGrid.renderNowIndicator(a)},unrenderNowIndicator:function(){this.timeGrid.unrenderNowIndicator()},updateSize:function(a){this.timeGrid.updateSize(a),wb.prototype.updateSize.call(this,a)},updateWidth:function(){this.axisWidth=k(this.el.find(".fc-axis"))},setHeight:function(a,b){var c,d,g;this.bottomRuleEl.hide(),this.scroller.clear(),f(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.removeSegPopover(),c=this.opt("eventLimit"),c&&"number"!=typeof c&&(c=Lb),c&&this.dayGrid.limitRows(c)),b||(d=this.computeScrollerHeight(a),this.scroller.setHeight(d),g=this.scroller.getScrollbarWidths(),(g.left||g.right)&&(e(this.noScrollRowEls,g),d=this.computeScrollerHeight(a),this.scroller.setHeight(d)),this.scroller.lockOverflow(g),this.timeGrid.getTotalSlatHeight()<d&&this.bottomRuleEl.show())},computeScrollerHeight:function(a){return a-l(this.el,this.scroller.el)},computeInitialScroll:function(){var a=b.duration(this.opt("scrollTime")),c=this.timeGrid.computeTimeTop(a);return c=Math.ceil(c),c&&c++,c},queryScroll:function(){return this.scroller.getScrollTop()},setScroll:function(a){this.scroller.setScrollTop(a)},prepareHits:function(){this.timeGrid.prepareHits(),this.dayGrid&&this.dayGrid.prepareHits()},releaseHits:function(){this.timeGrid.releaseHits(),this.dayGrid&&this.dayGrid.releaseHits()},queryHit:function(a,b){var c=this.timeGrid.queryHit(a,b);return!c&&this.dayGrid&&(c=this.dayGrid.queryHit(a,b)),c},getHitSpan:function(a){return a.component.getHitSpan(a)},getHitEl:function(a){return a.component.getHitEl(a)},renderEvents:function(a){var b,c,d=[],e=[],f=[];for(c=0;c<a.length;c++)a[c].allDay?d.push(a[c]):e.push(a[c]);b=this.timeGrid.renderEvents(e),this.dayGrid&&(f=this.dayGrid.renderEvents(d)),this.updateHeight()},getEventSegs:function(){return this.timeGrid.getEventSegs().concat(this.dayGrid?this.dayGrid.getEventSegs():[])},unrenderEvents:function(){this.timeGrid.unrenderEvents(),this.dayGrid&&this.dayGrid.unrenderEvents()},renderDrag:function(a,b){return a.start.hasTime()?this.timeGrid.renderDrag(a,b):this.dayGrid?this.dayGrid.renderDrag(a,b):void 0},unrenderDrag:function(){this.timeGrid.unrenderDrag(),this.dayGrid&&this.dayGrid.unrenderDrag()},renderSelection:function(a){a.start.hasTime()||a.end.hasTime()?this.timeGrid.renderSelection(a):this.dayGrid&&this.dayGrid.renderSelection(a)},unrenderSelection:function(){this.timeGrid.unrenderSelection(),this.dayGrid&&this.dayGrid.unrenderSelection()}}),Jb={renderHeadIntroHtml:function(){var a,b=this.view;return b.opt("weekNumbers")?(a=this.start.format(b.opt("smallWeekFormat")),'<th class="fc-axis fc-week-number '+b.widgetHeaderClass+'" '+b.axisStyleAttr()+"><span>"+ca(a)+"</span></th>"):'<th class="fc-axis '+b.widgetHeaderClass+'" '+b.axisStyleAttr()+"></th>"},renderBgIntroHtml:function(){var a=this.view;return'<td class="fc-axis '+a.widgetContentClass+'" '+a.axisStyleAttr()+"></td>"},renderIntroHtml:function(){var a=this.view;return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"}},Kb={renderBgIntroHtml:function(){var a=this.view;return'<td class="fc-axis '+a.widgetContentClass+'" '+a.axisStyleAttr()+"><span>"+(a.opt("allDayHtml")||ca(a.opt("allDayText")))+"</span></td>"},renderIntroHtml:function(){var a=this.view;return'<td class="fc-axis" '+a.axisStyleAttr()+"></td>"}},Lb=5,Mb=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];return Wa.agenda={"class":Ib,defaults:{allDaySlot:!0,allDayText:"all-day",slotDuration:"00:30:00",minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0}},Wa.agendaDay={type:"agenda",duration:{days:1}},Wa.agendaWeek={type:"agenda",duration:{weeks:1}},Va}); \ No newline at end of file
diff --git a/library/fullcalendar/fullcalendar.print.css b/library/fullcalendar/fullcalendar.print.css
index e399f614a..11b823f74 100644
--- a/library/fullcalendar/fullcalendar.print.css
+++ b/library/fullcalendar/fullcalendar.print.css
@@ -1,7 +1,7 @@
/*!
- * FullCalendar v2.6.1 Print Stylesheet
+ * FullCalendar v2.7.3 Print Stylesheet
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
+ * (c) 2016 Adam Shaw
*/
/*
diff --git a/library/fullcalendar/gcal.js b/library/fullcalendar/gcal.js
index 98174ecb0..58b85c195 100644
--- a/library/fullcalendar/gcal.js
+++ b/library/fullcalendar/gcal.js
@@ -1,7 +1,7 @@
/*!
- * FullCalendar v2.6.1 Google Calendar Plugin
+ * FullCalendar v2.7.3 Google Calendar Plugin
* Docs & License: http://fullcalendar.io/
- * (c) 2015 Adam Shaw
+ * (c) 2016 Adam Shaw
*/
(function(factory) {
@@ -136,10 +136,10 @@ function transformOptions(sourceOptions, start, end, timezone, calendar) {
}
else if (data.items) {
$.each(data.items, function(i, entry) {
- var url = entry.htmlLink;
+ var url = entry.htmlLink || null;
// make the URLs for each event show times in the correct timezone
- if (timezoneArg) {
+ if (timezoneArg && url !== null) {
url = injectQsComponent(url, 'ctz=' + timezoneArg);
}
diff --git a/library/fullcalendar/lang-all.js b/library/fullcalendar/lang-all.js
index b38d942f6..7d7e25192 100644
--- a/library/fullcalendar/lang-all.js
+++ b/library/fullcalendar/lang-all.js
@@ -1,4 +1,4 @@
-!function(a){"function"==typeof define&&define.amd?define(["jquery","moment"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("moment")):a(jQuery,moment)}(function(a,b){!function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}});return a}(),a.fullCalendar.datepickerLang("ar-ma","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},d=(b.defineLocale||b.lang).call(b,"ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return d}(),a.fullCalendar.datepickerLang("ar-sa","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("ar-tn","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},d=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},e={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},f=function(a){return function(b,c,f,g){var h=d(b),i=e[a][d(b)];return 2===h&&(i=i[c?0:1]),i.replace(/%d/i,b)}},g=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],h=(b.defineLocale||b.lang).call(b,"ar",{months:g,monthsShort:g,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:f("s"),m:f("m"),mm:f("m"),h:f("h"),hh:f("h"),d:f("d"),dd:f("d"),M:f("M"),MM:f("M"),y:f("y"),yy:f("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return h}(),a.fullCalendar.datepickerLang("ar","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}});return a}(),a.fullCalendar.datepickerLang("bg","bg",{closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(a){return"+още "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return("w"===b||"W"===b)&&(c="a"),a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més"})}(),function(){!function(){"use strict";function a(a){return a>1&&5>a&&1!==~~(a/10)}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"pár sekund":"pár sekundami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(a(b)?"minuty":"minut"):f+"minutami";case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(a(b)?"hodiny":"hodin"):f+"hodinami";case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(a(b)?"dny":"dní"):f+"dny";case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(a(b)?"měsíce":"měsíců"):f+"měsíci";case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(a(b)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),f=(b.defineLocale||b.lang).call(b,"cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),shortMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(e),longMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(d),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("cs","cs",{closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(a){return"+další: "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("da","da",{closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere"})}(),function(){!function(){"use strict";function a(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}var c=(b.defineLocale||b.lang).call(b,"de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("de-at","de",{closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("de-at",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(a){return"+ weitere "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}var c=(b.defineLocale||b.lang).call(b,"de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("de","de",{closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("de",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(a){return"+ weitere "+a}})}(),function(){!function(){"use strict";function a(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}var c=(b.defineLocale||b.lang).call(b,"el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(b,c){var d=this._calendarEl[b],e=c&&c.hours();return a(d)&&(d=d.apply(c)),d.replace("{}",e%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sept_Oct_Nov_Dec".split("_"),monthsParse:[/^jan/i,/^feb/i,/^mar/i,/^apr/i,/^may/i,/^jun/i,/^jul/i,/^aug/i,/^sep/i,/^oct/i,/^nov/i,/^dec/i],longMonthsParse:[/^january$/i,/^february$/i,/^march$/i,/^april$/i,/^may$/i,/^june$/i,/^july$/i,/^august$/i,/^september$/i,/^october$/i,/^november$/i,/^december$/i],shortMonthsParse:[/^jan$/i,/^feb$/i,/^mar$/i,/^apr$/i,/^may$/i,/^jun$/i,/^jul$/i,/^aug/i,/^sept?$/i,/^oct$/i,/^nov$/i,/^dec$/i],weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-au")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sept_Oct_Nov_Dec".split("_"),monthsParse:[/^jan/i,/^feb/i,/^mar/i,/^apr/i,/^may/i,/^jun/i,/^jul/i,/^aug/i,/^sep/i,/^oct/i,/^nov/i,/^dec/i],longMonthsParse:[/^january$/i,/^february$/i,/^march$/i,/^april$/i,/^may$/i,/^june$/i,/^july$/i,/^august$/i,/^september$/i,/^october$/i,/^november$/i,/^december$/i],shortMonthsParse:[/^jan$/i,/^feb$/i,/^mar$/i,/^apr$/i,/^may$/i,/^jun$/i,/^jul$/i,/^aug/i,/^sept?$/i,/^oct$/i,/^nov$/i,/^dec$/i],weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"D MMMM, YYYY",LLL:"D MMMM, YYYY h:mm A",LLLL:"dddd, D MMMM, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}});return a}(),a.fullCalendar.lang("en-ca")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sept_Oct_Nov_Dec".split("_"),monthsParse:[/^jan/i,/^feb/i,/^mar/i,/^apr/i,/^may/i,/^jun/i,/^jul/i,/^aug/i,/^sep/i,/^oct/i,/^nov/i,/^dec/i],longMonthsParse:[/^january$/i,/^february$/i,/^march$/i,/^april$/i,/^may$/i,/^june$/i,/^july$/i,/^august$/i,/^september$/i,/^october$/i,/^november$/i,/^december$/i],shortMonthsParse:[/^jan$/i,/^feb$/i,/^mar$/i,/^apr$/i,/^may$/i,/^jun$/i,/^jul$/i,/^aug/i,/^sept?$/i,/^oct$/i,/^nov$/i,/^dec$/i],weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-gb")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsParse:[/^jan/i,/^feb/i,/^mar/i,/^apr/i,/^may/i,/^jun/i,/^jul/i,/^aug/i,/^sep/i,/^oct/i,/^nov/i,/^dec/i],longMonthsParse:[/^january$/i,/^february$/i,/^march$/i,/^april$/i,/^may$/i,/^june$/i,/^july$/i,/^august$/i,/^september$/i,/^october$/i,/^november$/i,/^december$/i],shortMonthsParse:[/^jan$/i,/^feb$/i,/^mar$/i,/^apr$/i,/^may$/i,/^jun$/i,/^jul$/i,/^aug/i,/^sept?$/i,/^oct$/i,/^nov$/i,/^dec$/i],weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.lang("en-ie")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sept_Oct_Nov_Dec".split("_"),monthsParse:[/^jan/i,/^feb/i,/^mar/i,/^apr/i,/^may/i,/^jun/i,/^jul/i,/^aug/i,/^sep/i,/^oct/i,/^nov/i,/^dec/i],
-longMonthsParse:[/^january$/i,/^february$/i,/^march$/i,/^april$/i,/^may$/i,/^june$/i,/^july$/i,/^august$/i,/^september$/i,/^october$/i,/^november$/i,/^december$/i],shortMonthsParse:[/^jan$/i,/^feb$/i,/^mar$/i,/^apr$/i,/^may$/i,/^jun$/i,/^jul$/i,/^aug/i,/^sept?$/i,/^oct$/i,/^nov$/i,/^dec$/i],weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-nz")}(),function(){!function(){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),d=(b.defineLocale||b.lang).call(b,"es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(b,d){return/-MMM-/.test(d)?c[b.month()]:a[b.month()]},weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("es","es",{closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo<br/>el día",eventLimitText:"más"})}(),function(){!function(){"use strict";var a={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},d=(b.defineLocale||b.lang).call(b,"fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}});return d}(),a.fullCalendar.datepickerLang("fa","fa",{closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(a){return"بیش از "+a}})}(),function(){!function(){"use strict";function a(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]],f=(b.defineLocale||b.lang).call(b,"fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("fi","fi",{closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}});return a}(),a.fullCalendar.datepickerLang("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr-ca",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("fr-ch","fr-CH",{closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr-ch",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}}});return a}(),a.fullCalendar.datepickerLang("he","he",{closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("he",{defaultButtonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},weekNumberTitle:"שבוע",allDayText:"כל היום",eventLimitText:"אחר"})}(),function(){!function(){"use strict";var a={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},d=(b.defineLocale||b.lang).call(b,"hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?4>a?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}});return d}(),a.fullCalendar.datepickerLang("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(a){return"+अधिक "+a}})}(),function(){!function(){"use strict";function a(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}var c=(b.defineLocale||b.lang).call(b,"hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("hr","hr",{closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("hr",{buttonText:{month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(a){return"+ još "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" "),e=(b.defineLocale||b.lang).call(b,"hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return e}(),a.fullCalendar.datepickerLang("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),a.fullCalendar.lang("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return a}(),a.fullCalendar.datepickerLang("id","id",{closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari<br/>penuh",eventLimitText:"lebih"})}(),function(){!function(){"use strict";function a(a){return a%100===11?!0:a%10===1?!1:!0}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return a(b)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return a(b)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return a(b)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return a(b)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return a(b)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}var d=(b.defineLocale||b.lang).call(b,"is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("is","is",{closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan<br/>daginn",eventLimitText:"meira"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("it","it",{closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il<br/>giorno",eventLimitText:function(a){return"+altri "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}});return a}(),a.fullCalendar.datepickerLang("ja","ja",{closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(a){return"他 "+a+" 件"}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",
-sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}});return a}(),a.fullCalendar.datepickerLang("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),a.fullCalendar.lang("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개"})}(),function(){!function(){"use strict";function a(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function c(a,b,c,d){return b?e(c)[0]:d?e(c)[1]:e(c)[2]}function d(a){return a%10===0||a>10&&20>a}function e(a){return g[a].split("_")}function f(a,b,f,g){var h=a+" ";return 1===a?h+c(a,b,f[0],g):b?h+(d(a)?e(f)[1]:e(f)[0]):g?h+e(f)[1]:h+(d(a)?e(f)[1]:e(f)[2])}var g={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},h=(b.defineLocale||b.lang).call(b,"lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_")},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,m:c,mm:f,h:c,hh:f,d:c,dd:f,M:c,MM:f,y:c,yy:f},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}});return h}(),a.fullCalendar.datepickerLang("lt","lt",{closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),a.fullCalendar.lang("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau"})}(),function(){!function(){"use strict";function a(a,b,c){return c?b%10===1&&11!==b?a[2]:a[3]:b%10===1&&11!==b?a[0]:a[1]}function c(b,c,d){return b+" "+a(f[d],b,c)}function d(b,c,d){return a(f[d],b,c)}function e(a,b){return b?"dažas sekundes":"dažām sekundēm"}var f={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},g=(b.defineLocale||b.lang).call(b,"lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:e,m:d,mm:c,h:d,hh:c,d:d,dd:c,M:d,MM:c,y:d,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return g}(),a.fullCalendar.datepickerLang("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},allDayText:"Visu dienu",eventLimitText:function(a){return"+vēl "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"for %s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("nb","nb",{closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("nb",{buttonText:{month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til"})}(),function(){!function(){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),d=(b.defineLocale||b.lang).call(b,"nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(b,d){return/-MMM-/.test(d)?c[b.month()]:a[b.month()]},weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("nl",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra"})}(),function(){!function(){"use strict";function a(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function c(b,c,d){var e=b+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(a(b)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(a(b)?"godziny":"godzin");case"MM":return e+(a(b)?"miesiące":"miesięcy");case"yy":return e+(a(b)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),f=(b.defineLocale||b.lang).call(b,"pl",{months:function(a,b){return""===b?"("+e[a.month()]+"|"+d[a.month()]+")":/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("pl","pl",{closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"});return a}(),a.fullCalendar.datepickerLang("pt-br","pt-BR",{closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(a){return"mais +"+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais"})}(),function(){!function(){"use strict";function a(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}var c=(b.defineLocale||b.lang).call(b,"ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:a,h:"o oră",hh:a,d:"o zi",dd:a,M:"o lună",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("ro","ro",{closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(a){return"+alte "+a}})}(),function(){!function(){"use strict";function a(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(b,c,d){var e={mm:c?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":b+" "+a(e[d],+b)}var d=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[й|я]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],e=(b.defineLocale||b.lang).call(b,"ru",{months:{format:"Января_Февраля_Марта_Апреля_Мая_Июня_Июля_Августа_Сентября_Октября_Ноября_Декабря".split("_"),standalone:"Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь".split("_")},monthsShort:{format:"янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек".split("_"),standalone:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_")},weekdays:{standalone:"Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота".split("_"),format:"Воскресенье_Понедельник_Вторник_Среду_Четверг_Пятницу_Субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"Вс_Пн_Вт_Ср_Чт_Пт_Сб".split("_"),weekdaysMin:"Вс_Пн_Вт_Ср_Чт_Пт_Сб".split("_"),monthsParse:d,longMonthsParse:d,shortMonthsParse:d,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}});return e}(),a.fullCalendar.datepickerLang("ru","ru",{closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(a){return"+ ещё "+a}})}(),function(){!function(){"use strict";function a(a){return a>1&&5>a}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(a(b)?"minúty":"minút"):f+"minútami";case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(a(b)?"hodiny":"hodín"):f+"hodinami";case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(a(b)?"dni":"dní"):f+"dňami";case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(a(b)?"mesiace":"mesiacov"):f+"mesiacmi";case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(a(b)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),f=(b.defineLocale||b.lang).call(b,"sk",{months:d,monthsShort:e,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("sk","sk",{closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(a){return"+ďalšie: "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":5>a?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":5>a?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":5>a?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":5>a?b||d?"leta":"leti":b||d?"let":"leti"}}var c=(b.defineLocale||b.lang).call(b,"sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sl","sl",{closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več"})}(),function(){!function(){"use strict";var a={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(b,c,d){var e=a.words[d];return 1===d.length?c?e[0]:e[1]:b+" "+a.correctGrammaticalCase(b,e)}},c=(b.defineLocale||b.lang).call(b,"sr-cyrl",{months:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","мар.","апр.","мај","јун","јул","авг.","сеп.","окт.","нов.","дец."],weekdays:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","уто.","сре.","чет.","пет.","суб."],weekdaysMin:["не","по","ут","ср","че","пе","су"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"дан",dd:a.translate,M:"месец",MM:a.translate,y:"годину",yy:a.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sr-cyrl","sr",{closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sr-cyrl",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(a){return"+ још "+a}})}(),function(){!function(){"use strict";var a={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(b,c,d){var e=a.words[d];return 1===d.length?c?e[0]:e[1]:b+" "+a.correctGrammaticalCase(b,e)}},c=(b.defineLocale||b.lang).call(b,"sr",{months:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mar.","apr.","maj","jun","jul","avg.","sep.","okt.","nov.","dec."],weekdays:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","uto.","sre.","čet.","pet.","sub."],weekdaysMin:["ne","po","ut","sr","če","pe","su"],longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mesec",MM:a.translate,y:"godinu",yy:a.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sr","sr",{closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],
-dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sr",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(a){return"+ још "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("sv","sv",{closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sv",{buttonText:{month:"Månad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),longDateFormat:{LT:"H นาฬิกา m นาที",LTS:"H นาฬิกา m นาที s วินาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H นาฬิกา m นาที",LLLL:"วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}});return a}(),a.fullCalendar.datepickerLang("th","th",{closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม"})}(),function(){!function(){"use strict";var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},c=(b.defineLocale||b.lang).call(b,"tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(b){if(0===b)return b+"'ıncı";var c=b%10,d=b%100-c,e=b>=100?100:null;return b+(a[c]||a[d]||a[e])},week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("tr","tr",{closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla"})}(),function(){!function(){"use strict";function a(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(b,c,d){var e={mm:c?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:c?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":b+" "+a(e[d],+b)}function d(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function e(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var f=(b.defineLocale||b.lang).call(b,"uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:d,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:e("[Сьогодні "),nextDay:e("[Завтра "),lastDay:e("[Вчора "),nextWeek:e("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return e("[Минулої] dddd [").call(this);case 1:case 2:case 4:return e("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}});return f}(),a.fullCalendar.datepickerLang("uk","uk",{closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(a){return"+ще "+a+"..."}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("vi","vi",{closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(a){return"+ thêm "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var a,c;return a=b().startOf("week"),c=this.unix()-a.unix()>=604800?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var a,c;return a=b().startOf("week"),c=this.unix()<a.unix()?"[上]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},sameElse:"LL"},ordinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("zh-cn","zh-CN",{closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("zh-cn",{buttonText:{month:"月",week:"周",day:"日",list:"日程"},allDayText:"全天",eventLimitText:function(a){return"另外 "+a+" 个"}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d分鐘",h:"一小時",hh:"%d小時",d:"一天",dd:"%d天",M:"一個月",MM:"%d個月",y:"一年",yy:"%d年"}});return a}(),a.fullCalendar.datepickerLang("zh-tw","zh-TW",{closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"待辦事項"},allDayText:"全天",eventLimitText:"更多"})}(),(b.locale||b.lang).call(b,"en"),a.fullCalendar.lang("en"),a.datepicker&&a.datepicker.setDefaults(a.datepicker.regional[""])}); \ No newline at end of file
+!function(a){"function"==typeof define&&define.amd?define(["jquery","moment"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("moment")):a(jQuery,moment)}(function(a,b){!function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}});return a}(),a.fullCalendar.datepickerLang("ar-ma","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},d=(b.defineLocale||b.lang).call(b,"ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return d}(),a.fullCalendar.datepickerLang("ar-sa","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("ar-tn","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},c={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},d=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5},e={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},f=function(a){return function(b,c,f,g){var h=d(b),i=e[a][d(b)];return 2===h&&(i=i[c?0:1]),i.replace(/%d/i,b)}},g=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],h=(b.defineLocale||b.lang).call(b,"ar",{months:g,monthsShort:g,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return 12>a?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:f("s"),m:f("m"),mm:f("m"),h:f("h"),hh:f("h"),d:f("d"),dd:f("d"),M:f("M"),MM:f("M"),y:f("y"),yy:f("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return h}(),a.fullCalendar.datepickerLang("ar","ar",{closeText:"إغلاق",prevText:"&#x3C;السابق",nextText:"التالي&#x3E;",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&20>c?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,doy:7}});return a}(),a.fullCalendar.datepickerLang("bg","bg",{closeText:"затвори",prevText:"&#x3C;назад",nextText:"напред&#x3E;",nextBigText:"&#x3E;&#x3E;",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(a){return"+още "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més"})}(),function(){!function(){"use strict";function a(a){return a>1&&5>a&&1!==~~(a/10)}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"pár sekund":"pár sekundami";case"m":return c?"minuta":e?"minutu":"minutou";case"mm":return c||e?f+(a(b)?"minuty":"minut"):f+"minutami";case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(a(b)?"hodiny":"hodin"):f+"hodinami";case"d":return c||e?"den":"dnem";case"dd":return c||e?f+(a(b)?"dny":"dní"):f+"dny";case"M":return c||e?"měsíc":"měsícem";case"MM":return c||e?f+(a(b)?"měsíce":"měsíců"):f+"měsíci";case"y":return c||e?"rok":"rokem";case"yy":return c||e?f+(a(b)?"roky":"let"):f+"lety"}}var d="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),e="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),f=(b.defineLocale||b.lang).call(b,"cs",{months:d,monthsShort:e,monthsParse:function(a,b){var c,d=[];for(c=0;12>c;c++)d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(d,e),shortMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(e),longMonthsParse:function(a){var b,c=[];for(b=0;12>b;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(d),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("cs","cs",{closeText:"Zavřít",prevText:"&#x3C;Dříve",nextText:"Později&#x3E;",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(a){return"+další: "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("da","da",{closeText:"Luk",prevText:"&#x3C;Forrige",nextText:"Næste&#x3E;",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere"})}(),function(){!function(){"use strict";function a(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}var c=(b.defineLocale||b.lang).call(b,"de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("de-at","de",{closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("de-at",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(a){return"+ weitere "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}var c=(b.defineLocale||b.lang).call(b,"de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("de","de",{closeText:"Schließen",prevText:"&#x3C;Zurück",nextText:"Vor&#x3E;",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("de",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(a){return"+ weitere "+a}})}(),function(){!function(){"use strict";function a(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}var c=(b.defineLocale||b.lang).call(b,"el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(b,c){var d=this._calendarEl[b],e=c&&c.hours();return a(d)&&(d=d.apply(c)),d.replace("{}",e%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}});return c}(),a.fullCalendar.datepickerLang("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-au")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}});return a}(),a.fullCalendar.lang("en-ca")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-gb")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.lang("en-ie")}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("en-nz")}(),function(){!function(){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),d=(b.defineLocale||b.lang).call(b,"es",{
+months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(b,d){return/-MMM-/.test(d)?c[b.month()]:a[b.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("es","es",{closeText:"Cerrar",prevText:"&#x3C;Ant",nextText:"Sig&#x3E;",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo<br/>el día",eventLimitText:"más"})}(),function(){!function(){"use strict";var a={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},c={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"},d=(b.defineLocale||b.lang).call(b,"fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return 12>a?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return c[a]}).replace(/،/g,",")},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}});return d}(),a.fullCalendar.datepickerLang("fa","fa",{closeText:"بستن",prevText:"&#x3C;قبلی",nextText:"بعدی&#x3E;",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(a){return"بیش از "+a}})}(),function(){!function(){"use strict";function a(a,b,d,e){var f="";switch(d){case"s":return e?"muutaman sekunnin":"muutama sekunti";case"m":return e?"minuutin":"minuutti";case"mm":f=e?"minuutin":"minuuttia";break;case"h":return e?"tunnin":"tunti";case"hh":f=e?"tunnin":"tuntia";break;case"d":return e?"päivän":"päivä";case"dd":f=e?"päivän":"päivää";break;case"M":return e?"kuukauden":"kuukausi";case"MM":f=e?"kuukauden":"kuukautta";break;case"y":return e?"vuoden":"vuosi";case"yy":f=e?"vuoden":"vuotta"}return f=c(a,e)+" "+f}function c(a,b){return 10>a?b?e[a]:d[a]:a}var d="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),e=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",d[7],d[8],d[9]],f=(b.defineLocale||b.lang).call(b,"fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("fi","fi",{closeText:"Sulje",prevText:"&#xAB;Edellinen",nextText:"Seuraava&#xBB;",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}});return a}(),a.fullCalendar.datepickerLang("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr-ca",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("fr-ch","fr-CH",{closeText:"Fermer",prevText:"&#x3C;Préc",nextText:"Suiv&#x3E;",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr-ch",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("fr",{buttonText:{month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return 5>a?"לפנות בוקר":10>a?"בבוקר":12>a?c?'לפנה"צ':"לפני הצהריים":18>a?c?'אחה"צ':"אחרי הצהריים":"בערב"}});return a}(),a.fullCalendar.datepickerLang("he","he",{closeText:"סגור",prevText:"&#x3C;הקודם",nextText:"הבא&#x3E;",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("he",{defaultButtonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},weekNumberTitle:"שבוע",allDayText:"כל היום",eventLimitText:"אחר"})}(),function(){!function(){"use strict";var a={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},c={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},d=(b.defineLocale||b.lang).call(b,"hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return c[a]})},postformat:function(b){return b.replace(/\d/g,function(b){return a[b]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?4>a?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return 4>a?"रात":10>a?"सुबह":17>a?"दोपहर":20>a?"शाम":"रात"},week:{dow:0,doy:6}});return d}(),a.fullCalendar.datepickerLang("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(a){return"+अधिक "+a}})}(),function(){!function(){"use strict";function a(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}var c=(b.defineLocale||b.lang).call(b,"hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("hr","hr",{closeText:"Zatvori",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("hr",{buttonText:{month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(a){return"+ još "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function c(a){return(a?"":"[múlt] ")+"["+d[this.day()]+"] LT[-kor]"}var d="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" "),e=(b.defineLocale||b.lang).call(b,"hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return 12>a?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return c.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return c.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return e}(),a.fullCalendar.datepickerLang("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),a.fullCalendar.lang("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return 11>a?"pagi":15>a?"siang":19>a?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return a}(),a.fullCalendar.datepickerLang("id","id",{closeText:"Tutup",prevText:"&#x3C;mundur",nextText:"maju&#x3E;",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari<br/>penuh",eventLimitText:"lebih"})}(),function(){!function(){"use strict";function a(a){return a%100===11?!0:a%10!==1}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return c?"mínúta":"mínútu";case"mm":return a(b)?f+(c||e?"mínútur":"mínútum"):c?f+"mínúta":f+"mínútu";case"hh":return a(b)?f+(c||e?"klukkustundir":"klukkustundum"):f+"klukkustund";case"d":return c?"dagur":e?"dag":"degi";case"dd":return a(b)?c?f+"dagar":f+(e?"daga":"dögum"):c?f+"dagur":f+(e?"dag":"degi");case"M":return c?"mánuður":e?"mánuð":"mánuði";case"MM":return a(b)?c?f+"mánuðir":f+(e?"mánuði":"mánuðum"):c?f+"mánuður":f+(e?"mánuð":"mánuði");case"y":return c||e?"ár":"ári";case"yy":return a(b)?f+(c||e?"ár":"árum"):f+(c||e?"ár":"ári")}}var d=(b.defineLocale||b.lang).call(b,"is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("is","is",{closeText:"Loka",prevText:"&#x3C; Fyrri",nextText:"Næsti &#x3E;",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan<br/>daginn",eventLimitText:"meira"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("it","it",{closeText:"Chiudi",prevText:"&#x3C;Prec",nextText:"Succ&#x3E;",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il<br/>giorno",eventLimitText:function(a){return"+altri "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return 12>a?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}});return a}(),a.fullCalendar.datepickerLang("ja","ja",{closeText:"閉じる",prevText:"&#x3C;前",nextText:"次&#x3E;",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(a){return"他 "+a+" 件"}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"일분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}});return a}(),a.fullCalendar.datepickerLang("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),a.fullCalendar.lang("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개"})}(),function(){!function(){"use strict";function a(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function c(a,b,c,d){return b?e(c)[0]:d?e(c)[1]:e(c)[2]}function d(a){return a%10===0||a>10&&20>a}function e(a){return g[a].split("_")}function f(a,b,f,g){var h=a+" ";return 1===a?h+c(a,b,f[0],g):b?h+(d(a)?e(f)[1]:e(f)[0]):g?h+e(f)[1]:h+(d(a)?e(f)[1]:e(f)[2])}var g={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",
+h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},h=(b.defineLocale||b.lang).call(b,"lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_")},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:a,m:c,mm:f,h:c,hh:f,d:c,dd:f,M:c,MM:f,y:c,yy:f},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,doy:4}});return h}(),a.fullCalendar.datepickerLang("lt","lt",{closeText:"Uždaryti",prevText:"&#x3C;Atgal",nextText:"Pirmyn&#x3E;",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),a.fullCalendar.lang("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau"})}(),function(){!function(){"use strict";function a(a,b,c){return c?b%10===1&&11!==b?a[2]:a[3]:b%10===1&&11!==b?a[0]:a[1]}function c(b,c,d){return b+" "+a(f[d],b,c)}function d(b,c,d){return a(f[d],b,c)}function e(a,b){return b?"dažas sekundes":"dažām sekundēm"}var f={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},g=(b.defineLocale||b.lang).call(b,"lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:e,m:d,mm:c,h:d,hh:c,d:d,dd:c,M:d,MM:c,y:d,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return g}(),a.fullCalendar.datepickerLang("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},allDayText:"Visu dienu",eventLimitText:function(a){return"+vēl "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("nb","nb",{closeText:"Lukk",prevText:"&#xAB;Forrige",nextText:"Neste&#xBB;",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("nb",{buttonText:{month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til"})}(),function(){!function(){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),d=(b.defineLocale||b.lang).call(b,"nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(b,d){return/-MMM-/.test(d)?c[b.month()]:a[b.month()]},monthsParseExact:!0,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,doy:4}});return d}(),a.fullCalendar.datepickerLang("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("nl",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra"})}(),function(){!function(){"use strict";function a(a){return 5>a%10&&a%10>1&&~~(a/10)%10!==1}function c(b,c,d){var e=b+" ";switch(d){case"m":return c?"minuta":"minutę";case"mm":return e+(a(b)?"minuty":"minut");case"h":return c?"godzina":"godzinę";case"hh":return e+(a(b)?"godziny":"godzin");case"MM":return e+(a(b)?"miesiące":"miesięcy");case"yy":return e+(a(b)?"lata":"lat")}}var d="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),e="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),f=(b.defineLocale||b.lang).call(b,"pl",{months:function(a,b){return""===b?"("+e[a.month()]+"|"+d[a.month()]+")":/D MMMM/.test(b)?e[a.month()]:d[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"nie_pon_wt_śr_czw_pt_sb".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:c,mm:c,h:c,hh:c,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:c,y:"rok",yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("pl","pl",{closeText:"Zamknij",prevText:"&#x3C;Poprzedni",nextText:"Następny&#x3E;",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"});return a}(),a.fullCalendar.datepickerLang("pt-br","pt-BR",{closeText:"Fechar",prevText:"&#x3C;Anterior",nextText:"Próximo&#x3E;",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(a){return"mais +"+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais"})}(),function(){!function(){"use strict";function a(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}var c=(b.defineLocale||b.lang).call(b,"ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:a,h:"o oră",hh:a,d:"o zi",dd:a,M:"o lună",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("ro","ro",{closeText:"Închide",prevText:"&#xAB; Luna precedentă",nextText:"Luna următoare &#xBB;",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(a){return"+alte "+a}})}(),function(){!function(){"use strict";function a(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(b,c,d){var e={mm:c?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===d?c?"минута":"минуту":b+" "+a(e[d],+b)}var d=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],e=(b.defineLocale||b.lang).call(b,"ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:d,longMonthsParse:d,shortMonthsParse:d,monthsRegex:/^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|сент\.|февр\.|нояб\.|июнь|янв.|июль|дек.|авг.|апр.|марта|мар[.т]|окт.|июн[яь]|июл[яь]|ма[яй])/i,monthsShortRegex:/^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|сент\.|февр\.|нояб\.|июнь|янв.|июль|дек.|авг.|апр.|марта|мар[.т]|окт.|июн[яь]|июл[яь]|ма[яй])/i,monthsStrictRegex:/^(сентябр[яь]|октябр[яь]|декабр[яь]|феврал[яь]|январ[яь]|апрел[яь]|августа?|ноябр[яь]|марта?|июн[яь]|июл[яь]|ма[яй])/i,monthsShortStrictRegex:/^(нояб\.|февр\.|сент\.|июль|янв\.|июн[яь]|мар[.т]|авг\.|апр\.|окт\.|дек\.|ма[яй])/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:c,mm:c,h:"час",hh:c,d:"день",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночи":12>a?"утра":17>a?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,doy:7}});return e}(),a.fullCalendar.datepickerLang("ru","ru",{closeText:"Закрыть",prevText:"&#x3C;Пред",nextText:"След&#x3E;",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(a){return"+ ещё "+a}})}(),function(){!function(){"use strict";function a(a){return a>1&&5>a}function c(b,c,d,e){var f=b+" ";switch(d){case"s":return c||e?"pár sekúnd":"pár sekundami";case"m":return c?"minúta":e?"minútu":"minútou";case"mm":return c||e?f+(a(b)?"minúty":"minút"):f+"minútami";case"h":return c?"hodina":e?"hodinu":"hodinou";case"hh":return c||e?f+(a(b)?"hodiny":"hodín"):f+"hodinami";case"d":return c||e?"deň":"dňom";case"dd":return c||e?f+(a(b)?"dni":"dní"):f+"dňami";case"M":return c||e?"mesiac":"mesiacom";case"MM":return c||e?f+(a(b)?"mesiace":"mesiacov"):f+"mesiacmi";case"y":return c||e?"rok":"rokom";case"yy":return c||e?f+(a(b)?"roky":"rokov"):f+"rokmi"}}var d="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),e="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),f=(b.defineLocale||b.lang).call(b,"sk",{months:d,monthsShort:e,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return f}(),a.fullCalendar.datepickerLang("sk","sk",{closeText:"Zavrieť",prevText:"&#x3C;Predchádzajúci",nextText:"Nasledujúci&#x3E;",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(a){return"+ďalšie: "+a}})}(),function(){!function(){"use strict";function a(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":5>a?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":5>a?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":5>a?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":5>a?b||d?"leta":"leti":b||d?"let":"leti"}}var c=(b.defineLocale||b.lang).call(b,"sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sl","sl",{closeText:"Zapri",prevText:"&#x3C;Prejšnji",nextText:"Naslednji&#x3E;",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več"})}(),function(){!function(){"use strict";var a={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(b,c,d){var e=a.words[d];return 1===d.length?c?e[0]:e[1]:b+" "+a.correctGrammaticalCase(b,e)}},c=(b.defineLocale||b.lang).call(b,"sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"дан",dd:a.translate,M:"месец",MM:a.translate,y:"годину",yy:a.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sr-cyrl","sr",{closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sr-cyrl",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(a){return"+ још "+a}})}(),function(){!function(){"use strict";var a={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&4>=a?b[1]:b[2]},translate:function(b,c,d){var e=a.words[d];return 1===d.length?c?e[0]:e[1]:b+" "+a.correctGrammaticalCase(b,e)}},c=(b.defineLocale||b.lang).call(b,"sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mesec",MM:a.translate,y:"godinu",yy:a.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("sr","sr",{closeText:"Затвори",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sr",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(a){return"+ још "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),
+monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("sv","sv",{closeText:"Stäng",prevText:"&#xAB;Förra",nextText:"Nästa&#xBB;",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("sv",{buttonText:{month:"Månad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till"})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H นาฬิกา m นาที",LTS:"H นาฬิกา m นาที s วินาที",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H นาฬิกา m นาที",LLLL:"วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return 12>a?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}});return a}(),a.fullCalendar.datepickerLang("th","th",{closeText:"ปิด",prevText:"&#xAB;&#xA0;ย้อน",nextText:"ถัดไป&#xA0;&#xBB;",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม"})}(),function(){!function(){"use strict";var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},c=(b.defineLocale||b.lang).call(b,"tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(b){if(0===b)return b+"'ıncı";var c=b%10,d=b%100-c,e=b>=100?100:null;return b+(a[c]||a[d]||a[e])},week:{dow:1,doy:7}});return c}(),a.fullCalendar.datepickerLang("tr","tr",{closeText:"kapat",prevText:"&#x3C;geri",nextText:"ileri&#x3e",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla"})}(),function(){!function(){"use strict";function a(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&4>=b%10&&(10>b%100||b%100>=20)?c[1]:c[2]}function c(b,c,d){var e={mm:c?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:c?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===d?c?"хвилина":"хвилину":"h"===d?c?"година":"годину":b+" "+a(e[d],+b)}function d(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function e(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var f=(b.defineLocale||b.lang).call(b,"uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:d,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:e("[Сьогодні "),nextDay:e("[Завтра "),lastDay:e("[Вчора "),nextWeek:e("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return e("[Минулої] dddd [").call(this);case 1:case 2:case 4:return e("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:c,mm:c,h:"годину",hh:c,d:"день",dd:c,M:"місяць",MM:c,y:"рік",yy:c},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return 4>a?"ночі":12>a?"ранку":17>a?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,doy:7}});return f}(),a.fullCalendar.datepickerLang("uk","uk",{closeText:"Закрити",prevText:"&#x3C;",nextText:"&#x3E;",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(a){return"+ще "+a+"..."}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return 12>a?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("vi","vi",{closeText:"Đóng",prevText:"&#x3C;Trước",nextText:"Tiếp&#x3E;",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),a.fullCalendar.lang("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(a){return"+ thêm "+a}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return 600>d?"凌晨":900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var a,c;return a=b().startOf("week"),c=this.diff(a,"days")>=7?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var a,c;return a=b().startOf("week"),c=this.unix()<a.unix()?"[上]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},sameElse:"LL"},ordinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}});return a}(),a.fullCalendar.datepickerLang("zh-cn","zh-CN",{closeText:"关闭",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("zh-cn",{buttonText:{month:"月",week:"周",day:"日",list:"日程"},allDayText:"全天",eventLimitText:function(a){return"另外 "+a+" 个"}})}(),function(){!function(){"use strict";var a=(b.defineLocale||b.lang).call(b,"zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return 900>d?"早上":1130>d?"上午":1230>d?"中午":1800>d?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1分鐘",mm:"%d分鐘",h:"1小時",hh:"%d小時",d:"1天",dd:"%d天",M:"1個月",MM:"%d個月",y:"1年",yy:"%d年"}});return a}(),a.fullCalendar.datepickerLang("zh-tw","zh-TW",{closeText:"關閉",prevText:"&#x3C;上月",nextText:"下月&#x3E;",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"}),a.fullCalendar.lang("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"待辦事項"},allDayText:"全天",eventLimitText:"更多"})}(),(b.locale||b.lang).call(b,"en"),a.fullCalendar.lang("en"),a.datepicker&&a.datepicker.setDefaults(a.datepicker.regional[""])}); \ No newline at end of file
diff --git a/util/hmessages.po b/util/hmessages.po
index 2ec494c7c..42cf092bb 100644
--- a/util/hmessages.po
+++ b/util/hmessages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-10 00:02-0700\n"
+"POT-Creation-Date: 2016-06-17 00:02-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,7 +21,7 @@ msgstr ""
msgid "parent"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2620
+#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2621
msgid "Collection"
msgstr ""
@@ -46,15 +46,16 @@ msgid "Schedule Outbox"
msgstr ""
#: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Module/Photos.php:798
-#: ../../Zotlabs/Module/Photos.php:1243 ../../Zotlabs/Lib/Apps.php:486
-#: ../../Zotlabs/Lib/Apps.php:561 ../../include/widgets.php:1505
-#: ../../include/conversation.php:1032
+#: ../../Zotlabs/Module/Photos.php:1243
+#: ../../Zotlabs/Module/Embedphotos.php:147 ../../Zotlabs/Lib/Apps.php:489
+#: ../../Zotlabs/Lib/Apps.php:564 ../../include/conversation.php:1035
+#: ../../include/widgets.php:1578
msgid "Unknown"
msgstr ""
#: ../../Zotlabs/Storage/Browser.php:226 ../../Zotlabs/Module/Fbrowser.php:85
-#: ../../Zotlabs/Lib/Apps.php:216 ../../include/nav.php:93
-#: ../../include/conversation.php:1639
+#: ../../Zotlabs/Lib/Apps.php:216 ../../include/conversation.php:1654
+#: ../../include/nav.php:93
msgid "Files"
msgstr ""
@@ -67,16 +68,17 @@ msgid "Shared"
msgstr ""
#: ../../Zotlabs/Storage/Browser.php:230 ../../Zotlabs/Storage/Browser.php:306
-#: ../../Zotlabs/Module/Blocks.php:156 ../../Zotlabs/Module/Layouts.php:182
+#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Layouts.php:184
#: ../../Zotlabs/Module/Menu.php:118 ../../Zotlabs/Module/New_channel.php:142
-#: ../../Zotlabs/Module/Webpages.php:186
+#: ../../Zotlabs/Module/Webpages.php:194
msgid "Create"
msgstr ""
#: ../../Zotlabs/Storage/Browser.php:231 ../../Zotlabs/Storage/Browser.php:308
#: ../../Zotlabs/Module/Cover_photo.php:357
#: ../../Zotlabs/Module/Photos.php:825 ../../Zotlabs/Module/Photos.php:1364
-#: ../../Zotlabs/Module/Profile_photo.php:368 ../../include/widgets.php:1518
+#: ../../Zotlabs/Module/Profile_photo.php:368
+#: ../../Zotlabs/Module/Embedphotos.php:159 ../../include/widgets.php:1591
msgid "Upload"
msgstr ""
@@ -101,34 +103,34 @@ msgstr ""
msgid "Last Modified"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:240 ../../Zotlabs/Module/Blocks.php:157
+#: ../../Zotlabs/Storage/Browser.php:240 ../../Zotlabs/Module/Blocks.php:160
#: ../../Zotlabs/Module/Editblock.php:109
#: ../../Zotlabs/Module/Connections.php:290
#: ../../Zotlabs/Module/Connections.php:310
#: ../../Zotlabs/Module/Editpost.php:84
-#: ../../Zotlabs/Module/Editlayout.php:113
+#: ../../Zotlabs/Module/Editlayout.php:114
#: ../../Zotlabs/Module/Editwebpage.php:146
-#: ../../Zotlabs/Module/Layouts.php:190 ../../Zotlabs/Module/Menu.php:112
+#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Menu.php:112
#: ../../Zotlabs/Module/Admin.php:2113 ../../Zotlabs/Module/Settings.php:652
-#: ../../Zotlabs/Module/Thing.php:260 ../../Zotlabs/Module/Webpages.php:187
-#: ../../Zotlabs/Lib/Apps.php:337 ../../Zotlabs/Lib/ThreadItem.php:106
-#: ../../include/channel.php:937 ../../include/channel.php:941
-#: ../../include/menu.php:108 ../../include/page_widgets.php:8
-#: ../../include/page_widgets.php:36
+#: ../../Zotlabs/Module/Thing.php:260 ../../Zotlabs/Module/Webpages.php:195
+#: ../../Zotlabs/Lib/ThreadItem.php:106 ../../Zotlabs/Lib/Apps.php:340
+#: ../../include/channel.php:918 ../../include/channel.php:922
+#: ../../include/menu.php:108 ../../include/page_widgets.php:9
+#: ../../include/page_widgets.php:39
msgid "Edit"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:241 ../../Zotlabs/Module/Blocks.php:159
-#: ../../Zotlabs/Module/Connedit.php:572
+#: ../../Zotlabs/Storage/Browser.php:241 ../../Zotlabs/Module/Blocks.php:162
+#: ../../Zotlabs/Module/Connedit.php:578
#: ../../Zotlabs/Module/Editblock.php:134
#: ../../Zotlabs/Module/Connections.php:263
-#: ../../Zotlabs/Module/Editlayout.php:136
+#: ../../Zotlabs/Module/Editlayout.php:137
#: ../../Zotlabs/Module/Editwebpage.php:170 ../../Zotlabs/Module/Group.php:177
#: ../../Zotlabs/Module/Photos.php:1173 ../../Zotlabs/Module/Admin.php:1039
#: ../../Zotlabs/Module/Admin.php:1213 ../../Zotlabs/Module/Admin.php:2114
#: ../../Zotlabs/Module/Settings.php:653 ../../Zotlabs/Module/Thing.php:261
-#: ../../Zotlabs/Module/Webpages.php:189 ../../Zotlabs/Lib/Apps.php:338
-#: ../../Zotlabs/Lib/ThreadItem.php:126 ../../include/conversation.php:657
+#: ../../Zotlabs/Module/Webpages.php:197 ../../Zotlabs/Lib/ThreadItem.php:126
+#: ../../Zotlabs/Lib/Apps.php:341 ../../include/conversation.php:660
msgid "Delete"
msgstr ""
@@ -184,8 +186,8 @@ msgstr ""
#: ../../Zotlabs/Module/Filestorage.php:24
#: ../../Zotlabs/Module/Filestorage.php:79
#: ../../Zotlabs/Module/Filestorage.php:94
-#: ../../Zotlabs/Module/Filestorage.php:121 ../../Zotlabs/Module/Item.php:210
-#: ../../Zotlabs/Module/Item.php:218 ../../Zotlabs/Module/Item.php:1070
+#: ../../Zotlabs/Module/Filestorage.php:121 ../../Zotlabs/Module/Item.php:211
+#: ../../Zotlabs/Module/Item.php:219 ../../Zotlabs/Module/Item.php:1070
#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78
#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Id.php:76
#: ../../Zotlabs/Module/Like.php:181 ../../Zotlabs/Module/Invite.php:17
@@ -197,7 +199,7 @@ msgstr ""
#: ../../Zotlabs/Module/New_channel.php:104
#: ../../Zotlabs/Module/Notifications.php:70
#: ../../Zotlabs/Module/Photos.php:75 ../../Zotlabs/Module/Page.php:35
-#: ../../Zotlabs/Module/Page.php:90 ../../Zotlabs/Module/Pdledit.php:26
+#: ../../Zotlabs/Module/Page.php:91 ../../Zotlabs/Module/Pdledit.php:26
#: ../../Zotlabs/Module/Poke.php:137 ../../Zotlabs/Module/Profile.php:68
#: ../../Zotlabs/Module/Profile.php:76 ../../Zotlabs/Module/Profiles.php:203
#: ../../Zotlabs/Module/Profiles.php:601
@@ -214,14 +216,14 @@ msgstr ""
#: ../../Zotlabs/Module/Viewconnections.php:25
#: ../../Zotlabs/Module/Viewconnections.php:30
#: ../../Zotlabs/Module/Viewsrc.php:18 ../../Zotlabs/Module/Webpages.php:74
-#: ../../Zotlabs/Lib/Chatroom.php:137 ../../include/items.php:3438
+#: ../../Zotlabs/Lib/Chatroom.php:137 ../../include/photos.php:27
#: ../../include/attach.php:141 ../../include/attach.php:189
#: ../../include/attach.php:252 ../../include/attach.php:266
#: ../../include/attach.php:273 ../../include/attach.php:338
#: ../../include/attach.php:352 ../../include/attach.php:359
-#: ../../include/attach.php:437 ../../include/attach.php:895
-#: ../../include/attach.php:966 ../../include/attach.php:1118
-#: ../../include/photos.php:27
+#: ../../include/attach.php:439 ../../include/attach.php:901
+#: ../../include/attach.php:972 ../../include/attach.php:1124
+#: ../../include/items.php:3450
msgid "Permission denied."
msgstr ""
@@ -230,8 +232,8 @@ msgid "Not Found"
msgstr ""
#: ../../Zotlabs/Web/Router.php:149 ../../Zotlabs/Module/Block.php:79
-#: ../../Zotlabs/Module/Display.php:117 ../../Zotlabs/Module/Help.php:97
-#: ../../Zotlabs/Module/Page.php:93
+#: ../../Zotlabs/Module/Display.php:118 ../../Zotlabs/Module/Help.php:97
+#: ../../Zotlabs/Module/Page.php:94
msgid "Page not found."
msgstr ""
@@ -253,7 +255,7 @@ msgstr ""
#: ../../Zotlabs/Module/Editwebpage.php:33
#: ../../Zotlabs/Module/Filestorage.php:60 ../../Zotlabs/Module/Hcard.php:12
#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Profile.php:20
-#: ../../Zotlabs/Module/Webpages.php:34 ../../include/channel.php:837
+#: ../../Zotlabs/Module/Webpages.php:34 ../../include/channel.php:818
msgid "Requested profile is not available."
msgstr ""
@@ -261,40 +263,40 @@ msgstr ""
msgid "Some blurb about what to do when you're new here"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:152
+#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:155
#: ../../Zotlabs/Module/Editblock.php:108
msgid "Block Name"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:151 ../../include/text.php:2265
+#: ../../Zotlabs/Module/Blocks.php:154 ../../include/text.php:2266
msgid "Blocks"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:153
+#: ../../Zotlabs/Module/Blocks.php:156
msgid "Block Title"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:154 ../../Zotlabs/Module/Layouts.php:188
-#: ../../Zotlabs/Module/Menu.php:114 ../../Zotlabs/Module/Webpages.php:198
-#: ../../include/page_widgets.php:44
+#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/Layouts.php:190
+#: ../../Zotlabs/Module/Menu.php:114 ../../Zotlabs/Module/Webpages.php:206
+#: ../../include/page_widgets.php:47
msgid "Created"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:155 ../../Zotlabs/Module/Layouts.php:189
-#: ../../Zotlabs/Module/Menu.php:115 ../../Zotlabs/Module/Webpages.php:199
-#: ../../include/page_widgets.php:45
+#: ../../Zotlabs/Module/Blocks.php:158 ../../Zotlabs/Module/Layouts.php:191
+#: ../../Zotlabs/Module/Menu.php:115 ../../Zotlabs/Module/Webpages.php:207
+#: ../../include/page_widgets.php:48
msgid "Edited"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:158 ../../Zotlabs/Module/Layouts.php:191
-#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Module/Webpages.php:188
-#: ../../include/conversation.php:1208
+#: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Layouts.php:193
+#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Module/Webpages.php:196
+#: ../../include/conversation.php:1219
msgid "Share"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:163 ../../Zotlabs/Module/Layouts.php:195
-#: ../../Zotlabs/Module/Pubsites.php:47 ../../Zotlabs/Module/Webpages.php:193
-#: ../../include/page_widgets.php:39
+#: ../../Zotlabs/Module/Blocks.php:166 ../../Zotlabs/Module/Layouts.php:197
+#: ../../Zotlabs/Module/Pubsites.php:47 ../../Zotlabs/Module/Webpages.php:201
+#: ../../include/page_widgets.php:42
msgid "View"
msgstr ""
@@ -348,7 +350,7 @@ msgstr ""
#: ../../Zotlabs/Module/Cal.php:338 ../../Zotlabs/Module/Chat.php:196
#: ../../Zotlabs/Module/Chat.php:238 ../../Zotlabs/Module/Connect.php:98
-#: ../../Zotlabs/Module/Connedit.php:731 ../../Zotlabs/Module/Events.php:475
+#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Events.php:475
#: ../../Zotlabs/Module/Events.php:672 ../../Zotlabs/Module/Group.php:85
#: ../../Zotlabs/Module/Filestorage.php:162
#: ../../Zotlabs/Module/Import.php:550
@@ -372,8 +374,8 @@ msgstr ""
#: ../../Zotlabs/Module/Setup.php:353 ../../Zotlabs/Module/Sources.php:114
#: ../../Zotlabs/Module/Sources.php:149 ../../Zotlabs/Module/Thing.php:316
#: ../../Zotlabs/Module/Thing.php:362 ../../Zotlabs/Module/Xchan.php:15
-#: ../../Zotlabs/Lib/ThreadItem.php:710 ../../include/widgets.php:757
-#: ../../include/widgets.php:769 ../../include/js_strings.php:22
+#: ../../Zotlabs/Lib/ThreadItem.php:710 ../../include/js_strings.php:22
+#: ../../include/widgets.php:757 ../../include/widgets.php:769
#: ../../view/theme/redbasic/php/config.php:99
msgid "Submit"
msgstr ""
@@ -383,6 +385,7 @@ msgid "Today"
msgstr ""
#: ../../Zotlabs/Module/Channel.php:29 ../../Zotlabs/Module/Chat.php:25
+#: ../../Zotlabs/Module/Wiki.php:20
msgid "You must be logged in to see this page."
msgstr ""
@@ -423,19 +426,19 @@ msgid "Bookmark this room"
msgstr ""
#: ../../Zotlabs/Module/Chat.php:205 ../../Zotlabs/Module/Mail.php:205
-#: ../../Zotlabs/Module/Mail.php:314 ../../include/conversation.php:1176
+#: ../../Zotlabs/Module/Mail.php:314 ../../include/conversation.php:1181
msgid "Please enter a link URL:"
msgstr ""
#: ../../Zotlabs/Module/Chat.php:206 ../../Zotlabs/Module/Mail.php:258
#: ../../Zotlabs/Module/Mail.php:383 ../../Zotlabs/Lib/ThreadItem.php:722
-#: ../../include/conversation.php:1256
+#: ../../include/conversation.php:1271
msgid "Encrypt text"
msgstr ""
#: ../../Zotlabs/Module/Chat.php:207 ../../Zotlabs/Module/Editblock.php:111
#: ../../Zotlabs/Module/Editwebpage.php:147 ../../Zotlabs/Module/Mail.php:252
-#: ../../Zotlabs/Module/Mail.php:377 ../../include/conversation.php:1143
+#: ../../Zotlabs/Module/Mail.php:377 ../../include/conversation.php:1146
msgid "Insert web link"
msgstr ""
@@ -571,7 +574,7 @@ msgstr ""
msgid "is now connected to"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:379 ../../Zotlabs/Module/Connedit.php:654
+#: ../../Zotlabs/Module/Connedit.php:379 ../../Zotlabs/Module/Connedit.php:660
#: ../../Zotlabs/Module/Events.php:459 ../../Zotlabs/Module/Events.php:460
#: ../../Zotlabs/Module/Events.php:469 ../../Zotlabs/Module/Api.php:89
#: ../../Zotlabs/Module/Filestorage.php:157
@@ -583,7 +586,7 @@ msgstr ""
#: ../../Zotlabs/Module/Removeme.php:61 ../../Zotlabs/Module/Settings.php:581
#: ../../include/dir_fns.php:143 ../../include/dir_fns.php:144
#: ../../include/dir_fns.php:145 ../../view/theme/redbasic/php/config.php:105
-#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1707
+#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1708
msgid "No"
msgstr ""
@@ -598,7 +601,7 @@ msgstr ""
#: ../../Zotlabs/Module/Removeme.php:61 ../../Zotlabs/Module/Settings.php:581
#: ../../include/dir_fns.php:143 ../../include/dir_fns.php:144
#: ../../include/dir_fns.php:145 ../../view/theme/redbasic/php/config.php:105
-#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1707
+#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1708
msgid "Yes"
msgstr ""
@@ -606,277 +609,277 @@ msgstr ""
msgid "Could not access address book record."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:425
+#: ../../Zotlabs/Module/Connedit.php:431
msgid "Refresh failed - channel is currently unavailable."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:440 ../../Zotlabs/Module/Connedit.php:449
-#: ../../Zotlabs/Module/Connedit.php:458 ../../Zotlabs/Module/Connedit.php:467
-#: ../../Zotlabs/Module/Connedit.php:480
+#: ../../Zotlabs/Module/Connedit.php:446 ../../Zotlabs/Module/Connedit.php:455
+#: ../../Zotlabs/Module/Connedit.php:464 ../../Zotlabs/Module/Connedit.php:473
+#: ../../Zotlabs/Module/Connedit.php:486
msgid "Unable to set address book parameters."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:503
+#: ../../Zotlabs/Module/Connedit.php:509
msgid "Connection has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:519 ../../Zotlabs/Lib/Apps.php:219
-#: ../../include/nav.php:86 ../../include/conversation.php:954
+#: ../../Zotlabs/Module/Connedit.php:525 ../../Zotlabs/Lib/Apps.php:220
+#: ../../include/conversation.php:957 ../../include/nav.php:86
msgid "View Profile"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:522
+#: ../../Zotlabs/Module/Connedit.php:528
#, php-format
msgid "View %s's profile"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:526
+#: ../../Zotlabs/Module/Connedit.php:532
msgid "Refresh Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:529
+#: ../../Zotlabs/Module/Connedit.php:535
msgid "Fetch updated permissions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:533
+#: ../../Zotlabs/Module/Connedit.php:539
msgid "Recent Activity"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:536
+#: ../../Zotlabs/Module/Connedit.php:542
msgid "View recent posts and comments"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Admin.php:1041
+#: ../../Zotlabs/Module/Connedit.php:546 ../../Zotlabs/Module/Admin.php:1041
msgid "Unblock"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Admin.php:1040
+#: ../../Zotlabs/Module/Connedit.php:546 ../../Zotlabs/Module/Admin.php:1040
msgid "Block"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:543
+#: ../../Zotlabs/Module/Connedit.php:549
msgid "Block (or Unblock) all communications with this connection"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:544
+#: ../../Zotlabs/Module/Connedit.php:550
msgid "This connection is blocked!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:548
+#: ../../Zotlabs/Module/Connedit.php:554
msgid "Unignore"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:548
+#: ../../Zotlabs/Module/Connedit.php:554
#: ../../Zotlabs/Module/Connections.php:277
#: ../../Zotlabs/Module/Notifications.php:55
msgid "Ignore"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:551
+#: ../../Zotlabs/Module/Connedit.php:557
msgid "Ignore (or Unignore) all inbound communications from this connection"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:552
+#: ../../Zotlabs/Module/Connedit.php:558
msgid "This connection is ignored!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:556
+#: ../../Zotlabs/Module/Connedit.php:562
msgid "Unarchive"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:556
+#: ../../Zotlabs/Module/Connedit.php:562
msgid "Archive"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:559
+#: ../../Zotlabs/Module/Connedit.php:565
msgid ""
"Archive (or Unarchive) this connection - mark channel dead but keep content"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:560
+#: ../../Zotlabs/Module/Connedit.php:566
msgid "This connection is archived!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:564
+#: ../../Zotlabs/Module/Connedit.php:570
msgid "Unhide"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:564
+#: ../../Zotlabs/Module/Connedit.php:570
msgid "Hide"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:567
+#: ../../Zotlabs/Module/Connedit.php:573
msgid "Hide or Unhide this connection from your other connections"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:568
+#: ../../Zotlabs/Module/Connedit.php:574
msgid "This connection is hidden!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:575
+#: ../../Zotlabs/Module/Connedit.php:581
msgid "Delete this connection"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:590 ../../include/widgets.php:493
+#: ../../Zotlabs/Module/Connedit.php:596 ../../include/widgets.php:493
msgid "Me"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:591 ../../include/widgets.php:494
+#: ../../Zotlabs/Module/Connedit.php:597 ../../include/widgets.php:494
msgid "Family"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:592 ../../Zotlabs/Module/Settings.php:342
+#: ../../Zotlabs/Module/Connedit.php:598 ../../Zotlabs/Module/Settings.php:342
#: ../../Zotlabs/Module/Settings.php:346 ../../Zotlabs/Module/Settings.php:347
#: ../../Zotlabs/Module/Settings.php:350 ../../Zotlabs/Module/Settings.php:361
-#: ../../include/widgets.php:495 ../../include/selectors.php:123
-#: ../../include/channel.php:389 ../../include/channel.php:390
-#: ../../include/channel.php:397
+#: ../../include/selectors.php:123 ../../include/channel.php:389
+#: ../../include/channel.php:390 ../../include/channel.php:397
+#: ../../include/widgets.php:495
msgid "Friends"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:593 ../../include/widgets.php:496
+#: ../../Zotlabs/Module/Connedit.php:599 ../../include/widgets.php:496
msgid "Acquaintances"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:594
+#: ../../Zotlabs/Module/Connedit.php:600
#: ../../Zotlabs/Module/Connections.php:92
#: ../../Zotlabs/Module/Connections.php:107 ../../include/widgets.php:497
msgid "All"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:654
+#: ../../Zotlabs/Module/Connedit.php:660
msgid "Approve this connection"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:654
+#: ../../Zotlabs/Module/Connedit.php:660
msgid "Accept connection to allow communication"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:659
+#: ../../Zotlabs/Module/Connedit.php:665
msgid "Set Affinity"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:662
+#: ../../Zotlabs/Module/Connedit.php:668
msgid "Set Profile"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:665
+#: ../../Zotlabs/Module/Connedit.php:671
msgid "Set Affinity & Profile"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:698
+#: ../../Zotlabs/Module/Connedit.php:704
msgid "none"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:702 ../../include/widgets.php:614
+#: ../../Zotlabs/Module/Connedit.php:708 ../../include/widgets.php:614
msgid "Connection Default Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:702 ../../include/items.php:3926
+#: ../../Zotlabs/Module/Connedit.php:708 ../../include/items.php:3937
#, php-format
msgid "Connection: %s"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:703
+#: ../../Zotlabs/Module/Connedit.php:709
msgid "Apply these permissions automatically"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:703
+#: ../../Zotlabs/Module/Connedit.php:709
msgid "Connection requests will be approved without your interaction"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:705
+#: ../../Zotlabs/Module/Connedit.php:711
msgid "This connection's primary address is"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:706
+#: ../../Zotlabs/Module/Connedit.php:712
msgid "Available locations:"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:710
+#: ../../Zotlabs/Module/Connedit.php:716
msgid ""
"The permissions indicated on this page will be applied to all new "
"connections."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:711
+#: ../../Zotlabs/Module/Connedit.php:717
msgid "Connection Tools"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:713
+#: ../../Zotlabs/Module/Connedit.php:719
msgid "Slide to adjust your degree of friendship"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Rate.php:159
+#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Rate.php:159
#: ../../include/js_strings.php:20
msgid "Rating"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:715
+#: ../../Zotlabs/Module/Connedit.php:721
msgid "Slide to adjust your rating"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:716 ../../Zotlabs/Module/Connedit.php:721
+#: ../../Zotlabs/Module/Connedit.php:722 ../../Zotlabs/Module/Connedit.php:727
msgid "Optionally explain your rating"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:718
+#: ../../Zotlabs/Module/Connedit.php:724
msgid "Custom Filter"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:719
+#: ../../Zotlabs/Module/Connedit.php:725
msgid "Only import posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:719 ../../Zotlabs/Module/Connedit.php:720
+#: ../../Zotlabs/Module/Connedit.php:725 ../../Zotlabs/Module/Connedit.php:726
msgid ""
"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
"all posts"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:720
+#: ../../Zotlabs/Module/Connedit.php:726
msgid "Do not import posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:722
+#: ../../Zotlabs/Module/Connedit.php:728
msgid "This information is public!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:727
+#: ../../Zotlabs/Module/Connedit.php:733
msgid "Connection Pending Approval"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:730
+#: ../../Zotlabs/Module/Connedit.php:736
msgid "inherited"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:732
+#: ../../Zotlabs/Module/Connedit.php:738
#, php-format
msgid ""
"Please choose the profile you would like to display to %s when viewing your "
"profile securely."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:734
+#: ../../Zotlabs/Module/Connedit.php:740
msgid "Their Settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:735
+#: ../../Zotlabs/Module/Connedit.php:741
msgid "My Settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:737
+#: ../../Zotlabs/Module/Connedit.php:743
msgid "Individual Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:738
+#: ../../Zotlabs/Module/Connedit.php:744
msgid ""
"Some permissions may be inherited from your channel's <a href=\"settings"
"\"><strong>privacy settings</strong></a>, which have higher priority than "
"individual settings. You can <strong>not</strong> change those settings here."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:739
+#: ../../Zotlabs/Module/Connedit.php:745
msgid ""
"Some permissions may be inherited from your channel's <a href=\"settings"
"\"><strong>privacy settings</strong></a>, which have higher priority than "
@@ -884,7 +887,7 @@ msgid ""
"any impact unless the inherited setting changes."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:740
+#: ../../Zotlabs/Module/Connedit.php:746
msgid "Last update:"
msgstr ""
@@ -914,12 +917,12 @@ msgstr ""
msgid "Homepage: "
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:306 ../../include/channel.php:1183
+#: ../../Zotlabs/Module/Directory.php:306 ../../include/channel.php:1164
msgid "Age:"
msgstr ""
#: ../../Zotlabs/Module/Directory.php:311 ../../include/event.php:52
-#: ../../include/event.php:84 ../../include/channel.php:1027
+#: ../../include/event.php:84 ../../include/channel.php:1008
#: ../../include/bb2diaspora.php:507
msgid "Location:"
msgstr ""
@@ -928,18 +931,18 @@ msgstr ""
msgid "Description:"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:322 ../../include/channel.php:1199
+#: ../../Zotlabs/Module/Directory.php:322 ../../include/channel.php:1180
msgid "Hometown:"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:324 ../../include/channel.php:1207
+#: ../../Zotlabs/Module/Directory.php:324 ../../include/channel.php:1188
msgid "About:"
msgstr ""
#: ../../Zotlabs/Module/Directory.php:325 ../../Zotlabs/Module/Match.php:68
-#: ../../Zotlabs/Module/Suggest.php:56 ../../include/widgets.php:147
-#: ../../include/widgets.php:184 ../../include/connections.php:78
-#: ../../include/conversation.php:956 ../../include/channel.php:1012
+#: ../../Zotlabs/Module/Suggest.php:56 ../../include/conversation.php:959
+#: ../../include/channel.php:993 ../../include/connections.php:78
+#: ../../include/widgets.php:147 ../../include/widgets.php:184
msgid "Connect"
msgstr ""
@@ -1018,7 +1021,7 @@ msgstr ""
#: ../../Zotlabs/Module/Display.php:40 ../../Zotlabs/Module/Filestorage.php:33
#: ../../Zotlabs/Module/Admin.php:164 ../../Zotlabs/Module/Admin.php:1255
#: ../../Zotlabs/Module/Admin.php:1561 ../../Zotlabs/Module/Thing.php:89
-#: ../../Zotlabs/Module/Viewsrc.php:24 ../../include/items.php:3359
+#: ../../Zotlabs/Module/Viewsrc.php:24 ../../include/items.php:3371
msgid "Item not found."
msgstr ""
@@ -1028,7 +1031,7 @@ msgstr ""
msgid "Item not found"
msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:124 ../../include/conversation.php:1228
+#: ../../Zotlabs/Module/Editblock.php:124 ../../include/conversation.php:1243
msgid "Title (optional)"
msgstr ""
@@ -1074,7 +1077,7 @@ msgstr ""
#: ../../Zotlabs/Module/Connections.php:76
#: ../../Zotlabs/Module/Connections.php:86 ../../Zotlabs/Module/Menu.php:116
-#: ../../include/conversation.php:1535
+#: ../../include/conversation.php:1550
msgid "New"
msgstr ""
@@ -1167,7 +1170,7 @@ msgid "Connections"
msgstr ""
#: ../../Zotlabs/Module/Connections.php:306 ../../Zotlabs/Module/Search.php:44
-#: ../../Zotlabs/Lib/Apps.php:228 ../../include/text.php:945
+#: ../../Zotlabs/Lib/Apps.php:229 ../../include/text.php:945
#: ../../include/text.php:957 ../../include/nav.php:165
#: ../../include/acl_selectors.php:276
msgid "Search"
@@ -1197,7 +1200,7 @@ msgid "Image resize failed."
msgstr ""
#: ../../Zotlabs/Module/Cover_photo.php:168
-#: ../../Zotlabs/Module/Profile_photo.php:192 ../../include/photos.php:144
+#: ../../Zotlabs/Module/Profile_photo.php:192 ../../include/photos.php:148
msgid "Unable to process image"
msgstr ""
@@ -1211,30 +1214,30 @@ msgstr ""
msgid "Unable to process image."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:233 ../../include/items.php:4270
+#: ../../Zotlabs/Module/Cover_photo.php:233 ../../include/items.php:4298
msgid "female"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:234 ../../include/items.php:4271
+#: ../../Zotlabs/Module/Cover_photo.php:234 ../../include/items.php:4299
#, php-format
msgid "%1$s updated her %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:235 ../../include/items.php:4272
+#: ../../Zotlabs/Module/Cover_photo.php:235 ../../include/items.php:4300
msgid "male"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:236 ../../include/items.php:4273
+#: ../../Zotlabs/Module/Cover_photo.php:236 ../../include/items.php:4301
#, php-format
msgid "%1$s updated his %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4275
+#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4303
#, php-format
msgid "%1$s updated their %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/channel.php:1661
+#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/channel.php:1642
msgid "cover photo"
msgstr ""
@@ -1324,8 +1327,8 @@ msgid "Event not found."
msgstr ""
#: ../../Zotlabs/Module/Events.php:254 ../../Zotlabs/Module/Like.php:373
-#: ../../Zotlabs/Module/Tagger.php:51 ../../include/event.php:949
-#: ../../include/text.php:1943 ../../include/conversation.php:123
+#: ../../Zotlabs/Module/Tagger.php:51 ../../include/text.php:1944
+#: ../../include/event.php:949 ../../include/conversation.php:123
msgid "event"
msgstr ""
@@ -1410,12 +1413,12 @@ msgid "Share this event"
msgstr ""
#: ../../Zotlabs/Module/Events.php:470 ../../Zotlabs/Module/Photos.php:1093
-#: ../../Zotlabs/Module/Webpages.php:194 ../../Zotlabs/Lib/ThreadItem.php:719
-#: ../../include/conversation.php:1187 ../../include/page_widgets.php:40
+#: ../../Zotlabs/Module/Webpages.php:202 ../../Zotlabs/Lib/ThreadItem.php:719
+#: ../../include/conversation.php:1198 ../../include/page_widgets.php:43
msgid "Preview"
msgstr ""
-#: ../../Zotlabs/Module/Events.php:471 ../../include/conversation.php:1232
+#: ../../Zotlabs/Module/Events.php:471 ../../include/conversation.php:1247
msgid "Permission settings"
msgstr ""
@@ -1443,15 +1446,16 @@ msgstr ""
msgid "Failed to remove event"
msgstr ""
-#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:220
-#: ../../include/nav.php:92 ../../include/conversation.php:1632
+#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:221
+#: ../../include/conversation.php:1647 ../../include/nav.php:92
msgid "Photos"
msgstr ""
#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
#: ../../Zotlabs/Module/Admin.php:1406 ../../Zotlabs/Module/Settings.php:591
#: ../../Zotlabs/Module/Settings.php:617 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../include/conversation.php:1259
+#: ../../Zotlabs/Module/Tagrm.php:138 ../../include/conversation.php:1235
+#: ../../include/conversation.php:1274
msgid "Cancel"
msgstr ""
@@ -1535,17 +1539,17 @@ msgstr ""
msgid "mail delivered"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:126
-#: ../../Zotlabs/Module/Layouts.php:127 ../../Zotlabs/Module/Layouts.php:186
+#: ../../Zotlabs/Module/Editlayout.php:127
+#: ../../Zotlabs/Module/Layouts.php:128 ../../Zotlabs/Module/Layouts.php:188
msgid "Layout Name"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:127
-#: ../../Zotlabs/Module/Layouts.php:130
+#: ../../Zotlabs/Module/Editlayout.php:128
+#: ../../Zotlabs/Module/Layouts.php:131
msgid "Layout Description (Optional)"
msgstr ""
-#: ../../Zotlabs/Module/Editlayout.php:135
+#: ../../Zotlabs/Module/Editlayout.php:136
msgid "Edit Layout"
msgstr ""
@@ -1578,7 +1582,7 @@ msgid "Could not create privacy group."
msgstr ""
#: ../../Zotlabs/Module/Group.php:42 ../../Zotlabs/Module/Group.php:141
-#: ../../include/items.php:3893
+#: ../../include/items.php:3904
msgid "Privacy group not found."
msgstr ""
@@ -1658,7 +1662,7 @@ msgid "Help:"
msgstr ""
#: ../../Zotlabs/Module/Help.php:85 ../../Zotlabs/Module/Help.php:90
-#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Lib/Apps.php:223
+#: ../../Zotlabs/Module/Layouts.php:185 ../../Zotlabs/Lib/Apps.php:224
#: ../../include/nav.php:159
msgid "Help"
msgstr ""
@@ -1711,8 +1715,8 @@ msgstr ""
msgid "Notify your contacts about this file"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:47 ../../include/widgets.php:102
-#: ../../include/nav.php:163
+#: ../../Zotlabs/Module/Apps.php:47 ../../include/nav.php:163
+#: ../../include/widgets.php:102
msgid "Apps"
msgstr ""
@@ -1816,23 +1820,23 @@ msgid ""
"only once and leave this page open until finished."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:178
+#: ../../Zotlabs/Module/Item.php:179
msgid "Unable to locate original post."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:427
+#: ../../Zotlabs/Module/Item.php:428
msgid "Empty post discarded."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:467
+#: ../../Zotlabs/Module/Item.php:468
msgid "Executable content type not permitted to this channel."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:847
+#: ../../Zotlabs/Module/Item.php:848
msgid "Duplicate post suppressed."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:977
+#: ../../Zotlabs/Module/Item.php:983
msgid "System error. Post not saved."
msgstr ""
@@ -1850,19 +1854,19 @@ msgstr ""
msgid "You have reached your limit of %1$.0f webpages."
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:181 ../../include/text.php:2267
+#: ../../Zotlabs/Module/Layouts.php:183 ../../include/text.php:2268
msgid "Layouts"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:183
+#: ../../Zotlabs/Module/Layouts.php:185
msgid "Comanche page description language help"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:187
+#: ../../Zotlabs/Module/Layouts.php:189
msgid "Layout Description"
msgstr ""
-#: ../../Zotlabs/Module/Layouts.php:192
+#: ../../Zotlabs/Module/Layouts.php:194
msgid "Download PDL file"
msgstr ""
@@ -1894,12 +1898,12 @@ msgstr ""
#: ../../Zotlabs/Module/Id.php:17 ../../Zotlabs/Module/Id.php:18
#: ../../Zotlabs/Module/Admin.php:1035 ../../Zotlabs/Module/Admin.php:1047
-#: ../../include/network.php:2151 ../../boot.php:1705
+#: ../../include/network.php:2176 ../../boot.php:1706
msgid "Email"
msgstr ""
#: ../../Zotlabs/Module/Id.php:19 ../../Zotlabs/Module/Id.php:20
-#: ../../Zotlabs/Module/Id.php:21 ../../Zotlabs/Lib/Apps.php:236
+#: ../../Zotlabs/Module/Id.php:21 ../../Zotlabs/Lib/Apps.php:237
msgid "Profile Photo"
msgstr ""
@@ -1935,7 +1939,7 @@ msgstr ""
msgid "Homepage URL"
msgstr ""
-#: ../../Zotlabs/Module/Id.php:30 ../../Zotlabs/Lib/Apps.php:234
+#: ../../Zotlabs/Module/Id.php:30 ../../Zotlabs/Lib/Apps.php:235
msgid "Language"
msgstr ""
@@ -1985,12 +1989,12 @@ msgstr ""
msgid "menu"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:196
+#: ../../Zotlabs/Module/Impel.php:187
#, php-format
msgid "%s element installed"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:199
+#: ../../Zotlabs/Module/Impel.php:190
#, php-format
msgid "%s element installation failed"
msgstr ""
@@ -2031,13 +2035,13 @@ msgid "Previous action reversed."
msgstr ""
#: ../../Zotlabs/Module/Like.php:371 ../../Zotlabs/Module/Subthread.php:87
-#: ../../Zotlabs/Module/Tagger.php:47 ../../include/text.php:1940
+#: ../../Zotlabs/Module/Tagger.php:47 ../../include/text.php:1941
#: ../../include/conversation.php:120
msgid "photo"
msgstr ""
#: ../../Zotlabs/Module/Like.php:371 ../../Zotlabs/Module/Subthread.php:87
-#: ../../include/text.php:1946 ../../include/conversation.php:148
+#: ../../include/text.php:1947 ../../include/conversation.php:148
msgid "status"
msgstr ""
@@ -2288,7 +2292,7 @@ msgid "Subject:"
msgstr ""
#: ../../Zotlabs/Module/Mail.php:251 ../../Zotlabs/Module/Mail.php:376
-#: ../../include/conversation.php:1220
+#: ../../include/conversation.php:1231
msgid "Attach file"
msgstr ""
@@ -2297,7 +2301,7 @@ msgid "Send"
msgstr ""
#: ../../Zotlabs/Module/Mail.php:256 ../../Zotlabs/Module/Mail.php:381
-#: ../../include/conversation.php:1251
+#: ../../include/conversation.php:1266
msgid "Set expiration date"
msgstr ""
@@ -2405,7 +2409,7 @@ msgid ""
"Password reset failed."
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:90 ../../boot.php:1711
+#: ../../Zotlabs/Module/Lostpass.php:90 ../../boot.php:1712
msgid "Password Reset"
msgstr ""
@@ -2490,7 +2494,7 @@ msgstr ""
msgid "Submit and proceed"
msgstr ""
-#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2266
+#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2267
msgid "Menus"
msgstr ""
@@ -2557,7 +2561,7 @@ msgctxt "mood"
msgid "%1$s is %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:225
+#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:226
msgid "Mood"
msgstr ""
@@ -2894,11 +2898,12 @@ msgid "Show Oldest First"
msgstr ""
#: ../../Zotlabs/Module/Photos.php:792 ../../Zotlabs/Module/Photos.php:1331
-#: ../../include/widgets.php:1499
+#: ../../Zotlabs/Module/Embedphotos.php:141 ../../include/widgets.php:1572
msgid "View Photo"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:823 ../../include/widgets.php:1516
+#: ../../Zotlabs/Module/Photos.php:823
+#: ../../Zotlabs/Module/Embedphotos.php:157 ../../include/widgets.php:1589
msgid "Edit Album"
msgstr ""
@@ -2976,7 +2981,7 @@ msgid "I don't like this (toggle)"
msgstr ""
#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Lib/ThreadItem.php:397
-#: ../../include/conversation.php:740
+#: ../../include/conversation.php:743
msgid "Please wait"
msgstr ""
@@ -2990,55 +2995,55 @@ msgstr ""
msgid "Comment"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1107 ../../include/conversation.php:574
+#: ../../Zotlabs/Module/Photos.php:1107 ../../include/conversation.php:577
msgctxt "title"
msgid "Likes"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1107 ../../include/conversation.php:574
+#: ../../Zotlabs/Module/Photos.php:1107 ../../include/conversation.php:577
msgctxt "title"
msgid "Dislikes"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:575
+#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:578
msgctxt "title"
msgid "Agree"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:575
+#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:578
msgctxt "title"
msgid "Disagree"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:575
+#: ../../Zotlabs/Module/Photos.php:1108 ../../include/conversation.php:578
msgctxt "title"
msgid "Abstain"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:576
+#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:579
msgctxt "title"
msgid "Attending"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:576
+#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:579
msgctxt "title"
msgid "Not attending"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:576
+#: ../../Zotlabs/Module/Photos.php:1109 ../../include/conversation.php:579
msgctxt "title"
msgid "Might attend"
msgstr ""
#: ../../Zotlabs/Module/Photos.php:1126 ../../Zotlabs/Module/Photos.php:1138
#: ../../Zotlabs/Lib/ThreadItem.php:181 ../../Zotlabs/Lib/ThreadItem.php:193
-#: ../../include/conversation.php:1717
+#: ../../include/conversation.php:1732
msgid "View all"
msgstr ""
#: ../../Zotlabs/Module/Photos.php:1130 ../../Zotlabs/Lib/ThreadItem.php:185
-#: ../../include/taxonomy.php:403 ../../include/conversation.php:1741
-#: ../../include/channel.php:1158
+#: ../../include/taxonomy.php:403 ../../include/conversation.php:1756
+#: ../../include/channel.php:1139
msgctxt "noun"
msgid "Like"
msgid_plural "Likes"
@@ -3046,7 +3051,7 @@ msgstr[0] ""
msgstr[1] ""
#: ../../Zotlabs/Module/Photos.php:1135 ../../Zotlabs/Lib/ThreadItem.php:190
-#: ../../include/conversation.php:1744
+#: ../../include/conversation.php:1759
msgctxt "noun"
msgid "Dislike"
msgid_plural "Dislikes"
@@ -3125,7 +3130,7 @@ msgstr ""
msgid "Login failed."
msgstr ""
-#: ../../Zotlabs/Module/Page.php:133
+#: ../../Zotlabs/Module/Page.php:131
msgid ""
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
@@ -3170,8 +3175,8 @@ msgstr ""
msgid "Layout Help"
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:168 ../../Zotlabs/Lib/Apps.php:226
-#: ../../include/conversation.php:960
+#: ../../Zotlabs/Module/Poke.php:168 ../../Zotlabs/Lib/Apps.php:227
+#: ../../include/conversation.php:963
msgid "Poke"
msgstr ""
@@ -3290,7 +3295,7 @@ msgid "View this profile"
msgstr ""
#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:771
-#: ../../include/channel.php:959
+#: ../../include/channel.php:940
msgid "Edit visibility"
msgstr ""
@@ -3302,7 +3307,7 @@ msgstr ""
msgid "Change cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:692 ../../include/channel.php:930
+#: ../../Zotlabs/Module/Profiles.php:692 ../../include/channel.php:911
msgid "Change profile photo"
msgstr ""
@@ -3322,8 +3327,8 @@ msgstr ""
msgid "Add profile things"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:697 ../../include/widgets.php:105
-#: ../../include/conversation.php:1526
+#: ../../Zotlabs/Module/Profiles.php:697 ../../include/conversation.php:1541
+#: ../../include/widgets.php:105
msgid "Personal"
msgstr ""
@@ -3463,12 +3468,12 @@ msgstr ""
msgid "My other channels"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:767 ../../include/channel.php:955
+#: ../../Zotlabs/Module/Profiles.php:767 ../../include/channel.php:936
msgid "Profile Image"
msgstr ""
#: ../../Zotlabs/Module/Profiles.php:777 ../../include/nav.php:88
-#: ../../include/channel.php:937
+#: ../../include/channel.php:918
msgid "Edit Profiles"
msgstr ""
@@ -3490,7 +3495,7 @@ msgstr ""
msgid "Profile Visibility Editor"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:117 ../../include/channel.php:1249
+#: ../../Zotlabs/Module/Profperm.php:117 ../../include/channel.php:1230
msgid "Profile"
msgstr ""
@@ -3502,7 +3507,7 @@ msgstr ""
msgid "Visible To"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:22 ../../include/widgets.php:1270
+#: ../../Zotlabs/Module/Pubsites.php:22 ../../include/widgets.php:1343
msgid "Public Hubs"
msgstr ""
@@ -3536,7 +3541,7 @@ msgid "Software"
msgstr ""
#: ../../Zotlabs/Module/Pubsites.php:31 ../../Zotlabs/Module/Ratings.php:103
-#: ../../include/conversation.php:959
+#: ../../include/conversation.php:962
msgid "Ratings"
msgstr ""
@@ -3662,7 +3667,7 @@ msgstr ""
msgid "Site settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:400 ../../include/text.php:2841
+#: ../../Zotlabs/Module/Admin.php:400 ../../include/text.php:2845
msgid "Default"
msgstr ""
@@ -3698,7 +3703,7 @@ msgstr ""
msgid "My site offers free accounts with optional paid upgrades"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:491 ../../include/widgets.php:1382
+#: ../../Zotlabs/Module/Admin.php:491 ../../include/widgets.php:1455
msgid "Site"
msgstr ""
@@ -4047,7 +4052,7 @@ msgid ""
"embedded content from that site is explicitly blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:756 ../../include/widgets.php:1385
+#: ../../Zotlabs/Module/Admin.php:756 ../../include/widgets.php:1458
msgid "Security"
msgstr ""
@@ -4214,7 +4219,7 @@ msgid "Account '%s' unblocked"
msgstr ""
#: ../../Zotlabs/Module/Admin.php:1031 ../../Zotlabs/Module/Admin.php:1044
-#: ../../include/widgets.php:1383
+#: ../../include/widgets.php:1456
msgid "Accounts"
msgstr ""
@@ -4320,7 +4325,7 @@ msgstr ""
msgid "Channel '%s' code disallowed"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:1210 ../../include/widgets.php:1384
+#: ../../Zotlabs/Module/Admin.php:1210 ../../include/widgets.php:1457
msgid "Channels"
msgstr ""
@@ -4340,7 +4345,7 @@ msgstr ""
msgid "Disallow Code"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:1218 ../../include/conversation.php:1611
+#: ../../Zotlabs/Module/Admin.php:1218 ../../include/conversation.php:1626
msgid "Channel"
msgstr ""
@@ -4379,7 +4384,7 @@ msgid "Enable"
msgstr ""
#: ../../Zotlabs/Module/Admin.php:1330 ../../Zotlabs/Module/Admin.php:1420
-#: ../../include/widgets.php:1387
+#: ../../include/widgets.php:1460
msgid "Plugins"
msgstr ""
@@ -4388,8 +4393,8 @@ msgid "Toggle"
msgstr ""
#: ../../Zotlabs/Module/Admin.php:1332 ../../Zotlabs/Module/Admin.php:1615
-#: ../../Zotlabs/Lib/Apps.php:215 ../../include/widgets.php:638
-#: ../../include/nav.php:208
+#: ../../Zotlabs/Lib/Apps.php:215 ../../include/nav.php:208
+#: ../../include/widgets.php:638
msgid "Settings"
msgstr ""
@@ -4445,7 +4450,7 @@ msgstr ""
msgid "Install new repo"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:1405 ../../Zotlabs/Lib/Apps.php:330
+#: ../../Zotlabs/Module/Admin.php:1405 ../../Zotlabs/Lib/Apps.php:333
msgid "Install"
msgstr ""
@@ -4462,7 +4467,7 @@ msgid "Install a New Plugin Repository"
msgstr ""
#: ../../Zotlabs/Module/Admin.php:1435 ../../Zotlabs/Module/Settings.php:77
-#: ../../Zotlabs/Module/Settings.php:616 ../../Zotlabs/Lib/Apps.php:330
+#: ../../Zotlabs/Module/Settings.php:616 ../../Zotlabs/Lib/Apps.php:333
msgid "Update"
msgstr ""
@@ -4479,7 +4484,7 @@ msgid "Screenshot"
msgstr ""
#: ../../Zotlabs/Module/Admin.php:1613 ../../Zotlabs/Module/Admin.php:1647
-#: ../../include/widgets.php:1388
+#: ../../include/widgets.php:1461
msgid "Themes"
msgstr ""
@@ -4495,8 +4500,8 @@ msgstr ""
msgid "Log settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:1732 ../../include/widgets.php:1409
-#: ../../include/widgets.php:1419
+#: ../../Zotlabs/Module/Admin.php:1732 ../../include/widgets.php:1482
+#: ../../include/widgets.php:1492
msgid "Logs"
msgstr ""
@@ -4562,7 +4567,7 @@ msgstr ""
msgid "Edit Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:2106 ../../include/widgets.php:1390
+#: ../../Zotlabs/Module/Admin.php:2106 ../../include/widgets.php:1463
msgid "Profile Fields"
msgstr ""
@@ -4745,7 +4750,7 @@ msgid "Membership on this site is by invitation only."
msgstr ""
#: ../../Zotlabs/Module/Register.php:262 ../../include/nav.php:147
-#: ../../boot.php:1685
+#: ../../boot.php:1686
msgid "Register"
msgstr ""
@@ -5172,7 +5177,7 @@ msgstr ""
msgid "Basic Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings.php:1040 ../../include/channel.php:1140
+#: ../../Zotlabs/Module/Settings.php:1040 ../../include/channel.php:1121
msgid "Full Name:"
msgstr ""
@@ -5993,8 +5998,8 @@ msgstr ""
msgid "*"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:96 ../../include/widgets.php:630
-#: ../../include/features.php:71
+#: ../../Zotlabs/Module/Sources.php:96 ../../include/features.php:71
+#: ../../include/widgets.php:630
msgid "Channel Sources"
msgstr ""
@@ -6070,11 +6075,11 @@ msgstr ""
msgid "Ignore/Hide"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:55 ../../include/bbcode.php:256
+#: ../../Zotlabs/Module/Tagger.php:55 ../../include/bbcode.php:263
msgid "post"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:57 ../../include/text.php:1948
+#: ../../Zotlabs/Module/Tagger.php:57 ../../include/text.php:1949
#: ../../include/conversation.php:150
msgid "comment"
msgstr ""
@@ -6228,20 +6233,20 @@ msgstr ""
msgid "Source of Item"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:184 ../../Zotlabs/Lib/Apps.php:217
-#: ../../include/nav.php:106 ../../include/conversation.php:1685
+#: ../../Zotlabs/Module/Webpages.php:192 ../../Zotlabs/Lib/Apps.php:217
+#: ../../include/conversation.php:1700 ../../include/nav.php:106
msgid "Webpages"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:195 ../../include/page_widgets.php:41
+#: ../../Zotlabs/Module/Webpages.php:203 ../../include/page_widgets.php:44
msgid "Actions"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:196 ../../include/page_widgets.php:42
+#: ../../Zotlabs/Module/Webpages.php:204 ../../include/page_widgets.php:45
msgid "Page Link"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:197
+#: ../../Zotlabs/Module/Webpages.php:205
msgid "Page Title"
msgstr ""
@@ -6253,90 +6258,24 @@ msgstr ""
msgid "Lookup xchan beginning with (or webbie): "
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:204
-msgid "Site Admin"
+#: ../../Zotlabs/Module/Wiki.php:75 ../../Zotlabs/Lib/Apps.php:218
+msgid "Wiki"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:205
-msgid "Bug Report"
+#: ../../Zotlabs/Module/Wiki.php:76
+msgid "Sandbox"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:206
-msgid "View Bookmarks"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:207
-msgid "My Chatrooms"
+#: ../../Zotlabs/Module/Wiki.php:156
+msgid "Enter the name of your new wiki:"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:209
-msgid "Firefox Share"
+#: ../../Zotlabs/Module/Wiki.php:157
+msgid "Enter the name of the new page:"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:210
-msgid "Remote Diagnostics"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:211 ../../include/features.php:89
-msgid "Suggest Channels"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:212 ../../include/nav.php:110
-#: ../../boot.php:1703
-msgid "Login"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:214 ../../include/nav.php:179
-msgid "Grid"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:218 ../../include/nav.php:182
-msgid "Channel Home"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:221 ../../include/nav.php:201
-#: ../../include/conversation.php:1649 ../../include/conversation.php:1652
-msgid "Events"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:222 ../../include/nav.php:167
-msgid "Directory"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:224 ../../include/nav.php:193
-msgid "Mail"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:227 ../../include/nav.php:96
-msgid "Chat"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:229
-msgid "Probe"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:230
-msgid "Suggest"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:231
-msgid "Random Channel"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:232
-msgid "Invite"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:233 ../../include/widgets.php:1386
-msgid "Features"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:235
-msgid "Post"
-msgstr ""
-
-#: ../../Zotlabs/Lib/Apps.php:335
-msgid "Purchase"
+#: ../../Zotlabs/Module/Wiki.php:158
+msgid "Enter the new name:"
msgstr ""
#: ../../Zotlabs/Lib/Chatroom.php:27
@@ -6359,19 +6298,19 @@ msgstr ""
msgid "Room is full"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:60 ../../include/network.php:1823
+#: ../../Zotlabs/Lib/Enotify.php:60 ../../include/network.php:1848
msgid "$Projectname Notification"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:61 ../../include/network.php:1824
+#: ../../Zotlabs/Lib/Enotify.php:61 ../../include/network.php:1849
msgid "$projectname"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:63 ../../include/network.php:1826
+#: ../../Zotlabs/Lib/Enotify.php:63 ../../include/network.php:1851
msgid "Thank You,"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:65 ../../include/network.php:1828
+#: ../../Zotlabs/Lib/Enotify.php:65 ../../include/network.php:1853
#, php-format
msgid "%s Administrator"
msgstr ""
@@ -6563,11 +6502,11 @@ msgstr ""
msgid "commented on %s's post"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:95 ../../include/conversation.php:664
+#: ../../Zotlabs/Lib/ThreadItem.php:95 ../../include/conversation.php:667
msgid "Private Message"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:132 ../../include/conversation.php:656
+#: ../../Zotlabs/Lib/ThreadItem.php:132 ../../include/conversation.php:659
msgid "Select"
msgstr ""
@@ -6615,11 +6554,11 @@ msgstr ""
msgid "starred"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:234 ../../include/conversation.php:671
+#: ../../Zotlabs/Lib/ThreadItem.php:234 ../../include/conversation.php:674
msgid "Message signature validated"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:235 ../../include/conversation.php:672
+#: ../../Zotlabs/Lib/ThreadItem.php:235 ../../include/conversation.php:675
msgid "Message signature incorrect"
msgstr ""
@@ -6675,17 +6614,17 @@ msgstr ""
msgid "via Wall-To-Wall:"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:341 ../../include/conversation.php:719
+#: ../../Zotlabs/Lib/ThreadItem.php:341 ../../include/conversation.php:722
#, php-format
msgid "from %s"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:344 ../../include/conversation.php:722
+#: ../../Zotlabs/Lib/ThreadItem.php:344 ../../include/conversation.php:725
#, php-format
msgid "last edited: %s"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:345 ../../include/conversation.php:723
+#: ../../Zotlabs/Lib/ThreadItem.php:345 ../../include/conversation.php:726
#, php-format
msgid "Expires: %s"
msgstr ""
@@ -6706,23 +6645,23 @@ msgstr ""
msgid "[+] show all"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:711 ../../include/conversation.php:1215
+#: ../../Zotlabs/Lib/ThreadItem.php:711 ../../include/conversation.php:1226
msgid "Bold"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:712 ../../include/conversation.php:1216
+#: ../../Zotlabs/Lib/ThreadItem.php:712 ../../include/conversation.php:1227
msgid "Italic"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:713 ../../include/conversation.php:1217
+#: ../../Zotlabs/Lib/ThreadItem.php:713 ../../include/conversation.php:1228
msgid "Underline"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:714 ../../include/conversation.php:1218
+#: ../../Zotlabs/Lib/ThreadItem.php:714 ../../include/conversation.php:1229
msgid "Quote"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:715 ../../include/conversation.php:1219
+#: ../../Zotlabs/Lib/ThreadItem.php:715 ../../include/conversation.php:1230
msgid "Code"
msgstr ""
@@ -6738,173 +6677,172 @@ msgstr ""
msgid "Video"
msgstr ""
-#: ../../include/Import/import_diaspora.php:16
-msgid "No username found in import file."
+#: ../../Zotlabs/Lib/Apps.php:204
+msgid "Site Admin"
msgstr ""
-#: ../../include/Import/import_diaspora.php:41 ../../include/import.php:50
-msgid "Unable to create a unique channel address. Import failed."
+#: ../../Zotlabs/Lib/Apps.php:205
+msgid "Bug Report"
msgstr ""
-#: ../../include/dba/dba_driver.php:171
-#, php-format
-msgid "Cannot locate DNS info for database server '%s'"
+#: ../../Zotlabs/Lib/Apps.php:206
+msgid "View Bookmarks"
msgstr ""
-#: ../../include/taxonomy.php:188 ../../include/taxonomy.php:270
-#: ../../include/widgets.php:46 ../../include/widgets.php:429
-#: ../../include/contact_widgets.php:91
-msgid "Categories"
+#: ../../Zotlabs/Lib/Apps.php:207
+msgid "My Chatrooms"
msgstr ""
-#: ../../include/taxonomy.php:228 ../../include/taxonomy.php:249
-msgid "Tags"
+#: ../../Zotlabs/Lib/Apps.php:209
+msgid "Firefox Share"
msgstr ""
-#: ../../include/taxonomy.php:293
-msgid "Keywords"
+#: ../../Zotlabs/Lib/Apps.php:210
+msgid "Remote Diagnostics"
msgstr ""
-#: ../../include/taxonomy.php:314
-msgid "have"
+#: ../../Zotlabs/Lib/Apps.php:211 ../../include/features.php:89
+msgid "Suggest Channels"
msgstr ""
-#: ../../include/taxonomy.php:314
-msgid "has"
+#: ../../Zotlabs/Lib/Apps.php:212 ../../include/nav.php:110
+#: ../../boot.php:1704
+msgid "Login"
msgstr ""
-#: ../../include/taxonomy.php:315
-msgid "want"
+#: ../../Zotlabs/Lib/Apps.php:214 ../../include/nav.php:179
+msgid "Grid"
msgstr ""
-#: ../../include/taxonomy.php:315
-msgid "wants"
+#: ../../Zotlabs/Lib/Apps.php:219 ../../include/nav.php:182
+msgid "Channel Home"
msgstr ""
-#: ../../include/taxonomy.php:316
-msgid "likes"
+#: ../../Zotlabs/Lib/Apps.php:222 ../../include/conversation.php:1664
+#: ../../include/conversation.php:1667 ../../include/nav.php:201
+msgid "Events"
msgstr ""
-#: ../../include/taxonomy.php:317
-msgid "dislikes"
+#: ../../Zotlabs/Lib/Apps.php:223 ../../include/nav.php:167
+msgid "Directory"
msgstr ""
-#: ../../include/event.php:22 ../../include/event.php:69
-#: ../../include/bb2diaspora.php:485
-msgid "l F d, Y \\@ g:i A"
+#: ../../Zotlabs/Lib/Apps.php:225 ../../include/nav.php:193
+msgid "Mail"
msgstr ""
-#: ../../include/event.php:30 ../../include/event.php:73
-#: ../../include/bb2diaspora.php:491
-msgid "Starts:"
+#: ../../Zotlabs/Lib/Apps.php:228 ../../include/nav.php:96
+msgid "Chat"
msgstr ""
-#: ../../include/event.php:40 ../../include/event.php:77
-#: ../../include/bb2diaspora.php:499
-msgid "Finishes:"
+#: ../../Zotlabs/Lib/Apps.php:230
+msgid "Probe"
msgstr ""
-#: ../../include/event.php:812
-msgid "This event has been added to your calendar."
+#: ../../Zotlabs/Lib/Apps.php:231
+msgid "Suggest"
msgstr ""
-#: ../../include/event.php:1012
-msgid "Not specified"
+#: ../../Zotlabs/Lib/Apps.php:232
+msgid "Random Channel"
msgstr ""
-#: ../../include/event.php:1013
-msgid "Needs Action"
+#: ../../Zotlabs/Lib/Apps.php:233
+msgid "Invite"
msgstr ""
-#: ../../include/event.php:1014
-msgid "Completed"
+#: ../../Zotlabs/Lib/Apps.php:234 ../../include/widgets.php:1459
+msgid "Features"
msgstr ""
-#: ../../include/event.php:1015
-msgid "In Process"
+#: ../../Zotlabs/Lib/Apps.php:236
+msgid "Post"
msgstr ""
-#: ../../include/event.php:1016
-msgid "Cancelled"
+#: ../../Zotlabs/Lib/Apps.php:338
+msgid "Purchase"
msgstr ""
-#: ../../include/import.php:29
-msgid ""
-"Cannot create a duplicate channel identifier on this system. Import failed."
+#: ../../include/Import/import_diaspora.php:16
+msgid "No username found in import file."
msgstr ""
-#: ../../include/import.php:76
-msgid "Channel clone failed. Import failed."
+#: ../../include/Import/import_diaspora.php:41 ../../include/import.php:50
+msgid "Unable to create a unique channel address. Import failed."
msgstr ""
-#: ../../include/items.php:892 ../../include/items.php:937
-msgid "(Unknown)"
+#: ../../include/dba/dba_driver.php:171
+#, php-format
+msgid "Cannot locate DNS info for database server '%s'"
msgstr ""
-#: ../../include/items.php:1136
-msgid "Visible to anybody on the internet."
+#: ../../include/taxonomy.php:188 ../../include/taxonomy.php:270
+#: ../../include/contact_widgets.php:91 ../../include/widgets.php:46
+#: ../../include/widgets.php:429
+msgid "Categories"
msgstr ""
-#: ../../include/items.php:1138
-msgid "Visible to you only."
+#: ../../include/taxonomy.php:228 ../../include/taxonomy.php:249
+msgid "Tags"
msgstr ""
-#: ../../include/items.php:1140
-msgid "Visible to anybody in this network."
+#: ../../include/taxonomy.php:293
+msgid "Keywords"
msgstr ""
-#: ../../include/items.php:1142
-msgid "Visible to anybody authenticated."
+#: ../../include/taxonomy.php:314
+msgid "have"
msgstr ""
-#: ../../include/items.php:1144
-#, php-format
-msgid "Visible to anybody on %s."
+#: ../../include/taxonomy.php:314
+msgid "has"
msgstr ""
-#: ../../include/items.php:1146
-msgid "Visible to all connections."
+#: ../../include/taxonomy.php:315
+msgid "want"
msgstr ""
-#: ../../include/items.php:1148
-msgid "Visible to approved connections."
+#: ../../include/taxonomy.php:315
+msgid "wants"
msgstr ""
-#: ../../include/items.php:1150
-msgid "Visible to specific connections."
+#: ../../include/taxonomy.php:316
+msgid "likes"
msgstr ""
-#: ../../include/items.php:3909
-msgid "Privacy group is empty."
+#: ../../include/taxonomy.php:317
+msgid "dislikes"
msgstr ""
-#: ../../include/items.php:3916
+#: ../../include/photos.php:114
#, php-format
-msgid "Privacy group: %s"
+msgid "Image exceeds website size limit of %lu bytes"
msgstr ""
-#: ../../include/items.php:3928
-msgid "Connection not found."
+#: ../../include/photos.php:121
+msgid "Image file is empty."
msgstr ""
-#: ../../include/items.php:4277
-msgid "profile photo"
+#: ../../include/photos.php:259
+msgid "Photo storage failed."
msgstr ""
-#: ../../include/message.php:20
-msgid "No recipient provided."
+#: ../../include/photos.php:299
+msgid "a new photo"
msgstr ""
-#: ../../include/message.php:25
-msgid "[no subject]"
+#: ../../include/photos.php:303
+#, php-format
+msgctxt "photo_upload"
+msgid "%1$s posted %2$s to %3$s"
msgstr ""
-#: ../../include/message.php:45
-msgid "Unable to determine sender."
+#: ../../include/photos.php:506 ../../include/conversation.php:1650
+msgid "Photo Albums"
msgstr ""
-#: ../../include/message.php:222
-msgid "Stored post could not be verified."
+#: ../../include/photos.php:510
+msgid "Upload New Photos"
msgstr ""
#: ../../include/text.php:428
@@ -7165,298 +7103,396 @@ msgstr ""
msgid "remove from file"
msgstr ""
-#: ../../include/text.php:1753 ../../include/text.php:1824
+#: ../../include/text.php:1754 ../../include/text.php:1825
msgid "default"
msgstr ""
-#: ../../include/text.php:1761
+#: ../../include/text.php:1762
msgid "Page layout"
msgstr ""
-#: ../../include/text.php:1761
+#: ../../include/text.php:1762
msgid "You can create your own with the layouts tool"
msgstr ""
-#: ../../include/text.php:1803
+#: ../../include/text.php:1804
msgid "Page content type"
msgstr ""
-#: ../../include/text.php:1836
+#: ../../include/text.php:1837
msgid "Select an alternate language"
msgstr ""
-#: ../../include/text.php:1953
+#: ../../include/text.php:1954
msgid "activity"
msgstr ""
-#: ../../include/text.php:2262
+#: ../../include/text.php:2263
msgid "Design Tools"
msgstr ""
-#: ../../include/text.php:2268
+#: ../../include/text.php:2269
msgid "Pages"
msgstr ""
-#: ../../include/widgets.php:103
-msgid "System"
+#: ../../include/event.php:22 ../../include/event.php:69
+#: ../../include/bb2diaspora.php:485
+msgid "l F d, Y \\@ g:i A"
msgstr ""
-#: ../../include/widgets.php:106
-msgid "New App"
+#: ../../include/event.php:30 ../../include/event.php:73
+#: ../../include/bb2diaspora.php:491
+msgid "Starts:"
msgstr ""
-#: ../../include/widgets.php:154
-msgid "Suggestions"
+#: ../../include/event.php:40 ../../include/event.php:77
+#: ../../include/bb2diaspora.php:499
+msgid "Finishes:"
msgstr ""
-#: ../../include/widgets.php:155
-msgid "See more..."
+#: ../../include/event.php:812
+msgid "This event has been added to your calendar."
msgstr ""
-#: ../../include/widgets.php:175
-#, php-format
-msgid "You have %1$.0f of %2$.0f allowed connections."
+#: ../../include/event.php:1012
+msgid "Not specified"
msgstr ""
-#: ../../include/widgets.php:181
-msgid "Add New Connection"
+#: ../../include/event.php:1013
+msgid "Needs Action"
msgstr ""
-#: ../../include/widgets.php:182
-msgid "Enter channel address"
+#: ../../include/event.php:1014
+msgid "Completed"
msgstr ""
-#: ../../include/widgets.php:183
-msgid "Examples: bob@example.com, https://example.com/barbara"
+#: ../../include/event.php:1015
+msgid "In Process"
msgstr ""
-#: ../../include/widgets.php:199
-msgid "Notes"
+#: ../../include/event.php:1016
+msgid "Cancelled"
msgstr ""
-#: ../../include/widgets.php:273
-msgid "Remove term"
+#: ../../include/message.php:20
+msgid "No recipient provided."
msgstr ""
-#: ../../include/widgets.php:281 ../../include/features.php:84
-msgid "Saved Searches"
+#: ../../include/message.php:25
+msgid "[no subject]"
msgstr ""
-#: ../../include/widgets.php:282 ../../include/group.php:316
-msgid "add"
+#: ../../include/message.php:45
+msgid "Unable to determine sender."
msgstr ""
-#: ../../include/widgets.php:310 ../../include/contact_widgets.php:53
-#: ../../include/features.php:98
-msgid "Saved Folders"
+#: ../../include/message.php:222
+msgid "Stored post could not be verified."
msgstr ""
-#: ../../include/widgets.php:313 ../../include/widgets.php:432
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94
-msgid "Everything"
+#: ../../include/conversation.php:204
+#, php-format
+msgid "%1$s is now connected with %2$s"
msgstr ""
-#: ../../include/widgets.php:354
-msgid "Archives"
+#: ../../include/conversation.php:239
+#, php-format
+msgid "%1$s poked %2$s"
msgstr ""
-#: ../../include/widgets.php:516
-msgid "Refresh"
+#: ../../include/conversation.php:694
+#, php-format
+msgid "View %s's profile @ %s"
msgstr ""
-#: ../../include/widgets.php:556
-msgid "Account settings"
+#: ../../include/conversation.php:713
+msgid "Categories:"
msgstr ""
-#: ../../include/widgets.php:562
-msgid "Channel settings"
+#: ../../include/conversation.php:714
+msgid "Filed under:"
msgstr ""
-#: ../../include/widgets.php:571
-msgid "Additional features"
+#: ../../include/conversation.php:741
+msgid "View in context"
msgstr ""
-#: ../../include/widgets.php:578
-msgid "Feature/Addon settings"
+#: ../../include/conversation.php:850
+msgid "remove"
msgstr ""
-#: ../../include/widgets.php:584
-msgid "Display settings"
+#: ../../include/conversation.php:854 ../../include/nav.php:247
+msgid "Loading..."
msgstr ""
-#: ../../include/widgets.php:591
-msgid "Manage locations"
+#: ../../include/conversation.php:855
+msgid "Delete Selected Items"
msgstr ""
-#: ../../include/widgets.php:600
-msgid "Export channel"
+#: ../../include/conversation.php:951
+msgid "View Source"
msgstr ""
-#: ../../include/widgets.php:607
-msgid "Connected apps"
+#: ../../include/conversation.php:952
+msgid "Follow Thread"
msgstr ""
-#: ../../include/widgets.php:622
-msgid "Premium Channel Settings"
+#: ../../include/conversation.php:953
+msgid "Unfollow Thread"
msgstr ""
-#: ../../include/widgets.php:651
-msgid "Private Mail Menu"
+#: ../../include/conversation.php:958
+msgid "Activity/Posts"
msgstr ""
-#: ../../include/widgets.php:653
-msgid "Combined View"
+#: ../../include/conversation.php:960
+msgid "Edit Connection"
msgstr ""
-#: ../../include/widgets.php:658 ../../include/nav.php:196
-msgid "Inbox"
+#: ../../include/conversation.php:961
+msgid "Message"
msgstr ""
-#: ../../include/widgets.php:663 ../../include/nav.php:197
-msgid "Outbox"
+#: ../../include/conversation.php:1078
+#, php-format
+msgid "%s likes this."
msgstr ""
-#: ../../include/widgets.php:668 ../../include/nav.php:198
-msgid "New Message"
+#: ../../include/conversation.php:1078
+#, php-format
+msgid "%s doesn't like this."
msgstr ""
-#: ../../include/widgets.php:685 ../../include/widgets.php:697
-msgid "Conversations"
+#: ../../include/conversation.php:1082
+#, php-format
+msgid "<span %1$s>%2$d people</span> like this."
+msgid_plural "<span %1$s>%2$d people</span> like this."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1084
+#, php-format
+msgid "<span %1$s>%2$d people</span> don't like this."
+msgid_plural "<span %1$s>%2$d people</span> don't like this."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1090
+msgid "and"
msgstr ""
-#: ../../include/widgets.php:689
-msgid "Received Messages"
+#: ../../include/conversation.php:1093
+#, php-format
+msgid ", and %d other people"
+msgid_plural ", and %d other people"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1094
+#, php-format
+msgid "%s like this."
msgstr ""
-#: ../../include/widgets.php:693
-msgid "Sent Messages"
+#: ../../include/conversation.php:1094
+#, php-format
+msgid "%s don't like this."
msgstr ""
-#: ../../include/widgets.php:707
-msgid "No messages."
+#: ../../include/conversation.php:1133
+msgid "Set your location"
msgstr ""
-#: ../../include/widgets.php:725
-msgid "Delete conversation"
+#: ../../include/conversation.php:1134
+msgid "Clear browser location"
msgstr ""
-#: ../../include/widgets.php:751
-msgid "Events Menu"
+#: ../../include/conversation.php:1150
+msgid "Embed image from photo albums"
msgstr ""
-#: ../../include/widgets.php:752
-msgid "Day View"
+#: ../../include/conversation.php:1182
+msgid "Tag term:"
msgstr ""
-#: ../../include/widgets.php:753
-msgid "Week View"
+#: ../../include/conversation.php:1183
+msgid "Where are you right now?"
msgstr ""
-#: ../../include/widgets.php:754
-msgid "Month View"
+#: ../../include/conversation.php:1186
+msgid "Choose images to embed"
msgstr ""
-#: ../../include/widgets.php:766
-msgid "Events Tools"
+#: ../../include/conversation.php:1187
+msgid "Choose an album"
msgstr ""
-#: ../../include/widgets.php:767
-msgid "Export Calendar"
+#: ../../include/conversation.php:1188
+msgid "Choose a different album..."
msgstr ""
-#: ../../include/widgets.php:768
-msgid "Import Calendar"
+#: ../../include/conversation.php:1189
+msgid "Error getting album list"
msgstr ""
-#: ../../include/widgets.php:842 ../../include/conversation.php:1662
-#: ../../include/conversation.php:1665
-msgid "Chatrooms"
+#: ../../include/conversation.php:1190
+msgid "Error getting photo link"
msgstr ""
-#: ../../include/widgets.php:846
-msgid "Overview"
+#: ../../include/conversation.php:1191
+msgid "Error getting album"
msgstr ""
-#: ../../include/widgets.php:853
-msgid "Chat Members"
+#: ../../include/conversation.php:1221
+msgid "Page link name"
msgstr ""
-#: ../../include/widgets.php:876
-msgid "Bookmarked Chatrooms"
+#: ../../include/conversation.php:1224
+msgid "Post as"
msgstr ""
-#: ../../include/widgets.php:899
-msgid "Suggested Chatrooms"
+#: ../../include/conversation.php:1234
+msgid "Embed an image from your albums"
msgstr ""
-#: ../../include/widgets.php:1044 ../../include/widgets.php:1156
-msgid "photo/image"
+#: ../../include/conversation.php:1236 ../../include/conversation.php:1273
+msgid "OK"
msgstr ""
-#: ../../include/widgets.php:1099
-msgid "Click to show more"
+#: ../../include/conversation.php:1238
+msgid "Toggle voting"
msgstr ""
-#: ../../include/widgets.php:1250
-msgid "Rating Tools"
+#: ../../include/conversation.php:1246
+msgid "Categories (optional, comma-separated list)"
msgstr ""
-#: ../../include/widgets.php:1254 ../../include/widgets.php:1256
-msgid "Rate Me"
+#: ../../include/conversation.php:1269
+msgid "Set publish date"
msgstr ""
-#: ../../include/widgets.php:1259
-msgid "View Ratings"
+#: ../../include/conversation.php:1518
+msgid "Discover"
msgstr ""
-#: ../../include/widgets.php:1316
-msgid "Forums"
+#: ../../include/conversation.php:1521
+msgid "Imported public streams"
msgstr ""
-#: ../../include/widgets.php:1345
-msgid "Tasks"
+#: ../../include/conversation.php:1526
+msgid "Commented Order"
msgstr ""
-#: ../../include/widgets.php:1354
-msgid "Documentation"
+#: ../../include/conversation.php:1529
+msgid "Sort by Comment Date"
msgstr ""
-#: ../../include/widgets.php:1356
-msgid "Project/Site Information"
+#: ../../include/conversation.php:1533
+msgid "Posted Order"
msgstr ""
-#: ../../include/widgets.php:1357
-msgid "For Members"
+#: ../../include/conversation.php:1536
+msgid "Sort by Post Date"
msgstr ""
-#: ../../include/widgets.php:1358
-msgid "For Administrators"
+#: ../../include/conversation.php:1544
+msgid "Posts that mention or involve you"
msgstr ""
-#: ../../include/widgets.php:1359
-msgid "For Developers"
+#: ../../include/conversation.php:1553
+msgid "Activity Stream - by date"
msgstr ""
-#: ../../include/widgets.php:1383 ../../include/widgets.php:1421
-msgid "Member registrations waiting for confirmation"
+#: ../../include/conversation.php:1559
+msgid "Starred"
msgstr ""
-#: ../../include/widgets.php:1389
-msgid "Inspect queue"
+#: ../../include/conversation.php:1562
+msgid "Favourite Posts"
msgstr ""
-#: ../../include/widgets.php:1391
-msgid "DB updates"
+#: ../../include/conversation.php:1569
+msgid "Spam"
msgstr ""
-#: ../../include/widgets.php:1416 ../../include/nav.php:216
-msgid "Admin"
+#: ../../include/conversation.php:1572
+msgid "Posts flagged as SPAM"
msgstr ""
-#: ../../include/widgets.php:1417
-msgid "Plugin Features"
+#: ../../include/conversation.php:1629
+msgid "Status Messages and Posts"
+msgstr ""
+
+#: ../../include/conversation.php:1638
+msgid "About"
+msgstr ""
+
+#: ../../include/conversation.php:1641
+msgid "Profile Details"
+msgstr ""
+
+#: ../../include/conversation.php:1657
+msgid "Files and Storage"
msgstr ""
+#: ../../include/conversation.php:1677 ../../include/conversation.php:1680
+#: ../../include/widgets.php:842
+msgid "Chatrooms"
+msgstr ""
+
+#: ../../include/conversation.php:1690 ../../include/nav.php:102
+msgid "Bookmarks"
+msgstr ""
+
+#: ../../include/conversation.php:1693
+msgid "Saved Bookmarks"
+msgstr ""
+
+#: ../../include/conversation.php:1703
+msgid "Manage Webpages"
+msgstr ""
+
+#: ../../include/conversation.php:1762
+msgctxt "noun"
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1765
+msgctxt "noun"
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1768
+msgctxt "noun"
+msgid "Undecided"
+msgid_plural "Undecided"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1771
+msgctxt "noun"
+msgid "Agree"
+msgid_plural "Agrees"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1774
+msgctxt "noun"
+msgid "Disagree"
+msgid_plural "Disagrees"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/conversation.php:1777
+msgctxt "noun"
+msgid "Abstain"
+msgid_plural "Abstains"
+msgstr[0] ""
+msgstr[1] ""
+
#: ../../include/follow.php:27
msgid "Channel is blocked on this site."
msgstr ""
@@ -7485,26 +7521,17 @@ msgstr ""
msgid "Cannot connect to yourself."
msgstr ""
-#: ../../include/bookmarks.php:35
-#, php-format
-msgid "%1$s's bookmarks"
-msgstr ""
-
-#: ../../include/api.php:1336
-msgid "Public Timeline"
-msgstr ""
-
-#: ../../include/bbcode.php:123 ../../include/bbcode.php:844
-#: ../../include/bbcode.php:847 ../../include/bbcode.php:852
-#: ../../include/bbcode.php:855 ../../include/bbcode.php:858
-#: ../../include/bbcode.php:861 ../../include/bbcode.php:866
+#: ../../include/bbcode.php:123 ../../include/bbcode.php:866
#: ../../include/bbcode.php:869 ../../include/bbcode.php:874
#: ../../include/bbcode.php:877 ../../include/bbcode.php:880
-#: ../../include/bbcode.php:883
+#: ../../include/bbcode.php:883 ../../include/bbcode.php:888
+#: ../../include/bbcode.php:891 ../../include/bbcode.php:896
+#: ../../include/bbcode.php:899 ../../include/bbcode.php:902
+#: ../../include/bbcode.php:905
msgid "Image/photo"
msgstr ""
-#: ../../include/bbcode.php:162 ../../include/bbcode.php:894
+#: ../../include/bbcode.php:162 ../../include/bbcode.php:916
msgid "Encrypted content"
msgstr ""
@@ -7520,27 +7547,32 @@ msgid ""
"to install it on this site."
msgstr ""
-#: ../../include/bbcode.php:254
+#: ../../include/bbcode.php:261
#, php-format
msgid "%1$s wrote the following %2$s %3$s"
msgstr ""
-#: ../../include/bbcode.php:331 ../../include/bbcode.php:339
+#: ../../include/bbcode.php:338 ../../include/bbcode.php:346
msgid "Click to open/close"
msgstr ""
-#: ../../include/bbcode.php:339
+#: ../../include/bbcode.php:346
msgid "spoiler"
msgstr ""
-#: ../../include/bbcode.php:585
+#: ../../include/bbcode.php:607
msgid "Different viewers will see this text differently"
msgstr ""
-#: ../../include/bbcode.php:832
+#: ../../include/bbcode.php:854
msgid "$1 wrote:"
msgstr ""
+#: ../../include/bookmarks.php:35
+#, php-format
+msgid "%1$s's bookmarks"
+msgstr ""
+
#: ../../include/dir_fns.php:141
msgid "Directory Options"
msgstr ""
@@ -7557,13 +7589,30 @@ msgstr ""
msgid "This Website Only"
msgstr ""
+#: ../../include/zot.php:709
+msgid "Invalid data packet"
+msgstr ""
+
+#: ../../include/zot.php:725
+msgid "Unable to verify channel signature"
+msgstr ""
+
+#: ../../include/zot.php:2373
+#, php-format
+msgid "Unable to verify site signature for %s"
+msgstr ""
+
+#: ../../include/zot.php:3722
+msgid "invalid target signature"
+msgstr ""
+
#: ../../include/security.php:383
msgid ""
"The form security token was not correct. This probably happened because the "
"form has been opened for too long (>3 hours) before submitting it."
msgstr ""
-#: ../../include/nav.php:82 ../../include/nav.php:113 ../../boot.php:1702
+#: ../../include/nav.php:82 ../../include/nav.php:113 ../../boot.php:1703
msgid "Logout"
msgstr ""
@@ -7587,7 +7636,7 @@ msgstr ""
msgid "Manage/Edit profiles"
msgstr ""
-#: ../../include/nav.php:90 ../../include/channel.php:941
+#: ../../include/nav.php:90 ../../include/channel.php:922
msgid "Edit Profile"
msgstr ""
@@ -7607,10 +7656,6 @@ msgstr ""
msgid "Your chatrooms"
msgstr ""
-#: ../../include/nav.php:102 ../../include/conversation.php:1675
-msgid "Bookmarks"
-msgstr ""
-
#: ../../include/nav.php:102
msgid "Your bookmarks"
msgstr ""
@@ -7700,6 +7745,18 @@ msgstr ""
msgid "Mark all private messages seen"
msgstr ""
+#: ../../include/nav.php:196 ../../include/widgets.php:658
+msgid "Inbox"
+msgstr ""
+
+#: ../../include/nav.php:197 ../../include/widgets.php:663
+msgid "Outbox"
+msgstr ""
+
+#: ../../include/nav.php:198 ../../include/widgets.php:668
+msgid "New Message"
+msgstr ""
+
#: ../../include/nav.php:201
msgid "Event Calendar"
msgstr ""
@@ -7720,12 +7777,12 @@ msgstr ""
msgid "Account/Channel Settings"
msgstr ""
-#: ../../include/nav.php:216
-msgid "Site Setup and Configuration"
+#: ../../include/nav.php:216 ../../include/widgets.php:1489
+msgid "Admin"
msgstr ""
-#: ../../include/nav.php:247 ../../include/conversation.php:851
-msgid "Loading..."
+#: ../../include/nav.php:216
+msgid "Site Setup and Configuration"
msgstr ""
#: ../../include/nav.php:252
@@ -7736,19 +7793,6 @@ msgstr ""
msgid "Please wait..."
msgstr ""
-#: ../../include/connections.php:95
-msgid "New window"
-msgstr ""
-
-#: ../../include/connections.php:96
-msgid "Open the selected location in a different window or browser tab"
-msgstr ""
-
-#: ../../include/connections.php:214
-#, php-format
-msgid "User '%s' deleted"
-msgstr ""
-
#: ../../include/contact_widgets.php:11
#, php-format
msgid "%d invitation available"
@@ -7784,6 +7828,16 @@ msgstr ""
msgid "Advanced example: name=fred and country=iceland"
msgstr ""
+#: ../../include/contact_widgets.php:53 ../../include/features.php:98
+#: ../../include/widgets.php:310
+msgid "Saved Folders"
+msgstr ""
+
+#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:94
+#: ../../include/widgets.php:313 ../../include/widgets.php:432
+msgid "Everything"
+msgstr ""
+
#: ../../include/contact_widgets.php:122
#, php-format
msgid "%d connection in common"
@@ -7795,268 +7849,6 @@ msgstr[1] ""
msgid "show more"
msgstr ""
-#: ../../include/conversation.php:204
-#, php-format
-msgid "%1$s is now connected with %2$s"
-msgstr ""
-
-#: ../../include/conversation.php:239
-#, php-format
-msgid "%1$s poked %2$s"
-msgstr ""
-
-#: ../../include/conversation.php:691
-#, php-format
-msgid "View %s's profile @ %s"
-msgstr ""
-
-#: ../../include/conversation.php:710
-msgid "Categories:"
-msgstr ""
-
-#: ../../include/conversation.php:711
-msgid "Filed under:"
-msgstr ""
-
-#: ../../include/conversation.php:738
-msgid "View in context"
-msgstr ""
-
-#: ../../include/conversation.php:847
-msgid "remove"
-msgstr ""
-
-#: ../../include/conversation.php:852
-msgid "Delete Selected Items"
-msgstr ""
-
-#: ../../include/conversation.php:948
-msgid "View Source"
-msgstr ""
-
-#: ../../include/conversation.php:949
-msgid "Follow Thread"
-msgstr ""
-
-#: ../../include/conversation.php:950
-msgid "Unfollow Thread"
-msgstr ""
-
-#: ../../include/conversation.php:955
-msgid "Activity/Posts"
-msgstr ""
-
-#: ../../include/conversation.php:957
-msgid "Edit Connection"
-msgstr ""
-
-#: ../../include/conversation.php:958
-msgid "Message"
-msgstr ""
-
-#: ../../include/conversation.php:1075
-#, php-format
-msgid "%s likes this."
-msgstr ""
-
-#: ../../include/conversation.php:1075
-#, php-format
-msgid "%s doesn't like this."
-msgstr ""
-
-#: ../../include/conversation.php:1079
-#, php-format
-msgid "<span %1$s>%2$d people</span> like this."
-msgid_plural "<span %1$s>%2$d people</span> like this."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1081
-#, php-format
-msgid "<span %1$s>%2$d people</span> don't like this."
-msgid_plural "<span %1$s>%2$d people</span> don't like this."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1087
-msgid "and"
-msgstr ""
-
-#: ../../include/conversation.php:1090
-#, php-format
-msgid ", and %d other people"
-msgid_plural ", and %d other people"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1091
-#, php-format
-msgid "%s like this."
-msgstr ""
-
-#: ../../include/conversation.php:1091
-#, php-format
-msgid "%s don't like this."
-msgstr ""
-
-#: ../../include/conversation.php:1130
-msgid "Set your location"
-msgstr ""
-
-#: ../../include/conversation.php:1131
-msgid "Clear browser location"
-msgstr ""
-
-#: ../../include/conversation.php:1177
-msgid "Tag term:"
-msgstr ""
-
-#: ../../include/conversation.php:1178
-msgid "Where are you right now?"
-msgstr ""
-
-#: ../../include/conversation.php:1210
-msgid "Page link name"
-msgstr ""
-
-#: ../../include/conversation.php:1213
-msgid "Post as"
-msgstr ""
-
-#: ../../include/conversation.php:1223
-msgid "Toggle voting"
-msgstr ""
-
-#: ../../include/conversation.php:1231
-msgid "Categories (optional, comma-separated list)"
-msgstr ""
-
-#: ../../include/conversation.php:1254
-msgid "Set publish date"
-msgstr ""
-
-#: ../../include/conversation.php:1258
-msgid "OK"
-msgstr ""
-
-#: ../../include/conversation.php:1503
-msgid "Discover"
-msgstr ""
-
-#: ../../include/conversation.php:1506
-msgid "Imported public streams"
-msgstr ""
-
-#: ../../include/conversation.php:1511
-msgid "Commented Order"
-msgstr ""
-
-#: ../../include/conversation.php:1514
-msgid "Sort by Comment Date"
-msgstr ""
-
-#: ../../include/conversation.php:1518
-msgid "Posted Order"
-msgstr ""
-
-#: ../../include/conversation.php:1521
-msgid "Sort by Post Date"
-msgstr ""
-
-#: ../../include/conversation.php:1529
-msgid "Posts that mention or involve you"
-msgstr ""
-
-#: ../../include/conversation.php:1538
-msgid "Activity Stream - by date"
-msgstr ""
-
-#: ../../include/conversation.php:1544
-msgid "Starred"
-msgstr ""
-
-#: ../../include/conversation.php:1547
-msgid "Favourite Posts"
-msgstr ""
-
-#: ../../include/conversation.php:1554
-msgid "Spam"
-msgstr ""
-
-#: ../../include/conversation.php:1557
-msgid "Posts flagged as SPAM"
-msgstr ""
-
-#: ../../include/conversation.php:1614
-msgid "Status Messages and Posts"
-msgstr ""
-
-#: ../../include/conversation.php:1623
-msgid "About"
-msgstr ""
-
-#: ../../include/conversation.php:1626
-msgid "Profile Details"
-msgstr ""
-
-#: ../../include/conversation.php:1635 ../../include/photos.php:502
-msgid "Photo Albums"
-msgstr ""
-
-#: ../../include/conversation.php:1642
-msgid "Files and Storage"
-msgstr ""
-
-#: ../../include/conversation.php:1678
-msgid "Saved Bookmarks"
-msgstr ""
-
-#: ../../include/conversation.php:1688
-msgid "Manage Webpages"
-msgstr ""
-
-#: ../../include/conversation.php:1747
-msgctxt "noun"
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1750
-msgctxt "noun"
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1753
-msgctxt "noun"
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1756
-msgctxt "noun"
-msgid "Agree"
-msgid_plural "Agrees"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1759
-msgctxt "noun"
-msgid "Disagree"
-msgid_plural "Disagrees"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1762
-msgctxt "noun"
-msgid "Abstain"
-msgid_plural "Abstains"
-msgstr[0] ""
-msgstr[1] ""
-
#: ../../include/selectors.php:30
msgid "Frequently"
msgstr ""
@@ -8303,6 +8095,160 @@ msgstr ""
msgid "Ask me"
msgstr ""
+#: ../../include/channel.php:32
+msgid "Unable to obtain identity information from database"
+msgstr ""
+
+#: ../../include/channel.php:66
+msgid "Empty name"
+msgstr ""
+
+#: ../../include/channel.php:69
+msgid "Name too long"
+msgstr ""
+
+#: ../../include/channel.php:180
+msgid "No account identifier"
+msgstr ""
+
+#: ../../include/channel.php:192
+msgid "Nickname is required."
+msgstr ""
+
+#: ../../include/channel.php:206
+msgid "Reserved nickname. Please choose another."
+msgstr ""
+
+#: ../../include/channel.php:211
+msgid ""
+"Nickname has unsupported characters or is already being used on this site."
+msgstr ""
+
+#: ../../include/channel.php:287
+msgid "Unable to retrieve created identity"
+msgstr ""
+
+#: ../../include/channel.php:345
+msgid "Default Profile"
+msgstr ""
+
+#: ../../include/channel.php:772
+msgid "Requested channel is not available."
+msgstr ""
+
+#: ../../include/channel.php:919
+msgid "Create New Profile"
+msgstr ""
+
+#: ../../include/channel.php:939
+msgid "Visible to everybody"
+msgstr ""
+
+#: ../../include/channel.php:1012 ../../include/channel.php:1123
+msgid "Gender:"
+msgstr ""
+
+#: ../../include/channel.php:1013 ../../include/channel.php:1167
+msgid "Status:"
+msgstr ""
+
+#: ../../include/channel.php:1014 ../../include/channel.php:1178
+msgid "Homepage:"
+msgstr ""
+
+#: ../../include/channel.php:1015
+msgid "Online Now"
+msgstr ""
+
+#: ../../include/channel.php:1128
+msgid "Like this channel"
+msgstr ""
+
+#: ../../include/channel.php:1152
+msgid "j F, Y"
+msgstr ""
+
+#: ../../include/channel.php:1153
+msgid "j F"
+msgstr ""
+
+#: ../../include/channel.php:1160
+msgid "Birthday:"
+msgstr ""
+
+#: ../../include/channel.php:1173
+#, php-format
+msgid "for %1$d %2$s"
+msgstr ""
+
+#: ../../include/channel.php:1176
+msgid "Sexual Preference:"
+msgstr ""
+
+#: ../../include/channel.php:1182
+msgid "Tags:"
+msgstr ""
+
+#: ../../include/channel.php:1184
+msgid "Political Views:"
+msgstr ""
+
+#: ../../include/channel.php:1186
+msgid "Religion:"
+msgstr ""
+
+#: ../../include/channel.php:1190
+msgid "Hobbies/Interests:"
+msgstr ""
+
+#: ../../include/channel.php:1192
+msgid "Likes:"
+msgstr ""
+
+#: ../../include/channel.php:1194
+msgid "Dislikes:"
+msgstr ""
+
+#: ../../include/channel.php:1196
+msgid "Contact information and Social Networks:"
+msgstr ""
+
+#: ../../include/channel.php:1198
+msgid "My other channels:"
+msgstr ""
+
+#: ../../include/channel.php:1200
+msgid "Musical interests:"
+msgstr ""
+
+#: ../../include/channel.php:1202
+msgid "Books, literature:"
+msgstr ""
+
+#: ../../include/channel.php:1204
+msgid "Television:"
+msgstr ""
+
+#: ../../include/channel.php:1206
+msgid "Film/dance/culture/entertainment:"
+msgstr ""
+
+#: ../../include/channel.php:1208
+msgid "Love/Romance:"
+msgstr ""
+
+#: ../../include/channel.php:1210
+msgid "Work/employment:"
+msgstr ""
+
+#: ../../include/channel.php:1212
+msgid "School/education:"
+msgstr ""
+
+#: ../../include/channel.php:1232
+msgid "Like this thing"
+msgstr ""
+
#: ../../include/PermissionDescription.php:31
#: ../../include/acl_selectors.php:232
msgid "Visible to your default audience"
@@ -8405,7 +8351,7 @@ msgid "Registration request at %s"
msgstr ""
#: ../../include/account.php:317 ../../include/account.php:344
-#: ../../include/account.php:404 ../../include/network.php:1871
+#: ../../include/account.php:404 ../../include/network.php:1896
msgid "Administrator"
msgstr ""
@@ -8447,218 +8393,64 @@ msgstr ""
msgid "Item was not found."
msgstr ""
-#: ../../include/attach.php:497
+#: ../../include/attach.php:499
msgid "No source file."
msgstr ""
-#: ../../include/attach.php:519
+#: ../../include/attach.php:521
msgid "Cannot locate file to replace"
msgstr ""
-#: ../../include/attach.php:537
+#: ../../include/attach.php:539
msgid "Cannot locate file to revise/update"
msgstr ""
-#: ../../include/attach.php:672
+#: ../../include/attach.php:674
#, php-format
msgid "File exceeds size limit of %d"
msgstr ""
-#: ../../include/attach.php:686
+#: ../../include/attach.php:688
#, php-format
msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
msgstr ""
-#: ../../include/attach.php:842
+#: ../../include/attach.php:846
msgid "File upload failed. Possible system limit or action terminated."
msgstr ""
-#: ../../include/attach.php:855
+#: ../../include/attach.php:859
msgid "Stored file could not be verified. Upload failed."
msgstr ""
-#: ../../include/attach.php:909 ../../include/attach.php:925
+#: ../../include/attach.php:915 ../../include/attach.php:931
msgid "Path not available."
msgstr ""
-#: ../../include/attach.php:971 ../../include/attach.php:1123
+#: ../../include/attach.php:977 ../../include/attach.php:1129
msgid "Empty pathname"
msgstr ""
-#: ../../include/attach.php:997
+#: ../../include/attach.php:1003
msgid "duplicate filename or path"
msgstr ""
-#: ../../include/attach.php:1019
+#: ../../include/attach.php:1025
msgid "Path not found."
msgstr ""
-#: ../../include/attach.php:1077
+#: ../../include/attach.php:1083
msgid "mkdir failed."
msgstr ""
-#: ../../include/attach.php:1081
+#: ../../include/attach.php:1087
msgid "database storage failed."
msgstr ""
-#: ../../include/attach.php:1129
+#: ../../include/attach.php:1135
msgid "Empty path"
msgstr ""
-#: ../../include/channel.php:32
-msgid "Unable to obtain identity information from database"
-msgstr ""
-
-#: ../../include/channel.php:66
-msgid "Empty name"
-msgstr ""
-
-#: ../../include/channel.php:69
-msgid "Name too long"
-msgstr ""
-
-#: ../../include/channel.php:180
-msgid "No account identifier"
-msgstr ""
-
-#: ../../include/channel.php:192
-msgid "Nickname is required."
-msgstr ""
-
-#: ../../include/channel.php:206
-msgid "Reserved nickname. Please choose another."
-msgstr ""
-
-#: ../../include/channel.php:211
-msgid ""
-"Nickname has unsupported characters or is already being used on this site."
-msgstr ""
-
-#: ../../include/channel.php:287
-msgid "Unable to retrieve created identity"
-msgstr ""
-
-#: ../../include/channel.php:345
-msgid "Default Profile"
-msgstr ""
-
-#: ../../include/channel.php:791
-msgid "Requested channel is not available."
-msgstr ""
-
-#: ../../include/channel.php:938
-msgid "Create New Profile"
-msgstr ""
-
-#: ../../include/channel.php:958
-msgid "Visible to everybody"
-msgstr ""
-
-#: ../../include/channel.php:1031 ../../include/channel.php:1142
-msgid "Gender:"
-msgstr ""
-
-#: ../../include/channel.php:1032 ../../include/channel.php:1186
-msgid "Status:"
-msgstr ""
-
-#: ../../include/channel.php:1033 ../../include/channel.php:1197
-msgid "Homepage:"
-msgstr ""
-
-#: ../../include/channel.php:1034
-msgid "Online Now"
-msgstr ""
-
-#: ../../include/channel.php:1147
-msgid "Like this channel"
-msgstr ""
-
-#: ../../include/channel.php:1171
-msgid "j F, Y"
-msgstr ""
-
-#: ../../include/channel.php:1172
-msgid "j F"
-msgstr ""
-
-#: ../../include/channel.php:1179
-msgid "Birthday:"
-msgstr ""
-
-#: ../../include/channel.php:1192
-#, php-format
-msgid "for %1$d %2$s"
-msgstr ""
-
-#: ../../include/channel.php:1195
-msgid "Sexual Preference:"
-msgstr ""
-
-#: ../../include/channel.php:1201
-msgid "Tags:"
-msgstr ""
-
-#: ../../include/channel.php:1203
-msgid "Political Views:"
-msgstr ""
-
-#: ../../include/channel.php:1205
-msgid "Religion:"
-msgstr ""
-
-#: ../../include/channel.php:1209
-msgid "Hobbies/Interests:"
-msgstr ""
-
-#: ../../include/channel.php:1211
-msgid "Likes:"
-msgstr ""
-
-#: ../../include/channel.php:1213
-msgid "Dislikes:"
-msgstr ""
-
-#: ../../include/channel.php:1215
-msgid "Contact information and Social Networks:"
-msgstr ""
-
-#: ../../include/channel.php:1217
-msgid "My other channels:"
-msgstr ""
-
-#: ../../include/channel.php:1219
-msgid "Musical interests:"
-msgstr ""
-
-#: ../../include/channel.php:1221
-msgid "Books, literature:"
-msgstr ""
-
-#: ../../include/channel.php:1223
-msgid "Television:"
-msgstr ""
-
-#: ../../include/channel.php:1225
-msgid "Film/dance/culture/entertainment:"
-msgstr ""
-
-#: ../../include/channel.php:1227
-msgid "Love/Romance:"
-msgstr ""
-
-#: ../../include/channel.php:1229
-msgid "Work/employment:"
-msgstr ""
-
-#: ../../include/channel.php:1231
-msgid "School/education:"
-msgstr ""
-
-#: ../../include/channel.php:1251
-msgid "Like this thing"
-msgstr ""
-
#: ../../include/features.php:48
msgid "General Features"
msgstr ""
@@ -8846,6 +8638,10 @@ msgstr ""
msgid "Enable management and selection of privacy groups"
msgstr ""
+#: ../../include/features.php:84 ../../include/widgets.php:281
+msgid "Saved Searches"
+msgstr ""
+
#: ../../include/features.php:84
msgid "Save search terms for re-use"
msgstr ""
@@ -8950,6 +8746,28 @@ msgstr ""
msgid "Embedding disabled"
msgstr ""
+#: ../../include/import.php:29
+msgid ""
+"Cannot create a duplicate channel identifier on this system. Import failed."
+msgstr ""
+
+#: ../../include/import.php:76
+msgid "Channel clone failed. Import failed."
+msgstr ""
+
+#: ../../include/connections.php:95
+msgid "New window"
+msgstr ""
+
+#: ../../include/connections.php:96
+msgid "Open the selected location in a different window or browser tab"
+msgstr ""
+
+#: ../../include/connections.php:214
+#, php-format
+msgid "User '%s' deleted"
+msgstr ""
+
#: ../../include/acl_selectors.php:271
msgid "Who can see this?"
msgstr ""
@@ -9003,7 +8821,7 @@ msgstr ""
msgid "YYYY-MM-DD or MM-DD"
msgstr ""
-#: ../../include/datetime.php:272 ../../boot.php:2470
+#: ../../include/datetime.php:272 ../../boot.php:2471
msgid "never"
msgstr ""
@@ -9103,6 +8921,10 @@ msgstr ""
msgid "Channels not in any privacy group"
msgstr ""
+#: ../../include/group.php:316 ../../include/widgets.php:282
+msgid "add"
+msgstr ""
+
#: ../../include/js_strings.php:5
msgid "Delete this item?"
msgstr ""
@@ -9347,106 +9169,345 @@ msgctxt "calendar"
msgid "All day"
msgstr ""
-#: ../../include/network.php:657
+#: ../../include/network.php:682
msgid "view full size"
msgstr ""
-#: ../../include/network.php:1885
+#: ../../include/network.php:1910
msgid "No Subject"
msgstr ""
-#: ../../include/network.php:2146 ../../include/network.php:2147
+#: ../../include/network.php:2171 ../../include/network.php:2172
msgid "Friendica"
msgstr ""
-#: ../../include/network.php:2148
+#: ../../include/network.php:2173
msgid "OStatus"
msgstr ""
-#: ../../include/network.php:2149
+#: ../../include/network.php:2174
msgid "GNU-Social"
msgstr ""
-#: ../../include/network.php:2150
+#: ../../include/network.php:2175
msgid "RSS/Atom"
msgstr ""
-#: ../../include/network.php:2152
+#: ../../include/network.php:2177
msgid "Diaspora"
msgstr ""
-#: ../../include/network.php:2153
+#: ../../include/network.php:2178
msgid "Facebook"
msgstr ""
-#: ../../include/network.php:2154
+#: ../../include/network.php:2179
msgid "Zot"
msgstr ""
-#: ../../include/network.php:2155
+#: ../../include/network.php:2180
msgid "LinkedIn"
msgstr ""
-#: ../../include/network.php:2156
+#: ../../include/network.php:2181
msgid "XMPP/IM"
msgstr ""
-#: ../../include/network.php:2157
+#: ../../include/network.php:2182
msgid "MySpace"
msgstr ""
-#: ../../include/photos.php:110
-#, php-format
-msgid "Image exceeds website size limit of %lu bytes"
+#: ../../include/items.php:902 ../../include/items.php:947
+msgid "(Unknown)"
msgstr ""
-#: ../../include/photos.php:117
-msgid "Image file is empty."
+#: ../../include/items.php:1146
+msgid "Visible to anybody on the internet."
msgstr ""
-#: ../../include/photos.php:255
-msgid "Photo storage failed."
+#: ../../include/items.php:1148
+msgid "Visible to you only."
msgstr ""
-#: ../../include/photos.php:295
-msgid "a new photo"
+#: ../../include/items.php:1150
+msgid "Visible to anybody in this network."
msgstr ""
-#: ../../include/photos.php:299
+#: ../../include/items.php:1152
+msgid "Visible to anybody authenticated."
+msgstr ""
+
+#: ../../include/items.php:1154
#, php-format
-msgctxt "photo_upload"
-msgid "%1$s posted %2$s to %3$s"
+msgid "Visible to anybody on %s."
msgstr ""
-#: ../../include/photos.php:506
-msgid "Upload New Photos"
+#: ../../include/items.php:1156
+msgid "Visible to all connections."
msgstr ""
-#: ../../include/zot.php:699
-msgid "Invalid data packet"
+#: ../../include/items.php:1158
+msgid "Visible to approved connections."
msgstr ""
-#: ../../include/zot.php:715
-msgid "Unable to verify channel signature"
+#: ../../include/items.php:1160
+msgid "Visible to specific connections."
msgstr ""
-#: ../../include/zot.php:2363
+#: ../../include/items.php:3920
+msgid "Privacy group is empty."
+msgstr ""
+
+#: ../../include/items.php:3927
#, php-format
-msgid "Unable to verify site signature for %s"
+msgid "Privacy group: %s"
msgstr ""
-#: ../../include/zot.php:3712
-msgid "invalid target signature"
+#: ../../include/items.php:3939
+msgid "Connection not found."
+msgstr ""
+
+#: ../../include/items.php:4305
+msgid "profile photo"
msgstr ""
-#: ../../include/page_widgets.php:6
+#: ../../include/page_widgets.php:7
msgid "New Page"
msgstr ""
-#: ../../include/page_widgets.php:43
+#: ../../include/page_widgets.php:46
msgid "Title"
msgstr ""
+#: ../../include/widgets.php:103
+msgid "System"
+msgstr ""
+
+#: ../../include/widgets.php:106
+msgid "New App"
+msgstr ""
+
+#: ../../include/widgets.php:154
+msgid "Suggestions"
+msgstr ""
+
+#: ../../include/widgets.php:155
+msgid "See more..."
+msgstr ""
+
+#: ../../include/widgets.php:175
+#, php-format
+msgid "You have %1$.0f of %2$.0f allowed connections."
+msgstr ""
+
+#: ../../include/widgets.php:181
+msgid "Add New Connection"
+msgstr ""
+
+#: ../../include/widgets.php:182
+msgid "Enter channel address"
+msgstr ""
+
+#: ../../include/widgets.php:183
+msgid "Examples: bob@example.com, https://example.com/barbara"
+msgstr ""
+
+#: ../../include/widgets.php:199
+msgid "Notes"
+msgstr ""
+
+#: ../../include/widgets.php:273
+msgid "Remove term"
+msgstr ""
+
+#: ../../include/widgets.php:354
+msgid "Archives"
+msgstr ""
+
+#: ../../include/widgets.php:516
+msgid "Refresh"
+msgstr ""
+
+#: ../../include/widgets.php:556
+msgid "Account settings"
+msgstr ""
+
+#: ../../include/widgets.php:562
+msgid "Channel settings"
+msgstr ""
+
+#: ../../include/widgets.php:571
+msgid "Additional features"
+msgstr ""
+
+#: ../../include/widgets.php:578
+msgid "Feature/Addon settings"
+msgstr ""
+
+#: ../../include/widgets.php:584
+msgid "Display settings"
+msgstr ""
+
+#: ../../include/widgets.php:591
+msgid "Manage locations"
+msgstr ""
+
+#: ../../include/widgets.php:600
+msgid "Export channel"
+msgstr ""
+
+#: ../../include/widgets.php:607
+msgid "Connected apps"
+msgstr ""
+
+#: ../../include/widgets.php:622
+msgid "Premium Channel Settings"
+msgstr ""
+
+#: ../../include/widgets.php:651
+msgid "Private Mail Menu"
+msgstr ""
+
+#: ../../include/widgets.php:653
+msgid "Combined View"
+msgstr ""
+
+#: ../../include/widgets.php:685 ../../include/widgets.php:697
+msgid "Conversations"
+msgstr ""
+
+#: ../../include/widgets.php:689
+msgid "Received Messages"
+msgstr ""
+
+#: ../../include/widgets.php:693
+msgid "Sent Messages"
+msgstr ""
+
+#: ../../include/widgets.php:707
+msgid "No messages."
+msgstr ""
+
+#: ../../include/widgets.php:725
+msgid "Delete conversation"
+msgstr ""
+
+#: ../../include/widgets.php:751
+msgid "Events Menu"
+msgstr ""
+
+#: ../../include/widgets.php:752
+msgid "Day View"
+msgstr ""
+
+#: ../../include/widgets.php:753
+msgid "Week View"
+msgstr ""
+
+#: ../../include/widgets.php:754
+msgid "Month View"
+msgstr ""
+
+#: ../../include/widgets.php:766
+msgid "Events Tools"
+msgstr ""
+
+#: ../../include/widgets.php:767
+msgid "Export Calendar"
+msgstr ""
+
+#: ../../include/widgets.php:768
+msgid "Import Calendar"
+msgstr ""
+
+#: ../../include/widgets.php:846
+msgid "Overview"
+msgstr ""
+
+#: ../../include/widgets.php:853
+msgid "Chat Members"
+msgstr ""
+
+#: ../../include/widgets.php:875
+msgid "Wiki List"
+msgstr ""
+
+#: ../../include/widgets.php:913
+msgid "Wiki Pages"
+msgstr ""
+
+#: ../../include/widgets.php:948
+msgid "Bookmarked Chatrooms"
+msgstr ""
+
+#: ../../include/widgets.php:971
+msgid "Suggested Chatrooms"
+msgstr ""
+
+#: ../../include/widgets.php:1117 ../../include/widgets.php:1229
+msgid "photo/image"
+msgstr ""
+
+#: ../../include/widgets.php:1172
+msgid "Click to show more"
+msgstr ""
+
+#: ../../include/widgets.php:1323
+msgid "Rating Tools"
+msgstr ""
+
+#: ../../include/widgets.php:1327 ../../include/widgets.php:1329
+msgid "Rate Me"
+msgstr ""
+
+#: ../../include/widgets.php:1332
+msgid "View Ratings"
+msgstr ""
+
+#: ../../include/widgets.php:1389
+msgid "Forums"
+msgstr ""
+
+#: ../../include/widgets.php:1418
+msgid "Tasks"
+msgstr ""
+
+#: ../../include/widgets.php:1427
+msgid "Documentation"
+msgstr ""
+
+#: ../../include/widgets.php:1429
+msgid "Project/Site Information"
+msgstr ""
+
+#: ../../include/widgets.php:1430
+msgid "For Members"
+msgstr ""
+
+#: ../../include/widgets.php:1431
+msgid "For Administrators"
+msgstr ""
+
+#: ../../include/widgets.php:1432
+msgid "For Developers"
+msgstr ""
+
+#: ../../include/widgets.php:1456 ../../include/widgets.php:1494
+msgid "Member registrations waiting for confirmation"
+msgstr ""
+
+#: ../../include/widgets.php:1462
+msgid "Inspect queue"
+msgstr ""
+
+#: ../../include/widgets.php:1464
+msgid "DB updates"
+msgstr ""
+
+#: ../../include/widgets.php:1490
+msgid "Plugin Features"
+msgstr ""
+
#: ../../include/permissions.php:26
msgid "Can view my normal stream and posts"
msgstr ""
@@ -9618,6 +9679,10 @@ msgstr ""
msgid "$Projectname event notification:"
msgstr ""
+#: ../../include/api.php:1326
+msgid "Public Timeline"
+msgstr ""
+
#: ../../view/theme/redbasic/php/config.php:82
msgid "Focus (Hubzilla default)"
msgstr ""
@@ -9754,62 +9819,62 @@ msgstr ""
msgid "Set size of followup author photos"
msgstr ""
-#: ../../boot.php:1162
+#: ../../boot.php:1163
#, php-format
msgctxt "opensearch"
msgid "Search %1$s (%2$s)"
msgstr ""
-#: ../../boot.php:1162
+#: ../../boot.php:1163
msgctxt "opensearch"
msgid "$Projectname"
msgstr ""
-#: ../../boot.php:1480
+#: ../../boot.php:1481
#, php-format
msgid "Update %s failed. See error logs."
msgstr ""
-#: ../../boot.php:1483
+#: ../../boot.php:1484
#, php-format
msgid "Update Error at %s"
msgstr ""
-#: ../../boot.php:1684
+#: ../../boot.php:1685
msgid ""
"Create an account to access services and applications within the Hubzilla"
msgstr ""
-#: ../../boot.php:1706
+#: ../../boot.php:1707
msgid "Password"
msgstr ""
-#: ../../boot.php:1707
+#: ../../boot.php:1708
msgid "Remember me"
msgstr ""
-#: ../../boot.php:1710
+#: ../../boot.php:1711
msgid "Forgot your password?"
msgstr ""
-#: ../../boot.php:2276
+#: ../../boot.php:2277
msgid "toggle mobile"
msgstr ""
-#: ../../boot.php:2425
+#: ../../boot.php:2426
msgid "Website SSL certificate is not valid. Please correct."
msgstr ""
-#: ../../boot.php:2428
+#: ../../boot.php:2429
#, php-format
msgid "[hubzilla] Website SSL error for %s"
msgstr ""
-#: ../../boot.php:2469
+#: ../../boot.php:2470
msgid "Cron/Scheduled tasks not running."
msgstr ""
-#: ../../boot.php:2473
+#: ../../boot.php:2474
#, php-format
msgid "[hubzilla] Cron tasks not running on %s"
msgstr ""
diff --git a/util/po2php.php b/util/po2php.php
index ab8c495f9..a72a65ba1 100644
--- a/util/po2php.php
+++ b/util/po2php.php
@@ -3,14 +3,21 @@
function po2php_run($argc,$argv) {
- if ($argc!=2) {
+ if ($argc < 2) {
print "Usage: ".$argv[0]." <file.po>\n\n";
return;
}
-
+
+ $rtl = false;
+
$pofile = $argv[1];
$outfile = dirname($pofile)."/hstrings.php";
+ if($argc > 2) {
+ if($argv[2] === 'rtl')
+ $rtl = true;
+ }
+
if(strstr($outfile,'util'))
$lang = 'en';
else
@@ -53,6 +60,7 @@ function po2php_run($argc,$argv) {
$out .= ' return '.$cond.';'."\n";
$out .= '}}'."\n";
}
+ $out .= 'App::$rtl = ' . intval($rtl) . ';';
if ($k!="" && substr($l,0,7)=="msgstr "){
if ($ink) { $ink = False; $out .= 'App::$strings["'.$k.'"] = '; }
diff --git a/view/css/mod_cal.css b/view/css/mod_cal.css
index f0b5c0166..184227a91 100644
--- a/view/css/mod_cal.css
+++ b/view/css/mod_cal.css
@@ -1,3 +1,7 @@
+.fc-scroller {
+ overflow: hidden !important;
+}
+
/* fix borders */
.fc th:first-child,
diff --git a/view/css/mod_events.css b/view/css/mod_events.css
index f0b5c0166..184227a91 100644
--- a/view/css/mod_events.css
+++ b/view/css/mod_events.css
@@ -1,3 +1,7 @@
+.fc-scroller {
+ overflow: hidden !important;
+}
+
/* fix borders */
.fc th:first-child,
diff --git a/view/js/mod_cal.js b/view/js/mod_cal.js
new file mode 100644
index 000000000..5867f676e
--- /dev/null
+++ b/view/js/mod_cal.js
@@ -0,0 +1,22 @@
+/**
+ * JavaScript for mod/cal
+ */
+
+$(document).ready( function() {
+ $(document).on('click','#fullscreen-btn', on_fullscreen);
+ $(document).on('click','#inline-btn', on_inline);
+});
+
+function on_fullscreen() {
+ var view = $('#events-calendar').fullCalendar('getView');
+ if(view.type === 'month') {
+ $('#events-calendar').fullCalendar('option', 'height', $(window).height() - $('.section-title-wrapper').outerHeight(true) - 2); // -2 is for border width (top and bottom) of .generic-content-wrapper
+ }
+}
+
+function on_inline() {
+ var view = $('#events-calendar').fullCalendar('getView');
+ if(view.type === 'month') {
+ $('#events-calendar').fullCalendar('option', 'height', '');
+ }
+}
diff --git a/view/js/mod_events.js b/view/js/mod_events.js
index 74b811dd6..66cf81ddd 100644
--- a/view/js/mod_events.js
+++ b/view/js/mod_events.js
@@ -5,11 +5,29 @@
$(document).ready( function() {
enableDisableFinishDate();
$('#comment-edit-text-desc, #comment-edit-text-loc').bbco_autocomplete('bbcode');
+
+ $(document).on('click','#fullscreen-btn', on_fullscreen);
+ $(document).on('click','#inline-btn', on_inline);
});
+
function enableDisableFinishDate() {
if( $('#id_nofinish').is(':checked'))
$('#id_finish_text').prop("disabled", true);
else
$('#id_finish_text').prop("disabled", false);
}
+
+function on_fullscreen() {
+ var view = $('#events-calendar').fullCalendar('getView');
+ if(view.type === 'month') {
+ $('#events-calendar').fullCalendar('option', 'height', $(window).height() - $('.section-title-wrapper').outerHeight(true) - 2); // -2 is for border width (top and bottom) of .generic-content-wrapper
+ }
+}
+
+function on_inline() {
+ var view = $('#events-calendar').fullCalendar('getView');
+ if(view.type === 'month') {
+ $('#events-calendar').fullCalendar('option', 'height', '');
+ }
+}
diff --git a/view/php/default.php b/view/php/default.php
index ad6b7a3d1..f5be4fa35 100644
--- a/view/php/default.php
+++ b/view/php/default.php
@@ -5,7 +5,7 @@
<script>var baseurl="<?php echo z_root() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head>
-<body>
+<body <?php if($page['direction']) echo 'dir="rtl"' ?> >
<?php if(x($page,'banner')) echo $page['banner']; ?>
<header><?php if(x($page,'header')) echo $page['header']; ?></header>
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><?php if(x($page,'nav')) echo $page['nav']; ?></nav>
diff --git a/view/php/theme_init.php b/view/php/theme_init.php
index 648b144b3..e9ba2aa05 100644
--- a/view/php/theme_init.php
+++ b/view/php/theme_init.php
@@ -10,6 +10,7 @@ head_add_css('view/css/conversation.css');
head_add_css('view/css/widgets.css');
head_add_css('view/css/colorbox.css');
head_add_css('library/justifiedGallery/justifiedGallery.min.css');
+head_add_css('library/Text_Highlighter/sample.css');
head_add_js('jquery.js');
//head_add_js('jquery-migrate-1.1.1.js');
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index 30b0cebb4..c9c85daa3 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -2020,3 +2020,9 @@ dl.bb-dl > dd > li {
.help-searchlist a {
font-size: 130%;
}
+
+.embed-photo-selected-photo {
+ border-color: blue;
+ border-style: solid;
+ border-width: 5px;
+}
diff --git a/view/tpl/event_head.tpl b/view/tpl/event_head.tpl
index 5083c5835..762bdcbb8 100755
--- a/view/tpl/event_head.tpl
+++ b/view/tpl/event_head.tpl
@@ -30,6 +30,12 @@
function changeView(action, viewName) {
$('#events-calendar').fullCalendar(action, viewName);
var view = $('#events-calendar').fullCalendar('getView');
+ if(view.type === 'agendaDay' || view.type === 'agendaWeek') {
+ $('#events-calendar').fullCalendar('option', 'height', 'auto');
+ }
+ else {
+ $('#events-calendar').fullCalendar('option', 'height', '');
+ }
$('#title').text(view.title);
}
@@ -42,7 +48,6 @@
firstDay: {{$first_day}},
eventLimit: 3,
- height: 'auto',
monthNames: aStr['monthNames'],
monthNamesShort: aStr['monthNamesShort'],
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
index 43df2e175..f3dd8cafe 100755
--- a/view/tpl/jot-header.tpl
+++ b/view/tpl/jot-header.tpl
@@ -364,6 +364,89 @@ function enableOnUser(){
{{$geotag}}
+ var initializeEmbedPhotoDialog = function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ $(this).removeClass('embed-photo-selected-photo');
+ });
+ getPhotoAlbumList();
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal();
+ };
+
+ var choosePhotoFromAlbum = function (album) {
+ $.post("embedphotos/album", {name: album},
+ function(data) {
+ if (data['status']) {
+ $('#embedPhotoModalLabel').html('{{$modalchooseimages}}');
+ $('#embedPhotoModalBodyAlbumDialog').html('\
+ <div><ul class="nav">\n\
+ <li><a href="#" onclick="initializeEmbedPhotoDialog();return false;">\n\
+ <i class="fa fa-chevron-left"></i>&nbsp\n\
+ {{$modaldiffalbum}}\n\
+ </a>\n\
+ </li>\n\
+ </ul><br></div>')
+ $('#embedPhotoModalBodyAlbumDialog').append(data['content']);
+ $('#embedPhotoModalBodyAlbumDialog').click(function (evt) {
+ evt.preventDefault();
+ var image = document.getElementById(evt.target.id);
+ if (typeof($(image).parent()[0]) !== 'undefined') {
+ var imageparent = document.getElementById($(image).parent()[0].id);
+ $(imageparent).toggleClass('embed-photo-selected-photo');
+ }
+ });
+ $('#embedPhotoModalBodyAlbumListDialog').addClass('hide');
+ $('#embedPhotoModalBodyAlbumDialog').removeClass('hide');
+ $('#embed-photo-OKButton').click(function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ var href = $(this).attr('href');
+ $.post("embedphotos/photolink", {href: href},
+ function(ddata) {
+ if (ddata['status']) {
+ addeditortext(ddata['photolink']);
+ } else {
+ window.console.log('{{$modalerrorlink}}' + ':' + ddata['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ });
+ $('#embedPhotoModalBodyAlbumDialog').html('');
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('hide');
+ });
+ } else {
+ window.console.log('{{$modalerroralbum}} ' + JSON.stringify(album) + ':' + data['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ };
+
+ var getPhotoAlbumList = function () {
+ $.post("embedphotos/albumlist", {},
+ function(data) {
+ if (data['status']) {
+ var albums = data['albumlist']; //JSON.parse(data['albumlist']);
+ $('#embedPhotoModalLabel').html('{{$modalchoosealbum}}');
+ $('#embedPhotoModalBodyAlbumList').html('<ul class="nav"></ul>');
+ for(var i=0; i<albums.length; i++) {
+ var albumName = albums[i].text;
+ var albumLink = '<li>';
+ albumLink += '<a href="#" onclick="choosePhotoFromAlbum(\'' + albumName + '\');return false;">' + albumName + '</a>';
+ albumLink += '</li>';
+ $('#embedPhotoModalBodyAlbumList').find('ul').append(albumLink);
+ }
+ $('#embedPhotoModalBodyAlbumDialog').addClass('hide');
+ $('#embedPhotoModalBodyAlbumListDialog').removeClass('hide');
+ } else {
+ window.console.log('{{$modalerrorlist}}' + ':' + data['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ };
+
</script>
<script>
diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl
index 685706026..490349a04 100755
--- a/view/tpl/jot.tpl
+++ b/view/tpl/jot.tpl
@@ -79,6 +79,11 @@
<i id="profile-link" class="fa fa-link jot-icons"></i>
</button>
{{/if}}
+ {{if $embedPhotos}}
+ <button id="embed-photo-wrapper" class="btn btn-default btn-sm" title="{{$embedPhotos}}" onclick="initializeEmbedPhotoDialog();return false;">
+ <i id="embed-photo" class="fa fa-file-image-o jot-icons"></i>
+ </button>
+ {{/if}}
</div>
<div class="btn-group hidden-xs hidden-sm">
{{if $setloc}}
@@ -225,6 +230,30 @@
</div><!-- /.modal -->
{{/if}}
+{{if $embedPhotos}}
+<div class="modal" id="embedPhotoModal" tabindex="-1" role="dialog" aria-labelledby="embedPhotoLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
+ </div>
+ <div class="modal-body" id="embedPhotoModalBody" >
+ <div id="embedPhotoModalBodyAlbumListDialog" class="hide">
+ <div id="embedPhotoModalBodyAlbumList"></div>
+ </div>
+ <div id="embedPhotoModalBodyAlbumDialog" class="hide">
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">{{$embedPhotosModalCancel}}</button>
+ <button id="embed-photo-OKButton" type="button" class="btn btn-primary">{{$embedPhotosModalOK}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+{{/if}}
+
{{if $content || $attachment || $expanded}}
<script>initEditor();</script>
{{/if}}
diff --git a/view/tpl/profile_advanced.tpl b/view/tpl/profile_advanced.tpl
index a4c98b1d0..d0c9621f9 100755
--- a/view/tpl/profile_advanced.tpl
+++ b/view/tpl/profile_advanced.tpl
@@ -282,7 +282,7 @@
<ul class="profile-thing-list">
{{foreach $items as $item}}
<li>{{if $item.img}}<a href="{{$item.url}}" ><img src="{{$item.img}}" class="profile-thing-img" width="100" height="100" alt="{{$item.term}}" /></a>{{/if}}
- <a href="{{$item.url}}" >{{$item.term}}</a>
+ <a href="{{$item.editurl}}" >{{$item.term}}</a>
{{if $profile.canlike}}<br />
<button type="button" class="btn btn-default btn-sm" onclick="doprofilelike('thing/' + '{{$item.term_hash}}','like'); return false;" title="{{$likethis}}" >
<i class="fa fa-thumbs-o-up" title="{{$likethis}}"></i>
diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl
index 1312f8518..dc78aad9f 100644
--- a/view/tpl/wiki.tpl
+++ b/view/tpl/wiki.tpl
@@ -25,7 +25,7 @@
<button id="inline-btn" type="button" class="btn btn-default btn-xs" onclick="makeFullScreen(false);
adjustInlineTopBarHeight();"><i class="fa fa-compress"></i></button>
</div>
- <h2>{{$wikiheader}}</h2>
+ <h2><span id="wiki-header-name">{{$wikiheaderName}}</span>: <span id="wiki-header-page">{{$wikiheaderPage}}</span></h2>
<div class="clear"></div>
</div>
<div id="new-wiki-form-wrapper" class="section-content-tools-wrapper" style="display:none;">
@@ -57,6 +57,17 @@
<hr>
</div>
+ <div id="rename-page-form-wrapper" class="section-content-tools-wrapper" style="display:none;">
+ <form id="rename-page-form" action="wiki/rename/page" method="post" >
+ <div class="clear"></div>
+ {{include file="field_input.tpl" field=$pageRename}}
+ <div class="btn-group pull-right">
+ <button id="rename-page-submit" class="btn btn-warning" type="submit" name="submit" >Rename Page</button>
+ </div>
+ </form> <div class="clear"></div>
+ <hr>
+ </div>
+
<div id="wiki-content-container" class="section-content-wrapper" {{if $hideEditor}}style="display: none;"{{/if}}>
<ul class="nav nav-tabs" id="wiki-nav-tabs">
<li><a data-toggle="tab" href="#edit-pane">Edit</a></li>
@@ -67,6 +78,7 @@
<a data-toggle="dropdown" class="dropdown-toggle" href="#">Page <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a id="save-page" data-toggle="tab" href="#">Save</a></li>
+ <li><a id="rename-page" data-toggle="tab" href="#">Rename</a></li>
<li><a id="delete-page" data-toggle="tab" href="#">Delete</a></li>
</ul>
</li>
@@ -115,7 +127,34 @@
if (window.wiki_page_name === 'Home') {
$('#delete-page').hide();
+ $('#rename-page').hide();
}
+
+ $('#rename-page').click(function (ev) {
+ $('#rename-page-form-wrapper').show();
+ });
+
+ $( "#rename-page-form" ).submit(function( event ) {
+ $.post("wiki/{{$channel}}/rename/page",
+ {
+ oldName: window.wiki_page_name,
+ newName: $('#id_pageRename').val(),
+ resource_id: window.wiki_resource_id
+ },
+ function (data) {
+ if (data.success) {
+ $('#rename-page-form-wrapper').hide();
+ window.console.log('data: ' + JSON.stringify(data));
+ window.wiki_page_name = data.name.urlName;
+ $('#wiki-header-page').html(data.name.htmlName);
+ wiki_refresh_page_list();
+ } else {
+ window.console.log('Error renaming page.');
+ }
+ }, 'json');
+ event.preventDefault();
+ });
+
$(document).ready(function () {
wiki_refresh_page_list();
// Show Edit tab first. Otherwise the Ace editor does not load.