diff options
| author | Georg Brandl <georg@python.org> | 2021-01-18 21:24:00 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2021-01-18 22:08:36 +0100 |
| commit | 2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch) | |
| tree | 809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/php | |
| parent | f0445be718da83541ea3401aad882f3937147263 (diff) | |
| download | pygments-git-examplefiles.tar.gz | |
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/php')
| -rw-r--r-- | tests/lexers/php/example.txt | 3651 | ||||
| -rw-r--r-- | tests/lexers/php/example2.txt | 76 |
2 files changed, 3727 insertions, 0 deletions
diff --git a/tests/lexers/php/example.txt b/tests/lexers/php/example.txt new file mode 100644 index 00000000..04c05cd7 --- /dev/null +++ b/tests/lexers/php/example.txt @@ -0,0 +1,3651 @@ +---input--- +<?php + +$disapproval_ಠ_ಠ_of_php = 'unicode var'; + +$test = function($a) { $lambda = 1; } + +/** + * Zip class file + * + * @package fnord.bb + * @subpackage archive + */ + +// Unlock? +if(!defined('UNLOCK') || !UNLOCK) + die(); + +// Load the parent archive class +require_once(ROOT_PATH.'/classes/archive.class.php'); + +class Zip\Zippಠ_ಠ_ { + +} + +/** + * Zip class + * + * @author Manni <manni@fnord.name> + * @copyright Copyright (c) 2006, Manni + * @version 1.0 + * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt + * @link http://mannithedark.is-a-geek.net/ + * @since 1.0 + * @package fnord.bb + * @subpackage archive + */ +class Zip extends Archive { + /** + * Outputs the zip file + * + * This function creates the zip file with the dirs and files given. + * If the optional parameter $file is given, the zip file is will be + * saved at that location. Otherwise the function returns the zip file's content. + * + * @access public + * + * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt + * @param string $filename The path where the zip file will be saved + * + * @return bool|string Returns either true if the fil is sucessfully created or the content of the zip file + */ + function out($filename = false) { + // Empty output + $file_data = array(); // Data of the file part + $cd_data = array(); // Data of the central directory + + // Sort dirs and files by path length + uksort($this->dirs, 'sort_by_length'); + uksort($this->files, 'sort_by_length'); + + // Handle dirs + foreach($this->dirs as $dir) { + $dir .= '/'; + // File part + + // Reset dir data + $dir_data = ''; + + // Local file header + $dir_data .= "\x50\x4b\x03\x04"; // Local file header signature + $dir_data .= pack("v", 10); // Version needed to extract + $dir_data .= pack("v", 0); // General purpose bit flag + $dir_data .= pack("v", 0); // Compression method + $dir_data .= pack("v", 0); // Last mod file time + $dir_data .= pack("v", 0); // Last mod file date + $dir_data .= pack("V", 0); // crc-32 + $dir_data .= pack("V", 0); // Compressed size + $dir_data .= pack("V", 0); // Uncompressed size + $dir_data .= pack("v", strlen($dir)); // File name length + $dir_data .= pack("v", 0); // Extra field length + + $dir_data .= $dir; // File name + $dir_data .= ''; // Extra field (is empty) + + // File data + $dir_data .= ''; // Dirs have no file data + + // Data descriptor + $dir_data .= pack("V", 0); // crc-32 + $dir_data .= pack("V", 0); // Compressed size + $dir_data .= pack("V", 0); // Uncompressed size + + // Save current offset + $offset = strlen(implode('', $file_data)); + + // Append dir data to the file part + $file_data[] = $dir_data; + + // Central directory + + // Reset dir data + $dir_data = ''; + + // File header + $dir_data .= "\x50\x4b\x01\x02"; // Local file header signature + $dir_data .= pack("v", 0); // Version made by + $dir_data .= pack("v", 10); // Version needed to extract + $dir_data .= pack("v", 0); // General purpose bit flag + $dir_data .= pack("v", 0); // Compression method + $dir_data .= pack("v", 0); // Last mod file time + $dir_data .= pack("v", 0); // Last mod file date + $dir_data .= pack("V", 0); // crc-32 + $dir_data .= pack("V", 0); // Compressed size + $dir_data .= pack("V", 0); // Uncompressed size + $dir_data .= pack("v", strlen($dir)); // File name length + $dir_data .= pack("v", 0); // Extra field length + $dir_data .= pack("v", 0); // File comment length + $dir_data .= pack("v", 0); // Disk number start + $dir_data .= pack("v", 0); // Internal file attributes + $dir_data .= pack("V", 16); // External file attributes + $dir_data .= pack("V", $offset); // Relative offset of local header + + $dir_data .= $dir; // File name + $dir_data .= ''; // Extra field (is empty) + $dir_data .= ''; // File comment (is empty) + + /* + // Data descriptor + $dir_data .= pack("V", 0); // crc-32 + $dir_data .= pack("V", 0); // Compressed size + $dir_data .= pack("V", 0); // Uncompressed size + */ + + // Append dir data to the central directory data + $cd_data[] = $dir_data; + } + + // Handle files + foreach($this->files as $name => $file) { + // Get values + $content = $file[0]; + + // File part + + // Reset file data + $fd = ''; + + // Detect possible compressions + // Use deflate + if(function_exists('gzdeflate')) { + $method = 8; + + // Compress file content + $compressed_data = gzdeflate($content); + + // Use bzip2 + } elseif(function_exists('bzcompress')) { + $method = 12; + + // Compress file content + $compressed_data = bzcompress($content); + + // No compression + } else { + $method = 0; + + // Do not compress the content :P + $compressed_data = $content; + } + + // Local file header + $fd .= "\x50\x4b\x03\x04"; // Local file header signature + $fd .= pack("v", 20); // Version needed to extract + $fd .= pack("v", 0); // General purpose bit flag + $fd .= pack("v", $method); // Compression method + $fd .= pack("v", 0); // Last mod file time + $fd .= pack("v", 0); // Last mod file date + $fd .= pack("V", crc32($content)); // crc-32 + $fd .= pack("V", strlen($compressed_data)); // Compressed size + $fd .= pack("V", strlen($content)); // Uncompressed size + $fd .= pack("v", strlen($name)); // File name length + $fd .= pack("v", 0); // Extra field length + + $fd .= $name; // File name + $fd .= ''; // Extra field (is empty) + + // File data + $fd .= $compressed_data; + + // Data descriptor + $fd .= pack("V", crc32($content)); // crc-32 + $fd .= pack("V", strlen($compressed_data)); // Compressed size + $fd .= pack("V", strlen($content)); // Uncompressed size + + // Save current offset + $offset = strlen(implode('', $file_data)); + + // Append file data to the file part + $file_data[] = $fd; + + // Central directory + + // Reset file data + $fd = ''; + + // File header + $fd .= "\x50\x4b\x01\x02"; // Local file header signature + $fd .= pack("v", 0); // Version made by + $fd .= pack("v", 20); // Version needed to extract + $fd .= pack("v", 0); // General purpose bit flag + $fd .= pack("v", $method); // Compression method + $fd .= pack("v", 0); // Last mod file time + $fd .= pack("v", 0); // Last mod file date + $fd .= pack("V", crc32($content)); // crc-32 + $fd .= pack("V", strlen($compressed_data)); // Compressed size + $fd .= pack("V", strlen($content)); // Uncompressed size + $fd .= pack("v", strlen($name)); // File name length + $fd .= pack("v", 0); // Extra field length + $fd .= pack("v", 0); // File comment length + $fd .= pack("v", 0); // Disk number start + $fd .= pack("v", 0); // Internal file attributes + $fd .= pack("V", 32); // External file attributes + $fd .= pack("V", $offset); // Relative offset of local header + + $fd .= $name; // File name + $fd .= ''; // Extra field (is empty) + $fd .= ''; // File comment (is empty) + + /* + // Data descriptor + $fd .= pack("V", crc32($content)); // crc-32 + $fd .= pack("V", strlen($compressed_data)); // Compressed size + $fd .= pack("V", strlen($content)); // Uncompressed size + */ + + // Append file data to the central directory data + $cd_data[] = $fd; + } + + // Digital signature + $digital_signature = ''; + $digital_signature .= "\x50\x4b\x05\x05"; // Header signature + $digital_signature .= pack("v", 0); // Size of data + $digital_signature .= ''; // Signature data (is empty) + + $tmp_file_data = implode('', $file_data); // File data + $tmp_cd_data = implode('', $cd_data). // Central directory + $digital_signature; // Digital signature + + // End of central directory + $eof_cd = ''; + $eof_cd .= "\x50\x4b\x05\x06"; // End of central dir signature + $eof_cd .= pack("v", 0); // Number of this disk + $eof_cd .= pack("v", 0); // Number of the disk with the start of the central directory + $eof_cd .= pack("v", count($cd_data)); // Total number of entries in the central directory on this disk + $eof_cd .= pack("v", count($cd_data)); // Total number of entries in the central directory + $eof_cd .= pack("V", strlen($tmp_cd_data)); // Size of the central directory + $eof_cd .= pack("V", strlen($tmp_file_data)); // Offset of start of central directory with respect to the starting disk number + $eof_cd .= pack("v", 0); // .ZIP file comment length + $eof_cd .= ''; // .ZIP file comment (is empty) + + // Content of the zip file + $data = $tmp_file_data. + // $extra_data_record. + $tmp_cd_data. + $eof_cd; + + // Return content? + if(!$filename) + return $data; + + // Write to file + return file_put_contents($filename, $data); + } + + /** + * Load a zip file + * + * This function loads the files and dirs from a zip file from the harddrive. + * + * @access public + * + * @param string $file The path to the zip file + * @param bool $reset Reset the files and dirs before adding the zip file's content? + * + * @return bool Returns true if the file was loaded sucessfully + */ + function load_file($file, $reset = true) { + // Check whether the file exists + if(!file_exists($file)) + return false; + + // Load the files content + $content = @file_get_contents($file); + + // Return false if the file cannot be opened + if(!$content) + return false; + + // Read the zip + return $this->load_string($content, $reset); + } + + /** + * Load a zip string + * + * This function loads the files and dirs from a string + * + * @access public + * + * @param string $string The string the zip is generated from + * @param bool $reset Reset the files and dirs before adding the zip file's content? + * + * @return bool Returns true if the string was loaded sucessfully + */ + function load_string($string, $reset = true) { + // Reset the zip? + if($reset) { + $this->dirs = array(); + $this->files = array(); + } + + // Get the starting position of the end of central directory record + $start = strpos($string, "\x50\x4b\x05\x06"); + + // Error + if($start === false) + die('Could not find the end of central directory record'); + + // Get the ecdr + $eof_cd = substr($string, $start+4, 18); + + // Unpack the ecdr infos + $eof_cd = unpack('vdisc1/'. + 'vdisc2/'. + 'ventries1/'. + 'ventries2/'. + 'Vsize/'. + 'Voffset/'. + 'vcomment_lenght', $eof_cd); + + // Do not allow multi disc zips + if($eof_cd['disc1'] != 0) + die('multi disk stuff is not yet implemented :/'); + + // Save the interesting values + $cd_entries = $eof_cd['entries1']; + $cd_size = $eof_cd['size']; + $cd_offset = $eof_cd['offset']; + + // Get the central directory record + $cdr = substr($string, $cd_offset, $cd_size); + + // Reset the position and the list of the entries + $pos = 0; + $entries = array(); + + // Handle cdr + while($pos < strlen($cdr)) { + // Check header signature + // Digital signature + if(substr($cdr, $pos, 4) == "\x50\x4b\x05\x05") { + // Get digital signature size + $tmp_info = unpack('vsize', substr($cdr, $pos + 4, 2)); + + // Read out the digital signature + $digital_sig = substr($header, $pos + 6, $tmp_info['size']); + + break; + } + + // Get file header + $header = substr($cdr, $pos, 46); + + // Unpack the header information + $header_info = @unpack('Vheader/'. + 'vversion_made_by/'. + 'vversion_needed/'. + 'vgeneral_purpose/'. + 'vcompression_method/'. + 'vlast_mod_time/'. + 'vlast_mod_date/'. + 'Vcrc32/'. + 'Vcompressed_size/'. + 'Vuncompressed_size/'. + 'vname_length/'. + 'vextra_length/'. + 'vcomment_length/'. + 'vdisk_number/'. + 'vinternal_attributes/'. + 'Vexternal_attributes/'. + 'Voffset', + $header); + + // Valid header? + if($header_info['header'] != 33639248) + return false; + + // New position + $pos += 46; + + // Read out the file name + $header_info['name'] = substr($cdr, $pos, $header_info['name_length']); + + // New position + $pos += $header_info['name_length']; + + // Read out the extra stuff + $header_info['extra'] = substr($cdr, $pos, $header_info['extra_length']); + + // New position + $pos += $header_info['extra_length']; + + // Read out the comment + $header_info['comment'] = substr($cdr, $pos, $header_info['comment_length']); + + // New position + $pos += $header_info['comment_length']; + + // Append this file/dir to the entry list + $entries[] = $header_info; + } + + // Check whether all entries where read sucessfully + if(count($entries) != $cd_entries) + return false; + + // Handle files/dirs + foreach($entries as $entry) { + // Is a dir? + if($entry['external_attributes'] & 16) { + $this->add_dir($entry['name']); + continue; + } + + // Get local file header + $header = substr($string, $entry['offset'], 30); + + // Unpack the header information + $header_info = @unpack('Vheader/'. + 'vversion_needed/'. + 'vgeneral_purpose/'. + 'vcompression_method/'. + 'vlast_mod_time/'. + 'vlast_mod_date/'. + 'Vcrc32/'. + 'Vcompressed_size/'. + 'Vuncompressed_size/'. + 'vname_length/'. + 'vextra_length', + $header); + + // Valid header? + if($header_info['header'] != 67324752) + return false; + + // Get content start position + $start = $entry['offset'] + 30 + $header_info['name_length'] + $header_info['extra_length']; + + // Get the compressed data + $data = substr($string, $start, $header_info['compressed_size']); + + // Detect compression type + switch($header_info['compression_method']) { + // No compression + case 0: + // Ne decompression needed + $content = $data; + break; + + // Gzip + case 8: + if(!function_exists('gzinflate')) + return false; + + // Uncompress data + $content = gzinflate($data); + break; + + // Bzip2 + case 12: + if(!function_exists('bzdecompress')) + return false; + + // Decompress data + $content = bzdecompress($data); + break; + + // Compression not supported -> error + default: + return false; + } + + // Try to add file + if(!$this->add_file($entry['name'], $content)) + return false; + } + + return true; + } +} + +function &byref() { + $x = array(); + return $x; +} + +// Test highlighting of magic methods and variables +class MagicClass { + public $magic_str; + public $ordinary_str; + + public function __construct($some_var) { + $this->magic_str = __FILE__; + $this->ordinary_str = $some_var; + } + + public function __toString() { + return $this->magic_str; + } + + public function nonMagic() { + return $this->ordinary_str; + } +} + +$magic = new MagicClass(__DIR__); +__toString(); +$magic->nonMagic(); +$magic->__toString(); + + echo <<<EOF + + Test the heredocs... + + EOF; + +echo <<<"some_delimiter" +more heredoc testing +continues on this line +some_delimiter; + +?> + + +---tokens--- +'<?php' Comment.Preproc +'\n\n' Text + +'$disapproval_ಠ_ಠ_of_php' Name.Variable +' ' Text +'=' Operator +' ' Text +"'unicode var'" Literal.String.Single +';' Punctuation +'\n\n' Text + +'$test' Name.Variable +' ' Text +'=' Operator +' ' Text +'function' Keyword +'(' Punctuation +'$a' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +' ' Text +'$lambda' Name.Variable +' ' Text +'=' Operator +' ' Text +'1' Literal.Number.Integer +';' Punctuation +' ' Text +'}' Punctuation +'\n\n' Text + +'/**\n * Zip class file\n *\n * @package fnord.bb\n * @subpackage archive\n */' Literal.String.Doc +'\n\n' Text + +'// Unlock?\n' Comment.Single + +'if' Keyword +'(' Punctuation +'!' Operator +'defined' Name.Builtin +'(' Punctuation +"'UNLOCK'" Literal.String.Single +')' Punctuation +' ' Text +'||' Operator +' ' Text +'!' Operator +'UNLOCK' Name.Other +')' Punctuation +'\n ' Text +'die' Keyword +'();' Punctuation +'\n \n' Text + +'// Load the parent archive class\n' Comment.Single + +'require_once' Keyword +'(' Punctuation +'ROOT_PATH' Name.Other +'.' Operator +"'/classes/archive.class.php'" Literal.String.Single +');' Punctuation +'\n\n' Text + +'class' Keyword +' ' Text +'Zip\\Zippಠ_ಠ_' Name.Class +' ' Text +'{' Punctuation +'\n\n' Text + +'}' Punctuation +'\n\n' Text + +'/**\n * Zip class\n *\n * @author Manni <manni@fnord.name>\n * @copyright Copyright (c) 2006, Manni\n * @version 1.0\n * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt\n * @link http://mannithedark.is-a-geek.net/\n * @since 1.0\n * @package fnord.bb\n * @subpackage archive\n */' Literal.String.Doc +'\n' Text + +'class' Keyword +' ' Text +'Zip' Name.Class +' ' Text +'extends' Keyword +' ' Text +'Archive' Name.Other +' ' Text +'{' Punctuation +'\n ' Text +"/**\n * Outputs the zip file\n *\n * This function creates the zip file with the dirs and files given.\n * If the optional parameter $file is given, the zip file is will be\n * saved at that location. Otherwise the function returns the zip file's content.\n *\n * @access public\n *\n * @link http://www.pkware.com/business_and_developers/developer/popups/appnote.txt\n * @param string $filename The path where the zip file will be saved\n *\n * @return bool|string Returns either true if the fil is sucessfully created or the content of the zip file\n */" Literal.String.Doc +'\n ' Text +'function' Keyword +' ' Text +'out' Name.Function +'(' Punctuation +'$filename' Name.Variable +' ' Text +'=' Operator +' ' Text +'false' Keyword +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Empty output\n' Comment.Single + +' ' Text +'$file_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +' ' Text +'// Data of the file part\n' Comment.Single + +' ' Text +'$cd_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +' ' Text +'// Data of the central directory\n' Comment.Single + +'\n ' Text +'// Sort dirs and files by path length\n' Comment.Single + +' ' Text +'uksort' Name.Builtin +'(' Punctuation +'$this' Name.Variable +'->' Operator +'dirs' Name.Attribute +',' Punctuation +' ' Text +"'sort_by_length'" Literal.String.Single +');' Punctuation +'\n ' Text +'uksort' Name.Builtin +'(' Punctuation +'$this' Name.Variable +'->' Operator +'files' Name.Attribute +',' Punctuation +' ' Text +"'sort_by_length'" Literal.String.Single +');' Punctuation +'\n\n ' Text +'// Handle dirs\n' Comment.Single + +' ' Text +'foreach' Keyword +'(' Punctuation +'$this' Name.Variable +'->' Operator +'dirs' Name.Attribute +' ' Text +'as' Keyword +' ' Text +'$dir' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$dir' Name.Variable +' ' Text +'.=' Operator +' ' Text +"'/'" Literal.String.Single +';' Punctuation +'\n ' Text +'// File part\n' Comment.Single + +'\n ' Text +'// Reset dir data\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n\n ' Text +'// Local file header\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x03' Literal.String.Escape +'\\x04' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// Local file header signature\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'10' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version needed to extract\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// General purpose bit flag\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Compression method\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file time\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file date\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$dir' Name.Variable +'));' Punctuation +' ' Text +'// File name length\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Extra field length\n' Comment.Single + +'\n ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'$dir' Name.Variable +';' Punctuation +' ' Text +'// File name\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Extra field (is empty)\n' Comment.Single + +'\n ' Text +'// File data\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Dirs have no file data\n' Comment.Single + +'\n ' Text +'// Data descriptor\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +'\n ' Text +'// Save current offset\n' Comment.Single + +' ' Text +'$offset' Name.Variable +' ' Text +'=' Operator +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'implode' Name.Builtin +'(' Punctuation +"''" Literal.String.Single +',' Punctuation +' ' Text +'$file_data' Name.Variable +'));' Punctuation +'\n\n ' Text +'// Append dir data to the file part\n' Comment.Single + +' ' Text +'$file_data' Name.Variable +'[]' Punctuation +' ' Text +'=' Operator +' ' Text +'$dir_data' Name.Variable +';' Punctuation +'\n\n ' Text +'// Central directory\n' Comment.Single + +'\n ' Text +'// Reset dir data\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n\n ' Text +'// File header\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x01' Literal.String.Escape +'\\x02' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// Local file header signature\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version made by\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'10' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version needed to extract\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// General purpose bit flag\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Compression method\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file time\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file date\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$dir' Name.Variable +'));' Punctuation +' ' Text +'// File name length\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Extra field length\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// File comment length\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Disk number start\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Internal file attributes\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'16' Literal.Number.Integer +');' Punctuation +' ' Text +'// External file attributes\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'$offset' Name.Variable +');' Punctuation +' ' Text +'// Relative offset of local header\n' Comment.Single + +'\n ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +'$dir' Name.Variable +';' Punctuation +' ' Text +'// File name\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Extra field (is empty)\n' Comment.Single + +' ' Text +'$dir_data' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// File comment (is empty)\n' Comment.Single + +'\n ' Text +'/*\n // Data descriptor\n $dir_data .= pack("V", 0); // crc-32\n $dir_data .= pack("V", 0); // Compressed size\n $dir_data .= pack("V", 0); // Uncompressed size\n */' Comment.Multiline +'\n \n ' Text +'// Append dir data to the central directory data\n' Comment.Single + +' ' Text +'$cd_data' Name.Variable +'[]' Punctuation +' ' Text +'=' Operator +' ' Text +'$dir_data' Name.Variable +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Handle files\n' Comment.Single + +' ' Text +'foreach' Keyword +'(' Punctuation +'$this' Name.Variable +'->' Operator +'files' Name.Attribute +' ' Text +'as' Keyword +' ' Text +'$name' Name.Variable +' ' Text +'=>' Operator +' ' Text +'$file' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Get values\n' Comment.Single + +' ' Text +'$content' Name.Variable +' ' Text +'=' Operator +' ' Text +'$file' Name.Variable +'[' Punctuation +'0' Literal.Number.Integer +'];' Punctuation +'\n \n ' Text +'// File part\n' Comment.Single + +'\n ' Text +'// Reset file data\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n \n ' Text +'// Detect possible compressions\n' Comment.Single + +' ' Text +'// Use deflate\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'function_exists' Name.Builtin +'(' Punctuation +"'gzdeflate'" Literal.String.Single +'))' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$method' Name.Variable +' ' Text +'=' Operator +' ' Text +'8' Literal.Number.Integer +';' Punctuation +'\n\n ' Text +'// Compress file content\n' Comment.Single + +' ' Text +'$compressed_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'gzdeflate' Name.Builtin +'(' Punctuation +'$content' Name.Variable +');' Punctuation +'\n\n ' Text +'// Use bzip2\n' Comment.Single + +' ' Text +'}' Punctuation +' ' Text +'elseif' Keyword +'(' Punctuation +'function_exists' Name.Builtin +'(' Punctuation +"'bzcompress'" Literal.String.Single +'))' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$method' Name.Variable +' ' Text +'=' Operator +' ' Text +'12' Literal.Number.Integer +';' Punctuation +'\n\n ' Text +'// Compress file content\n' Comment.Single + +' ' Text +'$compressed_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'bzcompress' Name.Builtin +'(' Punctuation +'$content' Name.Variable +');' Punctuation +'\n\n ' Text +'// No compression\n' Comment.Single + +' ' Text +'}' Punctuation +' ' Text +'else' Keyword +' ' Text +'{' Punctuation +'\n ' Text +'$method' Name.Variable +' ' Text +'=' Operator +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n\n ' Text +'// Do not compress the content :P\n' Comment.Single + +' ' Text +'$compressed_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'$content' Name.Variable +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Local file header\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x03' Literal.String.Escape +'\\x04' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// Local file header signature\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'20' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version needed to extract\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// General purpose bit flag\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'$method' Name.Variable +');' Punctuation +' ' Text +'// Compression method\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file time\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file date\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'crc32' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$compressed_data' Name.Variable +'));' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$name' Name.Variable +'));' Punctuation +' ' Text +'// File name length\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Extra field length\n' Comment.Single + +'\n ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'$name' Name.Variable +';' Punctuation +' ' Text +'// File name\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Extra field (is empty)\n' Comment.Single + +'\n ' Text +'// File data\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'$compressed_data' Name.Variable +';' Punctuation +'\n \n ' Text +'// Data descriptor\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'crc32' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$compressed_data' Name.Variable +'));' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +'\n ' Text +'// Save current offset\n' Comment.Single + +' ' Text +'$offset' Name.Variable +' ' Text +'=' Operator +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'implode' Name.Builtin +'(' Punctuation +"''" Literal.String.Single +',' Punctuation +' ' Text +'$file_data' Name.Variable +'));' Punctuation +'\n\n ' Text +'// Append file data to the file part\n' Comment.Single + +' ' Text +'$file_data' Name.Variable +'[]' Punctuation +' ' Text +'=' Operator +' ' Text +'$fd' Name.Variable +';' Punctuation +'\n\n ' Text +'// Central directory\n' Comment.Single + +'\n ' Text +'// Reset file data\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n\n ' Text +'// File header\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x01' Literal.String.Escape +'\\x02' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// Local file header signature\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version made by\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'20' Literal.Number.Integer +');' Punctuation +' ' Text +'// Version needed to extract\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// General purpose bit flag\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'$method' Name.Variable +');' Punctuation +' ' Text +'// Compression method\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file time\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Last mod file date\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'crc32' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// crc-32\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$compressed_data' Name.Variable +'));' Punctuation +' ' Text +'// Compressed size\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$content' Name.Variable +'));' Punctuation +' ' Text +'// Uncompressed size\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$name' Name.Variable +'));' Punctuation +' ' Text +'// File name length\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Extra field length\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// File comment length\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Disk number start\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Internal file attributes\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'32' Literal.Number.Integer +');' Punctuation +' ' Text +'// External file attributes\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'$offset' Name.Variable +');' Punctuation +' ' Text +'// Relative offset of local header\n' Comment.Single + +'\n ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'$name' Name.Variable +';' Punctuation +' ' Text +'// File name\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Extra field (is empty)\n' Comment.Single + +' ' Text +'$fd' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// File comment (is empty)\n' Comment.Single + +'\n ' Text +'/*\n // Data descriptor\n $fd .= pack("V", crc32($content)); // crc-32\n $fd .= pack("V", strlen($compressed_data)); // Compressed size\n $fd .= pack("V", strlen($content)); // Uncompressed size\n */' Comment.Multiline +'\n\n ' Text +'// Append file data to the central directory data\n' Comment.Single + +' ' Text +'$cd_data' Name.Variable +'[]' Punctuation +' ' Text +'=' Operator +' ' Text +'$fd' Name.Variable +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Digital signature\n' Comment.Single + +' ' Text +'$digital_signature' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n ' Text +'$digital_signature' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x05' Literal.String.Escape +'\\x05' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// Header signature\n' Comment.Single + +' ' Text +'$digital_signature' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Size of data\n' Comment.Single + +' ' Text +'$digital_signature' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// Signature data (is empty)\n' Comment.Single + +'\n ' Text +'$tmp_file_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'implode' Name.Builtin +'(' Punctuation +"''" Literal.String.Single +',' Punctuation +' ' Text +'$file_data' Name.Variable +');' Punctuation +' ' Text +'// File data\n' Comment.Single + +' ' Text +'$tmp_cd_data' Name.Variable +' ' Text +'=' Operator +' ' Text +'implode' Name.Builtin +'(' Punctuation +"''" Literal.String.Single +',' Punctuation +' ' Text +'$cd_data' Name.Variable +')' Punctuation +'.' Operator +' ' Text +'// Central directory\n' Comment.Single + +' ' Text +'$digital_signature' Name.Variable +';' Punctuation +' ' Text +'// Digital signature\n' Comment.Single + +'\n ' Text +'// End of central directory\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +'\n ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x05' Literal.String.Escape +'\\x06' Literal.String.Escape +'"' Literal.String.Double +';' Punctuation +' ' Text +'// End of central dir signature\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Number of this disk\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// Number of the disk with the start of the central directory\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'count' Name.Builtin +'(' Punctuation +'$cd_data' Name.Variable +'));' Punctuation +' ' Text +'// Total number of entries in the central directory on this disk\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'count' Name.Builtin +'(' Punctuation +'$cd_data' Name.Variable +'));' Punctuation +' ' Text +'// Total number of entries in the central directory\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$tmp_cd_data' Name.Variable +'));' Punctuation +' ' Text +'// Size of the central directory\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'V' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$tmp_file_data' Name.Variable +'));' Punctuation +' ' Text +'// Offset of start of central directory with respect to the starting disk number\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +'pack' Name.Builtin +'(' Punctuation +'"' Literal.String.Double +'v' Literal.String.Double +'"' Literal.String.Double +',' Punctuation +' ' Text +'0' Literal.Number.Integer +');' Punctuation +' ' Text +'// .ZIP file comment length\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'.=' Operator +' ' Text +"''" Literal.String.Single +';' Punctuation +' ' Text +'// .ZIP file comment (is empty)\n' Comment.Single + +'\n ' Text +'// Content of the zip file\n' Comment.Single + +' ' Text +'$data' Name.Variable +' ' Text +'=' Operator +' ' Text +'$tmp_file_data' Name.Variable +'.' Operator +'\n ' Text +'// $extra_data_record.\n' Comment.Single + +' ' Text +'$tmp_cd_data' Name.Variable +'.' Operator +'\n ' Text +'$eof_cd' Name.Variable +';' Punctuation +'\n\n ' Text +'// Return content?\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'$filename' Name.Variable +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'$data' Name.Variable +';' Punctuation +'\n \n ' Text +'// Write to file\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'file_put_contents' Name.Builtin +'(' Punctuation +'$filename' Name.Variable +',' Punctuation +' ' Text +'$data' Name.Variable +');' Punctuation +'\n ' Text +'}' Punctuation +'\n \n ' Text +"/**\n * Load a zip file\n *\n * This function loads the files and dirs from a zip file from the harddrive.\n *\n * @access public\n *\n * @param string $file The path to the zip file\n * @param bool $reset Reset the files and dirs before adding the zip file's content?\n *\n * @return bool Returns true if the file was loaded sucessfully\n */" Literal.String.Doc +'\n ' Text +'function' Keyword +' ' Text +'load_file' Name.Function +'(' Punctuation +'$file' Name.Variable +',' Punctuation +' ' Text +'$reset' Name.Variable +' ' Text +'=' Operator +' ' Text +'true' Keyword +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Check whether the file exists\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'file_exists' Name.Builtin +'(' Punctuation +'$file' Name.Variable +'))' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Load the files content\n' Comment.Single + +' ' Text +'$content' Name.Variable +' ' Text +'=' Operator +' ' Text +'@' Operator +'file_get_contents' Name.Builtin +'(' Punctuation +'$file' Name.Variable +');' Punctuation +'\n\n ' Text +'// Return false if the file cannot be opened\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'$content' Name.Variable +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Read the zip\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'$this' Name.Variable +'->' Operator +'load_string' Name.Attribute +'(' Punctuation +'$content' Name.Variable +',' Punctuation +' ' Text +'$reset' Name.Variable +');' Punctuation +'\n ' Text +'}' Punctuation +'\n \n ' Text +"/**\n * Load a zip string\n *\n * This function loads the files and dirs from a string\n *\n * @access public\n *\n * @param string $string The string the zip is generated from\n * @param bool $reset Reset the files and dirs before adding the zip file's content?\n *\n * @return bool Returns true if the string was loaded sucessfully\n */" Literal.String.Doc +'\n ' Text +'function' Keyword +' ' Text +'load_string' Name.Function +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'$reset' Name.Variable +' ' Text +'=' Operator +' ' Text +'true' Keyword +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Reset the zip?\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$reset' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$this' Name.Variable +'->' Operator +'dirs' Name.Attribute +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +'\n ' Text +'$this' Name.Variable +'->' Operator +'files' Name.Attribute +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Get the starting position of the end of central directory record\n' Comment.Single + +' ' Text +'$start' Name.Variable +' ' Text +'=' Operator +' ' Text +'strpos' Name.Builtin +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x05' Literal.String.Escape +'\\x06' Literal.String.Escape +'"' Literal.String.Double +');' Punctuation +'\n\n ' Text +'// Error\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$start' Name.Variable +' ' Text +'===' Operator +' ' Text +'false' Keyword +')' Punctuation +'\n ' Text +'die' Keyword +'(' Punctuation +"'Could not find the end of central directory record'" Literal.String.Single +');' Punctuation +'\n\n ' Text +'// Get the ecdr\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'$start' Name.Variable +'+' Operator +'4' Literal.Number.Integer +',' Punctuation +' ' Text +'18' Literal.Number.Integer +');' Punctuation +'\n\n ' Text +'// Unpack the ecdr infos\n' Comment.Single + +' ' Text +'$eof_cd' Name.Variable +' ' Text +'=' Operator +' ' Text +'unpack' Name.Builtin +'(' Punctuation +"'vdisc1/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vdisc2/'" Literal.String.Single +'.' Operator +'\n ' Text +"'ventries1/'" Literal.String.Single +'.' Operator +'\n ' Text +"'ventries2/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vsize/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Voffset/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vcomment_lenght'" Literal.String.Single +',' Punctuation +' ' Text +'$eof_cd' Name.Variable +');' Punctuation +'\n\n ' Text +'// Do not allow multi disc zips\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$eof_cd' Name.Variable +'[' Punctuation +"'disc1'" Literal.String.Single +']' Punctuation +' ' Text +'!=' Operator +' ' Text +'0' Literal.Number.Integer +')' Punctuation +'\n ' Text +'die' Keyword +'(' Punctuation +"'multi disk stuff is not yet implemented :/'" Literal.String.Single +');' Punctuation +'\n\n ' Text +'// Save the interesting values\n' Comment.Single + +' ' Text +'$cd_entries' Name.Variable +' ' Text +'=' Operator +' ' Text +'$eof_cd' Name.Variable +'[' Punctuation +"'entries1'" Literal.String.Single +'];' Punctuation +'\n ' Text +'$cd_size' Name.Variable +' ' Text +'=' Operator +' ' Text +'$eof_cd' Name.Variable +'[' Punctuation +"'size'" Literal.String.Single +'];' Punctuation +'\n ' Text +'$cd_offset' Name.Variable +' ' Text +'=' Operator +' ' Text +'$eof_cd' Name.Variable +'[' Punctuation +"'offset'" Literal.String.Single +'];' Punctuation +'\n\n ' Text +'// Get the central directory record\n' Comment.Single + +' ' Text +'$cdr' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'$cd_offset' Name.Variable +',' Punctuation +' ' Text +'$cd_size' Name.Variable +');' Punctuation +'\n\n ' Text +'// Reset the position and the list of the entries\n' Comment.Single + +' ' Text +'$pos' Name.Variable +' ' Text +'=' Operator +' ' Text +'0' Literal.Number.Integer +';' Punctuation +'\n ' Text +'$entries' Name.Variable +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +'\n\n ' Text +'// Handle cdr\n' Comment.Single + +' ' Text +'while' Keyword +'(' Punctuation +'$pos' Name.Variable +' ' Text +'<' Operator +' ' Text +'strlen' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +'))' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Check header signature\n' Comment.Single + +' ' Text +'// Digital signature\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +',' Punctuation +' ' Text +'4' Literal.Number.Integer +')' Punctuation +' ' Text +'==' Operator +' ' Text +'"' Literal.String.Double +'\\x50' Literal.String.Escape +'\\x4b' Literal.String.Escape +'\\x05' Literal.String.Escape +'\\x05' Literal.String.Escape +'"' Literal.String.Double +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Get digital signature size\n' Comment.Single + +' ' Text +'$tmp_info' Name.Variable +' ' Text +'=' Operator +' ' Text +'unpack' Name.Builtin +'(' Punctuation +"'vsize'" Literal.String.Single +',' Punctuation +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +' ' Text +'+' Operator +' ' Text +'4' Literal.Number.Integer +',' Punctuation +' ' Text +'2' Literal.Number.Integer +'));' Punctuation +'\n\n ' Text +'// Read out the digital signature\n' Comment.Single + +' ' Text +'$digital_sig' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$header' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +' ' Text +'+' Operator +' ' Text +'6' Literal.Number.Integer +',' Punctuation +' ' Text +'$tmp_info' Name.Variable +'[' Punctuation +"'size'" Literal.String.Single +']);' Punctuation +'\n\n ' Text +'break' Keyword +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Get file header\n' Comment.Single + +' ' Text +'$header' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +',' Punctuation +' ' Text +'46' Literal.Number.Integer +');' Punctuation +'\n\n ' Text +'// Unpack the header information\n' Comment.Single + +' ' Text +'$header_info' Name.Variable +' ' Text +'=' Operator +' ' Text +'@' Operator +'unpack' Name.Builtin +'(' Punctuation +"'Vheader/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vversion_made_by/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vversion_needed/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vgeneral_purpose/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vcompression_method/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vlast_mod_time/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vlast_mod_date/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vcrc32/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vcompressed_size/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vuncompressed_size/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vname_length/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vextra_length/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vcomment_length/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vdisk_number/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vinternal_attributes/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vexternal_attributes/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Voffset'" Literal.String.Single +',' Punctuation +'\n ' Text +'$header' Name.Variable +');' Punctuation +'\n\n ' Text +'// Valid header?\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$header_info' Name.Variable +'[' Punctuation +"'header'" Literal.String.Single +']' Punctuation +' ' Text +'!=' Operator +' ' Text +'33639248' Literal.Number.Integer +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// New position\n' Comment.Single + +' ' Text +'$pos' Name.Variable +' ' Text +'+=' Operator +' ' Text +'46' Literal.Number.Integer +';' Punctuation +'\n\n ' Text +'// Read out the file name\n' Comment.Single + +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'name'" Literal.String.Single +']' Punctuation +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +',' Punctuation +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'name_length'" Literal.String.Single +']);' Punctuation +'\n\n ' Text +'// New position\n' Comment.Single + +' ' Text +'$pos' Name.Variable +' ' Text +'+=' Operator +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'name_length'" Literal.String.Single +'];' Punctuation +'\n\n ' Text +'// Read out the extra stuff\n' Comment.Single + +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'extra'" Literal.String.Single +']' Punctuation +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +',' Punctuation +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'extra_length'" Literal.String.Single +']);' Punctuation +'\n\n ' Text +'// New position\n' Comment.Single + +' ' Text +'$pos' Name.Variable +' ' Text +'+=' Operator +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'extra_length'" Literal.String.Single +'];' Punctuation +'\n\n ' Text +'// Read out the comment\n' Comment.Single + +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'comment'" Literal.String.Single +']' Punctuation +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$cdr' Name.Variable +',' Punctuation +' ' Text +'$pos' Name.Variable +',' Punctuation +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'comment_length'" Literal.String.Single +']);' Punctuation +'\n\n ' Text +'// New position\n' Comment.Single + +' ' Text +'$pos' Name.Variable +' ' Text +'+=' Operator +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'comment_length'" Literal.String.Single +'];' Punctuation +'\n\n ' Text +'// Append this file/dir to the entry list\n' Comment.Single + +' ' Text +'$entries' Name.Variable +'[]' Punctuation +' ' Text +'=' Operator +' ' Text +'$header_info' Name.Variable +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Check whether all entries where read sucessfully\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'count' Name.Builtin +'(' Punctuation +'$entries' Name.Variable +')' Punctuation +' ' Text +'!=' Operator +' ' Text +'$cd_entries' Name.Variable +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Handle files/dirs\n' Comment.Single + +' ' Text +'foreach' Keyword +'(' Punctuation +'$entries' Name.Variable +' ' Text +'as' Keyword +' ' Text +'$entry' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// Is a dir?\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$entry' Name.Variable +'[' Punctuation +"'external_attributes'" Literal.String.Single +']' Punctuation +' ' Text +'&' Operator +' ' Text +'16' Literal.Number.Integer +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$this' Name.Variable +'->' Operator +'add_dir' Name.Attribute +'(' Punctuation +'$entry' Name.Variable +'[' Punctuation +"'name'" Literal.String.Single +']);' Punctuation +'\n ' Text +'continue' Keyword +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Get local file header\n' Comment.Single + +' ' Text +'$header' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'$entry' Name.Variable +'[' Punctuation +"'offset'" Literal.String.Single +'],' Punctuation +' ' Text +'30' Literal.Number.Integer +');' Punctuation +'\n\n ' Text +'// Unpack the header information\n' Comment.Single + +' ' Text +'$header_info' Name.Variable +' ' Text +'=' Operator +' ' Text +'@' Operator +'unpack' Name.Builtin +'(' Punctuation +"'Vheader/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vversion_needed/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vgeneral_purpose/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vcompression_method/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vlast_mod_time/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vlast_mod_date/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vcrc32/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vcompressed_size/'" Literal.String.Single +'.' Operator +'\n ' Text +"'Vuncompressed_size/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vname_length/'" Literal.String.Single +'.' Operator +'\n ' Text +"'vextra_length'" Literal.String.Single +',' Punctuation +'\n ' Text +'$header' Name.Variable +');' Punctuation +'\n\n ' Text +'// Valid header?\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'$header_info' Name.Variable +'[' Punctuation +"'header'" Literal.String.Single +']' Punctuation +' ' Text +'!=' Operator +' ' Text +'67324752' Literal.Number.Integer +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Get content start position\n' Comment.Single + +' ' Text +'$start' Name.Variable +' ' Text +'=' Operator +' ' Text +'$entry' Name.Variable +'[' Punctuation +"'offset'" Literal.String.Single +']' Punctuation +' ' Text +'+' Operator +' ' Text +'30' Literal.Number.Integer +' ' Text +'+' Operator +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'name_length'" Literal.String.Single +']' Punctuation +' ' Text +'+' Operator +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'extra_length'" Literal.String.Single +'];' Punctuation +'\n\n ' Text +'// Get the compressed data\n' Comment.Single + +' ' Text +'$data' Name.Variable +' ' Text +'=' Operator +' ' Text +'substr' Name.Builtin +'(' Punctuation +'$string' Name.Variable +',' Punctuation +' ' Text +'$start' Name.Variable +',' Punctuation +' ' Text +'$header_info' Name.Variable +'[' Punctuation +"'compressed_size'" Literal.String.Single +']);' Punctuation +'\n\n ' Text +'// Detect compression type\n' Comment.Single + +' ' Text +'switch' Keyword +'(' Punctuation +'$header_info' Name.Variable +'[' Punctuation +"'compression_method'" Literal.String.Single +'])' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'// No compression\n' Comment.Single + +' ' Text +'case' Keyword +' ' Text +'0' Literal.Number.Integer +':' Operator +'\n ' Text +'// Ne decompression needed\n' Comment.Single + +' ' Text +'$content' Name.Variable +' ' Text +'=' Operator +' ' Text +'$data' Name.Variable +';' Punctuation +'\n ' Text +'break' Keyword +';' Punctuation +'\n\n ' Text +'// Gzip\n' Comment.Single + +' ' Text +'case' Keyword +' ' Text +'8' Literal.Number.Integer +':' Operator +'\n ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'function_exists' Name.Builtin +'(' Punctuation +"'gzinflate'" Literal.String.Single +'))' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Uncompress data\n' Comment.Single + +' ' Text +'$content' Name.Variable +' ' Text +'=' Operator +' ' Text +'gzinflate' Name.Builtin +'(' Punctuation +'$data' Name.Variable +');' Punctuation +'\n ' Text +'break' Keyword +';' Punctuation +'\n\n ' Text +'// Bzip2\n' Comment.Single + +' ' Text +'case' Keyword +' ' Text +'12' Literal.Number.Integer +':' Operator +'\n ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'function_exists' Name.Builtin +'(' Punctuation +"'bzdecompress'" Literal.String.Single +'))' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n\n ' Text +'// Decompress data\n' Comment.Single + +' ' Text +'$content' Name.Variable +' ' Text +'=' Operator +' ' Text +'bzdecompress' Name.Builtin +'(' Punctuation +'$data' Name.Variable +');' Punctuation +'\n ' Text +'break' Keyword +';' Punctuation +'\n\n ' Text +'// Compression not supported -> error\n' Comment.Single + +' ' Text +'default' Keyword +':' Operator +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'// Try to add file\n' Comment.Single + +' ' Text +'if' Keyword +'(' Punctuation +'!' Operator +'$this' Name.Variable +'->' Operator +'add_file' Name.Attribute +'(' Punctuation +'$entry' Name.Variable +'[' Punctuation +"'name'" Literal.String.Single +'],' Punctuation +' ' Text +'$content' Name.Variable +'))' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'return' Keyword +' ' Text +'true' Keyword +';' Punctuation +'\n ' Text +'}' Punctuation +'\n' Text + +'}' Punctuation +'\n\n' Text + +'function' Keyword +' ' Text +'&' Operator +'byref' Name.Function +'()' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$x' Name.Variable +' ' Text +'=' Operator +' ' Text +'array' Keyword +'();' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'$x' Name.Variable +';' Punctuation +'\n' Text + +'}' Punctuation +'\n\n' Text + +'// Test highlighting of magic methods and variables\n' Comment.Single + +'class' Keyword +' ' Text +'MagicClass' Name.Class +' ' Text +'{' Punctuation +'\n ' Text +'public' Keyword +' ' Text +'$magic_str' Name.Variable +';' Punctuation +'\n ' Text +'public' Keyword +' ' Text +'$ordinary_str' Name.Variable +';' Punctuation +'\n\n ' Text +'public' Keyword +' ' Text +'function' Keyword +' ' Text +'__construct' Name.Function.Magic +'(' Punctuation +'$some_var' Name.Variable +')' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'$this' Name.Variable +'->' Operator +'magic_str' Name.Attribute +' ' Text +'=' Operator +' ' Text +'__FILE__' Name.Constant +';' Punctuation +'\n ' Text +'$this' Name.Variable +'->' Operator +'ordinary_str' Name.Attribute +' ' Text +'=' Operator +' ' Text +'$some_var' Name.Variable +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'public' Keyword +' ' Text +'function' Keyword +' ' Text +'__toString' Name.Function.Magic +'()' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'$this' Name.Variable +'->' Operator +'magic_str' Name.Attribute +';' Punctuation +'\n ' Text +'}' Punctuation +'\n\n ' Text +'public' Keyword +' ' Text +'function' Keyword +' ' Text +'nonMagic' Name.Function +'()' Punctuation +' ' Text +'{' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'$this' Name.Variable +'->' Operator +'ordinary_str' Name.Attribute +';' Punctuation +'\n ' Text +'}' Punctuation +'\n' Text + +'}' Punctuation +'\n\n' Text + +'$magic' Name.Variable +' ' Text +'=' Operator +' ' Text +'new' Keyword +' ' Text +'MagicClass' Name.Other +'(' Punctuation +'__DIR__' Name.Constant +');' Punctuation +'\n' Text + +'__toString' Name.Other +'();' Punctuation +'\n' Text + +'$magic' Name.Variable +'->' Operator +'nonMagic' Name.Attribute +'();' Punctuation +'\n' Text + +'$magic' Name.Variable +'->' Operator +'__toString' Name.Attribute +'();' Punctuation +'\n\n ' Text +'echo' Keyword +' ' Text +'<<<' Literal.String +'EOF' Literal.String.Delimiter +'\n\n Test the heredocs...\n\n ' Literal.String +'EOF' Literal.String.Delimiter +';' Punctuation +'\n' Text + +'\n' Text + +'echo' Keyword +' ' Text +'<<<' Literal.String +'"' Literal.String +'some_delimiter' Literal.String.Delimiter +'"\nmore heredoc testing\ncontinues on this line\n' Literal.String + +'some_delimiter' Literal.String.Delimiter +';' Punctuation +'\n' Text + +'\n' Text + +'?>' Comment.Preproc +'\n' Other diff --git a/tests/lexers/php/example2.txt b/tests/lexers/php/example2.txt new file mode 100644 index 00000000..65e7f1e3 --- /dev/null +++ b/tests/lexers/php/example2.txt @@ -0,0 +1,76 @@ +---input--- +<?php + +$x = array(0123, 0x0a, -0x0a, -0123, 12, -12); + +?> +<?php +$a = 1.234; +$b = 1.2e3; +$c = 7E-10; +?> + +---tokens--- +'<?php' Comment.Preproc +'\n\n' Text + +'$x' Name.Variable +' ' Text +'=' Operator +' ' Text +'array' Keyword +'(' Punctuation +'0123' Literal.Number.Oct +',' Punctuation +' ' Text +'0x0a' Literal.Number.Hex +',' Punctuation +' ' Text +'-' Operator +'0x0a' Literal.Number.Hex +',' Punctuation +' ' Text +'-' Operator +'0123' Literal.Number.Oct +',' Punctuation +' ' Text +'12' Literal.Number.Integer +',' Punctuation +' ' Text +'-' Operator +'12' Literal.Number.Integer +');' Punctuation +'\n\n' Text + +'?>' Comment.Preproc +'\n' Other + +'<?php' Comment.Preproc +'\n' Text + +'$a' Name.Variable +' ' Text +'=' Operator +' ' Text +'1.234' Literal.Number.Float +';' Punctuation +' \n' Text + +'$b' Name.Variable +' ' Text +'=' Operator +' ' Text +'1.2e3' Literal.Number.Float +';' Punctuation +' \n' Text + +'$c' Name.Variable +' ' Text +'=' Operator +' ' Text +'7E-10' Literal.Number.Float +';' Punctuation +'\n' Text + +'?>' Comment.Preproc +'\n' Other |
