HwapX

Custom var template parser v2

Jan 30th, 2025
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.64 KB | None | 0 0
  1. <?php
  2.  
  3. class TemplateService
  4. {
  5.     public static function parse($str)
  6.     {
  7.         $lines = explode("\n", $str);
  8.         $out = [];
  9.        
  10.         foreach($lines as $line)
  11.         {
  12.             if(!$line)
  13.             {
  14.                 $out[]= '';
  15.                 continue;
  16.             }
  17.             else if($line[0] == '@')
  18.             {
  19.                 $out[]= '<?php '.substr($line, 1).' ?>';
  20.             }
  21.         }
  22.     }
  23.    
  24.     public static function parseExpr($str)
  25.     {
  26.         return preg_replace_callback(
  27.             '/(?<VAR>\$\w+)(?:(?<DIR>[><])(?<PAD>\d+)(?::(?<CHAR>\w*))?(?:\.(?<DEC>\d+))?|#(?<DATE>\S+))?/',
  28.             function($m) {
  29.                 $var = $m['VAR'];
  30.                 if(isset($m['DATE']))
  31.                     $var =
  32.                         "date(".
  33.                             "'".str_replace('_', ' ', $m['DATE'])."', ".
  34.                             "strtotime($var)".
  35.                         ")";
  36.                 elseif(isset($m['DEC']))
  37.                     $var =
  38.                         "number_format(".
  39.                             "$var,".
  40.                             "{$m['DEC']},".
  41.                             "',',".
  42.                             "'.'".
  43.                         ")";
  44.            
  45.                 if(isset($m['DIR']))
  46.                     $var =
  47.                         "substr(".
  48.                             "str_pad(".
  49.                                 "$var, ".
  50.                                 "{$m['PAD']},".
  51.                                 "'".($m['CHAR'] ?? ' ')."',".
  52.                                 ($m['DIR'] == '<' ? 'STR_PAD_LEFT' : 'STR_PAD_RIGHT').
  53.                             ")".
  54.                         ")";
  55.                
  56.                 return "<?= $var ?>";
  57.             },
  58.             $str,
  59.             -1,
  60.             $c,
  61.             PREG_UNMATCHED_AS_NULL
  62.         );
  63.     }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment