svnno****@sourc*****
svnno****@sourc*****
2009年 3月 31日 (火) 20:38:18 JST
Revision: 21 http://svn.sourceforge.jp/view?root=frameworkspider&view=rev&rev=21 Author: m_nakashima Date: 2009-03-31 20:38:18 +0900 (Tue, 31 Mar 2009) Log Message: ----------- Modified Paths: -------------- current/DATA/lib/spider/BuildInformation.class.php current/DATA/lib/spider/Builder.class.php current/DATA/lib/spider/tags/Charset.class.php current/DATA/lib/spider/tags/PageTitle.class.php current/DATA/lib/spider/tags/SetAttribute.class.php current/DATA/lib/spider/tags/SetRequestParam.class.php current/DATA/lib/spider/tags/TagBase.class.php current/DATA/lib/spider/tags/Template.class.php current/README.txt -------------- next part -------------- Modified: current/DATA/lib/spider/BuildInformation.class.php =================================================================== --- current/DATA/lib/spider/BuildInformation.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/BuildInformation.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -21,7 +21,7 @@ var $compare_time_file_array = array(); /** ホットビルド機能:ファイル存在確認ファイル配列 */ var $confirm_exists_file_array = array(); - /** 表示前実行コードハッシュ */ + /** 処理開始前実行コードハッシュ */ var $preview_process_hash = array(); /** 表示後実行コードハッシュ */ var $postview_process_hash = array(); Modified: current/DATA/lib/spider/Builder.class.php =================================================================== --- current/DATA/lib/spider/Builder.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/Builder.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -42,6 +42,8 @@ , PREG_PATTERN_ORDER ); foreach ( $output_array as $output ) { foreach ( $output as $target ) { + // 空行にならないよう前後が改行も削除 + $this->out_body_strings = str_replace( "\n".$target."\n", "", $this->out_body_strings ); $this->out_body_strings = str_replace( $target, "", $this->out_body_strings ); } } @@ -51,6 +53,8 @@ , PREG_PATTERN_ORDER ); foreach ( $output_array as $output ) { foreach ( $output as $target ) { + // 空行にならないよう前後が改行も削除 + $this->out_body_strings = str_replace( "\n".$target."\n", "", $this->out_body_strings ); $this->out_body_strings = str_replace( $target, "", $this->out_body_strings ); } } @@ -61,6 +65,8 @@ , PREG_PATTERN_ORDER ); foreach ( $output_array as $output ) { foreach ( $output as $target ) { + // 空行にならないよう前後が改行も削除 + $this->out_body_strings = str_replace( "\n".$target."\n", "", $this->out_body_strings ); $this->out_body_strings = str_replace( $target, "", $this->out_body_strings ); } } @@ -70,21 +76,27 @@ , PREG_PATTERN_ORDER ); foreach ( $output_array as $output ) { foreach ( $output as $target ) { + // 空行にならないよう前後が改行も削除 + $this->out_body_strings = str_replace( "\n".$target."\n", "", $this->out_body_strings ); $this->out_body_strings = str_replace( $target, "", $this->out_body_strings ); } } // 空PHP部分を削除 - $this->out_body_strings = preg_replace('/<\\?php[\\s]+\\?>/','',$this->out_body_strings); + $this->out_body_strings = preg_replace('/<\\?php[\\s]*\\?>\\n/','',$this->out_body_strings); + $this->out_body_strings = preg_replace('/<\\?php[\\s]*\\?>/','',$this->out_body_strings); // フォルダデフォルトファイルの適用 - $folder_default_path = null; - $folder_path = dirname($build_information_object->execute_file_path); + $folder_default_path = null; + $folder_path = dirname($build_information_object->execute_file_path); + // 存在しなかった場合の存在確認比較ファイルパス + $confirm_default_path_array = array(); while( strlen($folder_path) > strlen(APPLICATION_BASE_PATH) ) { $folder_default_path = $folder_path.DIRECTORY_SEPARATOR.'.default'; if( file_exists( $folder_default_path ) ) { break; } else { + array_push( $confirm_default_path_array, $folder_default_path ); $folder_default_path = null; } $folder_path = dirname($folder_path); @@ -92,6 +104,12 @@ if( !is_null( $folder_default_path ) && file_exists($folder_default_path) ) { $str = trim(file_get_contents($folder_default_path)); $this->out_body_strings = $str.$this->out_body_strings; + // フォルダデフォルトファイルをタイムスタンプ比較ファイルに追加 + $build_information_object->addCompareFile( $folder_default_path ); + } else if( count( $confirm_default_path_array ) > 0 ) { + foreach( $confirm_default_path_array as $path ) { + $build_information_object->addConfirmFile( $path ); + } } // 変換タグの読み込みと変換 @@ -158,7 +176,7 @@ // 表示前実行部分作成 $string = "<?php\n"; - // 表示前実行コードを記述 + // 処理開始前実行コードを記述 foreach( $build_information_object->preview_process_hash as $code_array ) { foreach( $code_array as $code ) { $string .= $code."\n"; Modified: current/DATA/lib/spider/tags/Charset.class.php =================================================================== --- current/DATA/lib/spider/tags/Charset.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/tags/Charset.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -46,7 +46,9 @@ foreach ( $output as $target ) { $charset_strings = preg_replace( '/\\{charset\\:/','', $target ); $charset_strings = preg_replace( '/\\}/','', $charset_strings ); - $result_strings = str_replace( $target, "", $result_strings ); + // 空行にならないよう前後が改行も削除 + $result_strings = str_replace( "\n".$target."\n", "", $result_strings ); + $result_strings = str_replace( $target, "", $result_strings ); $charset_strings = trim($charset_strings); } } Modified: current/DATA/lib/spider/tags/PageTitle.class.php =================================================================== --- current/DATA/lib/spider/tags/PageTitle.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/tags/PageTitle.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -34,6 +34,7 @@ foreach ( $output as $target ) { $page_title = preg_replace( '/\\{page\\-title\\:/','', $target ); $page_title = preg_replace( '/\\}/','', $page_title ); + $result_strings = str_replace( "\n".$target."\n", "", $result_strings ); $result_strings = str_replace( $target, "", $result_strings ); $page_title = trim($page_title); } Modified: current/DATA/lib/spider/tags/SetAttribute.class.php =================================================================== --- current/DATA/lib/spider/tags/SetAttribute.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/tags/SetAttribute.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -25,7 +25,6 @@ * コンバートメソッド */ function convert( &$result_strings, &$build_information ){ - // 変数タグ $vars_tags_aray = array(); preg_match_all( '/\\{set\\:[^\\}]*?}/' , $result_strings @@ -150,6 +149,87 @@ } } } + + // presetタグの機能追加 + if( preg_match_all( '/\\{preset\\:[^\\}]*?\\}/' + , $result_strings + , $output_array + , PREG_PATTERN_ORDER ) > 0 ) { + foreach ( $output_array as $output ) { + foreach ( $output as $target ) { + $option_strings = preg_replace( '/\\{preset\\:/','', $target ); + $option_strings = preg_replace( '/\\}/','', $option_strings ); + $option_strings = trim($option_strings); + if( strpos($option_strings,' ') !== false ) { + // 空白が存在するなら分割して復元 + $option_array = $this->splitOptionBySpace( $option_strings ); + if( count($option_array) >= 2 ) { + // パラメータが2つ以上ならモジュール実行前コードを追加 + $this->createPresetCode( $build_information, $option_array ); + // タグ行の削除 + $result_strings = str_replace( "\n".$target."\n", "", $result_strings ); + $result_strings = str_replace( $target, "", $result_strings ); + } else { + // 空白が存在しないなら使い方が違うのでエラーメッセージを表示する + $result_strings = str_replace( $target, "[preset tag requre 2 parameters! ".$target."]", $result_strings ); + } + } else { + // 空白が存在しないなら使い方が違うのでエラーメッセージを表示する + $result_strings = str_replace( $target, "[preset tag requre 2 parameters! ".$target."]", $result_strings ); + } + } + } + } } + /** + * presetタグのパラメータを受け取って実行前コードを作成します + */ + function createPresetCode( &$build_information, $param_array ) { + $process_code = ''; + if( count( $param_array ) >= 2 ) { + $name = array_shift( $param_array ); + if( preg_match('/^\\\'[^\\\']+\\\'$/',$name) > 0 ) { + $name = preg_replace('/^\\\'/','',$name); + $name = preg_replace('/\\\'$/','',$name); + } + if( preg_match('/^\\"[^\\\']+\\"$/',$name) > 0 ) { + $name = preg_replace('/^\\"/','',$name); + $name = preg_replace('/\\"$/','',$name); + } + $value = array_shift( $param_array ); + if( preg_match('/^\\\'[^\\\']+\\\'$/',$value) > 0 ) { + $value = preg_replace('/^\\\'/','',$value); + $value = preg_replace('/\\\'$/','',$value); + } + if( preg_match('/^\\"[^\\\']+\\"$/',$value) > 0 ) { + $value = preg_replace('/^\\"/','',$value); + $value = preg_replace('/\\"$/','',$value); + } + $var_name = str_replace('.','_',$name); + $process_code .= '$'.$var_name.' = $request_object->getAttribute("'.$name.'");'."\n"; + $process_code .= 'if( is_array($'.$var_name.') ) { '."\n"; + $process_code .= 'array_push( $'.$var_name.', "'.$value.'" );'."\n"; + $process_code .= '$request_object->setAttribute("'.$name.'",$'.$var_name.' );'."\n"; + $process_code .= '} else if( is_null($'.$var_name.') || strlen($'.$var_name.') == 0 ) { '."\n"; + $process_code .= '$'.$var_name.' = "'.$value.'";'."\n"; + $process_code .= '$request_object->setAttribute("'.$name.'",$'.$var_name.' );'."\n"; + $process_code .= '} else {'."\n"; + // objectの場合の検討..現状オブジェクトが登録済みの場合は上書きしない(あり得ないので) + $process_code .= '}'."\n"; + // ビルド情報に実行コードを追加 + if( !isset($build_information->preview_process_hash) + || !is_array($build_information->preview_process_hash) ){ + $build_information->preview_process_hash = array(); + } + if( !isset($build_information->preview_process_hash[$this->priority]) + || !is_array($build_information->preview_process_hash[$this->priority]) ){ + $build_information->preview_process_hash[$this->priority] = array(); + } + array_push( $build_information->preview_process_hash[$this->priority], $process_code ); + return true; + } else { + return false; + } + } } ?> \ No newline at end of file Modified: current/DATA/lib/spider/tags/SetRequestParam.class.php =================================================================== --- current/DATA/lib/spider/tags/SetRequestParam.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/tags/SetRequestParam.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -34,11 +34,10 @@ // falseかnoが指定されているなら登録しない $result_strings = preg_replace( '/\\{set\\-request\\-param\\:[fF][aA][lL][sS][eE]\\}/' , "", $result_strings ); - } else { - // 明示的に否定していないなら暗黙的にパラメータを登録 - $result_strings = preg_replace( '/\\{set\\-request\\-param\\:[^\\}]*?\\}/' + $result_strings = preg_replace( '/\\{set\\-request\\-param\\:[fF][aA][lL][sS][eE]\\}/' , "", $result_strings ); - // cookie及びpost,getの値をリクエストに登録 + } else { + // 明示的に否定していないなら暗黙的にcookie及びpost,getの値をリクエストに登録 $process_code = 'foreach($_POST as $key=>$value){'."\n"; $process_code .= '$request_object->setAttribute(\'post.\'.$key,$value);'."\n"; $process_code .= '}'."\n"; Modified: current/DATA/lib/spider/tags/TagBase.class.php =================================================================== --- current/DATA/lib/spider/tags/TagBase.class.php 2009-03-31 04:30:04 UTC (rev 20) +++ current/DATA/lib/spider/tags/TagBase.class.php 2009-03-31 11:38:18 UTC (rev 21) @@ -71,6 +71,10 @@ } } $converted_strings = $this->getConvertedStrings( $result_strings, $build_information, $option_array, $valiable_counter ); + // 空行にならないよう前後が改行も削除 + if( strlen($converted_strings) == 0 ) { + $result_strings = str_replace( "\n".$target_tag."\n", $converted_strings, $result_strings ); + } $result_strings = str_replace( $target_tag, $converted_strings, $result_strings ); } else { // 終了でも:でもないなら違うタグなので処理しない @@ -95,30 +99,37 @@ * オプション文字列をオプション配列にします。 */ function splitOptionBySpace( $string ) { - // 2文字以上連続のスペースは1文字に統一 - while( preg_match('/\\s\\s/',$string) > 0 ) { - $string = str_replace( ' ',' ', $string ); - } - // 分割 - $column_array = explode(' ', $string); // 最終的なオプション文字列配列 $option_array = array(); - // クォートを維持してオプション文字列配列にいれる - $data = ''; - foreach( $column_array as $column ) { - $data .= $column; - if( preg_match('/^\\\'/',$data) > 0 && substr_count( $data, "'" ) % 2 == 1 ) { - // 'から始まって'の数が偶数個なら次のカラムとつなげる - continue; - } else if( preg_match('/^\\\"/',$data) > 0 && substr_count( $data, '"' ) % 2 == 1 ) { - // "から始まって"の数が偶数個なら次のカラムとつなげる - continue; - } else { - // そうでない場合はカラムがデータとして完結しているので配列に追加 - array_push( $option_array, $data ); - // 次のデータに備えてデータを空文字で新しく設定 - $data = ''; + $string = trim($string); + if( strpos($string,' ') !== false ) { + // 2文字以上連続のスペースは1文字に統一 + while( preg_match('/\\s\\s/',$string) > 0 ) { + $string = str_replace( ' ',' ', $string ); } + // 分割 + $column_array = explode(' ', $string); + // クォートを維持してオプション文字列配列にいれる + $data = ''; + foreach( $column_array as $column ) { + $data .= $column; + if( preg_match('/^\\\'/',$data) > 0 && substr_count( $data, "'" ) % 2 == 1 ) { + // 'から始まって'の数が偶数個なら次のカラムとつなげる + $data .= ' '; + continue; + } else if( preg_match('/^\\\"/',$data) > 0 && substr_count( $data, '"' ) % 2 == 1 ) { + // "から始まって"の数が偶数個なら次のカラムとつなげる + $data .= ' '; + continue; + } else { + // そうでない場合はカラムがデータとして完結しているので配列に追加 + array_push( $option_array, $data ); + // 次のデータに備えてデータを空文字で新しく設定 + $data = ''; + } + } + } else { + array_push( $option_array, $string ); } return $option_array; } Modified: current/DATA/lib/spider/tags/Template.class.php =================================================================== (Binary files differ) Modified: current/README.txt =================================================================== --- current/README.txt 2009-03-31 04:30:04 UTC (rev 20) +++ current/README.txt 2009-03-31 11:38:18 UTC (rev 21) @@ -3,6 +3,18 @@ ** ** このファイルにはコミットごとに変更点とファイル名を記述します。 ** +-- 2009-03-31 +1) .defaultファイルのタイムスタンプ比較及び存在確認がホットビルドから漏れていたので追加 + DATA/lib/spider/Builder.class.php + +2) presetタグをSetAttribute.class.phpに追加 + モジュール実行前処理として、固定文字列、固定数値をrequest属性に設定してページを実行できます。 + 例) {preset:database.name 'framework spider !'} + 固定文字列はシングルクォーテーションで囲ってください。 + +3) TagBase.class.phpのsplitOptionBySpaceメソッドでクォート文字列内の文字列連結時にスペースを + 復元していなかった問題の修正 + -- 2009-03-30 1) ページ内で$request->setAttributeメソッドで値をセットした場合に$GLOBALSに設定しない為 if/foreach/writeで問題が発生する不具合を修正