Source for file Generator.php

Documentation is available at Generator.php

  1. <?php
  2. // vim: foldmethod=marker
  3. /**
  4.  *  Generator.php
  5.  *
  6.  *  @author     Masaki Fujimoto <fujimoto@php.net>
  7.  *  @license    http://www.opensource.org/licenses/bsd-license.php The BSD License
  8.  *  @package    Ethna
  9.  *  @version    $Id: d776f27aa6842b7c97abd1cb9241821685cbe150 $
  10.  */
  11.  
  12. // {{{ Ethna_Plugin_Generator
  13. /**
  14.  *  スケルトン生成プラグイン
  15.  *
  16.  *  @author     Masaki Fujimoto <fujimoto@php.net>
  17.  *  @access     public
  18.  *  @package    Ethna
  19.  */
  20. {
  21.     /**
  22.      *  スケルトンファイルの絶対パスを解決する
  23.      *
  24.      *  @access private
  25.      *  @param  string  $skel   スケルトンファイル
  26.      */
  27.     function _resolveSkelfile($skel)
  28.     {
  29.         $file realpath($skel);
  30.         if (file_exists($file)) {
  31.             return $file;
  32.         }
  33.  
  34.         // アプリの skel ディレクトリ
  35.         $base $this->ctl->getBasedir();
  36.         $file "$base/skel/$skel";
  37.         if (file_exists($file)) {
  38.             return $file;
  39.         }
  40.  
  41.         // Ethna本体の skel ディレクトリ
  42.         $base dirname(dirname(dirname(__FILE__)));
  43.         $file "$base/skel/$skel";
  44.         if (file_exists($file)) {
  45.             return $file;
  46.         }
  47.  
  48.         return false;
  49.     }
  50.  
  51.     /**
  52.      *  スケルトンファイルにマクロを適用してファイルを生成する
  53.      *
  54.      *  @access private
  55.      *  @param  string  $skel       スケルトンファイル
  56.      *  @param  string  $entity     生成ファイル名
  57.      *  @param  array   $macro      置換マクロ
  58.      *  @param  bool    $overwrite  上書きフラグ
  59.      *  @return bool    true:正常終了 false:エラー
  60.      */
  61.     function _generateFile($skel$entity$macro$overwrite false)
  62.     {
  63.         if (file_exists($entity)) {
  64.             if ($overwrite === false{
  65.                 printf("file [%s] already exists -> skip\n"$entity);
  66.                 return true;
  67.             else {
  68.                 printf("file [%s] already exists, to be overwriten.\n"$entity);
  69.             }
  70.         }
  71.  
  72.         $resolved $this->_resolveSkelfile($skel);
  73.         if ($resolved === false{
  74.             printf("skelton file [%s] not found.\n"$skel);
  75.             return false;
  76.         else {
  77.             $skel $resolved;
  78.         }
  79.  
  80.         $rfp fopen($skel"r");
  81.         if ($rfp == null{
  82.             return false;
  83.         }
  84.         $wfp fopen($entity"w");
  85.         if ($wfp == null{
  86.             fclose($rfp);
  87.             return false;
  88.         }
  89.  
  90.         for (;;{
  91.             $s fread($rfp4096);
  92.             if (strlen($s== 0{
  93.                 break;
  94.             }
  95.  
  96.             foreach ($macro as $k => $v{
  97.                 $s preg_replace("/{\\\$$k}/"$v$s);
  98.             }
  99.             fwrite($wfp$s);
  100.         }
  101.  
  102.         fclose($wfp);
  103.         fclose($rfp);
  104.  
  105.         $st stat($skel);
  106.         if (chmod($entity$st[2]== false{
  107.             return false;
  108.         }
  109.  
  110.         printf("file generated [%s -> %s]\n"$skel$entity);
  111.  
  112.         return true;
  113.     }
  114.  
  115.     /**
  116.      *  ユーザ定義のマクロを設定する(~/.ethna)
  117.      *
  118.      *  @access private
  119.      */
  120.     function _getUserMacro()
  121.     {
  122.         if (isset($_SERVER['USERPROFILE']&& is_dir($_SERVER['USERPROFILE'])) {
  123.             $home $_SERVER['USERPROFILE'];
  124.         else {
  125.             $home $_SERVER['HOME'];
  126.         }
  127.  
  128.         if (is_file("$home/.ethna"== false{
  129.             return array();
  130.         }
  131.  
  132.         $user_macro parse_ini_file("$home/.ethna");
  133.         return $user_macro;
  134.     }
  135. }
  136. // }}}

Documentation generated on Fri, 11 Nov 2011 03:58:12 +0900 by phpDocumentor 1.4.3