Advertisement
jargon

NenGame PHP/PCRE 0-050 Ini List Load

Dec 30th, 2016
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.28 KB | None | 0 0
  1. function list_ini_load($source='',$sep="\r\n",$type='file') {
  2.     global $list_debug;
  3.     $dat=list_from_source($source,$sep,$type);
  4.    
  5.     $local['pair']['pattern']='/\r\n"([^"]+?)"="([^"]+?)"\r\n/';
  6.     $local['pair']['lead']='pair';
  7.     $local['pair']['label']='$1';
  8.     $local['pair']['value']='$2';
  9.    
  10.     $local['lead']['pattern']='/\r\n([\-\~\!\@\#\$\%\^\&\*\+\=\_\?\.\:])([^\-\"\ \~\!\@\#\$\%\^\&\*\+\=\?\.\:]+?) "([^"]+?)"\r\n/';
  11.     $local['lead']['lead']='$1';
  12.     $local['lead']['label']='$2';
  13.     $local['lead']['value']='$3';
  14.  
  15.     $local['if']['pattern']='/\r\n([\-\~\!\@\#\$\%\^\&\*\+\=\_\?\.\:])if\(([^\-\"\ \~\!\@\#\$\%\^\&\*\+\=\?\.\:]+?)="([^"]+?)"\)\r\n/';
  16.     $local['if']['lead']='$1';
  17.     $local['if']['label']='$2';
  18.     $local['if']['value']='$3';
  19.    
  20.     $ret=null;
  21.    
  22.     for($ln=0;$ln<$dat['ct'];$ln++) {
  23.         list_log_debug($debug,null,'line[<font color="red">'.$ln.'</font>]=[<font color="red">'.$dat[$ln].'</font>]');
  24.         unset($temp);
  25.         foreach($local as $tier => $cast)
  26.             foreach($cast as $key => $value)
  27.                 if($key !== 'pattern'){
  28.                     $temp[$tier][$key]=preg_replace($cast['pattern'],$value,"\r\n".$dat[$ln]."\r\n");
  29.                     if($temp[$tier][$key]==="\r\n".$dat[$ln]."\r\n")
  30.                         unset($temp[$tier][$key]);
  31.                     else
  32.                         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>"');
  33.                 }
  34.         $method='comment';
  35.         if(isset($temp['pair']['lead']))
  36.             if($temp['pair']['lead'] === 'pair')
  37.                 $method='pair';
  38.         if(isset($temp['if']['lead']))
  39.             if(strlen($temp['if']['lead']) > 0)
  40.                 $method='if';
  41.         if(isset($temp['lead']['lead']))
  42.             if(strlen($temp['lead']['lead']) > 0)
  43.                 $method='lead';
  44.         list_log_debug($debug,null,'method: <font color="red">'.htmlentities($method).'</font>');
  45.         switch($method){
  46.             case 'comment':
  47.                 list_log_debug($debug,null,'comment: <font color="red">'.htmlentities($dat[$ln]).'</font>');
  48.                 break;
  49.             case 'pair':
  50.                 list_log_debug($debug,null,'pair[<font color="red">'.$temp[$method]['label'].'</font>]=[<font color="red">'.$temp[$method]['value'].'</font>]');
  51.                 $ret[$temp[$method]['label']]=$temp[$method]['value'];
  52.                 break;
  53.  
  54.             case 'lead':
  55.                 switch($temp[$method]['lead']){
  56.                     case '#':
  57.                         switch($temp[$method]['label']){
  58.                             case 'include':
  59.                                 list_log_debug($debug,null,'include[<font color="red">'.htmlentities($method).'</font>]=[<font color="red">'.$temp[$method]['value'].'</font>]');
  60.                                 $tempdat=list_from_source($temp[$method]['value'],$sep,'file');
  61.                                 for($ln2=$ln+1;$ln2<$dat['ct'];$ln2++)
  62.                                     $dat[$ln2+$tempdat['ct']]=$dat[$ln2];
  63.                                 for($ln2=0;$ln2<$tempdat['ct'];$ln2++)
  64.                                     $dat[$ln+$ln2+1]=$tempdat[$ln2];
  65.                                 $dat['ct']+=$tempdat['ct'];
  66.                                 ksort($dat);
  67.                                 break;
  68.                         }
  69.                         break;
  70.                     case '@':
  71.                         switch($temp[$method]['label']){
  72.                             case 'include':
  73.                                 list_log_debug($debug,null,'include[<font color="red">'.htmlentities($method).'</font>]=[<font color="red">'.$ret[$temp[$method]['value']].'</font>]');
  74.                                 $tempdat=list_from_source($ret[$temp[$method]['value']],$sep,'file');
  75.                                 for($ln2=$ln+1;$ln2<$dat['ct'];$ln2++)
  76.                                     $dat[$ln2+$tempdat['ct']]=$dat[$ln2];
  77.                                 for($ln2=0;$ln2<$tempdat['ct'];$ln2++)
  78.                                     $dat[$ln+$ln2+1]=$tempdat[$ln2];
  79.                                 $dat['ct']+=$tempdat['ct'];
  80.                                 ksort($dat);
  81.                                 break;
  82.                         }
  83.                         break;
  84.                     case '$':
  85.                         list_log_debug($debug,null,'eval: global $<font color="red">'.htmlentities($temp[$method]['label']).'</font>; <-- file:"<font color="red">'.$temp[$method]['value'].'</font>"');
  86.                         eval('global $'.$temp[$method]['label'].';');
  87.                         $tempdat=list_ini_load($temp[$method]['value'],$sep,$type);
  88.                             foreach($tempdat as $key => $value){
  89.                                 eval('$'.$temp[$method]['label'].'[\''.$key.'\']=\''.addslashes($value).'\';');
  90.                                 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>\';');
  91.                             }
  92.                         break;
  93.                     case '~':
  94.                         $ret[$temp[$method]['label']]=$ret[$temp[$method]['value']].$ret[$temp[$method]['label']];
  95.                         break;
  96.                     case '.':
  97.                         $ret[$temp[$method]['label']].=$temp[$method]['value'];
  98.                         break;
  99.                     case '?':
  100.                         if(isset($_GET[$temp[$method]['value']]))
  101.                             $ret[$temp[$method]['label']]=$_GET[$temp[$method]['value']];
  102.                         else
  103.                             if(!isset($ret[$temp[$method]['label']]))
  104.                                 $ret[$temp[$method]['label']]='';
  105.                         break;
  106.                     case '=':
  107.                         $ret[$temp[$method]['label']]=$ret[$temp[$method]['value']];
  108.                         break;
  109.                     }
  110.                 break;
  111.        
  112.             case 'if':
  113.                 switch($temp[$method]['lead']){
  114.                     case '#':
  115.                         if(!isset($ret[$temp[$method]['label']]))
  116.                             $ln++;
  117.                         elseif($ret[$temp[$method]['label']]!==$temp[$method]['value'])
  118.                             $ln++;
  119.                         break;
  120.                     case '@':
  121.                         if(!isset($ret[$temp[$method]['label']]))
  122.                             $ln++;
  123.                         if(!isset($ret[$temp[$method]['value']]))
  124.                             $ln++;
  125.                         elseif($ret[$temp[$method]['label']]!==$ret[$temp[$method]['value']])
  126.                             $ln++;
  127.                         break;
  128.                 }
  129.                 break;             
  130.         }
  131.     }
  132.     ksort($dat);
  133.     return $ret;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement