diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser
deleted file mode 100644
index 22ea321..0000000
Binary files a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/schema.ser and /dev/null differ
diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php
deleted file mode 100644
index 23df221..0000000
--- a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Filter/YouTube.php
+++ /dev/null
@@ -1,39 +0,0 @@
-]+>.+?'.
- 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s';
- $pre_replace = '\1 ';
- return preg_replace($pre_regex, $pre_replace, $html);
- }
-
- public function postFilter($html, $config, $context) {
- $post_regex = '#((?:v|cp)/[A-Za-z0-9\-_=]+) #';
- return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
- }
-
- protected function armorUrl($url) {
- return str_replace('--', '--', $url);
- }
-
- protected function postFilterCallback($matches) {
- $url = $this->armorUrl($matches[1]);
- return ''.
- ' '.
- ''.
- ' ';
-
- }
-}
-
-// vim: et sw=4 sts=4
diff --git a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php b/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php
deleted file mode 100644
index faf00b8..0000000
--- a/web/framework-1.1.17/vendors/htmlpurifier/standalone/HTMLPurifier/Lexer/PH5P.php
+++ /dev/null
@@ -1,3904 +0,0 @@
-normalize($html, $config, $context);
- $new_html = $this->wrapHTML($new_html, $config, $context);
- try {
- $parser = new HTML5($new_html);
- $doc = $parser->save();
- } catch (DOMException $e) {
- // Uh oh, it failed. Punt to DirectLex.
- $lexer = new HTMLPurifier_Lexer_DirectLex();
- $context->register('PH5PError', $e); // save the error, so we can detect it
- return $lexer->tokenizeHTML($html, $config, $context); // use original HTML
- }
- $tokens = array();
- $this->tokenizeDOM(
- $doc->getElementsByTagName('html')->item(0)-> //
- getElementsByTagName('body')->item(0)-> //
- getElementsByTagName('div')->item(0) //
- , $tokens);
- return $tokens;
- }
-
-}
-
-/*
-
-Copyright 2007 Jeroen van der Meer
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-
-class HTML5 {
- private $data;
- private $char;
- private $EOF;
- private $state;
- private $tree;
- private $token;
- private $content_model;
- private $escape = false;
- private $entities = array('AElig;','AElig','AMP;','AMP','Aacute;','Aacute',
- 'Acirc;','Acirc','Agrave;','Agrave','Alpha;','Aring;','Aring','Atilde;',
- 'Atilde','Auml;','Auml','Beta;','COPY;','COPY','Ccedil;','Ccedil','Chi;',
- 'Dagger;','Delta;','ETH;','ETH','Eacute;','Eacute','Ecirc;','Ecirc','Egrave;',
- 'Egrave','Epsilon;','Eta;','Euml;','Euml','GT;','GT','Gamma;','Iacute;',
- 'Iacute','Icirc;','Icirc','Igrave;','Igrave','Iota;','Iuml;','Iuml','Kappa;',
- 'LT;','LT','Lambda;','Mu;','Ntilde;','Ntilde','Nu;','OElig;','Oacute;',
- 'Oacute','Ocirc;','Ocirc','Ograve;','Ograve','Omega;','Omicron;','Oslash;',
- 'Oslash','Otilde;','Otilde','Ouml;','Ouml','Phi;','Pi;','Prime;','Psi;',
- 'QUOT;','QUOT','REG;','REG','Rho;','Scaron;','Sigma;','THORN;','THORN',
- 'TRADE;','Tau;','Theta;','Uacute;','Uacute','Ucirc;','Ucirc','Ugrave;',
- 'Ugrave','Upsilon;','Uuml;','Uuml','Xi;','Yacute;','Yacute','Yuml;','Zeta;',
- 'aacute;','aacute','acirc;','acirc','acute;','acute','aelig;','aelig',
- 'agrave;','agrave','alefsym;','alpha;','amp;','amp','and;','ang;','apos;',
- 'aring;','aring','asymp;','atilde;','atilde','auml;','auml','bdquo;','beta;',
- 'brvbar;','brvbar','bull;','cap;','ccedil;','ccedil','cedil;','cedil',
- 'cent;','cent','chi;','circ;','clubs;','cong;','copy;','copy','crarr;',
- 'cup;','curren;','curren','dArr;','dagger;','darr;','deg;','deg','delta;',
- 'diams;','divide;','divide','eacute;','eacute','ecirc;','ecirc','egrave;',
- 'egrave','empty;','emsp;','ensp;','epsilon;','equiv;','eta;','eth;','eth',
- 'euml;','euml','euro;','exist;','fnof;','forall;','frac12;','frac12',
- 'frac14;','frac14','frac34;','frac34','frasl;','gamma;','ge;','gt;','gt',
- 'hArr;','harr;','hearts;','hellip;','iacute;','iacute','icirc;','icirc',
- 'iexcl;','iexcl','igrave;','igrave','image;','infin;','int;','iota;',
- 'iquest;','iquest','isin;','iuml;','iuml','kappa;','lArr;','lambda;','lang;',
- 'laquo;','laquo','larr;','lceil;','ldquo;','le;','lfloor;','lowast;','loz;',
- 'lrm;','lsaquo;','lsquo;','lt;','lt','macr;','macr','mdash;','micro;','micro',
- 'middot;','middot','minus;','mu;','nabla;','nbsp;','nbsp','ndash;','ne;',
- 'ni;','not;','not','notin;','nsub;','ntilde;','ntilde','nu;','oacute;',
- 'oacute','ocirc;','ocirc','oelig;','ograve;','ograve','oline;','omega;',
- 'omicron;','oplus;','or;','ordf;','ordf','ordm;','ordm','oslash;','oslash',
- 'otilde;','otilde','otimes;','ouml;','ouml','para;','para','part;','permil;',
- 'perp;','phi;','pi;','piv;','plusmn;','plusmn','pound;','pound','prime;',
- 'prod;','prop;','psi;','quot;','quot','rArr;','radic;','rang;','raquo;',
- 'raquo','rarr;','rceil;','rdquo;','real;','reg;','reg','rfloor;','rho;',
- 'rlm;','rsaquo;','rsquo;','sbquo;','scaron;','sdot;','sect;','sect','shy;',
- 'shy','sigma;','sigmaf;','sim;','spades;','sub;','sube;','sum;','sup1;',
- 'sup1','sup2;','sup2','sup3;','sup3','sup;','supe;','szlig;','szlig','tau;',
- 'there4;','theta;','thetasym;','thinsp;','thorn;','thorn','tilde;','times;',
- 'times','trade;','uArr;','uacute;','uacute','uarr;','ucirc;','ucirc',
- 'ugrave;','ugrave','uml;','uml','upsih;','upsilon;','uuml;','uuml','weierp;',
- 'xi;','yacute;','yacute','yen;','yen','yuml;','yuml','zeta;','zwj;','zwnj;');
-
- const PCDATA = 0;
- const RCDATA = 1;
- const CDATA = 2;
- const PLAINTEXT = 3;
-
- const DOCTYPE = 0;
- const STARTTAG = 1;
- const ENDTAG = 2;
- const COMMENT = 3;
- const CHARACTR = 4;
- const EOF = 5;
-
- public function __construct($data) {
-
- $this->data = $data;
- $this->char = -1;
- $this->EOF = strlen($data);
- $this->tree = new HTML5TreeConstructer;
- $this->content_model = self::PCDATA;
-
- $this->state = 'data';
-
- while($this->state !== null) {
- $this->{$this->state.'State'}();
- }
- }
-
- public function save() {
- return $this->tree->save();
- }
-
- private function char() {
- return ($this->char < $this->EOF)
- ? $this->data[$this->char]
- : false;
- }
-
- private function character($s, $l = 0) {
- if($s + $l < $this->EOF) {
- if($l === 0) {
- return $this->data[$s];
- } else {
- return substr($this->data, $s, $l);
- }
- }
- }
-
- private function characters($char_class, $start) {
- return preg_replace('#^(['.$char_class.']+).*#s', '\\1', substr($this->data, $start));
- }
-
- private function dataState() {
- // Consume the next input character
- $this->char++;
- $char = $this->char();
-
- if($char === '&' && ($this->content_model === self::PCDATA || $this->content_model === self::RCDATA)) {
- /* U+0026 AMPERSAND (&)
- When the content model flag is set to one of the PCDATA or RCDATA
- states: switch to the entity data state. Otherwise: treat it as per
- the "anything else" entry below. */
- $this->state = 'entityData';
-
- } elseif($char === '-') {
- /* If the content model flag is set to either the RCDATA state or
- the CDATA state, and the escape flag is false, and there are at
- least three characters before this one in the input stream, and the
- last four characters in the input stream, including this one, are
- U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS,
- and U+002D HYPHEN-MINUS (""),
- set the escape flag to false. */
- if(($this->content_model === self::RCDATA ||
- $this->content_model === self::CDATA) && $this->escape === true &&
- $this->character($this->char, 3) === '-->') {
- $this->escape = false;
- }
-
- /* In any case, emit the input character as a character token.
- Stay in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Emit an end-of-file token. */
- $this->EOF();
-
- } elseif($this->content_model === self::PLAINTEXT) {
- /* When the content model flag is set to the PLAINTEXT state
- THIS DIFFERS GREATLY FROM THE SPEC: Get the remaining characters of
- the text and emit it as a character token. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => substr($this->data, $this->char)
- ));
-
- $this->EOF();
-
- } else {
- /* Anything else
- THIS DIFFERS GREATLY FROM THE SPEC: Get as many character that
- otherwise would also be treated as a character token and emit it
- as a single character token. Stay in the data state. */
- $len = strcspn($this->data, '<&', $this->char);
- $char = substr($this->data, $this->char, $len);
- $this->char += $len - 1;
-
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
-
- $this->state = 'data';
- }
- }
-
- private function entityDataState() {
- // Attempt to consume an entity.
- $entity = $this->entity();
-
- // If nothing is returned, emit a U+0026 AMPERSAND character token.
- // Otherwise, emit the character token that was returned.
- $char = (!$entity) ? '&' : $entity;
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => $char
- ));
-
- // Finally, switch to the data state.
- $this->state = 'data';
- }
-
- private function tagOpenState() {
- switch($this->content_model) {
- case self::RCDATA:
- case self::CDATA:
- /* If the next input character is a U+002F SOLIDUS (/) character,
- consume it and switch to the close tag open state. If the next
- input character is not a U+002F SOLIDUS (/) character, emit a
- U+003C LESS-THAN SIGN character token and switch to the data
- state to process the next input character. */
- if($this->character($this->char + 1) === '/') {
- $this->char++;
- $this->state = 'closeTagOpen';
-
- } else {
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<'
- ));
-
- $this->state = 'data';
- }
- break;
-
- case self::PCDATA:
- // If the content model flag is set to the PCDATA state
- // Consume the next input character:
- $this->char++;
- $char = $this->char();
-
- if($char === '!') {
- /* U+0021 EXCLAMATION MARK (!)
- Switch to the markup declaration open state. */
- $this->state = 'markupDeclarationOpen';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Switch to the close tag open state. */
- $this->state = 'closeTagOpen';
-
- } elseif(preg_match('/^[A-Za-z]$/', $char)) {
- /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
- Create a new start tag token, set its tag name to the lowercase
- version of the input character (add 0x0020 to the character's code
- point), then switch to the tag name state. (Don't emit the token
- yet; further details will be filled in before it is emitted.) */
- $this->token = array(
- 'name' => strtolower($char),
- 'type' => self::STARTTAG,
- 'attr' => array()
- );
-
- $this->state = 'tagName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Emit a U+003C LESS-THAN SIGN character token and a
- U+003E GREATER-THAN SIGN character token. Switch to the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<>'
- ));
-
- $this->state = 'data';
-
- } elseif($char === '?') {
- /* U+003F QUESTION MARK (?)
- Parse error. Switch to the bogus comment state. */
- $this->state = 'bogusComment';
-
- } else {
- /* Anything else
- Parse error. Emit a U+003C LESS-THAN SIGN character token and
- reconsume the current input character in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => '<'
- ));
-
- $this->char--;
- $this->state = 'data';
- }
- break;
- }
- }
-
- private function closeTagOpenState() {
- $next_node = strtolower($this->characters('A-Za-z', $this->char + 1));
- $the_same = count($this->tree->stack) > 0 && $next_node === end($this->tree->stack)->nodeName;
-
- if(($this->content_model === self::RCDATA || $this->content_model === self::CDATA) &&
- (!$the_same || ($the_same && (!preg_match('/[\t\n\x0b\x0c >\/]/',
- $this->character($this->char + 1 + strlen($next_node))) || $this->EOF === $this->char)))) {
- /* If the content model flag is set to the RCDATA or CDATA states then
- examine the next few characters. If they do not match the tag name of
- the last start tag token emitted (case insensitively), or if they do but
- they are not immediately followed by one of the following characters:
- * U+0009 CHARACTER TABULATION
- * U+000A LINE FEED (LF)
- * U+000B LINE TABULATION
- * U+000C FORM FEED (FF)
- * U+0020 SPACE
- * U+003E GREATER-THAN SIGN (>)
- * U+002F SOLIDUS (/)
- * EOF
- ...then there is a parse error. Emit a U+003C LESS-THAN SIGN character
- token, a U+002F SOLIDUS character token, and switch to the data state
- to process the next input character. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => ''
- ));
-
- $this->state = 'data';
-
- } else {
- /* Otherwise, if the content model flag is set to the PCDATA state,
- or if the next few characters do match that tag name, consume the
- next input character: */
- $this->char++;
- $char = $this->char();
-
- if(preg_match('/^[A-Za-z]$/', $char)) {
- /* U+0041 LATIN LETTER A through to U+005A LATIN LETTER Z
- Create a new end tag token, set its tag name to the lowercase version
- of the input character (add 0x0020 to the character's code point), then
- switch to the tag name state. (Don't emit the token yet; further details
- will be filled in before it is emitted.) */
- $this->token = array(
- 'name' => strtolower($char),
- 'type' => self::ENDTAG
- );
-
- $this->state = 'tagName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Parse error. Switch to the data state. */
- $this->state = 'data';
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit a U+003C LESS-THAN SIGN character token and a U+002F
- SOLIDUS character token. Reconsume the EOF character in the data state. */
- $this->emitToken(array(
- 'type' => self::CHARACTR,
- 'data' => ''
- ));
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Parse error. Switch to the bogus comment state. */
- $this->state = 'bogusComment';
- }
- }
- }
-
- private function tagNameState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Parse error unless this is a permitted slash. Switch to the before
- attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } else {
- /* Anything else
- Append the current input character to the current tag token's tag name.
- Stay in the tag name state. */
- $this->token['name'] .= strtolower($char);
- $this->state = 'tagName';
- }
- }
-
- private function beforeAttributeNameState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($char === '/') {
- /* U+002F SOLIDUS (/)
- Parse error unless this is a permitted slash. Stay in the before
- attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Anything else
- Start a new attribute in the current tag token. Set that attribute's
- name to the current input character, and its value to the empty string.
- Switch to the attribute name state. */
- $this->token['attr'][] = array(
- 'name' => strtolower($char),
- 'value' => null
- );
-
- $this->state = 'attributeName';
- }
- }
-
- private function attributeNameState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before attribute name state. */
- $this->state = 'afterAttributeName';
-
- } elseif($char === '=') {
- /* U+003D EQUALS SIGN (=)
- Switch to the before attribute value state. */
- $this->state = 'beforeAttributeValue';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($char === '/' && $this->character($this->char + 1) !== '>') {
- /* U+002F SOLIDUS (/)
- Parse error unless this is a permitted slash. Switch to the before
- attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's name.
- Stay in the attribute name state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['name'] .= strtolower($char);
-
- $this->state = 'attributeName';
- }
- }
-
- private function afterAttributeNameState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the after attribute name state. */
- $this->state = 'afterAttributeName';
-
- } elseif($char === '=') {
- /* U+003D EQUALS SIGN (=)
- Switch to the before attribute value state. */
- $this->state = 'beforeAttributeValue';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($char === '/' && $this->character($this->char + 1) !== '>') {
- /* U+002F SOLIDUS (/)
- Parse error unless this is a permitted slash. Switch to the
- before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the EOF
- character in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Anything else
- Start a new attribute in the current tag token. Set that attribute's
- name to the current input character, and its value to the empty string.
- Switch to the attribute name state. */
- $this->token['attr'][] = array(
- 'name' => strtolower($char),
- 'value' => null
- );
-
- $this->state = 'attributeName';
- }
- }
-
- private function beforeAttributeValueState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Stay in the before attribute value state. */
- $this->state = 'beforeAttributeValue';
-
- } elseif($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the attribute value (double-quoted) state. */
- $this->state = 'attributeValueDoubleQuoted';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the attribute value (unquoted) state and reconsume
- this input character. */
- $this->char--;
- $this->state = 'attributeValueUnquoted';
-
- } elseif($char === '\'') {
- /* U+0027 APOSTROPHE (')
- Switch to the attribute value (single-quoted) state. */
- $this->state = 'attributeValueSingleQuoted';
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Switch to the attribute value (unquoted) state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- $this->state = 'attributeValueUnquoted';
- }
- }
-
- private function attributeValueDoubleQuotedState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if($char === '"') {
- /* U+0022 QUOTATION MARK (")
- Switch to the before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the entity in attribute value state. */
- $this->entityInAttributeValueState('double');
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the character
- in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (double-quoted) state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- $this->state = 'attributeValueDoubleQuoted';
- }
- }
-
- private function attributeValueSingleQuotedState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if($char === '\'') {
- /* U+0022 QUOTATION MARK (')
- Switch to the before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the entity in attribute value state. */
- $this->entityInAttributeValueState('single');
-
- } elseif($this->char === $this->EOF) {
- /* EOF
- Parse error. Emit the current tag token. Reconsume the character
- in the data state. */
- $this->emitToken($this->token);
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (single-quoted) state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- $this->state = 'attributeValueSingleQuoted';
- }
- }
-
- private function attributeValueUnquotedState() {
- // Consume the next input character:
- $this->char++;
- $char = $this->character($this->char);
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- /* U+0009 CHARACTER TABULATION
- U+000A LINE FEED (LF)
- U+000B LINE TABULATION
- U+000C FORM FEED (FF)
- U+0020 SPACE
- Switch to the before attribute name state. */
- $this->state = 'beforeAttributeName';
-
- } elseif($char === '&') {
- /* U+0026 AMPERSAND (&)
- Switch to the entity in attribute value state. */
- $this->entityInAttributeValueState();
-
- } elseif($char === '>') {
- /* U+003E GREATER-THAN SIGN (>)
- Emit the current tag token. Switch to the data state. */
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } else {
- /* Anything else
- Append the current input character to the current attribute's value.
- Stay in the attribute value (unquoted) state. */
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
-
- $this->state = 'attributeValueUnquoted';
- }
- }
-
- private function entityInAttributeValueState() {
- // Attempt to consume an entity.
- $entity = $this->entity();
-
- // If nothing is returned, append a U+0026 AMPERSAND character to the
- // current attribute's value. Otherwise, emit the character token that
- // was returned.
- $char = (!$entity)
- ? '&'
- : $entity;
-
- $last = count($this->token['attr']) - 1;
- $this->token['attr'][$last]['value'] .= $char;
- }
-
- private function bogusCommentState() {
- /* Consume every character up to the first U+003E GREATER-THAN SIGN
- character (>) or the end of the file (EOF), whichever comes first. Emit
- a comment token whose data is the concatenation of all the characters
- starting from and including the character that caused the state machine
- to switch into the bogus comment state, up to and including the last
- consumed character before the U+003E character, if any, or up to the
- end of the file otherwise. (If the comment was started by the end of
- the file (EOF), the token is empty.) */
- $data = $this->characters('^>', $this->char);
- $this->emitToken(array(
- 'data' => $data,
- 'type' => self::COMMENT
- ));
-
- $this->char += strlen($data);
-
- /* Switch to the data state. */
- $this->state = 'data';
-
- /* If the end of the file was reached, reconsume the EOF character. */
- if($this->char === $this->EOF) {
- $this->char = $this->EOF - 1;
- }
- }
-
- private function markupDeclarationOpenState() {
- /* If the next two characters are both U+002D HYPHEN-MINUS (-)
- characters, consume those two characters, create a comment token whose
- data is the empty string, and switch to the comment state. */
- if($this->character($this->char + 1, 2) === '--') {
- $this->char += 2;
- $this->state = 'comment';
- $this->token = array(
- 'data' => null,
- 'type' => self::COMMENT
- );
-
- /* Otherwise if the next seven chacacters are a case-insensitive match
- for the word "DOCTYPE", then consume those characters and switch to the
- DOCTYPE state. */
- } elseif(strtolower($this->character($this->char + 1, 7)) === 'doctype') {
- $this->char += 7;
- $this->state = 'doctype';
-
- /* Otherwise, is is a parse error. Switch to the bogus comment state.
- The next character that is consumed, if any, is the first character
- that will be in the comment. */
- } else {
- $this->char++;
- $this->state = 'bogusComment';
- }
- }
-
- private function commentState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- /* U+002D HYPHEN-MINUS (-) */
- if($char === '-') {
- /* Switch to the comment dash state */
- $this->state = 'commentDash';
-
- /* EOF */
- } elseif($this->char === $this->EOF) {
- /* Parse error. Emit the comment token. Reconsume the EOF character
- in the data state. */
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- /* Anything else */
- } else {
- /* Append the input character to the comment token's data. Stay in
- the comment state. */
- $this->token['data'] .= $char;
- }
- }
-
- private function commentDashState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- /* U+002D HYPHEN-MINUS (-) */
- if($char === '-') {
- /* Switch to the comment end state */
- $this->state = 'commentEnd';
-
- /* EOF */
- } elseif($this->char === $this->EOF) {
- /* Parse error. Emit the comment token. Reconsume the EOF character
- in the data state. */
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- /* Anything else */
- } else {
- /* Append a U+002D HYPHEN-MINUS (-) character and the input
- character to the comment token's data. Switch to the comment state. */
- $this->token['data'] .= '-'.$char;
- $this->state = 'comment';
- }
- }
-
- private function commentEndState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if($char === '>') {
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($char === '-') {
- $this->token['data'] .= '-';
-
- } elseif($this->char === $this->EOF) {
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- } else {
- $this->token['data'] .= '--'.$char;
- $this->state = 'comment';
- }
- }
-
- private function doctypeState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- $this->state = 'beforeDoctypeName';
-
- } else {
- $this->char--;
- $this->state = 'beforeDoctypeName';
- }
- }
-
- private function beforeDoctypeNameState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- // Stay in the before DOCTYPE name state.
-
- } elseif(preg_match('/^[a-z]$/', $char)) {
- $this->token = array(
- 'name' => strtoupper($char),
- 'type' => self::DOCTYPE,
- 'error' => true
- );
-
- $this->state = 'doctypeName';
-
- } elseif($char === '>') {
- $this->emitToken(array(
- 'name' => null,
- 'type' => self::DOCTYPE,
- 'error' => true
- ));
-
- $this->state = 'data';
-
- } elseif($this->char === $this->EOF) {
- $this->emitToken(array(
- 'name' => null,
- 'type' => self::DOCTYPE,
- 'error' => true
- ));
-
- $this->char--;
- $this->state = 'data';
-
- } else {
- $this->token = array(
- 'name' => $char,
- 'type' => self::DOCTYPE,
- 'error' => true
- );
-
- $this->state = 'doctypeName';
- }
- }
-
- private function doctypeNameState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- $this->state = 'AfterDoctypeName';
-
- } elseif($char === '>') {
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif(preg_match('/^[a-z]$/', $char)) {
- $this->token['name'] .= strtoupper($char);
-
- } elseif($this->char === $this->EOF) {
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- } else {
- $this->token['name'] .= $char;
- }
-
- $this->token['error'] = ($this->token['name'] === 'HTML')
- ? false
- : true;
- }
-
- private function afterDoctypeNameState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if(preg_match('/^[\t\n\x0b\x0c ]$/', $char)) {
- // Stay in the DOCTYPE name state.
-
- } elseif($char === '>') {
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($this->char === $this->EOF) {
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- } else {
- $this->token['error'] = true;
- $this->state = 'bogusDoctype';
- }
- }
-
- private function bogusDoctypeState() {
- /* Consume the next input character: */
- $this->char++;
- $char = $this->char();
-
- if($char === '>') {
- $this->emitToken($this->token);
- $this->state = 'data';
-
- } elseif($this->char === $this->EOF) {
- $this->emitToken($this->token);
- $this->char--;
- $this->state = 'data';
-
- } else {
- // Stay in the bogus DOCTYPE state.
- }
- }
-
- private function entity() {
- $start = $this->char;
-
- // This section defines how to consume an entity. This definition is
- // used when parsing entities in text and in attributes.
-
- // The behaviour depends on the identity of the next character (the
- // one immediately after the U+0026 AMPERSAND character):
-
- switch($this->character($this->char + 1)) {
- // U+0023 NUMBER SIGN (#)
- case '#':
-
- // The behaviour further depends on the character after the
- // U+0023 NUMBER SIGN:
- switch($this->character($this->char + 1)) {
- // U+0078 LATIN SMALL LETTER X
- // U+0058 LATIN CAPITAL LETTER X
- case 'x':
- case 'X':
- // Follow the steps below, but using the range of
- // characters U+0030 DIGIT ZERO through to U+0039 DIGIT
- // NINE, U+0061 LATIN SMALL LETTER A through to U+0066
- // LATIN SMALL LETTER F, and U+0041 LATIN CAPITAL LETTER
- // A, through to U+0046 LATIN CAPITAL LETTER F (in other
- // words, 0-9, A-F, a-f).
- $char = 1;
- $char_class = '0-9A-Fa-f';
- break;
-
- // Anything else
- default:
- // Follow the steps below, but using the range of
- // characters U+0030 DIGIT ZERO through to U+0039 DIGIT
- // NINE (i.e. just 0-9).
- $char = 0;
- $char_class = '0-9';
- break;
- }
-
- // Consume as many characters as match the range of characters
- // given above.
- $this->char++;
- $e_name = $this->characters($char_class, $this->char + $char + 1);
- $entity = $this->character($start, $this->char);
- $cond = strlen($e_name) > 0;
-
- // The rest of the parsing happens bellow.
- break;
-
- // Anything else
- default:
- // Consume the maximum number of characters possible, with the
- // consumed characters case-sensitively matching one of the
- // identifiers in the first column of the entities table.
- $e_name = $this->characters('0-9A-Za-z;', $this->char + 1);
- $len = strlen($e_name);
-
- for($c = 1; $c <= $len; $c++) {
- $id = substr($e_name, 0, $c);
- $this->char++;
-
- if(in_array($id, $this->entities)) {
- if ($e_name[$c-1] !== ';') {
- if ($c < $len && $e_name[$c] == ';') {
- $this->char++; // consume extra semicolon
- }
- }
- $entity = $id;
- break;
- }
- }
-
- $cond = isset($entity);
- // The rest of the parsing happens bellow.
- break;
- }
-
- if(!$cond) {
- // If no match can be made, then this is a parse error. No
- // characters are consumed, and nothing is returned.
- $this->char = $start;
- return false;
- }
-
- // Return a character token for the character corresponding to the
- // entity name (as given by the second column of the entities table).
- return html_entity_decode('&'.$entity.';', ENT_QUOTES, 'UTF-8');
- }
-
- private function emitToken($token) {
- $emit = $this->tree->emitToken($token);
-
- if(is_int($emit)) {
- $this->content_model = $emit;
-
- } elseif($token['type'] === self::ENDTAG) {
- $this->content_model = self::PCDATA;
- }
- }
-
- private function EOF() {
- $this->state = null;
- $this->tree->emitToken(array(
- 'type' => self::EOF
- ));
- }
-}
-
-class HTML5TreeConstructer {
- public $stack = array();
-
- private $phase;
- private $mode;
- private $dom;
- private $foster_parent = null;
- private $a_formatting = array();
-
- private $head_pointer = null;
- private $form_pointer = null;
-
- private $scoping = array('button','caption','html','marquee','object','table','td','th');
- private $formatting = array('a','b','big','em','font','i','nobr','s','small','strike','strong','tt','u');
- private $special = array('address','area','base','basefont','bgsound',
- 'blockquote','body','br','center','col','colgroup','dd','dir','div','dl',
- 'dt','embed','fieldset','form','frame','frameset','h1','h2','h3','h4','h5',
- 'h6','head','hr','iframe','image','img','input','isindex','li','link',
- 'listing','menu','meta','noembed','noframes','noscript','ol','optgroup',
- 'option','p','param','plaintext','pre','script','select','spacer','style',
- 'tbody','textarea','tfoot','thead','title','tr','ul','wbr');
-
- // The different phases.
- const INIT_PHASE = 0;
- const ROOT_PHASE = 1;
- const MAIN_PHASE = 2;
- const END_PHASE = 3;
-
- // The different insertion modes for the main phase.
- const BEFOR_HEAD = 0;
- const IN_HEAD = 1;
- const AFTER_HEAD = 2;
- const IN_BODY = 3;
- const IN_TABLE = 4;
- const IN_CAPTION = 5;
- const IN_CGROUP = 6;
- const IN_TBODY = 7;
- const IN_ROW = 8;
- const IN_CELL = 9;
- const IN_SELECT = 10;
- const AFTER_BODY = 11;
- const IN_FRAME = 12;
- const AFTR_FRAME = 13;
-
- // The different types of elements.
- const SPECIAL = 0;
- const SCOPING = 1;
- const FORMATTING = 2;
- const PHRASING = 3;
-
- const MARKER = 0;
-
- public function __construct() {
- $this->phase = self::INIT_PHASE;
- $this->mode = self::BEFOR_HEAD;
- $this->dom = new DOMDocument;
-
- $this->dom->encoding = 'UTF-8';
- $this->dom->preserveWhiteSpace = true;
- $this->dom->substituteEntities = true;
- $this->dom->strictErrorChecking = false;
- }
-
- // Process tag tokens
- public function emitToken($token) {
- switch($this->phase) {
- case self::INIT_PHASE: return $this->initPhase($token); break;
- case self::ROOT_PHASE: return $this->rootElementPhase($token); break;
- case self::MAIN_PHASE: return $this->mainPhase($token); break;
- case self::END_PHASE : return $this->trailingEndPhase($token); break;
- }
- }
-
- private function initPhase($token) {
- /* Initially, the tree construction stage must handle each token
- emitted from the tokenisation stage as follows: */
-
- /* A DOCTYPE token that is marked as being in error
- A comment token
- A start tag token
- An end tag token
- A character token that is not one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE
- An end-of-file token */
- if((isset($token['error']) && $token['error']) ||
- $token['type'] === HTML5::COMMENT ||
- $token['type'] === HTML5::STARTTAG ||
- $token['type'] === HTML5::ENDTAG ||
- $token['type'] === HTML5::EOF ||
- ($token['type'] === HTML5::CHARACTR && isset($token['data']) &&
- !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data']))) {
- /* This specification does not define how to handle this case. In
- particular, user agents may ignore the entirety of this specification
- altogether for such documents, and instead invoke special parse modes
- with a greater emphasis on backwards compatibility. */
-
- $this->phase = self::ROOT_PHASE;
- return $this->rootElementPhase($token);
-
- /* A DOCTYPE token marked as being correct */
- } elseif(isset($token['error']) && !$token['error']) {
- /* Append a DocumentType node to the Document node, with the name
- attribute set to the name given in the DOCTYPE token (which will be
- "HTML"), and the other attributes specific to DocumentType objects
- set to null, empty lists, or the empty string as appropriate. */
- $doctype = new DOMDocumentType(null, null, 'HTML');
-
- /* Then, switch to the root element phase of the tree construction
- stage. */
- $this->phase = self::ROOT_PHASE;
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif(isset($token['data']) && preg_match('/^[\t\n\x0b\x0c ]+$/',
- $token['data'])) {
- /* Append that character to the Document node. */
- $text = $this->dom->createTextNode($token['data']);
- $this->dom->appendChild($text);
- }
- }
-
- private function rootElementPhase($token) {
- /* After the initial phase, as each token is emitted from the tokenisation
- stage, it must be processed as described in this section. */
-
- /* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
- // Parse error. Ignore the token.
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the Document object with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->dom->appendChild($comment);
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append that character to the Document node. */
- $text = $this->dom->createTextNode($token['data']);
- $this->dom->appendChild($text);
-
- /* A character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED
- (FF), or U+0020 SPACE
- A start tag token
- An end tag token
- An end-of-file token */
- } elseif(($token['type'] === HTML5::CHARACTR &&
- !preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
- $token['type'] === HTML5::STARTTAG ||
- $token['type'] === HTML5::ENDTAG ||
- $token['type'] === HTML5::EOF) {
- /* Create an HTMLElement node with the tag name html, in the HTML
- namespace. Append it to the Document object. Switch to the main
- phase and reprocess the current token. */
- $html = $this->dom->createElement('html');
- $this->dom->appendChild($html);
- $this->stack[] = $html;
-
- $this->phase = self::MAIN_PHASE;
- return $this->mainPhase($token);
- }
- }
-
- private function mainPhase($token) {
- /* Tokens in the main phase must be handled as follows: */
-
- /* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
- // Parse error. Ignore the token.
-
- /* A start tag token with the tag name "html" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'html') {
- /* If this start tag token was not the first start tag token, then
- it is a parse error. */
-
- /* For each attribute on the token, check to see if the attribute
- is already present on the top element of the stack of open elements.
- If it is not, add the attribute and its corresponding value to that
- element. */
- foreach($token['attr'] as $attr) {
- if(!$this->stack[0]->hasAttribute($attr['name'])) {
- $this->stack[0]->setAttribute($attr['name'], $attr['value']);
- }
- }
-
- /* An end-of-file token */
- } elseif($token['type'] === HTML5::EOF) {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* Anything else. */
- } else {
- /* Depends on the insertion mode: */
- switch($this->mode) {
- case self::BEFOR_HEAD: return $this->beforeHead($token); break;
- case self::IN_HEAD: return $this->inHead($token); break;
- case self::AFTER_HEAD: return $this->afterHead($token); break;
- case self::IN_BODY: return $this->inBody($token); break;
- case self::IN_TABLE: return $this->inTable($token); break;
- case self::IN_CAPTION: return $this->inCaption($token); break;
- case self::IN_CGROUP: return $this->inColumnGroup($token); break;
- case self::IN_TBODY: return $this->inTableBody($token); break;
- case self::IN_ROW: return $this->inRow($token); break;
- case self::IN_CELL: return $this->inCell($token); break;
- case self::IN_SELECT: return $this->inSelect($token); break;
- case self::AFTER_BODY: return $this->afterBody($token); break;
- case self::IN_FRAME: return $this->inFrameset($token); break;
- case self::AFTR_FRAME: return $this->afterFrameset($token); break;
- case self::END_PHASE: return $this->trailingEndPhase($token); break;
- }
- }
- }
-
- private function beforeHead($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A start tag token with the tag name "head" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') {
- /* Create an element for the token, append the new element to the
- current node and push it onto the stack of open elements. */
- $element = $this->insertElement($token);
-
- /* Set the head element pointer to this new element node. */
- $this->head_pointer = $element;
-
- /* Change the insertion mode to "in head". */
- $this->mode = self::IN_HEAD;
-
- /* A start tag token whose tag name is one of: "base", "link", "meta",
- "script", "style", "title". Or an end tag with the tag name "html".
- Or a character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE. Or any other start tag token */
- } elseif($token['type'] === HTML5::STARTTAG ||
- ($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') ||
- ($token['type'] === HTML5::CHARACTR && !preg_match('/^[\t\n\x0b\x0c ]$/',
- $token['data']))) {
- /* Act as if a start tag token with the tag name "head" and no
- attributes had been seen, then reprocess the current token. */
- $this->beforeHead(array(
- 'name' => 'head',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- return $this->inHead($token);
-
- /* Any other end tag */
- } elseif($token['type'] === HTML5::ENDTAG) {
- /* Parse error. Ignore the token. */
- }
- }
-
- private function inHead($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE.
-
- THIS DIFFERS FROM THE SPEC: If the current node is either a title, style
- or script element, append the character to the current node regardless
- of its content. */
- if(($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) || (
- $token['type'] === HTML5::CHARACTR && in_array(end($this->stack)->nodeName,
- array('title', 'style', 'script')))) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('title', 'style', 'script'))) {
- array_pop($this->stack);
- return HTML5::PCDATA;
-
- /* A start tag with the tag name "title" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'title') {
- /* Create an element for the token and append the new element to the
- node pointed to by the head element pointer, or, if that is null
- (innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
- $element = $this->insertElement($token, false);
- $this->head_pointer->appendChild($element);
-
- } else {
- $element = $this->insertElement($token);
- }
-
- /* Switch the tokeniser's content model flag to the RCDATA state. */
- return HTML5::RCDATA;
-
- /* A start tag with the tag name "style" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'style') {
- /* Create an element for the token and append the new element to the
- node pointed to by the head element pointer, or, if that is null
- (innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
- $element = $this->insertElement($token, false);
- $this->head_pointer->appendChild($element);
-
- } else {
- $this->insertElement($token);
- }
-
- /* Switch the tokeniser's content model flag to the CDATA state. */
- return HTML5::CDATA;
-
- /* A start tag with the tag name "script" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'script') {
- /* Create an element for the token. */
- $element = $this->insertElement($token, false);
- $this->head_pointer->appendChild($element);
-
- /* Switch the tokeniser's content model flag to the CDATA state. */
- return HTML5::CDATA;
-
- /* A start tag with the tag name "base", "link", or "meta" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('base', 'link', 'meta'))) {
- /* Create an element for the token and append the new element to the
- node pointed to by the head element pointer, or, if that is null
- (innerHTML case), to the current node. */
- if($this->head_pointer !== null) {
- $element = $this->insertElement($token, false);
- $this->head_pointer->appendChild($element);
- array_pop($this->stack);
-
- } else {
- $this->insertElement($token);
- }
-
- /* An end tag with the tag name "head" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'head') {
- /* If the current node is a head element, pop the current node off
- the stack of open elements. */
- if($this->head_pointer->isSameNode(end($this->stack))) {
- array_pop($this->stack);
-
- /* Otherwise, this is a parse error. */
- } else {
- // k
- }
-
- /* Change the insertion mode to "after head". */
- $this->mode = self::AFTER_HEAD;
-
- /* A start tag with the tag name "head" or an end tag except "html". */
- } elseif(($token['type'] === HTML5::STARTTAG && $token['name'] === 'head') ||
- ($token['type'] === HTML5::ENDTAG && $token['name'] !== 'html')) {
- // Parse error. Ignore the token.
-
- /* Anything else */
- } else {
- /* If the current node is a head element, act as if an end tag
- token with the tag name "head" had been seen. */
- if($this->head_pointer->isSameNode(end($this->stack))) {
- $this->inHead(array(
- 'name' => 'head',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Otherwise, change the insertion mode to "after head". */
- } else {
- $this->mode = self::AFTER_HEAD;
- }
-
- /* Then, reprocess the current token. */
- return $this->afterHead($token);
- }
- }
-
- private function afterHead($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data attribute
- set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A start tag token with the tag name "body" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'body') {
- /* Insert a body element for the token. */
- $this->insertElement($token);
-
- /* Change the insertion mode to "in body". */
- $this->mode = self::IN_BODY;
-
- /* A start tag token with the tag name "frameset" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'frameset') {
- /* Insert a frameset element for the token. */
- $this->insertElement($token);
-
- /* Change the insertion mode to "in frameset". */
- $this->mode = self::IN_FRAME;
-
- /* A start tag token whose tag name is one of: "base", "link", "meta",
- "script", "style", "title" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('base', 'link', 'meta', 'script', 'style', 'title'))) {
- /* Parse error. Switch the insertion mode back to "in head" and
- reprocess the token. */
- $this->mode = self::IN_HEAD;
- return $this->inHead($token);
-
- /* Anything else */
- } else {
- /* Act as if a start tag token with the tag name "body" and no
- attributes had been seen, and then reprocess the current token. */
- $this->afterHead(array(
- 'name' => 'body',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- return $this->inBody($token);
- }
- }
-
- private function inBody($token) {
- /* Handle the token as follows: */
-
- switch($token['type']) {
- /* A character token */
- case HTML5::CHARACTR:
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Append the token's character to the current node. */
- $this->insertText($token['data']);
- break;
-
- /* A comment token */
- case HTML5::COMMENT:
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
- break;
-
- case HTML5::STARTTAG:
- switch($token['name']) {
- /* A start tag token whose tag name is one of: "script",
- "style" */
- case 'script': case 'style':
- /* Process the token as if the insertion mode had been "in
- head". */
- return $this->inHead($token);
- break;
-
- /* A start tag token whose tag name is one of: "base", "link",
- "meta", "title" */
- case 'base': case 'link': case 'meta': case 'title':
- /* Parse error. Process the token as if the insertion mode
- had been "in head". */
- return $this->inHead($token);
- break;
-
- /* A start tag token with the tag name "body" */
- case 'body':
- /* Parse error. If the second element on the stack of open
- elements is not a body element, or, if the stack of open
- elements has only one node on it, then ignore the token.
- (innerHTML case) */
- if(count($this->stack) === 1 || $this->stack[1]->nodeName !== 'body') {
- // Ignore
-
- /* Otherwise, for each attribute on the token, check to see
- if the attribute is already present on the body element (the
- second element) on the stack of open elements. If it is not,
- add the attribute and its corresponding value to that
- element. */
- } else {
- foreach($token['attr'] as $attr) {
- if(!$this->stack[1]->hasAttribute($attr['name'])) {
- $this->stack[1]->setAttribute($attr['name'], $attr['value']);
- }
- }
- }
- break;
-
- /* A start tag whose tag name is one of: "address",
- "blockquote", "center", "dir", "div", "dl", "fieldset",
- "listing", "menu", "ol", "p", "ul" */
- case 'address': case 'blockquote': case 'center': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'listing':
- case 'menu': case 'ol': case 'p': case 'ul':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
-
- /* A start tag whose tag name is "form" */
- case 'form':
- /* If the form element pointer is not null, ignore the
- token with a parse error. */
- if($this->form_pointer !== null) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* If the stack of open elements has a p element in
- scope, then act as if an end tag with the tag name p
- had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token, and set the
- form element pointer to point to the element created. */
- $element = $this->insertElement($token);
- $this->form_pointer = $element;
- }
- break;
-
- /* A start tag whose tag name is "li", "dd" or "dt" */
- case 'li': case 'dd': case 'dt':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- $stack_length = count($this->stack) - 1;
-
- for($n = $stack_length; 0 <= $n; $n--) {
- /* 1. Initialise node to be the current node (the
- bottommost node of the stack). */
- $stop = false;
- $node = $this->stack[$n];
- $cat = $this->getElementCategory($node->tagName);
-
- /* 2. If node is an li, dd or dt element, then pop all
- the nodes from the current node up to node, including
- node, then stop this algorithm. */
- if($token['name'] === $node->tagName || ($token['name'] !== 'li'
- && ($node->tagName === 'dd' || $node->tagName === 'dt'))) {
- for($x = $stack_length; $x >= $n ; $x--) {
- array_pop($this->stack);
- }
-
- break;
- }
-
- /* 3. If node is not in the formatting category, and is
- not in the phrasing category, and is not an address or
- div element, then stop this algorithm. */
- if($cat !== self::FORMATTING && $cat !== self::PHRASING &&
- $node->tagName !== 'address' && $node->tagName !== 'div') {
- break;
- }
- }
-
- /* Finally, insert an HTML element with the same tag
- name as the token's. */
- $this->insertElement($token);
- break;
-
- /* A start tag token whose tag name is "plaintext" */
- case 'plaintext':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been
- seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- return HTML5::PLAINTEXT;
- break;
-
- /* A start tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* If the stack of open elements has in scope an element whose
- tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
- this is a parse error; pop elements from the stack until an
- element with one of those tag names has been popped from the
- stack. */
- while($this->elementInScope(array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'))) {
- array_pop($this->stack);
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
- break;
-
- /* A start tag whose tag name is "a" */
- case 'a':
- /* If the list of active formatting elements contains
- an element whose tag name is "a" between the end of the
- list and the last marker on the list (or the start of
- the list if there is no marker on the list), then this
- is a parse error; act as if an end tag with the tag name
- "a" had been seen, then remove that element from the list
- of active formatting elements and the stack of open
- elements if the end tag didn't already remove it (it
- might not have if the element is not in table scope). */
- $leng = count($this->a_formatting);
-
- for($n = $leng - 1; $n >= 0; $n--) {
- if($this->a_formatting[$n] === self::MARKER) {
- break;
-
- } elseif($this->a_formatting[$n]->nodeName === 'a') {
- $this->emitToken(array(
- 'name' => 'a',
- 'type' => HTML5::ENDTAG
- ));
- break;
- }
- }
-
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
-
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
-
- /* A start tag whose tag name is one of: "b", "big", "em", "font",
- "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
- case 'b': case 'big': case 'em': case 'font': case 'i':
- case 'nobr': case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $el = $this->insertElement($token);
-
- /* Add that element to the list of active formatting
- elements. */
- $this->a_formatting[] = $el;
- break;
-
- /* A start tag token whose tag name is "button" */
- case 'button':
- /* If the stack of open elements has a button element in scope,
- then this is a parse error; act as if an end tag with the tag
- name "button" had been seen, then reprocess the token. (We don't
- do that. Unnecessary.) */
- if($this->elementInScope('button')) {
- $this->inBody(array(
- 'name' => 'button',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
- break;
-
- /* A start tag token whose tag name is one of: "marquee", "object" */
- case 'marquee': case 'object':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
- break;
-
- /* A start tag token whose tag name is "xmp" */
- case 'xmp':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Switch the content model flag to the CDATA state. */
- return HTML5::CDATA;
- break;
-
- /* A start tag whose tag name is "table" */
- case 'table':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Change the insertion mode to "in table". */
- $this->mode = self::IN_TABLE;
- break;
-
- /* A start tag whose tag name is one of: "area", "basefont",
- "bgsound", "br", "embed", "img", "param", "spacer", "wbr" */
- case 'area': case 'basefont': case 'bgsound': case 'br':
- case 'embed': case 'img': case 'param': case 'spacer':
- case 'wbr':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
- break;
-
- /* A start tag whose tag name is "hr" */
- case 'hr':
- /* If the stack of open elements has a p element in scope,
- then act as if an end tag with the tag name p had been seen. */
- if($this->elementInScope('p')) {
- $this->emitToken(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
- break;
-
- /* A start tag whose tag name is "image" */
- case 'image':
- /* Parse error. Change the token's tag name to "img" and
- reprocess it. (Don't ask.) */
- $token['name'] = 'img';
- return $this->inBody($token);
- break;
-
- /* A start tag whose tag name is "input" */
- case 'input':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an input element for the token. */
- $element = $this->insertElement($token, false);
-
- /* If the form element pointer is not null, then associate the
- input element with the form element pointed to by the form
- element pointer. */
- $this->form_pointer !== null
- ? $this->form_pointer->appendChild($element)
- : end($this->stack)->appendChild($element);
-
- /* Pop that input element off the stack of open elements. */
- array_pop($this->stack);
- break;
-
- /* A start tag whose tag name is "isindex" */
- case 'isindex':
- /* Parse error. */
- // w/e
-
- /* If the form element pointer is not null,
- then ignore the token. */
- if($this->form_pointer === null) {
- /* Act as if a start tag token with the tag name "form" had
- been seen. */
- $this->inBody(array(
- 'name' => 'body',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->inBody(array(
- 'name' => 'hr',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "p" had
- been seen. */
- $this->inBody(array(
- 'name' => 'p',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a start tag token with the tag name "label"
- had been seen. */
- $this->inBody(array(
- 'name' => 'label',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- /* Act as if a stream of character tokens had been seen. */
- $this->insertText('This is a searchable index. '.
- 'Insert your search keywords here: ');
-
- /* Act as if a start tag token with the tag name "input"
- had been seen, with all the attributes from the "isindex"
- token, except with the "name" attribute set to the value
- "isindex" (ignoring any explicit "name" attribute). */
- $attr = $token['attr'];
- $attr[] = array('name' => 'name', 'value' => 'isindex');
-
- $this->inBody(array(
- 'name' => 'input',
- 'type' => HTML5::STARTTAG,
- 'attr' => $attr
- ));
-
- /* Act as if a stream of character tokens had been seen
- (see below for what they should say). */
- $this->insertText('This is a searchable index. '.
- 'Insert your search keywords here: ');
-
- /* Act as if an end tag token with the tag name "label"
- had been seen. */
- $this->inBody(array(
- 'name' => 'label',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if an end tag token with the tag name "p" had
- been seen. */
- $this->inBody(array(
- 'name' => 'p',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if a start tag token with the tag name "hr" had
- been seen. */
- $this->inBody(array(
- 'name' => 'hr',
- 'type' => HTML5::ENDTAG
- ));
-
- /* Act as if an end tag token with the tag name "form" had
- been seen. */
- $this->inBody(array(
- 'name' => 'form',
- 'type' => HTML5::ENDTAG
- ));
- }
- break;
-
- /* A start tag whose tag name is "textarea" */
- case 'textarea':
- $this->insertElement($token);
-
- /* Switch the tokeniser's content model flag to the
- RCDATA state. */
- return HTML5::RCDATA;
- break;
-
- /* A start tag whose tag name is one of: "iframe", "noembed",
- "noframes" */
- case 'iframe': case 'noembed': case 'noframes':
- $this->insertElement($token);
-
- /* Switch the tokeniser's content model flag to the CDATA state. */
- return HTML5::CDATA;
- break;
-
- /* A start tag whose tag name is "select" */
- case 'select':
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Change the insertion mode to "in select". */
- $this->mode = self::IN_SELECT;
- break;
-
- /* A start or end tag whose tag name is one of: "caption", "col",
- "colgroup", "frame", "frameset", "head", "option", "optgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr". */
- case 'caption': case 'col': case 'colgroup': case 'frame':
- case 'frameset': case 'head': case 'option': case 'optgroup':
- case 'tbody': case 'td': case 'tfoot': case 'th': case 'thead':
- case 'tr':
- // Parse error. Ignore the token.
- break;
-
- /* A start or end tag whose tag name is one of: "event-source",
- "section", "nav", "article", "aside", "header", "footer",
- "datagrid", "command" */
- case 'event-source': case 'section': case 'nav': case 'article':
- case 'aside': case 'header': case 'footer': case 'datagrid':
- case 'command':
- // Work in progress!
- break;
-
- /* A start tag token not covered by the previous entries */
- default:
- /* Reconstruct the active formatting elements, if any. */
- $this->reconstructActiveFormattingElements();
-
- $this->insertElement($token, true, true);
- break;
- }
- break;
-
- case HTML5::ENDTAG:
- switch($token['name']) {
- /* An end tag with the tag name "body" */
- case 'body':
- /* If the second element in the stack of open elements is
- not a body element, this is a parse error. Ignore the token.
- (innerHTML case) */
- if(count($this->stack) < 2 || $this->stack[1]->nodeName !== 'body') {
- // Ignore.
-
- /* If the current node is not the body element, then this
- is a parse error. */
- } elseif(end($this->stack)->nodeName !== 'body') {
- // Parse error.
- }
-
- /* Change the insertion mode to "after body". */
- $this->mode = self::AFTER_BODY;
- break;
-
- /* An end tag with the tag name "html" */
- case 'html':
- /* Act as if an end tag with tag name "body" had been seen,
- then, if that token wasn't ignored, reprocess the current
- token. */
- $this->inBody(array(
- 'name' => 'body',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->afterBody($token);
- break;
-
- /* An end tag whose tag name is one of: "address", "blockquote",
- "center", "dir", "div", "dl", "fieldset", "listing", "menu",
- "ol", "pre", "ul" */
- case 'address': case 'blockquote': case 'center': case 'dir':
- case 'div': case 'dl': case 'fieldset': case 'listing':
- case 'menu': case 'ol': case 'pre': case 'ul':
- /* If the stack of open elements has an element in scope
- with the same tag name as that of the token, then generate
- implied end tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with
- the same tag name as that of the token, then this
- is a parse error. */
- // w/e
-
- /* If the stack of open elements has an element in
- scope with the same tag name as that of the token,
- then pop elements from this stack until an element
- with that tag name has been popped from the stack. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
- }
-
- array_pop($this->stack);
- }
- }
- break;
-
- /* An end tag whose tag name is "form" */
- case 'form':
- /* If the stack of open elements has an element in scope
- with the same tag name as that of the token, then generate
- implied end tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- }
-
- if(end($this->stack)->nodeName !== $token['name']) {
- /* Now, if the current node is not an element with the
- same tag name as that of the token, then this is a parse
- error. */
- // w/e
-
- } else {
- /* Otherwise, if the current node is an element with
- the same tag name as that of the token pop that element
- from the stack. */
- array_pop($this->stack);
- }
-
- /* In any case, set the form element pointer to null. */
- $this->form_pointer = null;
- break;
-
- /* An end tag whose tag name is "p" */
- case 'p':
- /* If the stack of open elements has a p element in scope,
- then generate implied end tags, except for p elements. */
- if($this->elementInScope('p')) {
- $this->generateImpliedEndTags(array('p'));
-
- /* If the current node is not a p element, then this is
- a parse error. */
- // k
-
- /* If the stack of open elements has a p element in
- scope, then pop elements from this stack until the stack
- no longer has a p element in scope. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->elementInScope('p')) {
- array_pop($this->stack);
-
- } else {
- break;
- }
- }
- }
- break;
-
- /* An end tag whose tag name is "dd", "dt", or "li" */
- case 'dd': case 'dt': case 'li':
- /* If the stack of open elements has an element in scope
- whose tag name matches the tag name of the token, then
- generate implied end tags, except for elements with the
- same tag name as the token. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags(array($token['name']));
-
- /* If the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // w/e
-
- /* If the stack of open elements has an element in scope
- whose tag name matches the tag name of the token, then
- pop elements from this stack until an element with that
- tag name has been popped from the stack. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
- }
-
- array_pop($this->stack);
- }
- }
- break;
-
- /* An end tag whose tag name is one of: "h1", "h2", "h3", "h4",
- "h5", "h6" */
- case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6':
- $elements = array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
-
- /* If the stack of open elements has in scope an element whose
- tag name is one of "h1", "h2", "h3", "h4", "h5", or "h6", then
- generate implied end tags. */
- if($this->elementInScope($elements)) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with the same
- tag name as that of the token, then this is a parse error. */
- // w/e
-
- /* If the stack of open elements has in scope an element
- whose tag name is one of "h1", "h2", "h3", "h4", "h5", or
- "h6", then pop elements from the stack until an element
- with one of those tag names has been popped from the stack. */
- while($this->elementInScope($elements)) {
- array_pop($this->stack);
- }
- }
- break;
-
- /* An end tag whose tag name is one of: "a", "b", "big", "em",
- "font", "i", "nobr", "s", "small", "strike", "strong", "tt", "u" */
- case 'a': case 'b': case 'big': case 'em': case 'font':
- case 'i': case 'nobr': case 's': case 'small': case 'strike':
- case 'strong': case 'tt': case 'u':
- /* 1. Let the formatting element be the last element in
- the list of active formatting elements that:
- * is between the end of the list and the last scope
- marker in the list, if any, or the start of the list
- otherwise, and
- * has the same tag name as the token.
- */
- while(true) {
- for($a = count($this->a_formatting) - 1; $a >= 0; $a--) {
- if($this->a_formatting[$a] === self::MARKER) {
- break;
-
- } elseif($this->a_formatting[$a]->tagName === $token['name']) {
- $formatting_element = $this->a_formatting[$a];
- $in_stack = in_array($formatting_element, $this->stack, true);
- $fe_af_pos = $a;
- break;
- }
- }
-
- /* If there is no such node, or, if that node is
- also in the stack of open elements but the element
- is not in scope, then this is a parse error. Abort
- these steps. The token is ignored. */
- if(!isset($formatting_element) || ($in_stack &&
- !$this->elementInScope($token['name']))) {
- break;
-
- /* Otherwise, if there is such a node, but that node
- is not in the stack of open elements, then this is a
- parse error; remove the element from the list, and
- abort these steps. */
- } elseif(isset($formatting_element) && !$in_stack) {
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
-
- /* 2. Let the furthest block be the topmost node in the
- stack of open elements that is lower in the stack
- than the formatting element, and is not an element in
- the phrasing or formatting categories. There might
- not be one. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- $length = count($this->stack);
-
- for($s = $fe_s_pos + 1; $s < $length; $s++) {
- $category = $this->getElementCategory($this->stack[$s]->nodeName);
-
- if($category !== self::PHRASING && $category !== self::FORMATTING) {
- $furthest_block = $this->stack[$s];
- }
- }
-
- /* 3. If there is no furthest block, then the UA must
- skip the subsequent steps and instead just pop all
- the nodes from the bottom of the stack of open
- elements, from the current node up to the formatting
- element, and remove the formatting element from the
- list of active formatting elements. */
- if(!isset($furthest_block)) {
- for($n = $length - 1; $n >= $fe_s_pos; $n--) {
- array_pop($this->stack);
- }
-
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
- break;
- }
-
- /* 4. Let the common ancestor be the element
- immediately above the formatting element in the stack
- of open elements. */
- $common_ancestor = $this->stack[$fe_s_pos - 1];
-
- /* 5. If the furthest block has a parent node, then
- remove the furthest block from its parent node. */
- if($furthest_block->parentNode !== null) {
- $furthest_block->parentNode->removeChild($furthest_block);
- }
-
- /* 6. Let a bookmark note the position of the
- formatting element in the list of active formatting
- elements relative to the elements on either side
- of it in the list. */
- $bookmark = $fe_af_pos;
-
- /* 7. Let node and last node be the furthest block.
- Follow these steps: */
- $node = $furthest_block;
- $last_node = $furthest_block;
-
- while(true) {
- for($n = array_search($node, $this->stack, true) - 1; $n >= 0; $n--) {
- /* 7.1 Let node be the element immediately
- prior to node in the stack of open elements. */
- $node = $this->stack[$n];
-
- /* 7.2 If node is not in the list of active
- formatting elements, then remove node from
- the stack of open elements and then go back
- to step 1. */
- if(!in_array($node, $this->a_formatting, true)) {
- unset($this->stack[$n]);
- $this->stack = array_merge($this->stack);
-
- } else {
- break;
- }
- }
-
- /* 7.3 Otherwise, if node is the formatting
- element, then go to the next step in the overall
- algorithm. */
- if($node === $formatting_element) {
- break;
-
- /* 7.4 Otherwise, if last node is the furthest
- block, then move the aforementioned bookmark to
- be immediately after the node in the list of
- active formatting elements. */
- } elseif($last_node === $furthest_block) {
- $bookmark = array_search($node, $this->a_formatting, true) + 1;
- }
-
- /* 7.5 If node has any children, perform a
- shallow clone of node, replace the entry for
- node in the list of active formatting elements
- with an entry for the clone, replace the entry
- for node in the stack of open elements with an
- entry for the clone, and let node be the clone. */
- if($node->hasChildNodes()) {
- $clone = $node->cloneNode();
- $s_pos = array_search($node, $this->stack, true);
- $a_pos = array_search($node, $this->a_formatting, true);
-
- $this->stack[$s_pos] = $clone;
- $this->a_formatting[$a_pos] = $clone;
- $node = $clone;
- }
-
- /* 7.6 Insert last node into node, first removing
- it from its previous parent node if any. */
- if($last_node->parentNode !== null) {
- $last_node->parentNode->removeChild($last_node);
- }
-
- $node->appendChild($last_node);
-
- /* 7.7 Let last node be node. */
- $last_node = $node;
- }
-
- /* 8. Insert whatever last node ended up being in
- the previous step into the common ancestor node,
- first removing it from its previous parent node if
- any. */
- if($last_node->parentNode !== null) {
- $last_node->parentNode->removeChild($last_node);
- }
-
- $common_ancestor->appendChild($last_node);
-
- /* 9. Perform a shallow clone of the formatting
- element. */
- $clone = $formatting_element->cloneNode();
-
- /* 10. Take all of the child nodes of the furthest
- block and append them to the clone created in the
- last step. */
- while($furthest_block->hasChildNodes()) {
- $child = $furthest_block->firstChild;
- $furthest_block->removeChild($child);
- $clone->appendChild($child);
- }
-
- /* 11. Append that clone to the furthest block. */
- $furthest_block->appendChild($clone);
-
- /* 12. Remove the formatting element from the list
- of active formatting elements, and insert the clone
- into the list of active formatting elements at the
- position of the aforementioned bookmark. */
- $fe_af_pos = array_search($formatting_element, $this->a_formatting, true);
- unset($this->a_formatting[$fe_af_pos]);
- $this->a_formatting = array_merge($this->a_formatting);
-
- $af_part1 = array_slice($this->a_formatting, 0, $bookmark - 1);
- $af_part2 = array_slice($this->a_formatting, $bookmark, count($this->a_formatting));
- $this->a_formatting = array_merge($af_part1, array($clone), $af_part2);
-
- /* 13. Remove the formatting element from the stack
- of open elements, and insert the clone into the stack
- of open elements immediately after (i.e. in a more
- deeply nested position than) the position of the
- furthest block in that stack. */
- $fe_s_pos = array_search($formatting_element, $this->stack, true);
- $fb_s_pos = array_search($furthest_block, $this->stack, true);
- unset($this->stack[$fe_s_pos]);
-
- $s_part1 = array_slice($this->stack, 0, $fb_s_pos);
- $s_part2 = array_slice($this->stack, $fb_s_pos + 1, count($this->stack));
- $this->stack = array_merge($s_part1, array($clone), $s_part2);
-
- /* 14. Jump back to step 1 in this series of steps. */
- unset($formatting_element, $fe_af_pos, $fe_s_pos, $furthest_block);
- }
- break;
-
- /* An end tag token whose tag name is one of: "button",
- "marquee", "object" */
- case 'button': case 'marquee': case 'object':
- /* If the stack of open elements has an element in scope whose
- tag name matches the tag name of the token, then generate implied
- tags. */
- if($this->elementInScope($token['name'])) {
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not an element with the same
- tag name as the token, then this is a parse error. */
- // k
-
- /* Now, if the stack of open elements has an element in scope
- whose tag name matches the tag name of the token, then pop
- elements from the stack until that element has been popped from
- the stack, and clear the list of active formatting elements up
- to the last marker. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === $token['name']) {
- $n = -1;
- }
-
- array_pop($this->stack);
- }
-
- $marker = end(array_keys($this->a_formatting, self::MARKER, true));
-
- for($n = count($this->a_formatting) - 1; $n > $marker; $n--) {
- array_pop($this->a_formatting);
- }
- }
- break;
-
- /* Or an end tag whose tag name is one of: "area", "basefont",
- "bgsound", "br", "embed", "hr", "iframe", "image", "img",
- "input", "isindex", "noembed", "noframes", "param", "select",
- "spacer", "table", "textarea", "wbr" */
- case 'area': case 'basefont': case 'bgsound': case 'br':
- case 'embed': case 'hr': case 'iframe': case 'image':
- case 'img': case 'input': case 'isindex': case 'noembed':
- case 'noframes': case 'param': case 'select': case 'spacer':
- case 'table': case 'textarea': case 'wbr':
- // Parse error. Ignore the token.
- break;
-
- /* An end tag token not covered by the previous entries */
- default:
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- /* Initialise node to be the current node (the bottommost
- node of the stack). */
- $node = end($this->stack);
-
- /* If node has the same tag name as the end tag token,
- then: */
- if($token['name'] === $node->nodeName) {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* If the tag name of the end tag token does not
- match the tag name of the current node, this is a
- parse error. */
- // k
-
- /* Pop all the nodes from the current node up to
- node, including node, then stop this algorithm. */
- for($x = count($this->stack) - $n; $x >= $n; $x--) {
- array_pop($this->stack);
- }
-
- } else {
- $category = $this->getElementCategory($node);
-
- if($category !== self::SPECIAL && $category !== self::SCOPING) {
- /* Otherwise, if node is in neither the formatting
- category nor the phrasing category, then this is a
- parse error. Stop this algorithm. The end tag token
- is ignored. */
- return false;
- }
- }
- }
- break;
- }
- break;
- }
- }
-
- private function inTable($token) {
- $clear = array('html', 'table');
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $text = $this->dom->createTextNode($token['data']);
- end($this->stack)->appendChild($text);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- end($this->stack)->appendChild($comment);
-
- /* A start tag whose tag name is "caption" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'caption') {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert a marker at the end of the list of active
- formatting elements. */
- $this->a_formatting[] = self::MARKER;
-
- /* Insert an HTML element for the token, then switch the
- insertion mode to "in caption". */
- $this->insertElement($token);
- $this->mode = self::IN_CAPTION;
-
- /* A start tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'colgroup') {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the
- insertion mode to "in column group". */
- $this->insertElement($token);
- $this->mode = self::IN_CGROUP;
-
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'col') {
- $this->inTable(array(
- 'name' => 'colgroup',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- $this->inColumnGroup($token);
-
- /* A start tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('tbody', 'tfoot', 'thead'))) {
- /* Clear the stack back to a table context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the insertion
- mode to "in table body". */
- $this->insertElement($token);
- $this->mode = self::IN_TBODY;
-
- /* A start tag whose tag name is one of: "td", "th", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- in_array($token['name'], array('td', 'th', 'tr'))) {
- /* Act as if a start tag token with the tag name "tbody" had been
- seen, then reprocess the current token. */
- $this->inTable(array(
- 'name' => 'tbody',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- return $this->inTableBody($token);
-
- /* A start tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'table') {
- /* Parse error. Act as if an end tag token with the tag name "table"
- had been seen, then, if that token wasn't ignored, reprocess the
- current token. */
- $this->inTable(array(
- 'name' => 'table',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->mainPhase($token);
-
- /* An end tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'table') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
- return false;
-
- /* Otherwise: */
- } else {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not a table element, then this
- is a parse error. */
- // w/e
-
- /* Pop elements from this stack until a table element has been
- popped from the stack. */
- while(true) {
- $current = end($this->stack)->nodeName;
- array_pop($this->stack);
-
- if($current === 'table') {
- break;
- }
- }
-
- /* Reset the insertion mode appropriately. */
- $this->resetInsertionMode();
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'tbody', 'td',
- 'tfoot', 'th', 'thead', 'tr'))) {
- // Parse error. Ignore the token.
-
- /* Anything else */
- } else {
- /* Parse error. Process the token as if the insertion mode was "in
- body", with the following exception: */
-
- /* If the current node is a table, tbody, tfoot, thead, or tr
- element, then, whenever a node would be inserted into the current
- node, it must instead be inserted into the foster parent element. */
- if(in_array(end($this->stack)->nodeName,
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
- /* The foster parent element is the parent element of the last
- table element in the stack of open elements, if there is a
- table element and it has such a parent element. If there is no
- table element in the stack of open elements (innerHTML case),
- then the foster parent element is the first element in the
- stack of open elements (the html element). Otherwise, if there
- is a table element in the stack of open elements, but the last
- table element in the stack of open elements has no parent, or
- its parent node is not an element, then the foster parent
- element is the element before the last table element in the
- stack of open elements. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === 'table') {
- $table = $this->stack[$n];
- break;
- }
- }
-
- if(isset($table) && $table->parentNode !== null) {
- $this->foster_parent = $table->parentNode;
-
- } elseif(!isset($table)) {
- $this->foster_parent = $this->stack[0];
-
- } elseif(isset($table) && ($table->parentNode === null ||
- $table->parentNode->nodeType !== XML_ELEMENT_NODE)) {
- $this->foster_parent = $this->stack[$n - 1];
- }
- }
-
- $this->inBody($token);
- }
- }
-
- private function inCaption($token) {
- /* An end tag whose tag name is "caption" */
- if($token['type'] === HTML5::ENDTAG && $token['name'] === 'caption') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore
-
- /* Otherwise: */
- } else {
- /* Generate implied end tags. */
- $this->generateImpliedEndTags();
-
- /* Now, if the current node is not a caption element, then this
- is a parse error. */
- // w/e
-
- /* Pop elements from this stack until a caption element has
- been popped from the stack. */
- while(true) {
- $node = end($this->stack)->nodeName;
- array_pop($this->stack);
-
- if($node === 'caption') {
- break;
- }
- }
-
- /* Clear the list of active formatting elements up to the last
- marker. */
- $this->clearTheActiveFormattingElementsUpToTheLastMarker();
-
- /* Switch the insertion mode to "in table". */
- $this->mode = self::IN_TABLE;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr", or an end tag whose tag
- name is "table" */
- } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) || ($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'table')) {
- /* Parse error. Act as if an end tag with the tag name "caption"
- had been seen, then, if that token wasn't ignored, reprocess the
- current token. */
- $this->inCaption(array(
- 'name' => 'caption',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->inTable($token);
-
- /* An end tag whose tag name is one of: "body", "col", "colgroup",
- "html", "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'col', 'colgroup', 'html', 'tbody', 'tfoot', 'th',
- 'thead', 'tr'))) {
- // Parse error. Ignore the token.
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in body". */
- $this->inBody($token);
- }
- }
-
- private function inColumnGroup($token) {
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $text = $this->dom->createTextNode($token['data']);
- end($this->stack)->appendChild($text);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- end($this->stack)->appendChild($comment);
-
- /* A start tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::STARTTAG && $token['name'] === 'col') {
- /* Insert a col element for the token. Immediately pop the current
- node off the stack of open elements. */
- $this->insertElement($token);
- array_pop($this->stack);
-
- /* An end tag whose tag name is "colgroup" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'colgroup') {
- /* If the current node is the root html element, then this is a
- parse error, ignore the token. (innerHTML case) */
- if(end($this->stack)->nodeName === 'html') {
- // Ignore
-
- /* Otherwise, pop the current node (which will be a colgroup
- element) from the stack of open elements. Switch the insertion
- mode to "in table". */
- } else {
- array_pop($this->stack);
- $this->mode = self::IN_TABLE;
- }
-
- /* An end tag whose tag name is "col" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'col') {
- /* Parse error. Ignore the token. */
-
- /* Anything else */
- } else {
- /* Act as if an end tag with the tag name "colgroup" had been seen,
- and then, if that token wasn't ignored, reprocess the current token. */
- $this->inColumnGroup(array(
- 'name' => 'colgroup',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->inTable($token);
- }
- }
-
- private function inTableBody($token) {
- $clear = array('tbody', 'tfoot', 'thead', 'html');
-
- /* A start tag whose tag name is "tr" */
- if($token['type'] === HTML5::STARTTAG && $token['name'] === 'tr') {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert a tr element for the token, then switch the insertion
- mode to "in row". */
- $this->insertElement($token);
- $this->mode = self::IN_ROW;
-
- /* A start tag whose tag name is one of: "th", "td" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
- /* Parse error. Act as if a start tag with the tag name "tr" had
- been seen, then reprocess the current token. */
- $this->inTableBody(array(
- 'name' => 'tr',
- 'type' => HTML5::STARTTAG,
- 'attr' => array()
- ));
-
- return $this->inRow($token);
-
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Pop the current node from the stack of open elements. Switch
- the insertion mode to "in table". */
- array_pop($this->stack);
- $this->mode = self::IN_TABLE;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", or an end tag whose tag name is "table" */
- } elseif(($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoor', 'thead'))) ||
- ($token['type'] === HTML5::STARTTAG && $token['name'] === 'table')) {
- /* If the stack of open elements does not have a tbody, thead, or
- tfoot element in table scope, this is a parse error. Ignore the
- token. (innerHTML case) */
- if(!$this->elementInScope(array('tbody', 'thead', 'tfoot'), true)) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table body context. */
- $this->clearStackToTableContext($clear);
-
- /* Act as if an end tag with the same tag name as the current
- node ("tbody", "tfoot", or "thead") had been seen, then
- reprocess the current token. */
- $this->inTableBody(array(
- 'name' => end($this->stack)->nodeName,
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->mainPhase($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) {
- /* Parse error. Ignore the token. */
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in table". */
- $this->inTable($token);
- }
- }
-
- private function inRow($token) {
- $clear = array('tr', 'html');
-
- /* A start tag whose tag name is one of: "th", "td" */
- if($token['type'] === HTML5::STARTTAG &&
- ($token['name'] === 'th' || $token['name'] === 'td')) {
- /* Clear the stack back to a table row context. */
- $this->clearStackToTableContext($clear);
-
- /* Insert an HTML element for the token, then switch the insertion
- mode to "in cell". */
- $this->insertElement($token);
- $this->mode = self::IN_CELL;
-
- /* Insert a marker at the end of the list of active formatting
- elements. */
- $this->a_formatting[] = self::MARKER;
-
- /* An end tag whose tag name is "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'tr') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* Clear the stack back to a table row context. */
- $this->clearStackToTableContext($clear);
-
- /* Pop the current node (which will be a tr element) from the
- stack of open elements. Switch the insertion mode to "in table
- body". */
- array_pop($this->stack);
- $this->mode = self::IN_TBODY;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "tfoot", "thead", "tr" or an end tag whose tag name is "table" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'tfoot', 'thead', 'tr'))) {
- /* Act as if an end tag with the tag name "tr" had been seen, then,
- if that token wasn't ignored, reprocess the current token. */
- $this->inRow(array(
- 'name' => 'tr',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->inCell($token);
-
- /* An end tag whose tag name is one of: "tbody", "tfoot", "thead" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- in_array($token['name'], array('tbody', 'tfoot', 'thead'))) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* Otherwise, act as if an end tag with the tag name "tr" had
- been seen, then reprocess the current token. */
- $this->inRow(array(
- 'name' => 'tr',
- 'type' => HTML5::ENDTAG
- ));
-
- return $this->inCell($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html", "td", "th" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html', 'td', 'th', 'tr'))) {
- /* Parse error. Ignore the token. */
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in table". */
- $this->inTable($token);
- }
- }
-
- private function inCell($token) {
- /* An end tag whose tag name is one of: "td", "th" */
- if($token['type'] === HTML5::ENDTAG &&
- ($token['name'] === 'td' || $token['name'] === 'th')) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as that of the token, then this is a
- parse error and the token must be ignored. */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore.
-
- /* Otherwise: */
- } else {
- /* Generate implied end tags, except for elements with the same
- tag name as the token. */
- $this->generateImpliedEndTags(array($token['name']));
-
- /* Now, if the current node is not an element with the same tag
- name as the token, then this is a parse error. */
- // k
-
- /* Pop elements from this stack until an element with the same
- tag name as the token has been popped from the stack. */
- while(true) {
- $node = end($this->stack)->nodeName;
- array_pop($this->stack);
-
- if($node === $token['name']) {
- break;
- }
- }
-
- /* Clear the list of active formatting elements up to the last
- marker. */
- $this->clearTheActiveFormattingElementsUpToTheLastMarker();
-
- /* Switch the insertion mode to "in row". (The current node
- will be a tr element at this point.) */
- $this->mode = self::IN_ROW;
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) {
- /* If the stack of open elements does not have a td or th element
- in table scope, then this is a parse error; ignore the token.
- (innerHTML case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
- // Ignore.
-
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
- } else {
- $this->closeCell();
- return $this->inRow($token);
- }
-
- /* A start tag whose tag name is one of: "caption", "col", "colgroup",
- "tbody", "td", "tfoot", "th", "thead", "tr" */
- } elseif($token['type'] === HTML5::STARTTAG && in_array($token['name'],
- array('caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th',
- 'thead', 'tr'))) {
- /* If the stack of open elements does not have a td or th element
- in table scope, then this is a parse error; ignore the token.
- (innerHTML case) */
- if(!$this->elementInScope(array('td', 'th'), true)) {
- // Ignore.
-
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
- } else {
- $this->closeCell();
- return $this->inRow($token);
- }
-
- /* An end tag whose tag name is one of: "body", "caption", "col",
- "colgroup", "html" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('body', 'caption', 'col', 'colgroup', 'html'))) {
- /* Parse error. Ignore the token. */
-
- /* An end tag whose tag name is one of: "table", "tbody", "tfoot",
- "thead", "tr" */
- } elseif($token['type'] === HTML5::ENDTAG && in_array($token['name'],
- array('table', 'tbody', 'tfoot', 'thead', 'tr'))) {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as that of the token (which can only
- happen for "tbody", "tfoot" and "thead", or, in the innerHTML case),
- then this is a parse error and the token must be ignored. */
- if(!$this->elementInScope($token['name'], true)) {
- // Ignore.
-
- /* Otherwise, close the cell (see below) and reprocess the current
- token. */
- } else {
- $this->closeCell();
- return $this->inRow($token);
- }
-
- /* Anything else */
- } else {
- /* Process the token as if the insertion mode was "in body". */
- $this->inBody($token);
- }
- }
-
- private function inSelect($token) {
- /* Handle the token as follows: */
-
- /* A character token */
- if($token['type'] === HTML5::CHARACTR) {
- /* Append the token's character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A start tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'option') {
- /* If the current node is an option element, act as if an end tag
- with the tag name "option" had been seen. */
- if(end($this->stack)->nodeName === 'option') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* A start tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5::STARTTAG &&
- $token['name'] === 'optgroup') {
- /* If the current node is an option element, act as if an end tag
- with the tag name "option" had been seen. */
- if(end($this->stack)->nodeName === 'option') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* If the current node is an optgroup element, act as if an end tag
- with the tag name "optgroup" had been seen. */
- if(end($this->stack)->nodeName === 'optgroup') {
- $this->inSelect(array(
- 'name' => 'optgroup',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* An end tag token whose tag name is "optgroup" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'optgroup') {
- /* First, if the current node is an option element, and the node
- immediately before it in the stack of open elements is an optgroup
- element, then act as if an end tag with the tag name "option" had
- been seen. */
- $elements_in_stack = count($this->stack);
-
- if($this->stack[$elements_in_stack - 1]->nodeName === 'option' &&
- $this->stack[$elements_in_stack - 2]->nodeName === 'optgroup') {
- $this->inSelect(array(
- 'name' => 'option',
- 'type' => HTML5::ENDTAG
- ));
- }
-
- /* If the current node is an optgroup element, then pop that node
- from the stack of open elements. Otherwise, this is a parse error,
- ignore the token. */
- if($this->stack[$elements_in_stack - 1] === 'optgroup') {
- array_pop($this->stack);
- }
-
- /* An end tag token whose tag name is "option" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'option') {
- /* If the current node is an option element, then pop that node
- from the stack of open elements. Otherwise, this is a parse error,
- ignore the token. */
- if(end($this->stack)->nodeName === 'option') {
- array_pop($this->stack);
- }
-
- /* An end tag whose tag name is "select" */
- } elseif($token['type'] === HTML5::ENDTAG &&
- $token['name'] === 'select') {
- /* If the stack of open elements does not have an element in table
- scope with the same tag name as the token, this is a parse error.
- Ignore the token. (innerHTML case) */
- if(!$this->elementInScope($token['name'], true)) {
- // w/e
-
- /* Otherwise: */
- } else {
- /* Pop elements from the stack of open elements until a select
- element has been popped from the stack. */
- while(true) {
- $current = end($this->stack)->nodeName;
- array_pop($this->stack);
-
- if($current === 'select') {
- break;
- }
- }
-
- /* Reset the insertion mode appropriately. */
- $this->resetInsertionMode();
- }
-
- /* A start tag whose tag name is "select" */
- } elseif($token['name'] === 'select' &&
- $token['type'] === HTML5::STARTTAG) {
- /* Parse error. Act as if the token had been an end tag with the
- tag name "select" instead. */
- $this->inSelect(array(
- 'name' => 'select',
- 'type' => HTML5::ENDTAG
- ));
-
- /* An end tag whose tag name is one of: "caption", "table", "tbody",
- "tfoot", "thead", "tr", "td", "th" */
- } elseif(in_array($token['name'], array('caption', 'table', 'tbody',
- 'tfoot', 'thead', 'tr', 'td', 'th')) && $token['type'] === HTML5::ENDTAG) {
- /* Parse error. */
- // w/e
-
- /* If the stack of open elements has an element in table scope with
- the same tag name as that of the token, then act as if an end tag
- with the tag name "select" had been seen, and reprocess the token.
- Otherwise, ignore the token. */
- if($this->elementInScope($token['name'], true)) {
- $this->inSelect(array(
- 'name' => 'select',
- 'type' => HTML5::ENDTAG
- ));
-
- $this->mainPhase($token);
- }
-
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- }
- }
-
- private function afterBody($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Process the token as it would be processed if the insertion mode
- was "in body". */
- $this->inBody($token);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the first element in the stack of open
- elements (the html element), with the data attribute set to the
- data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->stack[0]->appendChild($comment);
-
- /* An end tag with the tag name "html" */
- } elseif($token['type'] === HTML5::ENDTAG && $token['name'] === 'html') {
- /* If the parser was originally created in order to handle the
- setting of an element's innerHTML attribute, this is a parse error;
- ignore the token. (The element will be an html element in this
- case.) (innerHTML case) */
-
- /* Otherwise, switch to the trailing end phase. */
- $this->phase = self::END_PHASE;
-
- /* Anything else */
- } else {
- /* Parse error. Set the insertion mode to "in body" and reprocess
- the token. */
- $this->mode = self::IN_BODY;
- return $this->inBody($token);
- }
- }
-
- private function inFrameset($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* A start tag with the tag name "frameset" */
- } elseif($token['name'] === 'frameset' &&
- $token['type'] === HTML5::STARTTAG) {
- $this->insertElement($token);
-
- /* An end tag with the tag name "frameset" */
- } elseif($token['name'] === 'frameset' &&
- $token['type'] === HTML5::ENDTAG) {
- /* If the current node is the root html element, then this is a
- parse error; ignore the token. (innerHTML case) */
- if(end($this->stack)->nodeName === 'html') {
- // Ignore
-
- } else {
- /* Otherwise, pop the current node from the stack of open
- elements. */
- array_pop($this->stack);
-
- /* If the parser was not originally created in order to handle
- the setting of an element's innerHTML attribute (innerHTML case),
- and the current node is no longer a frameset element, then change
- the insertion mode to "after frameset". */
- $this->mode = self::AFTR_FRAME;
- }
-
- /* A start tag with the tag name "frame" */
- } elseif($token['name'] === 'frame' &&
- $token['type'] === HTML5::STARTTAG) {
- /* Insert an HTML element for the token. */
- $this->insertElement($token);
-
- /* Immediately pop the current node off the stack of open elements. */
- array_pop($this->stack);
-
- /* A start tag with the tag name "noframes" */
- } elseif($token['name'] === 'noframes' &&
- $token['type'] === HTML5::STARTTAG) {
- /* Process the token as if the insertion mode had been "in body". */
- $this->inBody($token);
-
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- }
- }
-
- private function afterFrameset($token) {
- /* Handle the token as follows: */
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- U+000D CARRIAGE RETURN (CR), or U+0020 SPACE */
- if($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Append the character to the current node. */
- $this->insertText($token['data']);
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the current node with the data
- attribute set to the data given in the comment token. */
- $this->insertComment($token['data']);
-
- /* An end tag with the tag name "html" */
- } elseif($token['name'] === 'html' &&
- $token['type'] === HTML5::ENDTAG) {
- /* Switch to the trailing end phase. */
- $this->phase = self::END_PHASE;
-
- /* A start tag with the tag name "noframes" */
- } elseif($token['name'] === 'noframes' &&
- $token['type'] === HTML5::STARTTAG) {
- /* Process the token as if the insertion mode had been "in body". */
- $this->inBody($token);
-
- /* Anything else */
- } else {
- /* Parse error. Ignore the token. */
- }
- }
-
- private function trailingEndPhase($token) {
- /* After the main phase, as each token is emitted from the tokenisation
- stage, it must be processed as described in this section. */
-
- /* A DOCTYPE token */
- if($token['type'] === HTML5::DOCTYPE) {
- // Parse error. Ignore the token.
-
- /* A comment token */
- } elseif($token['type'] === HTML5::COMMENT) {
- /* Append a Comment node to the Document object with the data
- attribute set to the data given in the comment token. */
- $comment = $this->dom->createComment($token['data']);
- $this->dom->appendChild($comment);
-
- /* A character token that is one of one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE */
- } elseif($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) {
- /* Process the token as it would be processed in the main phase. */
- $this->mainPhase($token);
-
- /* A character token that is not one of U+0009 CHARACTER TABULATION,
- U+000A LINE FEED (LF), U+000B LINE TABULATION, U+000C FORM FEED (FF),
- or U+0020 SPACE. Or a start tag token. Or an end tag token. */
- } elseif(($token['type'] === HTML5::CHARACTR &&
- preg_match('/^[\t\n\x0b\x0c ]+$/', $token['data'])) ||
- $token['type'] === HTML5::STARTTAG || $token['type'] === HTML5::ENDTAG) {
- /* Parse error. Switch back to the main phase and reprocess the
- token. */
- $this->phase = self::MAIN_PHASE;
- return $this->mainPhase($token);
-
- /* An end-of-file token */
- } elseif($token['type'] === HTML5::EOF) {
- /* OMG DONE!! */
- }
- }
-
- private function insertElement($token, $append = true, $check = false) {
- // Proprietary workaround for libxml2's limitations with tag names
- if ($check) {
- // Slightly modified HTML5 tag-name modification,
- // removing anything that's not an ASCII letter, digit, or hyphen
- $token['name'] = preg_replace('/[^a-z0-9-]/i', '', $token['name']);
- // Remove leading hyphens and numbers
- $token['name'] = ltrim($token['name'], '-0..9');
- // In theory, this should ever be needed, but just in case
- if ($token['name'] === '') $token['name'] = 'span'; // arbitrary generic choice
- }
-
- $el = $this->dom->createElement($token['name']);
-
- foreach($token['attr'] as $attr) {
- if(!$el->hasAttribute($attr['name'])) {
- $el->setAttribute($attr['name'], $attr['value']);
- }
- }
-
- $this->appendToRealParent($el);
- $this->stack[] = $el;
-
- return $el;
- }
-
- private function insertText($data) {
- $text = $this->dom->createTextNode($data);
- $this->appendToRealParent($text);
- }
-
- private function insertComment($data) {
- $comment = $this->dom->createComment($data);
- $this->appendToRealParent($comment);
- }
-
- private function appendToRealParent($node) {
- if($this->foster_parent === null) {
- end($this->stack)->appendChild($node);
-
- } elseif($this->foster_parent !== null) {
- /* If the foster parent element is the parent element of the
- last table element in the stack of open elements, then the new
- node must be inserted immediately before the last table element
- in the stack of open elements in the foster parent element;
- otherwise, the new node must be appended to the foster parent
- element. */
- for($n = count($this->stack) - 1; $n >= 0; $n--) {
- if($this->stack[$n]->nodeName === 'table' &&
- $this->stack[$n]->parentNode !== null) {
- $table = $this->stack[$n];
- break;
- }
- }
-
- if(isset($table) && $this->foster_parent->isSameNode($table->parentNode))
- $this->foster_parent->insertBefore($node, $table);
- else
- $this->foster_parent->appendChild($node);
-
- $this->foster_parent = null;
- }
- }
-
- private function elementInScope($el, $table = false) {
- if(is_array($el)) {
- foreach($el as $element) {
- if($this->elementInScope($element, $table)) {
- return true;
- }
- }
-
- return false;
- }
-
- $leng = count($this->stack);
-
- for($n = 0; $n < $leng; $n++) {
- /* 1. Initialise node to be the current node (the bottommost node of
- the stack). */
- $node = $this->stack[$leng - 1 - $n];
-
- if($node->tagName === $el) {
- /* 2. If node is the target node, terminate in a match state. */
- return true;
-
- } elseif($node->tagName === 'table') {
- /* 3. Otherwise, if node is a table element, terminate in a failure
- state. */
- return false;
-
- } elseif($table === true && in_array($node->tagName, array('caption', 'td',
- 'th', 'button', 'marquee', 'object'))) {
- /* 4. Otherwise, if the algorithm is the "has an element in scope"
- variant (rather than the "has an element in table scope" variant),
- and node is one of the following, terminate in a failure state. */
- return false;
-
- } elseif($node === $node->ownerDocument->documentElement) {
- /* 5. Otherwise, if node is an html element (root element), terminate
- in a failure state. (This can only happen if the node is the topmost
- node of the stack of open elements, and prevents the next step from
- being invoked if there are no more elements in the stack.) */
- return false;
- }
-
- /* Otherwise, set node to the previous entry in the stack of open
- elements and return to step 2. (This will never fail, since the loop
- will always terminate in the previous step if the top of the stack
- is reached.) */
- }
- }
-
- private function reconstructActiveFormattingElements() {
- /* 1. If there are no entries in the list of active formatting elements,
- then there is nothing to reconstruct; stop this algorithm. */
- $formatting_elements = count($this->a_formatting);
-
- if($formatting_elements === 0) {
- return false;
- }
-
- /* 3. Let entry be the last (most recently added) element in the list
- of active formatting elements. */
- $entry = end($this->a_formatting);
-
- /* 2. If the last (most recently added) entry in the list of active
- formatting elements is a marker, or if it is an element that is in the
- stack of open elements, then there is nothing to reconstruct; stop this
- algorithm. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
- return false;
- }
-
- for($a = $formatting_elements - 1; $a >= 0; true) {
- /* 4. If there are no entries before entry in the list of active
- formatting elements, then jump to step 8. */
- if($a === 0) {
- $step_seven = false;
- break;
- }
-
- /* 5. Let entry be the entry one earlier than entry in the list of
- active formatting elements. */
- $a--;
- $entry = $this->a_formatting[$a];
-
- /* 6. If entry is neither a marker nor an element that is also in
- thetack of open elements, go to step 4. */
- if($entry === self::MARKER || in_array($entry, $this->stack, true)) {
- break;
- }
- }
-
- while(true) {
- /* 7. Let entry be the element one later than entry in the list of
- active formatting elements. */
- if(isset($step_seven) && $step_seven === true) {
- $a++;
- $entry = $this->a_formatting[$a];
- }
-
- /* 8. Perform a shallow clone of the element entry to obtain clone. */
- $clone = $entry->cloneNode();
-
- /* 9. Append clone to the current node and push it onto the stack
- of open elements so that it is the new current node. */
- end($this->stack)->appendChild($clone);
- $this->stack[] = $clone;
-
- /* 10. Replace the entry for entry in the list with an entry for
- clone. */
- $this->a_formatting[$a] = $clone;
-
- /* 11. If the entry for clone in the list of active formatting
- elements is not the last entry in the list, return to step 7. */
- if(end($this->a_formatting) !== $clone) {
- $step_seven = true;
- } else {
- break;
- }
- }
- }
-
- private function clearTheActiveFormattingElementsUpToTheLastMarker() {
- /* When the steps below require the UA to clear the list of active
- formatting elements up to the last marker, the UA must perform the
- following steps: */
-
- while(true) {
- /* 1. Let entry be the last (most recently added) entry in the list
- of active formatting elements. */
- $entry = end($this->a_formatting);
-
- /* 2. Remove entry from the list of active formatting elements. */
- array_pop($this->a_formatting);
-
- /* 3. If entry was a marker, then stop the algorithm at this point.
- The list has been cleared up to the last marker. */
- if($entry === self::MARKER) {
- break;
- }
- }
- }
-
- private function generateImpliedEndTags($exclude = array()) {
- /* When the steps below require the UA to generate implied end tags,
- then, if the current node is a dd element, a dt element, an li element,
- a p element, a td element, a th element, or a tr element, the UA must
- act as if an end tag with the respective tag name had been seen and
- then generate implied end tags again. */
- $node = end($this->stack);
- $elements = array_diff(array('dd', 'dt', 'li', 'p', 'td', 'th', 'tr'), $exclude);
-
- while(in_array(end($this->stack)->nodeName, $elements)) {
- array_pop($this->stack);
- }
- }
-
- private function getElementCategory($node) {
- $name = $node->tagName;
- if(in_array($name, $this->special))
- return self::SPECIAL;
-
- elseif(in_array($name, $this->scoping))
- return self::SCOPING;
-
- elseif(in_array($name, $this->formatting))
- return self::FORMATTING;
-
- else
- return self::PHRASING;
- }
-
- private function clearStackToTableContext($elements) {
- /* When the steps above require the UA to clear the stack back to a
- table context, it means that the UA must, while the current node is not
- a table element or an html element, pop elements from the stack of open
- elements. If this causes any elements to be popped from the stack, then
- this is a parse error. */
- while(true) {
- $node = end($this->stack)->nodeName;
-
- if(in_array($node, $elements)) {
- break;
- } else {
- array_pop($this->stack);
- }
- }
- }
-
- private function resetInsertionMode() {
- /* 1. Let last be false. */
- $last = false;
- $leng = count($this->stack);
-
- for($n = $leng - 1; $n >= 0; $n--) {
- /* 2. Let node be the last node in the stack of open elements. */
- $node = $this->stack[$n];
-
- /* 3. If node is the first node in the stack of open elements, then
- set last to true. If the element whose innerHTML attribute is being
- set is neither a td element nor a th element, then set node to the
- element whose innerHTML attribute is being set. (innerHTML case) */
- if($this->stack[0]->isSameNode($node)) {
- $last = true;
- }
-
- /* 4. If node is a select element, then switch the insertion mode to
- "in select" and abort these steps. (innerHTML case) */
- if($node->nodeName === 'select') {
- $this->mode = self::IN_SELECT;
- break;
-
- /* 5. If node is a td or th element, then switch the insertion mode
- to "in cell" and abort these steps. */
- } elseif($node->nodeName === 'td' || $node->nodeName === 'th') {
- $this->mode = self::IN_CELL;
- break;
-
- /* 6. If node is a tr element, then switch the insertion mode to
- "in row" and abort these steps. */
- } elseif($node->nodeName === 'tr') {
- $this->mode = self::IN_ROW;
- break;
-
- /* 7. If node is a tbody, thead, or tfoot element, then switch the
- insertion mode to "in table body" and abort these steps. */
- } elseif(in_array($node->nodeName, array('tbody', 'thead', 'tfoot'))) {
- $this->mode = self::IN_TBODY;
- break;
-
- /* 8. If node is a caption element, then switch the insertion mode
- to "in caption" and abort these steps. */
- } elseif($node->nodeName === 'caption') {
- $this->mode = self::IN_CAPTION;
- break;
-
- /* 9. If node is a colgroup element, then switch the insertion mode
- to "in column group" and abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'colgroup') {
- $this->mode = self::IN_CGROUP;
- break;
-
- /* 10. If node is a table element, then switch the insertion mode
- to "in table" and abort these steps. */
- } elseif($node->nodeName === 'table') {
- $this->mode = self::IN_TABLE;
- break;
-
- /* 11. If node is a head element, then switch the insertion mode
- to "in body" ("in body"! not "in head"!) and abort these steps.
- (innerHTML case) */
- } elseif($node->nodeName === 'head') {
- $this->mode = self::IN_BODY;
- break;
-
- /* 12. If node is a body element, then switch the insertion mode to
- "in body" and abort these steps. */
- } elseif($node->nodeName === 'body') {
- $this->mode = self::IN_BODY;
- break;
-
- /* 13. If node is a frameset element, then switch the insertion
- mode to "in frameset" and abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'frameset') {
- $this->mode = self::IN_FRAME;
- break;
-
- /* 14. If node is an html element, then: if the head element
- pointer is null, switch the insertion mode to "before head",
- otherwise, switch the insertion mode to "after head". In either
- case, abort these steps. (innerHTML case) */
- } elseif($node->nodeName === 'html') {
- $this->mode = ($this->head_pointer === null)
- ? self::BEFOR_HEAD
- : self::AFTER_HEAD;
-
- break;
-
- /* 15. If last is true, then set the insertion mode to "in body"
- and abort these steps. (innerHTML case) */
- } elseif($last) {
- $this->mode = self::IN_BODY;
- break;
- }
- }
- }
-
- private function closeCell() {
- /* If the stack of open elements has a td or th element in table scope,
- then act as if an end tag token with that tag name had been seen. */
- foreach(array('td', 'th') as $cell) {
- if($this->elementInScope($cell, true)) {
- $this->inCell(array(
- 'name' => $cell,
- 'type' => HTML5::ENDTAG
- ));
-
- break;
- }
- }
- }
-
- public function save() {
- return $this->dom;
- }
-}
-?>
diff --git a/web/framework-1.1.17/.htaccess b/web/framework/.htaccess
similarity index 100%
rename from web/framework-1.1.17/.htaccess
rename to web/framework/.htaccess
diff --git a/web/framework-1.1.17/YiiBase.php b/web/framework/YiiBase.php
similarity index 99%
rename from web/framework-1.1.17/YiiBase.php
rename to web/framework/YiiBase.php
index 289b7f9..f406cff 100644
--- a/web/framework-1.1.17/YiiBase.php
+++ b/web/framework/YiiBase.php
@@ -80,7 +80,7 @@ class YiiBase
*/
public static function getVersion()
{
- return '1.1.17';
+ return '1.1.18';
}
/**
@@ -179,6 +179,7 @@ class YiiBase
*/
public static function createComponent($config)
{
+ $args = func_get_args();
if(is_string($config))
{
$type=$config;
@@ -197,7 +198,6 @@ class YiiBase
if(($n=func_num_args())>1)
{
- $args=func_get_args();
if($n===2)
$object=new $type($args[1]);
elseif($n===3)
diff --git a/web/framework-1.1.17/base/CApplication.php b/web/framework/base/CApplication.php
similarity index 99%
rename from web/framework-1.1.17/base/CApplication.php
rename to web/framework/base/CApplication.php
index 8c44e27..5d891bd 100644
--- a/web/framework-1.1.17/base/CApplication.php
+++ b/web/framework/base/CApplication.php
@@ -133,7 +133,7 @@ abstract class CApplication extends CModule
{
Yii::setApplication($this);
- // set basePath at early as possible to avoid trouble
+ // set basePath as early as possible to avoid trouble
if(is_string($config))
$config=require($config);
if(isset($config['basePath']))
@@ -400,7 +400,7 @@ abstract class CApplication extends CModule
/**
* Returns the locale instance.
* @param string $localeID the locale ID (e.g. en_US). If null, the {@link getLanguage application language ID} will be used.
- * @return an instance of CLocale
+ * @return CLocale an instance of CLocale
*/
public function getLocale($localeID=null)
{
@@ -572,7 +572,7 @@ abstract class CApplication extends CModule
public function createAbsoluteUrl($route,$params=array(),$schema='',$ampersand='&')
{
$url=$this->createUrl($route,$params,$ampersand);
- if(strpos($url,'http')===0)
+ if(strpos($url,'http')===0 || strpos($url,'//')===0)
return $url;
else
return $this->getRequest()->getHostInfo($schema).$url;
diff --git a/web/framework-1.1.17/base/CApplicationComponent.php b/web/framework/base/CApplicationComponent.php
similarity index 100%
rename from web/framework-1.1.17/base/CApplicationComponent.php
rename to web/framework/base/CApplicationComponent.php
diff --git a/web/framework-1.1.17/base/CBehavior.php b/web/framework/base/CBehavior.php
similarity index 100%
rename from web/framework-1.1.17/base/CBehavior.php
rename to web/framework/base/CBehavior.php
diff --git a/web/framework-1.1.17/base/CComponent.php b/web/framework/base/CComponent.php
similarity index 99%
rename from web/framework-1.1.17/base/CComponent.php
rename to web/framework/base/CComponent.php
index 13d81f5..ed6901f 100644
--- a/web/framework-1.1.17/base/CComponent.php
+++ b/web/framework/base/CComponent.php
@@ -609,7 +609,14 @@ class CComponent
if(is_string($_expression_))
{
extract($_data_);
- return eval('return '.$_expression_.';');
+ try
+ {
+ return eval('return ' . $_expression_ . ';');
+ }
+ catch (ParseError $e)
+ {
+ return false;
+ }
}
else
{
diff --git a/web/framework-1.1.17/base/CDbStatePersister.php b/web/framework/base/CDbStatePersister.php
similarity index 100%
rename from web/framework-1.1.17/base/CDbStatePersister.php
rename to web/framework/base/CDbStatePersister.php
diff --git a/web/framework-1.1.17/base/CErrorEvent.php b/web/framework/base/CErrorEvent.php
similarity index 100%
rename from web/framework-1.1.17/base/CErrorEvent.php
rename to web/framework/base/CErrorEvent.php
diff --git a/web/framework-1.1.17/base/CErrorHandler.php b/web/framework/base/CErrorHandler.php
similarity index 100%
rename from web/framework-1.1.17/base/CErrorHandler.php
rename to web/framework/base/CErrorHandler.php
diff --git a/web/framework-1.1.17/base/CException.php b/web/framework/base/CException.php
similarity index 100%
rename from web/framework-1.1.17/base/CException.php
rename to web/framework/base/CException.php
diff --git a/web/framework-1.1.17/base/CExceptionEvent.php b/web/framework/base/CExceptionEvent.php
similarity index 100%
rename from web/framework-1.1.17/base/CExceptionEvent.php
rename to web/framework/base/CExceptionEvent.php
diff --git a/web/framework-1.1.17/base/CHttpException.php b/web/framework/base/CHttpException.php
similarity index 100%
rename from web/framework-1.1.17/base/CHttpException.php
rename to web/framework/base/CHttpException.php
diff --git a/web/framework-1.1.17/base/CModel.php b/web/framework/base/CModel.php
similarity index 100%
rename from web/framework-1.1.17/base/CModel.php
rename to web/framework/base/CModel.php
diff --git a/web/framework-1.1.17/base/CModelBehavior.php b/web/framework/base/CModelBehavior.php
similarity index 100%
rename from web/framework-1.1.17/base/CModelBehavior.php
rename to web/framework/base/CModelBehavior.php
diff --git a/web/framework-1.1.17/base/CModelEvent.php b/web/framework/base/CModelEvent.php
similarity index 100%
rename from web/framework-1.1.17/base/CModelEvent.php
rename to web/framework/base/CModelEvent.php
diff --git a/web/framework-1.1.17/base/CModule.php b/web/framework/base/CModule.php
similarity index 99%
rename from web/framework-1.1.17/base/CModule.php
rename to web/framework/base/CModule.php
index b81b2bd..57f2725 100644
--- a/web/framework-1.1.17/base/CModule.php
+++ b/web/framework/base/CModule.php
@@ -71,7 +71,7 @@ abstract class CModule extends CComponent
$this->_id=$id;
$this->_parentModule=$parent;
- // set basePath at early as possible to avoid trouble
+ // set basePath as early as possible to avoid trouble
if(is_string($config))
$config=require($config);
if(isset($config['basePath']))
diff --git a/web/framework-1.1.17/base/CSecurityManager.php b/web/framework/base/CSecurityManager.php
similarity index 95%
rename from web/framework-1.1.17/base/CSecurityManager.php
rename to web/framework/base/CSecurityManager.php
index 6f339c6..9832498 100644
--- a/web/framework-1.1.17/base/CSecurityManager.php
+++ b/web/framework/base/CSecurityManager.php
@@ -614,4 +614,35 @@ class CSecurityManager extends CApplicationComponent
$diff|=(ord($actual[$i])^ord($expected[$i%$expectedLength]));
return $diff===0;
}
+
+ /**
+ * Masks a token to make it uncompressible.
+ * Applies a random mask to the token and prepends the mask used to the result making the string always unique.
+ * Used to mitigate BREACH attack by randomizing how token is outputted on each request.
+ * @param string $token An unmasked token.
+ * @return string A masked token.
+ * @since 1.1.18
+ */
+ public function maskToken($token)
+ {
+ // The number of bytes in a mask is always equal to the number of bytes in a token.
+ $mask=$this->generateRandomString($this->strlen($token));
+ return strtr(base64_encode($mask.($mask^$token)),'+/','-_');
+ }
+
+ /**
+ * Unmasks a token previously masked by `maskToken`.
+ * @param string $maskedToken A masked token.
+ * @return string An unmasked token, or an empty string in case of token format is invalid.
+ * @since 1.1.18
+ */
+ public function unmaskToken($maskedToken)
+ {
+ $decoded=base64_decode(strtr($maskedToken,'-_','+/'));
+ $length=$this->strlen($decoded)/2;
+ // Check if the masked token has an even length.
+ if(!is_int($length))
+ return '';
+ return $this->substr($decoded,$length,$length)^$this->substr($decoded,0,$length);
+ }
}
diff --git a/web/framework-1.1.17/base/CStatePersister.php b/web/framework/base/CStatePersister.php
similarity index 98%
rename from web/framework-1.1.17/base/CStatePersister.php
rename to web/framework/base/CStatePersister.php
index 86e3d9d..75b56f0 100644
--- a/web/framework-1.1.17/base/CStatePersister.php
+++ b/web/framework/base/CStatePersister.php
@@ -105,7 +105,8 @@ class CStatePersister extends CApplicationComponent implements IStatePersister
* Loads content from file using a shared lock to avoid data corruption when reading
* the file while it is being written by save()
*
- * @return string file contents
+ * @param string $filename file name
+ * @return bool|string file contents
* @since 1.1.17
*/
protected function getContent($filename)
diff --git a/web/framework-1.1.17/base/interfaces.php b/web/framework/base/interfaces.php
similarity index 100%
rename from web/framework-1.1.17/base/interfaces.php
rename to web/framework/base/interfaces.php
diff --git a/web/framework-1.1.17/caching/CApcCache.php b/web/framework/caching/CApcCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CApcCache.php
rename to web/framework/caching/CApcCache.php
diff --git a/web/framework-1.1.17/caching/CCache.php b/web/framework/caching/CCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CCache.php
rename to web/framework/caching/CCache.php
diff --git a/web/framework-1.1.17/caching/CDbCache.php b/web/framework/caching/CDbCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CDbCache.php
rename to web/framework/caching/CDbCache.php
diff --git a/web/framework-1.1.17/caching/CDummyCache.php b/web/framework/caching/CDummyCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CDummyCache.php
rename to web/framework/caching/CDummyCache.php
diff --git a/web/framework-1.1.17/caching/CEAcceleratorCache.php b/web/framework/caching/CEAcceleratorCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CEAcceleratorCache.php
rename to web/framework/caching/CEAcceleratorCache.php
diff --git a/web/framework-1.1.17/caching/CFileCache.php b/web/framework/caching/CFileCache.php
similarity index 99%
rename from web/framework-1.1.17/caching/CFileCache.php
rename to web/framework/caching/CFileCache.php
index 330e74d..6ecff48 100644
--- a/web/framework-1.1.17/caching/CFileCache.php
+++ b/web/framework/caching/CFileCache.php
@@ -130,7 +130,7 @@ class CFileCache extends CCache
{
$cacheFile=$this->getCacheFile($key);
if(($time=$this->filemtime($cacheFile))>time())
- return @file_get_contents($cacheFile,false,null,$this->embedExpiry ? 10 : -1);
+ return @file_get_contents($cacheFile,false,null,$this->embedExpiry ? 10 : null);
elseif($time>0)
@unlink($cacheFile);
return false;
diff --git a/web/framework-1.1.17/caching/CMemCache.php b/web/framework/caching/CMemCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CMemCache.php
rename to web/framework/caching/CMemCache.php
diff --git a/web/framework-1.1.17/caching/CRedisCache.php b/web/framework/caching/CRedisCache.php
similarity index 99%
rename from web/framework-1.1.17/caching/CRedisCache.php
rename to web/framework/caching/CRedisCache.php
index 3d19b84..c122bff 100644
--- a/web/framework-1.1.17/caching/CRedisCache.php
+++ b/web/framework/caching/CRedisCache.php
@@ -95,7 +95,10 @@ class CRedisCache extends CCache
$this->executeCommand('SELECT',array($this->database));
}
else
+ {
+ $this->_socket = null;
throw new CException('Failed to connect to redis: '.$errorDescription,(int)$errorNumber);
+ }
}
/**
diff --git a/web/framework-1.1.17/caching/CWinCache.php b/web/framework/caching/CWinCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CWinCache.php
rename to web/framework/caching/CWinCache.php
diff --git a/web/framework-1.1.17/caching/CXCache.php b/web/framework/caching/CXCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CXCache.php
rename to web/framework/caching/CXCache.php
diff --git a/web/framework-1.1.17/caching/CZendDataCache.php b/web/framework/caching/CZendDataCache.php
similarity index 100%
rename from web/framework-1.1.17/caching/CZendDataCache.php
rename to web/framework/caching/CZendDataCache.php
diff --git a/web/framework-1.1.17/caching/dependencies/CCacheDependency.php b/web/framework/caching/dependencies/CCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CCacheDependency.php
rename to web/framework/caching/dependencies/CCacheDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CChainedCacheDependency.php b/web/framework/caching/dependencies/CChainedCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CChainedCacheDependency.php
rename to web/framework/caching/dependencies/CChainedCacheDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CDbCacheDependency.php b/web/framework/caching/dependencies/CDbCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CDbCacheDependency.php
rename to web/framework/caching/dependencies/CDbCacheDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CDirectoryCacheDependency.php b/web/framework/caching/dependencies/CDirectoryCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CDirectoryCacheDependency.php
rename to web/framework/caching/dependencies/CDirectoryCacheDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CExpressionDependency.php b/web/framework/caching/dependencies/CExpressionDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CExpressionDependency.php
rename to web/framework/caching/dependencies/CExpressionDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CFileCacheDependency.php b/web/framework/caching/dependencies/CFileCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CFileCacheDependency.php
rename to web/framework/caching/dependencies/CFileCacheDependency.php
diff --git a/web/framework-1.1.17/caching/dependencies/CGlobalStateCacheDependency.php b/web/framework/caching/dependencies/CGlobalStateCacheDependency.php
similarity index 100%
rename from web/framework-1.1.17/caching/dependencies/CGlobalStateCacheDependency.php
rename to web/framework/caching/dependencies/CGlobalStateCacheDependency.php
diff --git a/web/framework-1.1.17/cli/commands/MessageCommand.php b/web/framework/cli/commands/MessageCommand.php
similarity index 97%
rename from web/framework-1.1.17/cli/commands/MessageCommand.php
rename to web/framework/cli/commands/MessageCommand.php
index d1e0e2c..00d3b74 100644
--- a/web/framework-1.1.17/cli/commands/MessageCommand.php
+++ b/web/framework/cli/commands/MessageCommand.php
@@ -147,7 +147,15 @@ EOD;
else
$category=substr($matches[$i][1],1,-1);
$message=$matches[$i][2];
- $messages[$category][]=eval("return $message;"); // use eval to eliminate quote escape
+ try
+ {
+ $evalResult = eval("return $message;"); // use eval to eliminate quote escape
+ }
+ catch (ParseError $e)
+ {
+ $evalResult = false;
+ }
+ $messages[$category][] = $evalResult;
}
}
return $messages;
diff --git a/web/framework-1.1.17/cli/commands/MigrateCommand.php b/web/framework/cli/commands/MigrateCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/MigrateCommand.php
rename to web/framework/cli/commands/MigrateCommand.php
diff --git a/web/framework-1.1.17/cli/commands/ShellCommand.php b/web/framework/cli/commands/ShellCommand.php
similarity index 96%
rename from web/framework-1.1.17/cli/commands/ShellCommand.php
rename to web/framework/cli/commands/ShellCommand.php
index 5855f26..06aa82b 100644
--- a/web/framework-1.1.17/cli/commands/ShellCommand.php
+++ b/web/framework/cli/commands/ShellCommand.php
@@ -125,7 +125,18 @@ EOD;
$_command_->run($_args_);
}
else
- echo eval($_line_.';');
+ {
+ try
+ {
+ $evalResult = eval($_line_ . ';');
+ }
+ catch (ParseError $e)
+ {
+ $evalResult = false;
+ }
+
+ echo $evalResult;
+ }
}
catch(Exception $e)
{
diff --git a/web/framework-1.1.17/cli/commands/WebAppCommand.php b/web/framework/cli/commands/WebAppCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/WebAppCommand.php
rename to web/framework/cli/commands/WebAppCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/ControllerCommand.php b/web/framework/cli/commands/shell/ControllerCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/ControllerCommand.php
rename to web/framework/cli/commands/shell/ControllerCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/CrudCommand.php b/web/framework/cli/commands/shell/CrudCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/CrudCommand.php
rename to web/framework/cli/commands/shell/CrudCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/FormCommand.php b/web/framework/cli/commands/shell/FormCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/FormCommand.php
rename to web/framework/cli/commands/shell/FormCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/HelpCommand.php b/web/framework/cli/commands/shell/HelpCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/HelpCommand.php
rename to web/framework/cli/commands/shell/HelpCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/ModelCommand.php b/web/framework/cli/commands/shell/ModelCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/ModelCommand.php
rename to web/framework/cli/commands/shell/ModelCommand.php
diff --git a/web/framework-1.1.17/cli/commands/shell/ModuleCommand.php b/web/framework/cli/commands/shell/ModuleCommand.php
similarity index 100%
rename from web/framework-1.1.17/cli/commands/shell/ModuleCommand.php
rename to web/framework/cli/commands/shell/ModuleCommand.php
diff --git a/web/framework-1.1.17/cli/views/shell/controller/controller.php b/web/framework/cli/views/shell/controller/controller.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/controller/controller.php
rename to web/framework/cli/views/shell/controller/controller.php
diff --git a/web/framework-1.1.17/cli/views/shell/controller/view.php b/web/framework/cli/views/shell/controller/view.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/controller/view.php
rename to web/framework/cli/views/shell/controller/view.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/_form.php b/web/framework/cli/views/shell/crud/_form.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/_form.php
rename to web/framework/cli/views/shell/crud/_form.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/_search.php b/web/framework/cli/views/shell/crud/_search.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/_search.php
rename to web/framework/cli/views/shell/crud/_search.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/_view.php b/web/framework/cli/views/shell/crud/_view.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/_view.php
rename to web/framework/cli/views/shell/crud/_view.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/admin.php b/web/framework/cli/views/shell/crud/admin.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/admin.php
rename to web/framework/cli/views/shell/crud/admin.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/controller.php b/web/framework/cli/views/shell/crud/controller.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/controller.php
rename to web/framework/cli/views/shell/crud/controller.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/create.php b/web/framework/cli/views/shell/crud/create.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/create.php
rename to web/framework/cli/views/shell/crud/create.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/index.php b/web/framework/cli/views/shell/crud/index.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/index.php
rename to web/framework/cli/views/shell/crud/index.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/test.php b/web/framework/cli/views/shell/crud/test.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/test.php
rename to web/framework/cli/views/shell/crud/test.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/update.php b/web/framework/cli/views/shell/crud/update.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/update.php
rename to web/framework/cli/views/shell/crud/update.php
diff --git a/web/framework-1.1.17/cli/views/shell/crud/view.php b/web/framework/cli/views/shell/crud/view.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/crud/view.php
rename to web/framework/cli/views/shell/crud/view.php
diff --git a/web/framework-1.1.17/cli/views/shell/form/action.php b/web/framework/cli/views/shell/form/action.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/form/action.php
rename to web/framework/cli/views/shell/form/action.php
diff --git a/web/framework-1.1.17/cli/views/shell/form/form.php b/web/framework/cli/views/shell/form/form.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/form/form.php
rename to web/framework/cli/views/shell/form/form.php
diff --git a/web/framework-1.1.17/cli/views/shell/model/fixture.php b/web/framework/cli/views/shell/model/fixture.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/model/fixture.php
rename to web/framework/cli/views/shell/model/fixture.php
diff --git a/web/framework-1.1.17/cli/views/shell/model/model.php b/web/framework/cli/views/shell/model/model.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/model/model.php
rename to web/framework/cli/views/shell/model/model.php
diff --git a/web/framework-1.1.17/cli/views/shell/model/test.php b/web/framework/cli/views/shell/model/test.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/model/test.php
rename to web/framework/cli/views/shell/model/test.php
diff --git a/web/framework-1.1.17/cli/views/shell/module/controllers/DefaultController.php b/web/framework/cli/views/shell/module/controllers/DefaultController.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/module/controllers/DefaultController.php
rename to web/framework/cli/views/shell/module/controllers/DefaultController.php
diff --git a/web/framework-1.1.17/cli/views/shell/module/module.php b/web/framework/cli/views/shell/module/module.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/module/module.php
rename to web/framework/cli/views/shell/module/module.php
diff --git a/web/framework-1.1.17/cli/views/shell/module/views/default/index.php b/web/framework/cli/views/shell/module/views/default/index.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/shell/module/views/default/index.php
rename to web/framework/cli/views/shell/module/views/default/index.php
diff --git a/web/framework-1.1.17/cli/views/webapp/assets/git-gitignore b/web/framework/cli/views/webapp/assets/git-gitignore
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/assets/git-gitignore
rename to web/framework/cli/views/webapp/assets/git-gitignore
diff --git a/web/framework-1.1.17/cli/views/webapp/assets/hg-hgkeep b/web/framework/cli/views/webapp/assets/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/assets/hg-hgkeep
rename to web/framework/cli/views/webapp/assets/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/css/bg.gif b/web/framework/cli/views/webapp/css/bg.gif
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/bg.gif
rename to web/framework/cli/views/webapp/css/bg.gif
diff --git a/web/framework-1.1.17/cli/views/webapp/css/form.css b/web/framework/cli/views/webapp/css/form.css
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/form.css
rename to web/framework/cli/views/webapp/css/form.css
diff --git a/web/framework-1.1.17/cli/views/webapp/css/ie.css b/web/framework/cli/views/webapp/css/ie.css
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/ie.css
rename to web/framework/cli/views/webapp/css/ie.css
diff --git a/web/framework-1.1.17/cli/views/webapp/css/main.css b/web/framework/cli/views/webapp/css/main.css
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/main.css
rename to web/framework/cli/views/webapp/css/main.css
diff --git a/web/framework-1.1.17/cli/views/webapp/css/print.css b/web/framework/cli/views/webapp/css/print.css
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/print.css
rename to web/framework/cli/views/webapp/css/print.css
diff --git a/web/framework-1.1.17/cli/views/webapp/css/screen.css b/web/framework/cli/views/webapp/css/screen.css
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/css/screen.css
rename to web/framework/cli/views/webapp/css/screen.css
diff --git a/web/framework-1.1.17/cli/views/webapp/hg-hgignore b/web/framework/cli/views/webapp/hg-hgignore
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/hg-hgignore
rename to web/framework/cli/views/webapp/hg-hgignore
diff --git a/web/framework-1.1.17/cli/views/webapp/images/git-gitkeep b/web/framework/cli/views/webapp/images/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/images/git-gitkeep
rename to web/framework/cli/views/webapp/images/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/images/hg-hgkeep b/web/framework/cli/views/webapp/images/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/images/hg-hgkeep
rename to web/framework/cli/views/webapp/images/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/index-test.php b/web/framework/cli/views/webapp/index-test.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/index-test.php
rename to web/framework/cli/views/webapp/index-test.php
diff --git a/web/framework-1.1.17/cli/views/webapp/index.php b/web/framework/cli/views/webapp/index.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/index.php
rename to web/framework/cli/views/webapp/index.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/.htaccess b/web/framework/cli/views/webapp/protected/.htaccess
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/.htaccess
rename to web/framework/cli/views/webapp/protected/.htaccess
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/commands/shell/git-gitkeep b/web/framework/cli/views/webapp/protected/commands/shell/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/commands/shell/git-gitkeep
rename to web/framework/cli/views/webapp/protected/commands/shell/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/commands/shell/hg-hgkeep b/web/framework/cli/views/webapp/protected/commands/shell/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/commands/shell/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/commands/shell/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/components/Controller.php b/web/framework/cli/views/webapp/protected/components/Controller.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/components/Controller.php
rename to web/framework/cli/views/webapp/protected/components/Controller.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/components/UserIdentity.php b/web/framework/cli/views/webapp/protected/components/UserIdentity.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/components/UserIdentity.php
rename to web/framework/cli/views/webapp/protected/components/UserIdentity.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/console.php b/web/framework/cli/views/webapp/protected/config/console.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/config/console.php
rename to web/framework/cli/views/webapp/protected/config/console.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/database.php b/web/framework/cli/views/webapp/protected/config/database.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/config/database.php
rename to web/framework/cli/views/webapp/protected/config/database.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/main.php b/web/framework/cli/views/webapp/protected/config/main.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/config/main.php
rename to web/framework/cli/views/webapp/protected/config/main.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/config/test.php b/web/framework/cli/views/webapp/protected/config/test.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/config/test.php
rename to web/framework/cli/views/webapp/protected/config/test.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/controllers/SiteController.php b/web/framework/cli/views/webapp/protected/controllers/SiteController.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/controllers/SiteController.php
rename to web/framework/cli/views/webapp/protected/controllers/SiteController.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/schema.mysql.sql b/web/framework/cli/views/webapp/protected/data/schema.mysql.sql
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/data/schema.mysql.sql
rename to web/framework/cli/views/webapp/protected/data/schema.mysql.sql
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/schema.sqlite.sql b/web/framework/cli/views/webapp/protected/data/schema.sqlite.sql
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/data/schema.sqlite.sql
rename to web/framework/cli/views/webapp/protected/data/schema.sqlite.sql
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/data/testdrive.db b/web/framework/cli/views/webapp/protected/data/testdrive.db
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/data/testdrive.db
rename to web/framework/cli/views/webapp/protected/data/testdrive.db
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/extensions/git-gitkeep b/web/framework/cli/views/webapp/protected/extensions/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/extensions/git-gitkeep
rename to web/framework/cli/views/webapp/protected/extensions/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/extensions/hg-hgkeep b/web/framework/cli/views/webapp/protected/extensions/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/extensions/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/extensions/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/messages/git-gitkeep b/web/framework/cli/views/webapp/protected/messages/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/messages/git-gitkeep
rename to web/framework/cli/views/webapp/protected/messages/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/messages/hg-hgkeep b/web/framework/cli/views/webapp/protected/messages/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/messages/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/messages/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/migrations/git-gitkeep b/web/framework/cli/views/webapp/protected/migrations/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/migrations/git-gitkeep
rename to web/framework/cli/views/webapp/protected/migrations/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/migrations/hg-hgkeep b/web/framework/cli/views/webapp/protected/migrations/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/migrations/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/migrations/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/models/ContactForm.php b/web/framework/cli/views/webapp/protected/models/ContactForm.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/models/ContactForm.php
rename to web/framework/cli/views/webapp/protected/models/ContactForm.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php b/web/framework/cli/views/webapp/protected/models/LoginForm.php
similarity index 91%
rename from web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php
rename to web/framework/cli/views/webapp/protected/models/LoginForm.php
index eb36e4a..632c475 100644
--- a/web/framework-1.1.17/cli/views/webapp/protected/models/LoginForm.php
+++ b/web/framework/cli/views/webapp/protected/models/LoginForm.php
@@ -43,6 +43,8 @@ class LoginForm extends CFormModel
/**
* Authenticates the password.
* This is the 'authenticate' validator as declared in rules().
+ * @param string $attribute the name of the attribute to be validated.
+ * @param array $params additional parameters passed with rule when being executed.
*/
public function authenticate($attribute,$params)
{
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/runtime/git-gitignore b/web/framework/cli/views/webapp/protected/runtime/git-gitignore
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/runtime/git-gitignore
rename to web/framework/cli/views/webapp/protected/runtime/git-gitignore
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/runtime/hg-hgkeep b/web/framework/cli/views/webapp/protected/runtime/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/runtime/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/runtime/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/WebTestCase.php b/web/framework/cli/views/webapp/protected/tests/WebTestCase.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/WebTestCase.php
rename to web/framework/cli/views/webapp/protected/tests/WebTestCase.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/bootstrap.php b/web/framework/cli/views/webapp/protected/tests/bootstrap.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/bootstrap.php
rename to web/framework/cli/views/webapp/protected/tests/bootstrap.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/git-gitkeep b/web/framework/cli/views/webapp/protected/tests/fixtures/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/git-gitkeep
rename to web/framework/cli/views/webapp/protected/tests/fixtures/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/fixtures/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/fixtures/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/tests/fixtures/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/functional/SiteTest.php b/web/framework/cli/views/webapp/protected/tests/functional/SiteTest.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/functional/SiteTest.php
rename to web/framework/cli/views/webapp/protected/tests/functional/SiteTest.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/phpunit.xml b/web/framework/cli/views/webapp/protected/tests/phpunit.xml
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/phpunit.xml
rename to web/framework/cli/views/webapp/protected/tests/phpunit.xml
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/report/git-gitignore b/web/framework/cli/views/webapp/protected/tests/report/git-gitignore
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/report/git-gitignore
rename to web/framework/cli/views/webapp/protected/tests/report/git-gitignore
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/report/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/report/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/report/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/tests/report/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/unit/git-gitkeep b/web/framework/cli/views/webapp/protected/tests/unit/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/unit/git-gitkeep
rename to web/framework/cli/views/webapp/protected/tests/unit/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/tests/unit/hg-hgkeep b/web/framework/cli/views/webapp/protected/tests/unit/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/tests/unit/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/tests/unit/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/vendor/git-gitkeep b/web/framework/cli/views/webapp/protected/vendor/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/vendor/git-gitkeep
rename to web/framework/cli/views/webapp/protected/vendor/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/vendor/hg-hgkeep b/web/framework/cli/views/webapp/protected/vendor/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/vendor/hg-hgkeep
rename to web/framework/cli/views/webapp/protected/vendor/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column1.php b/web/framework/cli/views/webapp/protected/views/layouts/column1.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column1.php
rename to web/framework/cli/views/webapp/protected/views/layouts/column1.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column2.php b/web/framework/cli/views/webapp/protected/views/layouts/column2.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/column2.php
rename to web/framework/cli/views/webapp/protected/views/layouts/column2.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/layouts/main.php b/web/framework/cli/views/webapp/protected/views/layouts/main.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/layouts/main.php
rename to web/framework/cli/views/webapp/protected/views/layouts/main.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/contact.php b/web/framework/cli/views/webapp/protected/views/site/contact.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/contact.php
rename to web/framework/cli/views/webapp/protected/views/site/contact.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/error.php b/web/framework/cli/views/webapp/protected/views/site/error.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/error.php
rename to web/framework/cli/views/webapp/protected/views/site/error.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/index.php b/web/framework/cli/views/webapp/protected/views/site/index.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/index.php
rename to web/framework/cli/views/webapp/protected/views/site/index.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/login.php b/web/framework/cli/views/webapp/protected/views/site/login.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/login.php
rename to web/framework/cli/views/webapp/protected/views/site/login.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/views/site/pages/about.php b/web/framework/cli/views/webapp/protected/views/site/pages/about.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/views/site/pages/about.php
rename to web/framework/cli/views/webapp/protected/views/site/pages/about.php
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic b/web/framework/cli/views/webapp/protected/yiic
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/yiic
rename to web/framework/cli/views/webapp/protected/yiic
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic.bat b/web/framework/cli/views/webapp/protected/yiic.bat
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/yiic.bat
rename to web/framework/cli/views/webapp/protected/yiic.bat
diff --git a/web/framework-1.1.17/cli/views/webapp/protected/yiic.php b/web/framework/cli/views/webapp/protected/yiic.php
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/protected/yiic.php
rename to web/framework/cli/views/webapp/protected/yiic.php
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/.htaccess b/web/framework/cli/views/webapp/themes/classic/views/.htaccess
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/.htaccess
rename to web/framework/cli/views/webapp/themes/classic/views/.htaccess
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/layouts/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/git-gitkeep
rename to web/framework/cli/views/webapp/themes/classic/views/layouts/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep
rename to web/framework/cli/views/webapp/themes/classic/views/layouts/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/site/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/git-gitkeep
rename to web/framework/cli/views/webapp/themes/classic/views/site/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/site/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/site/hg-hgkeep
rename to web/framework/cli/views/webapp/themes/classic/views/site/hg-hgkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/git-gitkeep b/web/framework/cli/views/webapp/themes/classic/views/system/git-gitkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/git-gitkeep
rename to web/framework/cli/views/webapp/themes/classic/views/system/git-gitkeep
diff --git a/web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/hg-hgkeep b/web/framework/cli/views/webapp/themes/classic/views/system/hg-hgkeep
similarity index 100%
rename from web/framework-1.1.17/cli/views/webapp/themes/classic/views/system/hg-hgkeep
rename to web/framework/cli/views/webapp/themes/classic/views/system/hg-hgkeep
diff --git a/web/framework-1.1.17/collections/CAttributeCollection.php b/web/framework/collections/CAttributeCollection.php
similarity index 100%
rename from web/framework-1.1.17/collections/CAttributeCollection.php
rename to web/framework/collections/CAttributeCollection.php
diff --git a/web/framework-1.1.17/collections/CConfiguration.php b/web/framework/collections/CConfiguration.php
similarity index 100%
rename from web/framework-1.1.17/collections/CConfiguration.php
rename to web/framework/collections/CConfiguration.php
diff --git a/web/framework-1.1.17/collections/CList.php b/web/framework/collections/CList.php
similarity index 100%
rename from web/framework-1.1.17/collections/CList.php
rename to web/framework/collections/CList.php
diff --git a/web/framework-1.1.17/collections/CListIterator.php b/web/framework/collections/CListIterator.php
similarity index 100%
rename from web/framework-1.1.17/collections/CListIterator.php
rename to web/framework/collections/CListIterator.php
diff --git a/web/framework-1.1.17/collections/CMap.php b/web/framework/collections/CMap.php
similarity index 100%
rename from web/framework-1.1.17/collections/CMap.php
rename to web/framework/collections/CMap.php
diff --git a/web/framework-1.1.17/collections/CMapIterator.php b/web/framework/collections/CMapIterator.php
similarity index 100%
rename from web/framework-1.1.17/collections/CMapIterator.php
rename to web/framework/collections/CMapIterator.php
diff --git a/web/framework-1.1.17/collections/CQueue.php b/web/framework/collections/CQueue.php
similarity index 100%
rename from web/framework-1.1.17/collections/CQueue.php
rename to web/framework/collections/CQueue.php
diff --git a/web/framework-1.1.17/collections/CQueueIterator.php b/web/framework/collections/CQueueIterator.php
similarity index 100%
rename from web/framework-1.1.17/collections/CQueueIterator.php
rename to web/framework/collections/CQueueIterator.php
diff --git a/web/framework-1.1.17/collections/CStack.php b/web/framework/collections/CStack.php
similarity index 100%
rename from web/framework-1.1.17/collections/CStack.php
rename to web/framework/collections/CStack.php
diff --git a/web/framework-1.1.17/collections/CStackIterator.php b/web/framework/collections/CStackIterator.php
similarity index 100%
rename from web/framework-1.1.17/collections/CStackIterator.php
rename to web/framework/collections/CStackIterator.php
diff --git a/web/framework-1.1.17/collections/CTypedList.php b/web/framework/collections/CTypedList.php
similarity index 100%
rename from web/framework-1.1.17/collections/CTypedList.php
rename to web/framework/collections/CTypedList.php
diff --git a/web/framework-1.1.17/collections/CTypedMap.php b/web/framework/collections/CTypedMap.php
similarity index 100%
rename from web/framework-1.1.17/collections/CTypedMap.php
rename to web/framework/collections/CTypedMap.php
diff --git a/web/framework-1.1.17/console/CConsoleApplication.php b/web/framework/console/CConsoleApplication.php
similarity index 100%
rename from web/framework-1.1.17/console/CConsoleApplication.php
rename to web/framework/console/CConsoleApplication.php
diff --git a/web/framework-1.1.17/console/CConsoleCommand.php b/web/framework/console/CConsoleCommand.php
similarity index 100%
rename from web/framework-1.1.17/console/CConsoleCommand.php
rename to web/framework/console/CConsoleCommand.php
diff --git a/web/framework-1.1.17/console/CConsoleCommandBehavior.php b/web/framework/console/CConsoleCommandBehavior.php
similarity index 100%
rename from web/framework-1.1.17/console/CConsoleCommandBehavior.php
rename to web/framework/console/CConsoleCommandBehavior.php
diff --git a/web/framework-1.1.17/console/CConsoleCommandEvent.php b/web/framework/console/CConsoleCommandEvent.php
similarity index 100%
rename from web/framework-1.1.17/console/CConsoleCommandEvent.php
rename to web/framework/console/CConsoleCommandEvent.php
diff --git a/web/framework-1.1.17/console/CConsoleCommandRunner.php b/web/framework/console/CConsoleCommandRunner.php
similarity index 100%
rename from web/framework-1.1.17/console/CConsoleCommandRunner.php
rename to web/framework/console/CConsoleCommandRunner.php
diff --git a/web/framework-1.1.17/console/CHelpCommand.php b/web/framework/console/CHelpCommand.php
similarity index 100%
rename from web/framework-1.1.17/console/CHelpCommand.php
rename to web/framework/console/CHelpCommand.php
diff --git a/web/framework-1.1.17/db/CDbCommand.php b/web/framework/db/CDbCommand.php
similarity index 100%
rename from web/framework-1.1.17/db/CDbCommand.php
rename to web/framework/db/CDbCommand.php
diff --git a/web/framework-1.1.17/db/CDbConnection.php b/web/framework/db/CDbConnection.php
similarity index 97%
rename from web/framework-1.1.17/db/CDbConnection.php
rename to web/framework/db/CDbConnection.php
index 3fd88d8..0de6080 100644
--- a/web/framework-1.1.17/db/CDbConnection.php
+++ b/web/framework/db/CDbConnection.php
@@ -582,6 +582,26 @@ class CDbConnection extends CApplicationComponent
return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
}
+ /**
+ * Quotes a value for use in a query using a given type.
+ * @param mixed $value the value to be quoted.
+ * @param integer $type The type to be used for quoting.
+ * This should be one of the `PDO::PARAM_*` constants described in
+ * {@link http://www.php.net/manual/en/pdo.constants.php PDO documentation}.
+ * This parameter will be passed to the `PDO::quote()` function.
+ * @return string the properly quoted string.
+ * @see http://www.php.net/manual/en/function.PDO-quote.php
+ * @since 1.1.18
+ */
+ public function quoteValueWithType($value, $type)
+ {
+ $this->setActive(true);
+ if(($quoted=$this->_pdo->quote($value, $type))!==false)
+ return $quoted;
+ else // the driver doesn't support quote (e.g. oci)
+ return "'" . addcslashes(str_replace("'", "''", $value), "\000\n\r\\\032") . "'";
+ }
+
/**
* Quotes a table name for use in a query.
* If the table name contains schema prefix, the prefix will also be properly quoted.
diff --git a/web/framework-1.1.17/db/CDbDataReader.php b/web/framework/db/CDbDataReader.php
similarity index 100%
rename from web/framework-1.1.17/db/CDbDataReader.php
rename to web/framework/db/CDbDataReader.php
diff --git a/web/framework-1.1.17/db/CDbException.php b/web/framework/db/CDbException.php
similarity index 100%
rename from web/framework-1.1.17/db/CDbException.php
rename to web/framework/db/CDbException.php
diff --git a/web/framework-1.1.17/db/CDbMigration.php b/web/framework/db/CDbMigration.php
similarity index 100%
rename from web/framework-1.1.17/db/CDbMigration.php
rename to web/framework/db/CDbMigration.php
diff --git a/web/framework-1.1.17/db/CDbTransaction.php b/web/framework/db/CDbTransaction.php
similarity index 100%
rename from web/framework-1.1.17/db/CDbTransaction.php
rename to web/framework/db/CDbTransaction.php
diff --git a/web/framework-1.1.17/db/ar/CActiveFinder.php b/web/framework/db/ar/CActiveFinder.php
similarity index 99%
rename from web/framework-1.1.17/db/ar/CActiveFinder.php
rename to web/framework/db/ar/CActiveFinder.php
index 36eb86c..4af164c 100644
--- a/web/framework-1.1.17/db/ar/CActiveFinder.php
+++ b/web/framework/db/ar/CActiveFinder.php
@@ -194,6 +194,7 @@ class CActiveFinder extends CComponent
* @param CJoinElement $parent the parent tree node
* @param mixed $with the names of the related objects relative to the parent tree node
* @param array $options additional query options to be merged with the relation
+ * @return CJoinElement|mixed
* @throws CDbException if given parent tree node is an instance of {@link CStatElement}
* or relation is not defined in the given parent's tree node model class
*/
diff --git a/web/framework-1.1.17/db/ar/CActiveRecord.php b/web/framework/db/ar/CActiveRecord.php
similarity index 99%
rename from web/framework-1.1.17/db/ar/CActiveRecord.php
rename to web/framework/db/ar/CActiveRecord.php
index 0619ee2..5f1d1d6 100644
--- a/web/framework-1.1.17/db/ar/CActiveRecord.php
+++ b/web/framework/db/ar/CActiveRecord.php
@@ -150,6 +150,7 @@ abstract class CActiveRecord extends CModel
* This method is overridden so that AR attributes can be accessed like properties.
* @param string $name property name
* @param mixed $value property value
+ * @throws CException
*/
public function __set($name,$value)
{
@@ -188,6 +189,7 @@ abstract class CActiveRecord extends CModel
* This method overrides the parent implementation by clearing
* the specified attribute value.
* @param string $name the property name or the event name
+ * @throws CException
*/
public function __unset($name)
{
@@ -812,9 +814,10 @@ abstract class CActiveRecord extends CModel
}
/**
- * Returns if the current record is new.
+ * Returns if the current record is new (was never saved to database)
* @return boolean whether the record is new and should be inserted when calling {@link save}.
- * This property is automatically set in constructor and {@link populateRecord}.
+ * This property is automatically set in constructor and {@link populateRecord} and is set
+ * to false right after inserting record to database.
* Defaults to false, but it will be set to true if the instance is created using
* the new operator.
*/
diff --git a/web/framework-1.1.17/db/ar/CActiveRecordBehavior.php b/web/framework/db/ar/CActiveRecordBehavior.php
similarity index 100%
rename from web/framework-1.1.17/db/ar/CActiveRecordBehavior.php
rename to web/framework/db/ar/CActiveRecordBehavior.php
diff --git a/web/framework-1.1.17/db/schema/CDbColumnSchema.php b/web/framework/db/schema/CDbColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbColumnSchema.php
rename to web/framework/db/schema/CDbColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/CDbCommandBuilder.php b/web/framework/db/schema/CDbCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbCommandBuilder.php
rename to web/framework/db/schema/CDbCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/CDbCriteria.php b/web/framework/db/schema/CDbCriteria.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbCriteria.php
rename to web/framework/db/schema/CDbCriteria.php
diff --git a/web/framework-1.1.17/db/schema/CDbExpression.php b/web/framework/db/schema/CDbExpression.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbExpression.php
rename to web/framework/db/schema/CDbExpression.php
diff --git a/web/framework-1.1.17/db/schema/CDbSchema.php b/web/framework/db/schema/CDbSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbSchema.php
rename to web/framework/db/schema/CDbSchema.php
diff --git a/web/framework-1.1.17/db/schema/CDbTableSchema.php b/web/framework/db/schema/CDbTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/CDbTableSchema.php
rename to web/framework/db/schema/CDbTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridColumnSchema.php b/web/framework/db/schema/cubrid/CCubridColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/cubrid/CCubridColumnSchema.php
rename to web/framework/db/schema/cubrid/CCubridColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridSchema.php b/web/framework/db/schema/cubrid/CCubridSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/cubrid/CCubridSchema.php
rename to web/framework/db/schema/cubrid/CCubridSchema.php
diff --git a/web/framework-1.1.17/db/schema/cubrid/CCubridTableSchema.php b/web/framework/db/schema/cubrid/CCubridTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/cubrid/CCubridTableSchema.php
rename to web/framework/db/schema/cubrid/CCubridTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlColumnSchema.php b/web/framework/db/schema/mssql/CMssqlColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlColumnSchema.php
rename to web/framework/db/schema/mssql/CMssqlColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlCommandBuilder.php b/web/framework/db/schema/mssql/CMssqlCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlCommandBuilder.php
rename to web/framework/db/schema/mssql/CMssqlCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlPdoAdapter.php b/web/framework/db/schema/mssql/CMssqlPdoAdapter.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlPdoAdapter.php
rename to web/framework/db/schema/mssql/CMssqlPdoAdapter.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlSchema.php b/web/framework/db/schema/mssql/CMssqlSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlSchema.php
rename to web/framework/db/schema/mssql/CMssqlSchema.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php b/web/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
rename to web/framework/db/schema/mssql/CMssqlSqlsrvPdoAdapter.php
diff --git a/web/framework-1.1.17/db/schema/mssql/CMssqlTableSchema.php b/web/framework/db/schema/mssql/CMssqlTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mssql/CMssqlTableSchema.php
rename to web/framework/db/schema/mssql/CMssqlTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlColumnSchema.php b/web/framework/db/schema/mysql/CMysqlColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mysql/CMysqlColumnSchema.php
rename to web/framework/db/schema/mysql/CMysqlColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlCommandBuilder.php b/web/framework/db/schema/mysql/CMysqlCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mysql/CMysqlCommandBuilder.php
rename to web/framework/db/schema/mysql/CMysqlCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlSchema.php b/web/framework/db/schema/mysql/CMysqlSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mysql/CMysqlSchema.php
rename to web/framework/db/schema/mysql/CMysqlSchema.php
diff --git a/web/framework-1.1.17/db/schema/mysql/CMysqlTableSchema.php b/web/framework/db/schema/mysql/CMysqlTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/mysql/CMysqlTableSchema.php
rename to web/framework/db/schema/mysql/CMysqlTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/oci/COciColumnSchema.php b/web/framework/db/schema/oci/COciColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/oci/COciColumnSchema.php
rename to web/framework/db/schema/oci/COciColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/oci/COciCommandBuilder.php b/web/framework/db/schema/oci/COciCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/oci/COciCommandBuilder.php
rename to web/framework/db/schema/oci/COciCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/oci/COciSchema.php b/web/framework/db/schema/oci/COciSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/oci/COciSchema.php
rename to web/framework/db/schema/oci/COciSchema.php
diff --git a/web/framework-1.1.17/db/schema/oci/COciTableSchema.php b/web/framework/db/schema/oci/COciTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/oci/COciTableSchema.php
rename to web/framework/db/schema/oci/COciTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlColumnSchema.php b/web/framework/db/schema/pgsql/CPgsqlColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlColumnSchema.php
rename to web/framework/db/schema/pgsql/CPgsqlColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlCommandBuilder.php b/web/framework/db/schema/pgsql/CPgsqlCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlCommandBuilder.php
rename to web/framework/db/schema/pgsql/CPgsqlCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlSchema.php b/web/framework/db/schema/pgsql/CPgsqlSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlSchema.php
rename to web/framework/db/schema/pgsql/CPgsqlSchema.php
diff --git a/web/framework-1.1.17/db/schema/pgsql/CPgsqlTableSchema.php b/web/framework/db/schema/pgsql/CPgsqlTableSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/pgsql/CPgsqlTableSchema.php
rename to web/framework/db/schema/pgsql/CPgsqlTableSchema.php
diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteColumnSchema.php b/web/framework/db/schema/sqlite/CSqliteColumnSchema.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/sqlite/CSqliteColumnSchema.php
rename to web/framework/db/schema/sqlite/CSqliteColumnSchema.php
diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteCommandBuilder.php b/web/framework/db/schema/sqlite/CSqliteCommandBuilder.php
similarity index 100%
rename from web/framework-1.1.17/db/schema/sqlite/CSqliteCommandBuilder.php
rename to web/framework/db/schema/sqlite/CSqliteCommandBuilder.php
diff --git a/web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php b/web/framework/db/schema/sqlite/CSqliteSchema.php
similarity index 98%
rename from web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php
rename to web/framework/db/schema/sqlite/CSqliteSchema.php
index bdf31be..b6294b1 100644
--- a/web/framework-1.1.17/db/schema/sqlite/CSqliteSchema.php
+++ b/web/framework/db/schema/sqlite/CSqliteSchema.php
@@ -225,6 +225,7 @@ class CSqliteSchema extends CDbSchema
* @param string $column the name of the column to be dropped. The name will be properly quoted by the method.
* @return string the SQL statement for dropping a DB column.
* @since 1.1.6
+ * @throws CDbException
*/
public function dropColumn($table, $column)
{
@@ -239,6 +240,7 @@ class CSqliteSchema extends CDbSchema
* @param string $newName the new name of the column. The name will be properly quoted by the method.
* @return string the SQL statement for renaming a DB column.
* @since 1.1.6
+ * @throws CDbException
*/
public function renameColumn($table, $name, $newName)
{
@@ -257,6 +259,7 @@ class CSqliteSchema extends CDbSchema
* @param string $update the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
* @return string the SQL statement for adding a foreign key constraint to an existing table.
* @since 1.1.6
+ * @throws CDbException
*/
public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null)
{
@@ -270,6 +273,7 @@ class CSqliteSchema extends CDbSchema
* @param string $table the table whose foreign is to be dropped. The name will be properly quoted by the method.
* @return string the SQL statement for dropping a foreign key constraint.
* @since 1.1.6
+ * @throws CDbException
*/
public function dropForeignKey($name, $table)
{
@@ -286,6 +290,7 @@ class CSqliteSchema extends CDbSchema
* For example, 'string' will be turned into 'varchar(255)', while 'string not null' will become 'varchar(255) not null'.
* @return string the SQL statement for changing the definition of a column.
* @since 1.1.6
+ * @throws CDbException
*/
public function alterColumn($table, $column, $type)
{
@@ -312,6 +317,7 @@ class CSqliteSchema extends CDbSchema
* @param string|array $columns comma separated string or array of columns that the primary key will consist of.
* @return string the SQL statement for adding a primary key constraint to an existing table.
* @since 1.1.13
+ * @throws CDbException
*/
public function addPrimaryKey($name,$table,$columns)
{
@@ -326,6 +332,7 @@ class CSqliteSchema extends CDbSchema
* @param string $table the table that the primary key constraint will be removed from.
* @return string the SQL statement for removing a primary key constraint from an existing table.
* @since 1.1.13
+ * @throws CDbException
*/
public function dropPrimaryKey($name,$table)
{
diff --git a/web/framework-1.1.17/gii/CCodeFile.php b/web/framework/gii/CCodeFile.php
similarity index 100%
rename from web/framework-1.1.17/gii/CCodeFile.php
rename to web/framework/gii/CCodeFile.php
diff --git a/web/framework-1.1.17/gii/CCodeForm.php b/web/framework/gii/CCodeForm.php
similarity index 100%
rename from web/framework-1.1.17/gii/CCodeForm.php
rename to web/framework/gii/CCodeForm.php
diff --git a/web/framework-1.1.17/gii/CCodeGenerator.php b/web/framework/gii/CCodeGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/CCodeGenerator.php
rename to web/framework/gii/CCodeGenerator.php
diff --git a/web/framework-1.1.17/gii/CCodeModel.php b/web/framework/gii/CCodeModel.php
similarity index 100%
rename from web/framework-1.1.17/gii/CCodeModel.php
rename to web/framework/gii/CCodeModel.php
diff --git a/web/framework-1.1.17/gii/GiiModule.php b/web/framework/gii/GiiModule.php
similarity index 100%
rename from web/framework-1.1.17/gii/GiiModule.php
rename to web/framework/gii/GiiModule.php
diff --git a/web/framework-1.1.17/gii/assets/css/ie.css b/web/framework/gii/assets/css/ie.css
similarity index 100%
rename from web/framework-1.1.17/gii/assets/css/ie.css
rename to web/framework/gii/assets/css/ie.css
diff --git a/web/framework-1.1.17/gii/assets/css/main.css b/web/framework/gii/assets/css/main.css
similarity index 100%
rename from web/framework-1.1.17/gii/assets/css/main.css
rename to web/framework/gii/assets/css/main.css
diff --git a/web/framework-1.1.17/gii/assets/css/print.css b/web/framework/gii/assets/css/print.css
similarity index 100%
rename from web/framework-1.1.17/gii/assets/css/print.css
rename to web/framework/gii/assets/css/print.css
diff --git a/web/framework-1.1.17/gii/assets/css/screen.css b/web/framework/gii/assets/css/screen.css
similarity index 100%
rename from web/framework-1.1.17/gii/assets/css/screen.css
rename to web/framework/gii/assets/css/screen.css
diff --git a/web/framework-1.1.17/gii/assets/images/logo.png b/web/framework/gii/assets/images/logo.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/images/logo.png
rename to web/framework/gii/assets/images/logo.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/blank.gif b/web/framework/gii/assets/js/fancybox/blank.gif
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/blank.gif
rename to web/framework/gii/assets/js/fancybox/blank.gif
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_close.png b/web/framework/gii/assets/js/fancybox/fancy_close.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_close.png
rename to web/framework/gii/assets/js/fancybox/fancy_close.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_loading.png b/web/framework/gii/assets/js/fancybox/fancy_loading.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_loading.png
rename to web/framework/gii/assets/js/fancybox/fancy_loading.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_left.png b/web/framework/gii/assets/js/fancybox/fancy_nav_left.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_left.png
rename to web/framework/gii/assets/js/fancybox/fancy_nav_left.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_right.png b/web/framework/gii/assets/js/fancybox/fancy_nav_right.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_nav_right.png
rename to web/framework/gii/assets/js/fancybox/fancy_nav_right.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_e.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_e.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_e.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_e.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_n.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_n.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_n.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_n.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_ne.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_ne.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_ne.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_ne.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_nw.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_nw.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_nw.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_nw.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_s.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_s.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_s.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_s.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_se.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_se.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_se.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_se.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_sw.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_sw.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_sw.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_sw.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_w.png b/web/framework/gii/assets/js/fancybox/fancy_shadow_w.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_shadow_w.png
rename to web/framework/gii/assets/js/fancybox/fancy_shadow_w.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_left.png b/web/framework/gii/assets/js/fancybox/fancy_title_left.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_left.png
rename to web/framework/gii/assets/js/fancybox/fancy_title_left.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_main.png b/web/framework/gii/assets/js/fancybox/fancy_title_main.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_main.png
rename to web/framework/gii/assets/js/fancybox/fancy_title_main.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_over.png b/web/framework/gii/assets/js/fancybox/fancy_title_over.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_over.png
rename to web/framework/gii/assets/js/fancybox/fancy_title_over.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_right.png b/web/framework/gii/assets/js/fancybox/fancy_title_right.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancy_title_right.png
rename to web/framework/gii/assets/js/fancybox/fancy_title_right.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox-x.png b/web/framework/gii/assets/js/fancybox/fancybox-x.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox-x.png
rename to web/framework/gii/assets/js/fancybox/fancybox-x.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox-y.png b/web/framework/gii/assets/js/fancybox/fancybox-y.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox-y.png
rename to web/framework/gii/assets/js/fancybox/fancybox-y.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/fancybox.png b/web/framework/gii/assets/js/fancybox/fancybox.png
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/fancybox.png
rename to web/framework/gii/assets/js/fancybox/fancybox.png
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css b/web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css
rename to web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.css
diff --git a/web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js b/web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js
rename to web/framework/gii/assets/js/fancybox/jquery.fancybox-1.3.1.pack.js
diff --git a/web/framework-1.1.17/gii/assets/js/main.js b/web/framework/gii/assets/js/main.js
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/main.js
rename to web/framework/gii/assets/js/main.js
diff --git a/web/framework-1.1.17/gii/assets/js/tooltip.js b/web/framework/gii/assets/js/tooltip.js
similarity index 100%
rename from web/framework-1.1.17/gii/assets/js/tooltip.js
rename to web/framework/gii/assets/js/tooltip.js
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff.php b/web/framework/gii/components/Pear/Text/Diff.php
similarity index 95%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff.php
rename to web/framework/gii/components/Pear/Text/Diff.php
index 4b30968..eb0079a 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff.php
+++ b/web/framework/gii/components/Pear/Text/Diff.php
@@ -6,10 +6,10 @@
* The original PHP version of this code was written by Geoffrey T. Dairiki
*
, and is used/adapted with his permission.
*
- * $Horde: framework/Text_Diff/Diff.php,v 1.11.2.11 2008/02/24 10:57:46 jan Exp $
+ * $Horde: framework/Text_Diff/Diff.php,v 1.11.2.12 2009/01/06 15:23:41 jan Exp $
*
* Copyright 2004 Geoffrey T. Dairiki
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -35,7 +35,7 @@ class Text_Diff {
* Normally an array of two arrays, each
* containing the lines from a file.
*/
- function Text_Diff($engine, $params)
+ function __construct($engine, $params)
{
// Backward compatibility workaround.
if (!is_string($engine)) {
@@ -307,13 +307,13 @@ class Text_MappedDiff extends Text_Diff {
* @param array $mapped_to_lines This array should have the same number
* of elements as $to_lines.
*/
- function Text_MappedDiff($from_lines, $to_lines,
+ function __construct($from_lines, $to_lines,
$mapped_from_lines, $mapped_to_lines)
{
assert(count($from_lines) == count($mapped_from_lines));
assert(count($to_lines) == count($mapped_to_lines));
- parent::Text_Diff($mapped_from_lines, $mapped_to_lines);
+ parent::__construct($mapped_from_lines, $mapped_to_lines);
$xi = $yi = 0;
for ($i = 0; $i < count($this->_edits); $i++) {
@@ -369,7 +369,7 @@ class Text_Diff_Op {
*/
class Text_Diff_Op_copy extends Text_Diff_Op {
- function Text_Diff_Op_copy($orig, $final = false)
+ function __construct($orig, $final = false)
{
if (!is_array($final)) {
$final = $orig;
@@ -394,7 +394,7 @@ class Text_Diff_Op_copy extends Text_Diff_Op {
*/
class Text_Diff_Op_delete extends Text_Diff_Op {
- function Text_Diff_Op_delete($lines)
+ function __construct($lines)
{
$this->orig = $lines;
$this->final = false;
@@ -416,7 +416,7 @@ class Text_Diff_Op_delete extends Text_Diff_Op {
*/
class Text_Diff_Op_add extends Text_Diff_Op {
- function Text_Diff_Op_add($lines)
+ function __construct($lines)
{
$this->final = $lines;
$this->orig = false;
@@ -438,7 +438,7 @@ class Text_Diff_Op_add extends Text_Diff_Op {
*/
class Text_Diff_Op_change extends Text_Diff_Op {
- function Text_Diff_Op_change($orig, $final)
+ function __construct($orig, $final)
{
$this->orig = $orig;
$this->final = $final;
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php b/web/framework/gii/components/Pear/Text/Diff/Engine/native.php
similarity index 99%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php
rename to web/framework/gii/components/Pear/Text/Diff/Engine/native.php
index 410f849..86240e5 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/native.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Engine/native.php
@@ -18,9 +18,9 @@
* Geoffrey T. Dairiki . The original PHP version of this
* code was written by him, and is used/adapted with his permission.
*
- * $Horde: framework/Text_Diff/Diff/Engine/native.php,v 1.7.2.4 2008/01/04 10:38:10 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Engine/native.php,v 1.7.2.5 2009/01/06 15:23:41 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php b/web/framework/gii/components/Pear/Text/Diff/Engine/shell.php
similarity index 93%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php
rename to web/framework/gii/components/Pear/Text/Diff/Engine/shell.php
index f1aaa98..7f858cb 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/shell.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Engine/shell.php
@@ -5,9 +5,9 @@
* This class uses the Unix `diff` program via shell_exec to compute the
* differences between the two input arrays.
*
- * $Horde: framework/Text_Diff/Diff/Engine/shell.php,v 1.6.2.3 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Engine/shell.php,v 1.6.2.4 2009/01/06 15:23:41 jan Exp $
*
- * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -138,8 +138,10 @@ class Text_Diff_Engine_shell {
* @access private
*
* @param array &$text_lines Either $from_lines or $to_lines
- * @param integer &$line_no Current line number
- * @param integer $end Optional end line, when we want to chop more than one line.
+ * @param int &$line_no Current line number
+ * @param int $end Optional end line, when we want to chop more
+ * than one line.
+ *
* @return array The chopped lines
*/
function _getLines(&$text_lines, &$line_no, $end = false)
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php b/web/framework/gii/components/Pear/Text/Diff/Engine/string.php
similarity index 93%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php
rename to web/framework/gii/components/Pear/Text/Diff/Engine/string.php
index 4b29daa..9352e60 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/string.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Engine/string.php
@@ -10,10 +10,10 @@
* echo $renderer->render($diff);
*
*
- * $Horde: framework/Text_Diff/Diff/Engine/string.php,v 1.5.2.5 2008/09/10 08:31:58 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Engine/string.php,v 1.5.2.7 2009/07/24 13:04:43 jan Exp $
*
* Copyright 2005 Örjan Persson
- * Copyright 2005-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -39,6 +39,19 @@ class Text_Diff_Engine_string {
*/
function diff($diff, $mode = 'autodetect')
{
+ // Detect line breaks.
+ $lnbr = "\n";
+ if (strpos($diff, "\r\n") !== false) {
+ $lnbr = "\r\n";
+ } elseif (strpos($diff, "\r") !== false) {
+ $lnbr = "\r";
+ }
+
+ // Make sure we have a line break at the EOF.
+ if (substr($diff, -strlen($lnbr)) != $lnbr) {
+ $diff .= $lnbr;
+ }
+
if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
return PEAR::raiseError('Type of diff is unsupported');
}
@@ -56,7 +69,7 @@ class Text_Diff_Engine_string {
}
// Split by new line and remove the diff header, if there is one.
- $diff = explode("\n", $diff);
+ $diff = explode($lnbr, $diff);
if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
($mode == 'unified' && strpos($diff[0], '---') === 0)) {
array_shift($diff);
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php b/web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php
similarity index 89%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php
rename to web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php
index 681ea4c..da8f174 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Engine/xdiff.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Engine/xdiff.php
@@ -5,9 +5,9 @@
* This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
* to compute the differences between the two input arrays.
*
- * $Horde: framework/Text_Diff/Diff/Engine/xdiff.php,v 1.4.2.3 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Engine/xdiff.php,v 1.4.2.5 2009/07/24 13:06:24 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -42,6 +42,9 @@ class Text_Diff_Engine_xdiff {
* valid, albeit a little less descriptive and efficient. */
$edits = array();
foreach ($diff as $line) {
+ if (!strlen($line)) {
+ continue;
+ }
switch ($line[0]) {
case ' ':
$edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php b/web/framework/gii/components/Pear/Text/Diff/Mapped.php
similarity index 86%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php
rename to web/framework/gii/components/Pear/Text/Diff/Mapped.php
index 7f67184..e4a3e01 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Mapped.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Mapped.php
@@ -1,8 +1,8 @@
$value) {
$v = '_' . $param;
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/context.php
similarity index 94%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php
rename to web/framework/gii/components/Pear/Text/Diff/Renderer/context.php
index 7977500..af53801 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/context.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/context.php
@@ -4,9 +4,9 @@
*
* This class renders the diff in classic "context diff" format.
*
- * $Horde: framework/Text_Diff/Diff/Renderer/context.php,v 1.3.2.3 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Renderer/context.php,v 1.3.2.4 2009/01/06 15:23:42 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php
similarity index 90%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php
rename to web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php
index 7f4e5ef..5dd20d2 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/inline.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/inline.php
@@ -2,9 +2,9 @@
/**
* "Inline" diff renderer.
*
- * $Horde: framework/Text_Diff/Diff/Renderer/inline.php,v 1.4.10.14 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Renderer/inline.php,v 1.4.10.16 2009/07/24 13:25:29 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -131,12 +131,14 @@ class Text_Diff_Renderer_inline extends Text_Diff_Renderer {
/* We want to split on word boundaries, but we need to
* preserve whitespace as well. Therefore we split on words,
* but include all blocks of whitespace in the wordlist. */
- $diff = new Text_Diff($this->_splitOnWords($text1, $nl),
- $this->_splitOnWords($text2, $nl));
+ $diff = new Text_Diff('native',
+ array($this->_splitOnWords($text1, $nl),
+ $this->_splitOnWords($text2, $nl)));
/* Get the diff in inline format. */
- $renderer = new Text_Diff_Renderer_inline(array_merge($this->getParams(),
- array('split_level' => 'words')));
+ $renderer = new Text_Diff_Renderer_inline
+ (array_merge($this->getParams(),
+ array('split_level' => 'words')));
/* Run the diff and get the output. */
return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php b/web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php
similarity index 93%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php
rename to web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php
index 943d519..f990f72 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/Renderer/unified.php
+++ b/web/framework/gii/components/Pear/Text/Diff/Renderer/unified.php
@@ -4,9 +4,9 @@
*
* This class renders the diff in classic "unified diff" format.
*
- * $Horde: framework/Text_Diff/Diff/Renderer/unified.php,v 1.3.10.6 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/Renderer/unified.php,v 1.3.10.7 2009/01/06 15:23:42 jan Exp $
*
- * Copyright 2004-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php b/web/framework/gii/components/Pear/Text/Diff/ThreeWay.php
similarity index 94%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php
rename to web/framework/gii/components/Pear/Text/Diff/ThreeWay.php
index 4e4b939..a247574 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff/ThreeWay.php
+++ b/web/framework/gii/components/Pear/Text/Diff/ThreeWay.php
@@ -2,9 +2,9 @@
/**
* A class for computing three way diffs.
*
- * $Horde: framework/Text_Diff/Diff/ThreeWay.php,v 1.3.2.3 2008/01/04 10:37:27 jan Exp $
+ * $Horde: framework/Text_Diff/Diff/ThreeWay.php,v 1.3.2.4 2009/01/06 15:23:41 jan Exp $
*
- * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -38,7 +38,7 @@ class Text_Diff_ThreeWay extends Text_Diff {
* @param array $final1 The first version to compare to.
* @param array $final2 The second version to compare to.
*/
- function Text_Diff_ThreeWay($orig, $final1, $final2)
+ function __construct($orig, $final1, $final2)
{
if (extension_loaded('xdiff')) {
$engine = new Text_Diff_Engine_xdiff();
@@ -155,7 +155,7 @@ class Text_Diff_ThreeWay extends Text_Diff {
*/
class Text_Diff_ThreeWay_Op {
- function Text_Diff_ThreeWay_Op($orig = false, $final1 = false, $final2 = false)
+ function __construct($orig = false, $final1 = false, $final2 = false)
{
$this->orig = $orig ? $orig : array();
$this->final1 = $final1 ? $final1 : array();
@@ -194,7 +194,7 @@ class Text_Diff_ThreeWay_Op {
*/
class Text_Diff_ThreeWay_Op_copy extends Text_Diff_ThreeWay_Op {
- function Text_Diff_ThreeWay_Op_Copy($lines = false)
+ function __construct($lines = false)
{
$this->orig = $lines ? $lines : array();
$this->final1 = &$this->orig;
@@ -221,7 +221,7 @@ class Text_Diff_ThreeWay_Op_copy extends Text_Diff_ThreeWay_Op {
*/
class Text_Diff_ThreeWay_BlockBuilder {
- function Text_Diff_ThreeWay_BlockBuilder()
+ function __construct()
{
$this->_init();
}
diff --git a/web/framework-1.1.17/gii/components/Pear/Text/Diff3.php b/web/framework/gii/components/Pear/Text/Diff3.php
similarity index 95%
rename from web/framework-1.1.17/gii/components/Pear/Text/Diff3.php
rename to web/framework/gii/components/Pear/Text/Diff3.php
index 2c28370..fa6eb0b 100644
--- a/web/framework-1.1.17/gii/components/Pear/Text/Diff3.php
+++ b/web/framework/gii/components/Pear/Text/Diff3.php
@@ -2,9 +2,9 @@
/**
* A class for computing three way diffs.
*
- * $Horde: framework/Text_Diff/Diff3.php,v 1.2.10.6 2008/01/04 10:37:26 jan Exp $
+ * $Horde: framework/Text_Diff/Diff3.php,v 1.2.10.7 2009/01/06 15:23:41 jan Exp $
*
- * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you did
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
@@ -38,7 +38,7 @@ class Text_Diff3 extends Text_Diff {
* @param array $final1 The first version to compare to.
* @param array $final2 The second version to compare to.
*/
- function Text_Diff3($orig, $final1, $final2)
+ function __construct($orig, $final1, $final2)
{
if (extension_loaded('xdiff')) {
$engine = new Text_Diff_Engine_xdiff();
@@ -155,7 +155,7 @@ class Text_Diff3 extends Text_Diff {
*/
class Text_Diff3_Op {
- function Text_Diff3_Op($orig = false, $final1 = false, $final2 = false)
+ function __construct($orig = false, $final1 = false, $final2 = false)
{
$this->orig = $orig ? $orig : array();
$this->final1 = $final1 ? $final1 : array();
@@ -221,7 +221,7 @@ class Text_Diff3_Op_copy extends Text_Diff3_Op {
*/
class Text_Diff3_BlockBuilder {
- function Text_Diff3_BlockBuilder()
+ function __construct()
{
$this->_init();
}
diff --git a/web/framework-1.1.17/gii/components/TextDiff.php b/web/framework/gii/components/TextDiff.php
similarity index 100%
rename from web/framework-1.1.17/gii/components/TextDiff.php
rename to web/framework/gii/components/TextDiff.php
diff --git a/web/framework-1.1.17/gii/components/UserIdentity.php b/web/framework/gii/components/UserIdentity.php
similarity index 96%
rename from web/framework-1.1.17/gii/components/UserIdentity.php
rename to web/framework/gii/components/UserIdentity.php
index 81d6aa1..94798af 100644
--- a/web/framework-1.1.17/gii/components/UserIdentity.php
+++ b/web/framework/gii/components/UserIdentity.php
@@ -5,6 +5,7 @@ class UserIdentity extends CUserIdentity
/**
* Authenticates a user.
* @return boolean whether authentication succeeds.
+ * @throws CException
*/
public function authenticate()
{
diff --git a/web/framework-1.1.17/gii/controllers/DefaultController.php b/web/framework/gii/controllers/DefaultController.php
similarity index 100%
rename from web/framework-1.1.17/gii/controllers/DefaultController.php
rename to web/framework/gii/controllers/DefaultController.php
diff --git a/web/framework-1.1.17/gii/generators/controller/ControllerCode.php b/web/framework/gii/generators/controller/ControllerCode.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/controller/ControllerCode.php
rename to web/framework/gii/generators/controller/ControllerCode.php
diff --git a/web/framework-1.1.17/gii/generators/controller/ControllerGenerator.php b/web/framework/gii/generators/controller/ControllerGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/controller/ControllerGenerator.php
rename to web/framework/gii/generators/controller/ControllerGenerator.php
diff --git a/web/framework-1.1.17/gii/generators/controller/templates/default/controller.php b/web/framework/gii/generators/controller/templates/default/controller.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/controller/templates/default/controller.php
rename to web/framework/gii/generators/controller/templates/default/controller.php
diff --git a/web/framework-1.1.17/gii/generators/controller/templates/default/view.php b/web/framework/gii/generators/controller/templates/default/view.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/controller/templates/default/view.php
rename to web/framework/gii/generators/controller/templates/default/view.php
diff --git a/web/framework-1.1.17/gii/generators/controller/views/index.php b/web/framework/gii/generators/controller/views/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/controller/views/index.php
rename to web/framework/gii/generators/controller/views/index.php
diff --git a/web/framework-1.1.17/gii/generators/crud/CrudCode.php b/web/framework/gii/generators/crud/CrudCode.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/CrudCode.php
rename to web/framework/gii/generators/crud/CrudCode.php
diff --git a/web/framework-1.1.17/gii/generators/crud/CrudGenerator.php b/web/framework/gii/generators/crud/CrudGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/CrudGenerator.php
rename to web/framework/gii/generators/crud/CrudGenerator.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_form.php b/web/framework/gii/generators/crud/templates/default/_form.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/_form.php
rename to web/framework/gii/generators/crud/templates/default/_form.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_search.php b/web/framework/gii/generators/crud/templates/default/_search.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/_search.php
rename to web/framework/gii/generators/crud/templates/default/_search.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/_view.php b/web/framework/gii/generators/crud/templates/default/_view.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/_view.php
rename to web/framework/gii/generators/crud/templates/default/_view.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/admin.php b/web/framework/gii/generators/crud/templates/default/admin.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/admin.php
rename to web/framework/gii/generators/crud/templates/default/admin.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/controller.php b/web/framework/gii/generators/crud/templates/default/controller.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/controller.php
rename to web/framework/gii/generators/crud/templates/default/controller.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/create.php b/web/framework/gii/generators/crud/templates/default/create.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/create.php
rename to web/framework/gii/generators/crud/templates/default/create.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/index.php b/web/framework/gii/generators/crud/templates/default/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/index.php
rename to web/framework/gii/generators/crud/templates/default/index.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/update.php b/web/framework/gii/generators/crud/templates/default/update.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/update.php
rename to web/framework/gii/generators/crud/templates/default/update.php
diff --git a/web/framework-1.1.17/gii/generators/crud/templates/default/view.php b/web/framework/gii/generators/crud/templates/default/view.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/templates/default/view.php
rename to web/framework/gii/generators/crud/templates/default/view.php
diff --git a/web/framework-1.1.17/gii/generators/crud/views/index.php b/web/framework/gii/generators/crud/views/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/crud/views/index.php
rename to web/framework/gii/generators/crud/views/index.php
diff --git a/web/framework-1.1.17/gii/generators/form/FormCode.php b/web/framework/gii/generators/form/FormCode.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/form/FormCode.php
rename to web/framework/gii/generators/form/FormCode.php
diff --git a/web/framework-1.1.17/gii/generators/form/FormGenerator.php b/web/framework/gii/generators/form/FormGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/form/FormGenerator.php
rename to web/framework/gii/generators/form/FormGenerator.php
diff --git a/web/framework-1.1.17/gii/generators/form/templates/default/action.php b/web/framework/gii/generators/form/templates/default/action.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/form/templates/default/action.php
rename to web/framework/gii/generators/form/templates/default/action.php
diff --git a/web/framework-1.1.17/gii/generators/form/templates/default/form.php b/web/framework/gii/generators/form/templates/default/form.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/form/templates/default/form.php
rename to web/framework/gii/generators/form/templates/default/form.php
diff --git a/web/framework-1.1.17/gii/generators/form/views/index.php b/web/framework/gii/generators/form/views/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/form/views/index.php
rename to web/framework/gii/generators/form/views/index.php
diff --git a/web/framework-1.1.17/gii/generators/model/ModelCode.php b/web/framework/gii/generators/model/ModelCode.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/model/ModelCode.php
rename to web/framework/gii/generators/model/ModelCode.php
diff --git a/web/framework-1.1.17/gii/generators/model/ModelGenerator.php b/web/framework/gii/generators/model/ModelGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/model/ModelGenerator.php
rename to web/framework/gii/generators/model/ModelGenerator.php
diff --git a/web/framework-1.1.17/gii/generators/model/templates/default/model.php b/web/framework/gii/generators/model/templates/default/model.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/model/templates/default/model.php
rename to web/framework/gii/generators/model/templates/default/model.php
diff --git a/web/framework-1.1.17/gii/generators/model/views/index.php b/web/framework/gii/generators/model/views/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/model/views/index.php
rename to web/framework/gii/generators/model/views/index.php
diff --git a/web/framework-1.1.17/gii/generators/module/ModuleCode.php b/web/framework/gii/generators/module/ModuleCode.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/ModuleCode.php
rename to web/framework/gii/generators/module/ModuleCode.php
diff --git a/web/framework-1.1.17/gii/generators/module/ModuleGenerator.php b/web/framework/gii/generators/module/ModuleGenerator.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/ModuleGenerator.php
rename to web/framework/gii/generators/module/ModuleGenerator.php
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/components/.gitkeep b/web/framework/gii/generators/module/templates/default/components/.gitkeep
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/components/.gitkeep
rename to web/framework/gii/generators/module/templates/default/components/.gitkeep
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/controllers/DefaultController.php b/web/framework/gii/generators/module/templates/default/controllers/DefaultController.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/controllers/DefaultController.php
rename to web/framework/gii/generators/module/templates/default/controllers/DefaultController.php
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/messages/.gitkeep b/web/framework/gii/generators/module/templates/default/messages/.gitkeep
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/messages/.gitkeep
rename to web/framework/gii/generators/module/templates/default/messages/.gitkeep
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/models/.gitkeep b/web/framework/gii/generators/module/templates/default/models/.gitkeep
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/models/.gitkeep
rename to web/framework/gii/generators/module/templates/default/models/.gitkeep
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/module.php b/web/framework/gii/generators/module/templates/default/module.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/module.php
rename to web/framework/gii/generators/module/templates/default/module.php
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/views/default/index.php b/web/framework/gii/generators/module/templates/default/views/default/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/views/default/index.php
rename to web/framework/gii/generators/module/templates/default/views/default/index.php
diff --git a/web/framework-1.1.17/gii/generators/module/templates/default/views/layouts/.gitkeep b/web/framework/gii/generators/module/templates/default/views/layouts/.gitkeep
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/templates/default/views/layouts/.gitkeep
rename to web/framework/gii/generators/module/templates/default/views/layouts/.gitkeep
diff --git a/web/framework-1.1.17/gii/generators/module/views/index.php b/web/framework/gii/generators/module/views/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/generators/module/views/index.php
rename to web/framework/gii/generators/module/views/index.php
diff --git a/web/framework-1.1.17/gii/models/LoginForm.php b/web/framework/gii/models/LoginForm.php
similarity index 86%
rename from web/framework-1.1.17/gii/models/LoginForm.php
rename to web/framework/gii/models/LoginForm.php
index f4b838c..31118ab 100644
--- a/web/framework-1.1.17/gii/models/LoginForm.php
+++ b/web/framework/gii/models/LoginForm.php
@@ -19,6 +19,8 @@ class LoginForm extends CFormModel
/**
* Authenticates the password.
* This is the 'authenticate' validator as declared in rules().
+ * @param string $attribute the name of the attribute to be validated.
+ * @param array $params additional parameters passed with rule when being executed.
*/
public function authenticate($attribute,$params)
{
diff --git a/web/framework-1.1.17/gii/views/common/code.php b/web/framework/gii/views/common/code.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/common/code.php
rename to web/framework/gii/views/common/code.php
diff --git a/web/framework-1.1.17/gii/views/common/diff.php b/web/framework/gii/views/common/diff.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/common/diff.php
rename to web/framework/gii/views/common/diff.php
diff --git a/web/framework-1.1.17/gii/views/common/generator.php b/web/framework/gii/views/common/generator.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/common/generator.php
rename to web/framework/gii/views/common/generator.php
diff --git a/web/framework-1.1.17/gii/views/default/error.php b/web/framework/gii/views/default/error.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/default/error.php
rename to web/framework/gii/views/default/error.php
diff --git a/web/framework-1.1.17/gii/views/default/index.php b/web/framework/gii/views/default/index.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/default/index.php
rename to web/framework/gii/views/default/index.php
diff --git a/web/framework-1.1.17/gii/views/default/login.php b/web/framework/gii/views/default/login.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/default/login.php
rename to web/framework/gii/views/default/login.php
diff --git a/web/framework-1.1.17/gii/views/layouts/column1.php b/web/framework/gii/views/layouts/column1.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/layouts/column1.php
rename to web/framework/gii/views/layouts/column1.php
diff --git a/web/framework-1.1.17/gii/views/layouts/generator.php b/web/framework/gii/views/layouts/generator.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/layouts/generator.php
rename to web/framework/gii/views/layouts/generator.php
diff --git a/web/framework-1.1.17/gii/views/layouts/main.php b/web/framework/gii/views/layouts/main.php
similarity index 100%
rename from web/framework-1.1.17/gii/views/layouts/main.php
rename to web/framework/gii/views/layouts/main.php
diff --git a/web/framework-1.1.17/i18n/CChoiceFormat.php b/web/framework/i18n/CChoiceFormat.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CChoiceFormat.php
rename to web/framework/i18n/CChoiceFormat.php
diff --git a/web/framework-1.1.17/i18n/CDateFormatter.php b/web/framework/i18n/CDateFormatter.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CDateFormatter.php
rename to web/framework/i18n/CDateFormatter.php
diff --git a/web/framework-1.1.17/i18n/CDbMessageSource.php b/web/framework/i18n/CDbMessageSource.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CDbMessageSource.php
rename to web/framework/i18n/CDbMessageSource.php
diff --git a/web/framework-1.1.17/i18n/CGettextMessageSource.php b/web/framework/i18n/CGettextMessageSource.php
similarity index 98%
rename from web/framework-1.1.17/i18n/CGettextMessageSource.php
rename to web/framework/i18n/CGettextMessageSource.php
index 881d098..bf1ed87 100644
--- a/web/framework-1.1.17/i18n/CGettextMessageSource.php
+++ b/web/framework/i18n/CGettextMessageSource.php
@@ -53,7 +53,7 @@ class CGettextMessageSource extends CMessageSource
*/
public $useMoFile=true;
/**
- * @var boolean whether to use Big Endian to read and write MO files.
+ * @var boolean whether to use Big Endian to read MO files.
* Defaults to false. This property is only used when {@link useMoFile} is true.
*/
public $useBigEndian=false;
diff --git a/web/framework-1.1.17/i18n/CLocale.php b/web/framework/i18n/CLocale.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CLocale.php
rename to web/framework/i18n/CLocale.php
diff --git a/web/framework-1.1.17/i18n/CMessageSource.php b/web/framework/i18n/CMessageSource.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CMessageSource.php
rename to web/framework/i18n/CMessageSource.php
diff --git a/web/framework-1.1.17/i18n/CNumberFormatter.php b/web/framework/i18n/CNumberFormatter.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CNumberFormatter.php
rename to web/framework/i18n/CNumberFormatter.php
diff --git a/web/framework-1.1.17/i18n/CPhpMessageSource.php b/web/framework/i18n/CPhpMessageSource.php
similarity index 100%
rename from web/framework-1.1.17/i18n/CPhpMessageSource.php
rename to web/framework/i18n/CPhpMessageSource.php
diff --git a/web/framework-1.1.17/i18n/data/README.txt b/web/framework/i18n/data/README.txt
similarity index 100%
rename from web/framework-1.1.17/i18n/data/README.txt
rename to web/framework/i18n/data/README.txt
diff --git a/web/framework-1.1.17/i18n/data/aa.php b/web/framework/i18n/data/aa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/aa.php
rename to web/framework/i18n/data/aa.php
diff --git a/web/framework-1.1.17/i18n/data/aa_dj.php b/web/framework/i18n/data/aa_dj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/aa_dj.php
rename to web/framework/i18n/data/aa_dj.php
diff --git a/web/framework-1.1.17/i18n/data/aa_er.php b/web/framework/i18n/data/aa_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/aa_er.php
rename to web/framework/i18n/data/aa_er.php
diff --git a/web/framework-1.1.17/i18n/data/aa_et.php b/web/framework/i18n/data/aa_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/aa_et.php
rename to web/framework/i18n/data/aa_et.php
diff --git a/web/framework-1.1.17/i18n/data/af.php b/web/framework/i18n/data/af.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/af.php
rename to web/framework/i18n/data/af.php
diff --git a/web/framework-1.1.17/i18n/data/af_na.php b/web/framework/i18n/data/af_na.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/af_na.php
rename to web/framework/i18n/data/af_na.php
diff --git a/web/framework-1.1.17/i18n/data/af_za.php b/web/framework/i18n/data/af_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/af_za.php
rename to web/framework/i18n/data/af_za.php
diff --git a/web/framework-1.1.17/i18n/data/agq.php b/web/framework/i18n/data/agq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/agq.php
rename to web/framework/i18n/data/agq.php
diff --git a/web/framework-1.1.17/i18n/data/agq_cm.php b/web/framework/i18n/data/agq_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/agq_cm.php
rename to web/framework/i18n/data/agq_cm.php
diff --git a/web/framework-1.1.17/i18n/data/ak.php b/web/framework/i18n/data/ak.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ak.php
rename to web/framework/i18n/data/ak.php
diff --git a/web/framework-1.1.17/i18n/data/ak_gh.php b/web/framework/i18n/data/ak_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ak_gh.php
rename to web/framework/i18n/data/ak_gh.php
diff --git a/web/framework-1.1.17/i18n/data/am.php b/web/framework/i18n/data/am.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/am.php
rename to web/framework/i18n/data/am.php
diff --git a/web/framework-1.1.17/i18n/data/am_et.php b/web/framework/i18n/data/am_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/am_et.php
rename to web/framework/i18n/data/am_et.php
diff --git a/web/framework-1.1.17/i18n/data/ar.php b/web/framework/i18n/data/ar.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar.php
rename to web/framework/i18n/data/ar.php
diff --git a/web/framework-1.1.17/i18n/data/ar_001.php b/web/framework/i18n/data/ar_001.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_001.php
rename to web/framework/i18n/data/ar_001.php
diff --git a/web/framework-1.1.17/i18n/data/ar_ae.php b/web/framework/i18n/data/ar_ae.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_ae.php
rename to web/framework/i18n/data/ar_ae.php
diff --git a/web/framework-1.1.17/i18n/data/ar_bh.php b/web/framework/i18n/data/ar_bh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_bh.php
rename to web/framework/i18n/data/ar_bh.php
diff --git a/web/framework-1.1.17/i18n/data/ar_dj.php b/web/framework/i18n/data/ar_dj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_dj.php
rename to web/framework/i18n/data/ar_dj.php
diff --git a/web/framework-1.1.17/i18n/data/ar_dz.php b/web/framework/i18n/data/ar_dz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_dz.php
rename to web/framework/i18n/data/ar_dz.php
diff --git a/web/framework-1.1.17/i18n/data/ar_eg.php b/web/framework/i18n/data/ar_eg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_eg.php
rename to web/framework/i18n/data/ar_eg.php
diff --git a/web/framework-1.1.17/i18n/data/ar_eh.php b/web/framework/i18n/data/ar_eh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_eh.php
rename to web/framework/i18n/data/ar_eh.php
diff --git a/web/framework-1.1.17/i18n/data/ar_er.php b/web/framework/i18n/data/ar_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_er.php
rename to web/framework/i18n/data/ar_er.php
diff --git a/web/framework-1.1.17/i18n/data/ar_il.php b/web/framework/i18n/data/ar_il.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_il.php
rename to web/framework/i18n/data/ar_il.php
diff --git a/web/framework-1.1.17/i18n/data/ar_iq.php b/web/framework/i18n/data/ar_iq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_iq.php
rename to web/framework/i18n/data/ar_iq.php
diff --git a/web/framework-1.1.17/i18n/data/ar_jo.php b/web/framework/i18n/data/ar_jo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_jo.php
rename to web/framework/i18n/data/ar_jo.php
diff --git a/web/framework-1.1.17/i18n/data/ar_km.php b/web/framework/i18n/data/ar_km.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_km.php
rename to web/framework/i18n/data/ar_km.php
diff --git a/web/framework-1.1.17/i18n/data/ar_kw.php b/web/framework/i18n/data/ar_kw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_kw.php
rename to web/framework/i18n/data/ar_kw.php
diff --git a/web/framework-1.1.17/i18n/data/ar_lb.php b/web/framework/i18n/data/ar_lb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_lb.php
rename to web/framework/i18n/data/ar_lb.php
diff --git a/web/framework-1.1.17/i18n/data/ar_ly.php b/web/framework/i18n/data/ar_ly.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_ly.php
rename to web/framework/i18n/data/ar_ly.php
diff --git a/web/framework-1.1.17/i18n/data/ar_ma.php b/web/framework/i18n/data/ar_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_ma.php
rename to web/framework/i18n/data/ar_ma.php
diff --git a/web/framework-1.1.17/i18n/data/ar_mr.php b/web/framework/i18n/data/ar_mr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_mr.php
rename to web/framework/i18n/data/ar_mr.php
diff --git a/web/framework-1.1.17/i18n/data/ar_om.php b/web/framework/i18n/data/ar_om.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_om.php
rename to web/framework/i18n/data/ar_om.php
diff --git a/web/framework-1.1.17/i18n/data/ar_ps.php b/web/framework/i18n/data/ar_ps.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_ps.php
rename to web/framework/i18n/data/ar_ps.php
diff --git a/web/framework-1.1.17/i18n/data/ar_qa.php b/web/framework/i18n/data/ar_qa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_qa.php
rename to web/framework/i18n/data/ar_qa.php
diff --git a/web/framework-1.1.17/i18n/data/ar_sa.php b/web/framework/i18n/data/ar_sa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_sa.php
rename to web/framework/i18n/data/ar_sa.php
diff --git a/web/framework-1.1.17/i18n/data/ar_sd.php b/web/framework/i18n/data/ar_sd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_sd.php
rename to web/framework/i18n/data/ar_sd.php
diff --git a/web/framework-1.1.17/i18n/data/ar_so.php b/web/framework/i18n/data/ar_so.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_so.php
rename to web/framework/i18n/data/ar_so.php
diff --git a/web/framework-1.1.17/i18n/data/ar_sy.php b/web/framework/i18n/data/ar_sy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_sy.php
rename to web/framework/i18n/data/ar_sy.php
diff --git a/web/framework-1.1.17/i18n/data/ar_td.php b/web/framework/i18n/data/ar_td.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_td.php
rename to web/framework/i18n/data/ar_td.php
diff --git a/web/framework-1.1.17/i18n/data/ar_tn.php b/web/framework/i18n/data/ar_tn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_tn.php
rename to web/framework/i18n/data/ar_tn.php
diff --git a/web/framework-1.1.17/i18n/data/ar_ye.php b/web/framework/i18n/data/ar_ye.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ar_ye.php
rename to web/framework/i18n/data/ar_ye.php
diff --git a/web/framework-1.1.17/i18n/data/as.php b/web/framework/i18n/data/as.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/as.php
rename to web/framework/i18n/data/as.php
diff --git a/web/framework-1.1.17/i18n/data/as_in.php b/web/framework/i18n/data/as_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/as_in.php
rename to web/framework/i18n/data/as_in.php
diff --git a/web/framework-1.1.17/i18n/data/asa.php b/web/framework/i18n/data/asa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/asa.php
rename to web/framework/i18n/data/asa.php
diff --git a/web/framework-1.1.17/i18n/data/asa_tz.php b/web/framework/i18n/data/asa_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/asa_tz.php
rename to web/framework/i18n/data/asa_tz.php
diff --git a/web/framework-1.1.17/i18n/data/ast.php b/web/framework/i18n/data/ast.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ast.php
rename to web/framework/i18n/data/ast.php
diff --git a/web/framework-1.1.17/i18n/data/ast_es.php b/web/framework/i18n/data/ast_es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ast_es.php
rename to web/framework/i18n/data/ast_es.php
diff --git a/web/framework-1.1.17/i18n/data/az.php b/web/framework/i18n/data/az.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az.php
rename to web/framework/i18n/data/az.php
diff --git a/web/framework-1.1.17/i18n/data/az_arab.php b/web/framework/i18n/data/az_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_arab.php
rename to web/framework/i18n/data/az_arab.php
diff --git a/web/framework-1.1.17/i18n/data/az_arab_ir.php b/web/framework/i18n/data/az_arab_ir.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_arab_ir.php
rename to web/framework/i18n/data/az_arab_ir.php
diff --git a/web/framework-1.1.17/i18n/data/az_az.php b/web/framework/i18n/data/az_az.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_az.php
rename to web/framework/i18n/data/az_az.php
diff --git a/web/framework-1.1.17/i18n/data/az_cyrl.php b/web/framework/i18n/data/az_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_cyrl.php
rename to web/framework/i18n/data/az_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/az_cyrl_az.php b/web/framework/i18n/data/az_cyrl_az.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_cyrl_az.php
rename to web/framework/i18n/data/az_cyrl_az.php
diff --git a/web/framework-1.1.17/i18n/data/az_ir.php b/web/framework/i18n/data/az_ir.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_ir.php
rename to web/framework/i18n/data/az_ir.php
diff --git a/web/framework-1.1.17/i18n/data/az_latn.php b/web/framework/i18n/data/az_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_latn.php
rename to web/framework/i18n/data/az_latn.php
diff --git a/web/framework-1.1.17/i18n/data/az_latn_az.php b/web/framework/i18n/data/az_latn_az.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/az_latn_az.php
rename to web/framework/i18n/data/az_latn_az.php
diff --git a/web/framework-1.1.17/i18n/data/bas.php b/web/framework/i18n/data/bas.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bas.php
rename to web/framework/i18n/data/bas.php
diff --git a/web/framework-1.1.17/i18n/data/bas_cm.php b/web/framework/i18n/data/bas_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bas_cm.php
rename to web/framework/i18n/data/bas_cm.php
diff --git a/web/framework-1.1.17/i18n/data/be.php b/web/framework/i18n/data/be.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/be.php
rename to web/framework/i18n/data/be.php
diff --git a/web/framework-1.1.17/i18n/data/be_by.php b/web/framework/i18n/data/be_by.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/be_by.php
rename to web/framework/i18n/data/be_by.php
diff --git a/web/framework-1.1.17/i18n/data/bem.php b/web/framework/i18n/data/bem.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bem.php
rename to web/framework/i18n/data/bem.php
diff --git a/web/framework-1.1.17/i18n/data/bem_zm.php b/web/framework/i18n/data/bem_zm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bem_zm.php
rename to web/framework/i18n/data/bem_zm.php
diff --git a/web/framework-1.1.17/i18n/data/bez.php b/web/framework/i18n/data/bez.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bez.php
rename to web/framework/i18n/data/bez.php
diff --git a/web/framework-1.1.17/i18n/data/bez_tz.php b/web/framework/i18n/data/bez_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bez_tz.php
rename to web/framework/i18n/data/bez_tz.php
diff --git a/web/framework-1.1.17/i18n/data/bg.php b/web/framework/i18n/data/bg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bg.php
rename to web/framework/i18n/data/bg.php
diff --git a/web/framework-1.1.17/i18n/data/bg_bg.php b/web/framework/i18n/data/bg_bg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bg_bg.php
rename to web/framework/i18n/data/bg_bg.php
diff --git a/web/framework-1.1.17/i18n/data/bm.php b/web/framework/i18n/data/bm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bm.php
rename to web/framework/i18n/data/bm.php
diff --git a/web/framework-1.1.17/i18n/data/bm_ml.php b/web/framework/i18n/data/bm_ml.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bm_ml.php
rename to web/framework/i18n/data/bm_ml.php
diff --git a/web/framework-1.1.17/i18n/data/bn.php b/web/framework/i18n/data/bn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bn.php
rename to web/framework/i18n/data/bn.php
diff --git a/web/framework-1.1.17/i18n/data/bn_bd.php b/web/framework/i18n/data/bn_bd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bn_bd.php
rename to web/framework/i18n/data/bn_bd.php
diff --git a/web/framework-1.1.17/i18n/data/bn_in.php b/web/framework/i18n/data/bn_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bn_in.php
rename to web/framework/i18n/data/bn_in.php
diff --git a/web/framework-1.1.17/i18n/data/bo.php b/web/framework/i18n/data/bo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bo.php
rename to web/framework/i18n/data/bo.php
diff --git a/web/framework-1.1.17/i18n/data/bo_cn.php b/web/framework/i18n/data/bo_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bo_cn.php
rename to web/framework/i18n/data/bo_cn.php
diff --git a/web/framework-1.1.17/i18n/data/bo_in.php b/web/framework/i18n/data/bo_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bo_in.php
rename to web/framework/i18n/data/bo_in.php
diff --git a/web/framework-1.1.17/i18n/data/br.php b/web/framework/i18n/data/br.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/br.php
rename to web/framework/i18n/data/br.php
diff --git a/web/framework-1.1.17/i18n/data/br_fr.php b/web/framework/i18n/data/br_fr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/br_fr.php
rename to web/framework/i18n/data/br_fr.php
diff --git a/web/framework-1.1.17/i18n/data/brx.php b/web/framework/i18n/data/brx.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/brx.php
rename to web/framework/i18n/data/brx.php
diff --git a/web/framework-1.1.17/i18n/data/brx_in.php b/web/framework/i18n/data/brx_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/brx_in.php
rename to web/framework/i18n/data/brx_in.php
diff --git a/web/framework-1.1.17/i18n/data/bs.php b/web/framework/i18n/data/bs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs.php
rename to web/framework/i18n/data/bs.php
diff --git a/web/framework-1.1.17/i18n/data/bs_ba.php b/web/framework/i18n/data/bs_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs_ba.php
rename to web/framework/i18n/data/bs_ba.php
diff --git a/web/framework-1.1.17/i18n/data/bs_cyrl.php b/web/framework/i18n/data/bs_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs_cyrl.php
rename to web/framework/i18n/data/bs_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/bs_cyrl_ba.php b/web/framework/i18n/data/bs_cyrl_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs_cyrl_ba.php
rename to web/framework/i18n/data/bs_cyrl_ba.php
diff --git a/web/framework-1.1.17/i18n/data/bs_latn.php b/web/framework/i18n/data/bs_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs_latn.php
rename to web/framework/i18n/data/bs_latn.php
diff --git a/web/framework-1.1.17/i18n/data/bs_latn_ba.php b/web/framework/i18n/data/bs_latn_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/bs_latn_ba.php
rename to web/framework/i18n/data/bs_latn_ba.php
diff --git a/web/framework-1.1.17/i18n/data/byn.php b/web/framework/i18n/data/byn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/byn.php
rename to web/framework/i18n/data/byn.php
diff --git a/web/framework-1.1.17/i18n/data/byn_er.php b/web/framework/i18n/data/byn_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/byn_er.php
rename to web/framework/i18n/data/byn_er.php
diff --git a/web/framework-1.1.17/i18n/data/ca.php b/web/framework/i18n/data/ca.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ca.php
rename to web/framework/i18n/data/ca.php
diff --git a/web/framework-1.1.17/i18n/data/ca_ad.php b/web/framework/i18n/data/ca_ad.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ca_ad.php
rename to web/framework/i18n/data/ca_ad.php
diff --git a/web/framework-1.1.17/i18n/data/ca_es.php b/web/framework/i18n/data/ca_es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ca_es.php
rename to web/framework/i18n/data/ca_es.php
diff --git a/web/framework-1.1.17/i18n/data/cch.php b/web/framework/i18n/data/cch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cch.php
rename to web/framework/i18n/data/cch.php
diff --git a/web/framework-1.1.17/i18n/data/cch_ng.php b/web/framework/i18n/data/cch_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cch_ng.php
rename to web/framework/i18n/data/cch_ng.php
diff --git a/web/framework-1.1.17/i18n/data/cgg.php b/web/framework/i18n/data/cgg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cgg.php
rename to web/framework/i18n/data/cgg.php
diff --git a/web/framework-1.1.17/i18n/data/cgg_ug.php b/web/framework/i18n/data/cgg_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cgg_ug.php
rename to web/framework/i18n/data/cgg_ug.php
diff --git a/web/framework-1.1.17/i18n/data/chr.php b/web/framework/i18n/data/chr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/chr.php
rename to web/framework/i18n/data/chr.php
diff --git a/web/framework-1.1.17/i18n/data/chr_us.php b/web/framework/i18n/data/chr_us.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/chr_us.php
rename to web/framework/i18n/data/chr_us.php
diff --git a/web/framework-1.1.17/i18n/data/cs.php b/web/framework/i18n/data/cs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cs.php
rename to web/framework/i18n/data/cs.php
diff --git a/web/framework-1.1.17/i18n/data/cs_cz.php b/web/framework/i18n/data/cs_cz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cs_cz.php
rename to web/framework/i18n/data/cs_cz.php
diff --git a/web/framework-1.1.17/i18n/data/cy.php b/web/framework/i18n/data/cy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cy.php
rename to web/framework/i18n/data/cy.php
diff --git a/web/framework-1.1.17/i18n/data/cy_gb.php b/web/framework/i18n/data/cy_gb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/cy_gb.php
rename to web/framework/i18n/data/cy_gb.php
diff --git a/web/framework-1.1.17/i18n/data/da.php b/web/framework/i18n/data/da.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/da.php
rename to web/framework/i18n/data/da.php
diff --git a/web/framework-1.1.17/i18n/data/da_dk.php b/web/framework/i18n/data/da_dk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/da_dk.php
rename to web/framework/i18n/data/da_dk.php
diff --git a/web/framework-1.1.17/i18n/data/dav.php b/web/framework/i18n/data/dav.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dav.php
rename to web/framework/i18n/data/dav.php
diff --git a/web/framework-1.1.17/i18n/data/dav_ke.php b/web/framework/i18n/data/dav_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dav_ke.php
rename to web/framework/i18n/data/dav_ke.php
diff --git a/web/framework-1.1.17/i18n/data/de.php b/web/framework/i18n/data/de.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de.php
rename to web/framework/i18n/data/de.php
diff --git a/web/framework-1.1.17/i18n/data/de_at.php b/web/framework/i18n/data/de_at.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_at.php
rename to web/framework/i18n/data/de_at.php
diff --git a/web/framework-1.1.17/i18n/data/de_be.php b/web/framework/i18n/data/de_be.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_be.php
rename to web/framework/i18n/data/de_be.php
diff --git a/web/framework-1.1.17/i18n/data/de_ch.php b/web/framework/i18n/data/de_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_ch.php
rename to web/framework/i18n/data/de_ch.php
diff --git a/web/framework-1.1.17/i18n/data/de_de.php b/web/framework/i18n/data/de_de.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_de.php
rename to web/framework/i18n/data/de_de.php
diff --git a/web/framework-1.1.17/i18n/data/de_li.php b/web/framework/i18n/data/de_li.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_li.php
rename to web/framework/i18n/data/de_li.php
diff --git a/web/framework-1.1.17/i18n/data/de_lu.php b/web/framework/i18n/data/de_lu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/de_lu.php
rename to web/framework/i18n/data/de_lu.php
diff --git a/web/framework-1.1.17/i18n/data/dje.php b/web/framework/i18n/data/dje.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dje.php
rename to web/framework/i18n/data/dje.php
diff --git a/web/framework-1.1.17/i18n/data/dje_ne.php b/web/framework/i18n/data/dje_ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dje_ne.php
rename to web/framework/i18n/data/dje_ne.php
diff --git a/web/framework-1.1.17/i18n/data/dua.php b/web/framework/i18n/data/dua.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dua.php
rename to web/framework/i18n/data/dua.php
diff --git a/web/framework-1.1.17/i18n/data/dua_cm.php b/web/framework/i18n/data/dua_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dua_cm.php
rename to web/framework/i18n/data/dua_cm.php
diff --git a/web/framework-1.1.17/i18n/data/dv.php b/web/framework/i18n/data/dv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dv.php
rename to web/framework/i18n/data/dv.php
diff --git a/web/framework-1.1.17/i18n/data/dv_mv.php b/web/framework/i18n/data/dv_mv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dv_mv.php
rename to web/framework/i18n/data/dv_mv.php
diff --git a/web/framework-1.1.17/i18n/data/dyo.php b/web/framework/i18n/data/dyo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dyo.php
rename to web/framework/i18n/data/dyo.php
diff --git a/web/framework-1.1.17/i18n/data/dyo_sn.php b/web/framework/i18n/data/dyo_sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dyo_sn.php
rename to web/framework/i18n/data/dyo_sn.php
diff --git a/web/framework-1.1.17/i18n/data/dz.php b/web/framework/i18n/data/dz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dz.php
rename to web/framework/i18n/data/dz.php
diff --git a/web/framework-1.1.17/i18n/data/dz_bt.php b/web/framework/i18n/data/dz_bt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/dz_bt.php
rename to web/framework/i18n/data/dz_bt.php
diff --git a/web/framework-1.1.17/i18n/data/ebu.php b/web/framework/i18n/data/ebu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ebu.php
rename to web/framework/i18n/data/ebu.php
diff --git a/web/framework-1.1.17/i18n/data/ebu_ke.php b/web/framework/i18n/data/ebu_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ebu_ke.php
rename to web/framework/i18n/data/ebu_ke.php
diff --git a/web/framework-1.1.17/i18n/data/ee.php b/web/framework/i18n/data/ee.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ee.php
rename to web/framework/i18n/data/ee.php
diff --git a/web/framework-1.1.17/i18n/data/ee_gh.php b/web/framework/i18n/data/ee_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ee_gh.php
rename to web/framework/i18n/data/ee_gh.php
diff --git a/web/framework-1.1.17/i18n/data/ee_tg.php b/web/framework/i18n/data/ee_tg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ee_tg.php
rename to web/framework/i18n/data/ee_tg.php
diff --git a/web/framework-1.1.17/i18n/data/el.php b/web/framework/i18n/data/el.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/el.php
rename to web/framework/i18n/data/el.php
diff --git a/web/framework-1.1.17/i18n/data/el_cy.php b/web/framework/i18n/data/el_cy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/el_cy.php
rename to web/framework/i18n/data/el_cy.php
diff --git a/web/framework-1.1.17/i18n/data/el_gr.php b/web/framework/i18n/data/el_gr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/el_gr.php
rename to web/framework/i18n/data/el_gr.php
diff --git a/web/framework-1.1.17/i18n/data/el_polyton.php b/web/framework/i18n/data/el_polyton.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/el_polyton.php
rename to web/framework/i18n/data/el_polyton.php
diff --git a/web/framework-1.1.17/i18n/data/en.php b/web/framework/i18n/data/en.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en.php
rename to web/framework/i18n/data/en.php
diff --git a/web/framework-1.1.17/i18n/data/en_150.php b/web/framework/i18n/data/en_150.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_150.php
rename to web/framework/i18n/data/en_150.php
diff --git a/web/framework-1.1.17/i18n/data/en_ag.php b/web/framework/i18n/data/en_ag.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ag.php
rename to web/framework/i18n/data/en_ag.php
diff --git a/web/framework-1.1.17/i18n/data/en_as.php b/web/framework/i18n/data/en_as.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_as.php
rename to web/framework/i18n/data/en_as.php
diff --git a/web/framework-1.1.17/i18n/data/en_au.php b/web/framework/i18n/data/en_au.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_au.php
rename to web/framework/i18n/data/en_au.php
diff --git a/web/framework-1.1.17/i18n/data/en_bb.php b/web/framework/i18n/data/en_bb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_bb.php
rename to web/framework/i18n/data/en_bb.php
diff --git a/web/framework-1.1.17/i18n/data/en_be.php b/web/framework/i18n/data/en_be.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_be.php
rename to web/framework/i18n/data/en_be.php
diff --git a/web/framework-1.1.17/i18n/data/en_bm.php b/web/framework/i18n/data/en_bm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_bm.php
rename to web/framework/i18n/data/en_bm.php
diff --git a/web/framework-1.1.17/i18n/data/en_bs.php b/web/framework/i18n/data/en_bs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_bs.php
rename to web/framework/i18n/data/en_bs.php
diff --git a/web/framework-1.1.17/i18n/data/en_bw.php b/web/framework/i18n/data/en_bw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_bw.php
rename to web/framework/i18n/data/en_bw.php
diff --git a/web/framework-1.1.17/i18n/data/en_bz.php b/web/framework/i18n/data/en_bz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_bz.php
rename to web/framework/i18n/data/en_bz.php
diff --git a/web/framework-1.1.17/i18n/data/en_ca.php b/web/framework/i18n/data/en_ca.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ca.php
rename to web/framework/i18n/data/en_ca.php
diff --git a/web/framework-1.1.17/i18n/data/en_cm.php b/web/framework/i18n/data/en_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_cm.php
rename to web/framework/i18n/data/en_cm.php
diff --git a/web/framework-1.1.17/i18n/data/en_dm.php b/web/framework/i18n/data/en_dm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_dm.php
rename to web/framework/i18n/data/en_dm.php
diff --git a/web/framework-1.1.17/i18n/data/en_dsrt.php b/web/framework/i18n/data/en_dsrt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_dsrt.php
rename to web/framework/i18n/data/en_dsrt.php
diff --git a/web/framework-1.1.17/i18n/data/en_dsrt_us.php b/web/framework/i18n/data/en_dsrt_us.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_dsrt_us.php
rename to web/framework/i18n/data/en_dsrt_us.php
diff --git a/web/framework-1.1.17/i18n/data/en_fj.php b/web/framework/i18n/data/en_fj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_fj.php
rename to web/framework/i18n/data/en_fj.php
diff --git a/web/framework-1.1.17/i18n/data/en_fm.php b/web/framework/i18n/data/en_fm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_fm.php
rename to web/framework/i18n/data/en_fm.php
diff --git a/web/framework-1.1.17/i18n/data/en_gb.php b/web/framework/i18n/data/en_gb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gb.php
rename to web/framework/i18n/data/en_gb.php
diff --git a/web/framework-1.1.17/i18n/data/en_gd.php b/web/framework/i18n/data/en_gd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gd.php
rename to web/framework/i18n/data/en_gd.php
diff --git a/web/framework-1.1.17/i18n/data/en_gg.php b/web/framework/i18n/data/en_gg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gg.php
rename to web/framework/i18n/data/en_gg.php
diff --git a/web/framework-1.1.17/i18n/data/en_gh.php b/web/framework/i18n/data/en_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gh.php
rename to web/framework/i18n/data/en_gh.php
diff --git a/web/framework-1.1.17/i18n/data/en_gi.php b/web/framework/i18n/data/en_gi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gi.php
rename to web/framework/i18n/data/en_gi.php
diff --git a/web/framework-1.1.17/i18n/data/en_gm.php b/web/framework/i18n/data/en_gm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gm.php
rename to web/framework/i18n/data/en_gm.php
diff --git a/web/framework-1.1.17/i18n/data/en_gu.php b/web/framework/i18n/data/en_gu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gu.php
rename to web/framework/i18n/data/en_gu.php
diff --git a/web/framework-1.1.17/i18n/data/en_gy.php b/web/framework/i18n/data/en_gy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_gy.php
rename to web/framework/i18n/data/en_gy.php
diff --git a/web/framework-1.1.17/i18n/data/en_hk.php b/web/framework/i18n/data/en_hk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_hk.php
rename to web/framework/i18n/data/en_hk.php
diff --git a/web/framework-1.1.17/i18n/data/en_ie.php b/web/framework/i18n/data/en_ie.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ie.php
rename to web/framework/i18n/data/en_ie.php
diff --git a/web/framework-1.1.17/i18n/data/en_im.php b/web/framework/i18n/data/en_im.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_im.php
rename to web/framework/i18n/data/en_im.php
diff --git a/web/framework-1.1.17/i18n/data/en_in.php b/web/framework/i18n/data/en_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_in.php
rename to web/framework/i18n/data/en_in.php
diff --git a/web/framework-1.1.17/i18n/data/en_je.php b/web/framework/i18n/data/en_je.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_je.php
rename to web/framework/i18n/data/en_je.php
diff --git a/web/framework-1.1.17/i18n/data/en_jm.php b/web/framework/i18n/data/en_jm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_jm.php
rename to web/framework/i18n/data/en_jm.php
diff --git a/web/framework-1.1.17/i18n/data/en_ke.php b/web/framework/i18n/data/en_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ke.php
rename to web/framework/i18n/data/en_ke.php
diff --git a/web/framework-1.1.17/i18n/data/en_ki.php b/web/framework/i18n/data/en_ki.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ki.php
rename to web/framework/i18n/data/en_ki.php
diff --git a/web/framework-1.1.17/i18n/data/en_kn.php b/web/framework/i18n/data/en_kn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_kn.php
rename to web/framework/i18n/data/en_kn.php
diff --git a/web/framework-1.1.17/i18n/data/en_ky.php b/web/framework/i18n/data/en_ky.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ky.php
rename to web/framework/i18n/data/en_ky.php
diff --git a/web/framework-1.1.17/i18n/data/en_lc.php b/web/framework/i18n/data/en_lc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_lc.php
rename to web/framework/i18n/data/en_lc.php
diff --git a/web/framework-1.1.17/i18n/data/en_lr.php b/web/framework/i18n/data/en_lr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_lr.php
rename to web/framework/i18n/data/en_lr.php
diff --git a/web/framework-1.1.17/i18n/data/en_ls.php b/web/framework/i18n/data/en_ls.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ls.php
rename to web/framework/i18n/data/en_ls.php
diff --git a/web/framework-1.1.17/i18n/data/en_mg.php b/web/framework/i18n/data/en_mg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mg.php
rename to web/framework/i18n/data/en_mg.php
diff --git a/web/framework-1.1.17/i18n/data/en_mh.php b/web/framework/i18n/data/en_mh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mh.php
rename to web/framework/i18n/data/en_mh.php
diff --git a/web/framework-1.1.17/i18n/data/en_mp.php b/web/framework/i18n/data/en_mp.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mp.php
rename to web/framework/i18n/data/en_mp.php
diff --git a/web/framework-1.1.17/i18n/data/en_mt.php b/web/framework/i18n/data/en_mt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mt.php
rename to web/framework/i18n/data/en_mt.php
diff --git a/web/framework-1.1.17/i18n/data/en_mu.php b/web/framework/i18n/data/en_mu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mu.php
rename to web/framework/i18n/data/en_mu.php
diff --git a/web/framework-1.1.17/i18n/data/en_mw.php b/web/framework/i18n/data/en_mw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_mw.php
rename to web/framework/i18n/data/en_mw.php
diff --git a/web/framework-1.1.17/i18n/data/en_na.php b/web/framework/i18n/data/en_na.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_na.php
rename to web/framework/i18n/data/en_na.php
diff --git a/web/framework-1.1.17/i18n/data/en_ng.php b/web/framework/i18n/data/en_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ng.php
rename to web/framework/i18n/data/en_ng.php
diff --git a/web/framework-1.1.17/i18n/data/en_nz.php b/web/framework/i18n/data/en_nz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_nz.php
rename to web/framework/i18n/data/en_nz.php
diff --git a/web/framework-1.1.17/i18n/data/en_pg.php b/web/framework/i18n/data/en_pg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_pg.php
rename to web/framework/i18n/data/en_pg.php
diff --git a/web/framework-1.1.17/i18n/data/en_ph.php b/web/framework/i18n/data/en_ph.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ph.php
rename to web/framework/i18n/data/en_ph.php
diff --git a/web/framework-1.1.17/i18n/data/en_pk.php b/web/framework/i18n/data/en_pk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_pk.php
rename to web/framework/i18n/data/en_pk.php
diff --git a/web/framework-1.1.17/i18n/data/en_pr.php b/web/framework/i18n/data/en_pr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_pr.php
rename to web/framework/i18n/data/en_pr.php
diff --git a/web/framework-1.1.17/i18n/data/en_pw.php b/web/framework/i18n/data/en_pw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_pw.php
rename to web/framework/i18n/data/en_pw.php
diff --git a/web/framework-1.1.17/i18n/data/en_sb.php b/web/framework/i18n/data/en_sb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_sb.php
rename to web/framework/i18n/data/en_sb.php
diff --git a/web/framework-1.1.17/i18n/data/en_sc.php b/web/framework/i18n/data/en_sc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_sc.php
rename to web/framework/i18n/data/en_sc.php
diff --git a/web/framework-1.1.17/i18n/data/en_sg.php b/web/framework/i18n/data/en_sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_sg.php
rename to web/framework/i18n/data/en_sg.php
diff --git a/web/framework-1.1.17/i18n/data/en_shaw.php b/web/framework/i18n/data/en_shaw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_shaw.php
rename to web/framework/i18n/data/en_shaw.php
diff --git a/web/framework-1.1.17/i18n/data/en_sl.php b/web/framework/i18n/data/en_sl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_sl.php
rename to web/framework/i18n/data/en_sl.php
diff --git a/web/framework-1.1.17/i18n/data/en_ss.php b/web/framework/i18n/data/en_ss.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ss.php
rename to web/framework/i18n/data/en_ss.php
diff --git a/web/framework-1.1.17/i18n/data/en_sz.php b/web/framework/i18n/data/en_sz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_sz.php
rename to web/framework/i18n/data/en_sz.php
diff --git a/web/framework-1.1.17/i18n/data/en_tc.php b/web/framework/i18n/data/en_tc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_tc.php
rename to web/framework/i18n/data/en_tc.php
diff --git a/web/framework-1.1.17/i18n/data/en_to.php b/web/framework/i18n/data/en_to.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_to.php
rename to web/framework/i18n/data/en_to.php
diff --git a/web/framework-1.1.17/i18n/data/en_tt.php b/web/framework/i18n/data/en_tt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_tt.php
rename to web/framework/i18n/data/en_tt.php
diff --git a/web/framework-1.1.17/i18n/data/en_tz.php b/web/framework/i18n/data/en_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_tz.php
rename to web/framework/i18n/data/en_tz.php
diff --git a/web/framework-1.1.17/i18n/data/en_ug.php b/web/framework/i18n/data/en_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ug.php
rename to web/framework/i18n/data/en_ug.php
diff --git a/web/framework-1.1.17/i18n/data/en_um.php b/web/framework/i18n/data/en_um.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_um.php
rename to web/framework/i18n/data/en_um.php
diff --git a/web/framework-1.1.17/i18n/data/en_us.php b/web/framework/i18n/data/en_us.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_us.php
rename to web/framework/i18n/data/en_us.php
diff --git a/web/framework-1.1.17/i18n/data/en_us_posix.php b/web/framework/i18n/data/en_us_posix.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_us_posix.php
rename to web/framework/i18n/data/en_us_posix.php
diff --git a/web/framework-1.1.17/i18n/data/en_vc.php b/web/framework/i18n/data/en_vc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_vc.php
rename to web/framework/i18n/data/en_vc.php
diff --git a/web/framework-1.1.17/i18n/data/en_vg.php b/web/framework/i18n/data/en_vg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_vg.php
rename to web/framework/i18n/data/en_vg.php
diff --git a/web/framework-1.1.17/i18n/data/en_vi.php b/web/framework/i18n/data/en_vi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_vi.php
rename to web/framework/i18n/data/en_vi.php
diff --git a/web/framework-1.1.17/i18n/data/en_vu.php b/web/framework/i18n/data/en_vu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_vu.php
rename to web/framework/i18n/data/en_vu.php
diff --git a/web/framework-1.1.17/i18n/data/en_ws.php b/web/framework/i18n/data/en_ws.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_ws.php
rename to web/framework/i18n/data/en_ws.php
diff --git a/web/framework-1.1.17/i18n/data/en_za.php b/web/framework/i18n/data/en_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_za.php
rename to web/framework/i18n/data/en_za.php
diff --git a/web/framework-1.1.17/i18n/data/en_zm.php b/web/framework/i18n/data/en_zm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_zm.php
rename to web/framework/i18n/data/en_zm.php
diff --git a/web/framework-1.1.17/i18n/data/en_zw.php b/web/framework/i18n/data/en_zw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_zw.php
rename to web/framework/i18n/data/en_zw.php
diff --git a/web/framework-1.1.17/i18n/data/en_zz.php b/web/framework/i18n/data/en_zz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/en_zz.php
rename to web/framework/i18n/data/en_zz.php
diff --git a/web/framework-1.1.17/i18n/data/eo.php b/web/framework/i18n/data/eo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/eo.php
rename to web/framework/i18n/data/eo.php
diff --git a/web/framework-1.1.17/i18n/data/es.php b/web/framework/i18n/data/es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es.php
rename to web/framework/i18n/data/es.php
diff --git a/web/framework-1.1.17/i18n/data/es_419.php b/web/framework/i18n/data/es_419.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_419.php
rename to web/framework/i18n/data/es_419.php
diff --git a/web/framework-1.1.17/i18n/data/es_ar.php b/web/framework/i18n/data/es_ar.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ar.php
rename to web/framework/i18n/data/es_ar.php
diff --git a/web/framework-1.1.17/i18n/data/es_bo.php b/web/framework/i18n/data/es_bo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_bo.php
rename to web/framework/i18n/data/es_bo.php
diff --git a/web/framework-1.1.17/i18n/data/es_cl.php b/web/framework/i18n/data/es_cl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_cl.php
rename to web/framework/i18n/data/es_cl.php
diff --git a/web/framework-1.1.17/i18n/data/es_co.php b/web/framework/i18n/data/es_co.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_co.php
rename to web/framework/i18n/data/es_co.php
diff --git a/web/framework-1.1.17/i18n/data/es_cr.php b/web/framework/i18n/data/es_cr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_cr.php
rename to web/framework/i18n/data/es_cr.php
diff --git a/web/framework-1.1.17/i18n/data/es_cu.php b/web/framework/i18n/data/es_cu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_cu.php
rename to web/framework/i18n/data/es_cu.php
diff --git a/web/framework-1.1.17/i18n/data/es_do.php b/web/framework/i18n/data/es_do.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_do.php
rename to web/framework/i18n/data/es_do.php
diff --git a/web/framework-1.1.17/i18n/data/es_ea.php b/web/framework/i18n/data/es_ea.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ea.php
rename to web/framework/i18n/data/es_ea.php
diff --git a/web/framework-1.1.17/i18n/data/es_ec.php b/web/framework/i18n/data/es_ec.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ec.php
rename to web/framework/i18n/data/es_ec.php
diff --git a/web/framework-1.1.17/i18n/data/es_es.php b/web/framework/i18n/data/es_es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_es.php
rename to web/framework/i18n/data/es_es.php
diff --git a/web/framework-1.1.17/i18n/data/es_gq.php b/web/framework/i18n/data/es_gq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_gq.php
rename to web/framework/i18n/data/es_gq.php
diff --git a/web/framework-1.1.17/i18n/data/es_gt.php b/web/framework/i18n/data/es_gt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_gt.php
rename to web/framework/i18n/data/es_gt.php
diff --git a/web/framework-1.1.17/i18n/data/es_hn.php b/web/framework/i18n/data/es_hn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_hn.php
rename to web/framework/i18n/data/es_hn.php
diff --git a/web/framework-1.1.17/i18n/data/es_ic.php b/web/framework/i18n/data/es_ic.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ic.php
rename to web/framework/i18n/data/es_ic.php
diff --git a/web/framework-1.1.17/i18n/data/es_mx.php b/web/framework/i18n/data/es_mx.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_mx.php
rename to web/framework/i18n/data/es_mx.php
diff --git a/web/framework-1.1.17/i18n/data/es_ni.php b/web/framework/i18n/data/es_ni.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ni.php
rename to web/framework/i18n/data/es_ni.php
diff --git a/web/framework-1.1.17/i18n/data/es_pa.php b/web/framework/i18n/data/es_pa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_pa.php
rename to web/framework/i18n/data/es_pa.php
diff --git a/web/framework-1.1.17/i18n/data/es_pe.php b/web/framework/i18n/data/es_pe.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_pe.php
rename to web/framework/i18n/data/es_pe.php
diff --git a/web/framework-1.1.17/i18n/data/es_ph.php b/web/framework/i18n/data/es_ph.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ph.php
rename to web/framework/i18n/data/es_ph.php
diff --git a/web/framework-1.1.17/i18n/data/es_pr.php b/web/framework/i18n/data/es_pr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_pr.php
rename to web/framework/i18n/data/es_pr.php
diff --git a/web/framework-1.1.17/i18n/data/es_py.php b/web/framework/i18n/data/es_py.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_py.php
rename to web/framework/i18n/data/es_py.php
diff --git a/web/framework-1.1.17/i18n/data/es_sv.php b/web/framework/i18n/data/es_sv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_sv.php
rename to web/framework/i18n/data/es_sv.php
diff --git a/web/framework-1.1.17/i18n/data/es_us.php b/web/framework/i18n/data/es_us.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_us.php
rename to web/framework/i18n/data/es_us.php
diff --git a/web/framework-1.1.17/i18n/data/es_uy.php b/web/framework/i18n/data/es_uy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_uy.php
rename to web/framework/i18n/data/es_uy.php
diff --git a/web/framework-1.1.17/i18n/data/es_ve.php b/web/framework/i18n/data/es_ve.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/es_ve.php
rename to web/framework/i18n/data/es_ve.php
diff --git a/web/framework-1.1.17/i18n/data/et.php b/web/framework/i18n/data/et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/et.php
rename to web/framework/i18n/data/et.php
diff --git a/web/framework-1.1.17/i18n/data/et_ee.php b/web/framework/i18n/data/et_ee.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/et_ee.php
rename to web/framework/i18n/data/et_ee.php
diff --git a/web/framework-1.1.17/i18n/data/eu.php b/web/framework/i18n/data/eu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/eu.php
rename to web/framework/i18n/data/eu.php
diff --git a/web/framework-1.1.17/i18n/data/eu_es.php b/web/framework/i18n/data/eu_es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/eu_es.php
rename to web/framework/i18n/data/eu_es.php
diff --git a/web/framework-1.1.17/i18n/data/ewo.php b/web/framework/i18n/data/ewo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ewo.php
rename to web/framework/i18n/data/ewo.php
diff --git a/web/framework-1.1.17/i18n/data/ewo_cm.php b/web/framework/i18n/data/ewo_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ewo_cm.php
rename to web/framework/i18n/data/ewo_cm.php
diff --git a/web/framework-1.1.17/i18n/data/fa.php b/web/framework/i18n/data/fa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fa.php
rename to web/framework/i18n/data/fa.php
diff --git a/web/framework-1.1.17/i18n/data/fa_af.php b/web/framework/i18n/data/fa_af.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fa_af.php
rename to web/framework/i18n/data/fa_af.php
diff --git a/web/framework-1.1.17/i18n/data/fa_ir.php b/web/framework/i18n/data/fa_ir.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fa_ir.php
rename to web/framework/i18n/data/fa_ir.php
diff --git a/web/framework-1.1.17/i18n/data/ff.php b/web/framework/i18n/data/ff.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ff.php
rename to web/framework/i18n/data/ff.php
diff --git a/web/framework-1.1.17/i18n/data/ff_sn.php b/web/framework/i18n/data/ff_sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ff_sn.php
rename to web/framework/i18n/data/ff_sn.php
diff --git a/web/framework-1.1.17/i18n/data/fi.php b/web/framework/i18n/data/fi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fi.php
rename to web/framework/i18n/data/fi.php
diff --git a/web/framework-1.1.17/i18n/data/fi_fi.php b/web/framework/i18n/data/fi_fi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fi_fi.php
rename to web/framework/i18n/data/fi_fi.php
diff --git a/web/framework-1.1.17/i18n/data/fil.php b/web/framework/i18n/data/fil.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fil.php
rename to web/framework/i18n/data/fil.php
diff --git a/web/framework-1.1.17/i18n/data/fil_ph.php b/web/framework/i18n/data/fil_ph.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fil_ph.php
rename to web/framework/i18n/data/fil_ph.php
diff --git a/web/framework-1.1.17/i18n/data/fo.php b/web/framework/i18n/data/fo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fo.php
rename to web/framework/i18n/data/fo.php
diff --git a/web/framework-1.1.17/i18n/data/fo_fo.php b/web/framework/i18n/data/fo_fo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fo_fo.php
rename to web/framework/i18n/data/fo_fo.php
diff --git a/web/framework-1.1.17/i18n/data/fr.php b/web/framework/i18n/data/fr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr.php
rename to web/framework/i18n/data/fr.php
diff --git a/web/framework-1.1.17/i18n/data/fr_be.php b/web/framework/i18n/data/fr_be.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_be.php
rename to web/framework/i18n/data/fr_be.php
diff --git a/web/framework-1.1.17/i18n/data/fr_bf.php b/web/framework/i18n/data/fr_bf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_bf.php
rename to web/framework/i18n/data/fr_bf.php
diff --git a/web/framework-1.1.17/i18n/data/fr_bi.php b/web/framework/i18n/data/fr_bi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_bi.php
rename to web/framework/i18n/data/fr_bi.php
diff --git a/web/framework-1.1.17/i18n/data/fr_bj.php b/web/framework/i18n/data/fr_bj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_bj.php
rename to web/framework/i18n/data/fr_bj.php
diff --git a/web/framework-1.1.17/i18n/data/fr_bl.php b/web/framework/i18n/data/fr_bl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_bl.php
rename to web/framework/i18n/data/fr_bl.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ca.php b/web/framework/i18n/data/fr_ca.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ca.php
rename to web/framework/i18n/data/fr_ca.php
diff --git a/web/framework-1.1.17/i18n/data/fr_cd.php b/web/framework/i18n/data/fr_cd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_cd.php
rename to web/framework/i18n/data/fr_cd.php
diff --git a/web/framework-1.1.17/i18n/data/fr_cf.php b/web/framework/i18n/data/fr_cf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_cf.php
rename to web/framework/i18n/data/fr_cf.php
diff --git a/web/framework-1.1.17/i18n/data/fr_cg.php b/web/framework/i18n/data/fr_cg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_cg.php
rename to web/framework/i18n/data/fr_cg.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ch.php b/web/framework/i18n/data/fr_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ch.php
rename to web/framework/i18n/data/fr_ch.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ci.php b/web/framework/i18n/data/fr_ci.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ci.php
rename to web/framework/i18n/data/fr_ci.php
diff --git a/web/framework-1.1.17/i18n/data/fr_cm.php b/web/framework/i18n/data/fr_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_cm.php
rename to web/framework/i18n/data/fr_cm.php
diff --git a/web/framework-1.1.17/i18n/data/fr_dj.php b/web/framework/i18n/data/fr_dj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_dj.php
rename to web/framework/i18n/data/fr_dj.php
diff --git a/web/framework-1.1.17/i18n/data/fr_dz.php b/web/framework/i18n/data/fr_dz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_dz.php
rename to web/framework/i18n/data/fr_dz.php
diff --git a/web/framework-1.1.17/i18n/data/fr_fr.php b/web/framework/i18n/data/fr_fr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_fr.php
rename to web/framework/i18n/data/fr_fr.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ga.php b/web/framework/i18n/data/fr_ga.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ga.php
rename to web/framework/i18n/data/fr_ga.php
diff --git a/web/framework-1.1.17/i18n/data/fr_gf.php b/web/framework/i18n/data/fr_gf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_gf.php
rename to web/framework/i18n/data/fr_gf.php
diff --git a/web/framework-1.1.17/i18n/data/fr_gn.php b/web/framework/i18n/data/fr_gn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_gn.php
rename to web/framework/i18n/data/fr_gn.php
diff --git a/web/framework-1.1.17/i18n/data/fr_gp.php b/web/framework/i18n/data/fr_gp.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_gp.php
rename to web/framework/i18n/data/fr_gp.php
diff --git a/web/framework-1.1.17/i18n/data/fr_gq.php b/web/framework/i18n/data/fr_gq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_gq.php
rename to web/framework/i18n/data/fr_gq.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ht.php b/web/framework/i18n/data/fr_ht.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ht.php
rename to web/framework/i18n/data/fr_ht.php
diff --git a/web/framework-1.1.17/i18n/data/fr_km.php b/web/framework/i18n/data/fr_km.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_km.php
rename to web/framework/i18n/data/fr_km.php
diff --git a/web/framework-1.1.17/i18n/data/fr_lu.php b/web/framework/i18n/data/fr_lu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_lu.php
rename to web/framework/i18n/data/fr_lu.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ma.php b/web/framework/i18n/data/fr_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ma.php
rename to web/framework/i18n/data/fr_ma.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mc.php b/web/framework/i18n/data/fr_mc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mc.php
rename to web/framework/i18n/data/fr_mc.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mf.php b/web/framework/i18n/data/fr_mf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mf.php
rename to web/framework/i18n/data/fr_mf.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mg.php b/web/framework/i18n/data/fr_mg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mg.php
rename to web/framework/i18n/data/fr_mg.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ml.php b/web/framework/i18n/data/fr_ml.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ml.php
rename to web/framework/i18n/data/fr_ml.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mq.php b/web/framework/i18n/data/fr_mq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mq.php
rename to web/framework/i18n/data/fr_mq.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mr.php b/web/framework/i18n/data/fr_mr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mr.php
rename to web/framework/i18n/data/fr_mr.php
diff --git a/web/framework-1.1.17/i18n/data/fr_mu.php b/web/framework/i18n/data/fr_mu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_mu.php
rename to web/framework/i18n/data/fr_mu.php
diff --git a/web/framework-1.1.17/i18n/data/fr_nc.php b/web/framework/i18n/data/fr_nc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_nc.php
rename to web/framework/i18n/data/fr_nc.php
diff --git a/web/framework-1.1.17/i18n/data/fr_ne.php b/web/framework/i18n/data/fr_ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_ne.php
rename to web/framework/i18n/data/fr_ne.php
diff --git a/web/framework-1.1.17/i18n/data/fr_pf.php b/web/framework/i18n/data/fr_pf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_pf.php
rename to web/framework/i18n/data/fr_pf.php
diff --git a/web/framework-1.1.17/i18n/data/fr_re.php b/web/framework/i18n/data/fr_re.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_re.php
rename to web/framework/i18n/data/fr_re.php
diff --git a/web/framework-1.1.17/i18n/data/fr_rw.php b/web/framework/i18n/data/fr_rw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_rw.php
rename to web/framework/i18n/data/fr_rw.php
diff --git a/web/framework-1.1.17/i18n/data/fr_sc.php b/web/framework/i18n/data/fr_sc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_sc.php
rename to web/framework/i18n/data/fr_sc.php
diff --git a/web/framework-1.1.17/i18n/data/fr_sn.php b/web/framework/i18n/data/fr_sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_sn.php
rename to web/framework/i18n/data/fr_sn.php
diff --git a/web/framework-1.1.17/i18n/data/fr_sy.php b/web/framework/i18n/data/fr_sy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_sy.php
rename to web/framework/i18n/data/fr_sy.php
diff --git a/web/framework-1.1.17/i18n/data/fr_td.php b/web/framework/i18n/data/fr_td.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_td.php
rename to web/framework/i18n/data/fr_td.php
diff --git a/web/framework-1.1.17/i18n/data/fr_tg.php b/web/framework/i18n/data/fr_tg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_tg.php
rename to web/framework/i18n/data/fr_tg.php
diff --git a/web/framework-1.1.17/i18n/data/fr_tn.php b/web/framework/i18n/data/fr_tn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_tn.php
rename to web/framework/i18n/data/fr_tn.php
diff --git a/web/framework-1.1.17/i18n/data/fr_vu.php b/web/framework/i18n/data/fr_vu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_vu.php
rename to web/framework/i18n/data/fr_vu.php
diff --git a/web/framework-1.1.17/i18n/data/fr_yt.php b/web/framework/i18n/data/fr_yt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fr_yt.php
rename to web/framework/i18n/data/fr_yt.php
diff --git a/web/framework-1.1.17/i18n/data/fur.php b/web/framework/i18n/data/fur.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fur.php
rename to web/framework/i18n/data/fur.php
diff --git a/web/framework-1.1.17/i18n/data/fur_it.php b/web/framework/i18n/data/fur_it.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/fur_it.php
rename to web/framework/i18n/data/fur_it.php
diff --git a/web/framework-1.1.17/i18n/data/ga.php b/web/framework/i18n/data/ga.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ga.php
rename to web/framework/i18n/data/ga.php
diff --git a/web/framework-1.1.17/i18n/data/ga_ie.php b/web/framework/i18n/data/ga_ie.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ga_ie.php
rename to web/framework/i18n/data/ga_ie.php
diff --git a/web/framework-1.1.17/i18n/data/gaa.php b/web/framework/i18n/data/gaa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gaa.php
rename to web/framework/i18n/data/gaa.php
diff --git a/web/framework-1.1.17/i18n/data/gaa_gh.php b/web/framework/i18n/data/gaa_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gaa_gh.php
rename to web/framework/i18n/data/gaa_gh.php
diff --git a/web/framework-1.1.17/i18n/data/gd.php b/web/framework/i18n/data/gd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gd.php
rename to web/framework/i18n/data/gd.php
diff --git a/web/framework-1.1.17/i18n/data/gd_gb.php b/web/framework/i18n/data/gd_gb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gd_gb.php
rename to web/framework/i18n/data/gd_gb.php
diff --git a/web/framework-1.1.17/i18n/data/gez.php b/web/framework/i18n/data/gez.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gez.php
rename to web/framework/i18n/data/gez.php
diff --git a/web/framework-1.1.17/i18n/data/gez_er.php b/web/framework/i18n/data/gez_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gez_er.php
rename to web/framework/i18n/data/gez_er.php
diff --git a/web/framework-1.1.17/i18n/data/gez_et.php b/web/framework/i18n/data/gez_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gez_et.php
rename to web/framework/i18n/data/gez_et.php
diff --git a/web/framework-1.1.17/i18n/data/gl.php b/web/framework/i18n/data/gl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gl.php
rename to web/framework/i18n/data/gl.php
diff --git a/web/framework-1.1.17/i18n/data/gl_es.php b/web/framework/i18n/data/gl_es.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gl_es.php
rename to web/framework/i18n/data/gl_es.php
diff --git a/web/framework-1.1.17/i18n/data/gsw.php b/web/framework/i18n/data/gsw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gsw.php
rename to web/framework/i18n/data/gsw.php
diff --git a/web/framework-1.1.17/i18n/data/gsw_ch.php b/web/framework/i18n/data/gsw_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gsw_ch.php
rename to web/framework/i18n/data/gsw_ch.php
diff --git a/web/framework-1.1.17/i18n/data/gu.php b/web/framework/i18n/data/gu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gu.php
rename to web/framework/i18n/data/gu.php
diff --git a/web/framework-1.1.17/i18n/data/gu_in.php b/web/framework/i18n/data/gu_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gu_in.php
rename to web/framework/i18n/data/gu_in.php
diff --git a/web/framework-1.1.17/i18n/data/guz.php b/web/framework/i18n/data/guz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/guz.php
rename to web/framework/i18n/data/guz.php
diff --git a/web/framework-1.1.17/i18n/data/guz_ke.php b/web/framework/i18n/data/guz_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/guz_ke.php
rename to web/framework/i18n/data/guz_ke.php
diff --git a/web/framework-1.1.17/i18n/data/gv.php b/web/framework/i18n/data/gv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gv.php
rename to web/framework/i18n/data/gv.php
diff --git a/web/framework-1.1.17/i18n/data/gv_gb.php b/web/framework/i18n/data/gv_gb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/gv_gb.php
rename to web/framework/i18n/data/gv_gb.php
diff --git a/web/framework-1.1.17/i18n/data/ha.php b/web/framework/i18n/data/ha.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha.php
rename to web/framework/i18n/data/ha.php
diff --git a/web/framework-1.1.17/i18n/data/ha_arab.php b/web/framework/i18n/data/ha_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_arab.php
rename to web/framework/i18n/data/ha_arab.php
diff --git a/web/framework-1.1.17/i18n/data/ha_arab_ng.php b/web/framework/i18n/data/ha_arab_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_arab_ng.php
rename to web/framework/i18n/data/ha_arab_ng.php
diff --git a/web/framework-1.1.17/i18n/data/ha_arab_sd.php b/web/framework/i18n/data/ha_arab_sd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_arab_sd.php
rename to web/framework/i18n/data/ha_arab_sd.php
diff --git a/web/framework-1.1.17/i18n/data/ha_gh.php b/web/framework/i18n/data/ha_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_gh.php
rename to web/framework/i18n/data/ha_gh.php
diff --git a/web/framework-1.1.17/i18n/data/ha_latn.php b/web/framework/i18n/data/ha_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_latn.php
rename to web/framework/i18n/data/ha_latn.php
diff --git a/web/framework-1.1.17/i18n/data/ha_latn_gh.php b/web/framework/i18n/data/ha_latn_gh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_latn_gh.php
rename to web/framework/i18n/data/ha_latn_gh.php
diff --git a/web/framework-1.1.17/i18n/data/ha_latn_ne.php b/web/framework/i18n/data/ha_latn_ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_latn_ne.php
rename to web/framework/i18n/data/ha_latn_ne.php
diff --git a/web/framework-1.1.17/i18n/data/ha_latn_ng.php b/web/framework/i18n/data/ha_latn_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_latn_ng.php
rename to web/framework/i18n/data/ha_latn_ng.php
diff --git a/web/framework-1.1.17/i18n/data/ha_ne.php b/web/framework/i18n/data/ha_ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_ne.php
rename to web/framework/i18n/data/ha_ne.php
diff --git a/web/framework-1.1.17/i18n/data/ha_ng.php b/web/framework/i18n/data/ha_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_ng.php
rename to web/framework/i18n/data/ha_ng.php
diff --git a/web/framework-1.1.17/i18n/data/ha_sd.php b/web/framework/i18n/data/ha_sd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ha_sd.php
rename to web/framework/i18n/data/ha_sd.php
diff --git a/web/framework-1.1.17/i18n/data/haw.php b/web/framework/i18n/data/haw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/haw.php
rename to web/framework/i18n/data/haw.php
diff --git a/web/framework-1.1.17/i18n/data/haw_us.php b/web/framework/i18n/data/haw_us.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/haw_us.php
rename to web/framework/i18n/data/haw_us.php
diff --git a/web/framework-1.1.17/i18n/data/he.php b/web/framework/i18n/data/he.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/he.php
rename to web/framework/i18n/data/he.php
diff --git a/web/framework-1.1.17/i18n/data/he_il.php b/web/framework/i18n/data/he_il.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/he_il.php
rename to web/framework/i18n/data/he_il.php
diff --git a/web/framework-1.1.17/i18n/data/hi.php b/web/framework/i18n/data/hi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hi.php
rename to web/framework/i18n/data/hi.php
diff --git a/web/framework-1.1.17/i18n/data/hi_in.php b/web/framework/i18n/data/hi_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hi_in.php
rename to web/framework/i18n/data/hi_in.php
diff --git a/web/framework-1.1.17/i18n/data/hr.php b/web/framework/i18n/data/hr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hr.php
rename to web/framework/i18n/data/hr.php
diff --git a/web/framework-1.1.17/i18n/data/hr_ba.php b/web/framework/i18n/data/hr_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hr_ba.php
rename to web/framework/i18n/data/hr_ba.php
diff --git a/web/framework-1.1.17/i18n/data/hr_hr.php b/web/framework/i18n/data/hr_hr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hr_hr.php
rename to web/framework/i18n/data/hr_hr.php
diff --git a/web/framework-1.1.17/i18n/data/hu.php b/web/framework/i18n/data/hu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hu.php
rename to web/framework/i18n/data/hu.php
diff --git a/web/framework-1.1.17/i18n/data/hu_hu.php b/web/framework/i18n/data/hu_hu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hu_hu.php
rename to web/framework/i18n/data/hu_hu.php
diff --git a/web/framework-1.1.17/i18n/data/hy.php b/web/framework/i18n/data/hy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hy.php
rename to web/framework/i18n/data/hy.php
diff --git a/web/framework-1.1.17/i18n/data/hy_am.php b/web/framework/i18n/data/hy_am.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/hy_am.php
rename to web/framework/i18n/data/hy_am.php
diff --git a/web/framework-1.1.17/i18n/data/ia.php b/web/framework/i18n/data/ia.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ia.php
rename to web/framework/i18n/data/ia.php
diff --git a/web/framework-1.1.17/i18n/data/ia_fr.php b/web/framework/i18n/data/ia_fr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ia_fr.php
rename to web/framework/i18n/data/ia_fr.php
diff --git a/web/framework-1.1.17/i18n/data/id.php b/web/framework/i18n/data/id.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/id.php
rename to web/framework/i18n/data/id.php
diff --git a/web/framework-1.1.17/i18n/data/id_id.php b/web/framework/i18n/data/id_id.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/id_id.php
rename to web/framework/i18n/data/id_id.php
diff --git a/web/framework-1.1.17/i18n/data/ig.php b/web/framework/i18n/data/ig.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ig.php
rename to web/framework/i18n/data/ig.php
diff --git a/web/framework-1.1.17/i18n/data/ig_ng.php b/web/framework/i18n/data/ig_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ig_ng.php
rename to web/framework/i18n/data/ig_ng.php
diff --git a/web/framework-1.1.17/i18n/data/ii.php b/web/framework/i18n/data/ii.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ii.php
rename to web/framework/i18n/data/ii.php
diff --git a/web/framework-1.1.17/i18n/data/ii_cn.php b/web/framework/i18n/data/ii_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ii_cn.php
rename to web/framework/i18n/data/ii_cn.php
diff --git a/web/framework-1.1.17/i18n/data/in.php b/web/framework/i18n/data/in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/in.php
rename to web/framework/i18n/data/in.php
diff --git a/web/framework-1.1.17/i18n/data/is.php b/web/framework/i18n/data/is.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/is.php
rename to web/framework/i18n/data/is.php
diff --git a/web/framework-1.1.17/i18n/data/is_is.php b/web/framework/i18n/data/is_is.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/is_is.php
rename to web/framework/i18n/data/is_is.php
diff --git a/web/framework-1.1.17/i18n/data/it.php b/web/framework/i18n/data/it.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/it.php
rename to web/framework/i18n/data/it.php
diff --git a/web/framework-1.1.17/i18n/data/it_ch.php b/web/framework/i18n/data/it_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/it_ch.php
rename to web/framework/i18n/data/it_ch.php
diff --git a/web/framework-1.1.17/i18n/data/it_it.php b/web/framework/i18n/data/it_it.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/it_it.php
rename to web/framework/i18n/data/it_it.php
diff --git a/web/framework-1.1.17/i18n/data/it_sm.php b/web/framework/i18n/data/it_sm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/it_sm.php
rename to web/framework/i18n/data/it_sm.php
diff --git a/web/framework-1.1.17/i18n/data/iu.php b/web/framework/i18n/data/iu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/iu.php
rename to web/framework/i18n/data/iu.php
diff --git a/web/framework-1.1.17/i18n/data/iw.php b/web/framework/i18n/data/iw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/iw.php
rename to web/framework/i18n/data/iw.php
diff --git a/web/framework-1.1.17/i18n/data/ja.php b/web/framework/i18n/data/ja.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ja.php
rename to web/framework/i18n/data/ja.php
diff --git a/web/framework-1.1.17/i18n/data/ja_jp.php b/web/framework/i18n/data/ja_jp.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ja_jp.php
rename to web/framework/i18n/data/ja_jp.php
diff --git a/web/framework-1.1.17/i18n/data/jgo.php b/web/framework/i18n/data/jgo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/jgo.php
rename to web/framework/i18n/data/jgo.php
diff --git a/web/framework-1.1.17/i18n/data/jgo_cm.php b/web/framework/i18n/data/jgo_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/jgo_cm.php
rename to web/framework/i18n/data/jgo_cm.php
diff --git a/web/framework-1.1.17/i18n/data/jmc.php b/web/framework/i18n/data/jmc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/jmc.php
rename to web/framework/i18n/data/jmc.php
diff --git a/web/framework-1.1.17/i18n/data/jmc_tz.php b/web/framework/i18n/data/jmc_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/jmc_tz.php
rename to web/framework/i18n/data/jmc_tz.php
diff --git a/web/framework-1.1.17/i18n/data/ka.php b/web/framework/i18n/data/ka.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ka.php
rename to web/framework/i18n/data/ka.php
diff --git a/web/framework-1.1.17/i18n/data/ka_ge.php b/web/framework/i18n/data/ka_ge.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ka_ge.php
rename to web/framework/i18n/data/ka_ge.php
diff --git a/web/framework-1.1.17/i18n/data/kab.php b/web/framework/i18n/data/kab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kab.php
rename to web/framework/i18n/data/kab.php
diff --git a/web/framework-1.1.17/i18n/data/kab_dz.php b/web/framework/i18n/data/kab_dz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kab_dz.php
rename to web/framework/i18n/data/kab_dz.php
diff --git a/web/framework-1.1.17/i18n/data/kaj.php b/web/framework/i18n/data/kaj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kaj.php
rename to web/framework/i18n/data/kaj.php
diff --git a/web/framework-1.1.17/i18n/data/kaj_ng.php b/web/framework/i18n/data/kaj_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kaj_ng.php
rename to web/framework/i18n/data/kaj_ng.php
diff --git a/web/framework-1.1.17/i18n/data/kam.php b/web/framework/i18n/data/kam.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kam.php
rename to web/framework/i18n/data/kam.php
diff --git a/web/framework-1.1.17/i18n/data/kam_ke.php b/web/framework/i18n/data/kam_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kam_ke.php
rename to web/framework/i18n/data/kam_ke.php
diff --git a/web/framework-1.1.17/i18n/data/kcg.php b/web/framework/i18n/data/kcg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kcg.php
rename to web/framework/i18n/data/kcg.php
diff --git a/web/framework-1.1.17/i18n/data/kcg_ng.php b/web/framework/i18n/data/kcg_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kcg_ng.php
rename to web/framework/i18n/data/kcg_ng.php
diff --git a/web/framework-1.1.17/i18n/data/kde.php b/web/framework/i18n/data/kde.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kde.php
rename to web/framework/i18n/data/kde.php
diff --git a/web/framework-1.1.17/i18n/data/kde_tz.php b/web/framework/i18n/data/kde_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kde_tz.php
rename to web/framework/i18n/data/kde_tz.php
diff --git a/web/framework-1.1.17/i18n/data/kea.php b/web/framework/i18n/data/kea.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kea.php
rename to web/framework/i18n/data/kea.php
diff --git a/web/framework-1.1.17/i18n/data/kea_cv.php b/web/framework/i18n/data/kea_cv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kea_cv.php
rename to web/framework/i18n/data/kea_cv.php
diff --git a/web/framework-1.1.17/i18n/data/kfo.php b/web/framework/i18n/data/kfo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kfo.php
rename to web/framework/i18n/data/kfo.php
diff --git a/web/framework-1.1.17/i18n/data/kfo_ci.php b/web/framework/i18n/data/kfo_ci.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kfo_ci.php
rename to web/framework/i18n/data/kfo_ci.php
diff --git a/web/framework-1.1.17/i18n/data/khq.php b/web/framework/i18n/data/khq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/khq.php
rename to web/framework/i18n/data/khq.php
diff --git a/web/framework-1.1.17/i18n/data/khq_ml.php b/web/framework/i18n/data/khq_ml.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/khq_ml.php
rename to web/framework/i18n/data/khq_ml.php
diff --git a/web/framework-1.1.17/i18n/data/ki.php b/web/framework/i18n/data/ki.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ki.php
rename to web/framework/i18n/data/ki.php
diff --git a/web/framework-1.1.17/i18n/data/ki_ke.php b/web/framework/i18n/data/ki_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ki_ke.php
rename to web/framework/i18n/data/ki_ke.php
diff --git a/web/framework-1.1.17/i18n/data/kk.php b/web/framework/i18n/data/kk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kk.php
rename to web/framework/i18n/data/kk.php
diff --git a/web/framework-1.1.17/i18n/data/kk_cyrl.php b/web/framework/i18n/data/kk_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kk_cyrl.php
rename to web/framework/i18n/data/kk_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/kk_cyrl_kz.php b/web/framework/i18n/data/kk_cyrl_kz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kk_cyrl_kz.php
rename to web/framework/i18n/data/kk_cyrl_kz.php
diff --git a/web/framework-1.1.17/i18n/data/kk_kz.php b/web/framework/i18n/data/kk_kz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kk_kz.php
rename to web/framework/i18n/data/kk_kz.php
diff --git a/web/framework-1.1.17/i18n/data/kkj.php b/web/framework/i18n/data/kkj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kkj.php
rename to web/framework/i18n/data/kkj.php
diff --git a/web/framework-1.1.17/i18n/data/kkj_cm.php b/web/framework/i18n/data/kkj_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kkj_cm.php
rename to web/framework/i18n/data/kkj_cm.php
diff --git a/web/framework-1.1.17/i18n/data/kl.php b/web/framework/i18n/data/kl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kl.php
rename to web/framework/i18n/data/kl.php
diff --git a/web/framework-1.1.17/i18n/data/kl_gl.php b/web/framework/i18n/data/kl_gl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kl_gl.php
rename to web/framework/i18n/data/kl_gl.php
diff --git a/web/framework-1.1.17/i18n/data/kln.php b/web/framework/i18n/data/kln.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kln.php
rename to web/framework/i18n/data/kln.php
diff --git a/web/framework-1.1.17/i18n/data/kln_ke.php b/web/framework/i18n/data/kln_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kln_ke.php
rename to web/framework/i18n/data/kln_ke.php
diff --git a/web/framework-1.1.17/i18n/data/km.php b/web/framework/i18n/data/km.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/km.php
rename to web/framework/i18n/data/km.php
diff --git a/web/framework-1.1.17/i18n/data/km_kh.php b/web/framework/i18n/data/km_kh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/km_kh.php
rename to web/framework/i18n/data/km_kh.php
diff --git a/web/framework-1.1.17/i18n/data/kn.php b/web/framework/i18n/data/kn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kn.php
rename to web/framework/i18n/data/kn.php
diff --git a/web/framework-1.1.17/i18n/data/kn_in.php b/web/framework/i18n/data/kn_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kn_in.php
rename to web/framework/i18n/data/kn_in.php
diff --git a/web/framework-1.1.17/i18n/data/ko.php b/web/framework/i18n/data/ko.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ko.php
rename to web/framework/i18n/data/ko.php
diff --git a/web/framework-1.1.17/i18n/data/ko_kp.php b/web/framework/i18n/data/ko_kp.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ko_kp.php
rename to web/framework/i18n/data/ko_kp.php
diff --git a/web/framework-1.1.17/i18n/data/ko_kr.php b/web/framework/i18n/data/ko_kr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ko_kr.php
rename to web/framework/i18n/data/ko_kr.php
diff --git a/web/framework-1.1.17/i18n/data/kok.php b/web/framework/i18n/data/kok.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kok.php
rename to web/framework/i18n/data/kok.php
diff --git a/web/framework-1.1.17/i18n/data/kok_in.php b/web/framework/i18n/data/kok_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kok_in.php
rename to web/framework/i18n/data/kok_in.php
diff --git a/web/framework-1.1.17/i18n/data/kpe.php b/web/framework/i18n/data/kpe.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kpe.php
rename to web/framework/i18n/data/kpe.php
diff --git a/web/framework-1.1.17/i18n/data/kpe_gn.php b/web/framework/i18n/data/kpe_gn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kpe_gn.php
rename to web/framework/i18n/data/kpe_gn.php
diff --git a/web/framework-1.1.17/i18n/data/kpe_lr.php b/web/framework/i18n/data/kpe_lr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kpe_lr.php
rename to web/framework/i18n/data/kpe_lr.php
diff --git a/web/framework-1.1.17/i18n/data/ks.php b/web/framework/i18n/data/ks.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ks.php
rename to web/framework/i18n/data/ks.php
diff --git a/web/framework-1.1.17/i18n/data/ks_arab.php b/web/framework/i18n/data/ks_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ks_arab.php
rename to web/framework/i18n/data/ks_arab.php
diff --git a/web/framework-1.1.17/i18n/data/ks_arab_in.php b/web/framework/i18n/data/ks_arab_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ks_arab_in.php
rename to web/framework/i18n/data/ks_arab_in.php
diff --git a/web/framework-1.1.17/i18n/data/ksb.php b/web/framework/i18n/data/ksb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksb.php
rename to web/framework/i18n/data/ksb.php
diff --git a/web/framework-1.1.17/i18n/data/ksb_tz.php b/web/framework/i18n/data/ksb_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksb_tz.php
rename to web/framework/i18n/data/ksb_tz.php
diff --git a/web/framework-1.1.17/i18n/data/ksf.php b/web/framework/i18n/data/ksf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksf.php
rename to web/framework/i18n/data/ksf.php
diff --git a/web/framework-1.1.17/i18n/data/ksf_cm.php b/web/framework/i18n/data/ksf_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksf_cm.php
rename to web/framework/i18n/data/ksf_cm.php
diff --git a/web/framework-1.1.17/i18n/data/ksh.php b/web/framework/i18n/data/ksh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksh.php
rename to web/framework/i18n/data/ksh.php
diff --git a/web/framework-1.1.17/i18n/data/ksh_de.php b/web/framework/i18n/data/ksh_de.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ksh_de.php
rename to web/framework/i18n/data/ksh_de.php
diff --git a/web/framework-1.1.17/i18n/data/ku.php b/web/framework/i18n/data/ku.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku.php
rename to web/framework/i18n/data/ku.php
diff --git a/web/framework-1.1.17/i18n/data/ku_arab.php b/web/framework/i18n/data/ku_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_arab.php
rename to web/framework/i18n/data/ku_arab.php
diff --git a/web/framework-1.1.17/i18n/data/ku_arab_iq.php b/web/framework/i18n/data/ku_arab_iq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_arab_iq.php
rename to web/framework/i18n/data/ku_arab_iq.php
diff --git a/web/framework-1.1.17/i18n/data/ku_arab_ir.php b/web/framework/i18n/data/ku_arab_ir.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_arab_ir.php
rename to web/framework/i18n/data/ku_arab_ir.php
diff --git a/web/framework-1.1.17/i18n/data/ku_iq.php b/web/framework/i18n/data/ku_iq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_iq.php
rename to web/framework/i18n/data/ku_iq.php
diff --git a/web/framework-1.1.17/i18n/data/ku_ir.php b/web/framework/i18n/data/ku_ir.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_ir.php
rename to web/framework/i18n/data/ku_ir.php
diff --git a/web/framework-1.1.17/i18n/data/ku_latn.php b/web/framework/i18n/data/ku_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_latn.php
rename to web/framework/i18n/data/ku_latn.php
diff --git a/web/framework-1.1.17/i18n/data/ku_latn_sy.php b/web/framework/i18n/data/ku_latn_sy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_latn_sy.php
rename to web/framework/i18n/data/ku_latn_sy.php
diff --git a/web/framework-1.1.17/i18n/data/ku_latn_tr.php b/web/framework/i18n/data/ku_latn_tr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_latn_tr.php
rename to web/framework/i18n/data/ku_latn_tr.php
diff --git a/web/framework-1.1.17/i18n/data/ku_sy.php b/web/framework/i18n/data/ku_sy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_sy.php
rename to web/framework/i18n/data/ku_sy.php
diff --git a/web/framework-1.1.17/i18n/data/ku_tr.php b/web/framework/i18n/data/ku_tr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ku_tr.php
rename to web/framework/i18n/data/ku_tr.php
diff --git a/web/framework-1.1.17/i18n/data/kw.php b/web/framework/i18n/data/kw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kw.php
rename to web/framework/i18n/data/kw.php
diff --git a/web/framework-1.1.17/i18n/data/kw_gb.php b/web/framework/i18n/data/kw_gb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/kw_gb.php
rename to web/framework/i18n/data/kw_gb.php
diff --git a/web/framework-1.1.17/i18n/data/ky.php b/web/framework/i18n/data/ky.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ky.php
rename to web/framework/i18n/data/ky.php
diff --git a/web/framework-1.1.17/i18n/data/ky_kg.php b/web/framework/i18n/data/ky_kg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ky_kg.php
rename to web/framework/i18n/data/ky_kg.php
diff --git a/web/framework-1.1.17/i18n/data/lag.php b/web/framework/i18n/data/lag.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lag.php
rename to web/framework/i18n/data/lag.php
diff --git a/web/framework-1.1.17/i18n/data/lag_tz.php b/web/framework/i18n/data/lag_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lag_tz.php
rename to web/framework/i18n/data/lag_tz.php
diff --git a/web/framework-1.1.17/i18n/data/lg.php b/web/framework/i18n/data/lg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lg.php
rename to web/framework/i18n/data/lg.php
diff --git a/web/framework-1.1.17/i18n/data/lg_ug.php b/web/framework/i18n/data/lg_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lg_ug.php
rename to web/framework/i18n/data/lg_ug.php
diff --git a/web/framework-1.1.17/i18n/data/ln.php b/web/framework/i18n/data/ln.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ln.php
rename to web/framework/i18n/data/ln.php
diff --git a/web/framework-1.1.17/i18n/data/ln_ao.php b/web/framework/i18n/data/ln_ao.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ln_ao.php
rename to web/framework/i18n/data/ln_ao.php
diff --git a/web/framework-1.1.17/i18n/data/ln_cd.php b/web/framework/i18n/data/ln_cd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ln_cd.php
rename to web/framework/i18n/data/ln_cd.php
diff --git a/web/framework-1.1.17/i18n/data/ln_cf.php b/web/framework/i18n/data/ln_cf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ln_cf.php
rename to web/framework/i18n/data/ln_cf.php
diff --git a/web/framework-1.1.17/i18n/data/ln_cg.php b/web/framework/i18n/data/ln_cg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ln_cg.php
rename to web/framework/i18n/data/ln_cg.php
diff --git a/web/framework-1.1.17/i18n/data/lo.php b/web/framework/i18n/data/lo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lo.php
rename to web/framework/i18n/data/lo.php
diff --git a/web/framework-1.1.17/i18n/data/lo_la.php b/web/framework/i18n/data/lo_la.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lo_la.php
rename to web/framework/i18n/data/lo_la.php
diff --git a/web/framework-1.1.17/i18n/data/lt.php b/web/framework/i18n/data/lt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lt.php
rename to web/framework/i18n/data/lt.php
diff --git a/web/framework-1.1.17/i18n/data/lt_lt.php b/web/framework/i18n/data/lt_lt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lt_lt.php
rename to web/framework/i18n/data/lt_lt.php
diff --git a/web/framework-1.1.17/i18n/data/lu.php b/web/framework/i18n/data/lu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lu.php
rename to web/framework/i18n/data/lu.php
diff --git a/web/framework-1.1.17/i18n/data/lu_cd.php b/web/framework/i18n/data/lu_cd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lu_cd.php
rename to web/framework/i18n/data/lu_cd.php
diff --git a/web/framework-1.1.17/i18n/data/luo.php b/web/framework/i18n/data/luo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/luo.php
rename to web/framework/i18n/data/luo.php
diff --git a/web/framework-1.1.17/i18n/data/luo_ke.php b/web/framework/i18n/data/luo_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/luo_ke.php
rename to web/framework/i18n/data/luo_ke.php
diff --git a/web/framework-1.1.17/i18n/data/luy.php b/web/framework/i18n/data/luy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/luy.php
rename to web/framework/i18n/data/luy.php
diff --git a/web/framework-1.1.17/i18n/data/luy_ke.php b/web/framework/i18n/data/luy_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/luy_ke.php
rename to web/framework/i18n/data/luy_ke.php
diff --git a/web/framework-1.1.17/i18n/data/lv.php b/web/framework/i18n/data/lv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lv.php
rename to web/framework/i18n/data/lv.php
diff --git a/web/framework-1.1.17/i18n/data/lv_lv.php b/web/framework/i18n/data/lv_lv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/lv_lv.php
rename to web/framework/i18n/data/lv_lv.php
diff --git a/web/framework-1.1.17/i18n/data/mas.php b/web/framework/i18n/data/mas.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mas.php
rename to web/framework/i18n/data/mas.php
diff --git a/web/framework-1.1.17/i18n/data/mas_ke.php b/web/framework/i18n/data/mas_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mas_ke.php
rename to web/framework/i18n/data/mas_ke.php
diff --git a/web/framework-1.1.17/i18n/data/mas_tz.php b/web/framework/i18n/data/mas_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mas_tz.php
rename to web/framework/i18n/data/mas_tz.php
diff --git a/web/framework-1.1.17/i18n/data/mer.php b/web/framework/i18n/data/mer.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mer.php
rename to web/framework/i18n/data/mer.php
diff --git a/web/framework-1.1.17/i18n/data/mer_ke.php b/web/framework/i18n/data/mer_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mer_ke.php
rename to web/framework/i18n/data/mer_ke.php
diff --git a/web/framework-1.1.17/i18n/data/mfe.php b/web/framework/i18n/data/mfe.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mfe.php
rename to web/framework/i18n/data/mfe.php
diff --git a/web/framework-1.1.17/i18n/data/mfe_mu.php b/web/framework/i18n/data/mfe_mu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mfe_mu.php
rename to web/framework/i18n/data/mfe_mu.php
diff --git a/web/framework-1.1.17/i18n/data/mg.php b/web/framework/i18n/data/mg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mg.php
rename to web/framework/i18n/data/mg.php
diff --git a/web/framework-1.1.17/i18n/data/mg_mg.php b/web/framework/i18n/data/mg_mg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mg_mg.php
rename to web/framework/i18n/data/mg_mg.php
diff --git a/web/framework-1.1.17/i18n/data/mgh.php b/web/framework/i18n/data/mgh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mgh.php
rename to web/framework/i18n/data/mgh.php
diff --git a/web/framework-1.1.17/i18n/data/mgh_mz.php b/web/framework/i18n/data/mgh_mz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mgh_mz.php
rename to web/framework/i18n/data/mgh_mz.php
diff --git a/web/framework-1.1.17/i18n/data/mgo.php b/web/framework/i18n/data/mgo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mgo.php
rename to web/framework/i18n/data/mgo.php
diff --git a/web/framework-1.1.17/i18n/data/mgo_cm.php b/web/framework/i18n/data/mgo_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mgo_cm.php
rename to web/framework/i18n/data/mgo_cm.php
diff --git a/web/framework-1.1.17/i18n/data/mi.php b/web/framework/i18n/data/mi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mi.php
rename to web/framework/i18n/data/mi.php
diff --git a/web/framework-1.1.17/i18n/data/mi_nz.php b/web/framework/i18n/data/mi_nz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mi_nz.php
rename to web/framework/i18n/data/mi_nz.php
diff --git a/web/framework-1.1.17/i18n/data/mk.php b/web/framework/i18n/data/mk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mk.php
rename to web/framework/i18n/data/mk.php
diff --git a/web/framework-1.1.17/i18n/data/mk_mk.php b/web/framework/i18n/data/mk_mk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mk_mk.php
rename to web/framework/i18n/data/mk_mk.php
diff --git a/web/framework-1.1.17/i18n/data/ml.php b/web/framework/i18n/data/ml.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ml.php
rename to web/framework/i18n/data/ml.php
diff --git a/web/framework-1.1.17/i18n/data/ml_in.php b/web/framework/i18n/data/ml_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ml_in.php
rename to web/framework/i18n/data/ml_in.php
diff --git a/web/framework-1.1.17/i18n/data/mn.php b/web/framework/i18n/data/mn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn.php
rename to web/framework/i18n/data/mn.php
diff --git a/web/framework-1.1.17/i18n/data/mn_cn.php b/web/framework/i18n/data/mn_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_cn.php
rename to web/framework/i18n/data/mn_cn.php
diff --git a/web/framework-1.1.17/i18n/data/mn_cyrl.php b/web/framework/i18n/data/mn_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_cyrl.php
rename to web/framework/i18n/data/mn_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/mn_cyrl_mn.php b/web/framework/i18n/data/mn_cyrl_mn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_cyrl_mn.php
rename to web/framework/i18n/data/mn_cyrl_mn.php
diff --git a/web/framework-1.1.17/i18n/data/mn_mn.php b/web/framework/i18n/data/mn_mn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_mn.php
rename to web/framework/i18n/data/mn_mn.php
diff --git a/web/framework-1.1.17/i18n/data/mn_mong.php b/web/framework/i18n/data/mn_mong.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_mong.php
rename to web/framework/i18n/data/mn_mong.php
diff --git a/web/framework-1.1.17/i18n/data/mn_mong_cn.php b/web/framework/i18n/data/mn_mong_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mn_mong_cn.php
rename to web/framework/i18n/data/mn_mong_cn.php
diff --git a/web/framework-1.1.17/i18n/data/mo.php b/web/framework/i18n/data/mo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mo.php
rename to web/framework/i18n/data/mo.php
diff --git a/web/framework-1.1.17/i18n/data/mr.php b/web/framework/i18n/data/mr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mr.php
rename to web/framework/i18n/data/mr.php
diff --git a/web/framework-1.1.17/i18n/data/mr_in.php b/web/framework/i18n/data/mr_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mr_in.php
rename to web/framework/i18n/data/mr_in.php
diff --git a/web/framework-1.1.17/i18n/data/ms.php b/web/framework/i18n/data/ms.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms.php
rename to web/framework/i18n/data/ms.php
diff --git a/web/framework-1.1.17/i18n/data/ms_bn.php b/web/framework/i18n/data/ms_bn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_bn.php
rename to web/framework/i18n/data/ms_bn.php
diff --git a/web/framework-1.1.17/i18n/data/ms_latn.php b/web/framework/i18n/data/ms_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_latn.php
rename to web/framework/i18n/data/ms_latn.php
diff --git a/web/framework-1.1.17/i18n/data/ms_latn_bn.php b/web/framework/i18n/data/ms_latn_bn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_latn_bn.php
rename to web/framework/i18n/data/ms_latn_bn.php
diff --git a/web/framework-1.1.17/i18n/data/ms_latn_my.php b/web/framework/i18n/data/ms_latn_my.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_latn_my.php
rename to web/framework/i18n/data/ms_latn_my.php
diff --git a/web/framework-1.1.17/i18n/data/ms_latn_sg.php b/web/framework/i18n/data/ms_latn_sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_latn_sg.php
rename to web/framework/i18n/data/ms_latn_sg.php
diff --git a/web/framework-1.1.17/i18n/data/ms_my.php b/web/framework/i18n/data/ms_my.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ms_my.php
rename to web/framework/i18n/data/ms_my.php
diff --git a/web/framework-1.1.17/i18n/data/mt.php b/web/framework/i18n/data/mt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mt.php
rename to web/framework/i18n/data/mt.php
diff --git a/web/framework-1.1.17/i18n/data/mt_mt.php b/web/framework/i18n/data/mt_mt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mt_mt.php
rename to web/framework/i18n/data/mt_mt.php
diff --git a/web/framework-1.1.17/i18n/data/mua.php b/web/framework/i18n/data/mua.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mua.php
rename to web/framework/i18n/data/mua.php
diff --git a/web/framework-1.1.17/i18n/data/mua_cm.php b/web/framework/i18n/data/mua_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/mua_cm.php
rename to web/framework/i18n/data/mua_cm.php
diff --git a/web/framework-1.1.17/i18n/data/my.php b/web/framework/i18n/data/my.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/my.php
rename to web/framework/i18n/data/my.php
diff --git a/web/framework-1.1.17/i18n/data/my_mm.php b/web/framework/i18n/data/my_mm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/my_mm.php
rename to web/framework/i18n/data/my_mm.php
diff --git a/web/framework-1.1.17/i18n/data/naq.php b/web/framework/i18n/data/naq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/naq.php
rename to web/framework/i18n/data/naq.php
diff --git a/web/framework-1.1.17/i18n/data/naq_na.php b/web/framework/i18n/data/naq_na.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/naq_na.php
rename to web/framework/i18n/data/naq_na.php
diff --git a/web/framework-1.1.17/i18n/data/nb.php b/web/framework/i18n/data/nb.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nb.php
rename to web/framework/i18n/data/nb.php
diff --git a/web/framework-1.1.17/i18n/data/nb_no.php b/web/framework/i18n/data/nb_no.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nb_no.php
rename to web/framework/i18n/data/nb_no.php
diff --git a/web/framework-1.1.17/i18n/data/nd.php b/web/framework/i18n/data/nd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nd.php
rename to web/framework/i18n/data/nd.php
diff --git a/web/framework-1.1.17/i18n/data/nd_zw.php b/web/framework/i18n/data/nd_zw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nd_zw.php
rename to web/framework/i18n/data/nd_zw.php
diff --git a/web/framework-1.1.17/i18n/data/nds.php b/web/framework/i18n/data/nds.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nds.php
rename to web/framework/i18n/data/nds.php
diff --git a/web/framework-1.1.17/i18n/data/nds_de.php b/web/framework/i18n/data/nds_de.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nds_de.php
rename to web/framework/i18n/data/nds_de.php
diff --git a/web/framework-1.1.17/i18n/data/ne.php b/web/framework/i18n/data/ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ne.php
rename to web/framework/i18n/data/ne.php
diff --git a/web/framework-1.1.17/i18n/data/ne_in.php b/web/framework/i18n/data/ne_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ne_in.php
rename to web/framework/i18n/data/ne_in.php
diff --git a/web/framework-1.1.17/i18n/data/ne_np.php b/web/framework/i18n/data/ne_np.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ne_np.php
rename to web/framework/i18n/data/ne_np.php
diff --git a/web/framework-1.1.17/i18n/data/nl.php b/web/framework/i18n/data/nl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl.php
rename to web/framework/i18n/data/nl.php
diff --git a/web/framework-1.1.17/i18n/data/nl_aw.php b/web/framework/i18n/data/nl_aw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_aw.php
rename to web/framework/i18n/data/nl_aw.php
diff --git a/web/framework-1.1.17/i18n/data/nl_be.php b/web/framework/i18n/data/nl_be.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_be.php
rename to web/framework/i18n/data/nl_be.php
diff --git a/web/framework-1.1.17/i18n/data/nl_cw.php b/web/framework/i18n/data/nl_cw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_cw.php
rename to web/framework/i18n/data/nl_cw.php
diff --git a/web/framework-1.1.17/i18n/data/nl_nl.php b/web/framework/i18n/data/nl_nl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_nl.php
rename to web/framework/i18n/data/nl_nl.php
diff --git a/web/framework-1.1.17/i18n/data/nl_sr.php b/web/framework/i18n/data/nl_sr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_sr.php
rename to web/framework/i18n/data/nl_sr.php
diff --git a/web/framework-1.1.17/i18n/data/nl_sx.php b/web/framework/i18n/data/nl_sx.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nl_sx.php
rename to web/framework/i18n/data/nl_sx.php
diff --git a/web/framework-1.1.17/i18n/data/nmg.php b/web/framework/i18n/data/nmg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nmg.php
rename to web/framework/i18n/data/nmg.php
diff --git a/web/framework-1.1.17/i18n/data/nmg_cm.php b/web/framework/i18n/data/nmg_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nmg_cm.php
rename to web/framework/i18n/data/nmg_cm.php
diff --git a/web/framework-1.1.17/i18n/data/nn.php b/web/framework/i18n/data/nn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nn.php
rename to web/framework/i18n/data/nn.php
diff --git a/web/framework-1.1.17/i18n/data/nn_no.php b/web/framework/i18n/data/nn_no.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nn_no.php
rename to web/framework/i18n/data/nn_no.php
diff --git a/web/framework-1.1.17/i18n/data/nnh.php b/web/framework/i18n/data/nnh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nnh.php
rename to web/framework/i18n/data/nnh.php
diff --git a/web/framework-1.1.17/i18n/data/nnh_cm.php b/web/framework/i18n/data/nnh_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nnh_cm.php
rename to web/framework/i18n/data/nnh_cm.php
diff --git a/web/framework-1.1.17/i18n/data/no.php b/web/framework/i18n/data/no.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/no.php
rename to web/framework/i18n/data/no.php
diff --git a/web/framework-1.1.17/i18n/data/nr.php b/web/framework/i18n/data/nr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nr.php
rename to web/framework/i18n/data/nr.php
diff --git a/web/framework-1.1.17/i18n/data/nr_za.php b/web/framework/i18n/data/nr_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nr_za.php
rename to web/framework/i18n/data/nr_za.php
diff --git a/web/framework-1.1.17/i18n/data/nso.php b/web/framework/i18n/data/nso.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nso.php
rename to web/framework/i18n/data/nso.php
diff --git a/web/framework-1.1.17/i18n/data/nso_za.php b/web/framework/i18n/data/nso_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nso_za.php
rename to web/framework/i18n/data/nso_za.php
diff --git a/web/framework-1.1.17/i18n/data/nus.php b/web/framework/i18n/data/nus.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nus.php
rename to web/framework/i18n/data/nus.php
diff --git a/web/framework-1.1.17/i18n/data/nus_sd.php b/web/framework/i18n/data/nus_sd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nus_sd.php
rename to web/framework/i18n/data/nus_sd.php
diff --git a/web/framework-1.1.17/i18n/data/ny.php b/web/framework/i18n/data/ny.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ny.php
rename to web/framework/i18n/data/ny.php
diff --git a/web/framework-1.1.17/i18n/data/ny_mw.php b/web/framework/i18n/data/ny_mw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ny_mw.php
rename to web/framework/i18n/data/ny_mw.php
diff --git a/web/framework-1.1.17/i18n/data/nyn.php b/web/framework/i18n/data/nyn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nyn.php
rename to web/framework/i18n/data/nyn.php
diff --git a/web/framework-1.1.17/i18n/data/nyn_ug.php b/web/framework/i18n/data/nyn_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/nyn_ug.php
rename to web/framework/i18n/data/nyn_ug.php
diff --git a/web/framework-1.1.17/i18n/data/oc.php b/web/framework/i18n/data/oc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/oc.php
rename to web/framework/i18n/data/oc.php
diff --git a/web/framework-1.1.17/i18n/data/oc_fr.php b/web/framework/i18n/data/oc_fr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/oc_fr.php
rename to web/framework/i18n/data/oc_fr.php
diff --git a/web/framework-1.1.17/i18n/data/om.php b/web/framework/i18n/data/om.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/om.php
rename to web/framework/i18n/data/om.php
diff --git a/web/framework-1.1.17/i18n/data/om_et.php b/web/framework/i18n/data/om_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/om_et.php
rename to web/framework/i18n/data/om_et.php
diff --git a/web/framework-1.1.17/i18n/data/om_ke.php b/web/framework/i18n/data/om_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/om_ke.php
rename to web/framework/i18n/data/om_ke.php
diff --git a/web/framework-1.1.17/i18n/data/or.php b/web/framework/i18n/data/or.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/or.php
rename to web/framework/i18n/data/or.php
diff --git a/web/framework-1.1.17/i18n/data/or_in.php b/web/framework/i18n/data/or_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/or_in.php
rename to web/framework/i18n/data/or_in.php
diff --git a/web/framework-1.1.17/i18n/data/os.php b/web/framework/i18n/data/os.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/os.php
rename to web/framework/i18n/data/os.php
diff --git a/web/framework-1.1.17/i18n/data/os_ge.php b/web/framework/i18n/data/os_ge.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/os_ge.php
rename to web/framework/i18n/data/os_ge.php
diff --git a/web/framework-1.1.17/i18n/data/os_ru.php b/web/framework/i18n/data/os_ru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/os_ru.php
rename to web/framework/i18n/data/os_ru.php
diff --git a/web/framework-1.1.17/i18n/data/pa.php b/web/framework/i18n/data/pa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa.php
rename to web/framework/i18n/data/pa.php
diff --git a/web/framework-1.1.17/i18n/data/pa_arab.php b/web/framework/i18n/data/pa_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_arab.php
rename to web/framework/i18n/data/pa_arab.php
diff --git a/web/framework-1.1.17/i18n/data/pa_arab_pk.php b/web/framework/i18n/data/pa_arab_pk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_arab_pk.php
rename to web/framework/i18n/data/pa_arab_pk.php
diff --git a/web/framework-1.1.17/i18n/data/pa_guru.php b/web/framework/i18n/data/pa_guru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_guru.php
rename to web/framework/i18n/data/pa_guru.php
diff --git a/web/framework-1.1.17/i18n/data/pa_guru_in.php b/web/framework/i18n/data/pa_guru_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_guru_in.php
rename to web/framework/i18n/data/pa_guru_in.php
diff --git a/web/framework-1.1.17/i18n/data/pa_in.php b/web/framework/i18n/data/pa_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_in.php
rename to web/framework/i18n/data/pa_in.php
diff --git a/web/framework-1.1.17/i18n/data/pa_pk.php b/web/framework/i18n/data/pa_pk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pa_pk.php
rename to web/framework/i18n/data/pa_pk.php
diff --git a/web/framework-1.1.17/i18n/data/pl.php b/web/framework/i18n/data/pl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pl.php
rename to web/framework/i18n/data/pl.php
diff --git a/web/framework-1.1.17/i18n/data/pl_pl.php b/web/framework/i18n/data/pl_pl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pl_pl.php
rename to web/framework/i18n/data/pl_pl.php
diff --git a/web/framework-1.1.17/i18n/data/ps.php b/web/framework/i18n/data/ps.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ps.php
rename to web/framework/i18n/data/ps.php
diff --git a/web/framework-1.1.17/i18n/data/ps_af.php b/web/framework/i18n/data/ps_af.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ps_af.php
rename to web/framework/i18n/data/ps_af.php
diff --git a/web/framework-1.1.17/i18n/data/pt.php b/web/framework/i18n/data/pt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt.php
rename to web/framework/i18n/data/pt.php
diff --git a/web/framework-1.1.17/i18n/data/pt_ao.php b/web/framework/i18n/data/pt_ao.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_ao.php
rename to web/framework/i18n/data/pt_ao.php
diff --git a/web/framework-1.1.17/i18n/data/pt_br.php b/web/framework/i18n/data/pt_br.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_br.php
rename to web/framework/i18n/data/pt_br.php
diff --git a/web/framework-1.1.17/i18n/data/pt_cv.php b/web/framework/i18n/data/pt_cv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_cv.php
rename to web/framework/i18n/data/pt_cv.php
diff --git a/web/framework-1.1.17/i18n/data/pt_gw.php b/web/framework/i18n/data/pt_gw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_gw.php
rename to web/framework/i18n/data/pt_gw.php
diff --git a/web/framework-1.1.17/i18n/data/pt_mo.php b/web/framework/i18n/data/pt_mo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_mo.php
rename to web/framework/i18n/data/pt_mo.php
diff --git a/web/framework-1.1.17/i18n/data/pt_mz.php b/web/framework/i18n/data/pt_mz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_mz.php
rename to web/framework/i18n/data/pt_mz.php
diff --git a/web/framework-1.1.17/i18n/data/pt_pt.php b/web/framework/i18n/data/pt_pt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_pt.php
rename to web/framework/i18n/data/pt_pt.php
diff --git a/web/framework-1.1.17/i18n/data/pt_st.php b/web/framework/i18n/data/pt_st.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_st.php
rename to web/framework/i18n/data/pt_st.php
diff --git a/web/framework-1.1.17/i18n/data/pt_tl.php b/web/framework/i18n/data/pt_tl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/pt_tl.php
rename to web/framework/i18n/data/pt_tl.php
diff --git a/web/framework-1.1.17/i18n/data/rm.php b/web/framework/i18n/data/rm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rm.php
rename to web/framework/i18n/data/rm.php
diff --git a/web/framework-1.1.17/i18n/data/rm_ch.php b/web/framework/i18n/data/rm_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rm_ch.php
rename to web/framework/i18n/data/rm_ch.php
diff --git a/web/framework-1.1.17/i18n/data/rn.php b/web/framework/i18n/data/rn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rn.php
rename to web/framework/i18n/data/rn.php
diff --git a/web/framework-1.1.17/i18n/data/rn_bi.php b/web/framework/i18n/data/rn_bi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rn_bi.php
rename to web/framework/i18n/data/rn_bi.php
diff --git a/web/framework-1.1.17/i18n/data/ro.php b/web/framework/i18n/data/ro.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ro.php
rename to web/framework/i18n/data/ro.php
diff --git a/web/framework-1.1.17/i18n/data/ro_md.php b/web/framework/i18n/data/ro_md.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ro_md.php
rename to web/framework/i18n/data/ro_md.php
diff --git a/web/framework-1.1.17/i18n/data/ro_ro.php b/web/framework/i18n/data/ro_ro.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ro_ro.php
rename to web/framework/i18n/data/ro_ro.php
diff --git a/web/framework-1.1.17/i18n/data/rof.php b/web/framework/i18n/data/rof.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rof.php
rename to web/framework/i18n/data/rof.php
diff --git a/web/framework-1.1.17/i18n/data/rof_tz.php b/web/framework/i18n/data/rof_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rof_tz.php
rename to web/framework/i18n/data/rof_tz.php
diff --git a/web/framework-1.1.17/i18n/data/root.php b/web/framework/i18n/data/root.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/root.php
rename to web/framework/i18n/data/root.php
diff --git a/web/framework-1.1.17/i18n/data/ru.php b/web/framework/i18n/data/ru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru.php
rename to web/framework/i18n/data/ru.php
diff --git a/web/framework-1.1.17/i18n/data/ru_by.php b/web/framework/i18n/data/ru_by.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_by.php
rename to web/framework/i18n/data/ru_by.php
diff --git a/web/framework-1.1.17/i18n/data/ru_kg.php b/web/framework/i18n/data/ru_kg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_kg.php
rename to web/framework/i18n/data/ru_kg.php
diff --git a/web/framework-1.1.17/i18n/data/ru_kz.php b/web/framework/i18n/data/ru_kz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_kz.php
rename to web/framework/i18n/data/ru_kz.php
diff --git a/web/framework-1.1.17/i18n/data/ru_md.php b/web/framework/i18n/data/ru_md.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_md.php
rename to web/framework/i18n/data/ru_md.php
diff --git a/web/framework-1.1.17/i18n/data/ru_ru.php b/web/framework/i18n/data/ru_ru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_ru.php
rename to web/framework/i18n/data/ru_ru.php
diff --git a/web/framework-1.1.17/i18n/data/ru_ua.php b/web/framework/i18n/data/ru_ua.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ru_ua.php
rename to web/framework/i18n/data/ru_ua.php
diff --git a/web/framework-1.1.17/i18n/data/rw.php b/web/framework/i18n/data/rw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rw.php
rename to web/framework/i18n/data/rw.php
diff --git a/web/framework-1.1.17/i18n/data/rw_rw.php b/web/framework/i18n/data/rw_rw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rw_rw.php
rename to web/framework/i18n/data/rw_rw.php
diff --git a/web/framework-1.1.17/i18n/data/rwk.php b/web/framework/i18n/data/rwk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rwk.php
rename to web/framework/i18n/data/rwk.php
diff --git a/web/framework-1.1.17/i18n/data/rwk_tz.php b/web/framework/i18n/data/rwk_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/rwk_tz.php
rename to web/framework/i18n/data/rwk_tz.php
diff --git a/web/framework-1.1.17/i18n/data/sa.php b/web/framework/i18n/data/sa.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sa.php
rename to web/framework/i18n/data/sa.php
diff --git a/web/framework-1.1.17/i18n/data/sa_in.php b/web/framework/i18n/data/sa_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sa_in.php
rename to web/framework/i18n/data/sa_in.php
diff --git a/web/framework-1.1.17/i18n/data/sah.php b/web/framework/i18n/data/sah.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sah.php
rename to web/framework/i18n/data/sah.php
diff --git a/web/framework-1.1.17/i18n/data/sah_ru.php b/web/framework/i18n/data/sah_ru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sah_ru.php
rename to web/framework/i18n/data/sah_ru.php
diff --git a/web/framework-1.1.17/i18n/data/saq.php b/web/framework/i18n/data/saq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/saq.php
rename to web/framework/i18n/data/saq.php
diff --git a/web/framework-1.1.17/i18n/data/saq_ke.php b/web/framework/i18n/data/saq_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/saq_ke.php
rename to web/framework/i18n/data/saq_ke.php
diff --git a/web/framework-1.1.17/i18n/data/sbp.php b/web/framework/i18n/data/sbp.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sbp.php
rename to web/framework/i18n/data/sbp.php
diff --git a/web/framework-1.1.17/i18n/data/sbp_tz.php b/web/framework/i18n/data/sbp_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sbp_tz.php
rename to web/framework/i18n/data/sbp_tz.php
diff --git a/web/framework-1.1.17/i18n/data/se.php b/web/framework/i18n/data/se.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/se.php
rename to web/framework/i18n/data/se.php
diff --git a/web/framework-1.1.17/i18n/data/se_fi.php b/web/framework/i18n/data/se_fi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/se_fi.php
rename to web/framework/i18n/data/se_fi.php
diff --git a/web/framework-1.1.17/i18n/data/se_no.php b/web/framework/i18n/data/se_no.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/se_no.php
rename to web/framework/i18n/data/se_no.php
diff --git a/web/framework-1.1.17/i18n/data/seh.php b/web/framework/i18n/data/seh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/seh.php
rename to web/framework/i18n/data/seh.php
diff --git a/web/framework-1.1.17/i18n/data/seh_mz.php b/web/framework/i18n/data/seh_mz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/seh_mz.php
rename to web/framework/i18n/data/seh_mz.php
diff --git a/web/framework-1.1.17/i18n/data/ses.php b/web/framework/i18n/data/ses.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ses.php
rename to web/framework/i18n/data/ses.php
diff --git a/web/framework-1.1.17/i18n/data/ses_ml.php b/web/framework/i18n/data/ses_ml.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ses_ml.php
rename to web/framework/i18n/data/ses_ml.php
diff --git a/web/framework-1.1.17/i18n/data/sg.php b/web/framework/i18n/data/sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sg.php
rename to web/framework/i18n/data/sg.php
diff --git a/web/framework-1.1.17/i18n/data/sg_cf.php b/web/framework/i18n/data/sg_cf.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sg_cf.php
rename to web/framework/i18n/data/sg_cf.php
diff --git a/web/framework-1.1.17/i18n/data/sh.php b/web/framework/i18n/data/sh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sh.php
rename to web/framework/i18n/data/sh.php
diff --git a/web/framework-1.1.17/i18n/data/sh_ba.php b/web/framework/i18n/data/sh_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sh_ba.php
rename to web/framework/i18n/data/sh_ba.php
diff --git a/web/framework-1.1.17/i18n/data/sh_cs.php b/web/framework/i18n/data/sh_cs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sh_cs.php
rename to web/framework/i18n/data/sh_cs.php
diff --git a/web/framework-1.1.17/i18n/data/sh_yu.php b/web/framework/i18n/data/sh_yu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sh_yu.php
rename to web/framework/i18n/data/sh_yu.php
diff --git a/web/framework-1.1.17/i18n/data/shi.php b/web/framework/i18n/data/shi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi.php
rename to web/framework/i18n/data/shi.php
diff --git a/web/framework-1.1.17/i18n/data/shi_latn.php b/web/framework/i18n/data/shi_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi_latn.php
rename to web/framework/i18n/data/shi_latn.php
diff --git a/web/framework-1.1.17/i18n/data/shi_latn_ma.php b/web/framework/i18n/data/shi_latn_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi_latn_ma.php
rename to web/framework/i18n/data/shi_latn_ma.php
diff --git a/web/framework-1.1.17/i18n/data/shi_ma.php b/web/framework/i18n/data/shi_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi_ma.php
rename to web/framework/i18n/data/shi_ma.php
diff --git a/web/framework-1.1.17/i18n/data/shi_tfng.php b/web/framework/i18n/data/shi_tfng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi_tfng.php
rename to web/framework/i18n/data/shi_tfng.php
diff --git a/web/framework-1.1.17/i18n/data/shi_tfng_ma.php b/web/framework/i18n/data/shi_tfng_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/shi_tfng_ma.php
rename to web/framework/i18n/data/shi_tfng_ma.php
diff --git a/web/framework-1.1.17/i18n/data/si.php b/web/framework/i18n/data/si.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/si.php
rename to web/framework/i18n/data/si.php
diff --git a/web/framework-1.1.17/i18n/data/si_lk.php b/web/framework/i18n/data/si_lk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/si_lk.php
rename to web/framework/i18n/data/si_lk.php
diff --git a/web/framework-1.1.17/i18n/data/sid.php b/web/framework/i18n/data/sid.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sid.php
rename to web/framework/i18n/data/sid.php
diff --git a/web/framework-1.1.17/i18n/data/sid_et.php b/web/framework/i18n/data/sid_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sid_et.php
rename to web/framework/i18n/data/sid_et.php
diff --git a/web/framework-1.1.17/i18n/data/sk.php b/web/framework/i18n/data/sk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sk.php
rename to web/framework/i18n/data/sk.php
diff --git a/web/framework-1.1.17/i18n/data/sk_sk.php b/web/framework/i18n/data/sk_sk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sk_sk.php
rename to web/framework/i18n/data/sk_sk.php
diff --git a/web/framework-1.1.17/i18n/data/sl.php b/web/framework/i18n/data/sl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sl.php
rename to web/framework/i18n/data/sl.php
diff --git a/web/framework-1.1.17/i18n/data/sl_si.php b/web/framework/i18n/data/sl_si.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sl_si.php
rename to web/framework/i18n/data/sl_si.php
diff --git a/web/framework-1.1.17/i18n/data/sn.php b/web/framework/i18n/data/sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sn.php
rename to web/framework/i18n/data/sn.php
diff --git a/web/framework-1.1.17/i18n/data/sn_zw.php b/web/framework/i18n/data/sn_zw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sn_zw.php
rename to web/framework/i18n/data/sn_zw.php
diff --git a/web/framework-1.1.17/i18n/data/so.php b/web/framework/i18n/data/so.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/so.php
rename to web/framework/i18n/data/so.php
diff --git a/web/framework-1.1.17/i18n/data/so_dj.php b/web/framework/i18n/data/so_dj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/so_dj.php
rename to web/framework/i18n/data/so_dj.php
diff --git a/web/framework-1.1.17/i18n/data/so_et.php b/web/framework/i18n/data/so_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/so_et.php
rename to web/framework/i18n/data/so_et.php
diff --git a/web/framework-1.1.17/i18n/data/so_ke.php b/web/framework/i18n/data/so_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/so_ke.php
rename to web/framework/i18n/data/so_ke.php
diff --git a/web/framework-1.1.17/i18n/data/so_so.php b/web/framework/i18n/data/so_so.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/so_so.php
rename to web/framework/i18n/data/so_so.php
diff --git a/web/framework-1.1.17/i18n/data/sq.php b/web/framework/i18n/data/sq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sq.php
rename to web/framework/i18n/data/sq.php
diff --git a/web/framework-1.1.17/i18n/data/sq_al.php b/web/framework/i18n/data/sq_al.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sq_al.php
rename to web/framework/i18n/data/sq_al.php
diff --git a/web/framework-1.1.17/i18n/data/sq_mk.php b/web/framework/i18n/data/sq_mk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sq_mk.php
rename to web/framework/i18n/data/sq_mk.php
diff --git a/web/framework-1.1.17/i18n/data/sq_xk.php b/web/framework/i18n/data/sq_xk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sq_xk.php
rename to web/framework/i18n/data/sq_xk.php
diff --git a/web/framework-1.1.17/i18n/data/sr.php b/web/framework/i18n/data/sr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr.php
rename to web/framework/i18n/data/sr.php
diff --git a/web/framework-1.1.17/i18n/data/sr_ba.php b/web/framework/i18n/data/sr_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_ba.php
rename to web/framework/i18n/data/sr_ba.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cs.php b/web/framework/i18n/data/sr_cs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cs.php
rename to web/framework/i18n/data/sr_cs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl.php b/web/framework/i18n/data/sr_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl.php
rename to web/framework/i18n/data/sr_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_ba.php b/web/framework/i18n/data/sr_cyrl_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_ba.php
rename to web/framework/i18n/data/sr_cyrl_ba.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_cs.php b/web/framework/i18n/data/sr_cyrl_cs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_cs.php
rename to web/framework/i18n/data/sr_cyrl_cs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_me.php b/web/framework/i18n/data/sr_cyrl_me.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_me.php
rename to web/framework/i18n/data/sr_cyrl_me.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_rs.php b/web/framework/i18n/data/sr_cyrl_rs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_rs.php
rename to web/framework/i18n/data/sr_cyrl_rs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_xk.php b/web/framework/i18n/data/sr_cyrl_xk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_xk.php
rename to web/framework/i18n/data/sr_cyrl_xk.php
diff --git a/web/framework-1.1.17/i18n/data/sr_cyrl_yu.php b/web/framework/i18n/data/sr_cyrl_yu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_cyrl_yu.php
rename to web/framework/i18n/data/sr_cyrl_yu.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn.php b/web/framework/i18n/data/sr_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn.php
rename to web/framework/i18n/data/sr_latn.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_ba.php b/web/framework/i18n/data/sr_latn_ba.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_ba.php
rename to web/framework/i18n/data/sr_latn_ba.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_cs.php b/web/framework/i18n/data/sr_latn_cs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_cs.php
rename to web/framework/i18n/data/sr_latn_cs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_me.php b/web/framework/i18n/data/sr_latn_me.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_me.php
rename to web/framework/i18n/data/sr_latn_me.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_rs.php b/web/framework/i18n/data/sr_latn_rs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_rs.php
rename to web/framework/i18n/data/sr_latn_rs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_xk.php b/web/framework/i18n/data/sr_latn_xk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_xk.php
rename to web/framework/i18n/data/sr_latn_xk.php
diff --git a/web/framework-1.1.17/i18n/data/sr_latn_yu.php b/web/framework/i18n/data/sr_latn_yu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_latn_yu.php
rename to web/framework/i18n/data/sr_latn_yu.php
diff --git a/web/framework-1.1.17/i18n/data/sr_me.php b/web/framework/i18n/data/sr_me.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_me.php
rename to web/framework/i18n/data/sr_me.php
diff --git a/web/framework-1.1.17/i18n/data/sr_rs.php b/web/framework/i18n/data/sr_rs.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_rs.php
rename to web/framework/i18n/data/sr_rs.php
diff --git a/web/framework-1.1.17/i18n/data/sr_yu.php b/web/framework/i18n/data/sr_yu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sr_yu.php
rename to web/framework/i18n/data/sr_yu.php
diff --git a/web/framework-1.1.17/i18n/data/ss.php b/web/framework/i18n/data/ss.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ss.php
rename to web/framework/i18n/data/ss.php
diff --git a/web/framework-1.1.17/i18n/data/ss_sz.php b/web/framework/i18n/data/ss_sz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ss_sz.php
rename to web/framework/i18n/data/ss_sz.php
diff --git a/web/framework-1.1.17/i18n/data/ss_za.php b/web/framework/i18n/data/ss_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ss_za.php
rename to web/framework/i18n/data/ss_za.php
diff --git a/web/framework-1.1.17/i18n/data/ssy.php b/web/framework/i18n/data/ssy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ssy.php
rename to web/framework/i18n/data/ssy.php
diff --git a/web/framework-1.1.17/i18n/data/ssy_er.php b/web/framework/i18n/data/ssy_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ssy_er.php
rename to web/framework/i18n/data/ssy_er.php
diff --git a/web/framework-1.1.17/i18n/data/st.php b/web/framework/i18n/data/st.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/st.php
rename to web/framework/i18n/data/st.php
diff --git a/web/framework-1.1.17/i18n/data/st_ls.php b/web/framework/i18n/data/st_ls.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/st_ls.php
rename to web/framework/i18n/data/st_ls.php
diff --git a/web/framework-1.1.17/i18n/data/st_za.php b/web/framework/i18n/data/st_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/st_za.php
rename to web/framework/i18n/data/st_za.php
diff --git a/web/framework-1.1.17/i18n/data/sv.php b/web/framework/i18n/data/sv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sv.php
rename to web/framework/i18n/data/sv.php
diff --git a/web/framework-1.1.17/i18n/data/sv_ax.php b/web/framework/i18n/data/sv_ax.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sv_ax.php
rename to web/framework/i18n/data/sv_ax.php
diff --git a/web/framework-1.1.17/i18n/data/sv_fi.php b/web/framework/i18n/data/sv_fi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sv_fi.php
rename to web/framework/i18n/data/sv_fi.php
diff --git a/web/framework-1.1.17/i18n/data/sv_se.php b/web/framework/i18n/data/sv_se.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sv_se.php
rename to web/framework/i18n/data/sv_se.php
diff --git a/web/framework-1.1.17/i18n/data/sw.php b/web/framework/i18n/data/sw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sw.php
rename to web/framework/i18n/data/sw.php
diff --git a/web/framework-1.1.17/i18n/data/sw_ke.php b/web/framework/i18n/data/sw_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sw_ke.php
rename to web/framework/i18n/data/sw_ke.php
diff --git a/web/framework-1.1.17/i18n/data/sw_tz.php b/web/framework/i18n/data/sw_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sw_tz.php
rename to web/framework/i18n/data/sw_tz.php
diff --git a/web/framework-1.1.17/i18n/data/sw_ug.php b/web/framework/i18n/data/sw_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/sw_ug.php
rename to web/framework/i18n/data/sw_ug.php
diff --git a/web/framework-1.1.17/i18n/data/swc.php b/web/framework/i18n/data/swc.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/swc.php
rename to web/framework/i18n/data/swc.php
diff --git a/web/framework-1.1.17/i18n/data/swc_cd.php b/web/framework/i18n/data/swc_cd.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/swc_cd.php
rename to web/framework/i18n/data/swc_cd.php
diff --git a/web/framework-1.1.17/i18n/data/syr.php b/web/framework/i18n/data/syr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/syr.php
rename to web/framework/i18n/data/syr.php
diff --git a/web/framework-1.1.17/i18n/data/syr_sy.php b/web/framework/i18n/data/syr_sy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/syr_sy.php
rename to web/framework/i18n/data/syr_sy.php
diff --git a/web/framework-1.1.17/i18n/data/ta.php b/web/framework/i18n/data/ta.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ta.php
rename to web/framework/i18n/data/ta.php
diff --git a/web/framework-1.1.17/i18n/data/ta_in.php b/web/framework/i18n/data/ta_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ta_in.php
rename to web/framework/i18n/data/ta_in.php
diff --git a/web/framework-1.1.17/i18n/data/ta_lk.php b/web/framework/i18n/data/ta_lk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ta_lk.php
rename to web/framework/i18n/data/ta_lk.php
diff --git a/web/framework-1.1.17/i18n/data/ta_my.php b/web/framework/i18n/data/ta_my.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ta_my.php
rename to web/framework/i18n/data/ta_my.php
diff --git a/web/framework-1.1.17/i18n/data/ta_sg.php b/web/framework/i18n/data/ta_sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ta_sg.php
rename to web/framework/i18n/data/ta_sg.php
diff --git a/web/framework-1.1.17/i18n/data/te.php b/web/framework/i18n/data/te.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/te.php
rename to web/framework/i18n/data/te.php
diff --git a/web/framework-1.1.17/i18n/data/te_in.php b/web/framework/i18n/data/te_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/te_in.php
rename to web/framework/i18n/data/te_in.php
diff --git a/web/framework-1.1.17/i18n/data/teo.php b/web/framework/i18n/data/teo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/teo.php
rename to web/framework/i18n/data/teo.php
diff --git a/web/framework-1.1.17/i18n/data/teo_ke.php b/web/framework/i18n/data/teo_ke.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/teo_ke.php
rename to web/framework/i18n/data/teo_ke.php
diff --git a/web/framework-1.1.17/i18n/data/teo_ug.php b/web/framework/i18n/data/teo_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/teo_ug.php
rename to web/framework/i18n/data/teo_ug.php
diff --git a/web/framework-1.1.17/i18n/data/tg.php b/web/framework/i18n/data/tg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tg.php
rename to web/framework/i18n/data/tg.php
diff --git a/web/framework-1.1.17/i18n/data/tg_cyrl.php b/web/framework/i18n/data/tg_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tg_cyrl.php
rename to web/framework/i18n/data/tg_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/tg_cyrl_tj.php b/web/framework/i18n/data/tg_cyrl_tj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tg_cyrl_tj.php
rename to web/framework/i18n/data/tg_cyrl_tj.php
diff --git a/web/framework-1.1.17/i18n/data/tg_tj.php b/web/framework/i18n/data/tg_tj.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tg_tj.php
rename to web/framework/i18n/data/tg_tj.php
diff --git a/web/framework-1.1.17/i18n/data/th.php b/web/framework/i18n/data/th.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/th.php
rename to web/framework/i18n/data/th.php
diff --git a/web/framework-1.1.17/i18n/data/th_th.php b/web/framework/i18n/data/th_th.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/th_th.php
rename to web/framework/i18n/data/th_th.php
diff --git a/web/framework-1.1.17/i18n/data/ti.php b/web/framework/i18n/data/ti.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ti.php
rename to web/framework/i18n/data/ti.php
diff --git a/web/framework-1.1.17/i18n/data/ti_er.php b/web/framework/i18n/data/ti_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ti_er.php
rename to web/framework/i18n/data/ti_er.php
diff --git a/web/framework-1.1.17/i18n/data/ti_et.php b/web/framework/i18n/data/ti_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ti_et.php
rename to web/framework/i18n/data/ti_et.php
diff --git a/web/framework-1.1.17/i18n/data/tig.php b/web/framework/i18n/data/tig.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tig.php
rename to web/framework/i18n/data/tig.php
diff --git a/web/framework-1.1.17/i18n/data/tig_er.php b/web/framework/i18n/data/tig_er.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tig_er.php
rename to web/framework/i18n/data/tig_er.php
diff --git a/web/framework-1.1.17/i18n/data/tl.php b/web/framework/i18n/data/tl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tl.php
rename to web/framework/i18n/data/tl.php
diff --git a/web/framework-1.1.17/i18n/data/tl_ph.php b/web/framework/i18n/data/tl_ph.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tl_ph.php
rename to web/framework/i18n/data/tl_ph.php
diff --git a/web/framework-1.1.17/i18n/data/tn.php b/web/framework/i18n/data/tn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tn.php
rename to web/framework/i18n/data/tn.php
diff --git a/web/framework-1.1.17/i18n/data/tn_bw.php b/web/framework/i18n/data/tn_bw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tn_bw.php
rename to web/framework/i18n/data/tn_bw.php
diff --git a/web/framework-1.1.17/i18n/data/tn_za.php b/web/framework/i18n/data/tn_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tn_za.php
rename to web/framework/i18n/data/tn_za.php
diff --git a/web/framework-1.1.17/i18n/data/to.php b/web/framework/i18n/data/to.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/to.php
rename to web/framework/i18n/data/to.php
diff --git a/web/framework-1.1.17/i18n/data/to_to.php b/web/framework/i18n/data/to_to.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/to_to.php
rename to web/framework/i18n/data/to_to.php
diff --git a/web/framework-1.1.17/i18n/data/tr.php b/web/framework/i18n/data/tr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tr.php
rename to web/framework/i18n/data/tr.php
diff --git a/web/framework-1.1.17/i18n/data/tr_cy.php b/web/framework/i18n/data/tr_cy.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tr_cy.php
rename to web/framework/i18n/data/tr_cy.php
diff --git a/web/framework-1.1.17/i18n/data/tr_tr.php b/web/framework/i18n/data/tr_tr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tr_tr.php
rename to web/framework/i18n/data/tr_tr.php
diff --git a/web/framework-1.1.17/i18n/data/trv.php b/web/framework/i18n/data/trv.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/trv.php
rename to web/framework/i18n/data/trv.php
diff --git a/web/framework-1.1.17/i18n/data/trv_tw.php b/web/framework/i18n/data/trv_tw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/trv_tw.php
rename to web/framework/i18n/data/trv_tw.php
diff --git a/web/framework-1.1.17/i18n/data/ts.php b/web/framework/i18n/data/ts.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ts.php
rename to web/framework/i18n/data/ts.php
diff --git a/web/framework-1.1.17/i18n/data/ts_za.php b/web/framework/i18n/data/ts_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ts_za.php
rename to web/framework/i18n/data/ts_za.php
diff --git a/web/framework-1.1.17/i18n/data/tt.php b/web/framework/i18n/data/tt.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tt.php
rename to web/framework/i18n/data/tt.php
diff --git a/web/framework-1.1.17/i18n/data/tt_ru.php b/web/framework/i18n/data/tt_ru.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tt_ru.php
rename to web/framework/i18n/data/tt_ru.php
diff --git a/web/framework-1.1.17/i18n/data/twq.php b/web/framework/i18n/data/twq.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/twq.php
rename to web/framework/i18n/data/twq.php
diff --git a/web/framework-1.1.17/i18n/data/twq_ne.php b/web/framework/i18n/data/twq_ne.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/twq_ne.php
rename to web/framework/i18n/data/twq_ne.php
diff --git a/web/framework-1.1.17/i18n/data/tzm.php b/web/framework/i18n/data/tzm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tzm.php
rename to web/framework/i18n/data/tzm.php
diff --git a/web/framework-1.1.17/i18n/data/tzm_latn.php b/web/framework/i18n/data/tzm_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tzm_latn.php
rename to web/framework/i18n/data/tzm_latn.php
diff --git a/web/framework-1.1.17/i18n/data/tzm_latn_ma.php b/web/framework/i18n/data/tzm_latn_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tzm_latn_ma.php
rename to web/framework/i18n/data/tzm_latn_ma.php
diff --git a/web/framework-1.1.17/i18n/data/tzm_ma.php b/web/framework/i18n/data/tzm_ma.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/tzm_ma.php
rename to web/framework/i18n/data/tzm_ma.php
diff --git a/web/framework-1.1.17/i18n/data/ug.php b/web/framework/i18n/data/ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ug.php
rename to web/framework/i18n/data/ug.php
diff --git a/web/framework-1.1.17/i18n/data/ug_arab.php b/web/framework/i18n/data/ug_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ug_arab.php
rename to web/framework/i18n/data/ug_arab.php
diff --git a/web/framework-1.1.17/i18n/data/ug_arab_cn.php b/web/framework/i18n/data/ug_arab_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ug_arab_cn.php
rename to web/framework/i18n/data/ug_arab_cn.php
diff --git a/web/framework-1.1.17/i18n/data/ug_cn.php b/web/framework/i18n/data/ug_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ug_cn.php
rename to web/framework/i18n/data/ug_cn.php
diff --git a/web/framework-1.1.17/i18n/data/uk.php b/web/framework/i18n/data/uk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uk.php
rename to web/framework/i18n/data/uk.php
diff --git a/web/framework-1.1.17/i18n/data/uk_ua.php b/web/framework/i18n/data/uk_ua.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uk_ua.php
rename to web/framework/i18n/data/uk_ua.php
diff --git a/web/framework-1.1.17/i18n/data/ur.php b/web/framework/i18n/data/ur.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ur.php
rename to web/framework/i18n/data/ur.php
diff --git a/web/framework-1.1.17/i18n/data/ur_in.php b/web/framework/i18n/data/ur_in.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ur_in.php
rename to web/framework/i18n/data/ur_in.php
diff --git a/web/framework-1.1.17/i18n/data/ur_pk.php b/web/framework/i18n/data/ur_pk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ur_pk.php
rename to web/framework/i18n/data/ur_pk.php
diff --git a/web/framework-1.1.17/i18n/data/uz.php b/web/framework/i18n/data/uz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz.php
rename to web/framework/i18n/data/uz.php
diff --git a/web/framework-1.1.17/i18n/data/uz_af.php b/web/framework/i18n/data/uz_af.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_af.php
rename to web/framework/i18n/data/uz_af.php
diff --git a/web/framework-1.1.17/i18n/data/uz_arab.php b/web/framework/i18n/data/uz_arab.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_arab.php
rename to web/framework/i18n/data/uz_arab.php
diff --git a/web/framework-1.1.17/i18n/data/uz_arab_af.php b/web/framework/i18n/data/uz_arab_af.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_arab_af.php
rename to web/framework/i18n/data/uz_arab_af.php
diff --git a/web/framework-1.1.17/i18n/data/uz_cyrl.php b/web/framework/i18n/data/uz_cyrl.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_cyrl.php
rename to web/framework/i18n/data/uz_cyrl.php
diff --git a/web/framework-1.1.17/i18n/data/uz_cyrl_uz.php b/web/framework/i18n/data/uz_cyrl_uz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_cyrl_uz.php
rename to web/framework/i18n/data/uz_cyrl_uz.php
diff --git a/web/framework-1.1.17/i18n/data/uz_latn.php b/web/framework/i18n/data/uz_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_latn.php
rename to web/framework/i18n/data/uz_latn.php
diff --git a/web/framework-1.1.17/i18n/data/uz_latn_uz.php b/web/framework/i18n/data/uz_latn_uz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_latn_uz.php
rename to web/framework/i18n/data/uz_latn_uz.php
diff --git a/web/framework-1.1.17/i18n/data/uz_uz.php b/web/framework/i18n/data/uz_uz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/uz_uz.php
rename to web/framework/i18n/data/uz_uz.php
diff --git a/web/framework-1.1.17/i18n/data/vai.php b/web/framework/i18n/data/vai.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vai.php
rename to web/framework/i18n/data/vai.php
diff --git a/web/framework-1.1.17/i18n/data/vai_latn.php b/web/framework/i18n/data/vai_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vai_latn.php
rename to web/framework/i18n/data/vai_latn.php
diff --git a/web/framework-1.1.17/i18n/data/vai_latn_lr.php b/web/framework/i18n/data/vai_latn_lr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vai_latn_lr.php
rename to web/framework/i18n/data/vai_latn_lr.php
diff --git a/web/framework-1.1.17/i18n/data/vai_vaii.php b/web/framework/i18n/data/vai_vaii.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vai_vaii.php
rename to web/framework/i18n/data/vai_vaii.php
diff --git a/web/framework-1.1.17/i18n/data/vai_vaii_lr.php b/web/framework/i18n/data/vai_vaii_lr.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vai_vaii_lr.php
rename to web/framework/i18n/data/vai_vaii_lr.php
diff --git a/web/framework-1.1.17/i18n/data/ve.php b/web/framework/i18n/data/ve.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ve.php
rename to web/framework/i18n/data/ve.php
diff --git a/web/framework-1.1.17/i18n/data/ve_za.php b/web/framework/i18n/data/ve_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/ve_za.php
rename to web/framework/i18n/data/ve_za.php
diff --git a/web/framework-1.1.17/i18n/data/vi.php b/web/framework/i18n/data/vi.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vi.php
rename to web/framework/i18n/data/vi.php
diff --git a/web/framework-1.1.17/i18n/data/vi_vn.php b/web/framework/i18n/data/vi_vn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vi_vn.php
rename to web/framework/i18n/data/vi_vn.php
diff --git a/web/framework-1.1.17/i18n/data/vo.php b/web/framework/i18n/data/vo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vo.php
rename to web/framework/i18n/data/vo.php
diff --git a/web/framework-1.1.17/i18n/data/vun.php b/web/framework/i18n/data/vun.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vun.php
rename to web/framework/i18n/data/vun.php
diff --git a/web/framework-1.1.17/i18n/data/vun_tz.php b/web/framework/i18n/data/vun_tz.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/vun_tz.php
rename to web/framework/i18n/data/vun_tz.php
diff --git a/web/framework-1.1.17/i18n/data/wae.php b/web/framework/i18n/data/wae.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wae.php
rename to web/framework/i18n/data/wae.php
diff --git a/web/framework-1.1.17/i18n/data/wae_ch.php b/web/framework/i18n/data/wae_ch.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wae_ch.php
rename to web/framework/i18n/data/wae_ch.php
diff --git a/web/framework-1.1.17/i18n/data/wal.php b/web/framework/i18n/data/wal.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wal.php
rename to web/framework/i18n/data/wal.php
diff --git a/web/framework-1.1.17/i18n/data/wal_et.php b/web/framework/i18n/data/wal_et.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wal_et.php
rename to web/framework/i18n/data/wal_et.php
diff --git a/web/framework-1.1.17/i18n/data/wo.php b/web/framework/i18n/data/wo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wo.php
rename to web/framework/i18n/data/wo.php
diff --git a/web/framework-1.1.17/i18n/data/wo_latn.php b/web/framework/i18n/data/wo_latn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wo_latn.php
rename to web/framework/i18n/data/wo_latn.php
diff --git a/web/framework-1.1.17/i18n/data/wo_latn_sn.php b/web/framework/i18n/data/wo_latn_sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wo_latn_sn.php
rename to web/framework/i18n/data/wo_latn_sn.php
diff --git a/web/framework-1.1.17/i18n/data/wo_sn.php b/web/framework/i18n/data/wo_sn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/wo_sn.php
rename to web/framework/i18n/data/wo_sn.php
diff --git a/web/framework-1.1.17/i18n/data/xh.php b/web/framework/i18n/data/xh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/xh.php
rename to web/framework/i18n/data/xh.php
diff --git a/web/framework-1.1.17/i18n/data/xh_za.php b/web/framework/i18n/data/xh_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/xh_za.php
rename to web/framework/i18n/data/xh_za.php
diff --git a/web/framework-1.1.17/i18n/data/xog.php b/web/framework/i18n/data/xog.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/xog.php
rename to web/framework/i18n/data/xog.php
diff --git a/web/framework-1.1.17/i18n/data/xog_ug.php b/web/framework/i18n/data/xog_ug.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/xog_ug.php
rename to web/framework/i18n/data/xog_ug.php
diff --git a/web/framework-1.1.17/i18n/data/yav.php b/web/framework/i18n/data/yav.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/yav.php
rename to web/framework/i18n/data/yav.php
diff --git a/web/framework-1.1.17/i18n/data/yav_cm.php b/web/framework/i18n/data/yav_cm.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/yav_cm.php
rename to web/framework/i18n/data/yav_cm.php
diff --git a/web/framework-1.1.17/i18n/data/yo.php b/web/framework/i18n/data/yo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/yo.php
rename to web/framework/i18n/data/yo.php
diff --git a/web/framework-1.1.17/i18n/data/yo_ng.php b/web/framework/i18n/data/yo_ng.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/yo_ng.php
rename to web/framework/i18n/data/yo_ng.php
diff --git a/web/framework-1.1.17/i18n/data/zh.php b/web/framework/i18n/data/zh.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh.php
rename to web/framework/i18n/data/zh.php
diff --git a/web/framework-1.1.17/i18n/data/zh_cn.php b/web/framework/i18n/data/zh_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_cn.php
rename to web/framework/i18n/data/zh_cn.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hans.php b/web/framework/i18n/data/zh_hans.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hans.php
rename to web/framework/i18n/data/zh_hans.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hans_cn.php b/web/framework/i18n/data/zh_hans_cn.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hans_cn.php
rename to web/framework/i18n/data/zh_hans_cn.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hans_hk.php b/web/framework/i18n/data/zh_hans_hk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hans_hk.php
rename to web/framework/i18n/data/zh_hans_hk.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hans_mo.php b/web/framework/i18n/data/zh_hans_mo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hans_mo.php
rename to web/framework/i18n/data/zh_hans_mo.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hans_sg.php b/web/framework/i18n/data/zh_hans_sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hans_sg.php
rename to web/framework/i18n/data/zh_hans_sg.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hant.php b/web/framework/i18n/data/zh_hant.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hant.php
rename to web/framework/i18n/data/zh_hant.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hant_hk.php b/web/framework/i18n/data/zh_hant_hk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hant_hk.php
rename to web/framework/i18n/data/zh_hant_hk.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hant_mo.php b/web/framework/i18n/data/zh_hant_mo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hant_mo.php
rename to web/framework/i18n/data/zh_hant_mo.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hant_tw.php b/web/framework/i18n/data/zh_hant_tw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hant_tw.php
rename to web/framework/i18n/data/zh_hant_tw.php
diff --git a/web/framework-1.1.17/i18n/data/zh_hk.php b/web/framework/i18n/data/zh_hk.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_hk.php
rename to web/framework/i18n/data/zh_hk.php
diff --git a/web/framework-1.1.17/i18n/data/zh_mo.php b/web/framework/i18n/data/zh_mo.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_mo.php
rename to web/framework/i18n/data/zh_mo.php
diff --git a/web/framework-1.1.17/i18n/data/zh_sg.php b/web/framework/i18n/data/zh_sg.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_sg.php
rename to web/framework/i18n/data/zh_sg.php
diff --git a/web/framework-1.1.17/i18n/data/zh_tw.php b/web/framework/i18n/data/zh_tw.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zh_tw.php
rename to web/framework/i18n/data/zh_tw.php
diff --git a/web/framework-1.1.17/i18n/data/zu.php b/web/framework/i18n/data/zu.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zu.php
rename to web/framework/i18n/data/zu.php
diff --git a/web/framework-1.1.17/i18n/data/zu_za.php b/web/framework/i18n/data/zu_za.php
similarity index 100%
rename from web/framework-1.1.17/i18n/data/zu_za.php
rename to web/framework/i18n/data/zu_za.php
diff --git a/web/framework-1.1.17/i18n/gettext/CGettextFile.php b/web/framework/i18n/gettext/CGettextFile.php
similarity index 100%
rename from web/framework-1.1.17/i18n/gettext/CGettextFile.php
rename to web/framework/i18n/gettext/CGettextFile.php
diff --git a/web/framework-1.1.17/i18n/gettext/CGettextMoFile.php b/web/framework/i18n/gettext/CGettextMoFile.php
similarity index 99%
rename from web/framework-1.1.17/i18n/gettext/CGettextMoFile.php
rename to web/framework/i18n/gettext/CGettextMoFile.php
index 221af6d..af226f8 100644
--- a/web/framework-1.1.17/i18n/gettext/CGettextMoFile.php
+++ b/web/framework/i18n/gettext/CGettextMoFile.php
@@ -62,6 +62,7 @@ class CGettextMoFile extends CGettextFile
* @param string $file file path
* @param string $context message context
* @return array message translations (source message => translated message)
+ * @throws CException
*/
public function load($file,$context)
{
@@ -137,6 +138,7 @@ class CGettextMoFile extends CGettextFile
* @param array $messages message translations (message id => translated message).
* Note if the message has a context, the message id must be prefixed with
* the context with chr(4) as the separator.
+ * @throws CException
*/
public function save($file,$messages)
{
diff --git a/web/framework-1.1.17/i18n/gettext/CGettextPoFile.php b/web/framework/i18n/gettext/CGettextPoFile.php
similarity index 100%
rename from web/framework-1.1.17/i18n/gettext/CGettextPoFile.php
rename to web/framework/i18n/gettext/CGettextPoFile.php
diff --git a/web/framework-1.1.17/logging/CChainedLogFilter.php b/web/framework/logging/CChainedLogFilter.php
similarity index 100%
rename from web/framework-1.1.17/logging/CChainedLogFilter.php
rename to web/framework/logging/CChainedLogFilter.php
diff --git a/web/framework-1.1.17/logging/CDbLogRoute.php b/web/framework/logging/CDbLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CDbLogRoute.php
rename to web/framework/logging/CDbLogRoute.php
diff --git a/web/framework-1.1.17/logging/CEmailLogRoute.php b/web/framework/logging/CEmailLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CEmailLogRoute.php
rename to web/framework/logging/CEmailLogRoute.php
diff --git a/web/framework-1.1.17/logging/CFileLogRoute.php b/web/framework/logging/CFileLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CFileLogRoute.php
rename to web/framework/logging/CFileLogRoute.php
diff --git a/web/framework-1.1.17/logging/CLogFilter.php b/web/framework/logging/CLogFilter.php
similarity index 100%
rename from web/framework-1.1.17/logging/CLogFilter.php
rename to web/framework/logging/CLogFilter.php
diff --git a/web/framework-1.1.17/logging/CLogRoute.php b/web/framework/logging/CLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CLogRoute.php
rename to web/framework/logging/CLogRoute.php
diff --git a/web/framework-1.1.17/logging/CLogRouter.php b/web/framework/logging/CLogRouter.php
similarity index 100%
rename from web/framework-1.1.17/logging/CLogRouter.php
rename to web/framework/logging/CLogRouter.php
diff --git a/web/framework-1.1.17/logging/CLogger.php b/web/framework/logging/CLogger.php
similarity index 100%
rename from web/framework-1.1.17/logging/CLogger.php
rename to web/framework/logging/CLogger.php
diff --git a/web/framework-1.1.17/logging/CProfileLogRoute.php b/web/framework/logging/CProfileLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CProfileLogRoute.php
rename to web/framework/logging/CProfileLogRoute.php
diff --git a/web/framework-1.1.17/logging/CSysLogRoute.php b/web/framework/logging/CSysLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CSysLogRoute.php
rename to web/framework/logging/CSysLogRoute.php
diff --git a/web/framework-1.1.17/logging/CWebLogRoute.php b/web/framework/logging/CWebLogRoute.php
similarity index 100%
rename from web/framework-1.1.17/logging/CWebLogRoute.php
rename to web/framework/logging/CWebLogRoute.php
diff --git a/web/framework-1.1.17/messages/ar/yii.php b/web/framework/messages/ar/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ar/yii.php
rename to web/framework/messages/ar/yii.php
diff --git a/web/framework-1.1.17/messages/ar/zii.php b/web/framework/messages/ar/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ar/zii.php
rename to web/framework/messages/ar/zii.php
diff --git a/web/framework-1.1.17/messages/bg/yii.php b/web/framework/messages/bg/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/bg/yii.php
rename to web/framework/messages/bg/yii.php
diff --git a/web/framework-1.1.17/messages/bg/zii.php b/web/framework/messages/bg/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/bg/zii.php
rename to web/framework/messages/bg/zii.php
diff --git a/web/framework-1.1.17/messages/bs/yii.php b/web/framework/messages/bs/yii.php
similarity index 81%
rename from web/framework-1.1.17/messages/bs/yii.php
rename to web/framework/messages/bs/yii.php
index e177f9d..d41e4d9 100644
--- a/web/framework-1.1.17/messages/bs/yii.php
+++ b/web/framework/messages/bs/yii.php
@@ -16,56 +16,56 @@
return array (
0 => '0',
'Virtual attribute {name} must specify "asc" and "desc" options.' => 'Virtualni atribut {name} mora specificirati "asc"- i "desc" opcije.',
- '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorijum.',
+ '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorij.',
'< Previous' => '< Prethodna',
'<< First' => '<< Prva',
- 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacionu komponentu.',
+ 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacijsku komponentu.',
'Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.' => 'ActiveRecord-Klasa "{class}" ima nevažeću konfiguraciju za odnos "{relation}". Tipa odnosa, odnosni ActiveRecord i strani kljuÄ (foreign key) moraju biti postavljeni.',
- 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažećo polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.',
+ 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažeće polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.',
'Active record class "{class}" does not have a scope named "{scope}".' => 'ActiveRecord-Klasa "{class}" nema polje imenovano "{scope}".',
- 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je nevažan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.',
- 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije je nevažan.',
+ 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je validan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.',
+ 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije nije važeći.',
'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Prometni put (runtime path) "{path}" aplikacije je nevažan. Pripazite da proces web servera ima pravo da tamo piše.',
- 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen "{user}".',
+ 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen korisniku "{user}".',
'Base path "{path}" is not a valid directory.' => 'Glavni put "{path}" je nevažeći direktorijum.',
'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache zahtjeva da je uÄitan PHP APC dodatak.',
- 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" je nevažna. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piše.',
- 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.',
- 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" je nevažna. Nemogu da pronađem takvu akciju u trenutnom controlleru.',
- 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.',
- 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" je nevažna. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu od tipa CDbConnection.',
- 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql nesmije biti prazno.',
- 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand nemože da izvrši SQL-Statement: {error}',
- 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand nemože da pripremi SQL-Statement: {error}',
- 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection nepodržava Äitanje Å¡ema za {driver}-datoteke.',
- 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection nemože da uspostavi spoj sa datotekom: {error}',
- 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i nemože izvršavati operacije na datoteki.',
- 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString nesmije biti prazno.',
- 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se nemože premotavati. On je forward-only (samo naprijed) ÄitaÄ.',
- 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.',
- 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacionu komponentu od tipa Typ CDbConnection.',
- 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molim vas, uspostavite da se "{id}" odnosi na važeću aplikacionu komponentu od tipa CDbConnection.',
- 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažna. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu od tipa CDbConnection.',
- 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i nemože da izvrši Commit- ili Rollback operaciju.',
- 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory nesmije biti prazno.',
- 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva, da PHP eAccelerator dodatak je uÄitan i aktiviran ili sa kompajlira sa opcijom "--with-eaccelerator-shared-memory".',
- 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName nesmije biti prazno.',
- 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na važeći direktorijum. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piše.',
+ 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" nije važeća. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piše.',
+ 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID nije važeća. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.',
+ 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" nije važeća. Ne mogu da pronađem takvu akciju u trenutnom controlleru.',
+ 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql ne smije biti prazno.',
+ 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ne može da izvrši SQL-Statement: {error}',
+ 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ne može da pripremi SQL-Statement: {error}',
+ 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne podržava Äitanje Å¡ema za {driver}-datoteke.',
+ 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection ne može da uspostavi spoj sa datotekom: {error}',
+ 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i ne može izvršavati operacije na datoteci.',
+ 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString ne smije biti prazno.',
+ 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se ne može premotavati. On je forward-only (samo naprijed) ÄitaÄ.',
+ 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacijsku komponentu od tipa Typ CDbConnection.',
+ 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažeća. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu tipa CDbConnection.',
+ 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i ne može da izvrši Commit- ili Rollback operaciju.',
+ 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory ne smije biti prazno.',
+ 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva da je PHP eAccelerator dodatak uÄitan i aktiviran ili se kompajlira sa opcijom "--with-eaccelerator-shared-memory".',
+ 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName ne smije biti prazno.',
+ 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na nevažeći direktorij. Pripazite da postoji taj direktorij i da proces web servera ima pravo da tamo piše.',
'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain smije primiti samo objekte koje implementiraju IFilter-Interface.',
- 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl nesmije biti prazno.',
- 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name nesmije biti prazno.',
- 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName nesmije biti prazno.',
+ 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl ne smije biti prazno.',
+ 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name ne smije biti prazno.',
+ 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName ne smije biti prazno.',
'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection smije da sadrži samo CHttpCookie-Objekte.',
'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest ne može da ustanovi URL ulaznog skripta (entry script).',
'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest ne može da ustanovi informacije o putu (path info) za tekući zahtjev (request).',
'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest ne može da ustanovi URI za tekući zahtjev (request).',
'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode može biti jedino "none", "allow" ili "only".',
'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" je pogrešan. Mora biti cijeli broj (integer) između 0 i 100.',
- 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorijum.',
+ 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorij.',
'CMemCache server configuration must be an array.' => 'CMemCache server konfiguracija mora biti niz (array)',
'CMemCache server configuration must have "host" value.' => 'CMemCache server konfiguracija mora imati dodjeljenu vrijednost za "host".',
'CMultiFileUpload.name is required.' => 'CMultiFileUpload.name je obavezno.',
- 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je našao nesaglašen blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.',
+ 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je našao neusaglašen blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.',
'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" je pogreÅ¡an. Ispravne vrijednosti ukljuÄuju "summary" i "callstack".',
'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager zahtjeva da PHP mcrypt ekstenzija bude ukljuÄena da bi se koristila mogućnost enkripcije podataka.',
'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey ne može biti prazan.',
@@ -87,11 +87,11 @@ return array (
'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'DogaÄ‘aj "{class}.{event}" je zakaÄen za pogreÅ¡an (nevažeći) hendler (handler) "{handler}".',
'Event "{class}.{event}" is not defined.' => 'Događaj (event) "{class}.{event}" nije definisan.',
'Extension path "{path}" does not exist.' => 'Put dodataka (extension path) "{path}" ne postoji.',
- 'Failed to write the uploaded file "{file}" to disk.' => 'Neuspješno snimanje podignutog fajla (uploaded file) "{file}" na disk.',
- 'File upload was stopped by extension.' => 'Podizanje fajla (file upload) je zaustavljeno od strane ekstenzije.',
+ 'Failed to write the uploaded file "{file}" to disk.' => 'Neuspješno snimanje uploadovanog fajla (uploaded file) "{file}" na disk.',
+ 'File upload was stopped by extension.' => 'Upload fajla (file upload) je zaustavljeno od strane ekstenzije.',
'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Filter "{filter}" je pogrešan. Kontroler "{class}" sadrži filter metod "filter{filter}".',
'Get a new code' => 'Dobavi novi kod',
- 'Go to page: ' => 'Do stranice: ',
+ 'Go to page: ' => 'Idi na stranicu: ',
'Invalid MO file revision: {revision}.' => 'Pogrešna revizija MO fajla: {revision}.',
'Invalid MO file: {file} (magic: {magic}).' => 'Pogrešan (neispravan) MO fajl: {file} (magic: {magic}).',
'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Pogrešna nabrojiva vrijednost "{value}". Molim vas, budite sigurni da je iz ({enum}).',
@@ -101,19 +101,19 @@ return array (
'List index "{index}" is out of bound.' => 'Indeks liste "{index}" je van opsega.',
'Login Required' => 'Potrebna prijava',
'Map data must be an array or an object implementing Traversable.' => 'Podatak mape (Map data) mora biti niz ili objekat koji implementira Traversable.',
- 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za skladište podignutog fajla "{file}".',
- 'Next >' => 'Slijedeća >',
- 'No columns are being updated for table "{table}".' => 'Ni jedna kolona neće biti ažurirana u tabeli "{table}".',
+ 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za spremanje uÄitanog fajla "{file}".',
+ 'Next >' => 'Sljedeća >',
+ 'No columns are being updated for table "{table}".' => 'Nijedna kolona neće biti ažurirana u tabeli "{table}".',
'No counter columns are being updated for table "{table}".' => 'BrojaÄ kolona neće biti ažuriran za tabelu "{table}".',
'Object configuration must be an array containing a "class" element.' => 'Konfiguracija objekta mora biti niz koji sadrži "class" element.',
'Please fix the following input errors:' => 'Molim vas ispravite greške:',
'Property "{class}.{property}" is not defined.' => 'Svojstvo (property) "{class}.{property}" nije definisano.',
'Property "{class}.{property}" is read only.' => 'Svojstvo (property) "{class}.{property}" je samo za Äitanje.',
'Queue data must be an array or an object implementing Traversable.' => 'Podatak reda (Queue data) mora biti niz ili objekat koji implementira Traversable.',
- 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisana u active record klasi "{class}".',
- 'Resetting PK sequence is not supported.' => 'Ne podržava se vraćanja PK sekvencije.',
+ 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisan u active record klasi "{class}".',
+ 'Resetting PK sequence is not supported.' => 'Ne podržava vraćanje PK sekvence.',
'Setting integrity check is not supported.' => 'Ne podržava se aktivacija kontrole integracije postavki.',
- 'Stack data must be an array or an object implementing Traversable.' => 'Podatak hrpe (Stack data) mora biti niz ili objekat koji implementira Traversable.',
+ 'Stack data must be an array or an object implementing Traversable.' => 'Podatak sa steka (Stack data) mora biti niz ili objekat koji implementira Traversable.',
'Table "{table}" does not have a column named "{column}".' => 'Tabela "{table}" ne posjeduje kolonu "{column}".',
'Table "{table}" does not have a primary key defined.' => 'Tabela "{table}" nema definisan primarni kljuÄ (primary key).',
'The "filter" property must be specified with a valid callback.' => '"Filter" svojstvo (property) mora biti specificirano povratnom funkcijom (callback).',
@@ -125,35 +125,35 @@ return array (
'The active record cannot be inserted to database because it is not new.' => 'Active record ne može biti ubaÄen u bazu zato Å¡to je nov.',
'The active record cannot be updated because it is new.' => 'Active record ne može biti ažuriran zato što je nov.',
'The asset "{asset}" to be pulished does not exist.' => 'Resurs "{asset}" koji treba biti objavljen ne postoji.',
- 'The command path "{path}" is not a valid directory.' => 'Put direktorijuma do komande (command path) "{path}" nije ispravan.',
- 'The controller path "{path}" is not a valid directory.' => 'Put direktorijuma do kontrolera "{path}" nije ispravan.',
+ 'The command path "{path}" is not a valid directory.' => 'Put direktorija do komande (command path) "{path}" nije ispravan.',
+ 'The controller path "{path}" is not a valid directory.' => 'Put direktorija do kontrolera "{path}" nije ispravan.',
'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Fajl "{file}" ne može biti podignut (uploaded). Dozvoljeni su jedino fajlovi sa slijedećim ekstenzijama: {extensions}.',
- 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne sme da prekoraÄi {limit} bytes.',
+ 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne smije da prekoraÄi {limit} bytes.',
'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Fajl "{file}" je premali. VeliÄina fajla ne smije biti manja od {limit} bytes.',
- 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo delimiÄno podignut (uploaded).',
+ 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo djelimiÄno uÄitan (uploaded).',
'The first element in a filter configuration must be the filter class.' => 'Prvi element u konfiguraciji filtera mora biti klasa filtera.',
'The item "{name}" does not exist.' => 'Stavka "{name}" ne postoji.',
'The item "{parent}" already has a child "{child}".' => 'Stavka "{parent}" već ima dijete "{child}".',
- 'The layout path "{path}" is not a valid directory.' => 'Put do direktorijuma layout "{path}" nije ispravan.',
+ 'The layout path "{path}" is not a valid directory.' => 'Put do direktorija layout "{path}" nije ispravan.',
'The list is read only.' => 'Lista (List) je samo za Äitanje',
'The map is read only.' => 'Mapa (Map) je samo za Äitanje',
'The module path "{path}" is not a valid directory.' => 'Put do modula "{path}" je nevažeći direktorijum.',
- 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablona za 12 Äasovni format mora biti "h" ili "hh".',
- 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablona za 24 Äasovni format mora biti "H" ili "HH".',
+ 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablon za 12 Äasovni format mora biti "h" ili "hh".',
+ 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablon za 24 Äasovni format mora biti "H" ili "HH".',
'The pattern for AM/PM marker must be "a".' => 'Å ablona za AM/PM marker mora biti "a".',
'The pattern for day in month must be "F".' => 'Å ablona za dan u mjesecu mora biti "F".',
- 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablona za dan u godini mora biti "D", "DD" ili "DDD".',
- 'The pattern for day of the month must be "d" or "dd".' => 'Å ablona za dan mjeseca mora biti "d" ili "dd".',
- 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablona za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".',
- 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablona za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".',
- 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablona za Äas u AM/PM mora biti "K" ili "KK".',
- 'The pattern for hour in day must be "k" or "kk".' => 'Å ablona za Äas u danu mora biti "k" ili "kk".',
- 'The pattern for minutes must be "m" or "mm".' => 'Å ablona za minute mora biti "m" ili "mm".',
- 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablona za mjesec mora biti "M", "MM", "MMM" ili "MMMM".',
- 'The pattern for seconds must be "s" or "ss".' => 'Å ablona za sekunde mora biti "s" ili "ss".',
- 'The pattern for time zone must be "z" or "v".' => 'Å ablona za zonu mora biti "z" ili "v".',
- 'The pattern for week in month must be "W".' => 'Å ablona za sedmicu u mjesecu mora biti "W".',
- 'The pattern for week in year must be "w".' => 'Å ablona za sedmicu u godini mora biti "w".',
+ 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablon za dan u godini mora biti "D", "DD" ili "DDD".',
+ 'The pattern for day of the month must be "d" or "dd".' => 'Å ablon za dan mjeseca mora biti "d" ili "dd".',
+ 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablon za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".',
+ 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablon za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".',
+ 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablon za Äas u AM/PM mora biti "K" ili "KK".',
+ 'The pattern for hour in day must be "k" or "kk".' => 'Å ablon za Äas u danu mora biti "k" ili "kk".',
+ 'The pattern for minutes must be "m" or "mm".' => 'Å ablon za minute mora biti "m" ili "mm".',
+ 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablon za mjesec mora biti "M", "MM", "MMM" ili "MMMM".',
+ 'The pattern for seconds must be "s" or "ss".' => 'Å ablon za sekunde mora biti "s" ili "ss".',
+ 'The pattern for time zone must be "z" or "v".' => 'Å ablon za zonu mora biti "z" ili "v".',
+ 'The pattern for week in month must be "W".' => 'Å ablon za sedmicu u mjesecu mora biti "W".',
+ 'The pattern for week in year must be "w".' => 'Å ablon za sedmicu u godini mora biti "w".',
'The queue is empty.' => 'Red (queue) je prazan.',
'The relation "{relation}" in active record class "{class}" is not specified correctly: The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.',
'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.',
@@ -164,13 +164,13 @@ return array (
'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The columns in the key must match the primary keys of the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Kolone spoljnog kljuÄa (foreign key) moraju biti iste kao i primarnog kljuÄa od tabele "{table}".',
'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The format of the foreign key must be "joinTable(fk1,fk2,...)".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Format spoljnog kljuÄa (foreign key) mora biti "joinTable(fk1,fk2,...)',
'The requested view "{name}" was not found.' => 'zahtjevani pogled (view) "{name}" nije pronađen.',
- 'The stack is empty.' => 'Hrpa (stack) je prazna.',
- 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronađe zahtjevanu akciju "{action}".',
- 'The system view path "{path}" is not a valid directory.' => 'Put direktorijuma do sistemskog pogleda (system view) "{path}" nije ispravan.',
+ 'The stack is empty.' => 'Stek (stack) je prazna.',
+ 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronađe traženu akciju "{action}".',
+ 'The system view path "{path}" is not a valid directory.' => 'Put direktorija do sistemskog pogleda (system view) "{path}" nije ispravan.',
'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'Tabela "{table}" za active record klasu "{class}" ne može biti pronađena u bazi.',
'The value for the primary key "{key}" is not supplied when querying the table "{table}".' => 'Vrijednost primarnog kljuÄa (primary key) "{key}" nije prosljeÄ‘ena prilikom izvrÅ¡enja upita nad tabelom "{table}".',
'The verification code is incorrect.' => 'Verifikacioni kod je pogrešan.',
- 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorijuma (view path) "{path}" ne važi.',
+ 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorija (view path) "{path}" nije važeći.',
'Theme directory "{directory}" does not exist.' => 'Direktorijum za teme (theme directory) "{directory}" ne postoji.',
'This content requires the Adobe Flash Player .' => 'Ovaj sadržaj zahtjeva Adobe Flash Player .',
'Unable to add an item whose name is the same as an existing item.' => 'Ne mogu da dodam stavku sa istim imenom kao postojeća stavka.',
@@ -184,7 +184,7 @@ return array (
'Unable to write file "{file}".' => 'Ne mogu da upišem fajl "{file}".',
'Unknown authorization item "{name}".' => 'Nepoznata stavka ovlašćenja (authorization item) "{name}',
'Unrecognized locale "{locale}".' => 'Lokalizacija nije prepoznata (unrecognized locale) "{locale}".',
- 'View file "{file}" does not exist.' => 'Fajl pogleda (view file) "{file}" ne postoji.',
+ 'View file "{file}" does not exist.' => 'View fajl "{file}" ne postoji.',
'Yii application can only be created once.' => 'Yii aplikacija može biti kreirana samo jedanput.',
'You are not authorized to perform this action.' => 'Niste autorizovani da izvršite ovu akciju.',
'Your request is not valid.' => 'Vaš zahtjev nije ispravan.',
@@ -211,7 +211,7 @@ return array (
'{attribute} must be repeated exactly.' => '{attribute} mora biti taÄno ponovljen.',
'{attribute} must be {type}.' => '{attribute} mora biti {type}.',
'{attribute} must be {value}.' => '{attribute} mora biti {value}.',
- '{attribute} must not be equal to "{compareValue}".' => '{attribute} nesmije biti isti kao "{compareValue}".',
+ '{attribute} must not be equal to "{compareValue}".' => '{attribute} ne smije biti isti kao "{compareValue}".',
'{className} does not support add() functionality.' => '{className} ne podržava add() funcionalnost.',
'{className} does not support delete() functionality.' => '{className} ne podržava delete() funkcionalnost.',
'{className} does not support flush() functionality.' => '{className} ne podržava flush() funkcionalnost.',
@@ -223,9 +223,9 @@ return array (
'{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} ima pogrešno ovjereno pravilo (validation rule). Pravilo mora da specificira atribute koji ce biti ovjereni i ime ovjerenja.',
'{class} must specify "model" and "attribute" or "name" property values.' => '{class} mora da specificira "model" i "attribute" ili "name" svojstvo (property) vrijednosti.',
'{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin mora biti podešen na true da bi se koristila cookies autorizacija.',
- '{class}::authenticate() must be implemented.' => '{class}::authenticate() mora biti implementirana.',
- '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronađe zahtjevani pogled (view) "{view}".',
+ '{class}::authenticate() must be implemented.' => '{class}::authenticate() metoda mora biti implementirana.',
+ '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronađe zahtjevani view "{view}".',
'{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} sadrži nepropisno ugnježdene widget tagove u svom pogledu (view) "{view}". {widget} widget nema endWidget() poziv.',
- '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suvišan endWidget({id}) poziv u svom pogledu (view).',
- '{widget} cannot find the view "{view}".' => '{widget} ne može da pronađe pogled (view) "{view}".',
+ '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suvišan endWidget({id}) poziv u svom view-u.',
+ '{widget} cannot find the view "{view}".' => '{widget} ne može da pronađe view "{view}".',
);
\ No newline at end of file
diff --git a/web/framework-1.1.17/messages/ca/yii.php b/web/framework/messages/ca/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ca/yii.php
rename to web/framework/messages/ca/yii.php
diff --git a/web/framework-1.1.17/messages/ca/zii.php b/web/framework/messages/ca/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ca/zii.php
rename to web/framework/messages/ca/zii.php
diff --git a/web/framework-1.1.17/messages/config.php b/web/framework/messages/config.php
similarity index 100%
rename from web/framework-1.1.17/messages/config.php
rename to web/framework/messages/config.php
diff --git a/web/framework-1.1.17/messages/cs/yii.php b/web/framework/messages/cs/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/cs/yii.php
rename to web/framework/messages/cs/yii.php
diff --git a/web/framework-1.1.17/messages/cs/zii.php b/web/framework/messages/cs/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/cs/zii.php
rename to web/framework/messages/cs/zii.php
diff --git a/web/framework-1.1.17/messages/da/yii.php b/web/framework/messages/da/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/da/yii.php
rename to web/framework/messages/da/yii.php
diff --git a/web/framework-1.1.17/messages/da/zii.php b/web/framework/messages/da/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/da/zii.php
rename to web/framework/messages/da/zii.php
diff --git a/web/framework-1.1.17/messages/de/yii.php b/web/framework/messages/de/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/de/yii.php
rename to web/framework/messages/de/yii.php
diff --git a/web/framework-1.1.17/messages/de/zii.php b/web/framework/messages/de/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/de/zii.php
rename to web/framework/messages/de/zii.php
diff --git a/web/framework-1.1.17/messages/el/yii.php b/web/framework/messages/el/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/el/yii.php
rename to web/framework/messages/el/yii.php
diff --git a/web/framework-1.1.17/messages/el/zii.php b/web/framework/messages/el/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/el/zii.php
rename to web/framework/messages/el/zii.php
diff --git a/web/framework-1.1.17/messages/es/yii.php b/web/framework/messages/es/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/es/yii.php
rename to web/framework/messages/es/yii.php
diff --git a/web/framework-1.1.17/messages/es/zii.php b/web/framework/messages/es/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/es/zii.php
rename to web/framework/messages/es/zii.php
diff --git a/web/framework-1.1.17/messages/fa_ir/yii.php b/web/framework/messages/fa_ir/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/fa_ir/yii.php
rename to web/framework/messages/fa_ir/yii.php
diff --git a/web/framework-1.1.17/messages/fa_ir/zii.php b/web/framework/messages/fa_ir/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/fa_ir/zii.php
rename to web/framework/messages/fa_ir/zii.php
diff --git a/web/framework-1.1.17/messages/fi/yii.php b/web/framework/messages/fi/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/fi/yii.php
rename to web/framework/messages/fi/yii.php
diff --git a/web/framework-1.1.17/messages/fi/zii.php b/web/framework/messages/fi/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/fi/zii.php
rename to web/framework/messages/fi/zii.php
diff --git a/web/framework-1.1.17/messages/fr/yii.php b/web/framework/messages/fr/yii.php
similarity index 97%
rename from web/framework-1.1.17/messages/fr/yii.php
rename to web/framework/messages/fr/yii.php
index e6fdb68..df2c86e 100644
--- a/web/framework-1.1.17/messages/fr/yii.php
+++ b/web/framework/messages/fr/yii.php
@@ -69,10 +69,10 @@ return array (
'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'La propriété CDbAuthManager.connectionID « {id} » est invalide. Vérifiez qu\'elle référence l\'ID d\'un composant d\'application de type CDbConnection.',
'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'La propriété CDbCache.connectionID « {id} » est invalide. Vérifiez qu\'elle référence l\'ID d\'un composant d\'application de type CDbConnection.',
'CDbCacheDependency.sql cannot be empty.' => 'La propriété CDbCacheDependency.sql ne peut être vide.',
- 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand n\'a pas pu exécuter la commande SQL : {error}',
- 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand n\'a pas pu préparer la commande SQL : {error}',
- 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne supporte pas la lecture du schéma de la base de données {driver}.',
- 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection n\'a pu ouvrir la connexion à la base de données : {error}',
+ 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand n\'a pas pu exécuter la commande SQL: {error}',
+ 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand n\'a pas pu préparer la commande SQL: {error}',
+ 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne supporte pas la lecture de schéma pour les bases de données {driver}.',
+ 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection n\'a pu ouvrir la connexion à la base de données: {error}',
'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection est inactive et ne peut effectuer aucune opération sur la base de données.',
'CDbConnection.connectionString cannot be empty.' => 'La propriété CDbConnection.connectionString ne peut être vide.',
'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader ne peut reculer. Seule la lecture en avant est possible.',
@@ -111,9 +111,9 @@ return array (
'Cannot add "{name}" as a child of itself.' => 'Impossible d\'ajouter « {name} » en tant qu\'enfant de lui-même.',
'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Impossible d\'ajouter un élément de type « {child} » à un élément de type « {parent} ».',
'Column name must be either a string or an array.' => 'Le nom de la colonne doit être une chaine de caractères ou un tableau.',
- 'Either "{parent}" or "{child}" does not exist.' => 'Soit « {parent} » soit « {child} » n\'existe pas.',
- 'Error: Table "{table}" does not have a primary key.' => 'Erreur : la table « {table} » n\'a pas de clef primaire.',
- 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Erreur : la table « {table} » a une clef primaire composite qui n\'est pas supportée par les commandes CRUD.',
+ 'Either "{parent}" or "{child}" does not exist.' => '« {parent} » ou « {child} » est inexistant.',
+ 'Error: Table "{table}" does not have a primary key.' => 'Erreur: la table « {table} » n\'a pas de clef primaire.',
+ 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'Erreur: la table « {table} » a une clef primaire composite qui n\'est pas supportée par les commandes CRUD.',
'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'L\'événement « {class}.{event} » est associé à un gestionnaire d\'événement « {handler} » invalide.',
'Event "{class}.{event}" is not defined.' => 'L\'événement « {class}.{event} » n\'est pas défini.',
'Extension path "{path}" does not exist.' => 'Le chemin d\'accès « {path} » de l\'extension n\'existe pas.',
@@ -121,7 +121,7 @@ return array (
'File upload was stopped by extension.' => 'Le téléchargement a été stoppé par l\'extension.',
'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Le filtre « {filter} » est invalide. Le contrôleur « {class} » possède la méthode de filtrage « filter{filter} ».',
'Get a new code' => 'Récupérez un nouveau code',
- 'Go to page: ' => 'Aller à la page :',
+ 'Go to page: ' => 'Aller à la page:',
'Invalid MO file revision: {revision}.' => 'Version du fichier MO invalide: {revision}.',
'Invalid MO file: {file} (magic: {magic}).' => 'Fichier MO invalide: {file} (magic: {magic}).',
'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Valeur « {value} » invalide. Vérifiez qu\'elle fait partie de ({enum}).',
@@ -136,7 +136,7 @@ return array (
'No columns are being updated for table "{table}".' => 'Aucune colonne de la table « {table} » ne sera mise à jour.',
'No counter columns are being updated for table "{table}".' => 'Aucune colonne incrémentale de la table « {table} » ne sera mise à jour.',
'Object configuration must be an array containing a "class" element.' => 'L\'objet configuration doit être un tableau contenant un élément « class ».',
- 'Please fix the following input errors:' => 'Veuillez corriger les erreurs de saisie :',
+ 'Please fix the following input errors:' => 'Veuillez corriger les erreurs de saisie:',
'Property "{class}.{property}" is not defined.' => 'La propriété « {class}.{property} » est indéfinie.',
'Property "{class}.{property}" is read only.' => 'La propriété « {class}.{property} » est en lecture seule.',
'Queue data must be an array or an object implementing Traversable.' => 'Les données de la queue doivent être un tableau ou un objet qui implémente Traversable.',
@@ -155,7 +155,7 @@ return array (
'The asset "{asset}" to be published does not exist.' => 'L\'asset « {asset} » à publier n\'existe pas.',
'The command path "{path}" is not a valid directory.' => 'Le chemin d\'accès « {path} » à la ligne de commande n\'est pas un dossier valide.',
'The controller path "{path}" is not a valid directory.' => 'Le chemin d\'accès « {path} » au contrôleur n\'est pas un dossier valide.',
- 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Le fichier « {file} » ne peut être téléchargé. Les extensions de fichier autorisées sont : {extensions}.',
+ 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Le fichier « {file} » ne peut être téléchargé. Les extensions de fichier autorisées sont: {extensions}.',
'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Le fichier « {file} » est trop gros. Sa taille ne peut être supérieure à {limit} octets.',
'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Le fichier « {file} » est trop petit. Sa taille ne peut être inférieure à {limit} octets.',
'The file "{file}" was only partially uploaded.' => 'Le fichier « {file} » a été téléchargé partiellement.',
@@ -182,8 +182,8 @@ return array (
'The pattern for week in month must be "W".' => 'Le motif de définition du numéro de semaine dans le mois doit être « W ».',
'The pattern for week in year must be "w".' => 'Le motif de définition du numéro de semaine dans l\'année doit être « w ».',
'The queue is empty.' => 'La queue est vide.',
- 'The relation "{relation}" in active record class "{class}" is not specified correctly. The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » dans la classe Active record « {class} » n\'est pas définie correctement. La table de jointure « {joinTable} » donnée par la clef étrangère n\'a pas été trouvée dans la base de données.',
- 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » définie dans la classe Active record « {class} » est incorrecte : la table de jointure « {joinTable} » spécifiée par la clef étrangère est introuvable dans la base de données.',
+ 'The relation "{relation}" in active record class "{class}" is not specified correctly. The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » dans la classe Active record « {class} » n\'est pas définie correctement. La table de jointure « {joinTable} » donnée de la clef étrangère n\'est pas trouvée dans la base de données.',
+ 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'La relation « {relation} » définie dans la classe Active record « {class} » est incorrecte: la table de jointure « {joinTable} » spécifiée par la clef étrangère est introuvable dans la base de données.',
'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'La relation « {relation} » dans la classe Active record « {class} » est définie avec la clef étrangère « {key} » qui ne pointe pas vers la table parente « {table} ».',
'The relation "{relation}" in active record class "{class}" is specified with an incomplete foreign key. The foreign key must consist of columns referencing both joining tables.' => 'La relation « {relation} » définie dans l\'active record « {class} » a une clef étrangère incomplète. La clef étrangère doit être constituée de colonnes qui font référence aux deux tables jointes.',
'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". There is no such column in the table "{table}".' => 'La relation « {relation} » définie dans la classe active record « {class} » a une clef étrangère « {key} » invalide. Cette colonne n\'existe pas dans la table « {table} ».',
@@ -221,10 +221,10 @@ return array (
'{attribute} is not a valid email address.' => '{attribute} n\'est pas une adresse email valide.',
'{attribute} is not in the list.' => '{attribute} n\'est pas dans la liste.',
'{attribute} is of the wrong length (should be {length} characters).' => '{attribute} n\'est pas de la bonne longueur ({length} caractères autorisés).',
- '{attribute} is too big (maximum is {max}).' => '{attribute} est trop grand (maximum : {max}).',
- '{attribute} is too long (maximum is {max} characters).' => '{attribute} est trop long (maximum : {max} caractères).',
- '{attribute} is too short (minimum is {min} characters).' => '{attribute} est trop court (minimum : {min} caractères).',
- '{attribute} is too small (minimum is {min}).' => '{attribute} est trop petit (minimum : {min}).',
+ '{attribute} is too big (maximum is {max}).' => '{attribute} est trop grand (maximum: {max}).',
+ '{attribute} is too long (maximum is {max} characters).' => '{attribute} est trop long (maximum: {max} caractères).',
+ '{attribute} is too short (minimum is {min} characters).' => '{attribute} est trop court (minimum: {min} caractères).',
+ '{attribute} is too small (minimum is {min}).' => '{attribute} est trop petit (minimum: {min}).',
'{attribute} must be a number.' => '{attribute} doit être un nombre.',
'{attribute} must be an integer.' => '{attribute} doit être un entier.',
'{attribute} must be either {true} or {false}.' => '{attribute} doit être soit {true} soit {false}.',
diff --git a/web/framework-1.1.17/messages/fr/zii.php b/web/framework/messages/fr/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/fr/zii.php
rename to web/framework/messages/fr/zii.php
diff --git a/web/framework-1.1.17/messages/he/yii.php b/web/framework/messages/he/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/he/yii.php
rename to web/framework/messages/he/yii.php
diff --git a/web/framework-1.1.17/messages/he/zii.php b/web/framework/messages/he/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/he/zii.php
rename to web/framework/messages/he/zii.php
diff --git a/web/framework/messages/hr/yii.php b/web/framework/messages/hr/yii.php
new file mode 100644
index 0000000..d41e4d9
--- /dev/null
+++ b/web/framework/messages/hr/yii.php
@@ -0,0 +1,231 @@
+ '0',
+ 'Virtual attribute {name} must specify "asc" and "desc" options.' => 'Virtualni atribut {name} mora specificirati "asc"- i "desc" opcije.',
+ '"{path}" is not a valid directory.' => '"{path}" nije važeći direktorij.',
+ '< Previous' => '< Prethodna',
+ '<< First' => '<< Prva',
+ 'Active Record requires a "db" CDbConnection application component.' => 'ActiveRecord zahtjeva "db" CDbConnection aplikacijsku komponentu.',
+ 'Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.' => 'ActiveRecord-Klasa "{class}" ima nevažeću konfiguraciju za odnos "{relation}". Tipa odnosa, odnosni ActiveRecord i strani kljuÄ (foreign key) moraju biti postavljeni.',
+ 'Active record "{class}" is trying to select an invalid column "{column}". Note, the column must exist in the table or be an expression with alias.' => 'ActiveRecord "{class}" koristi nevažeće polje "{column}" u SELECT. Pripazite da to polje mora da postoji u tabeli ili da bude alias izraz.',
+ 'Active record class "{class}" does not have a scope named "{scope}".' => 'ActiveRecord-Klasa "{class}" nema polje imenovano "{scope}".',
+ 'Alias "{alias}" is invalid. Make sure it points to an existing directory or file.' => 'Alias "{alias}" je validan. Molim vas, uspostavite da pokazuje do važećeg direktorija ili fajla.',
+ 'Application base path "{path}" is not a valid directory.' => 'Glavni put (base path) "{path}" aplikacije nije važeći.',
+ 'Application runtime path "{path}" is not valid. Please make sure it is a directory writable by the Web server process.' => 'Prometni put (runtime path) "{path}" aplikacije je nevažan. Pripazite da proces web servera ima pravo da tamo piše.',
+ 'Authorization item "{item}" has already been assigned to user "{user}".' => 'Element autorizacije "{item}" je već namjenjen korisniku "{user}".',
+ 'Base path "{path}" is not a valid directory.' => 'Glavni put "{path}" je nevažeći direktorijum.',
+ 'CApcCache requires PHP apc extension to be loaded.' => 'CApcCache zahtjeva da je uÄitan PHP APC dodatak.',
+ 'CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.' => 'CAssetManager.basePath "{path}" nije važeća. Pripazite da postoji taj direktorijum i da proces web servera ima pravo da tamo piše.',
+ 'CCacheHttpSession.cacheID is invalid. Please make sure "{id}" refers to a valid cache application component.' => 'CCacheHttpSession.cacheID nije važeća. Molim vas, uspostavite da se "{id}" odnosi na važeću cache aplikacionu komponentu.',
+ 'CCaptchaValidator.action "{id}" is invalid. Unable to find such an action in the current controller.' => 'CCaptchaValidator.action "{id}" nije važeća. Ne mogu da pronađem takvu akciju u trenutnom controlleru.',
+ 'CDbAuthManager.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbAuthManager.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbCache.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbCache.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbCacheDependency.sql cannot be empty.' => 'CDbCacheDependency.sql ne smije biti prazno.',
+ 'CDbCommand failed to execute the SQL statement: {error}' => 'CDbCommand ne može da izvrši SQL-Statement: {error}',
+ 'CDbCommand failed to prepare the SQL statement: {error}' => 'CDbCommand ne može da pripremi SQL-Statement: {error}',
+ 'CDbConnection does not support reading schema for {driver} database.' => 'CDbConnection ne podržava Äitanje Å¡ema za {driver}-datoteke.',
+ 'CDbConnection failed to open the DB connection: {error}' => 'CDbConnection ne može da uspostavi spoj sa datotekom: {error}',
+ 'CDbConnection is inactive and cannot perform any DB operations.' => 'CDbConnection nije aktivna i ne može izvršavati operacije na datoteci.',
+ 'CDbConnection.connectionString cannot be empty.' => 'CDbConnection.connectionString ne smije biti prazno.',
+ 'CDbDataReader cannot rewind. It is a forward-only reader.' => 'CDbDataReader se ne može premotavati. On je forward-only (samo naprijed) ÄitaÄ.',
+ 'CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbHttpSession.connectionID "{id}" nije važeća. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.' => 'CDbLogRoute.connectionID "{id}" ne pokazuje na važeću aplikacijsku komponentu od tipa Typ CDbConnection.',
+ 'CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.' => 'CDbMessageSource.connectionID je nevažna. Molimo vas, uspostavite da se "{id}" odnosi na važeću aplikacijsku komponentu tipa CDbConnection.',
+ 'CDbTestFixture.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.' => 'CDbFixture.connectionID "{id}" je nevažeća. Molim vas, uspostavite da se odnosi na važeću aplikacionu komponentu tipa CDbConnection.',
+ 'CDbTransaction is inactive and cannot perform commit or roll back operations.' => 'CDbTransaction nije aktivno i ne može da izvrši Commit- ili Rollback operaciju.',
+ 'CDirectoryCacheDependency.directory cannot be empty.' => 'CDirectoryCacheDependency.directory ne smije biti prazno.',
+ 'CEAcceleratorCache requires PHP eAccelerator extension to be loaded, enabled or compiled with the "--with-eaccelerator-shared-memory" option.' => 'CEAcceleratorCache zahtjeva da je PHP eAccelerator dodatak uÄitan i aktiviran ili se kompajlira sa opcijom "--with-eaccelerator-shared-memory".',
+ 'CFileCacheDependency.fileName cannot be empty.' => 'CFileCacheDependency.fileName ne smije biti prazno.',
+ 'CFileLogRoute.logPath "{path}" does not point to a valid directory. Make sure the directory exists and is writable by the Web server process.' => 'CFileLogRoute.logPath "{path}" ne pokazuje na nevažeći direktorij. Pripazite da postoji taj direktorij i da proces web servera ima pravo da tamo piše.',
+ 'CFilterChain can only take objects implementing the IFilter interface.' => 'CFilterChain smije primiti samo objekte koje implementiraju IFilter-Interface.',
+ 'CFlexWidget.baseUrl cannot be empty.' => 'CFlexWidget.baseUrl ne smije biti prazno.',
+ 'CFlexWidget.name cannot be empty.' => 'CFlexWidget.name ne smije biti prazno.',
+ 'CGlobalStateCacheDependency.stateName cannot be empty.' => 'CGlobalStateCacheDependency.stateName ne smije biti prazno.',
+ 'CHttpCookieCollection can only hold CHttpCookie objects.' => 'CHttpCookieCollection smije da sadrži samo CHttpCookie-Objekte.',
+ 'CHttpRequest is unable to determine the entry script URL.' => 'CHttpRequest ne može da ustanovi URL ulaznog skripta (entry script).',
+ 'CHttpRequest is unable to determine the path info of the request.' => 'CHttpRequest ne može da ustanovi informacije o putu (path info) za tekući zahtjev (request).',
+ 'CHttpRequest is unable to determine the request URI.' => 'CHttpRequest ne može da ustanovi URI za tekući zahtjev (request).',
+ 'CHttpSession.cookieMode can only be "none", "allow" or "only".' => 'CHttpSession.cookieMode može biti jedino "none", "allow" ili "only".',
+ 'CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.' => 'CHttpSession.gcProbability "{value}" je pogrešan. Mora biti cijeli broj (integer) između 0 i 100.',
+ 'CHttpSession.savePath "{path}" is not a valid directory.' => 'CHttpSession.savePath "{path}" nije ispravan direktorij.',
+ 'CMemCache server configuration must be an array.' => 'CMemCache server konfiguracija mora biti niz (array)',
+ 'CMemCache server configuration must have "host" value.' => 'CMemCache server konfiguracija mora imati dodjeljenu vrijednost za "host".',
+ 'CMultiFileUpload.name is required.' => 'CMultiFileUpload.name je obavezno.',
+ 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.' => 'CProfileLogRoute je našao neusaglašen blok koda "{token}". Budite sigurni da su pozivi Yii::beginProfile() i Yii::endProfile() ispravno ugnježdeni.',
+ 'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".' => 'CProfileLogRoute.report "{report}" je pogreÅ¡an. Ispravne vrijednosti ukljuÄuju "summary" i "callstack".',
+ 'CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.' => 'CSecurityManager zahtjeva da PHP mcrypt ekstenzija bude ukljuÄena da bi se koristila mogućnost enkripcije podataka.',
+ 'CSecurityManager.encryptionKey cannot be empty.' => 'CSecurityManager.encryptionKey ne može biti prazan.',
+ 'CSecurityManager.validation must be either "MD5" or "SHA1".' => 'CSecurityManager.validation mora biti "MD5" ili "SHA1".',
+ 'CSecurityManager.validationKey cannot be empty.' => 'CSecurityManager.validationKey ne može biti prazan',
+ 'CTypedList<{type}> can only hold objects of {type} class.' => 'CTypedList<{type}> može da sadrži jedino objekte {type} klase.',
+ 'CUrlManager.UrlFormat must be either "path" or "get".' => 'CUrlManager.UrlFormat mora biti "path" ili "get".',
+ 'CXCache requires PHP XCache extension to be loaded.' => 'CXCache zahtjeva da ekstenzija PHP XCache bude uÄitana.',
+ 'CZendDataCache requires PHP Zend Data Cache extension to be loaded.' => 'CZendDataCache zahtjeva da ekstenzija PHP Zend Cache bude uÄitana.',
+ 'Cannot add "{child}" as a child of "{name}". A loop has been detected.' => 'Ne mogu da dodam "{child}" kao dijete od "{name}". Detektovana je petlja.',
+ 'Cannot add "{child}" as a child of "{parent}". A loop has been detected.' => 'Ne mogu da dodam "{child}" kao dijete od "{parent}". Detektovana je petlja.',
+ 'Cannot add an item of type "{child}" to an item of type "{parent}".' => 'Ne mogu da dodam stavku (item) tipa "{child}" u stavku (item) tipa "{parent}".',
+ 'Cannot add "{name}" as a child of itself.' => 'Ne mogu da dodam "{name}" kao svoje dijete.',
+ 'Column "{column} does not exist in table "{table}".' => 'Kolona "{column}" ne postoji u tabeli "{table}".',
+ 'Column name must be either a string or an array.' => 'Ime kolone mora biti string ili array.',
+ 'Either "{parent}" or "{child}" does not exist.' => 'Ni "{parent}" ni "{child}" ne postoje.',
+ 'Error: Table "{table}" does not have a primary key.' => 'GreÅ¡ka: Tabela "{table}" nema primarni kljuÄ (primary key).',
+ 'Error: Table "{table}" has a composite primary key which is not supported by crud command.' => 'GreÅ¡ka: Tabela "{table}" ima kompozitni primarni kljuÄ (composite primary key) koji nije podržan od strane "crud" komande.',
+ 'Event "{class}.{event}" is attached with an invalid handler "{handler}".' => 'DogaÄ‘aj "{class}.{event}" je zakaÄen za pogreÅ¡an (nevažeći) hendler (handler) "{handler}".',
+ 'Event "{class}.{event}" is not defined.' => 'Događaj (event) "{class}.{event}" nije definisan.',
+ 'Extension path "{path}" does not exist.' => 'Put dodataka (extension path) "{path}" ne postoji.',
+ 'Failed to write the uploaded file "{file}" to disk.' => 'Neuspješno snimanje uploadovanog fajla (uploaded file) "{file}" na disk.',
+ 'File upload was stopped by extension.' => 'Upload fajla (file upload) je zaustavljeno od strane ekstenzije.',
+ 'Filter "{filter}" is invalid. Controller "{class}" does have the filter method "filter{filter}".' => 'Filter "{filter}" je pogrešan. Kontroler "{class}" sadrži filter metod "filter{filter}".',
+ 'Get a new code' => 'Dobavi novi kod',
+ 'Go to page: ' => 'Idi na stranicu: ',
+ 'Invalid MO file revision: {revision}.' => 'Pogrešna revizija MO fajla: {revision}.',
+ 'Invalid MO file: {file} (magic: {magic}).' => 'Pogrešan (neispravan) MO fajl: {file} (magic: {magic}).',
+ 'Invalid enumerable value "{value}". Please make sure it is among ({enum}).' => 'Pogrešna nabrojiva vrijednost "{value}". Molim vas, budite sigurni da je iz ({enum}).',
+ 'Invalid operator "{operator}".' => 'Nevažeći operator "{operator}".',
+ 'Last >>' => 'Zadnja >>',
+ 'List data must be an array or an object implementing Traversable.' => 'Podatak liste (List data) mora biti niz ili objekat koji implementira Traversable.',
+ 'List index "{index}" is out of bound.' => 'Indeks liste "{index}" je van opsega.',
+ 'Login Required' => 'Potrebna prijava',
+ 'Map data must be an array or an object implementing Traversable.' => 'Podatak mape (Map data) mora biti niz ili objekat koji implementira Traversable.',
+ 'Missing the temporary folder to store the uploaded file "{file}".' => 'Nedostaje privremeni folder za spremanje uÄitanog fajla "{file}".',
+ 'Next >' => 'Sljedeća >',
+ 'No columns are being updated for table "{table}".' => 'Nijedna kolona neće biti ažurirana u tabeli "{table}".',
+ 'No counter columns are being updated for table "{table}".' => 'BrojaÄ kolona neće biti ažuriran za tabelu "{table}".',
+ 'Object configuration must be an array containing a "class" element.' => 'Konfiguracija objekta mora biti niz koji sadrži "class" element.',
+ 'Please fix the following input errors:' => 'Molim vas ispravite greške:',
+ 'Property "{class}.{property}" is not defined.' => 'Svojstvo (property) "{class}.{property}" nije definisano.',
+ 'Property "{class}.{property}" is read only.' => 'Svojstvo (property) "{class}.{property}" je samo za Äitanje.',
+ 'Queue data must be an array or an object implementing Traversable.' => 'Podatak reda (Queue data) mora biti niz ili objekat koji implementira Traversable.',
+ 'Relation "{name}" is not defined in active record class "{class}".' => 'Odnos "{name}" nije definisan u active record klasi "{class}".',
+ 'Resetting PK sequence is not supported.' => 'Ne podržava vraćanje PK sekvence.',
+ 'Setting integrity check is not supported.' => 'Ne podržava se aktivacija kontrole integracije postavki.',
+ 'Stack data must be an array or an object implementing Traversable.' => 'Podatak sa steka (Stack data) mora biti niz ili objekat koji implementira Traversable.',
+ 'Table "{table}" does not have a column named "{column}".' => 'Tabela "{table}" ne posjeduje kolonu "{column}".',
+ 'Table "{table}" does not have a primary key defined.' => 'Tabela "{table}" nema definisan primarni kljuÄ (primary key).',
+ 'The "filter" property must be specified with a valid callback.' => '"Filter" svojstvo (property) mora biti specificirano povratnom funkcijom (callback).',
+ 'The "pattern" property must be specified with a valid regular expression.' => '"Pattern" svojstvo (property) mora biti specificirano ispravnim regularnim izrazom (regular expression).',
+ 'The "view" property is required.' => '"view" svojstvo (property) je obavezno.',
+ 'The CSRF token could not be verified.' => 'CSRF token ne može biti potvrđen (verifikovan).',
+ 'The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.' => 'URL šablon (pattern) "{pattern}" za rutu "{route}" nije ispravan regularni izraz (regular expression).',
+ 'The active record cannot be deleted because it is new.' => 'Active record ne može biti izbrisan zato što je nov.',
+ 'The active record cannot be inserted to database because it is not new.' => 'Active record ne može biti ubaÄen u bazu zato Å¡to je nov.',
+ 'The active record cannot be updated because it is new.' => 'Active record ne može biti ažuriran zato što je nov.',
+ 'The asset "{asset}" to be pulished does not exist.' => 'Resurs "{asset}" koji treba biti objavljen ne postoji.',
+ 'The command path "{path}" is not a valid directory.' => 'Put direktorija do komande (command path) "{path}" nije ispravan.',
+ 'The controller path "{path}" is not a valid directory.' => 'Put direktorija do kontrolera "{path}" nije ispravan.',
+ 'The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.' => 'Fajl "{file}" ne može biti podignut (uploaded). Dozvoljeni su jedino fajlovi sa slijedećim ekstenzijama: {extensions}.',
+ 'The file "{file}" is too large. Its size cannot exceed {limit} bytes.' => 'Fajl "{file}" je prevelik. VeliÄina fajla ne smije da prekoraÄi {limit} bytes.',
+ 'The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.' => 'Fajl "{file}" je premali. VeliÄina fajla ne smije biti manja od {limit} bytes.',
+ 'The file "{file}" was only partially uploaded.' => 'Fajl "{file}" je samo djelimiÄno uÄitan (uploaded).',
+ 'The first element in a filter configuration must be the filter class.' => 'Prvi element u konfiguraciji filtera mora biti klasa filtera.',
+ 'The item "{name}" does not exist.' => 'Stavka "{name}" ne postoji.',
+ 'The item "{parent}" already has a child "{child}".' => 'Stavka "{parent}" već ima dijete "{child}".',
+ 'The layout path "{path}" is not a valid directory.' => 'Put do direktorija layout "{path}" nije ispravan.',
+ 'The list is read only.' => 'Lista (List) je samo za Äitanje',
+ 'The map is read only.' => 'Mapa (Map) je samo za Äitanje',
+ 'The module path "{path}" is not a valid directory.' => 'Put do modula "{path}" je nevažeći direktorijum.',
+ 'The pattern for 12 hour format must be "h" or "hh".' => 'Å ablon za 12 Äasovni format mora biti "h" ili "hh".',
+ 'The pattern for 24 hour format must be "H" or "HH".' => 'Å ablon za 24 Äasovni format mora biti "H" ili "HH".',
+ 'The pattern for AM/PM marker must be "a".' => 'Å ablona za AM/PM marker mora biti "a".',
+ 'The pattern for day in month must be "F".' => 'Å ablona za dan u mjesecu mora biti "F".',
+ 'The pattern for day in year must be "D", "DD" or "DDD".' => 'Å ablon za dan u godini mora biti "D", "DD" ili "DDD".',
+ 'The pattern for day of the month must be "d" or "dd".' => 'Å ablon za dan mjeseca mora biti "d" ili "dd".',
+ 'The pattern for day of the week must be "E", "EE", "EEE", "EEEE" or "EEEEE".' => 'Å ablon za dan sedmice mora biti "E", "EE", "EEE", "EEEE" ili "EEEEE".',
+ 'The pattern for era must be "G", "GG", "GGG", "GGGG" or "GGGGG".' => 'Å ablon za doba mora biti "G", "GG", "GGG", "GGGG" ili "GGGGG".',
+ 'The pattern for hour in AM/PM must be "K" or "KK".' => 'Å ablon za Äas u AM/PM mora biti "K" ili "KK".',
+ 'The pattern for hour in day must be "k" or "kk".' => 'Å ablon za Äas u danu mora biti "k" ili "kk".',
+ 'The pattern for minutes must be "m" or "mm".' => 'Å ablon za minute mora biti "m" ili "mm".',
+ 'The pattern for month must be "M", "MM", "MMM", or "MMMM".' => 'Å ablon za mjesec mora biti "M", "MM", "MMM" ili "MMMM".',
+ 'The pattern for seconds must be "s" or "ss".' => 'Å ablon za sekunde mora biti "s" ili "ss".',
+ 'The pattern for time zone must be "z" or "v".' => 'Å ablon za zonu mora biti "z" ili "v".',
+ 'The pattern for week in month must be "W".' => 'Å ablon za sedmicu u mjesecu mora biti "W".',
+ 'The pattern for week in year must be "w".' => 'Å ablon za sedmicu u godini mora biti "w".',
+ 'The queue is empty.' => 'Red (queue) je prazan.',
+ 'The relation "{relation}" in active record class "{class}" is not specified correctly: The join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.',
+ 'The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.' => 'Odnos "{relation}" u active record klasi "{class}" nije specificirana ispravno: pridružena tabela (join table) "{joinTable}" zadata u spoljnom kljuÄu (foreign key) ne može biti pronaÄ‘ena u bazi.',
+ 'The relation "{relation}" in active record class "{class}" is specified with a foreign key "{key}" that does not point to the parent table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je ispisan sa spoljnim kljuÄem "{key}", koji ne prikazuje na tabelu "{table}".',
+ 'The relation "{relation}" in active record class "{class}" is specified with an incomplete foreign key. The foreign key must consist of columns referencing both joining tables.' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana sa nekompletnim spoljnim kljuÄem (foreign key). Spoljni kljuÄ (foreign key) mora se sastojati od kolona koje referenciraju obadvije tabele za spajanje (joining tables).',
+ 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". The foreign key does not point to either joining table.' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key) "{key}". Spoljni kljuÄ (foreign key) ne pokazuje ni na jednu tabelu za spajanje (joining tables).',
+ 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key "{key}". There is no such column in the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana sa pogreÅ¡nim spoljnim kljuÄem "{key}". U tabeli "{table}" ne postoji takva kolona.',
+ 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The columns in the key must match the primary keys of the table "{table}".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Kolone spoljnog kljuÄa (foreign key) moraju biti iste kao i primarnog kljuÄa od tabele "{table}".',
+ 'The relation "{relation}" in active record class "{class}" is specified with an invalid foreign key. The format of the foreign key must be "joinTable(fk1,fk2,...)".' => 'Odnos "{relation}" u active record klasi "{class}" je specificirana pogreÅ¡nim spoljnim kljuÄem (foreign key). Format spoljnog kljuÄa (foreign key) mora biti "joinTable(fk1,fk2,...)',
+ 'The requested view "{name}" was not found.' => 'zahtjevani pogled (view) "{name}" nije pronađen.',
+ 'The stack is empty.' => 'Stek (stack) je prazna.',
+ 'The system is unable to find the requested action "{action}".' => 'Sistem ne može da pronađe traženu akciju "{action}".',
+ 'The system view path "{path}" is not a valid directory.' => 'Put direktorija do sistemskog pogleda (system view) "{path}" nije ispravan.',
+ 'The table "{table}" for active record class "{class}" cannot be found in the database.' => 'Tabela "{table}" za active record klasu "{class}" ne može biti pronađena u bazi.',
+ 'The value for the primary key "{key}" is not supplied when querying the table "{table}".' => 'Vrijednost primarnog kljuÄa (primary key) "{key}" nije prosljeÄ‘ena prilikom izvrÅ¡enja upita nad tabelom "{table}".',
+ 'The verification code is incorrect.' => 'Verifikacioni kod je pogrešan.',
+ 'The view path "{path}" is not a valid directory.' => 'Put do prikaznog direktorija (view path) "{path}" nije važeći.',
+ 'Theme directory "{directory}" does not exist.' => 'Direktorijum za teme (theme directory) "{directory}" ne postoji.',
+ 'This content requires the Adobe Flash Player .' => 'Ovaj sadržaj zahtjeva Adobe Flash Player .',
+ 'Unable to add an item whose name is the same as an existing item.' => 'Ne mogu da dodam stavku sa istim imenom kao postojeća stavka.',
+ 'Unable to change the item name. The name "{name}" is already used by another item.' => 'Ne mogu da promjenim ime stavke (item name). Ime "{name}" već koristi neka druga stavka.',
+ 'Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.' => 'Ne mogu da kreiram aplikacioni fajl stanja (state file) "{file}". Budite sigurni da direktorijum koji sadrži fajl postoji i da je omogućeno pisanje od strane Web server procesa.',
+ 'Unable to lock file "{file}" for reading.' => 'Ne mogu da zakljuÄam fajl "{file}" za Äitanje.',
+ 'Unable to lock file "{file}" for writing.' => 'Ne mogu da zakljuÄam fajl "{file}" za upisivanje.',
+ 'Unable to read file "{file}".' => 'Ne mogu da proÄitam fajl "{file}".',
+ 'Unable to replay the action "{object}.{method}". The method does not exist.' => 'Ne mogu reproducirati (replay) "{object}.{method}". Metoda ne postoji.',
+ 'Unable to resolve the request "{route}".' => 'Ne mogu da riješim "{route}" zahtjev.',
+ 'Unable to write file "{file}".' => 'Ne mogu da upišem fajl "{file}".',
+ 'Unknown authorization item "{name}".' => 'Nepoznata stavka ovlašćenja (authorization item) "{name}',
+ 'Unrecognized locale "{locale}".' => 'Lokalizacija nije prepoznata (unrecognized locale) "{locale}".',
+ 'View file "{file}" does not exist.' => 'View fajl "{file}" ne postoji.',
+ 'Yii application can only be created once.' => 'Yii aplikacija može biti kreirana samo jedanput.',
+ 'You are not authorized to perform this action.' => 'Niste autorizovani da izvršite ovu akciju.',
+ 'Your request is not valid.' => 'Vaš zahtjev nije ispravan.',
+ '{attribute} "{value}" has already been taken.' => '{attribute} "{value}" je već uzeta.',
+ '{attribute} "{value}" is invalid.' => '{attribute} "{value}" je pogrešan (neispravan).',
+ '{attribute} cannot accept more than {limit} files.' => '{attribute} ne prihvata više nego {limit} fajlova.',
+ '{attribute} cannot be blank.' => 'Morate popuniti polje {attribute}.',
+ '{attribute} is invalid.' => '{attribute} je pogrešan (neispravan).',
+ '{attribute} is not a valid URL.' => '{attribute} nije ispravan URL.',
+ '{attribute} is not a valid email address.' => '{attribute} nije ispravna email adresa.',
+ '{attribute} is not in the list.' => '{attribute} nije u listi.',
+ '{attribute} is of the wrong length (should be {length} characters).' => '{attribute} je pogrešne dužine (treba biti {length} karaktera).',
+ '{attribute} is too big (maximum is {max}).' => '{attribute} je prevelik (maksimum je {max}).',
+ '{attribute} is too long (maximum is {max} characters).' => '{attribute} je predugaÄak (maksimum je {max} karaktera).',
+ '{attribute} is too short (minimum is {min} characters).' => '{attribute} je prekratak (minimum je {min} karaktera).',
+ '{attribute} is too small (minimum is {min}).' => '{attribute} je premali (minimum je {min}).',
+ '{attribute} must be a number.' => '{attribute} mora biti broj.',
+ '{attribute} must be an integer.' => '{attribute} mora biti cijeli broj (integer).',
+ '{attribute} must be either {true} or {false}.' => '{attribute} mora biti makar {true} ili {false}.',
+ '{attribute} must be greater than "{compareValue}".' => '{attribute} mora biti veći nego "{compareValue}".',
+ '{attribute} must be greater than or equal to "{compareValue}".' => '{attribute} mora biti veći nego "{compareValue}".',
+ '{attribute} must be less than "{compareValue}".' => '{attribute} mora biti manji nego "{compareValue}".',
+ '{attribute} must be less than or equal to "{compareValue}".' => '{attribute} mora biti manji ili isti nego "{compareValue}".',
+ '{attribute} must be repeated exactly.' => '{attribute} mora biti taÄno ponovljen.',
+ '{attribute} must be {type}.' => '{attribute} mora biti {type}.',
+ '{attribute} must be {value}.' => '{attribute} mora biti {value}.',
+ '{attribute} must not be equal to "{compareValue}".' => '{attribute} ne smije biti isti kao "{compareValue}".',
+ '{className} does not support add() functionality.' => '{className} ne podržava add() funcionalnost.',
+ '{className} does not support delete() functionality.' => '{className} ne podržava delete() funkcionalnost.',
+ '{className} does not support flush() functionality.' => '{className} ne podržava flush() funkcionalnost.',
+ '{className} does not support get() functionality.' => '{className} ne podržava get() funkcionalnost.',
+ '{className} does not support set() functionality.' => '{className} ne podržava set() funkcionalnost.',
+ '{class} does not have a method named "{name}".' => '{class} nema metode imenom "{name}".',
+ '{class} does not have relation "{name}".' => '{class} nema odnosa "{name}".',
+ '{class} does not support fetching all table names.' => '{class} ne podržava dobavljanje svih naziva tabela.',
+ '{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.' => '{class} ima pogrešno ovjereno pravilo (validation rule). Pravilo mora da specificira atribute koji ce biti ovjereni i ime ovjerenja.',
+ '{class} must specify "model" and "attribute" or "name" property values.' => '{class} mora da specificira "model" i "attribute" ili "name" svojstvo (property) vrijednosti.',
+ '{class}.allowAutoLogin must be set true in order to use cookie-based authentication.' => '{class}.allowAutoLogin mora biti podešen na true da bi se koristila cookies autorizacija.',
+ '{class}::authenticate() must be implemented.' => '{class}::authenticate() metoda mora biti implementirana.',
+ '{controller} cannot find the requested view "{view}".' => '{controller} ne može da pronađe zahtjevani view "{view}".',
+ '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.' => '{controller} sadrži nepropisno ugnježdene widget tagove u svom pogledu (view) "{view}". {widget} widget nema endWidget() poziv.',
+ '{controller} has an extra endWidget({id}) call in its view.' => '{controller} ima suvišan endWidget({id}) poziv u svom view-u.',
+ '{widget} cannot find the view "{view}".' => '{widget} ne može da pronađe view "{view}".',
+);
\ No newline at end of file
diff --git a/web/framework-1.1.17/messages/hu/yii.php b/web/framework/messages/hu/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/hu/yii.php
rename to web/framework/messages/hu/yii.php
diff --git a/web/framework-1.1.17/messages/hu/zii.php b/web/framework/messages/hu/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/hu/zii.php
rename to web/framework/messages/hu/zii.php
diff --git a/web/framework-1.1.17/messages/id/yii.php b/web/framework/messages/id/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/id/yii.php
rename to web/framework/messages/id/yii.php
diff --git a/web/framework-1.1.17/messages/id/zii.php b/web/framework/messages/id/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/id/zii.php
rename to web/framework/messages/id/zii.php
diff --git a/web/framework-1.1.17/messages/it/yii.php b/web/framework/messages/it/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/it/yii.php
rename to web/framework/messages/it/yii.php
diff --git a/web/framework-1.1.17/messages/it/zii.php b/web/framework/messages/it/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/it/zii.php
rename to web/framework/messages/it/zii.php
diff --git a/web/framework-1.1.17/messages/ja/yii.php b/web/framework/messages/ja/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ja/yii.php
rename to web/framework/messages/ja/yii.php
diff --git a/web/framework-1.1.17/messages/ja/zii.php b/web/framework/messages/ja/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ja/zii.php
rename to web/framework/messages/ja/zii.php
diff --git a/web/framework-1.1.17/messages/kk/yii.php b/web/framework/messages/kk/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/kk/yii.php
rename to web/framework/messages/kk/yii.php
diff --git a/web/framework-1.1.17/messages/kk/zii.php b/web/framework/messages/kk/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/kk/zii.php
rename to web/framework/messages/kk/zii.php
diff --git a/web/framework-1.1.17/messages/ko_kr/yii.php b/web/framework/messages/ko_kr/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ko_kr/yii.php
rename to web/framework/messages/ko_kr/yii.php
diff --git a/web/framework-1.1.17/messages/ko_kr/zii.php b/web/framework/messages/ko_kr/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ko_kr/zii.php
rename to web/framework/messages/ko_kr/zii.php
diff --git a/web/framework-1.1.17/messages/lt/yii.php b/web/framework/messages/lt/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/lt/yii.php
rename to web/framework/messages/lt/yii.php
diff --git a/web/framework-1.1.17/messages/lt/zii.php b/web/framework/messages/lt/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/lt/zii.php
rename to web/framework/messages/lt/zii.php
diff --git a/web/framework-1.1.17/messages/lv/yii.php b/web/framework/messages/lv/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/lv/yii.php
rename to web/framework/messages/lv/yii.php
diff --git a/web/framework-1.1.17/messages/lv/zii.php b/web/framework/messages/lv/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/lv/zii.php
rename to web/framework/messages/lv/zii.php
diff --git a/web/framework-1.1.17/messages/nl/yii.php b/web/framework/messages/nl/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/nl/yii.php
rename to web/framework/messages/nl/yii.php
diff --git a/web/framework-1.1.17/messages/nl/zii.php b/web/framework/messages/nl/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/nl/zii.php
rename to web/framework/messages/nl/zii.php
diff --git a/web/framework-1.1.17/messages/no/yii.php b/web/framework/messages/no/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/no/yii.php
rename to web/framework/messages/no/yii.php
diff --git a/web/framework-1.1.17/messages/no/zii.php b/web/framework/messages/no/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/no/zii.php
rename to web/framework/messages/no/zii.php
diff --git a/web/framework-1.1.17/messages/pl/yii.php b/web/framework/messages/pl/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pl/yii.php
rename to web/framework/messages/pl/yii.php
diff --git a/web/framework-1.1.17/messages/pl/zii.php b/web/framework/messages/pl/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pl/zii.php
rename to web/framework/messages/pl/zii.php
diff --git a/web/framework-1.1.17/messages/pt/yii.php b/web/framework/messages/pt/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pt/yii.php
rename to web/framework/messages/pt/yii.php
diff --git a/web/framework-1.1.17/messages/pt/zii.php b/web/framework/messages/pt/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pt/zii.php
rename to web/framework/messages/pt/zii.php
diff --git a/web/framework-1.1.17/messages/pt_br/yii.php b/web/framework/messages/pt_br/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pt_br/yii.php
rename to web/framework/messages/pt_br/yii.php
diff --git a/web/framework-1.1.17/messages/pt_br/zii.php b/web/framework/messages/pt_br/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/pt_br/zii.php
rename to web/framework/messages/pt_br/zii.php
diff --git a/web/framework-1.1.17/messages/ro/yii.php b/web/framework/messages/ro/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ro/yii.php
rename to web/framework/messages/ro/yii.php
diff --git a/web/framework-1.1.17/messages/ro/zii.php b/web/framework/messages/ro/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ro/zii.php
rename to web/framework/messages/ro/zii.php
diff --git a/web/framework-1.1.17/messages/ru/yii.php b/web/framework/messages/ru/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ru/yii.php
rename to web/framework/messages/ru/yii.php
diff --git a/web/framework-1.1.17/messages/ru/zii.php b/web/framework/messages/ru/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ru/zii.php
rename to web/framework/messages/ru/zii.php
diff --git a/web/framework-1.1.17/messages/sk/yii.php b/web/framework/messages/sk/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sk/yii.php
rename to web/framework/messages/sk/yii.php
diff --git a/web/framework-1.1.17/messages/sk/zii.php b/web/framework/messages/sk/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sk/zii.php
rename to web/framework/messages/sk/zii.php
diff --git a/web/framework-1.1.17/messages/sr_sr/yii.php b/web/framework/messages/sr_sr/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sr_sr/yii.php
rename to web/framework/messages/sr_sr/yii.php
diff --git a/web/framework-1.1.17/messages/sr_sr/zii.php b/web/framework/messages/sr_sr/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sr_sr/zii.php
rename to web/framework/messages/sr_sr/zii.php
diff --git a/web/framework-1.1.17/messages/sr_yu/yii.php b/web/framework/messages/sr_yu/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sr_yu/yii.php
rename to web/framework/messages/sr_yu/yii.php
diff --git a/web/framework-1.1.17/messages/sr_yu/zii.php b/web/framework/messages/sr_yu/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sr_yu/zii.php
rename to web/framework/messages/sr_yu/zii.php
diff --git a/web/framework-1.1.17/messages/sv/yii.php b/web/framework/messages/sv/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sv/yii.php
rename to web/framework/messages/sv/yii.php
diff --git a/web/framework-1.1.17/messages/sv/zii.php b/web/framework/messages/sv/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/sv/zii.php
rename to web/framework/messages/sv/zii.php
diff --git a/web/framework-1.1.17/messages/ta_in/yii.php b/web/framework/messages/ta_in/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ta_in/yii.php
rename to web/framework/messages/ta_in/yii.php
diff --git a/web/framework-1.1.17/messages/ta_in/zii.php b/web/framework/messages/ta_in/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/ta_in/zii.php
rename to web/framework/messages/ta_in/zii.php
diff --git a/web/framework-1.1.17/messages/th/yii.php b/web/framework/messages/th/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/th/yii.php
rename to web/framework/messages/th/yii.php
diff --git a/web/framework-1.1.17/messages/tr/yii.php b/web/framework/messages/tr/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/tr/yii.php
rename to web/framework/messages/tr/yii.php
diff --git a/web/framework-1.1.17/messages/tr/zii.php b/web/framework/messages/tr/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/tr/zii.php
rename to web/framework/messages/tr/zii.php
diff --git a/web/framework-1.1.17/messages/uk/yii.php b/web/framework/messages/uk/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/uk/yii.php
rename to web/framework/messages/uk/yii.php
diff --git a/web/framework-1.1.17/messages/uk/zii.php b/web/framework/messages/uk/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/uk/zii.php
rename to web/framework/messages/uk/zii.php
diff --git a/web/framework-1.1.17/messages/vi/yii.php b/web/framework/messages/vi/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/vi/yii.php
rename to web/framework/messages/vi/yii.php
diff --git a/web/framework-1.1.17/messages/vi/zii.php b/web/framework/messages/vi/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/vi/zii.php
rename to web/framework/messages/vi/zii.php
diff --git a/web/framework-1.1.17/messages/zh_cn/yii.php b/web/framework/messages/zh_cn/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/zh_cn/yii.php
rename to web/framework/messages/zh_cn/yii.php
diff --git a/web/framework-1.1.17/messages/zh_cn/zii.php b/web/framework/messages/zh_cn/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/zh_cn/zii.php
rename to web/framework/messages/zh_cn/zii.php
diff --git a/web/framework-1.1.17/messages/zh_tw/yii.php b/web/framework/messages/zh_tw/yii.php
similarity index 100%
rename from web/framework-1.1.17/messages/zh_tw/yii.php
rename to web/framework/messages/zh_tw/yii.php
diff --git a/web/framework-1.1.17/messages/zh_tw/zii.php b/web/framework/messages/zh_tw/zii.php
similarity index 100%
rename from web/framework-1.1.17/messages/zh_tw/zii.php
rename to web/framework/messages/zh_tw/zii.php
diff --git a/web/framework-1.1.17/test/CDbFixtureManager.php b/web/framework/test/CDbFixtureManager.php
similarity index 100%
rename from web/framework-1.1.17/test/CDbFixtureManager.php
rename to web/framework/test/CDbFixtureManager.php
diff --git a/web/framework-1.1.17/test/CDbTestCase.php b/web/framework/test/CDbTestCase.php
similarity index 100%
rename from web/framework-1.1.17/test/CDbTestCase.php
rename to web/framework/test/CDbTestCase.php
diff --git a/web/framework-1.1.17/test/CTestCase.php b/web/framework/test/CTestCase.php
similarity index 100%
rename from web/framework-1.1.17/test/CTestCase.php
rename to web/framework/test/CTestCase.php
diff --git a/web/framework-1.1.17/test/CWebTestCase.php b/web/framework/test/CWebTestCase.php
similarity index 100%
rename from web/framework-1.1.17/test/CWebTestCase.php
rename to web/framework/test/CWebTestCase.php
diff --git a/web/framework-1.1.17/utils/CDateTimeParser.php b/web/framework/utils/CDateTimeParser.php
similarity index 100%
rename from web/framework-1.1.17/utils/CDateTimeParser.php
rename to web/framework/utils/CDateTimeParser.php
diff --git a/web/framework-1.1.17/utils/CFileHelper.php b/web/framework/utils/CFileHelper.php
similarity index 99%
rename from web/framework-1.1.17/utils/CFileHelper.php
rename to web/framework/utils/CFileHelper.php
index 3608e14..7a3c059 100644
--- a/web/framework-1.1.17/utils/CFileHelper.php
+++ b/web/framework/utils/CFileHelper.php
@@ -153,6 +153,7 @@ class CFileHelper
* @param array $options additional options. The following options are supported:
* newDirMode - the permission to be set for newly copied directories (defaults to 0777);
* newFileMode - the permission to be set for newly copied files (defaults to the current environment setting).
+ * @throws Exception
*/
protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exclude,$level,$options)
{
@@ -199,6 +200,7 @@ class CFileHelper
* level N means searching for those directories that are within N levels.
* @param boolean $absolutePaths whether to return absolute paths or relative ones
* @return array files found under the directory.
+ * @throws Exception
*/
protected static function findFilesRecursive($dir,$base,$fileTypes,$exclude,$level,$absolutePaths)
{
diff --git a/web/framework-1.1.17/utils/CFormatter.php b/web/framework/utils/CFormatter.php
similarity index 100%
rename from web/framework-1.1.17/utils/CFormatter.php
rename to web/framework/utils/CFormatter.php
diff --git a/web/framework-1.1.17/utils/CLocalizedFormatter.php b/web/framework/utils/CLocalizedFormatter.php
similarity index 100%
rename from web/framework-1.1.17/utils/CLocalizedFormatter.php
rename to web/framework/utils/CLocalizedFormatter.php
diff --git a/web/framework-1.1.17/utils/CMarkdownParser.php b/web/framework/utils/CMarkdownParser.php
similarity index 100%
rename from web/framework-1.1.17/utils/CMarkdownParser.php
rename to web/framework/utils/CMarkdownParser.php
diff --git a/web/framework-1.1.17/utils/CPasswordHelper.php b/web/framework/utils/CPasswordHelper.php
similarity index 100%
rename from web/framework-1.1.17/utils/CPasswordHelper.php
rename to web/framework/utils/CPasswordHelper.php
diff --git a/web/framework-1.1.17/utils/CPropertyValue.php b/web/framework/utils/CPropertyValue.php
similarity index 97%
rename from web/framework-1.1.17/utils/CPropertyValue.php
rename to web/framework/utils/CPropertyValue.php
index ddb9181..addcbe8 100644
--- a/web/framework-1.1.17/utils/CPropertyValue.php
+++ b/web/framework/utils/CPropertyValue.php
@@ -113,8 +113,14 @@ class CPropertyValue
$len = strlen($value);
if ($len >= 2 && $value[0] == '(' && $value[$len-1] == ')')
{
- eval('$array=array'.$value.';');
- return $array;
+ try
+ {
+ return eval('return array' . $value . ';');
+ }
+ catch (ParseError $e)
+ {
+ return array();
+ }
}
else
return $len>0?array($value):array();
diff --git a/web/framework-1.1.17/utils/CTimestamp.php b/web/framework/utils/CTimestamp.php
similarity index 100%
rename from web/framework-1.1.17/utils/CTimestamp.php
rename to web/framework/utils/CTimestamp.php
diff --git a/web/framework-1.1.17/utils/CVarDumper.php b/web/framework/utils/CVarDumper.php
similarity index 100%
rename from web/framework-1.1.17/utils/CVarDumper.php
rename to web/framework/utils/CVarDumper.php
diff --git a/web/framework-1.1.17/utils/fileExtensions.php b/web/framework/utils/fileExtensions.php
similarity index 100%
rename from web/framework-1.1.17/utils/fileExtensions.php
rename to web/framework/utils/fileExtensions.php
diff --git a/web/framework-1.1.17/utils/mimeTypes.php b/web/framework/utils/mimeTypes.php
similarity index 100%
rename from web/framework-1.1.17/utils/mimeTypes.php
rename to web/framework/utils/mimeTypes.php
diff --git a/web/framework-1.1.17/validators/CBooleanValidator.php b/web/framework/validators/CBooleanValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CBooleanValidator.php
rename to web/framework/validators/CBooleanValidator.php
diff --git a/web/framework-1.1.17/validators/CCaptchaValidator.php b/web/framework/validators/CCaptchaValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CCaptchaValidator.php
rename to web/framework/validators/CCaptchaValidator.php
diff --git a/web/framework-1.1.17/validators/CCompareValidator.php b/web/framework/validators/CCompareValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CCompareValidator.php
rename to web/framework/validators/CCompareValidator.php
diff --git a/web/framework-1.1.17/validators/CDateValidator.php b/web/framework/validators/CDateValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CDateValidator.php
rename to web/framework/validators/CDateValidator.php
diff --git a/web/framework-1.1.17/validators/CDefaultValueValidator.php b/web/framework/validators/CDefaultValueValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CDefaultValueValidator.php
rename to web/framework/validators/CDefaultValueValidator.php
diff --git a/web/framework-1.1.17/validators/CEmailValidator.php b/web/framework/validators/CEmailValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CEmailValidator.php
rename to web/framework/validators/CEmailValidator.php
diff --git a/web/framework-1.1.17/validators/CExistValidator.php b/web/framework/validators/CExistValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CExistValidator.php
rename to web/framework/validators/CExistValidator.php
diff --git a/web/framework-1.1.17/validators/CFileValidator.php b/web/framework/validators/CFileValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CFileValidator.php
rename to web/framework/validators/CFileValidator.php
diff --git a/web/framework-1.1.17/validators/CFilterValidator.php b/web/framework/validators/CFilterValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CFilterValidator.php
rename to web/framework/validators/CFilterValidator.php
diff --git a/web/framework-1.1.17/validators/CInlineValidator.php b/web/framework/validators/CInlineValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CInlineValidator.php
rename to web/framework/validators/CInlineValidator.php
diff --git a/web/framework-1.1.17/validators/CNumberValidator.php b/web/framework/validators/CNumberValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CNumberValidator.php
rename to web/framework/validators/CNumberValidator.php
diff --git a/web/framework-1.1.17/validators/CRangeValidator.php b/web/framework/validators/CRangeValidator.php
similarity index 97%
rename from web/framework-1.1.17/validators/CRangeValidator.php
rename to web/framework/validators/CRangeValidator.php
index 27a703d..a15b6ae 100644
--- a/web/framework-1.1.17/validators/CRangeValidator.php
+++ b/web/framework/validators/CRangeValidator.php
@@ -20,7 +20,7 @@
* return array(
* array('text, tag', 'required'),
* array('text, 'type', 'type' => 'string'),
- * array('tag, 'in', 'range' => array('php', 'mysql', 'jquery')),
+ * array('tag', 'in', 'range' => array('php', 'mysql', 'jquery')),
* );
* }
* }
@@ -121,4 +121,4 @@ if(".($this->allowEmpty ? "jQuery.trim(value)!='' && " : '').($this->not ? "jQue
}
";
}
-}
\ No newline at end of file
+}
diff --git a/web/framework-1.1.17/validators/CRegularExpressionValidator.php b/web/framework/validators/CRegularExpressionValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CRegularExpressionValidator.php
rename to web/framework/validators/CRegularExpressionValidator.php
diff --git a/web/framework-1.1.17/validators/CRequiredValidator.php b/web/framework/validators/CRequiredValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CRequiredValidator.php
rename to web/framework/validators/CRequiredValidator.php
diff --git a/web/framework-1.1.17/validators/CSafeValidator.php b/web/framework/validators/CSafeValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CSafeValidator.php
rename to web/framework/validators/CSafeValidator.php
diff --git a/web/framework-1.1.17/validators/CStringValidator.php b/web/framework/validators/CStringValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CStringValidator.php
rename to web/framework/validators/CStringValidator.php
diff --git a/web/framework-1.1.17/validators/CTypeValidator.php b/web/framework/validators/CTypeValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CTypeValidator.php
rename to web/framework/validators/CTypeValidator.php
diff --git a/web/framework-1.1.17/validators/CUniqueValidator.php b/web/framework/validators/CUniqueValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CUniqueValidator.php
rename to web/framework/validators/CUniqueValidator.php
diff --git a/web/framework-1.1.17/validators/CUnsafeValidator.php b/web/framework/validators/CUnsafeValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CUnsafeValidator.php
rename to web/framework/validators/CUnsafeValidator.php
diff --git a/web/framework-1.1.17/validators/CUrlValidator.php b/web/framework/validators/CUrlValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CUrlValidator.php
rename to web/framework/validators/CUrlValidator.php
diff --git a/web/framework-1.1.17/validators/CValidator.php b/web/framework/validators/CValidator.php
similarity index 100%
rename from web/framework-1.1.17/validators/CValidator.php
rename to web/framework/validators/CValidator.php
diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/LICENSE.txt b/web/framework/vendors/Net_IDNA2/LICENSE.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/Net_IDNA2/LICENSE.txt
rename to web/framework/vendors/Net_IDNA2/LICENSE.txt
diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2.php
similarity index 100%
rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2.php
rename to web/framework/vendors/Net_IDNA2/Net/IDNA2.php
diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php
similarity index 100%
rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception.php
rename to web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception.php
diff --git a/web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php b/web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php
similarity index 100%
rename from web/framework-1.1.17/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php
rename to web/framework/vendors/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php
diff --git a/web/framework-1.1.17/vendors/README.html b/web/framework/vendors/README.html
similarity index 93%
rename from web/framework-1.1.17/vendors/README.html
rename to web/framework/vendors/README.html
index a0e5fd5..0a2bc5f 100644
--- a/web/framework-1.1.17/vendors/README.html
+++ b/web/framework/vendors/README.html
@@ -74,7 +74,7 @@ Please refer to the detailed license information as shown below:
CTimestamp
- Text_Highlighter - Generic Syntax Highlighter (v0.7.0 beta)
+ Text_Highlighter - Generic Syntax Highlighter (v0.7.3 beta)
The PHP License
CTextHighlighter (note: many PHP files are modified to make them workable in PHP 5 strict mode and their PEAR dependency are also removed.)
@@ -84,7 +84,7 @@ Please refer to the detailed license information as shown below:
CGettextMoFile
- HTML Purifier (v4.5.0)
+ HTML Purifier (v4.9.2)
LGPL
CHtmlPurifier
@@ -113,6 +113,11 @@ Please refer to the detailed license information as shown below:
MIT
CWebLogRoute
+
+ Zend Escaper - April 1 2015
+ BSD
+ CJavaScript
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php b/web/framework/vendors/TextHighlighter/Text/Highlighter.php
similarity index 98%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter.php
index 4823feb..bd0548b 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter.php
@@ -46,7 +46,9 @@ if (!defined('HL_NUMBERS_LI')) {
/**
* for our purpose, it is infinity
*/
-define ('HL_INFINITY', 1000000000);
+if (!defined('HL_INFINITY')) {
+ define('HL_INFINITY', 1000000000);
+}
// }}}
@@ -81,7 +83,7 @@ define ('HL_INFINITY', 1000000000);
* Usage example
*
*require_once 'Text/Highlighter.php';
- *$hlSQL =& Text_Highlighter::factory('SQL',array('numbers'=>true));
+ *$hlSQL = Text_Highlighter::factory('SQL',array('numbers'=>true));
*echo $hlSQL->highlight('SELECT * FROM table a WHERE id = 12');
*
*
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/ABAP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/ABAP.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/ABAP.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/ABAP.php
diff --git a/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php
new file mode 100644
index 0000000..319c7e9
--- /dev/null
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/AVRC.php
@@ -0,0 +1,877 @@
+
+
+ *
+ */
+
+
+/**
+ * Auto-generated class. AVRC syntax highlighting
+ *
+ * @author Andrey Demenev
+ * @category Text
+ * @package Text_Highlighter
+ * @copyright 2004-2006 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version Release: 0.7.0
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+class Text_Highlighter_AVRC extends Text_Highlighter
+{
+ var $_language = 'avrc';
+
+ /**
+ * Constructor
+ *
+ * @param array $options
+ * @access public
+ */
+ function __construct($options=array())
+ {
+
+ $this->_options = $options;
+ $this->_regs = array (
+ -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 0 => '/((?i)\\\\)/',
+ 1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 3 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 4 => '//',
+ 5 => '/((?i)")|((?i)<)/',
+ 6 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ 7 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ 8 => '/((?i)\\$\\w+\\s*:.+\\$)/',
+ );
+ $this->_counts = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 0 =>
+ array (
+ 0 => 0,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 0,
+ 8 => 2,
+ 9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
+ 4 => 0,
+ 5 => 0,
+ 6 => 0,
+ 7 => 2,
+ 8 => 0,
+ 9 => 0,
+ ),
+ 7 =>
+ array (
+ 0 => 0,
+ ),
+ 8 =>
+ array (
+ 0 => 0,
+ ),
+ );
+ $this->_delim = array (
+ -1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => '',
+ ),
+ 1 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => 'brackets',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'quotes',
+ ),
+ 6 =>
+ array (
+ 0 => 'quotes',
+ 1 => 'brackets',
+ 2 => 'brackets',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => '',
+ ),
+ 8 =>
+ array (
+ 0 => '',
+ ),
+ );
+ $this->_inner = array (
+ -1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 0 =>
+ array (
+ 0 => 'special',
+ ),
+ 1 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 2 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 3 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'code',
+ 4 => 'identifier',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 'string',
+ 1 => 'string',
+ ),
+ 6 =>
+ array (
+ 0 => 'string',
+ 1 => 'code',
+ 2 => 'code',
+ 3 => 'identifier',
+ 4 => 'number',
+ 5 => 'number',
+ 6 => 'number',
+ 7 => 'number',
+ 8 => 'mlcomment',
+ 9 => 'comment',
+ ),
+ 7 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ 8 =>
+ array (
+ 0 => 'inlinedoc',
+ ),
+ );
+ $this->_end = array (
+ 0 => '/(?i)"/',
+ 1 => '/(?i)\\}/',
+ 2 => '/(?i)\\)/',
+ 3 => '/(?i)\\]/',
+ 4 => '/(?i)>/',
+ 5 => '/(?mi)(? '/(?mi)(? '/(?i)\\*\\//',
+ 8 => '/(?mi)$/',
+ );
+ $this->_states = array (
+ -1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 0 =>
+ array (
+ 0 => -1,
+ ),
+ 1 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 2 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 3 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => 3,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => 0,
+ 1 => 4,
+ ),
+ 6 =>
+ array (
+ 0 => 0,
+ 1 => 1,
+ 2 => 2,
+ 3 => -1,
+ 4 => -1,
+ 5 => -1,
+ 6 => -1,
+ 7 => -1,
+ 8 => 7,
+ 9 => 8,
+ ),
+ 7 =>
+ array (
+ 0 => -1,
+ ),
+ 8 =>
+ array (
+ 0 => -1,
+ ),
+ );
+ $this->_keywords = array (
+ -1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 0 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 1 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 2 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 3 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 => -1,
+ 4 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 =>
+ array (
+ ),
+ 9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ ),
+ 6 =>
+ array (
+ 0 => -1,
+ 1 => -1,
+ 2 => -1,
+ 3 =>
+ array (
+ 'reserved' => '/^(and|and_eq|asm|bitand|bitor|break|case|catch|compl|const_cast|continue|default|delete|do|dynamic_cast|else|for|fortran|friend|goto|if|new|not|not_eq|operator|or|or_eq|private|protected|public|reinterpret_cast|return|sizeof|static_cast|switch|this|throw|try|typeid|using|while|xor|xor_eq|false|true)$/',
+ 'registers' => '/^(ACSR|ADCH|ADCL|ADCSRA|ADMUX|ASSR|DDRA|DDRB|DDRC|DDRD|DDRE|DDRF|DDRG|EEARH|EEARL|EECR|EEDR|EICRA|EICRB|EIFR|EIMSK|ETIFR|ETIMSK|GICR|GIFR|ICR1H|ICR1L|ICR3H|ICR3L|MCUCR|MCUCSR|OCDR|OCR0|OCR1AH|OCR1AL|OCR1BH|OCR1BL|OCR1CH|OCR1CL|OCR2|OCR3AH|OCR3AL|OCR3BH|OCR3BL|OCR3CH|OCR3CL|OSCCAL|PINA|PINB|PINC|PIND|PINE|PINF|PING|PORTA|PORTB|PORTC|PORTD|PORTE|PORTF|PORTG|RAMPZ|SFIOR|SPCR|SPDR|SPH|SPL|SPMCR|SPMCSR|SPSR|SREG|TCCR0|TCCR1A|TCCR1B|TCCR1C|TCCR2|TCCR3A|TCCR3B|TCCR3C|TCNT0|TCNT1H|TCNT1L|TCNT2|TCNT3H|TCNT3L|TIFR|TIMSK|TWAR|TWBR|TWCR|TWDR|TWSR|UBRR0H|UBRR0L|UBRR1H|UBRR1L|UBRRH|UBRRL|UCSR0A|UCSR0B|UCSR0C|UCSR1A|UCSR1B|UCSR1C|UCSRA|UCSRB|UCSRC|UDR|UDR0|UDR1|WDTCR|XDIV|XMCRA|XMCRB)$/',
+ 'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
+ 'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
+ 7 =>
+ array (
+ ),
+ 8 => -1,
+ 9 => -1,
+ ),
+ 7 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ 8 =>
+ array (
+ 0 =>
+ array (
+ ),
+ ),
+ );
+ $this->_parts = array (
+ 0 =>
+ array (
+ 0 => NULL,
+ ),
+ 1 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 2 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 3 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ 10 => NULL,
+ 11 => NULL,
+ 12 => NULL,
+ 13 => NULL,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ ),
+ 6 =>
+ array (
+ 0 => NULL,
+ 1 => NULL,
+ 2 => NULL,
+ 3 => NULL,
+ 4 => NULL,
+ 5 => NULL,
+ 6 => NULL,
+ 7 => NULL,
+ 8 => NULL,
+ 9 => NULL,
+ ),
+ 7 =>
+ array (
+ 0 => NULL,
+ ),
+ 8 =>
+ array (
+ 0 => NULL,
+ ),
+ );
+ $this->_subst = array (
+ -1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ ),
+ 0 =>
+ array (
+ 0 => false,
+ ),
+ 1 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ ),
+ 2 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ ),
+ 3 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ ),
+ 4 =>
+ array (
+ ),
+ 5 =>
+ array (
+ 0 => false,
+ 1 => false,
+ ),
+ 6 =>
+ array (
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 7 =>
+ array (
+ 0 => false,
+ ),
+ 8 =>
+ array (
+ 0 => false,
+ ),
+ );
+ $this->_conditions = array (
+ );
+ $this->_kwmap = array (
+ 'reserved' => 'reserved',
+ 'registers' => 'reserved',
+ 'types' => 'types',
+ 'Common Macros' => 'prepro',
+ );
+ $this->_defClass = 'code';
+ $this->_checkDefines();
+ }
+
+}
\ No newline at end of file
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php
similarity index 94%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php
index eccaa08..229a681 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CPP.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/CPP.php
@@ -53,7 +53,7 @@ class Text_Highlighter_CPP extends Text_Highlighter
$this->_options = $options;
$this->_regs = array (
- -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
+ -1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
0 => '/((?i)\\\\)/',
1 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
2 => '/((?i)")|((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)[a-z_]\\w*)|((?i)\\b0[xX][\\da-f]+)|((?i)\\b\\d\\d*|\\b0\\b)|((?i)\\b0[0-7]+)|((?i)\\b(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?mi)^[ \\t]*#include)|((?mii)^[ \\t]*#[ \\t]*[a-z]+)|((?i)\\d*\\.?\\d+)|((?i)\\/\\*)|((?i)\\/\\/.+)/',
@@ -75,8 +75,12 @@ class Text_Highlighter_CPP extends Text_Highlighter
5 => 0,
6 => 0,
7 => 0,
- 8 => 0,
+ 8 => 2,
9 => 0,
+ 10 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 0,
),
0 =>
array (
@@ -171,11 +175,15 @@ class Text_Highlighter_CPP extends Text_Highlighter
2 => 'brackets',
3 => 'brackets',
4 => '',
- 5 => 'prepro',
- 6 => 'prepro',
+ 5 => '',
+ 6 => '',
7 => '',
- 8 => 'mlcomment',
- 9 => 'comment',
+ 8 => '',
+ 9 => 'prepro',
+ 10 => 'prepro',
+ 11 => '',
+ 12 => 'mlcomment',
+ 13 => 'comment',
),
0 =>
array (
@@ -270,11 +278,15 @@ class Text_Highlighter_CPP extends Text_Highlighter
2 => 'code',
3 => 'code',
4 => 'identifier',
- 5 => 'prepro',
- 6 => 'code',
+ 5 => 'number',
+ 6 => 'number',
7 => 'number',
- 8 => 'mlcomment',
- 9 => 'comment',
+ 8 => 'number',
+ 9 => 'prepro',
+ 10 => 'code',
+ 11 => 'number',
+ 12 => 'mlcomment',
+ 13 => 'comment',
),
0 =>
array (
@@ -380,11 +392,15 @@ class Text_Highlighter_CPP extends Text_Highlighter
2 => 2,
3 => 3,
4 => -1,
- 5 => 5,
- 6 => 6,
+ 5 => -1,
+ 6 => -1,
7 => -1,
- 8 => 7,
- 9 => 8,
+ 8 => -1,
+ 9 => 5,
+ 10 => 6,
+ 11 => -1,
+ 12 => 7,
+ 13 => 8,
),
0 =>
array (
@@ -484,13 +500,25 @@ class Text_Highlighter_CPP extends Text_Highlighter
'types' => '/^(auto|bool|char|class|const|double|enum|explicit|export|extern|float|inline|int|long|mutable|namespace|register|short|signed|static|struct|template|typedef|typename|union|unsigned|virtual|void|volatile|wchar_t)$/',
'Common Macros' => '/^(NULL|TRUE|FALSE|MAX|MIN|__LINE__|__DATA__|__FILE__|__TIME__|__STDC__)$/',
),
- 5 => -1,
- 6 => -1,
+ 5 =>
+ array (
+ ),
+ 6 =>
+ array (
+ ),
7 =>
array (
),
- 8 => -1,
+ 8 =>
+ array (
+ ),
9 => -1,
+ 10 => -1,
+ 11 =>
+ array (
+ ),
+ 12 => -1,
+ 13 => -1,
),
0 =>
array (
@@ -740,6 +768,10 @@ class Text_Highlighter_CPP extends Text_Highlighter
7 => false,
8 => false,
9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
),
0 =>
array (
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CSS.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/CSS.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/CSS.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/CSS.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DIFF.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/DIFF.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DIFF.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/DIFF.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DTD.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/DTD.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/DTD.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/DTD.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Generator.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Generator.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Generator.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Generator.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/HTML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/HTML.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/HTML.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/HTML.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVA.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/JAVA.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVA.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/JAVA.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/JAVASCRIPT.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/MYSQL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/MYSQL.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/MYSQL.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/MYSQL.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PERL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PERL.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PERL.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PERL.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php
similarity index 99%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php
index 94b3733..70da653 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PHP.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/PHP.php
@@ -46,7 +46,7 @@ class Text_Highlighter_PHP extends Text_Highlighter
$this->_options = $options;
$this->_regs = array (
- -1 => '/((?i)(\\<\\?(php|=)?)?)/',
+ -1 => '/((?i)\\<\\?(php|=)?)/',
0 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
1 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)\\?\\>)|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
2 => '/((?i)\\{)|((?i)\\()|((?i)\\[)|((?i)\\/\\*)|((?i)")|((?i)`)|((?mi)\\<\\<\\<[\\x20\\x09]*(\\w+)$)|((?i)\')|((?i)(#|\\/\\/))|((?i)[a-z_]\\w*)|((?i)\\((array|int|integer|string|bool|boolean|object|float|double)\\))|((?i)0[xX][\\da-f]+)|((?i)\\$[a-z_]\\w*)|((?i)\\d\\d*|\\b0\\b)|((?i)0[0-7]+)|((?i)(\\d*\\.\\d+)|(\\d+\\.\\d*))|((?i)((\\d+|((\\d*\\.\\d+)|(\\d+\\.\\d*)))[eE][+-]?\\d+))/',
@@ -62,7 +62,7 @@ class Text_Highlighter_PHP extends Text_Highlighter
$this->_counts = array (
-1 =>
array (
- 0 => 2,
+ 0 => 1,
),
0 =>
array (
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PYTHON.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/PYTHON.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/PYTHON.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/PYTHON.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/RUBY.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/RUBY.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/RUBY.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/RUBY.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php
similarity index 97%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php
index ef3ffec..b7442d0 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Array.php
@@ -99,6 +99,7 @@ class Text_Highlighter_Renderer_Array extends Text_Highlighter_Renderer
{
// normalize whitespace and tabs
$str = str_replace("\r\n","\n", $str);
+ $str = str_replace("\r","\n", $str);
// some browsers refuse to display empty lines
$str = preg_replace('~^$~m'," ", $str);
$str = str_replace("\t",str_repeat(' ', $this->_tabsize), $str);
@@ -141,7 +142,9 @@ class Text_Highlighter_Renderer_Array extends Text_Highlighter_Renderer
*/
function acceptToken($class, $content)
{
-
+ if (!is_array($this->_output)) {
+ $this->_output = array();
+ }
$theClass = $this->_getFullClassName($class);
if ($this->_htmlspecialchars) {
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/BB.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php
similarity index 93%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php
index 2bba33b..0260dff 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Console.php
@@ -176,14 +176,19 @@ class Text_Highlighter_Renderer_Console extends Text_Highlighter_Renderer
function finalize()
{
if ($this->_numbers) {
- $nlines = substr_count($this->_output, "\n") + 1;
- $len = strlen($nlines);
- $i = 1;
- $this->_output = preg_replace('~^~em', '" " . str_pad($i++, $len, " ", STR_PAD_LEFT) . ": "', $this->_output);
+ $this->_output = preg_replace_callback('~^~m', array($this, 'replaceCallback'), $this->_output);
}
$this->_output .= HL_CONSOLE_DEFCOLOR . "\n";
}
+ function replaceCallback()
+ {
+ $nlines = substr_count($this->_output, "\n") + 1;
+ $len = strlen($nlines);
+ $i = 1;
+ return " " . str_pad($i++, $len, " ", STR_PAD_LEFT) . ": ";
+ }
+
/**
* Get generated output
*
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php
similarity index 94%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php
index dcf37ab..b9cb4c6 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php
+++ b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/Html.php
@@ -52,11 +52,15 @@ if (!defined('HL_NUMBERS_LI')) {
/**
* Use numbered list
*/
-define ('HL_NUMBERS_OL', 1);
+if (!defined('HL_NUMBERS_OL')) {
+ define('HL_NUMBERS_OL', 1);
+}
/**
* Use non-numbered list
*/
-define ('HL_NUMBERS_UL', 3);
+if (!defined('HL_NUMBERS_UL')) {
+ define('HL_NUMBERS_UL', 3);
+}
/**#@-*/
@@ -188,10 +192,12 @@ class Text_Highlighter_Renderer_Html extends Text_Highlighter_Renderer_Array
'inlinetags' => 'hl-inlinetags',
'mlcomment' => 'hl-mlcomment',
'number' => 'hl-number',
+ 'prepro' => 'hl-prepro',
'quotes' => 'hl-quotes',
'reserved' => 'hl-reserved',
'special' => 'hl-special',
'string' => 'hl-string',
+ 'types' => 'hl-types',
'url' => 'hl-url',
'var' => 'hl-var',
);
@@ -289,8 +295,6 @@ class Text_Highlighter_Renderer_Html extends Text_Highlighter_Renderer_Array
// get parent's output
parent::finalize();
$output = parent::getOutput();
- if(empty($output))
- return;
$html_output = '';
@@ -320,18 +324,28 @@ class Text_Highlighter_Renderer_Html extends Text_Highlighter_Renderer_Array
$span = $this->_getStyling($the_class);
$decorated_output = $this->_decorate($content, $key);
- //print " token = ".var_export($token, true)." -- span = " . htmlentities($span). "-- deco = ".$decorated_output." \n";
- $html_output .= sprintf($span, $decorated_output);
+
+
+ if ($numbers_li == true) {
+ // end span tags before end of li, and re-open on next line
+ $lastSpanTag = str_replace("%s", "", $span);
+ $span = sprintf($span, $decorated_output);
+ $span = str_replace("\n", "\n$lastSpanTag ", $span);
+ $html_output .= $span;
+ } else {
+ $html_output .= sprintf($span, $decorated_output);
+ }
+
+
}
// format lists
if (!empty($this->_numbers) && $numbers_li == true) {
- //$html_output = "".$html_output." ";
+
// additional whitespace for browsers that do not display
// empty list items correctly
- $this->_output = ' ' . str_replace("\n", " \n ", $html_output) . ' ';
-
+ $this->_output = ' ' . $html_output . ' ';
$start = '';
if ($this->_numbers == HL_NUMBERS_OL && intval($this->_numbers_start) > 0) {
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/HtmlTags.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/JSON.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/Renderer/XML.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SH.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/SH.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SH.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/SH.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SQL.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/SQL.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/SQL.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/SQL.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/VBSCRIPT.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/XML.php b/web/framework/vendors/TextHighlighter/Text/Highlighter/XML.php
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/Highlighter/XML.php
rename to web/framework/vendors/TextHighlighter/Text/Highlighter/XML.php
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/README b/web/framework/vendors/TextHighlighter/Text/README
similarity index 93%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/README
rename to web/framework/vendors/TextHighlighter/Text/README
index 09b898c..88f71ae 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/README
+++ b/web/framework/vendors/TextHighlighter/Text/README
@@ -1,455 +1,455 @@
-# $Id: README,v 1.2 2007/06/13 10:09:47 ssttoo Exp $
-
-Introduction
-============
-
-Text_Highlighter is a class for syntax highlighting. The main idea is to
-simplify creation of subclasses implementing syntax highlighting for
-particular language. Subclasses do not implement any new functioanality, they
-just provide syntax highlighting rules. The rules sources are in XML format.
-To create a highlighter for a language, there is no need to code a new class
-manually. Simply describe the rules in XML file and use Text_Highlighter_Generator
-to create a new class.
-
-
-This document does not contain a formal description of API - it is very
-simple, and I believe providing some examples of code is sufficient.
-
-
-Highlighter XML source
-======================
-
-Basics
-------
-
-Creating a new syntax highlighter begins with describing the highlighting
-rules. There are two basic elements: block and region. A block is just a
-portion of text matching a regular expression and highlighted with a single
-color. Keyword is an example of a block. A region is defined by two regular
-expressions: one for start of region, and another for the end. The main
-difference from a block is that a region can contain blocks and regions
-(including same-named regions). An example of a region is a group of
-statements enclosed in curly brackets (this is used in many languages, for
-example PHP and C). Also, characters matching start and end of a region may be
-highlighted with their own color, and region contents with another.
-
-Blocks and regions may be declared as contained. Contained blocks and regions
-can only appear inside regions. If a region or a block is not declared as
-contained, it can appear both on top level and inside regions. Block or region
-declared as not-contained can only appear on top level.
-
-For any region, a list of blocks and regions that can appear inside this
-region can be specified.
-
-In this document, the term "color group" is used. Chunks of text assigned to
-same color group will be highlighted with same color. Note that in versions
-prior 0.5.0 color goups were refered as CSS classes, but since 0.5.0 not only
-HTML output is supported, so "color group" is more appropriate term.
-
-Elements
---------
-
-The toplevel element is . Attribute lang is required and denotes
-the name of the language. Its value is used as a part of generated class name,
-and must only contain letters, digits and underscores. Optional attribute
-case, when given value yes, makes the language case sensitive (default is case
-insensitive). Allowed subelements are:
-
- * : Information about the authors of the file.
- : Information about a single author of the file. (May be used
- multiple times, one per author.)
- - name="...": Author's name. Required.
- - email="...": Author's email address. Optional.
-
- * : Default color group.
- - innerGroup="...": color group name. Required.
-
- * : Region definition
- - name="...": Region name. Required.
- - innerGroup="...": Default color group of region contents. Required.
- - delimGroup="...": color group of start and end of region. Optional,
- defaults to value of innerGroup attribute.
- - start="...", end="...": Regular expression matching start and end
- of region. Required. Regular expression delimiters are optional, but
- if you need to specify delimiter, use /. The only case when the
- delimiters are needed, is specifying regular expression modifiers,
- such as m or U. Examples: \/\* or /$/m.
- - contained="yes": Marks region as contained.
- - never-contained="yes": Marks region as not-contained.
- - : Elements allowed inside this region.
- - all="yes" Region can contain any other region or block
- (except not-contained). May be used multiple times.
- - Do not allow certain regions or blocks.
- - region="..." Name of region not allowed within
- current region.
- - block="..." Name of block not allowed within
- current region.
- - region="..." Name of region allowed within current region.
- - block="..." Name of block allowed within current region.
- - Only allow this region within certain regions. May be
- used multiple times.
- - block="..." Name of parent region
-
- * : Block definition
- - name="...": Block name. Required.
- - innerGroup="...": color group of block contents. Optional. If not
- specified, color group of parent region or default color group will be
- used. One would only want to omit this attribute if there are
- keyword groups (see below) inherited from this block, and no special
- highlighting should apply when the block does not match the keyword.
- - match="..." Regular expression matching the block. Required.
- Regular expression delimiters are optional, but if you need to
- specify delimiter, use /. The only case when the delimiters are
- needed, is specifying regular expression modifiers, such as m or U.
- Examples: #|\/\/ or /$/m.
- - contained="yes": Marks block as contained.
- - never-contained="yes": Marks block as not-contained.
- - Only allow this block within certain regions. May be used
- multiple times.
- - block="..." Name of parent region
- - multiline="yes": Marks block as multi-line. By default, whole
- blocks are assumed to reside in a single line. This make the things
- faster. If you need to declare a multi-line block, use this
- attribute.
- - : Assigns another color group to a part of the block that
- matched a subpattern.
- - index="n": Subpattern index. Required.
- - innerGroup="...": color group name. Required.
-
- This is an example from CSS highlighter: the measure is matched as
- a whole, but the measurement units are highlighted with different
- color.
-
-
-
-
-
-
- * : Keyword group definition. Keyword groups are useful when you
- want to highlight some words that match a condition for a block with a
- different color. Keywords are defined with literal match, not regular
- expressions. For example, you have a block named identifier matching a
- general identifier, and want to highlight reserved words (which match
- this block as well) with different color. You inherit a keyword group
- "reserved" from "identifier" block.
- - name="...": Keyword group. Required.
- - ifdef="...", ifndef="..." : Conditional declaration. See
- "Conditions" below.
- - inherits="...": Inherited block name. Required.
- - innerGroup="...": color group of keyword group. Required.
- - case="yes|no": Overrides case-sensitivity of the language.
- Optional, defaults to global value.
- - : Single keyword definition.
- - match="..." The keyword. Note: this is not a regular
- expression, but literal match (possibly case insensitive).
-
-Note that for BC reasons element partClass is alias for partGroup, and
-attributes innerClass and delimClass are aliases of innerGroup and
-delimGroup, respectively.
-
-
-Conditions
-----------
-
-Conditional declarations allow enabling or disabling certain highlighting
-rules at runtime. For example, Java highlighter has a very big list of
-keywords matching Java standard classes. Finding a match in this list can take
-much time. For that reason, corresponding keyword group is declared with
-"ifdef" attribute :
-
-
-
-
-
- ...
- ...
-
-
-
-
-
-This keyword group will be only enabled when "java.builtins" is passed as an
-element of "defines" option:
-
- $options = array(
- 'defines' => array(
- 'java.builtins',
- ),
- 'numbers' => HL_NUMBERS_TABLE,
- );
- $highlighter =& Text_Highlighter::factory('java', $options);
-
-"ifndef" attribute has reverse meaning.
-
-Currently, "ifdef" and "ifndef" attributes are only supported for
-tag.
-
-
-
-Class generation
-================
-
-Creating XML description of highlighting rules is the most complicated part of
-the process. To generate the class, you need just few lines of code:
-
- generate();
- $generator->saveCode('PHP.php');
- ?>
-
-
-
-Command-line class generation tool
-==================================
-
-Example from previous section looks pretty simple, but it does not handle any
-errors which may occur during parsing of XML source. The package provides a
-command-line script to make generation of classes even more simple, and takes
-care of possible errors. It is called generate (on Unix/Linux) or generate.bat
-(on Windows). This script is able to process multiple files in one run, and
-also to process XML from standard input and write generated code to standard
-output.
-
- Usage:
- generate options
-
- Options:
- -x filename, --xml=filename
- source XML file. Multiple input files can be specified, in which
- case each -x option must be followed by -p unless -d is specified
- Defaults to stdin
- -p filename, --php=filename
- destination PHP file. Defaults to stdout. If specied multiple times,
- each -p must follow -x
- -d dirname, --dir=dirname
- Default destination directory. File names will be taken from XML input
- ("lang" attribute of tag)
- -h, --help
- This help
-
-Examples
-
- Read from php.xml, write to PHP.php
-
- generate -x php.xml -p PHP.php
-
- Read from php.xml, write to standard output
-
- generate -x php.xml
-
- Read from php.xml, write to PHP.php, read from xml.xml, write to XML.php
-
- generate -x php.xml -p PHP.php -x xml.xml -p XML.php
-
- Read from php.xml, write to /some/dir/PHP.php, read from xml.xml, write to
- /some/dir/XML.php (assuming that xml.xml contains , and
- php.xml contains )
-
- generate -x php.xml -x xml.xml -d /some/dir/
-
-
-
-Renderers
-=========
-
-Introduction
-------------
-
-Text_Highlighter supports renderes. Using renderers, you can get output in
-different formats. Two renderers are included in the package:
-
- - HTML renderer. Generates HTML output. A style sheet should be linked to
- the document to display colored text
-
- - Console renderer. Can be used to output highlighted text to
- color-capable terminals, either directly or trough less -r
-
-
-Renderers API
--------------
-
-Renderers are subclasses of Text_Highlighter_Renderer. Renderer should
-override at least two methods - acceptToken and getOutput. Overriding other
-methods is optional, depending on the nature of renderer's output and details
-of implementation.
-
- string reset()
- resets renderer state. This method is called every time before a new
- source file is highlighted.
-
- string preprocess(string $code)
- preprocesses code. Can be used, for example, to normalize whitespace
- before highlighting. Returns preprocessed string.
-
- void acceptToken(string $group, string $content)
- the core method of the renderer. Highlighter passes chunks of text to
- this method in $content, and color group in $group
-
- void finalize()
- signals the renderer that no more tokens are available.
-
- mixed getOutput()
- returns generated output.
-
-
-Setting renderer options
---------------------------------
-
-Renderers accept an optional argument to their constructor - options array.
-Elements of this array are renderer-specific.
-
-HTML renderer
--------------
-
-HTML renderer produces HTML output with optional line numbering. The renderer
-itself does not provide information about actual colors of highlighted text.
-Instead, is used, where XXX is replaced with color group
-name (hl-var, hl-string, etc.). It is up to you to create a CSS stylesheet.
-If 'use_language' option with value evaluating to true was passed, class names
-will be formatted as "LANG-hl-XXX", where LANG is language name as defined in
-highlighter XML source ("lang" attribute of tag) in lower case.
-
-There are 3 special CSS classes:
-
- hl-main - this class applies to whole output or right table column,
- depending on 'numbers' option
- hl-gutter - applies to left column in table
- hl-table - applies to whole table
-
-HTML renderer accepts following options (each being optional):
-
- * numbers - line numbering style.
- 0 - no numbering (default)
- HL_NUMBERS_LI - use for line numbering
- HL_NUMBERS_TABLE - create a 2-column table, with line numbers in left
- column and highlighted text in right column
-
- * tabsize - tabulation size. Defaults to 4
-
- Example:
-
- require_once 'Text/Highlighter/Renderer/Html.php';
- $options = array(
- 'numbers' => HL_NUMBERS_LI,
- 'tabsize' => 8,
- );
- $renderer =& new Text_Highlighter_Renderer_HTML($options);
-
-Console renderer
-----------------
-
-Console renderer produces output for displaying on a color-capable terminal,
-either directly or through less -r, using ANSI escape sequences. By default,
-this renderer only highlights most common color groups. Additional colors
-can be specified using 'colors' option. This renderer also accepts 'numbers'
-option - a boolean value, and 'tabsize' option.
-
- Example :
-
- require_once 'Text/Highlighter/Renderer/Console.php';
- $colors = array(
- 'prepro' => "\033[35m",
- 'types' => "\033[32m",
- );
- $options = array(
- 'numbers' => true,
- 'tabsize' => 8,
- 'colors' => $colors,
- );
- $renderer =& new Text_Highlighter_Renderer_Console($options);
-
-
-ANSI color escape sequences have the following format:
-
- ESC[#;#;....;#m
-
-where ESC is character with ASCII code 27 (033 octal, 0x1B hexadecimal). # is
-one of the following:
-
- 0 for normal display
- 1 for bold on
- 4 underline (mono only)
- 5 blink on
- 7 reverse video on
- 8 nondisplayed (invisible)
- 30 black foreground
- 31 red foreground
- 32 green foreground
- 33 yellow foreground
- 34 blue foreground
- 35 magenta foreground
- 36 cyan foreground
- 37 white foreground
- 40 black background
- 41 red background
- 42 green background
- 43 yellow background
- 44 blue background
- 45 magenta background
- 46 cyan background
- 47 white background
-
-
-How to use Text_Highlighter class
-=================================
-
-Creating a highlighter object
------------------------------
-
-To create a highlighter for a certain language, use Text_Highlighter::factory()
-static method:
-
- require_once 'Text/Highlighter.php';
- $hl =& Text_Highlighter::factory('php');
-
-
-Setting a renderer
-------------------
-
-Actual output is produced by a renderer.
-
- require_once 'Text/Highlighter.php';
- require_once 'Text/Highlighter/Renderer/Html.php';
- $options = array(
- 'numbers' => HL_NUMBERS_LI,
- 'tabsize' => 8,
- );
- $renderer =& new Text_Highlighter_Renderer_HTML($options);
- $hl =& Text_Highlighter::factory('php');
- $hl->setRenderer($renderer);
-
-Note that for BC reasons, it is possible to use highlighter without setting a
-renderer. If no renderer is set, HTML renderer will be used by default. In
-this case, you should pass options as second parameter to factory method. The
-following example works exactly as previous one:
-
- require_once 'Text/Highlighter.php';
- $options = array(
- 'numbers' => HL_NUMBERS_LI,
- 'tabsize' => 8,
- );
- $hl =& Text_Highlighter::factory('php', $options);
-
-
-Getting output
---------------
-
-And finally, do the highlighting and get the output:
-
- require_once 'Text/Highlighter.php';
- require_once 'Text/Highlighter/Renderer/Html.php';
- $options = array(
- 'numbers' => HL_NUMBERS_LI,
- 'tabsize' => 8,
- );
- $renderer =& new Text_Highlighter_Renderer_HTML($options);
- $hl =& Text_Highlighter::factory('php');
- $hl->setRenderer($renderer);
- $html = $hl->highlight(file_get_contents('example.php'));
-
-# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */
-
+# $Id$
+
+Introduction
+============
+
+Text_Highlighter is a class for syntax highlighting. The main idea is to
+simplify creation of subclasses implementing syntax highlighting for
+particular language. Subclasses do not implement any new functioanality, they
+just provide syntax highlighting rules. The rules sources are in XML format.
+To create a highlighter for a language, there is no need to code a new class
+manually. Simply describe the rules in XML file and use Text_Highlighter_Generator
+to create a new class.
+
+
+This document does not contain a formal description of API - it is very
+simple, and I believe providing some examples of code is sufficient.
+
+
+Highlighter XML source
+======================
+
+Basics
+------
+
+Creating a new syntax highlighter begins with describing the highlighting
+rules. There are two basic elements: block and region. A block is just a
+portion of text matching a regular expression and highlighted with a single
+color. Keyword is an example of a block. A region is defined by two regular
+expressions: one for start of region, and another for the end. The main
+difference from a block is that a region can contain blocks and regions
+(including same-named regions). An example of a region is a group of
+statements enclosed in curly brackets (this is used in many languages, for
+example PHP and C). Also, characters matching start and end of a region may be
+highlighted with their own color, and region contents with another.
+
+Blocks and regions may be declared as contained. Contained blocks and regions
+can only appear inside regions. If a region or a block is not declared as
+contained, it can appear both on top level and inside regions. Block or region
+declared as not-contained can only appear on top level.
+
+For any region, a list of blocks and regions that can appear inside this
+region can be specified.
+
+In this document, the term "color group" is used. Chunks of text assigned to
+same color group will be highlighted with same color. Note that in versions
+prior 0.5.0 color goups were refered as CSS classes, but since 0.5.0 not only
+HTML output is supported, so "color group" is more appropriate term.
+
+Elements
+--------
+
+The toplevel element is . Attribute lang is required and denotes
+the name of the language. Its value is used as a part of generated class name,
+and must only contain letters, digits and underscores. Optional attribute
+case, when given value yes, makes the language case sensitive (default is case
+insensitive). Allowed subelements are:
+
+ * : Information about the authors of the file.
+ : Information about a single author of the file. (May be used
+ multiple times, one per author.)
+ - name="...": Author's name. Required.
+ - email="...": Author's email address. Optional.
+
+ * : Default color group.
+ - innerGroup="...": color group name. Required.
+
+ * : Region definition
+ - name="...": Region name. Required.
+ - innerGroup="...": Default color group of region contents. Required.
+ - delimGroup="...": color group of start and end of region. Optional,
+ defaults to value of innerGroup attribute.
+ - start="...", end="...": Regular expression matching start and end
+ of region. Required. Regular expression delimiters are optional, but
+ if you need to specify delimiter, use /. The only case when the
+ delimiters are needed, is specifying regular expression modifiers,
+ such as m or U. Examples: \/\* or /$/m.
+ - contained="yes": Marks region as contained.
+ - never-contained="yes": Marks region as not-contained.
+ - : Elements allowed inside this region.
+ - all="yes" Region can contain any other region or block
+ (except not-contained). May be used multiple times.
+ - Do not allow certain regions or blocks.
+ - region="..." Name of region not allowed within
+ current region.
+ - block="..." Name of block not allowed within
+ current region.
+ - region="..." Name of region allowed within current region.
+ - block="..." Name of block allowed within current region.
+ - Only allow this region within certain regions. May be
+ used multiple times.
+ - block="..." Name of parent region
+
+ * : Block definition
+ - name="...": Block name. Required.
+ - innerGroup="...": color group of block contents. Optional. If not
+ specified, color group of parent region or default color group will be
+ used. One would only want to omit this attribute if there are
+ keyword groups (see below) inherited from this block, and no special
+ highlighting should apply when the block does not match the keyword.
+ - match="..." Regular expression matching the block. Required.
+ Regular expression delimiters are optional, but if you need to
+ specify delimiter, use /. The only case when the delimiters are
+ needed, is specifying regular expression modifiers, such as m or U.
+ Examples: #|\/\/ or /$/m.
+ - contained="yes": Marks block as contained.
+ - never-contained="yes": Marks block as not-contained.
+ - Only allow this block within certain regions. May be used
+ multiple times.
+ - block="..." Name of parent region
+ - multiline="yes": Marks block as multi-line. By default, whole
+ blocks are assumed to reside in a single line. This make the things
+ faster. If you need to declare a multi-line block, use this
+ attribute.
+ - : Assigns another color group to a part of the block that
+ matched a subpattern.
+ - index="n": Subpattern index. Required.
+ - innerGroup="...": color group name. Required.
+
+ This is an example from CSS highlighter: the measure is matched as
+ a whole, but the measurement units are highlighted with different
+ color.
+
+
+
+
+
+
+ * : Keyword group definition. Keyword groups are useful when you
+ want to highlight some words that match a condition for a block with a
+ different color. Keywords are defined with literal match, not regular
+ expressions. For example, you have a block named identifier matching a
+ general identifier, and want to highlight reserved words (which match
+ this block as well) with different color. You inherit a keyword group
+ "reserved" from "identifier" block.
+ - name="...": Keyword group. Required.
+ - ifdef="...", ifndef="..." : Conditional declaration. See
+ "Conditions" below.
+ - inherits="...": Inherited block name. Required.
+ - innerGroup="...": color group of keyword group. Required.
+ - case="yes|no": Overrides case-sensitivity of the language.
+ Optional, defaults to global value.
+ - : Single keyword definition.
+ - match="..." The keyword. Note: this is not a regular
+ expression, but literal match (possibly case insensitive).
+
+Note that for BC reasons element partClass is alias for partGroup, and
+attributes innerClass and delimClass are aliases of innerGroup and
+delimGroup, respectively.
+
+
+Conditions
+----------
+
+Conditional declarations allow enabling or disabling certain highlighting
+rules at runtime. For example, Java highlighter has a very big list of
+keywords matching Java standard classes. Finding a match in this list can take
+much time. For that reason, corresponding keyword group is declared with
+"ifdef" attribute :
+
+
+
+
+
+ ...
+ ...
+
+
+
+
+
+This keyword group will be only enabled when "java.builtins" is passed as an
+element of "defines" option:
+
+ $options = array(
+ 'defines' => array(
+ 'java.builtins',
+ ),
+ 'numbers' => HL_NUMBERS_TABLE,
+ );
+ $highlighter = Text_Highlighter::factory('java', $options);
+
+"ifndef" attribute has reverse meaning.
+
+Currently, "ifdef" and "ifndef" attributes are only supported for
+tag.
+
+
+
+Class generation
+================
+
+Creating XML description of highlighting rules is the most complicated part of
+the process. To generate the class, you need just few lines of code:
+
+ generate();
+ $generator->saveCode('PHP.php');
+ ?>
+
+
+
+Command-line class generation tool
+==================================
+
+Example from previous section looks pretty simple, but it does not handle any
+errors which may occur during parsing of XML source. The package provides a
+command-line script to make generation of classes even more simple, and takes
+care of possible errors. It is called generate (on Unix/Linux) or generate.bat
+(on Windows). This script is able to process multiple files in one run, and
+also to process XML from standard input and write generated code to standard
+output.
+
+ Usage:
+ generate options
+
+ Options:
+ -x filename, --xml=filename
+ source XML file. Multiple input files can be specified, in which
+ case each -x option must be followed by -p unless -d is specified
+ Defaults to stdin
+ -p filename, --php=filename
+ destination PHP file. Defaults to stdout. If specied multiple times,
+ each -p must follow -x
+ -d dirname, --dir=dirname
+ Default destination directory. File names will be taken from XML input
+ ("lang" attribute of tag)
+ -h, --help
+ This help
+
+Examples
+
+ Read from php.xml, write to PHP.php
+
+ generate -x php.xml -p PHP.php
+
+ Read from php.xml, write to standard output
+
+ generate -x php.xml
+
+ Read from php.xml, write to PHP.php, read from xml.xml, write to XML.php
+
+ generate -x php.xml -p PHP.php -x xml.xml -p XML.php
+
+ Read from php.xml, write to /some/dir/PHP.php, read from xml.xml, write to
+ /some/dir/XML.php (assuming that xml.xml contains , and
+ php.xml contains )
+
+ generate -x php.xml -x xml.xml -d /some/dir/
+
+
+
+Renderers
+=========
+
+Introduction
+------------
+
+Text_Highlighter supports renderes. Using renderers, you can get output in
+different formats. Two renderers are included in the package:
+
+ - HTML renderer. Generates HTML output. A style sheet should be linked to
+ the document to display colored text
+
+ - Console renderer. Can be used to output highlighted text to
+ color-capable terminals, either directly or trough less -r
+
+
+Renderers API
+-------------
+
+Renderers are subclasses of Text_Highlighter_Renderer. Renderer should
+override at least two methods - acceptToken and getOutput. Overriding other
+methods is optional, depending on the nature of renderer's output and details
+of implementation.
+
+ string reset()
+ resets renderer state. This method is called every time before a new
+ source file is highlighted.
+
+ string preprocess(string $code)
+ preprocesses code. Can be used, for example, to normalize whitespace
+ before highlighting. Returns preprocessed string.
+
+ void acceptToken(string $group, string $content)
+ the core method of the renderer. Highlighter passes chunks of text to
+ this method in $content, and color group in $group
+
+ void finalize()
+ signals the renderer that no more tokens are available.
+
+ mixed getOutput()
+ returns generated output.
+
+
+Setting renderer options
+--------------------------------
+
+Renderers accept an optional argument to their constructor - options array.
+Elements of this array are renderer-specific.
+
+HTML renderer
+-------------
+
+HTML renderer produces HTML output with optional line numbering. The renderer
+itself does not provide information about actual colors of highlighted text.
+Instead, is used, where XXX is replaced with color group
+name (hl-var, hl-string, etc.). It is up to you to create a CSS stylesheet.
+If 'use_language' option with value evaluating to true was passed, class names
+will be formatted as "LANG-hl-XXX", where LANG is language name as defined in
+highlighter XML source ("lang" attribute of tag) in lower case.
+
+There are 3 special CSS classes:
+
+ hl-main - this class applies to whole output or right table column,
+ depending on 'numbers' option
+ hl-gutter - applies to left column in table
+ hl-table - applies to whole table
+
+HTML renderer accepts following options (each being optional):
+
+ * numbers - line numbering style.
+ 0 - no numbering (default)
+ HL_NUMBERS_LI - use for line numbering
+ HL_NUMBERS_TABLE - create a 2-column table, with line numbers in left
+ column and highlighted text in right column
+
+ * tabsize - tabulation size. Defaults to 4
+
+ Example:
+
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+
+Console renderer
+----------------
+
+Console renderer produces output for displaying on a color-capable terminal,
+either directly or through less -r, using ANSI escape sequences. By default,
+this renderer only highlights most common color groups. Additional colors
+can be specified using 'colors' option. This renderer also accepts 'numbers'
+option - a boolean value, and 'tabsize' option.
+
+ Example :
+
+ require_once 'Text/Highlighter/Renderer/Console.php';
+ $colors = array(
+ 'prepro' => "\033[35m",
+ 'types' => "\033[32m",
+ );
+ $options = array(
+ 'numbers' => true,
+ 'tabsize' => 8,
+ 'colors' => $colors,
+ );
+ $renderer = new Text_Highlighter_Renderer_Console($options);
+
+
+ANSI color escape sequences have the following format:
+
+ ESC[#;#;....;#m
+
+where ESC is character with ASCII code 27 (033 octal, 0x1B hexadecimal). # is
+one of the following:
+
+ 0 for normal display
+ 1 for bold on
+ 4 underline (mono only)
+ 5 blink on
+ 7 reverse video on
+ 8 nondisplayed (invisible)
+ 30 black foreground
+ 31 red foreground
+ 32 green foreground
+ 33 yellow foreground
+ 34 blue foreground
+ 35 magenta foreground
+ 36 cyan foreground
+ 37 white foreground
+ 40 black background
+ 41 red background
+ 42 green background
+ 43 yellow background
+ 44 blue background
+ 45 magenta background
+ 46 cyan background
+ 47 white background
+
+
+How to use Text_Highlighter class
+=================================
+
+Creating a highlighter object
+-----------------------------
+
+To create a highlighter for a certain language, use Text_Highlighter::factory()
+static method:
+
+ require_once 'Text/Highlighter.php';
+ $hl = Text_Highlighter::factory('php');
+
+
+Setting a renderer
+------------------
+
+Actual output is produced by a renderer.
+
+ require_once 'Text/Highlighter.php';
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+ $hl = Text_Highlighter::factory('php');
+ $hl->setRenderer($renderer);
+
+Note that for BC reasons, it is possible to use highlighter without setting a
+renderer. If no renderer is set, HTML renderer will be used by default. In
+this case, you should pass options as second parameter to factory method. The
+following example works exactly as previous one:
+
+ require_once 'Text/Highlighter.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $hl = Text_Highlighter::factory('php', $options);
+
+
+Getting output
+--------------
+
+And finally, do the highlighting and get the output:
+
+ require_once 'Text/Highlighter.php';
+ require_once 'Text/Highlighter/Renderer/Html.php';
+ $options = array(
+ 'numbers' => HL_NUMBERS_LI,
+ 'tabsize' => 8,
+ );
+ $renderer = new Text_Highlighter_Renderer_HTML($options);
+ $hl = Text_Highlighter::factory('php');
+ $hl->setRenderer($renderer);
+ $html = $hl->highlight(file_get_contents('example.php'));
+
+# vim: set autoindent tabstop=4 shiftwidth=4 softtabstop=4 tw=78: */
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/TODO b/web/framework/vendors/TextHighlighter/Text/TODO
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/TODO
rename to web/framework/vendors/TextHighlighter/Text/TODO
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/abap.xml b/web/framework/vendors/TextHighlighter/Text/abap.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/abap.xml
rename to web/framework/vendors/TextHighlighter/Text/abap.xml
diff --git a/web/framework/vendors/TextHighlighter/Text/avrc.xml b/web/framework/vendors/TextHighlighter/Text/avrc.xml
new file mode 100644
index 0000000..dec571e
--- /dev/null
+++ b/web/framework/vendors/TextHighlighter/Text/avrc.xml
@@ -0,0 +1,316 @@
+
+
+
+
+
+
+
+
+
+
+ C/C++ highlighter specific to Atmel AVR microcontrollers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml b/web/framework/vendors/TextHighlighter/Text/cpp.xml
similarity index 93%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml
rename to web/framework/vendors/TextHighlighter/Text/cpp.xml
index 81f0328..2cbaa93 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/cpp.xml
+++ b/web/framework/vendors/TextHighlighter/Text/cpp.xml
@@ -1,201 +1,201 @@
-
-
-
-
-
-
-
-
-
-
-
-Thanks to Aaron Kalin for initial
-implementation of this highlighter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+Thanks to Aaron Kalin for initial
+implementation of this highlighter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/css.xml b/web/framework/vendors/TextHighlighter/Text/css.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/css.xml
rename to web/framework/vendors/TextHighlighter/Text/css.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/diff.xml b/web/framework/vendors/TextHighlighter/Text/diff.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/diff.xml
rename to web/framework/vendors/TextHighlighter/Text/diff.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/dtd.xml b/web/framework/vendors/TextHighlighter/Text/dtd.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/dtd.xml
rename to web/framework/vendors/TextHighlighter/Text/dtd.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate b/web/framework/vendors/TextHighlighter/Text/generate
similarity index 93%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/generate
rename to web/framework/vendors/TextHighlighter/Text/generate
index 41048d9..4e22e82 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate
+++ b/web/framework/vendors/TextHighlighter/Text/generate
@@ -1,171 +1,171 @@
-#!@php_bin@
-
- * @copyright 2004 Andrey Demenev
- * @license http://www.php.net/license/3_0.txt PHP License
- * @version CVS: $Id: generate,v 1.1 2007/06/03 02:35:28 ssttoo Exp $
- * @link http://pear.php.net/package/Text_Highlighter
- */
-
-require_once 'Text/Highlighter/Generator.php';
-require_once 'Console/Getopt.php';
-
-$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help'));
-
-if (PEAR::isError($options)) {
- $message = str_replace('Console_Getopt: ','',$options->message);
- usage($message);
-}
-
-$source = array();
-$dest = array();
-$dir = '';
-
-$expectp = false;
-$expectx = false;
-$unexpectedx = false;
-$unexpectedp = false;
-$si = $di = 0;
-
-foreach ($options[0] as $option) {
- switch ($option[0]) {
- case 'x':
- case '--xml':
- $source[$si] = $option[1];
- if ($si) {
- $di++;
- }
- $si++;
- if ($expectp) {
- $unexpectedx = true;
- }
- $expectp = true;
- $expectx = false;
- break;
-
- case 'p':
- case '--php':
- if ($expectx) {
- $unexpectedp = true;
- }
- $dest[$di] = $option[1];
- $expectp = false;
- $expectx = true;
- break;
-
- case 'd':
- case '--dir':
- $dir = $option[1];
- break;
-
- case 'h':
- case '--help':
- usage();
- break;
- }
-}
-
-
-if ($unexpectedx && !$dir) {
- usage('Unexpected -x or --xml', STDERR);
-}
-
-if ($unexpectedp) {
- usage('Unexpected -p or --php', STDERR);
-}
-
-$nsource = count($source);
-$ndest = count($dest);
-
-if (!$nsource && !$ndest) {
- $source[]='php://stdin';
- if (!$dir) {
- $dest[]='php://stdout';
- } else {
- $dest[] = null;
- }
-} elseif ($expectp && !$dir && $nsource > 1) {
- usage('-x or --xml without following -p or --php', STDERR);
-} elseif ($nsource == 1 && !$ndest && !$dir) {
- $dest[]='php://stdout';
-}
-
-if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
- $dir .= DIRECTORY_SEPARATOR;
-}
-
-
-foreach ($source as $i => $xmlfile)
-{
- $gen =& new Text_Highlighter_Generator;
- $gen->setInputFile($xmlfile);
- if ($gen->hasErrors()) {
- break;
- }
- $gen->generate();
- if ($gen->hasErrors()) {
- break;
- }
- if (isset($dest[$i])) {
- $phpfile = $dest[$i];
- } else {
- $phpfile = $dir . $gen->language . '.php';
- }
- $gen->saveCode($phpfile);
- if ($gen->hasErrors()) {
- break;
- }
-}
-if ($gen->hasErrors()) {
- $errors = $gen->getErrors();
- foreach ($errors as $error) {
- fwrite (STDERR, $error . "\n");
- }
- exit(1);
-}
-
-function usage($message='', $file=STDOUT)
-{
- $code = 0;
- if ($message) {
- $message .= "\n\n";
- $code = 1;
- }
- $message .= << tag)
- -h, --help
- This help
-MSG;
- fwrite ($file, $message);
- exit($code);
-}
-?>
-
+#!@php_bin@
+
+ * @copyright 2004 Andrey Demenev
+ * @license http://www.php.net/license/3_0.txt PHP License
+ * @version CVS: $Id$
+ * @link http://pear.php.net/package/Text_Highlighter
+ */
+
+require_once 'Text/Highlighter/Generator.php';
+require_once 'Console/Getopt.php';
+
+$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help'));
+
+if (PEAR::isError($options)) {
+ $message = str_replace('Console_Getopt: ','',$options->message);
+ usage($message);
+}
+
+$source = array();
+$dest = array();
+$dir = '';
+
+$expectp = false;
+$expectx = false;
+$unexpectedx = false;
+$unexpectedp = false;
+$si = $di = 0;
+
+foreach ($options[0] as $option) {
+ switch ($option[0]) {
+ case 'x':
+ case '--xml':
+ $source[$si] = $option[1];
+ if ($si) {
+ $di++;
+ }
+ $si++;
+ if ($expectp) {
+ $unexpectedx = true;
+ }
+ $expectp = true;
+ $expectx = false;
+ break;
+
+ case 'p':
+ case '--php':
+ if ($expectx) {
+ $unexpectedp = true;
+ }
+ $dest[$di] = $option[1];
+ $expectp = false;
+ $expectx = true;
+ break;
+
+ case 'd':
+ case '--dir':
+ $dir = $option[1];
+ break;
+
+ case 'h':
+ case '--help':
+ usage();
+ break;
+ }
+}
+
+
+if ($unexpectedx && !$dir) {
+ usage('Unexpected -x or --xml', STDERR);
+}
+
+if ($unexpectedp) {
+ usage('Unexpected -p or --php', STDERR);
+}
+
+$nsource = count($source);
+$ndest = count($dest);
+
+if (!$nsource && !$ndest) {
+ $source[]='php://stdin';
+ if (!$dir) {
+ $dest[]='php://stdout';
+ } else {
+ $dest[] = null;
+ }
+} elseif ($expectp && !$dir && $nsource > 1) {
+ usage('-x or --xml without following -p or --php', STDERR);
+} elseif ($nsource == 1 && !$ndest && !$dir) {
+ $dest[]='php://stdout';
+}
+
+if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
+ $dir .= DIRECTORY_SEPARATOR;
+}
+
+
+foreach ($source as $i => $xmlfile)
+{
+ $gen = new Text_Highlighter_Generator;
+ $gen->setInputFile($xmlfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+ $gen->generate();
+ if ($gen->hasErrors()) {
+ break;
+ }
+ if (isset($dest[$i])) {
+ $phpfile = $dest[$i];
+ } else {
+ $phpfile = $dir . $gen->language . '.php';
+ }
+ $gen->saveCode($phpfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+}
+if ($gen->hasErrors()) {
+ $errors = $gen->getErrors();
+ foreach ($errors as $error) {
+ fwrite (STDERR, $error . "\n");
+ }
+ exit(1);
+}
+
+function usage($message='', $file=STDOUT)
+{
+ $code = 0;
+ if ($message) {
+ $message .= "\n\n";
+ $code = 1;
+ }
+ $message .= << tag)
+ -h, --help
+ This help
+MSG;
+ fwrite ($file, $message);
+ exit($code);
+}
+?>
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat b/web/framework/vendors/TextHighlighter/Text/generate.bat
similarity index 93%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat
rename to web/framework/vendors/TextHighlighter/Text/generate.bat
index 3170190..3960486 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/generate.bat
+++ b/web/framework/vendors/TextHighlighter/Text/generate.bat
@@ -1,188 +1,188 @@
-@echo off
-rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
-
-rem Console highlighter class generator
-
-rem PHP versions 4 and 5
-
-rem LICENSE: This source file is subject to version 3.0 of the PHP license
-rem that is available through the world-wide-web at the following URI:
-rem http://www.php.net/license/3_0.txt. If you did not receive a copy of
-rem the PHP License and are unable to obtain it through the web, please
-rem send a note to license@php.net so we can mail you a copy immediately.
-
-rem @category Text
-rem @package Text_Highlighter
-rem @author Andrey Demenev
-rem @copyright 2004 Andrey Demenev
-rem @license http://www.php.net/license/3_0.txt PHP License
-rem @version CVS: $Id: generate.bat,v 1.1 2007/06/03 02:35:28 ssttoo Exp $
-rem @link http://pear.php.net/package/Text_Highlighter
-
-set "MHL_PARAMS="
-:doshift
-set "MHL_PARAMS=%MHL_PARAMS% %1"
-shift
-if -%1- == -- GOTO noshift
-GOTO doshift
-:noshift
-@php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS%
-
-GOTO finish
-message);
- usage($message);
-}
-
-$source = array();
-$dest = array();
-$dir = '';
-
-$expectp = false;
-$expectx = false;
-$unexpectedx = false;
-$unexpectedp = false;
-$si = $di = 0;
-
-foreach ($options[0] as $option) {
- switch ($option[0]) {
- case 'x':
- case '--xml':
- $source[$si] = $option[1];
- if ($si) {
- $di++;
- }
- $si++;
- if ($expectp) {
- $unexpectedx = true;
- }
- $expectp = true;
- $expectx = false;
- break;
-
- case 'p':
- case '--php':
- if ($expectx) {
- $unexpectedp = true;
- }
- $dest[$di] = $option[1];
- $expectp = false;
- $expectx = true;
- break;
-
- case 'd':
- case '--dir':
- $dir = $option[1];
- break;
-
- case 'h':
- case '--help':
- usage();
- break;
- }
-}
-
-
-if ($unexpectedx && !$dir) {
- usage('Unexpected -x or --xml', STDERR);
-}
-
-if ($unexpectedp) {
- usage('Unexpected -p or --php', STDERR);
-}
-
-$nsource = count($source);
-$ndest = count($dest);
-
-if (!$nsource && !$ndest) {
- $source[]='php://stdin';
- if (!$dir) {
- $dest[]='php://stdout';
- } else {
- $dest[] = null;
- }
-} elseif ($expectp && !$dir && $nsource > 1) {
- usage('-x or --xml without following -p or --php', STDERR);
-} elseif ($nsource == 1 && !$ndest && !$dir) {
- $dest[]='php://stdout';
-}
-
-if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
- $dir .= DIRECTORY_SEPARATOR;
-}
-
-
-foreach ($source as $i => $xmlfile)
-{
- $gen =& new Text_Highlighter_Generator;
- $gen->setInputFile($xmlfile);
- if ($gen->hasErrors()) {
- break;
- }
- $gen->generate();
- if ($gen->hasErrors()) {
- break;
- }
- if (isset($dest[$i])) {
- $phpfile = $dest[$i];
- } else {
- $phpfile = $dir . $gen->language . '.php';
- }
- $gen->saveCode($phpfile);
- if ($gen->hasErrors()) {
- break;
- }
-}
-if ($gen->hasErrors()) {
- $errors = $gen->getErrors();
- foreach ($errors as $error) {
- fwrite (STDERR, $error . "\n");
- }
- exit(1);
-}
-
-exit(0);
-
-function usage($message='', $file=STDOUT)
-{
- $code = 0;
- if ($message) {
- $message .= "\n\n";
- $code = 1;
- }
- $message .= << tag)
- -h, --help
- This help
-MSG;
- fwrite ($file, $message);
- exit($code);
-}
-?>
-:finish
+@echo off
+rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+
+rem Console highlighter class generator
+
+rem PHP versions 4 and 5
+
+rem LICENSE: This source file is subject to version 3.0 of the PHP license
+rem that is available through the world-wide-web at the following URI:
+rem http://www.php.net/license/3_0.txt. If you did not receive a copy of
+rem the PHP License and are unable to obtain it through the web, please
+rem send a note to license@php.net so we can mail you a copy immediately.
+
+rem @category Text
+rem @package Text_Highlighter
+rem @author Andrey Demenev
+rem @copyright 2004 Andrey Demenev
+rem @license http://www.php.net/license/3_0.txt PHP License
+rem @version CVS: $Id: generate.bat,v 1.1 2007-06-03 02:35:28 ssttoo Exp $
+rem @link http://pear.php.net/package/Text_Highlighter
+
+set "MHL_PARAMS="
+:doshift
+set "MHL_PARAMS=%MHL_PARAMS% %1"
+shift
+if -%1- == -- GOTO noshift
+GOTO doshift
+:noshift
+@php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS%
+
+GOTO finish
+message);
+ usage($message);
+}
+
+$source = array();
+$dest = array();
+$dir = '';
+
+$expectp = false;
+$expectx = false;
+$unexpectedx = false;
+$unexpectedp = false;
+$si = $di = 0;
+
+foreach ($options[0] as $option) {
+ switch ($option[0]) {
+ case 'x':
+ case '--xml':
+ $source[$si] = $option[1];
+ if ($si) {
+ $di++;
+ }
+ $si++;
+ if ($expectp) {
+ $unexpectedx = true;
+ }
+ $expectp = true;
+ $expectx = false;
+ break;
+
+ case 'p':
+ case '--php':
+ if ($expectx) {
+ $unexpectedp = true;
+ }
+ $dest[$di] = $option[1];
+ $expectp = false;
+ $expectx = true;
+ break;
+
+ case 'd':
+ case '--dir':
+ $dir = $option[1];
+ break;
+
+ case 'h':
+ case '--help':
+ usage();
+ break;
+ }
+}
+
+
+if ($unexpectedx && !$dir) {
+ usage('Unexpected -x or --xml', STDERR);
+}
+
+if ($unexpectedp) {
+ usage('Unexpected -p or --php', STDERR);
+}
+
+$nsource = count($source);
+$ndest = count($dest);
+
+if (!$nsource && !$ndest) {
+ $source[]='php://stdin';
+ if (!$dir) {
+ $dest[]='php://stdout';
+ } else {
+ $dest[] = null;
+ }
+} elseif ($expectp && !$dir && $nsource > 1) {
+ usage('-x or --xml without following -p or --php', STDERR);
+} elseif ($nsource == 1 && !$ndest && !$dir) {
+ $dest[]='php://stdout';
+}
+
+if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {
+ $dir .= DIRECTORY_SEPARATOR;
+}
+
+
+foreach ($source as $i => $xmlfile)
+{
+ $gen = new Text_Highlighter_Generator;
+ $gen->setInputFile($xmlfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+ $gen->generate();
+ if ($gen->hasErrors()) {
+ break;
+ }
+ if (isset($dest[$i])) {
+ $phpfile = $dest[$i];
+ } else {
+ $phpfile = $dir . $gen->language . '.php';
+ }
+ $gen->saveCode($phpfile);
+ if ($gen->hasErrors()) {
+ break;
+ }
+}
+if ($gen->hasErrors()) {
+ $errors = $gen->getErrors();
+ foreach ($errors as $error) {
+ fwrite (STDERR, $error . "\n");
+ }
+ exit(1);
+}
+
+exit(0);
+
+function usage($message='', $file=STDOUT)
+{
+ $code = 0;
+ if ($message) {
+ $message .= "\n\n";
+ $code = 1;
+ }
+ $message .= << tag)
+ -h, --help
+ This help
+MSG;
+ fwrite ($file, $message);
+ exit($code);
+}
+?>
+:finish
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/html.xml b/web/framework/vendors/TextHighlighter/Text/html.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/html.xml
rename to web/framework/vendors/TextHighlighter/Text/html.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/java.xml b/web/framework/vendors/TextHighlighter/Text/java.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/java.xml
rename to web/framework/vendors/TextHighlighter/Text/java.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/javascript.xml b/web/framework/vendors/TextHighlighter/Text/javascript.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/javascript.xml
rename to web/framework/vendors/TextHighlighter/Text/javascript.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/mysql.xml b/web/framework/vendors/TextHighlighter/Text/mysql.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/mysql.xml
rename to web/framework/vendors/TextHighlighter/Text/mysql.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/package.xml b/web/framework/vendors/TextHighlighter/Text/package.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/package.xml
rename to web/framework/vendors/TextHighlighter/Text/package.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/perl.xml b/web/framework/vendors/TextHighlighter/Text/perl.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/perl.xml
rename to web/framework/vendors/TextHighlighter/Text/perl.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml b/web/framework/vendors/TextHighlighter/Text/php.xml
similarity index 95%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml
rename to web/framework/vendors/TextHighlighter/Text/php.xml
index de00096..1b08ea2 100644
--- a/web/framework-1.1.17/vendors/TextHighlighter/Text/php.xml
+++ b/web/framework/vendors/TextHighlighter/Text/php.xml
@@ -1,194 +1,194 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/python.xml b/web/framework/vendors/TextHighlighter/Text/python.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/python.xml
rename to web/framework/vendors/TextHighlighter/Text/python.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/ruby.xml b/web/framework/vendors/TextHighlighter/Text/ruby.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/ruby.xml
rename to web/framework/vendors/TextHighlighter/Text/ruby.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sample.css b/web/framework/vendors/TextHighlighter/Text/sample.css
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sample.css
rename to web/framework/vendors/TextHighlighter/Text/sample.css
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sh.xml b/web/framework/vendors/TextHighlighter/Text/sh.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sh.xml
rename to web/framework/vendors/TextHighlighter/Text/sh.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/sql.xml b/web/framework/vendors/TextHighlighter/Text/sql.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/sql.xml
rename to web/framework/vendors/TextHighlighter/Text/sql.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/vbscript.xml b/web/framework/vendors/TextHighlighter/Text/vbscript.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/vbscript.xml
rename to web/framework/vendors/TextHighlighter/Text/vbscript.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/Text/xml.xml b/web/framework/vendors/TextHighlighter/Text/xml.xml
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/Text/xml.xml
rename to web/framework/vendors/TextHighlighter/Text/xml.xml
diff --git a/web/framework-1.1.17/vendors/TextHighlighter/highlight.css b/web/framework/vendors/TextHighlighter/highlight.css
similarity index 100%
rename from web/framework-1.1.17/vendors/TextHighlighter/highlight.css
rename to web/framework/vendors/TextHighlighter/highlight.css
diff --git a/web/framework-1.1.17/vendors/adodb/LICENSE.txt b/web/framework/vendors/adodb/LICENSE.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/adodb/LICENSE.txt
rename to web/framework/vendors/adodb/LICENSE.txt
diff --git a/web/framework-1.1.17/vendors/bbq/LICENSE.txt b/web/framework/vendors/bbq/LICENSE.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/bbq/LICENSE.txt
rename to web/framework/vendors/bbq/LICENSE.txt
diff --git a/web/framework-1.1.17/vendors/cldr/LICENSE.txt b/web/framework/vendors/cldr/LICENSE.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/cldr/LICENSE.txt
rename to web/framework/vendors/cldr/LICENSE.txt
diff --git a/web/framework-1.1.17/vendors/console-normalizer/README.md b/web/framework/vendors/console-normalizer/README.md
similarity index 100%
rename from web/framework-1.1.17/vendors/console-normalizer/README.md
rename to web/framework/vendors/console-normalizer/README.md
diff --git a/web/framework-1.1.17/vendors/console-normalizer/normalizeconsole.min.js b/web/framework/vendors/console-normalizer/normalizeconsole.min.js
similarity index 100%
rename from web/framework-1.1.17/vendors/console-normalizer/normalizeconsole.min.js
rename to web/framework/vendors/console-normalizer/normalizeconsole.min.js
diff --git a/web/framework-1.1.17/vendors/gettext/LICENSE.txt b/web/framework/vendors/gettext/LICENSE.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/gettext/LICENSE.txt
rename to web/framework/vendors/gettext/LICENSE.txt
diff --git a/web/framework-1.1.17/vendors/history/license.txt b/web/framework/vendors/history/license.txt
similarity index 100%
rename from web/framework-1.1.17/vendors/history/license.txt
rename to web/framework/vendors/history/license.txt
diff --git a/web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php b/web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php
similarity index 96%
rename from web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php
rename to web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php
index 233fed9..7adc09c 100644
--- a/web/framework-1.1.17/vendors/htmlpurifier/HTMLPurifier.standalone.php
+++ b/web/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php
@@ -7,7 +7,7 @@
* primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
* FILE, changes will be overwritten the next time the script is run.
*
- * @version 4.6.0
+ * @version 4.9.2
*
* @warning
* You must *not* include any other HTML Purifier files before this file,
@@ -39,7 +39,7 @@
*/
/*
- HTML Purifier 4.6.0 - Standards Compliant HTML Filtering
+ HTML Purifier 4.9.2 - Standards Compliant HTML Filtering
Copyright (C) 2006-2008 Edward Z. Yang
This library is free software; you can redistribute it and/or
@@ -78,12 +78,12 @@ class HTMLPurifier
* Version of HTML Purifier.
* @type string
*/
- public $version = '4.6.0';
+ public $version = '4.9.2';
/**
* Constant with version of HTML Purifier.
*/
- const VERSION = '4.6.0';
+ const VERSION = '4.9.2';
/**
* Global configuration object.
@@ -124,7 +124,7 @@ class HTMLPurifier
/**
* Initializes the purifier.
*
- * @param HTMLPurifier_Config $config Optional HTMLPurifier_Config object
+ * @param HTMLPurifier_Config|mixed $config Optional HTMLPurifier_Config object
* for all instances of the purifier, if omitted, a default
* configuration is supplied (which can be overridden on a
* per-use basis).
@@ -332,8 +332,8 @@ class HTMLPurifier_Arborize
if ($token instanceof HTMLPurifier_Token_End) {
$token->start = null; // [MUT]
$r = array_pop($stack);
- assert($r->name === $token->name);
- assert(empty($token->attr));
+ //assert($r->name === $token->name);
+ //assert(empty($token->attr));
$r->endCol = $token->col;
$r->endLine = $token->line;
$r->endArmor = $token->armor;
@@ -345,7 +345,7 @@ class HTMLPurifier_Arborize
$stack[] = $node;
}
}
- assert(count($stack) == 1);
+ //assert(count($stack) == 1);
return $stack[0];
}
@@ -406,6 +406,11 @@ class HTMLPurifier_AttrCollections
* @param HTMLPurifier_HTMLModule[] $modules Hash array of HTMLPurifier_HTMLModule members
*/
public function __construct($attr_types, $modules)
+ {
+ $this->doConstruct($attr_types, $modules);
+ }
+
+ public function doConstruct($attr_types, $modules)
{
// load extensions from the modules
foreach ($modules as $module) {
@@ -615,7 +620,13 @@ abstract class HTMLPurifier_AttrDef
*/
protected function mungeRgb($string)
{
- return preg_replace('/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)/', 'rgb(\1,\2,\3)', $string);
+ $p = '\s*(\d+(\.\d+)?([%]?))\s*';
+
+ if (preg_match('/(rgba|hsla)\(/', $string)) {
+ return preg_replace('/(rgba|hsla)\('.$p.','.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8,\11)', $string);
+ }
+
+ return preg_replace('/(rgb|hsl)\('.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8)', $string);
}
/**
@@ -1412,6 +1423,10 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
);
$max = $config->get('CSS.MaxImgLength');
+ $this->info['min-width'] =
+ $this->info['max-width'] =
+ $this->info['min-height'] =
+ $this->info['max-height'] =
$this->info['width'] =
$this->info['height'] =
$max === null ?
@@ -1537,8 +1552,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
$this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
$this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
- // technically not proprietary, but CSS3, and no one supports it
- $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
+ // vendor specific prefixes of opacity
$this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
$this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
@@ -1558,6 +1572,19 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
);
$this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid'));
+ $border_radius = new HTMLPurifier_AttrDef_CSS_Composite(
+ array(
+ new HTMLPurifier_AttrDef_CSS_Percentage(true), // disallow negative
+ new HTMLPurifier_AttrDef_CSS_Length('0') // disallow negative
+ ));
+
+ $this->info['border-top-left-radius'] =
+ $this->info['border-top-right-radius'] =
+ $this->info['border-bottom-right-radius'] =
+ $this->info['border-bottom-left-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 2);
+ // TODO: support SLASH syntax
+ $this->info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius, 4);
+
}
/**
@@ -1591,6 +1618,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
array('visible', 'hidden', 'collapse')
);
$this->info['overflow'] = new HTMLPurifier_AttrDef_Enum(array('visible', 'hidden', 'auto', 'scroll'));
+ $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
}
/**
@@ -1736,7 +1764,7 @@ class HTMLPurifier_Config
* HTML Purifier's version
* @type string
*/
- public $version = '4.6.0';
+ public $version = '4.9.2';
/**
* Whether or not to automatically finalize
@@ -2361,16 +2389,25 @@ class HTMLPurifier_Config
return $this->getDefinition($name, true, true);
}
+ /**
+ * @return HTMLPurifier_HTMLDefinition
+ */
public function maybeGetRawHTMLDefinition()
{
return $this->getDefinition('HTML', true, true);
}
-
+
+ /**
+ * @return HTMLPurifier_CSSDefinition
+ */
public function maybeGetRawCSSDefinition()
{
return $this->getDefinition('CSS', true, true);
}
-
+
+ /**
+ * @return HTMLPurifier_URIDefinition
+ */
public function maybeGetRawURIDefinition()
{
return $this->getDefinition('URI', true, true);
@@ -3189,7 +3226,7 @@ abstract class HTMLPurifier_DefinitionCache
/**
* Clears all expired (older version or revision) objects from cache
- * @note Be carefuly implementing this method as flush. Flush must
+ * @note Be careful implementing this method as flush. Flush must
* not interfere with other Definition types, and cleanup()
* should not be repeatedly called by userland code.
* @param HTMLPurifier_Config $config
@@ -3843,6 +3880,14 @@ class HTMLPurifier_Encoder
* It will parse according to UTF-8 and return a valid UTF8 string, with
* non-SGML codepoints excluded.
*
+ * Specifically, it will permit:
+ * \x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}
+ * Source: https://www.w3.org/TR/REC-xml/#NT-Char
+ * Arguably this function should be modernized to the HTML5 set
+ * of allowed characters:
+ * https://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream
+ * which simultaneously expand and restrict the set of allowed characters.
+ *
* @param string $str The string to clean
* @param bool $force_php
* @return string
@@ -3864,15 +3909,12 @@ class HTMLPurifier_Encoder
* function that needs to be able to understand UTF-8 characters.
* As of right now, only smart lossless character encoding converters
* would need that, and I'm probably not going to implement them.
- * Once again, PHP 6 should solve all our problems.
*/
public static function cleanUTF8($str, $force_php = false)
{
// UTF-8 validity is checked since PHP 4.3.5
// This is an optimization: if the string is already valid UTF-8, no
// need to do PHP stuff. 99% of the time, this will be the case.
- // The regexp matches the XML char production, as well as well as excluding
- // non-SGML codepoints U+007F to U+009F
if (preg_match(
'/^[\x{9}\x{A}\x{D}\x{20}-\x{7E}\x{A0}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]*$/Du',
$str
@@ -3997,6 +4039,7 @@ class HTMLPurifier_Encoder
// 7F-9F is not strictly prohibited by XML,
// but it is non-SGML, and thus we don't allow it
(0xA0 <= $mUcs4 && 0xD7FF >= $mUcs4) ||
+ (0xE000 <= $mUcs4 && 0xFFFD >= $mUcs4) ||
(0x10000 <= $mUcs4 && 0x10FFFF >= $mUcs4)
)
) {
@@ -4419,6 +4462,138 @@ class HTMLPurifier_EntityParser
*/
protected $_entity_lookup;
+ /**
+ * Callback regex string for entities in text.
+ * @type string
+ */
+ protected $_textEntitiesRegex;
+
+ /**
+ * Callback regex string for entities in attributes.
+ * @type string
+ */
+ protected $_attrEntitiesRegex;
+
+ /**
+ * Tests if the beginning of a string is a semi-optional regex
+ */
+ protected $_semiOptionalPrefixRegex;
+
+ public function __construct() {
+ // From
+ // http://stackoverflow.com/questions/15532252/why-is-reg-being-rendered-as-without-the-bounding-semicolon
+ $semi_optional = "quot|QUOT|lt|LT|gt|GT|amp|AMP|AElig|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|Iacute|Icirc|Igrave|Iuml|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml";
+
+ // NB: three empty captures to put the fourth match in the right
+ // place
+ $this->_semiOptionalPrefixRegex = "/&()()()($semi_optional)/";
+
+ $this->_textEntitiesRegex =
+ '/&(?:'.
+ // hex
+ '[#]x([a-fA-F0-9]+);?|'.
+ // dec
+ '[#]0*(\d+);?|'.
+ // string (mandatory semicolon)
+ // NB: order matters: match semicolon preferentially
+ '([A-Za-z_:][A-Za-z0-9.\-_:]*);|'.
+ // string (optional semicolon)
+ "($semi_optional)".
+ ')/';
+
+ $this->_attrEntitiesRegex =
+ '/&(?:'.
+ // hex
+ '[#]x([a-fA-F0-9]+);?|'.
+ // dec
+ '[#]0*(\d+);?|'.
+ // string (mandatory semicolon)
+ // NB: order matters: match semicolon preferentially
+ '([A-Za-z_:][A-Za-z0-9.\-_:]*);|'.
+ // string (optional semicolon)
+ // don't match if trailing is equals or alphanumeric (URL
+ // like)
+ "($semi_optional)(?![=;A-Za-z0-9])".
+ ')/';
+
+ }
+
+ /**
+ * Substitute entities with the parsed equivalents. Use this on
+ * textual data in an HTML document (as opposed to attributes.)
+ *
+ * @param string $string String to have entities parsed.
+ * @return string Parsed string.
+ */
+ public function substituteTextEntities($string)
+ {
+ return preg_replace_callback(
+ $this->_textEntitiesRegex,
+ array($this, 'entityCallback'),
+ $string
+ );
+ }
+
+ /**
+ * Substitute entities with the parsed equivalents. Use this on
+ * attribute contents in documents.
+ *
+ * @param string $string String to have entities parsed.
+ * @return string Parsed string.
+ */
+ public function substituteAttrEntities($string)
+ {
+ return preg_replace_callback(
+ $this->_attrEntitiesRegex,
+ array($this, 'entityCallback'),
+ $string
+ );
+ }
+
+ /**
+ * Callback function for substituteNonSpecialEntities() that does the work.
+ *
+ * @param array $matches PCRE matches array, with 0 the entire match, and
+ * either index 1, 2 or 3 set with a hex value, dec value,
+ * or string (respectively).
+ * @return string Replacement string.
+ */
+
+ protected function entityCallback($matches)
+ {
+ $entity = $matches[0];
+ $hex_part = @$matches[1];
+ $dec_part = @$matches[2];
+ $named_part = empty($matches[3]) ? @$matches[4] : $matches[3];
+ if ($hex_part !== NULL && $hex_part !== "") {
+ return HTMLPurifier_Encoder::unichr(hexdec($hex_part));
+ } elseif ($dec_part !== NULL && $dec_part !== "") {
+ return HTMLPurifier_Encoder::unichr((int) $dec_part);
+ } else {
+ if (!$this->_entity_lookup) {
+ $this->_entity_lookup = HTMLPurifier_EntityLookup::instance();
+ }
+ if (isset($this->_entity_lookup->table[$named_part])) {
+ return $this->_entity_lookup->table[$named_part];
+ } else {
+ // exact match didn't match anything, so test if
+ // any of the semicolon optional match the prefix.
+ // Test that this is an EXACT match is important to
+ // prevent infinite loop
+ if (!empty($matches[3])) {
+ return preg_replace_callback(
+ $this->_semiOptionalPrefixRegex,
+ array($this, 'entityCallback'),
+ $entity
+ );
+ }
+ return $entity;
+ }
+ }
+ }
+
+ // LEGACY CODE BELOW
+
/**
* Callback regex string for parsing entities.
* @type string
@@ -4547,7 +4722,7 @@ class HTMLPurifier_EntityParser
$entity;
} else {
return isset($this->_special_ent2dec[$matches[3]]) ?
- $this->_special_ent2dec[$matches[3]] :
+ $this->_special_dec2str[$this->_special_ent2dec[$matches[3]]] :
$entity;
}
}
@@ -6284,6 +6459,14 @@ class HTMLPurifier_HTMLModuleManager
if ($config->get('HTML.TargetBlank')) {
$modules[] = 'TargetBlank';
}
+ // NB: HTML.TargetNoreferrer and HTML.TargetNoopener must be AFTER HTML.TargetBlank
+ // so that its post-attr-transform gets run afterwards.
+ if ($config->get('HTML.TargetNoreferrer')) {
+ $modules[] = 'TargetNoreferrer';
+ }
+ if ($config->get('HTML.TargetNoopener')) {
+ $modules[] = 'TargetNoopener';
+ }
// merge in custom modules
$modules = array_merge($modules, $this->userModules);
@@ -7558,21 +7741,24 @@ class HTMLPurifier_Lexer
''' => "'"
);
+ public function parseText($string, $config) {
+ return $this->parseData($string, false, $config);
+ }
+
+ public function parseAttr($string, $config) {
+ return $this->parseData($string, true, $config);
+ }
+
/**
* Parses special entities into the proper characters.
*
* This string will translate escaped versions of the special characters
* into the correct ones.
*
- * @warning
- * You should be able to treat the output of this function as
- * completely parsed, but that's only because all other entities should
- * have been handled previously in substituteNonSpecialEntities()
- *
* @param string $string String character data to be parsed.
* @return string Parsed character data.
*/
- public function parseData($string)
+ public function parseData($string, $is_attr, $config)
{
// following functions require at least one character
if ($string === '') {
@@ -7598,7 +7784,15 @@ class HTMLPurifier_Lexer
}
// hmm... now we have some uncommon entities. Use the callback.
- $string = $this->_entity_parser->substituteSpecialEntities($string);
+ if ($config->get('Core.LegacyEntityDecoder')) {
+ $string = $this->_entity_parser->substituteSpecialEntities($string);
+ } else {
+ if ($is_attr) {
+ $string = $this->_entity_parser->substituteAttrEntities($string);
+ } else {
+ $string = $this->_entity_parser->substituteTextEntities($string);
+ }
+ }
return $string;
}
@@ -7712,7 +7906,9 @@ class HTMLPurifier_Lexer
}
// expand entities that aren't the big five
- $html = $this->_entity_parser->substituteNonSpecialEntities($html);
+ if ($config->get('Core.LegacyEntityDecoder')) {
+ $html = $this->_entity_parser->substituteNonSpecialEntities($html);
+ }
// clean into wellformed UTF-8 string for an SGML context: this has
// to be done after entity expansion because the entities sometimes
@@ -7724,6 +7920,13 @@ class HTMLPurifier_Lexer
$html = preg_replace('#<\?.+?\?>#s', '', $html);
}
+ $hidden_elements = $config->get('Core.HiddenElements');
+ if ($config->get('Core.AggressivelyRemoveScript') &&
+ !($config->get('HTML.Trusted') || !$config->get('Core.RemoveScriptContents')
+ || empty($hidden_elements["script"]))) {
+ $html = preg_replace('##i', '', $html);
+ }
+
return $html;
}
@@ -7734,12 +7937,17 @@ class HTMLPurifier_Lexer
public function extractBody($html)
{
$matches = array();
- $result = preg_match('!]*>(.*)!is', $html, $matches);
+ $result = preg_match('|(.*?)]*>(.*)|is', $html, $matches);
if ($result) {
- return $matches[1];
- } else {
- return $html;
+ // Make sure it's not in a comment
+ $comment_start = strrpos($matches[1], '');
+ if ($comment_start === false ||
+ ($comment_end !== false && $comment_end > $comment_start)) {
+ return $matches[2];
+ }
}
+ return $html;
}
}
@@ -8408,7 +8616,7 @@ abstract class HTMLPurifier_Token
public $armor = array();
/**
- * Used during MakeWellFormed.
+ * Used during MakeWellFormed. See Note [Injector skips]
* @type
*/
public $skip;
@@ -8687,11 +8895,13 @@ class HTMLPurifier_URI
$def = $config->getDefinition('URI');
$scheme_obj = $def->getDefaultScheme($config, $context);
if (!$scheme_obj) {
- // something funky happened to the default scheme object
- trigger_error(
- 'Default scheme object "' . $def->defaultScheme . '" was not readable',
- E_USER_WARNING
- );
+ if ($def->defaultScheme !== null) {
+ // something funky happened to the default scheme object
+ trigger_error(
+ 'Default scheme object "' . $def->defaultScheme . '" was not readable',
+ E_USER_WARNING
+ );
+ } // suppress error if it's null
return false;
}
}
@@ -10064,15 +10274,42 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
$css = $this->parseCDATA($css);
$definition = $config->getCSSDefinition();
+ $allow_duplicates = $config->get("CSS.AllowDuplicates");
- // we're going to break the spec and explode by semicolons.
- // This is because semicolon rarely appears in escaped form
- // Doing this is generally flaky but fast
- // IT MIGHT APPEAR IN URIs, see HTMLPurifier_AttrDef_CSSURI
- // for details
- $declarations = explode(';', $css);
+ // According to the CSS2.1 spec, the places where a
+ // non-delimiting semicolon can appear are in strings
+ // escape sequences. So here is some dumb hack to
+ // handle quotes.
+ $len = strlen($css);
+ $accum = "";
+ $declarations = array();
+ $quoted = false;
+ for ($i = 0; $i < $len; $i++) {
+ $c = strcspn($css, ";'\"", $i);
+ $accum .= substr($css, $i, $c);
+ $i += $c;
+ if ($i == $len) break;
+ $d = $css[$i];
+ if ($quoted) {
+ $accum .= $d;
+ if ($d == $quoted) {
+ $quoted = false;
+ }
+ } else {
+ if ($d == ";") {
+ $declarations[] = $accum;
+ $accum = "";
+ } else {
+ $accum .= $d;
+ $quoted = $d;
+ }
+ }
+ }
+ if ($accum != "") $declarations[] = $accum;
+
$propvalues = array();
+ $new_declarations = '';
/**
* Name of the current CSS property being validated.
@@ -10122,7 +10359,11 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
if ($result === false) {
continue;
}
- $propvalues[$property] = $result;
+ if ($allow_duplicates) {
+ $new_declarations .= "$property:$result;";
+ } else {
+ $propvalues[$property] = $result;
+ }
}
$context->destroy('CurrentCSSProperty');
@@ -10131,7 +10372,6 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
// slightly inefficient, but it's the only way of getting rid of
// duplicates. Perhaps config to optimize it, but not now.
- $new_declarations = '';
foreach ($propvalues as $prop => $value) {
$new_declarations .= "$prop:$value;";
}
@@ -11085,6 +11325,16 @@ class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
{
+ /**
+ * @type HTMLPurifier_AttrDef_CSS_AlphaValue
+ */
+ protected $alpha;
+
+ public function __construct()
+ {
+ $this->alpha = new HTMLPurifier_AttrDef_CSS_AlphaValue();
+ }
+
/**
* @param string $color
* @param HTMLPurifier_Config $config
@@ -11108,59 +11358,104 @@ class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
return $colors[$lower];
}
- if (strpos($color, 'rgb(') !== false) {
- // rgb literal handling
+ if (preg_match('#(rgb|rgba|hsl|hsla)\(#', $color, $matches) === 1) {
$length = strlen($color);
if (strpos($color, ')') !== $length - 1) {
return false;
}
- $triad = substr($color, 4, $length - 4 - 1);
- $parts = explode(',', $triad);
- if (count($parts) !== 3) {
+
+ // get used function : rgb, rgba, hsl or hsla
+ $function = $matches[1];
+
+ $parameters_size = 3;
+ $alpha_channel = false;
+ if (substr($function, -1) === 'a') {
+ $parameters_size = 4;
+ $alpha_channel = true;
+ }
+
+ /*
+ * Allowed types for values :
+ * parameter_position => [type => max_value]
+ */
+ $allowed_types = array(
+ 1 => array('percentage' => 100, 'integer' => 255),
+ 2 => array('percentage' => 100, 'integer' => 255),
+ 3 => array('percentage' => 100, 'integer' => 255),
+ );
+ $allow_different_types = false;
+
+ if (strpos($function, 'hsl') !== false) {
+ $allowed_types = array(
+ 1 => array('integer' => 360),
+ 2 => array('percentage' => 100),
+ 3 => array('percentage' => 100),
+ );
+ $allow_different_types = true;
+ }
+
+ $values = trim(str_replace($function, '', $color), ' ()');
+
+ $parts = explode(',', $values);
+ if (count($parts) !== $parameters_size) {
return false;
}
- $type = false; // to ensure that they're all the same type
+
+ $type = false;
$new_parts = array();
+ $i = 0;
+
foreach ($parts as $part) {
+ $i++;
$part = trim($part);
+
if ($part === '') {
return false;
}
- $length = strlen($part);
- if ($part[$length - 1] === '%') {
- // handle percents
- if (!$type) {
- $type = 'percentage';
- } elseif ($type !== 'percentage') {
+
+ // different check for alpha channel
+ if ($alpha_channel === true && $i === count($parts)) {
+ $result = $this->alpha->validate($part, $config, $context);
+
+ if ($result === false) {
return false;
}
- $num = (float)substr($part, 0, $length - 1);
- if ($num < 0) {
- $num = 0;
- }
- if ($num > 100) {
- $num = 100;
- }
- $new_parts[] = "$num%";
+
+ $new_parts[] = (string)$result;
+ continue;
+ }
+
+ if (substr($part, -1) === '%') {
+ $current_type = 'percentage';
} else {
- // handle integers
- if (!$type) {
- $type = 'integer';
- } elseif ($type !== 'integer') {
- return false;
- }
- $num = (int)$part;
- if ($num < 0) {
- $num = 0;
- }
- if ($num > 255) {
- $num = 255;
- }
- $new_parts[] = (string)$num;
+ $current_type = 'integer';
+ }
+
+ if (!array_key_exists($current_type, $allowed_types[$i])) {
+ return false;
+ }
+
+ if (!$type) {
+ $type = $current_type;
+ }
+
+ if ($allow_different_types === false && $type != $current_type) {
+ return false;
+ }
+
+ $max_value = $allowed_types[$i][$current_type];
+
+ if ($current_type == 'integer') {
+ // Return value between range 0 -> $max_value
+ $new_parts[] = (int)max(min($part, $max_value), 0);
+ } elseif ($current_type == 'percentage') {
+ $new_parts[] = (float)max(min(rtrim($part, '%'), $max_value), 0) . '%';
}
}
- $new_triad = implode(',', $new_parts);
- $color = "rgb($new_triad)";
+
+ $new_values = implode(',', $new_parts);
+
+ $color = $function . '(' . $new_values . ')';
} else {
// hexadecimal handling
if ($color[0] === '#') {
@@ -11179,6 +11474,7 @@ class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
}
return $color;
}
+
}
@@ -12079,7 +12375,7 @@ class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
*/
public function validate($string, $config, $context)
{
- $string = $this->parseCDATA($string);
+ $string = $this->mungeRgb($this->parseCDATA($string));
if ($string === '') {
return false;
}
@@ -12242,6 +12538,9 @@ class HTMLPurifier_AttrDef_CSS_URI extends HTMLPurifier_AttrDef_URI
return false;
}
$uri_string = substr($uri_string, 4);
+ if (strlen($uri_string) == 0) {
+ return false;
+ }
$new_length = strlen($uri_string) - 1;
if ($uri_string[$new_length] != ')') {
return false;
@@ -12316,9 +12615,6 @@ class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef
*/
public function validate($string, $config, $context)
{
- if (empty($string)) {
- return false;
- }
return $this->name;
}
@@ -12619,18 +12915,26 @@ class HTMLPurifier_AttrDef_HTML_ID extends HTMLPurifier_AttrDef
// we purposely avoid using regex, hopefully this is faster
- if (ctype_alpha($id)) {
- $result = true;
- } else {
- if (!ctype_alpha(@$id[0])) {
+ if ($config->get('Attr.ID.HTML5') === true) {
+ if (preg_match('/[\t\n\x0b\x0c ]/', $id)) {
return false;
}
- // primitive style of regexps, I suppose
- $trim = trim(
- $id,
- 'A..Za..z0..9:-._'
- );
- $result = ($trim === '');
+ } else {
+ if (ctype_alpha($id)) {
+ // OK
+ } else {
+ if (!ctype_alpha(@$id[0])) {
+ return false;
+ }
+ // primitive style of regexps, I suppose
+ $trim = trim(
+ $id,
+ 'A..Za..z0..9:-._'
+ );
+ if ($trim !== '') {
+ return false;
+ }
+ }
}
$regexp = $config->get('Attr.IDBlacklistRegexp');
@@ -12638,14 +12942,14 @@ class HTMLPurifier_AttrDef_HTML_ID extends HTMLPurifier_AttrDef
return false;
}
- if (!$this->selector && $result) {
+ if (!$this->selector) {
$id_accumulator->add($id);
}
// if no change was made to the ID, return the result
// else, return the new id if stripping whitespace made it
// valid, or return false.
- return $result ? $id : false;
+ return $id;
}
}
@@ -13018,24 +13322,33 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
// fairly well supported.
$underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : '';
+ // Based off of RFC 1738, but amended so that
+ // as per RFC 3696, the top label need only not be all numeric.
// The productions describing this are:
$a = '[a-z]'; // alpha
$an = '[a-z0-9]'; // alphanum
$and = "[a-z0-9-$underscore]"; // alphanum | "-"
// domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
- $domainlabel = "$an($and*$an)?";
- // toplabel = alpha | alpha *( alphanum | "-" ) alphanum
- $toplabel = "$a($and*$an)?";
+ $domainlabel = "$an(?:$and*$an)?";
+ // AMENDED as per RFC 3696
+ // toplabel = alphanum | alphanum *( alphanum | "-" ) alphanum
+ // side condition: not all numeric
+ $toplabel = "$an(?:$and*$an)?";
// hostname = *( domainlabel "." ) toplabel [ "." ]
- if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) {
- return $string;
+ if (preg_match("/^(?:$domainlabel\.)*($toplabel)\.?$/i", $string, $matches)) {
+ if (!ctype_digit($matches[1])) {
+ return $string;
+ }
}
+ // PHP 5.3 and later support this functionality natively
+ if (function_exists('idn_to_ascii')) {
+ $string = idn_to_ascii($string);
+
// If we have Net_IDNA2 support, we can support IRIs by
// punycoding them. (This is the most portable thing to do,
// since otherwise we have to assume browsers support
-
- if ($config->get('Core.EnableIDNA')) {
+ } elseif ($config->get('Core.EnableIDNA')) {
$idna = new Net_IDNA2(array('encoding' => 'utf8', 'overlong' => false, 'strict' => true));
// we need to encode each period separately
$parts = explode('.', $string);
@@ -13056,13 +13369,14 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
}
}
$string = implode('.', $new_parts);
- if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) {
- return $string;
- }
} catch (Exception $e) {
// XXX error reporting
}
}
+ // Try again
+ if (preg_match("/^($domainlabel\.)*$toplabel\.?$/i", $string)) {
+ return $string;
+ }
return false;
}
}
@@ -13499,8 +13813,7 @@ class HTMLPurifier_AttrTransform_ImgRequired extends HTMLPurifier_AttrTransform
if ($src) {
$alt = $config->get('Attr.DefaultImageAlt');
if ($alt === null) {
- // truncate if the alt is too long
- $attr['alt'] = substr(basename($attr['src']), 0, 40);
+ $attr['alt'] = basename($attr['src']);
} else {
$attr['alt'] = $alt;
}
@@ -14047,6 +14360,82 @@ class HTMLPurifier_AttrTransform_TargetBlank extends HTMLPurifier_AttrTransform
+// must be called POST validation
+
+/**
+ * Adds rel="noopener" to any links which target a different window
+ * than the current one. This is used to prevent malicious websites
+ * from silently replacing the original window, which could be used
+ * to do phishing.
+ * This transform is controlled by %HTML.TargetNoopener.
+ */
+class HTMLPurifier_AttrTransform_TargetNoopener extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (isset($attr['rel'])) {
+ $rels = explode(' ', $attr['rel']);
+ } else {
+ $rels = array();
+ }
+ if (isset($attr['target']) && !in_array('noopener', $rels)) {
+ $rels[] = 'noopener';
+ }
+ if (!empty($rels) || isset($attr['rel'])) {
+ $attr['rel'] = implode(' ', $rels);
+ }
+
+ return $attr;
+ }
+}
+
+
+
+
+// must be called POST validation
+
+/**
+ * Adds rel="noreferrer" to any links which target a different window
+ * than the current one. This is used to prevent malicious websites
+ * from silently replacing the original window, which could be used
+ * to do phishing.
+ * This transform is controlled by %HTML.TargetNoreferrer.
+ */
+class HTMLPurifier_AttrTransform_TargetNoreferrer extends HTMLPurifier_AttrTransform
+{
+ /**
+ * @param array $attr
+ * @param HTMLPurifier_Config $config
+ * @param HTMLPurifier_Context $context
+ * @return array
+ */
+ public function transform($attr, $config, $context)
+ {
+ if (isset($attr['rel'])) {
+ $rels = explode(' ', $attr['rel']);
+ } else {
+ $rels = array();
+ }
+ if (isset($attr['target']) && !in_array('noreferrer', $rels)) {
+ $rels[] = 'noreferrer';
+ }
+ if (!empty($rels) || isset($attr['rel'])) {
+ $attr['rel'] = implode(' ', $rels);
+ }
+
+ return $attr;
+ }
+}
+
+
+
+
/**
* Sets height/width defaults for