Advertisement
jargon

nengame pcre scripting

Dec 30th, 2016
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 22.79 KB | None | 0 0
  1. <?php /** NenGame PHP 0-044 List Module by Timothy Robert Keal 2016 **/
  2. $list_settings=null;
  3. $list_debug=null;
  4. list_initialization();
  5.  
  6. function list_fix(&$list=null,$level=1) {
  7.     $level=intval($level);
  8.     if($level>=1) {
  9.         if(!isset($list))
  10.             $list['ct']=0;
  11.         if($list===null)
  12.             $list['ct']=0;
  13.         if(!isset($list['ct']))
  14.             $list['ct']=0;
  15.         if(!($list['ct']>0))
  16.             $list['ct']=0; 
  17.     }
  18.     if($level>=2) {
  19.         ksort($list);
  20.         $temp['ct']=0;
  21.         foreach($list as $key => $value)
  22.             if(is_numeric($key)) {
  23.                 $temp[$temp['ct']]=$value;
  24.                 $temp['ct']++;
  25.             }
  26.         $list=$temp;
  27.         unset($temp);
  28.     }
  29. }
  30.  
  31. function list_log_debug(&$list=null,$trace=null,$value='') {
  32.     /*
  33.     if($list===null) {
  34.         global $list_debug;
  35.         $list=$list_debug;
  36.     }
  37.     */
  38.     list_fix($list);
  39.     list_manip($list,'add',false,'<tr><td><font color="green" size="+3">'.$value.'</font></td></tr>');
  40.     //echo $list[$list['ct']-1].'<br>';
  41. }
  42.  
  43. function list_initialization() {   
  44.     global $list_settings; 
  45.     global $list_debug;
  46.     $list_settings['debug']='false';
  47.     list_fix($list_debug,2);
  48. }
  49.  
  50. function list_manip(&$ret,$method,$index=false,$value=null,&$errorflag=false) {
  51.     global $list_debug;
  52.     //list_log_debug($debug,null,'list_manip open: "'.htmlentities(var_export($ret,true)).'" "'.htmlentities(var_export($method,true)).'" "'. htmlentities(var_export($index,true)).'" "'.htmlentities(var_export($value,true)).'" "'. htmlentities(var_export($errorflag,true)).'"');
  53.     if(defined($errorflag))
  54.         $errorflag=false;
  55.     if(!is_array($ret)){
  56.         $ret['lock']=true;
  57.         $ret['ct']=0;
  58.         $ret['lock']=false;
  59.     }
  60.     if(is_array($ret)){
  61.         $ret['lock']=false;
  62.         if($ret['ct']===null){
  63.             $ret['lock']=true;
  64.             $ret['ct']=0;
  65.             $ret['lock']=false;
  66.         }
  67.         if($ret['ct']===null){
  68.             $ret['lock']=true;
  69.             $ret['ct']=0;
  70.             $ret['lock']=false;
  71.         }
  72.         if($ret['ct']>=0){
  73.             //list_log_debug($debug,null,'list_manip line: count greater than or equal to zero');
  74.             /*if(defined($method)){
  75.                 list_log_debug($debug,null,'list_manip line: method defined');
  76.             */  switch($method){
  77.                 case 'remove':
  78.                     //list_log_debug($debug,null,'list_manip line: method remove');
  79.                     //if(defined($index)){
  80.                         if(is_numeric($index)){
  81.                             list_log_debug($debug,null,'list_manip line: index numeric');
  82.                             if(index>=0){
  83.                                 //list_log_debug($debug,null,'list_manip line: index greater than or equal to zero');
  84.                                 $ret['lock']=true;
  85.                                 for($i=$index;$i<$ret['ct'];$i++) {
  86.                                     $ret[$i]=$ret[$i+1];
  87.                                 }
  88.                                 unset($ret[$i]);
  89.                                 $ret['ct']--;
  90.                                 $ret['lock']=false;
  91.                             }
  92.                             elseif(index<0){
  93.                                 //list_log_debug($debug,null,'list_manip line: index less than zero');
  94.                                 $ret['lock']=true;
  95.                                 for($i=0;$i>$index;$i--) {
  96.                                     unset($ret[$ret[ct]]);
  97.                                     $ret['ct']--;
  98.                                 }
  99.                                 $ret['lock']=false;
  100.                             }
  101.                         }  
  102.                     /*}
  103.                     else{
  104.                         //list_log_debug($debug,null,'list_manip line: index undefined');
  105.                         $ret['lock']=true;
  106.                         $i=$ret['ct'];
  107.                         unset($ret[$i]);
  108.                         $ret['ct']--;
  109.                         $ret['lock']=false;
  110.                     }*/
  111.                 case 'add':
  112.                     //list_log_debug($debug,null,'list_manip line: method add');
  113.                     //if(defined($value)){
  114.                         /*if(!defined($index)){
  115.                             //list_log_debug($debug,null,'list_manip line: index undefined');
  116.                             $ret['lock']=true;
  117.                             $ret[$ret['ct']]=$value;
  118.                             $ret['ct']++;
  119.                             $ret['lock']=false;
  120.                         }
  121.                         else*/
  122.                         if(is_numeric($index)){
  123.                             //list_log_debug($debug,null,'list_manip line: index numeric');
  124.                             if(($index>=0) && ($index<$ret['ct'])){
  125.                                 $ret['lock']=true;
  126.                                 $ret[$index]=$value;
  127.                                 $ret['ct']++;
  128.                                 $ret['lock']=false;
  129.                             }
  130.                             else{
  131.                                 //if(defined($errorflag))
  132.                                     $errorflag='index out of bounds';                  
  133.                             }
  134.                         }
  135.                         elseif($index===false){
  136.                             //list_log_debug($debug,null,'list_manip line: index false');
  137.                             $ret['lock']=true;
  138.                             $ret[$ret['ct']]=$value;
  139.                             $ret['ct']++;
  140.                             $ret['lock']=false;
  141.                         }
  142.                     //}
  143. //              case 'insert':
  144.                     //list_log_debug($debug,null,'list_manip line: method insert');
  145.                     //if(defined($value)){
  146.                        
  147.                        
  148.                        
  149.                        
  150.                         /*if(!defined($index)){
  151.                             //list_log_debug($debug,null,'list_manip line: index undefined');
  152.                             $ret['lock']=true;
  153.                             $ret[$ret['ct']]=$value;
  154.                             $ret['ct']++;
  155.                             $ret['lock']=false;
  156.                         }
  157.                         else*/
  158. //                      if(is_numeric($index)){
  159.                             //list_log_debug($debug,null,'list_manip line: index numeric');
  160. //                              $ret['lock']=true;
  161. //                              for($i=$ret['ct'];$i>$index;$i++) {
  162. //                                  $ret[$i]=$ret[$i-1];
  163. //                              }
  164. //                              $ret[$i]=$value;
  165. //                              $ret['ct']++;
  166. //                              $ret['lock']=false;
  167.                             /*}
  168.                             else{
  169.                                 //if(defined($errorflag))
  170.                                     $errorflag='index out of bounds';                  
  171.                             }*/
  172. //                      }
  173. //                      elseif($index===false){
  174.                             //list_log_debug($debug,null,'list_manip line: index false');
  175. //                          $ret['lock']=true;
  176. //                          $ret[$ret['ct']]=$value;
  177. //                          $ret['ct']++;
  178. //                          $ret['lock']=false;
  179. //                      }
  180.                
  181.                     //}                
  182.                 }
  183.             //}
  184.         }
  185.         elseif($ret['ct']<0){
  186.             //list_log_debug($debug,null,'list_manip line: count less than zero');
  187.             $ret['lock']=true;
  188.             $ret['ct']=0;
  189.             $ret['lock']=false;
  190.         }
  191.     }
  192.     else{
  193.         $ret['lock']=true;
  194.         $ret['ct']=0;
  195.         $ret['lock']=false;
  196.     }
  197.     //list_log_debug($debug,null,'list_manip close: "'.htmlentities(var_export($ret,true)).'" "'.htmlentities(var_export($method,true)).'" "'. htmlentities(var_export($index,true)).'" "'.htmlentities(var_export($value,true)).'" "'. htmlentities(var_export($errorflag,true)).'"');
  198.     return $ret;
  199. }
  200.  
  201. function list_from_stream_contents($fn) {
  202.     global $list_debug;
  203.     global $list_settings;
  204.     if($handle=$fopen($fn,'r')) {
  205.         $dat=stream_get_contents($handle,-1);
  206.         $ret['ct']=0;
  207.     }
  208.     else {
  209.         $ret['ct']=0;
  210.     }
  211. return $ret;
  212. }
  213. function string_shorten($source='',$sep='..',$max=30,$position=0.8){
  214.     global $list_debug;
  215.  
  216.     $source=strval($source);
  217.     if(strlen($source)===0)
  218.         return '';
  219.  
  220.     $max=intval($max);
  221.     if($max<1)
  222.         $max=1;
  223.  
  224.     if(strlen($source)<=$max)
  225.         return $source;
  226.    
  227.     if(strlen($sep)>=$max)
  228.         return substr($source,0,$max);
  229.    
  230.     $position=floatval($position);
  231.     if($position<0)
  232.         $position=0;
  233.     if($position>1)
  234.         $position=1;
  235.    
  236.     $span[0]=intval(floor(floatval($max-1)*$position));
  237.     $span[1]=$max-$span[0]-strlen($sep);
  238.  
  239.     if($span[1]<0){
  240.         $span[0]=$max-strlen($sep);
  241.         $span[1]=0;
  242.     }
  243.    
  244.     return substr($source,0,$span[0]).$sep.substr($source,-$span[1],$span[1]);
  245. }
  246. function string_from_source($source='',$type='string'){
  247.     global $list_debug;
  248.     global $list_settings;
  249.     $source=strval($source);
  250.    
  251.     switch($type){
  252.     case 'string':
  253.         if($list_settings['debug']==='true')
  254.             list_log_debug($debug,null,'list.'.htmlentities($type).'.length="<font color="red"><tt>'.strlen($source).'</tt></font>"');
  255.         $dat=$source;
  256.         break;
  257.     case 'file':
  258.     if($list_settings['debug']==='true')
  259.         if($list_settings['debug']==='true')
  260.             list_log_debug($debug,null,'list.'.htmlentities($type).'.exists="<font color="red"><tt>'.is_file($source).'</tt></font>"');
  261.         if(is_file($_SERVER['DOCUMENT_ROOT'].$source))
  262.             $dat=file_get_contents($_SERVER['DOCUMENT_ROOT'].$source);
  263.         else
  264.             $dat='';
  265.         break;
  266.     case 'stream':
  267.         if($handle=fopen($source,'r')) {
  268.             if($list_settings['debug']==='true')
  269.                 list_log_debug($debug,null,'list.'.htmlentities($type).'.handle="<font color="red"><tt>'.$handle.'</tt></font>"');
  270.             $dat=stream_get_contents($handle,-1);
  271.             fclose($handle);
  272.         }
  273.         else {
  274.             if($list_settings['debug']==='true')
  275.                 list_log_debug($debug,null,'list.'.htmlentities($type).'.failure');
  276.             $dat='';
  277.         }
  278.         break;
  279.     default:
  280.         if($list_settings['debug']==='true')
  281.             list_log_debug($debug,null,'list.'.htmlentities($type).'.invalid');
  282.         $dat='';
  283.     }
  284.     if($list_settings['debug']==='true') {
  285.         list_log_debug($debug,null,'list.'.$type.'.source="<font color="red"><tt>'.string_shorten(htmlentities($source)).'</tt></font>"');
  286.         list_log_debug($debug,null,'list.'.$type.'.length="<font color="red"><tt>'.strlen($dat).'</tt></font>"');
  287.         list_log_debug($debug,null,'list.'.$type.'.md5="<font color="red"><tt>'.md5($dat).'</tt></font>"');
  288.         list_log_debug($debug,null,'list.'.$type.'.sha1="<font color="red"><tt>'.sha1($dat).'</tt></font>"');
  289.     }
  290.     return $dat;
  291. }  
  292. function list_from_source($source='',$sep="\r\n",$type='string'){
  293.     global $list_debug;
  294.    
  295.     $type=strval($type);
  296.     $source=string_from_source($source,$type);
  297.    
  298.     $ret['ct']=0;
  299.    
  300.     while(strpos($source,$sep)!==false){
  301.         list_manip($ret,'add',false,substr($source,0,strpos($source,$sep)));
  302.         $source=substr($source,strpos($source,$sep)+strlen($sep));
  303.     }
  304.  
  305.     if(strlen($source)>0)
  306.         list_manip($ret,"add",false,$source);
  307.  
  308.     return $ret;
  309. }
  310. function list_from_file_contents($fn,$sep="\r\n",$type='file') {
  311.     return list_from_source($fn,$sep,$type);
  312. }
  313. function list_regex_from_string_contents($arg,$prefix='/nengame/0-050/pcre/syntax.nengame.txt',$striphtml=false){
  314.     global $list_debug;
  315.     global $list_settings;
  316.     $regex=list_ini_from_source($prefix,"\r\n",'string');
  317.     $dat['original']=list_from_source($arg);
  318.     $dat['result']['ct']=$dat['original']['ct'];
  319.     for($ln=0;$ln<$dat['original']['ct'];$ln++){
  320.         $dat['result'][$ln]=$dat['original'][$ln];
  321.         foreach($regex as $key => $value){
  322.             unset($markers);
  323.             switch($key){
  324.                 case 'emotes':
  325.                     $emotes=list_ini_from_file_contents($value);
  326.                     $markers['pattern']['ct']=0;
  327.                     $markers['replace']['ct']=0;
  328.                     foreach($emotes as $emote => $emoji){
  329.                         $markers['pattern'][$markers['pattern']['ct']]='/([\\n ])'.$emote.'([ \\r])/';
  330.                         $markers['replace'][$markers['replace']['ct']]='$1[twitch.emote]v1/'.$emoji.'/2.0[/twitch.emote]$2';
  331.                         $markers['pattern']['ct']++;
  332.                         $markers['replace']['ct']++;
  333.                     }
  334.                     break;
  335.                 default:
  336.                     $markers['pattern']=list_from_file_contents($value.'pattern.txt');
  337.                     $markers['replace']=list_from_file_contents($value.'replace.txt');
  338.             }
  339.             for($marker=0;$marker<$markers['pattern']['ct'];$marker++)
  340.                 for($prior=false;$prior!==$dat['result'][$ln];){
  341.                     $prior=$dat['result'][$ln];
  342.                     $dat['result'][$ln]="\r\n".$dat['result'][$ln]."\r\n";
  343.                     $dat['result'][$ln]=preg_replace($markers['pattern'][$marker],$markers['replace'][$marker],$dat['result'][$ln],1);
  344.                     while(substr($dat['result'][$ln],0,strlen("\r\n"))==="\r\n")
  345.                         $dat['result'][$ln]=substr($dat['result'][$ln],strlen("\r\n"),strlen($dat['result'][$ln])-strlen("\r\n"));
  346.                     while(substr($dat['result'][$ln],strlen($dat['result'][$ln])-strlen("\r\n"),strlen("\r\n"))==="\r\n")
  347.                         $dat['result'][$ln]=substr($dat['result'][$ln],0,strlen($dat['result'][$ln])-strlen("\r\n"));
  348.                 }
  349.         }
  350.     }
  351.     return $dat['result'];
  352. }
  353. function list_regex_from_file_contents($fn,$prefix='/nengame/0-050/pcre/syntax.nengame.txt',$striphtml=false){
  354.     global $list_debug;
  355.     global $list_settings;
  356.     $regex=list_ini_from_file_contents($prefix);
  357.     $dat['original']=list_from_file_contents($fn);
  358.     $dat['result']['ct']=$dat['original']['ct'];
  359.     for($ln=0;$ln<$dat['original']['ct'];$ln++){
  360.         $dat['result'][$ln]=$dat['original'][$ln];
  361.         foreach($regex as $key => $value){
  362.             unset($markers);
  363.             switch($key){
  364.                 case 'emotes':
  365.                     $emotes=list_ini_from_file_contents($value);
  366.                     $markers['pattern']['ct']=0;
  367.                     $markers['replace']['ct']=0;
  368.                     foreach($emotes as $emote => $emoji){
  369.                         $markers['pattern'][$markers['pattern']['ct']]='/([\\n ])'.$emote.'([ \\r])/';
  370.                         $markers['replace'][$markers['replace']['ct']]='$1[twitch.emote]v1/'.$emoji.'/2.0[/twitch.emote]$2';
  371.                         $markers['pattern']['ct']++;
  372.                         $markers['replace']['ct']++;
  373.                     }
  374.                     break;
  375.                 default:
  376.                     $markers['pattern']=list_from_file_contents($value.'pattern.txt');
  377.                     $markers['replace']=list_from_file_contents($value.'replace.txt');
  378.             }
  379.             for($marker=0;$marker<$markers['pattern']['ct'];$marker++)
  380.                 for($prior=false;$prior!==$dat['result'][$ln];){
  381.                     $prior=$dat['result'][$ln];
  382.                     $dat['result'][$ln]="\r\n".$dat['result'][$ln]."\r\n";
  383.                     $dat['result'][$ln]=preg_replace($markers['pattern'][$marker],$markers['replace'][$marker],$dat['result'][$ln],1);
  384.                     while(substr($dat['result'][$ln],0,strlen("\r\n"))==="\r\n")
  385.                         $dat['result'][$ln]=substr($dat['result'][$ln],strlen("\r\n"),strlen($dat['result'][$ln])-strlen("\r\n"));
  386.                     while(substr($dat['result'][$ln],strlen($dat['result'][$ln])-strlen("\r\n"),strlen("\r\n"))==="\r\n")
  387.                         $dat['result'][$ln]=substr($dat['result'][$ln],0,strlen($dat['result'][$ln])-strlen("\r\n"));
  388.                 }
  389.         }
  390.     }
  391.     return $dat['result'];
  392. }
  393. function transliterateString($txt) {
  394.     $transliterationTable = array('á' => 'a', 'Á' => 'A', 'à' => 'a', 'À' => 'A', 'ă' => 'a', 'Ă' => 'A', 'â' => 'a', 'Â' => 'A', 'å' => 'a', 'Å' => 'A', 'ã' => 'a', 'Ã' => 'A', 'ą' => 'a', 'Ą' => 'A', 'ā' => 'a', 'Ā' => 'A', 'ä' => 'ae', 'Ä' => 'AE', 'æ' => 'ae', 'Æ' => 'AE', 'ḃ' => 'b', 'Ḃ' => 'B', 'ć' => 'c', 'Ć' => 'C', 'ĉ' => 'c', 'Ĉ' => 'C', 'č' => 'c', 'Č' => 'C', 'ċ' => 'c', 'Ċ' => 'C', 'ç' => 'c', 'Ç' => 'C', 'ď' => 'd', 'Ď' => 'D', 'ḋ' => 'd', 'Ḋ' => 'D', 'đ' => 'd', 'Đ' => 'D', 'ð' => 'dh', 'Ð' => 'Dh', 'é' => 'e', 'É' => 'E', 'è' => 'e', 'È' => 'E', 'ĕ' => 'e', 'Ĕ' => 'E', 'ê' => 'e', 'Ê' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'ė' => 'e', 'Ė' => 'E', 'ę' => 'e', 'Ę' => 'E', 'ē' => 'e', 'Ē' => 'E', 'ḟ' => 'f', 'Ḟ' => 'F', 'ƒ' => 'f', 'Ƒ' => 'F', 'ğ' => 'g', 'Ğ' => 'G', 'ĝ' => 'g', 'Ĝ' => 'G', 'ġ' => 'g', 'Ġ' => 'G', 'ģ' => 'g', 'Ģ' => 'G', 'ĥ' => 'h', 'Ĥ' => 'H', 'ħ' => 'h', 'Ħ' => 'H', 'í' => 'i', 'Í' => 'I', 'ì' => 'i', 'Ì' => 'I', 'î' => 'i', 'Î' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ĩ' => 'i', 'Ĩ' => 'I', 'į' => 'i', 'Į' => 'I', 'ī' => 'i', 'Ī' => 'I', 'ĵ' => 'j', 'Ĵ' => 'J', 'ķ' => 'k', 'Ķ' => 'K', 'ĺ' => 'l', 'Ĺ' => 'L', 'ľ' => 'l', 'Ľ' => 'L', 'ļ' => 'l', 'Ļ' => 'L', 'ł' => 'l', 'Ł' => 'L', 'ṁ' => 'm', 'Ṁ' => 'M', 'ń' => 'n', 'Ń' => 'N', 'ň' => 'n', 'Ň' => 'N', 'ñ' => 'n', 'Ñ' => 'N', 'ņ' => 'n', 'Ņ' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ò' => 'o', 'Ò' => 'O', 'ô' => 'o', 'Ô' => 'O', 'ő' => 'o', 'Ő' => 'O', 'õ' => 'o', 'Õ' => 'O', 'ø' => 'oe', 'Ø' => 'OE', 'ō' => 'o', 'Ō' => 'O', 'ơ' => 'o', 'Ơ' => 'O', 'ö' => 'oe', 'Ö' => 'OE', 'ṗ' => 'p', 'Ṗ' => 'P', 'ŕ' => 'r', 'Ŕ' => 'R', 'ř' => 'r', 'Ř' => 'R', 'ŗ' => 'r', 'Ŗ' => 'R', 'ś' => 's', 'Ś' => 'S', 'ŝ' => 's', 'Ŝ' => 'S', 'š' => 's', 'Š' => 'S', 'ṡ' => 's', 'Ṡ' => 'S', 'ş' => 's', 'Ş' => 'S', 'ș' => 's', 'Ș' => 'S', 'ß' => 'SS', 'ť' => 't', 'Ť' => 'T', 'ṫ' => 't', 'Ṫ' => 'T', 'ţ' => 't', 'Ţ' => 'T', 'ț' => 't', 'Ț' => 'T', 'ŧ' => 't', 'Ŧ' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ù' => 'u', 'Ù' => 'U', 'ŭ' => 'u', 'Ŭ' => 'U', 'û' => 'u', 'Û' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ű' => 'u', 'Ű' => 'U', 'ũ' => 'u', 'Ũ' => 'U', 'ų' => 'u', 'Ų' => 'U', 'ū' => 'u', 'Ū' => 'U', 'ư' => 'u', 'Ư' => 'U', 'ü' => 'ue', 'Ü' => 'UE', 'ẃ' => 'w', 'Ẃ' => 'W', 'ẁ' => 'w', 'Ẁ' => 'W', 'ŵ' => 'w', 'Ŵ' => 'W', 'ẅ' => 'w', 'Ẅ' => 'W', 'ý' => 'y', 'Ý' => 'Y', 'ỳ' => 'y', 'Ỳ' => 'Y', 'ŷ' => 'y', 'Ŷ' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ź' => 'z', 'Ź' => 'Z', 'ž' => 'z', 'Ž' => 'Z', 'ż' => 'z', 'Ż' => 'Z', 'þ' => 'th', 'Þ' => 'Th', 'µ' => 'u', 'а' => 'a', 'А' => 'a', 'б' => 'b', 'Б' => 'b', 'в' => 'v', 'В' => 'v', 'г' => 'g', 'Г' => 'g', 'д' => 'd', 'Д' => 'd', 'е' => 'e', 'Е' => 'E', 'ё' => 'e', 'Ё' => 'E', 'ж' => 'zh', 'Ж' => 'zh', 'з' => 'z', 'З' => 'z', 'и' => 'i', 'И' => 'i', 'й' => 'j', 'Й' => 'j', 'к' => 'k', 'К' => 'k', 'л' => 'l', 'Л' => 'l', 'м' => 'm', 'М' => 'm', 'н' => 'n', 'Н' => 'n', 'о' => 'o', 'О' => 'o', 'п' => 'p', 'П' => 'p', 'р' => 'r', 'Р' => 'r', 'с' => 's', 'С' => 's', 'т' => 't', 'Т' => 't', 'у' => 'u', 'У' => 'u', 'ф' => 'f', 'Ф' => 'f', 'х' => 'h', 'Х' => 'h', 'ц' => 'c', 'Ц' => 'c', 'ч' => 'ch', 'Ч' => 'ch', 'ш' => 'sh', 'Ш' => 'sh', 'щ' => 'sch', 'Щ' => 'sch', 'ъ' => '', 'Ъ' => '', 'ы' => 'y', 'Ы' => 'y', 'ь' => '', 'Ь' => '', 'э' => 'e', 'Э' => 'e', 'ю' => 'ju', 'Ю' => 'ju', 'я' => 'ja', 'Я' => 'ja');
  395.     return str_replace(array_keys($transliterationTable), array_values($transliterationTable), $txt);
  396. }
  397. function list_markdown_from_string_contents($arg,$prefix='/nengame/0-050/pcre/syntax.nengame.txt',$striphtml=true,$count=1){
  398.     $dat=list_regex_from_string_contents($arg,$prefix,$striphtml,$count);
  399.     if($count>1){
  400.         $ret['ct']=$count;
  401.         for($i=0;$i<$dat['ct'];$i++){
  402.             $ret[$i]='';
  403.             for($ln=0;$ln<$dat[$i]['ct'];$ln++)
  404.                 $ret[$i].=$dat[$i][$ln].'<br>'."\r\n";
  405.         }
  406.     }
  407.     else{
  408.         $ret='';   
  409.         for($ln=0;$ln<$dat['ct'];$ln++)
  410.             $ret.=$dat[$ln].'<br>'."\r\n";
  411.     }
  412.     return $ret;
  413. }
  414. function list_markdown_from_file_contents($fn,$prefix='/nengame/0-050/pcre/syntax.nengame.txt',$striphtml=true,$count=1){
  415.     $dat=list_regex_from_file_contents($fn,$prefix,$striphtml,$count);
  416.     if($count>1){
  417.         $ret['ct']=$count;
  418.         for($i=0;$i<$dat['ct'];$i++){
  419.             $ret[$i]='';
  420.             for($ln=0;$ln<$dat[$i]['ct'];$ln++)
  421.                 $ret[$i].=$dat[$i][$ln].'<br>'."\r\n";
  422.         }
  423.     }
  424.     else{
  425.         $ret='';   
  426.         for($ln=0;$ln<$dat['ct'];$ln++)
  427.             $ret.=$dat[$ln].'<br>'."\r\n";
  428.     }
  429.     return $ret;
  430. }
  431. function list_ini_load($source='',$sep="\r\n",$type='file') {
  432.     global $list_debug;
  433.     $dat=list_from_source($source,$sep,$type);
  434.    
  435.     $local['pair']['pattern']='/\r\n"([^"]+?)"="([^"]+?)"\r\n/';
  436.     $local['pair']['lead']='pair';
  437.     $local['pair']['label']='$1';
  438.     $local['pair']['value']='$2';
  439.    
  440.     $local['lead']['pattern']='/\r\n([\-\~\!\@\#\$\%\^\&\*\+\=\_\?\.\:])([^\-\"\ \~\!\@\#\$\%\^\&\*\+\=\?\.\:]+?) "([^"]+?)"\r\n/';
  441.     $local['lead']['lead']='$1';
  442.     $local['lead']['label']='$2';
  443.     $local['lead']['value']='$3';
  444.  
  445.     $local['if']['pattern']='/\r\n([\-\~\!\@\#\$\%\^\&\*\+\=\_\?\.\:])if\(([^\-\"\ \~\!\@\#\$\%\^\&\*\+\=\?\.\:]+?)="([^"]+?)"\)\r\n/';
  446.     $local['if']['lead']='$1';
  447.     $local['if']['label']='$2';
  448.     $local['if']['value']='$3';
  449.    
  450.     $ret=null;
  451.    
  452.     for($ln=0;$ln<$dat['ct'];$ln++) {
  453.         list_log_debug($debug,null,'line[<font color="red">'.$ln.'</font>]=[<font color="red">'.$dat[$ln].'</font>]');
  454.         unset($temp);
  455.         foreach($local as $tier => $cast)
  456.             foreach($cast as $key => $value)
  457.                 if($key !== 'pattern'){
  458.                     $temp[$tier][$key]=preg_replace($cast['pattern'],$value,"\r\n".$dat[$ln]."\r\n");
  459.                     if($temp[$tier][$key]==="\r\n".$dat[$ln]."\r\n")
  460.                         unset($temp[$tier][$key]);
  461.                     else
  462.                         list_log_debug($debug,null,htmlentities($tier).'[<font color="red">'.htmlentities($key).'</font>]="<font color="red">'.htmlentities($temp[$tier][$key]).'</font>" from "<font color="red">'.htmlentities($value).'</font>","<font color="red">'.htmlentities($dat[$ln]).'</font>"');
  463.                 }
  464.         $method='comment';
  465.         if(isset($temp['pair']['lead']))
  466.             if($temp['pair']['lead'] === 'pair')
  467.                 $method='pair';
  468.         if(isset($temp['if']['lead']))
  469.             if(strlen($temp['if']['lead']) > 0)
  470.                 $method='if';
  471.         if(isset($temp['lead']['lead']))
  472.             if(strlen($temp['lead']['lead']) > 0)
  473.                 $method='lead';
  474.         list_log_debug($debug,null,'method: <font color="red">'.htmlentities($method).'</font>');
  475.         switch($method){
  476.             case 'comment':
  477.                 list_log_debug($debug,null,'comment: <font color="red">'.htmlentities($dat[$ln]).'</font>');
  478.                 break;
  479.             case 'pair':
  480.                 list_log_debug($debug,null,'pair[<font color="red">'.$temp[$method]['label'].'</font>]=[<font color="red">'.$temp[$method]['value'].'</font>]');
  481.                 $ret[$temp[$method]['label']]=$temp[$method]['value'];
  482.                 break;
  483.  
  484.             case 'lead':
  485.                 switch($temp[$method]['lead']){
  486.                     case '#':
  487.                         switch($temp[$method]['label']){
  488.                             case 'include':
  489.                                 list_log_debug($debug,null,'include[<font color="red">'.htmlentities($method).'</font>]=[<font color="red">'.$temp[$method]['value'].'</font>]');
  490.                                 $tempdat=list_from_source($temp[$method]['value'],$sep,'file');
  491.                                 for($ln2=$ln+1;$ln2<$dat['ct'];$ln2++)
  492.                                     $dat[$ln2+$tempdat['ct']]=$dat[$ln2];
  493.                                 for($ln2=0;$ln2<$tempdat['ct'];$ln2++)
  494.                                     $dat[$ln+$ln2+1]=$tempdat[$ln2];
  495.                                 $dat['ct']+=$tempdat['ct'];
  496.                                 ksort($dat);
  497.                                 break;
  498.                         }
  499.                         break;
  500.                     case '@':
  501.                         switch($temp[$method]['label']){
  502.                             case 'include':
  503.                                 list_log_debug($debug,null,'include[<font color="red">'.htmlentities($method).'</font>]=[<font color="red">'.$ret[$temp[$method]['value']].'</font>]');
  504.                                 $tempdat=list_from_source($ret[$temp[$method]['value']],$sep,'file');
  505.                                 for($ln2=$ln+1;$ln2<$dat['ct'];$ln2++)
  506.                                     $dat[$ln2+$tempdat['ct']]=$dat[$ln2];
  507.                                 for($ln2=0;$ln2<$tempdat['ct'];$ln2++)
  508.                                     $dat[$ln+$ln2+1]=$tempdat[$ln2];
  509.                                 $dat['ct']+=$tempdat['ct'];
  510.                                 ksort($dat);
  511.                                 break;
  512.                         }
  513.                         break;
  514.                     case '$':
  515.                         list_log_debug($debug,null,'eval: global $<font color="red">'.htmlentities($temp[$method]['label']).'</font>; <-- file:"<font color="red">'.$temp[$method]['value'].'</font>"');
  516.                         eval('global $'.$temp[$method]['label'].';');
  517.                         $tempdat=list_ini_load($temp[$method]['value'],$sep,$type);
  518.                             foreach($tempdat as $key => $value){
  519.                                 eval('$'.$temp[$method]['label'].'[\''.$key.'\']=\''.addslashes($value).'\';');
  520.                                 list_log_debug($debug,null,'load: $<font color="red">'.htmlentities($temp[$method]['label']).'</font>[\'<font color="red">'.htmlentities($key).'</font>\']=\'<font color="red">'.addslashes($value).'</font>\';');
  521.                             }
  522.                         break;
  523.                     case '~':
  524.                         $ret[$temp[$method]['label']]=$ret[$temp[$method]['value']].$ret[$temp[$method]['label']];
  525.                         break;
  526.                     case '.':
  527.                         $ret[$temp[$method]['label']].=$temp[$method]['value'];
  528.                         break;
  529.                     case '?':
  530.                         if(isset($_GET[$temp[$method]['value']]))
  531.                             $ret[$temp[$method]['label']]=$_GET[$temp[$method]['value']];
  532.                         else
  533.                             if(!isset($ret[$temp[$method]['label']]))
  534.                                 $ret[$temp[$method]['label']]='';
  535.                         break;
  536.                     case '=':
  537.                         $ret[$temp[$method]['label']]=$ret[$temp[$method]['value']];
  538.                         break;
  539.                     }
  540.                 break;
  541.        
  542.             case 'if':
  543.                 switch($temp[$method]['lead']){
  544.                     case '#':
  545.                         if(!isset($ret[$temp[$method]['label']]))
  546.                             $ln++;
  547.                         elseif($ret[$temp[$method]['label']]!==$temp[$method]['value'])
  548.                             $ln++;
  549.                         break;
  550.                     case '@':
  551.                         if(!isset($ret[$temp[$method]['label']]))
  552.                             $ln++;
  553.                         if(!isset($ret[$temp[$method]['value']]))
  554.                             $ln++;
  555.                         elseif($ret[$temp[$method]['label']]!==$ret[$temp[$method]['value']])
  556.                             $ln++;
  557.                         break;
  558.                 }
  559.                 break;             
  560.         }
  561.     }
  562.     ksort($dat);
  563.     return $ret;
  564. }
  565. function list_ini_from_source($source='',$sep="\r\n",$type='file') {
  566.     $dat=list_from_source($source,$sep,$type);
  567.     $pattern='/"([^"]+?)"="([^"]+?)"/';
  568.  
  569.     $ret=null;
  570.    
  571.     for($ln=0;$ln<$dat['ct'];$ln++)
  572.         $ret[preg_replace($pattern,'$1',$dat[$ln])]=preg_replace($pattern,'$2',$dat[$ln]);
  573.  
  574.     return $ret;
  575. }
  576. function list_ini_from_file_contents($fn,$sep="\r\n",$type='file') {
  577.     return list_ini_from_source($fn,$sep,$type);
  578. }
  579. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement