From 95e3004c9ca90d4dab46dcd016b42a6c8e5f625a Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Sat, 12 Jun 2010 19:56:33 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=20trunk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit +YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@201 a2543c7e-f6e9-4f8a-8bff-1ffc34733512 --- .../trunk/plugins/authentication/example.php | 85 + .../trunk/plugins/authentication/example.xml | 16 + .../trunk/plugins/authentication/gmail.php | 106 + .../trunk/plugins/authentication/gmail.xml | 16 + .../trunk/plugins/authentication/index.html | 1 + .../trunk/plugins/authentication/joomla.php | 105 + .../trunk/plugins/authentication/joomla.xml | 16 + .../trunk/plugins/authentication/ldap.php | 162 ++ .../trunk/plugins/authentication/ldap.xml | 45 + .../trunk/plugins/authentication/openid.php | 274 +++ .../trunk/plugins/authentication/openid.xml | 33 + .../trunk/plugins/content/CodeCitation.php | 242 ++ .../trunk/plugins/content/CodeCitation.xml | 120 + .../plugins/content/CodeCitationREADME.txt | 64 + .../codecitation/scripts/clipboard.swf | Bin 0 -> 1361 bytes .../codecitation/scripts/shBrushAS3.js | 61 + .../codecitation/scripts/shBrushBash.js | 66 + .../codecitation/scripts/shBrushCSharp.js | 67 + .../codecitation/scripts/shBrushColdFusion.js | 102 + .../codecitation/scripts/shBrushCpp.js | 99 + .../codecitation/scripts/shBrushCss.js | 93 + .../codecitation/scripts/shBrushDelphi.js | 57 + .../codecitation/scripts/shBrushDiff.js | 43 + .../codecitation/scripts/shBrushErlang.js | 54 + .../codecitation/scripts/shBrushGroovy.js | 69 + .../codecitation/scripts/shBrushJScript.js | 52 + .../codecitation/scripts/shBrushJava.js | 59 + .../codecitation/scripts/shBrushJavaFX.js | 60 + .../codecitation/scripts/shBrushPerl.js | 74 + .../codecitation/scripts/shBrushPhp.js | 91 + .../codecitation/scripts/shBrushPlain.js | 35 + .../codecitation/scripts/shBrushPowerShell.js | 76 + .../codecitation/scripts/shBrushPython.js | 66 + .../codecitation/scripts/shBrushRuby.js | 57 + .../codecitation/scripts/shBrushScala.js | 53 + .../codecitation/scripts/shBrushSql.js | 68 + .../content/codecitation/scripts/shBrushVb.js | 58 + .../codecitation/scripts/shBrushXml.js | 71 + .../content/codecitation/scripts/shCore.js | 2077 +++++++++++++++++ .../content/codecitation/scripts/shLegacy.js | 172 ++ .../content/codecitation/styles/help.png | Bin 0 -> 786 bytes .../content/codecitation/styles/magnifier.png | Bin 0 -> 615 bytes .../codecitation/styles/page_white_code.png | Bin 0 -> 603 bytes .../codecitation/styles/page_white_copy.png | Bin 0 -> 309 bytes .../content/codecitation/styles/printer.png | Bin 0 -> 731 bytes .../content/codecitation/styles/shCore.css | 330 +++ .../codecitation/styles/shThemeDefault.css | 173 ++ .../codecitation/styles/shThemeDjango.css | 176 ++ .../codecitation/styles/shThemeEclipse.css | 190 ++ .../codecitation/styles/shThemeEmacs.css | 175 ++ .../codecitation/styles/shThemeFadeToGrey.css | 177 ++ .../codecitation/styles/shThemeMidnight.css | 175 ++ .../codecitation/styles/shThemeRDark.css | 175 ++ .../content/codecitation/styles/wrapping.png | Bin 0 -> 631 bytes .../trunk/plugins/content/emailcloak.php | 166 ++ .../trunk/plugins/content/emailcloak.xml | 21 + oss/joomla/trunk/plugins/content/example.php | 148 ++ oss/joomla/trunk/plugins/content/example.xml | 16 + oss/joomla/trunk/plugins/content/index.html | 1 + .../trunk/plugins/content/loadmodule.php | 87 + .../trunk/plugins/content/loadmodule.xml | 28 + .../trunk/plugins/content/pagebreak.php | 295 +++ .../trunk/plugins/content/pagebreak.xml | 33 + .../trunk/plugins/content/pagenavigation.php | 220 ++ .../trunk/plugins/content/pagenavigation.xml | 21 + oss/joomla/trunk/plugins/content/vote.php | 67 + oss/joomla/trunk/plugins/content/vote.xml | 16 + 67 files changed, 7755 insertions(+) create mode 100644 oss/joomla/trunk/plugins/authentication/example.php create mode 100644 oss/joomla/trunk/plugins/authentication/example.xml create mode 100644 oss/joomla/trunk/plugins/authentication/gmail.php create mode 100644 oss/joomla/trunk/plugins/authentication/gmail.xml create mode 100644 oss/joomla/trunk/plugins/authentication/index.html create mode 100644 oss/joomla/trunk/plugins/authentication/joomla.php create mode 100644 oss/joomla/trunk/plugins/authentication/joomla.xml create mode 100644 oss/joomla/trunk/plugins/authentication/ldap.php create mode 100644 oss/joomla/trunk/plugins/authentication/ldap.xml create mode 100644 oss/joomla/trunk/plugins/authentication/openid.php create mode 100644 oss/joomla/trunk/plugins/authentication/openid.xml create mode 100644 oss/joomla/trunk/plugins/content/CodeCitation.php create mode 100644 oss/joomla/trunk/plugins/content/CodeCitation.xml create mode 100644 oss/joomla/trunk/plugins/content/CodeCitationREADME.txt create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/clipboard.swf create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushAS3.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushBash.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCSharp.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushColdFusion.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCpp.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCss.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDelphi.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDiff.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushErlang.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushGroovy.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJScript.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJava.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJavaFX.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPerl.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPhp.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPlain.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPowerShell.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPython.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushRuby.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushScala.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushSql.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushVb.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushXml.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shCore.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/scripts/shLegacy.js create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/help.png create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/magnifier.png create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/page_white_code.png create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/page_white_copy.png create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/printer.png create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shCore.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeDefault.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeDjango.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeEclipse.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeEmacs.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeFadeToGrey.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeMidnight.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/shThemeRDark.css create mode 100644 oss/joomla/trunk/plugins/content/codecitation/styles/wrapping.png create mode 100644 oss/joomla/trunk/plugins/content/emailcloak.php create mode 100644 oss/joomla/trunk/plugins/content/emailcloak.xml create mode 100644 oss/joomla/trunk/plugins/content/example.php create mode 100644 oss/joomla/trunk/plugins/content/example.xml create mode 100644 oss/joomla/trunk/plugins/content/index.html create mode 100644 oss/joomla/trunk/plugins/content/loadmodule.php create mode 100644 oss/joomla/trunk/plugins/content/loadmodule.xml create mode 100644 oss/joomla/trunk/plugins/content/pagebreak.php create mode 100644 oss/joomla/trunk/plugins/content/pagebreak.xml create mode 100644 oss/joomla/trunk/plugins/content/pagenavigation.php create mode 100644 oss/joomla/trunk/plugins/content/pagenavigation.xml create mode 100644 oss/joomla/trunk/plugins/content/vote.php create mode 100644 oss/joomla/trunk/plugins/content/vote.xml diff --git a/oss/joomla/trunk/plugins/authentication/example.php b/oss/joomla/trunk/plugins/authentication/example.php new file mode 100644 index 00000000..ec334646 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/example.php @@ -0,0 +1,85 @@ +status = JAUTHENTICATE_STATUS_SUCCESS; + $response->error_message = ''; + // You may also define other variables: + /* + $yourUser = YourClass::getUser( $credentials ); + $response->email = $yourUser->email; + $response->fullname = $yourUser->name; + */ + return true; + } + else + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Could not authenticate'; + return false; + } + } +} diff --git a/oss/joomla/trunk/plugins/authentication/example.xml b/oss/joomla/trunk/plugins/authentication/example.xml new file mode 100644 index 00000000..ba9669e7 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/example.xml @@ -0,0 +1,16 @@ + + + Authentication - Example + Joomla! Project + November 2005 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5 + An example of an authentication plugin + + example.php + + + diff --git a/oss/joomla/trunk/plugins/authentication/gmail.php b/oss/joomla/trunk/plugins/authentication/gmail.php new file mode 100644 index 00000000..e8fc122f --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/gmail.php @@ -0,0 +1,106 @@ +status = JAUTHENTICATE_STATUS_SUCCESS; + $response->error_message = ''; + $response->email = $credentials['username']; + $response->fullname = $credentials['username']; + } + else + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Failed to authenticate: ' . $message; + } + } +} diff --git a/oss/joomla/trunk/plugins/authentication/gmail.xml b/oss/joomla/trunk/plugins/authentication/gmail.xml new file mode 100644 index 00000000..c4e6d828 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/gmail.xml @@ -0,0 +1,16 @@ + + + Authentication - GMail + Joomla! Project + February 2006 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5 + Handles user authentication with a GMail account + + gmail.php + + + diff --git a/oss/joomla/trunk/plugins/authentication/index.html b/oss/joomla/trunk/plugins/authentication/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oss/joomla/trunk/plugins/authentication/joomla.php b/oss/joomla/trunk/plugins/authentication/joomla.php new file mode 100644 index 00000000..43075dcb --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/joomla.php @@ -0,0 +1,105 @@ +status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Empty password not allowed'; + return false; + } + + // Initialize variables + $conditions = ''; + + // Get a database object + $db =& JFactory::getDBO(); + + $query = 'SELECT `id`, `password`, `gid`' + . ' FROM `#__users`' + . ' WHERE username=' . $db->Quote( $credentials['username'] ) + ; + $db->setQuery( $query ); + $result = $db->loadObject(); + + + if($result) + { + $parts = explode( ':', $result->password ); + $crypt = $parts[0]; + $salt = @$parts[1]; + $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt); + + if ($crypt == $testcrypt) { + $user = JUser::getInstance($result->id); // Bring this in line with the rest of the system + $response->email = $user->email; + $response->fullname = $user->name; + $response->status = JAUTHENTICATE_STATUS_SUCCESS; + $response->error_message = ''; + } else { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Invalid password'; + } + } + else + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'User does not exist'; + } + } +} diff --git a/oss/joomla/trunk/plugins/authentication/joomla.xml b/oss/joomla/trunk/plugins/authentication/joomla.xml new file mode 100644 index 00000000..49e574b3 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/joomla.xml @@ -0,0 +1,16 @@ + + + Authentication - Joomla + Joomla! Project + November 2005 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5 + Handles Joomlas default user authentication + + joomla.php + + + diff --git a/oss/joomla/trunk/plugins/authentication/ldap.php b/oss/joomla/trunk/plugins/authentication/ldap.php new file mode 100644 index 00000000..480ed3eb --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/ldap.php @@ -0,0 +1,162 @@ +type = 'LDAP'; + // LDAP does not like Blank passwords (tries to Anon Bind which is bad) + if (empty($credentials['password'])) + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'LDAP can not have blank password'; + return false; + } + + // load plugin params info + $ldap_email = $this->params->get('ldap_email'); + $ldap_fullname = $this->params->get('ldap_fullname'); + $ldap_uid = $this->params->get('ldap_uid'); + $auth_method = $this->params->get('auth_method'); + + jimport('joomla.client.ldap'); + $ldap = new JLDAP($this->params); + + if (!$ldap->connect()) + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Unable to connect to LDAP server'; + return; + } + + switch($auth_method) + { + case 'search': + { + // Bind using Connect Username/password + // Force anon bind to mitigate misconfiguration like [#7119] + if(strlen($this->params->get('username'))) $bindtest = $ldap->bind(); + else $bindtest = $ldap->anonymous_bind(); + + + if($bindtest) + { + // Search for users DN + $binddata = $ldap->simple_search(str_replace("[search]", $credentials['username'], $this->params->get('search_string'))); + if(isset($binddata[0]) && isset($binddata[0]['dn'])) { + // Verify Users Credentials + $success = $ldap->bind($binddata[0]['dn'],$credentials['password'],1); + // Get users details + $userdetails = $binddata; + } else { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Unable to find user'; + } + } + else + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Unable to bind to LDAP'; + } + } break; + + case 'bind': + { + // We just accept the result here + $success = $ldap->bind($credentials['username'],$credentials['password']); + if($success) { + $userdetails = $ldap->simple_search(str_replace("[search]", $credentials['username'], $this->params->get('search_string'))); + } else { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Failed binding to LDAP server'; + } + } break; + } + + if(!$success) + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + if(!strlen($response->error_message)) $response->error_message = 'Incorrect username/password'; + } + else + { + // Grab some details from LDAP and return them + if (isset($userdetails[0][$ldap_uid][0])) { + $response->username = $userdetails[0][$ldap_uid][0]; + } + + if (isset($userdetails[0][$ldap_email][0])) { + $response->email = $userdetails[0][$ldap_email][0]; + } + + if(isset($userdetails[0][$ldap_fullname][0])) { + $response->fullname = $userdetails[0][$ldap_fullname][0]; + } else { + $response->fullname = $credentials['username']; + } + + // Were good - So say so. + $response->status = JAUTHENTICATE_STATUS_SUCCESS; + $response->error_message = ''; + } + + $ldap->close(); + } +} diff --git a/oss/joomla/trunk/plugins/authentication/ldap.xml b/oss/joomla/trunk/plugins/authentication/ldap.xml new file mode 100644 index 00000000..8568d811 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/ldap.xml @@ -0,0 +1,45 @@ + + + Authentication - LDAP + Joomla! Project + November 2005 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5 + Handles user authentication against an LDAP server + + ldap.php + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oss/joomla/trunk/plugins/authentication/openid.php b/oss/joomla/trunk/plugins/authentication/openid.php new file mode 100644 index 00000000..aaeb7e36 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/openid.php @@ -0,0 +1,274 @@ +type = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = "Could not create the FileStore directory '$store_path'. " . " Please check the effective permissions."; + return false; + } + + // Create store object + $store = new Auth_OpenID_FileStore($store_path); + + // Create a consumer object + $consumer = new Auth_OpenID_Consumer($store); + + if (!isset ($_SESSION['_openid_consumer_last_token'])) { + // Begin the OpenID authentication process. + if (!$auth_request = $consumer->begin($credentials['username'])) { + $response->type = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Authentication error : could not connect to the openid server'; + return false; + } + + $sreg_request = Auth_OpenID_SRegRequest::build( + array ('email'), + array ('fullname','language','timezone') + ); + + if ($sreg_request) { + $auth_request->addExtension($sreg_request); + } + $policy_uris = array(); + if ($this->params->get( 'phishing-resistant', 0)) { + $policy_uris[] = 'http://schemas.openid.net/pape/policies/2007/06/phishing-resistant'; + } + + if ($this->params->get( 'multi-factor', 0)) { + $policy_uris[] = 'http://schemas.openid.net/pape/policies/2007/06/multi-factor'; + } + + if ($this->params->get( 'multi-factor-physical', 0)) { + $policy_uris[] = 'http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical'; + } + + $pape_request = new Auth_OpenID_PAPE_Request($policy_uris); + if ($pape_request) { + $auth_request->addExtension($pape_request); + } + + //Create the entry url + $entry_url = isset ($options['entry_url']) ? $options['entry_url'] : JURI :: base(); + $entry_url = JURI :: getInstance($entry_url); + + unset ($options['entry_url']); //We don't need this anymore + + //Create the url query information + $options['return'] = isset($options['return']) ? base64_encode($options['return']) : base64_encode(JURI::base()); + $options[JUtility::getToken()] = 1; + + $process_url = sprintf($entry_url->toString()."?option=com_user&task=login&username=%s", $credentials['username']); + $process_url .= '&'.JURI::buildQuery($options); + + $session->set('return_url', $process_url ); + + $trust_url = $entry_url->toString(array ( + 'path', + 'host', + 'port', + 'scheme' + )); + $session->set('trust_url', $trust_url); + // For OpenID 1, send a redirect. For OpenID 2, use a Javascript + // form to send a POST request to the server. + if ($auth_request->shouldSendRedirect()) { + $redirect_url = $auth_request->redirectURL($trust_url, $process_url); + + // If the redirect URL can't be built, display an error + // message. + if (Auth_OpenID :: isFailure($redirect_url)) { + displayError("Could not redirect to server: " . $redirect_url->message); + } else { + // Send redirect. + $mainframe->redirect($redirect_url); + return false; + } + } else { + // Generate form markup and render it. + $form_id = 'openid_message'; + $form_html = $auth_request->htmlMarkup($trust_url, $process_url, false, array ( + 'id' => $form_id + )); + // Display an error if the form markup couldn't be generated; + // otherwise, render the HTML. + if (Auth_OpenID :: isFailure($form_html)) { + //displayError("Could not redirect to server: " . $form_html->message); + } else { + JResponse :: setBody($form_html); + echo JResponse :: toString($mainframe->getCfg('gzip')); + $mainframe->close(); + return false; + } + } + } + $result = $consumer->complete($session->get('return_url')); + switch ($result->status) { + case Auth_OpenID_SUCCESS : + { + $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($result); + + $sreg = $sreg_resp->contents(); + $usermode = $this->params->get('usermode', 2); +/* in the following code, we deal with the transition from the old openid version to the new openid version + In the old version, the username was always taken straight from the login form. In the new version, we get a + username back from the openid provider. This is necessary for a number of reasons. First, providers such as + yahoo.com allow you to enter only the provider name in the username field (i.e. yahoo.com or flickr.com). Taking + this as the username would obviously cause problems because everybody who had an id from yahoo.com would have username + yahoo.com. Second, it is necessary because with the old way, we rely on the user entering the id the same every time. + This is bad because if the user enters the http:// one time and not the second time, they end up as two different users. + There are two possible settings here - the first setting, is to always use the new way, which is to get the username from + the provider after authentication. The second setting is to check if the username exists that we got from the provider. If it + doesn't, then we check if the entered username exists. If it does, then we update the database with the username from the provider + and continue happily along with the new username. + We had talked about a third option, which would be to always used the old way, but that seems insecure in the case of somebody using + a yahoo.com ID. +*/ + if ($usermode && $usermode == 1) { + $response->username = $result->getDisplayIdentifier(); + } else { + // first, check if the provider provided username exists in the database + $db = &JFactory::getDBO(); + $query = 'SELECT username FROM #__users'. + ' WHERE username='.$db->Quote($result->getDisplayIdentifier()). + ' AND password=\'\''; + $db->setQuery($query); + $dbresult = $db->loadObject(); + if ($dbresult) { + // if so, we set our username value to the provided value + $response->username = $result->getDisplayIdentifier(); + } else { + // if it doesn't, we check if the username from the from exists in the database + $query = 'SELECT username FROM #__users'. + ' WHERE username='.$db->Quote( $credentials['username'] ). + ' AND password=\'\''; + $db->setQuery($query); + $dbresult = $db->loadObject(); + if ($dbresult) { + // if it does, we update the database + $query = 'UPDATE #__users SET username='.$db->Quote($result->getDisplayIdentifier()). + ' WHERE username='.$db->Quote($credentials['username']); + $db->setQuery($query); + $db->query(); + if (!$db->query()) { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = $db->getErrorMsg(); + //break out of the switch if we hit an error with our query + break; + } + } + $response->username = $result->getDisplayIdentifier(); + // we return the username provided by the openid provider + } + } + $response->status = JAUTHENTICATE_STATUS_SUCCESS; + $response->error_message = ''; + if (!isset($sreg['email'])) { + $response->email = str_replace( array('http://', 'https://'), '', $response->username ); + $response->email = str_replace( '/', '-', $response->email ); + $response->email .= '@openid.'; + } else { + $response->email = $sreg['email']; + } + $response->fullname = isset ($sreg['fullname']) ? $sreg['fullname'] : $response->username; + $response->language = isset ($sreg['language']) ? $sreg['language'] : ''; + $response->timezone = isset ($sreg['timezone']) ? $sreg['timezone'] : ''; + } + break; + + case Auth_OpenID_CANCEL : + { + $response->status = JAUTHENTICATE_STATUS_CANCEL; + $response->error_message = 'Authentication cancelled'; + } + break; + + case Auth_OpenID_FAILURE : + { + $response->status = JAUTHENTICATE_STATUS_FAILURE; + $response->error_message = 'Authentication failed'; + } + break; + } + } + + // function +} diff --git a/oss/joomla/trunk/plugins/authentication/openid.xml b/oss/joomla/trunk/plugins/authentication/openid.xml new file mode 100644 index 00000000..3494f812 --- /dev/null +++ b/oss/joomla/trunk/plugins/authentication/openid.xml @@ -0,0 +1,33 @@ + + + Authentication - OpenID + Joomla! Project + February 2006 + Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + admin@joomla.org + www.joomla.org + 1.5 + Handles user authentication with an OpenID (Requires PHP5) + + openid.php + + + + + + + + + + + + + + + + + + + + diff --git a/oss/joomla/trunk/plugins/content/CodeCitation.php b/oss/joomla/trunk/plugins/content/CodeCitation.php new file mode 100644 index 00000000..f4a2a3b8 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/CodeCitation.php @@ -0,0 +1,242 @@ + "as3", "actionscript3" => "as3", + "bash" => "bash", "shell" => "bash", + "cpp" => "cpp", "c" => "cpp", + "csharp" => "csharp", "c#" => "csharp", "c-sharp" => "csharp", + "css" => "css", + "pascal" => "pascal", "delphi" => "pascal", + "diff" => "diff", "patch" => "diff", + "groovy" => "groovy", + "java" => "java", + "javafx" => "javafx", "jfx" => "javafx", + "js" => "javascript", "javascript" => "javascript", "jscript" => "javascript", + "perl" => "perl", "pl" => "perl", "Perl" => "perl", + "php" => "php", + "text" => "text", "plain" => "text", + "powershell" => "powershell", "ps" => "powershell", + "python" => "python", "py" => "python", + "ruby" => "ruby", "rails" => "ruby", "ror" => "ruby", + "scala" => "scala", + "sql" => "sql", + "vb" => "vb", "vbnet" => "vb", "VisualBasic" => "vb", + "xml" => "xml", "xhtml" => "xml", "xslt" => "xml", "html" => "xml" ); + + private static $langFiles = array( "as3" => "shBrushAS3.js", + "bash" => "shBrushBash.js", + "cpp" => "shBrushCpp.js", + "csharp" => "shBrushCSharp.js", + "css" => "shBrushCss.js", + "pascal" => "shBrushDelphi.js", + "diff" => "shBrushDiff.js", + "groovy" => "shBrushGroovy.js", + "java" => "shBrushJava.js", + "javafx" => "shBrushJavaFX.js", + "javascript" => "shBrushJScript.js", + "perl" => "shBrushPerl.js", + "php" => "shBrushPhp.js", + "text" => "shBrushPlain.js", + "powershell" => "shBrushPowerShell.js", + "python" => "shBrushPython.js", + "ruby" => "shBrushRuby.js", + "scala" => "shBrushScala.js", + "sql" => "shBrushSql.js", + "vb" => "shBrushVb.js", + "xml" => "shBrushXml.js" + ); + + private $_includeCSSOnce = False; + private $_includedScripts = array(); + private $_runHighlighterOnce=False; + + function plgContentCodeCitation( &$subject, $params ){ + parent::__construct( $subject, $params ); + } + + //onPrepareContent event handler. Replace all entries of {codecitation} tag and load necessary scripts + function onPrepareContent( &$row, &$params, $page=0 ) { + $tag=self::_tag; + $alternativetag=$this->params->def( 'alternativetag', ''); + if ($alternativetag!='') + { + $tag='('.$tag.'|'.$alternativetag.')'; + } + else + { + $tag='('.$tag.')'; + } + $regex = "#{".$tag."[\s| ]*(.*?)}([\s\S]*?){/\\1}#s"; + // register the regular expresstion to invoke our replacer in case Joomla finds the matches + $row->text = preg_replace_callback( $regex, array($this,'replacer'), $row->text ); + return true; + } + + //Do the replacement work to replace {codecitation}{/codecitation} into
+ //and include scripts as necessary + private function replacer( &$matches ) { + jimport('domit.xml_saxy_shared'); + + //adjust document header to include SyntaxHighlighter styles and core + $this->includeCSSOnce(); + $html_entities_match = array( "'\n'", "'\<\s*span\s*[\s\S]*?/*\s*\>'i", "'\'i","'\<\s*/\s*pre\s*\>'i", "'\'i","'\<\s*/\s*div\s*\>'i","'\<\s*/\s*span\s*\>'i", "'\<\s*/\s*p\s*\>'i", "'\'i","'\'i", "'<'i", "'>'i", "'''", "'"'i", "' 'i" ); + $html_entities_replace = array("", "", "", "", "", "", "", "", "\n", "\n", '<', '>', "'", '"', ' ' ); + + $matches[2]=preg_replace($html_entities_match, $html_entities_replace, $matches[2] ); + $matches[3]=preg_replace($html_entities_match, $html_entities_replace, $matches[3] ); + $text = $matches[3]; + + $args = SAXY_Parser_Base::parseAttributes( $matches[2] ); + + $shclass = JArrayHelper::getValue( $args, 'class', '' ); + $width = JArrayHelper::getValue( $args, 'width', 'inherit' ); + + //determine language to show + $langAlias=""; + $regexLangAlias="#brush\s*:\s*(\S[^;]*[^;\s])#s"; + + if (preg_match($regexLangAlias,$shclass,$langAliasMatches)>0) + { + $langAlias=$langAliasMatches[1]; + } + else + { + $langAlias=$this->params->def( 'defaultlang', 'text'); + $shclass='brush:'.$langAlias.';'.$shclass; + } + //determine if we need to include xml markup parser for html scripts + $htmlScriptMode=False; + $regexHtmlScriptMode="#html-script\s*:\s*(\S[^;]*[^;\s])#s"; + if (preg_match($regexHtmlScriptMode,$shclass,$htmlScriptModeMatches)>0) + { + $htmlScriptMode=strtoupper($htmlScriptModeMatches[1]); + } + else + { + $htmlScriptMode="FALSE"; + } + + //include Java script that is necessary to show the code (if we have not already did it for this language) + $codes=$this->includeScript($langAlias,$htmlScriptMode); + + $prolog='
';
+    $epilog='
'; + + $text = $codes.$prolog.$text.$epilog; + + return $text; + } + + private function includeScript($langAlias, $htmlScriptMode) { + //get then lanuage name for the alias + $langName="text"; //IN CASE OF WRONG ALIAS WE WILL TREAT IT AS PLAIN TEXT + + if (isset(self::$langAliases[$langAlias])) + { + $langName=self::$langAliases[$langAlias]; + } + //get the filename for the language + $fileName=""; + if (isset(self::$langFiles[$langName])) + { + $fileName=self::$langFiles[$langName]; + } + else + { + $fileName=self::$langFiles["text"]; + } + //check if we have already embeeded file into the page + if (!isset($this->_includedScripts[$fileName])) + { + $this->_includedScripts[$fileName]="1"; + $this->updatePageIncludes($fileName); + } + if($htmlScriptMode=="TRUE") + { + //embeed xml lang file if necessary for html-script mode + if (!isset($this->_includedScripts[self::$langFiles[self::$langAliases["xml"]]])) + { + $this->_includedScripts[self::$langFiles[self::$langAliases["xml"]]]="1"; + $this->updatePageIncludes(self::$langFiles[self::$langAliases["xml"]]); + } + } + + //since we are here, we need to embeed styles and scripts into document + if ($this->_runHighlighterOnce) return ""; + $this->_runHighlighterOnce=True; + $pluginRoot=self::getPluginRoot(); + //TODO: Handle plugin parameters and set default SyntaxHighlighter values according to the plugin params vaules + $codes=''; + return $codes; + } + + private function updatePageIncludes($fileName) + { + $pluginRoot=self::getPluginRoot(); + $tag=''; + $document= & JFactory::getDocument(); + if ($document) + { + $document->addCustomTag($tag); + } + return; + } + + //include necessary styles into page only once + private function includeCSSOnce() { + //since we are here, we need to embeed styles and scripts into document + if ($this->_includeCSSOnce) return; + // we want only one link to the CSS + $this->_includeCSSOnce = True; + $pluginRoot=self::getPluginRoot(); + $tag= ' + +'; + $document= & JFactory::getDocument(); + if ($document) + { + $document->addCustomTag($tag); + } + return; + } + + public static function getPluginRoot() + { + return JURI::root().'plugins/content/codecitation/'; + } + +} \ No newline at end of file diff --git a/oss/joomla/trunk/plugins/content/CodeCitation.xml b/oss/joomla/trunk/plugins/content/CodeCitation.xml new file mode 100644 index 00000000..3833e61a --- /dev/null +++ b/oss/joomla/trunk/plugins/content/CodeCitation.xml @@ -0,0 +1,120 @@ + + + Content - CodeCitation + Konstantin Nizhegorodov (konstantin.nizhegorodov@gmail.com) + August 22, 2009 + Copyright 2009 Konstantin Nizhegorodov. All rights reserved. + http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL + http://www.smartsoftwarebits.com + 1.3.1 + The CodeCitation plugin allows you to include code sections in your Joomla 1.5 content using {codecitation} or custom tag. + Use of the {codecitation} tag allows you to work with code sections in your Joomla WYSIWIG editors. + Plugin uses SyntaxHighlighter 2.0 library from http://alexgorbatchev.com/wiki/SyntaxHighlighter + Supports: syntax highlighting for ActionScript3, Bash/shell, C#, C++, CSS, Delphi, Diff, Groovy, JavaScript, Java, JavaFX, Perl, PHP, Plain Text, PowerShell, Python, Ruby, Scala, SQL, Visual Basic, XML, HTML, XSLT + Usage example: {codecitation style="brush: xml;"}CODE HERE{/codecitation} + + +CodeCitation.php +CodeCitationREADME.txt +codecitation/scripts/clipboard.swf +codecitation/scripts/shBrushAS3.js +codecitation/scripts/shBrushBash.js +codecitation/scripts/shBrushCpp.js +codecitation/scripts/shBrushCSharp.js +codecitation/scripts/shBrushCss.js +codecitation/scripts/shBrushDelphi.js +codecitation/scripts/shBrushDiff.js +codecitation/scripts/shBrushGroovy.js +codecitation/scripts/shBrushJava.js +codecitation/scripts/shBrushJavaFX.js +codecitation/scripts/shBrushJScript.js +codecitation/scripts/shBrushPerl.js +codecitation/scripts/shBrushPhp.js +codecitation/scripts/shBrushPlain.js +codecitation/scripts/shBrushPowerShell.js +codecitation/scripts/shBrushPython.js +codecitation/scripts/shBrushRuby.js +codecitation/scripts/shBrushScala.js +codecitation/scripts/shBrushSql.js +codecitation/scripts/shBrushVb.js +codecitation/scripts/shBrushXml.js +codecitation/scripts/shCore.js +codecitation/scripts/shLegacy.js +codecitation/styles/help.png +codecitation/styles/magnifier.png +codecitation/styles/page_white_code.png +codecitation/styles/page_white_copy.png +codecitation/styles/printer.png +codecitation/styles/shCore.css +codecitation/styles/shThemeDefault.css +codecitation/styles/shThemeDjango.css +codecitation/styles/shThemeEmacs.css +codecitation/styles/shThemeFadeToGrey.css +codecitation/styles/shThemeMidnight.css +codecitation/styles/shThemeRDark.css +codecitation/styles/wrapping.png + + + en-GB.plg_content_CodeCitation.ini + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/oss/joomla/trunk/plugins/content/CodeCitationREADME.txt b/oss/joomla/trunk/plugins/content/CodeCitationREADME.txt new file mode 100644 index 00000000..44338f97 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/CodeCitationREADME.txt @@ -0,0 +1,64 @@ +codecitationREADME.txt + +The CodeCitation plugin allows you to include code sections in your Joomla 1.5 content using {codecitation} or custom tag. +Use of the {codecitation} tag allows you to work with code sections in your Joomla WYSIWIG editors. + +Plugin uses SyntaxHighlighter 2.0 library from http://alexgorbatchev.com/wiki/SyntaxHighlighter + +Supports: syntax highlighting for ActionScript3, Bash/shell, C#, C++, CSS, Delphi, Diff, Groovy, JavaScript, Java, JavaFX, Perl, PHP, Plain Text, PowerShell, Python, Ruby, Scala, SQL, Visual Basic, XML, HTML, XSLT + +INSTALLATION INSTRUCTIONS: +==================== + +- download the codecitation plugin. +- install the plugin using the Joomla Extensions install utility. +- ENABLE the new CodeCitation plugin with the Joomla 1.5 backend plugin manager. +- Set default parameters for the plugin engine. + +USING THE PLUGIN: +The syntax for the usage is: + +{codecitation [class=""] [width="<>"]} + +{/codecitation} + +where: + is a parameter string for the engine - see http://www.smartsoftwarebits.com/index.php/codecitation/69-supported-brushes-and-parameters + is an optional parameter to specify
width (fix code in some cases into your template) +For more information about SintaxHighlighter engine parameters please visit http://www.smartsoftwarebits.com/index.php/codecitation + +EXAMPLES +{codecitation class="brush: xml; gutter: false;" width="500px"} +xlm goes here +{/codecitation} + +OR (if you set default language to C++, for example): + +{codecitation} +C++ code goes here +{/codecitation} + +OR if you set custom tag=code in plugin parameters and default language=C++: +{code} +C++ code goes here +{/code} + +VERSION 1.0 +======== + - initial release + +VERSION 1.1.0 +======== + - PHP 5.2.3 callback syntax workaround + +VERSION 1.2.0 +======== + - Core engine updated to version 2.0.320 of SyntaxHighlighter + +VERSION 1.3.1 +======== + - Page load speed improved and page size redused. Only necessary scripts are loaded. + - Custom tag support implemented. Plugin supports custom plugin invocation tag in case "codecitation" seems to long for somebody (i use "code" tag time to time). + - Default language parameter implemented and can be set on the plugin's parameters page. It allows simplified plugin invocation systax. + - Default engine parameters values can be set on the plugin's parameters page. + - Themes are changeble on plugin paameters page. diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/clipboard.swf b/oss/joomla/trunk/plugins/content/codecitation/scripts/clipboard.swf new file mode 100644 index 0000000000000000000000000000000000000000..1b4d90a0fb838b38828bb2bb7f74c6629fd200c2 GIT binary patch literal 1361 zcmV-X1+Mx-S5pZa2LJ$goPAY&Y!pQlpV_b3-TUm}^X0f<&rEX&Y!- zauV@_vU_)Py)ApUWp7*B8VsPJiAGFNK>4FKkPyQkC1}JT#u^DBO2jKc3GfG)m^Ofk zs3=N6oxQ8o3UM-$nL$E532LObqcsxE{WFsO3;V4dFe?0)> zgCA)Zu=dGSgza-j~MBmh1>=YHvhW zjM$S(8ar~Rn40d@ltH0g?^m$}uWf!Q!%kH< z#xP^(x+!Y95+m+Yab4_H3?+$4u(V@Vt}~XDzL_;iqL{^o zp&OJavdxwNF<%uW+>lhbv~>tJx&D)vV-^K@4-n>gIL}Cuo^)MK^j2@Q5=E@(E?&c#M%&R zN2~)uCxR{n-3aC(n2%rqf`tecA?Oi`AoGNKe;%BVkBlB`FLik`TjxQHxw+$uc$EF~c!W)_K#E)2;kuZ3;AC~kD(D%158!=faIH7g*#&hCJlDj!{@^#Oh z&YnA!snInzdhQjh`|(Qhx29Y7cdBDm2OEziuibn3#L~q}Ki^y5KlPSqKlipTm^gFf zNMdBlx9#e9;OyPW9qD~{$8PeEH?Qm5Q+2lM%JJZp!X>x%IyQ5xfRV{0N=) literal 0 HcmV?d00001 diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushAS3.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushAS3.js new file mode 100644 index 00000000..985a3e8d --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushAS3.js @@ -0,0 +1,61 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.AS3 = function() +{ + // Created by Peter Atoria @ http://iAtoria.com + + var inits = 'class interface function package'; + + var keywords = '-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' + + 'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' + + 'extends false final finally flash_proxy for get if implements import in include Infinity ' + + 'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' + + 'Null Number Object object_proxy override parseFloat parseInt private protected public ' + + 'return set static String super switch this throw true try typeof uint undefined unescape ' + + 'use void while with' + ; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: new RegExp(this.getKeywords(inits), 'gm'), css: 'color3' }, // initializations + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp('var', 'gm'), css: 'variable' }, // variable + { regex: new RegExp('trace', 'gm'), css: 'color1' } // trace + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags); +}; + +SyntaxHighlighter.brushes.AS3.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.AS3.aliases = ['actionscript3', 'as3']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushBash.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushBash.js new file mode 100644 index 00000000..f94b9515 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushBash.js @@ -0,0 +1,66 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Bash = function() +{ + var keywords = 'if fi then elif else for do done until while break continue case function return in eq ne gt lt ge le'; + var commands = 'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' + + 'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' + + 'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' + + 'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' + + 'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' + + 'import install join kill less let ln local locate logname logout look lpc lpr lprint ' + + 'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' + + 'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' + + 'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' + + 'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' + + 'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' + + 'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' + + 'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' + + 'vi watch wc whereis which who whoami Wget xargs yes' + ; + + this.findMatches = function(regexList, code) + { + code = code.replace(/>/g, '>').replace(/</g, '<'); + this.code = code; + return SyntaxHighlighter.Highlighter.prototype.findMatches.apply(this, [regexList, code]); + }; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(this.getKeywords(commands), 'gm'), css: 'functions' } // commands + ]; +} + +SyntaxHighlighter.brushes.Bash.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Bash.aliases = ['bash', 'shell']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCSharp.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCSharp.js new file mode 100644 index 00000000..60b5be5c --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCSharp.js @@ -0,0 +1,67 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.CSharp = function() +{ + var keywords = 'abstract as base bool break byte case catch char checked class const ' + + 'continue decimal default delegate do double else enum event explicit ' + + 'extern false finally fixed float for foreach get goto if implicit in int ' + + 'interface internal is lock long namespace new null object operator out ' + + 'override params private protected public readonly ref return sbyte sealed set ' + + 'short sizeof stackalloc static string struct switch this throw true try ' + + 'typeof uint ulong unchecked unsafe ushort using virtual void while'; + + function fixComments(match, regexInfo) + { + var css = (match[0].indexOf("///") == 0) + ? 'color1' + : 'comments' + ; + + return [new SyntaxHighlighter.Match(match[0], match.index, css)]; + } + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, func : fixComments }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: /@"(?:[^"]|"")*"/g, css: 'string' }, // @-quoted strings + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /^\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // c# keyword + { regex: /\bpartial(?=\s+(?:class|interface|struct)\b)/g, css: 'keyword' }, // contextual keyword: 'partial' + { regex: /\byield(?=\s+(?:return|break)\b)/g, css: 'keyword' } // contextual keyword: 'yield' + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +}; + +SyntaxHighlighter.brushes.CSharp.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.CSharp.aliases = ['c#', 'c-sharp', 'csharp']; + diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushColdFusion.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushColdFusion.js new file mode 100644 index 00000000..57de5215 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushColdFusion.js @@ -0,0 +1,102 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.ColdFusion = function() +{ + // Contributed by Jen + // http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus + + var funcs = 'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + + 'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + + 'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + + 'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + + 'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + + 'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + + 'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + + 'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + + 'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + + 'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + + 'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + + 'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + + 'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + + 'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + + 'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + + 'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + + 'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + + 'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + + 'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + + 'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + + 'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + + 'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + + 'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + + 'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + + 'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + + 'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + + 'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + + 'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + + 'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + + 'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + + 'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + + 'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + + 'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + + 'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + + 'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + + 'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + + 'XmlValidate Year YesNoFormat'; + + var keywords = 'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + + 'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + + 'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + + 'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + + 'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + + 'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + + 'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + + 'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + + 'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + + 'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + + 'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + + 'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + + 'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + + 'cfwindow cfxml cfzip cfzipparam'; + + var operators = 'all and any between cross in join like not null or outer some'; + + this.regexList = [ + { regex: new RegExp('--(.*)$', 'gm'), css: 'comments' }, // one line and multiline comments + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // single quoted strings + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, // functions + { regex: new RegExp(this.getKeywords(operators), 'gmi'), css: 'color1' }, // operators and such + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; +} + +SyntaxHighlighter.brushes.ColdFusion.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.ColdFusion.aliases = ['coldfusion','cf']; \ No newline at end of file diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCpp.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCpp.js new file mode 100644 index 00000000..c80c1cb9 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCpp.js @@ -0,0 +1,99 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Cpp = function() +{ + // Copyright 2006 Shin, YoungJin + + var datatypes = 'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' + + 'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' + + 'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' + + 'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' + + 'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' + + 'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' + + 'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' + + 'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' + + 'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' + + 'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' + + 'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' + + 'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' + + 'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' + + 'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' + + 'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' + + 'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' + + 'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' + + 'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' + + 'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' + + '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' + + 'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' + + 'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' + + 'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' + + 'va_list wchar_t wctrans_t wctype_t wint_t signed'; + + var keywords = 'break case catch class const __finally __exception __try ' + + 'const_cast continue private public protected __declspec ' + + 'default delete deprecated dllexport dllimport do dynamic_cast ' + + 'else enum explicit extern if for friend goto inline ' + + 'mutable naked namespace new noinline noreturn nothrow ' + + 'register reinterpret_cast return selectany ' + + 'sizeof static static_cast struct switch template this ' + + 'thread throw true false try typedef typeid typename union ' + + 'using uuid virtual void volatile whcar_t while'; + + var functions = 'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' + + 'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' + + 'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' + + 'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' + + 'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' + + 'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' + + 'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' + + 'fwrite getc getchar gets perror printf putc putchar puts remove ' + + 'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' + + 'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' + + 'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' + + 'mbtowc qsort rand realloc srand strtod strtol strtoul system ' + + 'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' + + 'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' + + 'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' + + 'clock ctime difftime gmtime localtime mktime strftime time'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /^ *#.*/gm, css: 'preprocessor' }, + { regex: new RegExp(this.getKeywords(datatypes), 'gm'), css: 'color1 bold' }, + { regex: new RegExp(this.getKeywords(functions), 'gm'), css: 'functions bold' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword bold' } + ]; +}; + +SyntaxHighlighter.brushes.Cpp.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Cpp.aliases = ['cpp', 'c']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCss.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCss.js new file mode 100644 index 00000000..a431ec2c --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushCss.js @@ -0,0 +1,93 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.CSS = function() +{ + function getKeywordsCSS(str) + { + return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b'; + }; + + function getValuesCSS(str) + { + return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b'; + }; + + var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' + + 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' + + 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' + + 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' + + 'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' + + 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' + + 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' + + 'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' + + 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' + + 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' + + 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' + + 'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' + + 'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' + + 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index'; + + var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+ + 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+ + 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+ + 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+ + 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+ + 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+ + 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+ + 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+ + 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+ + 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+ + 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+ + 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+ + 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+ + 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow'; + + var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\#[a-fA-F0-9]{3,6}/g, css: 'value' }, // html colors + { regex: /(-?\d+)(\.\d+)?(px|em|pt|\:|\%|)/g, css: 'value' }, // sizes + { regex: /!important/g, css: 'color3' }, // !important + { regex: new RegExp(getKeywordsCSS(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(getValuesCSS(values), 'g'), css: 'value' }, // values + { regex: new RegExp(this.getKeywords(fonts), 'g'), css: 'color1' } // fonts + ]; + + this.forHtmlScript({ + left: /(<|<)\s*style.*?(>|>)/gi, + right: /(<|<)\/\s*style\s*(>|>)/gi + }); +}; + +SyntaxHighlighter.brushes.CSS.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.CSS.aliases = ['css']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDelphi.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDelphi.js new file mode 100644 index 00000000..44877652 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDelphi.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Delphi = function() +{ + var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' + + 'case char class comp const constructor currency destructor div do double ' + + 'downto else end except exports extended false file finalization finally ' + + 'for function goto if implementation in inherited int64 initialization ' + + 'integer interface is label library longint longword mod nil not object ' + + 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' + + 'pint64 pointer private procedure program property pshortstring pstring ' + + 'pvariant pwidechar pwidestring protected public published raise real real48 ' + + 'record repeat set shl shortint shortstring shr single smallint string then ' + + 'threadvar to true try type unit until uses val var varirnt while widechar ' + + 'widestring with word write writeln xor'; + + this.regexList = [ + { regex: /\(\*[\s\S]*?\*\)/gm, css: 'comments' }, // multiline comments (* *) + { regex: /{(?!\$)[\s\S]*?}/gm, css: 'comments' }, // multiline comments { } + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\{\$[a-zA-Z]+ .+\}/g, css: 'color1' }, // compiler Directives and Region tags + { regex: /\b[\d\.]+\b/g, css: 'value' }, // numbers 12345 + { regex: /\$[a-zA-Z0-9]+\b/g, css: 'value' }, // numbers $F5D3 + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; +}; + +SyntaxHighlighter.brushes.Delphi.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Delphi.aliases = ['delphi', 'pascal', 'pas']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDiff.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDiff.js new file mode 100644 index 00000000..4cf667ad --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushDiff.js @@ -0,0 +1,43 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Diff = function() +{ + this.regexList = [ + { regex: /^\+\+\+.*$/gm, css: 'color2' }, + { regex: /^\-\-\-.*$/gm, css: 'color2' }, + { regex: /^\s.*$/gm, css: 'color1' }, + { regex: /^@@.*@@$/gm, css: 'variable' }, + { regex: /^\+[^\+]{1}.*$/gm, css: 'string' }, + { regex: /^\-[^\-]{1}.*$/gm, css: 'comments' } + ]; +}; + +SyntaxHighlighter.brushes.Diff.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Diff.aliases = ['diff', 'patch']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushErlang.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushErlang.js new file mode 100644 index 00000000..e040592e --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushErlang.js @@ -0,0 +1,54 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Erlang = function() +{ + // Contributed by Jean-Lou Dupont + // http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html + + // According to: http://erlang.org/doc/reference_manual/introduction.html#1.5 + var keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+ + 'case catch cond div end fun if let not of or orelse '+ + 'query receive rem try when xor'+ + // additional + ' module export import define'; + + this.regexList = [ + { regex: new RegExp("[A-Z][A-Za-z0-9_]+", 'g'), css: 'constants' }, + { regex: new RegExp("\\%.+", 'gm'), css: 'comments' }, + { regex: new RegExp("\\?[A-Za-z0-9_]+", 'g'), css: 'preprocessor' }, + { regex: new RegExp("[a-z0-9_]+:[a-z0-9_]+", 'g'), css: 'functions' }, + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; +}; + +SyntaxHighlighter.brushes.Erlang.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Erlang.aliases = ['erl', 'erlang']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushGroovy.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushGroovy.js new file mode 100644 index 00000000..4872777b --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushGroovy.js @@ -0,0 +1,69 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Groovy = function() +{ + // Contributed by Andres Almiray + // http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter + + var keywords = 'as assert break case catch class continue def default do else extends finally ' + + 'if in implements import instanceof interface new package property return switch ' + + 'throw throws try while public protected private static'; + var types = 'void boolean byte char short int long float double'; + var constants = 'null'; + var methods = 'allProperties count get size '+ + 'collect each eachProperty eachPropertyName eachWithIndex find findAll ' + + 'findIndexOf grep inject max min reverseEach sort ' + + 'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' + + 'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' + + 'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' + + 'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' + + 'transformChar transformLine withOutputStream withPrintWriter withStream ' + + 'withStreams withWriter withWriterAppend write writeLine '+ + 'dump inspect invokeMethod print println step times upto use waitForOrKill '+ + 'getText'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /""".*"""/g, css: 'string' }, // GStrings + { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'), css: 'value' }, // numbers + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // goovy keyword + { regex: new RegExp(this.getKeywords(types), 'gm'), css: 'color1' }, // goovy/java type + { regex: new RegExp(this.getKeywords(constants), 'gm'), css: 'constants' }, // constants + { regex: new RegExp(this.getKeywords(methods), 'gm'), css: 'functions' } // methods + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +} + +SyntaxHighlighter.brushes.Groovy.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Groovy.aliases = ['groovy']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJScript.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJScript.js new file mode 100644 index 00000000..fdb7398f --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJScript.js @@ -0,0 +1,52 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.JScript = function() +{ + var keywords = 'break case catch continue ' + + 'default delete do else false ' + + 'for function if in instanceof ' + + 'new null return super switch ' + + 'this throw true try typeof var while with' + ; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags); +}; + +SyntaxHighlighter.brushes.JScript.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.JScript.aliases = ['js', 'jscript', 'javascript']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJava.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJava.js new file mode 100644 index 00000000..810049bf --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJava.js @@ -0,0 +1,59 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Java = function() +{ + var keywords = 'abstract assert boolean break byte case catch char class const ' + + 'continue default do double else enum extends ' + + 'false final finally float for goto if implements import ' + + 'instanceof int interface long native new null ' + + 'package private protected public return ' + + 'short static strictfp super switch synchronized this throw throws true ' + + 'transient try void volatile while'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: /\/\*([^\*][\s\S]*)?\*\//gm, css: 'comments' }, // multiline comments + { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers + { regex: /(?!\@interface\b)\@[\$\w]+\b/g, css: 'color1' }, // annotation @anno + { regex: /\@interface\b/g, css: 'color2' }, // @interface keyword + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // java keyword + ]; + + this.forHtmlScript({ + left : /(<|<)%[@!=]?/g, + right : /%(>|>)/g + }); +}; + +SyntaxHighlighter.brushes.Java.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Java.aliases = ['java']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJavaFX.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJavaFX.js new file mode 100644 index 00000000..e22c2ecf --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushJavaFX.js @@ -0,0 +1,60 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.JavaFX = function() +{ + // Contributed by Patrick Webster + // http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html + var datatypes = 'Boolean Byte Character Double Duration ' + + 'Float Integer Long Number Short String Void' + ; + + var keywords = 'abstract after and as assert at before bind bound break catch class ' + + 'continue def delete else exclusive extends false finally first for from ' + + 'function if import in indexof init insert instanceof into inverse last ' + + 'lazy mixin mod nativearray new not null on or override package postinit ' + + 'protected public public-init public-read replace return reverse sizeof ' + + 'step super then this throw true try tween typeof var where while with ' + + 'attribute let private readonly static trigger' + ; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: /(-?\.?)(\b(\d*\.?\d+|\d+\.?\d*)(e[+-]?\d+)?|0x[a-f\d]+)\b\.?/gi, css: 'color2' }, // numbers + { regex: new RegExp(this.getKeywords(datatypes), 'gm'), css: 'variable' }, // datatypes + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +}; + +SyntaxHighlighter.brushes.JavaFX.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.JavaFX.aliases = ['jfx', 'javafx']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPerl.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPerl.js new file mode 100644 index 00000000..6858508d --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPerl.js @@ -0,0 +1,74 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Perl = function() +{ + // Contributed by David Simmons-Duffin and Marty Kube + + var funcs = + 'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + + 'chroot close closedir connect cos crypt defined delete each endgrent ' + + 'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + + '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 grep hex index int ioctl join keys kill lc lcfirst length link ' + + 'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + + 'oct open opendir ord pack pipe pop pos print printf prototype push ' + + 'quotemeta rand read readdir readline readlink readpipe recv rename ' + + 'reset 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 substr symlink syscall sysopen sysread sysseek ' + + 'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + + 'undef unlink unpack unshift utime values vec wait waitpid warn write'; + + var keywords = + 'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' + + 'for foreach goto if import last local my next no our package redo ref ' + + 'require return sub tie tied unless untie until use wantarray while'; + + this.regexList = [ + { regex: new RegExp('#[^!].*$', 'gm'), css: 'comments' }, + { regex: new RegExp('^\\s*#!.*$', 'gm'), css: 'preprocessor' }, // shebang + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, + { regex: new RegExp('(\\$|@|%)\\w+', 'g'), css: 'variable' }, + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags); +} + +SyntaxHighlighter.brushes.Perl.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Perl.aliases = ['perl', 'Perl', 'pl']; \ No newline at end of file diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPhp.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPhp.js new file mode 100644 index 00000000..51f69fba --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPhp.js @@ -0,0 +1,91 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Php = function() +{ + var funcs = 'abs acos acosh addcslashes addslashes ' + + 'array_change_key_case array_chunk array_combine array_count_values array_diff '+ + 'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+ + 'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+ + 'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+ + 'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+ + 'array_push array_rand array_reduce array_reverse array_search array_shift '+ + 'array_slice array_splice array_sum array_udiff array_udiff_assoc '+ + 'array_udiff_uassoc array_uintersect array_uintersect_assoc '+ + 'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+ + 'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+ + 'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+ + 'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+ + 'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+ + 'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+ + 'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+ + 'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+ + 'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+ + 'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+ + 'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+ + 'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+ + 'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+ + 'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+ + 'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+ + 'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+ + 'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+ + 'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+ + 'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+ + 'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+ + 'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+ + 'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+ + 'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+ + 'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+ + 'strtoupper strtr strval substr substr_compare'; + + var keywords = 'and or xor array as break case ' + + 'cfunction class const continue declare default die do else ' + + 'elseif enddeclare endfor endforeach endif endswitch endwhile ' + + 'extends for foreach function include include_once global if ' + + 'new old_function return static switch use require require_once ' + + 'var while abstract interface public implements extends private protected throw'; + + var constants = '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\$\w+/g, css: 'variable' }, // variables + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, // common functions + { regex: new RegExp(this.getKeywords(constants), 'gmi'), css: 'constants' }, // constants + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keyword + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags); +}; + +SyntaxHighlighter.brushes.Php.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Php.aliases = ['php']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPlain.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPlain.js new file mode 100644 index 00000000..74562e14 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPlain.js @@ -0,0 +1,35 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Plain = function() +{ +}; + +SyntaxHighlighter.brushes.Plain.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Plain.aliases = ['text', 'plain']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPowerShell.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPowerShell.js new file mode 100644 index 00000000..9cce267a --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPowerShell.js @@ -0,0 +1,76 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.PowerShell = function() +{ + // Contributes by B.v.Zanten, Getronics + // http://confluence.atlassian.com/display/CONFEXT/New+Code+Macro + + var keywords = 'Add-Content Add-History Add-Member Add-PSSnapin Clear(-Content)? Clear-Item ' + + 'Clear-ItemProperty Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ' + + 'ConvertTo-Html ConvertTo-SecureString Copy(-Item)? Copy-ItemProperty Export-Alias ' + + 'Export-Clixml Export-Console Export-Csv ForEach(-Object)? Format-Custom Format-List ' + + 'Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command ' + + 'Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy ' + + 'Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member ' + + 'Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service ' + + 'Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object ' + + 'Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item ' + + 'Join-Path Measure-Command Measure-Object Move(-Item)? Move-ItemProperty New-Alias ' + + 'New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan ' + + 'New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location ' + + 'Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin ' + + 'Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service ' + + 'Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content ' + + 'Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug ' + + 'Set-Service Set-TraceSource Set(-Variable)? Sort-Object Split-Path Start-Service ' + + 'Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service ' + + 'Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where(-Object)? ' + + 'Write-Debug Write-Error Write(-Host)? Write-Output Write-Progress Write-Verbose Write-Warning'; + var alias = 'ac asnp clc cli clp clv cpi cpp cvpa diff epal epcsv fc fl ' + + 'ft fw gal gc gci gcm gdr ghy gi gl gm gp gps group gsv ' + + 'gsnp gu gv gwmi iex ihy ii ipal ipcsv mi mp nal ndr ni nv oh rdr ' + + 'ri rni rnp rp rsnp rv rvpa sal sasv sc select si sl sleep sort sp ' + + 'spps spsv sv tee cat cd cp h history kill lp ls ' + + 'mount mv popd ps pushd pwd r rm rmdir echo cls chdir del dir ' + + 'erase rd ren type % \\?'; + + this.regexList = [ + { regex: /#.*$/gm, css: 'comments' }, // one line comments + { regex: /\$[a-zA-Z0-9]+\b/g, css: 'value' }, // variables $Computer1 + { regex: /\-[a-zA-Z]+\b/g, css: 'keyword' }, // Operators -not -and -eq + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' }, + { regex: new RegExp(this.getKeywords(alias), 'gmi'), css: 'keyword' } + ]; +}; + +SyntaxHighlighter.brushes.PowerShell.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.PowerShell.aliases = ['powershell', 'ps']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPython.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPython.js new file mode 100644 index 00000000..eb1077e7 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushPython.js @@ -0,0 +1,66 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Python = function() +{ + // Contributed by Gheorghe Milas and Ahmad Sherif + + var keywords = 'and assert break class continue def del elif else ' + + 'except exec finally for from global if import in is ' + + 'lambda not or pass print raise return try yield while'; + + var funcs = '__import__ abs all any apply basestring bin bool buffer callable ' + + 'chr classmethod cmp coerce compile complex delattr dict dir ' + + 'divmod enumerate eval execfile file filter float format frozenset ' + + 'getattr globals hasattr hash help hex id input int intern ' + + 'isinstance issubclass iter len list locals long map max min next ' + + 'object oct open ord pow print property range raw_input reduce ' + + 'reload repr reversed round set setattr slice sorted staticmethod ' + + 'str sum super tuple type type unichr unicode vars xrange zip'; + + var special = 'None True False self cls class_'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, + { regex: /^\s*@\w+/gm, css: 'decorator' }, + { regex: /(['\"]{3})([^\1])*?\1/gm, css: 'comments' }, + { regex: /"(?!")(?:\.|\\\"|[^\""\n])*"/gm, css: 'string' }, + { regex: /'(?!')(?:\.|(\\\')|[^\''\n])*'/gm, css: 'string' }, + { regex: /\+|\-|\*|\/|\%|=|==/gm, css: 'keyword' }, + { regex: /\b\d+\.?\w*/g, css: 'value' }, + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, + { regex: new RegExp(this.getKeywords(special), 'gm'), css: 'color1' } + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +}; + +SyntaxHighlighter.brushes.Python.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Python.aliases = ['py', 'python']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushRuby.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushRuby.js new file mode 100644 index 00000000..6cf0b731 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushRuby.js @@ -0,0 +1,57 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Ruby = function() +{ + // Contributed by Erik Peterson. + + var keywords = 'alias and BEGIN begin break case class def define_method defined do each else elsif ' + + 'END end ensure false for if in module new next nil not or raise redo rescue retry return ' + + 'self super then throw true undef unless until when while yield'; + + var builtins = 'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' + + 'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' + + 'ThreadGroup Thread Time TrueClass'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings + { regex: /\b[A-Z0-9_]+\b/g, css: 'constants' }, // constants + { regex: /:[a-z][A-Za-z0-9_]*/g, css: 'color2' }, // symbols + { regex: /(\$|@@|@)\w+/g, css: 'variable bold' }, // $global, @instance, and @@class variables + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(this.getKeywords(builtins), 'gm'), css: 'color1' } // builtins + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +}; + +SyntaxHighlighter.brushes.Ruby.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Ruby.aliases = ['ruby', 'rails', 'ror', 'rb']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushScala.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushScala.js new file mode 100644 index 00000000..6e595f71 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushScala.js @@ -0,0 +1,53 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Scala = function() +{ + // Contributed by Yegor Jbanov and David Bernard. + + var keywords = 'val sealed case def true trait implicit forSome import match object null finally super ' + + 'override try lazy for var catch throw type extends class while with new final yield abstract ' + + 'else do if return protected private this package false'; + + var keyops = '[_:=><%#@]+'; + + this.regexList = [ + { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' }, // multiline comments + { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: 'string' }, // multi-line strings + { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: 'string' }, // double-quoted string + { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings + { regex: /0x[a-f0-9]+|\d+(\.\d+)?/gi, css: 'value' }, // numbers + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(keyops, 'gm'), css: 'keyword' } // scala keyword + ]; +} + +SyntaxHighlighter.brushes.Scala.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Scala.aliases = ['scala']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushSql.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushSql.js new file mode 100644 index 00000000..0fe121c4 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushSql.js @@ -0,0 +1,68 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Sql = function() +{ + var funcs = 'abs avg case cast coalesce convert count current_timestamp ' + + 'current_user day isnull left lower month nullif replace right ' + + 'session_user space substring sum system_user upper user year'; + + var keywords = 'absolute action add after alter as asc at authorization begin bigint ' + + 'binary bit by cascade char character check checkpoint close collate ' + + 'column commit committed connect connection constraint contains continue ' + + 'create cube current current_date current_time cursor database date ' + + 'deallocate dec decimal declare default delete desc distinct double drop ' + + 'dynamic else end end-exec escape except exec execute false fetch first ' + + 'float for force foreign forward free from full function global goto grant ' + + 'group grouping having hour ignore index inner insensitive insert instead ' + + 'int integer intersect into is isolation key last level load local max min ' + + 'minute modify move name national nchar next no numeric of off on only ' + + 'open option order out output partial password precision prepare primary ' + + 'prior privileges procedure public read real references relative repeatable ' + + 'restrict return returns revoke rollback rollup rows rule schema scroll ' + + 'second section select sequence serializable set size smallint static ' + + 'statistics table temp temporary then time timestamp to top transaction ' + + 'translation trigger true truncate uncommitted union unique update values ' + + 'varchar varying view when where with work'; + + var operators = 'all and any between cross in join like not null or outer some'; + + this.regexList = [ + { regex: /--(.*)$/gm, css: 'comments' }, // one line and multiline comments + { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings + { regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: 'string' }, // single quoted strings + { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'color2' }, // functions + { regex: new RegExp(this.getKeywords(operators), 'gmi'), css: 'color1' }, // operators and such + { regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' } // keyword + ]; +}; + +SyntaxHighlighter.brushes.Sql.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Sql.aliases = ['sql']; + diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushVb.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushVb.js new file mode 100644 index 00000000..bded9dd0 --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushVb.js @@ -0,0 +1,58 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Vb = function() +{ + var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' + + 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' + + 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' + + 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' + + 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' + + 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' + + 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' + + 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' + + 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' + + 'Overloads Overridable Overrides ParamArray Preserve Private Property ' + + 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' + + 'Return Select Set Shadows Shared Short Single Static Step Stop String ' + + 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' + + 'Variant When While With WithEvents WriteOnly Xor'; + + this.regexList = [ + { regex: /'.*$/gm, css: 'comments' }, // one line comments + { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings + { regex: /^\s*#.*$/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // vb keyword + ]; + + this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags); +}; + +SyntaxHighlighter.brushes.Vb.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Vb.aliases = ['vb', 'vbnet']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushXml.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushXml.js new file mode 100644 index 00000000..23fb7e4e --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shBrushXml.js @@ -0,0 +1,71 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +SyntaxHighlighter.brushes.Xml = function() +{ + function process(match, regexInfo) + { + var constructor = SyntaxHighlighter.Match, + code = match[0], + tag = new XRegExp('(<|<)[\\s\\/\\?]*(?[:\\w-\\.]+)', 'xg').exec(code), + result = [] + ; + + if (match.attributes != null) + { + var attributes, + regex = new XRegExp('(? [\\w:\\-\\.]+)' + + '\\s*=\\s*' + + '(? ".*?"|\'.*?\'|\\w+)', + 'xg'); + + while ((attributes = regex.exec(code)) != null) + { + result.push(new constructor(attributes.name, match.index + attributes.index, 'color1')); + result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string')); + } + } + + if (tag != null) + result.push( + new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword') + ); + + return result; + } + + this.regexList = [ + { regex: new XRegExp('(\\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\>|>)', 'gm'), css: 'color2' }, // + { regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // + { regex: new XRegExp('(<|<)[\\s\\/\\?]*(\\w+)(?.*?)[\\s\\/\\?]*(>|>)', 'sg'), func: process } + ]; +}; + +SyntaxHighlighter.brushes.Xml.prototype = new SyntaxHighlighter.Highlighter(); +SyntaxHighlighter.brushes.Xml.aliases = ['xml', 'xhtml', 'xslt', 'html']; diff --git a/oss/joomla/trunk/plugins/content/codecitation/scripts/shCore.js b/oss/joomla/trunk/plugins/content/codecitation/scripts/shCore.js new file mode 100644 index 00000000..4151e52a --- /dev/null +++ b/oss/joomla/trunk/plugins/content/codecitation/scripts/shCore.js @@ -0,0 +1,2077 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/ + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate + * + * @version + * 2.1.364 (October 15 2009) + * + * @copyright + * Copyright (C) 2004-2009 Alex Gorbatchev. + * + * @license + * This file is part of SyntaxHighlighter. + * + * SyntaxHighlighter is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SyntaxHighlighter is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SyntaxHighlighter. If not, see . + */ +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +if (!window.SyntaxHighlighter) var SyntaxHighlighter = function() { + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... +var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : true, + + /** Lines to highlight. */ + 'highlight' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : true, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + /** Enables or disables automatic line wrapping. */ + 'wrap-lines' : true, + + 'html-script' : false + }, + + config : { + /** Enables use of tags. */ + scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi } + }, + + toolbar : { + /** + * Creates new toolbar for a highlighter. + * @param {Highlighter} highlighter Target highlighter. + */ + create : function(highlighter) + { + var div = document.createElement('DIV'), + items = sh.toolbar.items + ; + + div.className = 'toolbar'; + + for (var name in items) + { + var constructor = items[name], + command = new constructor(highlighter), + element = command.create() + ; + + highlighter.toolbarCommands[name] = command; + + if (element == null) + continue; + + if (typeof(element) == 'string') + element = sh.toolbar.createButton(element, highlighter.id, name); + + element.className += 'item ' + name; + div.appendChild(element); + } + + return div; + }, + + /** + * Create a standard anchor button for the toolbar. + * @param {String} label Label text to display. + * @param {String} highlighterId Highlighter ID that this button would belong to. + * @param {String} commandName Command name that would be executed. + * @return {Element} Returns an 'A' element. + */ + createButton : function(label, highlighterId, commandName) + { + var a = document.createElement('a'), + style = a.style, + config = sh.config, + width = config.toolbarItemWidth, + height = config.toolbarItemHeight + ; + + a.href = '#' + commandName; + a.title = label; + a.highlighterId = highlighterId; + a.commandName = commandName; + a.innerHTML = label; + + if (isNaN(width) == false) + style.width = width + 'px'; + + if (isNaN(height) == false) + style.height = height + 'px'; + + a.onclick = function(e) + { + try + { + sh.toolbar.executeCommand( + this, + e || window.event, + this.highlighterId, + this.commandName + ); + } + catch(e) + { + sh.utils.alert(e.message); + } + + return false; + }; + + return a; + }, + + /** + * Executes a toolbar command. + * @param {Element} sender Sender element. + * @param {MouseEvent} event Original mouse event object. + * @param {String} highlighterId Highlighter DIV element ID. + * @param {String} commandName Name of the command to execute. + * @return {Object} Passes out return value from command execution. + */ + executeCommand : function(sender, event, highlighterId, commandName, args) + { + var highlighter = sh.vars.highlighters[highlighterId], + command + ; + + if (highlighter == null || (command = highlighter.toolbarCommands[commandName]) == null) + return null; + + return command.execute(sender, event, args); + }, + + /** Collection of toolbar items. */ + items : { + expandSource : function(highlighter) + { + this.create = function() + { + if (highlighter.getParam('collapse') != true) + return; + + return sh.config.strings.expandSource; + }; + + this.execute = function(sender, event, args) + { + var div = highlighter.div; + + sender.parentNode.removeChild(sender); + div.className = div.className.replace('collapsed', ''); + }; + }, + + /** + * Command to open a new window and display the original unformatted source code inside. + */ + viewSource : function(highlighter) + { + this.create = function() + { + return sh.config.strings.viewSource; + }; + + this.execute = function(sender, event, args) + { + var code = sh.utils.fixInputString(highlighter.originalCode).replace(/' + code + ''); + wnd.document.close(); + }; + }, + + /** + * Command to copy the original source code in to the clipboard. + * Uses Flash method if clipboardSwf is configured. + */ + copyToClipboard : function(highlighter) + { + var flashDiv, flashSwf, + highlighterId = highlighter.id + ; + + this.create = function() + { + var config = sh.config; + + // disable functionality if running locally + if (config.clipboardSwf == null) + return null; + + function params(list) + { + var result = ''; + + for (var name in list) + result += ""; + + return result; + }; + + function attributes(list) + { + var result = ''; + + for (var name in list) + result += " " + name + "='" + list[name] + "'"; + + return result; + }; + + var args1 = { + width : config.toolbarItemWidth, + height : config.toolbarItemHeight, + id : highlighterId + '_clipboard', + type : 'application/x-shockwave-flash', + title : sh.config.strings.copyToClipboard + }, + + // these arguments are used in IE's collection + args2 = { + allowScriptAccess : 'always', + wmode : 'transparent', + flashVars : 'highlighterId=' + highlighterId, + menu : 'false' + }, + swf = config.clipboardSwf, + html + ; + + if (/msie/i.test(navigator.userAgent)) + { + html = '' + + params(args2) + + params({ movie : swf }) + + '' + ; + } + else + { + html = '' + ; + } + + flashDiv = document.createElement('div'); + flashDiv.innerHTML = html; + + return flashDiv; + }; + + this.execute = function(sender, event, args) + { + var command = args.command; + + switch (command) + { + case 'get': + var code = sh.utils.unindent( + sh.utils.fixInputString(highlighter.originalCode) + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/&/g, '&') + ); + + if(window.clipboardData) + // will fall through to the confirmation because there isn't a break + window.clipboardData.setData('text', code); + else + return sh.utils.unindent(code); + + case 'ok': + sh.utils.alert(sh.config.strings.copyToClipboardConfirmation); + break; + + case 'error': + sh.utils.alert(args.message); + break; + } + }; + }, + + /** Command to print the colored source code. */ + printSource : function(highlighter) + { + this.create = function() + { + return sh.config.strings.print; + }; + + this.execute = function(sender, event, args) + { + var iframe = document.createElement('IFRAME'), + doc = null + ; + + // make sure there is never more than one hidden iframe created by SH + if (sh.vars.printFrame != null) + document.body.removeChild(sh.vars.printFrame); + + sh.vars.printFrame = iframe; + + // this hides the iframe + iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;'; + + document.body.appendChild(iframe); + doc = iframe.contentWindow.document; + + copyStyles(doc, window.document); + doc.write('
' + highlighter.div.innerHTML + '
'); + doc.close(); + + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + + function copyStyles(destDoc, sourceDoc) + { + var links = sourceDoc.getElementsByTagName('link'); + + for(var i = 0; i < links.length; i++) + if(links[i].rel.toLowerCase() == 'stylesheet' && /shCore\.css$/.test(links[i].href)) + destDoc.write(''); + }; + }; + }, + + /** Command to display the about dialog window. */ + about : function(highlighter) + { + this.create = function() + { + return sh.config.strings.help; + }; + + this.execute = function(sender, event) + { + var wnd = sh.utils.popup('', '_blank', 500, 250, 'scrollbars=0'), + doc = wnd.document + ; + + doc.write(sh.config.strings.aboutDialog); + doc.close(); + wnd.focus(); + }; + } + } + }, + + utils : { + /** + * Finds an index of element in the array. + * @ignore + * @param {Object} searchElement + * @param {Number} fromIndex + * @return {Number} Returns index of element if found; -1 otherwise. + */ + indexOf : function(array, searchElement, fromIndex) + { + fromIndex = Math.max(fromIndex || 0, 0); + + for (var i = fromIndex; i < array.length; i++) + if(array[i] == searchElement) + return i; + + return -1; + }, + + /** + * Generates a unique element ID. + */ + guid : function(prefix) + { + return prefix + Math.round(Math.random() * 1000000).toString(); + }, + + /** + * Merges two objects. Values from obj2 override values in obj1. + * Function is NOT recursive and works only for one dimensional objects. + * @param {Object} obj1 First object. + * @param {Object} obj2 Second object. + * @return {Object} Returns combination of both objects. + */ + merge: function(obj1, obj2) + { + var result = {}, name; + + for (name in obj1) + result[name] = obj1[name]; + + for (name in obj2) + result[name] = obj2[name]; + + return result; + }, + + /** + * Attempts to convert string to boolean. + * @param {String} value Input string. + * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise. + */ + toBoolean: function(value) + { + switch (value) + { + case "true": + return true; + + case "false": + return false; + } + + return value; + }, + + /** + * Opens up a centered popup window. + * @param {String} url URL to open in the window. + * @param {String} name Popup name. + * @param {int} width Popup width. + * @param {int} height Popup height. + * @param {String} options window.open() options. + * @return {Window} Returns window instance. + */ + popup: function(url, name, width, height, options) + { + var x = (screen.width - width) / 2, + y = (screen.height - height) / 2 + ; + + options += ', left=' + x + + ', top=' + y + + ', width=' + width + + ', height=' + height + ; + options = options.replace(/^,/, ''); + + var win = window.open(url, name, options); + win.focus(); + return win; + }, + + /** + * Adds event handler to the target object. + * @param {Object} obj Target object. + * @param {String} type Name of the event. + * @param {Function} func Handling function. + */ + addEvent: function(obj, type, func) + { + if (obj.attachEvent) + { + obj['e' + type + func] = func; + obj[type + func] = function() + { + obj['e' + type + func](window.event); + } + obj.attachEvent('on' + type, obj[type + func]); + } + else + { + obj.addEventListener(type, func, false); + } + }, + + /** + * Displays an alert. + * @param {String} str String to display. + */ + alert: function(str) + { + alert(sh.config.strings.alert + str) + }, + + /** + * Finds a brush by its alias. + * + * @param {String} alias Brush alias. + * @param {Boolean} alert Suppresses the alert if false. + * @return {Brush} Returns bursh constructor if found, null otherwise. + */ + findBrush: function(alias, alert) + { + var brushes = sh.vars.discoveredBrushes, + result = null + ; + + if (brushes == null) + { + brushes = {}; + + // Find all brushes + for (var brush in sh.brushes) + { + var aliases = sh.brushes[brush].aliases; + + if (aliases == null) + continue; + + // keep the brush name + sh.brushes[brush].name = brush.toLowerCase(); + + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = brush; + } + + sh.vars.discoveredBrushes = brushes; + } + + result = sh.brushes[brushes[alias]]; + + if (result == null && alert != false) + sh.utils.alert(sh.config.strings.noBrush + alias); + + return result; + }, + + /** + * Executes a callback on each line and replaces each line with result from the callback. + * @param {Object} str Input string. + * @param {Object} callback Callback function taking one string argument and returning a string. + */ + eachLine: function(str, callback) + { + var lines = str.split('\n'); + + for (var i = 0; i < lines.length; i++) + lines[i] = callback(lines[i]); + + return lines.join('\n'); + }, + + /** + * This is a special trim which only removes first and last empty lines + * and doesn't affect valid leading space on the first line. + * + * @param {String} str Input string + * @return {String} Returns string without empty first and last lines. + */ + trimFirstAndLastLines: function(str) + { + return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, ''); + }, + + /** + * Parses key/value pairs into hash object. + * + * Understands the following formats: + * - name: word; + * - name: [word, word]; + * - name: "string"; + * - name: 'string'; + * + * For example: + * name1: value; name2: [value, value]; name3: 'value' + * + * @param {String} str Input string. + * @return {Object} Returns deserialized object. + */ + parseParams: function(str) + { + var match, + result = {}, + arrayRegex = new XRegExp("^\\[(?(.*?))\\]$"), + regex = new XRegExp( + "(?[\\w-]+)" + + "\\s*:\\s*" + + "(?" + + "[\\w-%#]+|" + // word + "\\[.*?\\]|" + // [] array + '".*?"|' + // "" string + "'.*?'" + // '' string + ")\\s*;?", + "g" + ) + ; + + while ((match = regex.exec(str)) != null) + { + var value = match.value + .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings + ; + + // try to parse array value + if (value != null && arrayRegex.test(value)) + { + var m = arrayRegex.exec(value); + value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : []; + } + + result[match.name] = value; + } + + return result; + }, + + /** + * Wraps each line of the string into tag with given style applied to it. + * + * @param {String} str Input string. + * @param {String} css Style name to apply to the string. + * @return {String} Returns input string with each line surrounded by tag. + */ + decorate: function(str, css) + { + if (str == null || str.length == 0 || str == '\n') + return str; + + str = str.replace(/... to them so that + // leading spaces aren't included. + if (css != null) + str = sh.utils.eachLine(str, function(line) + { + if (line.length == 0) + return ''; + + var spaces = ''; + + line = line.replace(/^( | )+/, function(s) + { + spaces = s; + return ''; + }); + + if (line.length == 0) + return spaces; + + return spaces + '' + line + ''; + }); + + return str; + }, + + /** + * Pads number with zeros until it's length is the same as given length. + * + * @param {Number} number Number to pad. + * @param {Number} length Max string length with. + * @return {String} Returns a string padded with proper amount of '0'. + */ + padNumber : function(number, length) + { + var result = number.toString(); + + while (result.length < length) + result = '0' + result; + + return result; + }, + + /** + * Measures width of a single space character. + * @return {Number} Returns width of a single space character. + */ + measureSpace : function() + { + var container = document.createElement('div'), + span, + result = 0, + body = document.body, + id = sh.utils.guid('measureSpace'), + + // variable names will be compressed, so it's better than a plain string + divOpen = '
' + + divOpen + 'lines">' + + divOpen + 'line">' + + divOpen + 'content' + + '"> ' + closeSpan + closeSpan + + closeDiv + + closeDiv + + closeDiv + + closeDiv + ; + + body.appendChild(container); + span = document.getElementById(id); + + if (/opera/i.test(navigator.userAgent)) + { + var style = window.getComputedStyle(span, null); + result = parseInt(style.getPropertyValue("width")); + } + else + { + result = span.offsetWidth; + } + + body.removeChild(container); + + return result; + }, + + /** + * Replaces tabs with spaces. + * + * @param {String} code Source code. + * @param {Number} tabSize Size of the tab. + * @return {String} Returns code with all tabs replaces by spaces. + */ + processTabs : function(code, tabSize) + { + var tab = ''; + + for (var i = 0; i < tabSize; i++) + tab += ' '; + + return code.replace(/\t/g, tab); + }, + + /** + * Replaces tabs with smart spaces. + * + * @param {String} code Code to fix the tabs in. + * @param {Number} tabSize Number of spaces in a column. + * @return {String} Returns code with all tabs replaces with roper amount of spaces. + */ + processSmartTabs : function(code, tabSize) + { + var lines = code.split('\n'), + tab = '\t', + spaces = '' + ; + + // Create a string with 1000 spaces to copy spaces from... + // It's assumed that there would be no indentation longer than that. + for (var i = 0; i < 50; i++) + spaces += ' '; // 20 spaces * 50 + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function insertSpaces(line, pos, count) + { + return line.substr(0, pos) + + spaces.substr(0, count) + + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab + ; + }; + + // Go through all the lines and do the 'smart tabs' magic. + code = sh.utils.eachLine(code, function(line) + { + if (line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while ((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + line = insertSpaces(line, pos, spaces); + } + + return line; + }); + + return code; + }, + + /** + * Performs various string fixes based on configuration. + */ + fixInputString : function(str) + { + var br = /|<br\s*\/?>/gi; + + if (sh.config.bloggerMode == true) + str = str.replace(br, '\n'); + + if (sh.config.stripBrs == true) + str = str.replace(br, ''); + + return str; + }, + + /** + * Removes all white space at the begining and end of a string. + * + * @param {String} str String to trim. + * @return {String} Returns string without leading and following white space characters. + */ + trim: function(str) + { + return str.replace(/^\s+|\s+$/g, ''); + }, + + /** + * Unindents a block of text by the lowest common indent amount. + * @param {String} str Text to unindent. + * @return {String} Returns unindented text block. + */ + unindent: function(str) + { + var lines = sh.utils.fixInputString(str).split('\n'), + indents = new Array(), + regex = /^\s*/, + min = 1000 + ; + + // go through every line and check for common number of indents + for (var i = 0; i < lines.length && min > 0; i++) + { + var line = lines[i]; + + if (sh.utils.trim(line).length == 0) + continue; + + var matches = regex.exec(line); + + // In the event that just one line doesn't have leading white space + // we can't unindent anything, so bail completely. + if (matches == null) + return str; + + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if (min > 0) + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); + }, + + /** + * Callback method for Array.sort() which sorts matches by + * index position and then by length. + * + * @param {Match} m1 Left object. + * @param {Match} m2 Right object. + * @return {Number} Returns -1, 0 or -1 as a comparison result. + */ + matchesSortCallback: function(m1, m2) + { + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + + return 0; + }, + + /** + * Executes given regular expression on provided code and returns all + * matches that are found. + * + * @param {String} code Code to execute regular expression on. + * @param {Object} regex Regular expression item info from regexList collection. + * @return {Array} Returns a list of Match objects. + */ + getMatches: function(code, regexInfo) + { + function defaultAdd(match, regexInfo) + { + return [new sh.Match(match[0], match.index, regexInfo.css)]; + }; + + var index = 0, + match = null, + result = [], + func = regexInfo.func ? regexInfo.func : defaultAdd + ; + + while((match = regexInfo.regex.exec(code)) != null) + result = result.concat(func(match, regexInfo)); + + return result; + }, + + processUrls: function(code) + { + var lt = '<', + gt = '>' + ; + + return code.replace(sh.regexLib.url, function(m) + { + var suffix = '', prefix = ''; + + // We include < and > in the URL for the common cases like + // The problem is that they get transformed into <http://google.com> + // Where as > easily looks like part of the URL string. + + if (m.indexOf(lt) == 0) + { + prefix = lt; + m = m.substring(lt.length); + } + + if (m.indexOf(gt) == m.length - gt.length) + { + m = m.substring(0, m.length - gt.length); + suffix = gt; + } + + return prefix + '' + m + '' + suffix; + }); + }, + + /** + * Finds all