[Frameworkspider-svn] spider-commit [11]

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 3月 26日 (木) 21:09:16 JST


Revision: 11
          http://svn.sourceforge.jp/view?root=frameworkspider&view=rev&rev=11
Author:   m_nakashima
Date:     2009-03-26 21:09:16 +0900 (Thu, 26 Mar 2009)

Log Message:
-----------


Modified Paths:
--------------
    current/DATA/lib/spider/tags/If.class.php
    current/DATA/lib/spider/tags/TagBase.class.php


-------------- next part --------------
Modified: current/DATA/lib/spider/tags/If.class.php
===================================================================
--- current/DATA/lib/spider/tags/If.class.php	2009-03-26 12:01:45 UTC (rev 10)
+++ current/DATA/lib/spider/tags/If.class.php	2009-03-26 12:09:16 UTC (rev 11)
@@ -92,97 +92,10 @@
 	 * ifタグ内の条件式を解析します。
 	 */
 	function condition2code( $strings ) {
-		// 演算時の正規表現
-		$signiture_regx	= '\\+\\-\\/\\*\\%\\=\\<\\>\\&\\|\\(\\)\\!\\,\\[\\]';
-		
-		// 2文字以上連続のスペースは1文字に統一
-		while( preg_match('/\\s\\s/',$strings) > 0 ) {
-			$strings	= str_replace( '  ',' ', $strings );
-		}
-
-		// 下位互換の為、and/orは演算子に置換する
-		$strings	= str_replace(' and ', ' && ', $strings );
-		$strings	= str_replace(' or ', ' || ', $strings );
-		// 下位互換の為、is null / is not nullを置換する
-		$strings	= preg_replace('/(|\\s)([^\\s'.$signiture_regx.']*)\\sis\\snull/','$1is_null( $2 )',$strings);
-		$strings	= preg_replace('/(|\\s)([^\\s'.$signiture_regx.']*)\\sis\\snot\\snull/','$1!is_null( $2 )',$strings);
-		// 下位互換の為inも置換する
-		$strings	= preg_replace('/(|\\s)([^\\s]*)\\sin\\s([^\\s\\}'.$signiture_regx.']*)/','$1in_array( $2 )',$strings);
-		// 下位互換の為連続していない=は連続=に変換しておく(if文中で代入が利用できなくなる為要検討)
-		$strings	= preg_replace('/([^\\+\\-\\/\\*\\%\\=\\<\\>])\\=([^\\=])/','$1==$2',$strings);
-
-		$converted_strings	= '';
-		$element_array		= preg_split('/([\\s'.$signiture_regx.'])/', $strings, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE );
-		$element_data		= '';
-		$prev_data			= '';
-		foreach( $element_array as $key => $element ) {
-			$element_data		.= $element;
-			if( preg_match('/^\\\'/',$element_data) > 0 && substr_count( $element_data, "'" ) % 2 == 1 ) {
-				// 'から始まって'の数が偶数個なら次のカラムとつなげる
-				continue;
-			} else if( preg_match('/^\\\'/',$element_data) > 0 && substr_count( $element_data, "'" ) % 2 == 1 ) {
-				// 'から始まって'の数が偶数個なら次のカラムとつなげる
-				continue;
-			} else {
-				if( preg_match('/([\\s'.$signiture_regx.'])/',$element_data) == 0 ) {
-					// 演算子でない場合のみ処理
-					if( preg_match('/^\\$/',$element_data ) > 0 ) {
-						// $から始まるなら変換しないでそのまま追加
-						$converted_strings	.= $element_data;
-					} else if( preg_match('/^\\\'/',$element_data ) > 0 && preg_match('/\\\'$/',$element_data ) > 0 ) {
-						// クォートされているなら文字列
-						if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
-							// 前の要素が->オブジェクトメンバ指定子の場合クォートを除去して追加
-							$converted_strings	.= preg_replace('/(^\'|\'$)/','',$element_data);
-						} else {
-							// ただの文字列の場合はそのまま追加
-							$converted_strings	.= $element_data;
-						}
-					} else if( preg_match('/^\\\"/',$element_data ) > 0 && preg_match('/\\\"$/',$element_data ) > 0 ) {
-						// クォートされているなら文字列
-						if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
-							// 前の要素が->オブジェクトメンバ指定子の場合
-							$converted_strings	.= preg_replace('/(^\\"|\\"$)/','',$element_data);
-						} else {
-							// ただの文字列の場合はそのまま追加
-							$converted_strings	.= $element_data;
-						}
-					} else if( preg_match('/^[0-9]+$/',$element_data ) > 0 ) {
-						// 数字だけならそのまま追加
-						$converted_strings	.= $element_data;
-					} else {
-						// 次の演算子以外の要素が(なら関数なので次の空でない要素をチェック
-						$is_method	= false;
-						for( $i=$key+1;$i<count($element_array);$i++){
-							$val	= trim($element_array[$i]);
-							if( strlen($val) > 0 ) {
-								if( $val == '(' ) {
-									$is_method	= true;
-								}
-								break;
-							}
-						}
-						if( $is_method ) {
-							// 関数名・メソッド名の場合はそのまま追加
-							$converted_strings	.= $element_data;
-						} else if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
-							// メソッドでなくて前の要素が->の場合オブジェクトメンバも変換(要検討...)
-							$converted_strings	.= '$GLOBALS[\''.$element_data.'\']';
-						} else {
-							// それ以外は$GLOBALSへ変換
-							$converted_strings	.= '$GLOBALS[\''.$element_data.'\']';
-						}
-					}
-				} else {
-					// 演算子はそのまま追加
-					$converted_strings	.= $element_data;
-				}
-				$prev_data			= $element_data;
-				$element_data		= '';
-			}
-		}
-
-		return $converted_strings;
+		// 下位互換の文字列変更
+		$strings	= $this->oldCondition2NewCondition( $strings );
+		// ネイティブコードに変換
+		return $this->tagCode2NativeCode( $strings );
 	}
 	/**
 	 * if条件文の式を解析する
@@ -383,5 +296,27 @@
 		
 		return $strings;
 	}
+	/**
+	 * 記述の下位互換の為、条件式文字列を変換するメソッド
+	 */
+	function oldCondition2NewCondition( $strings ) {
+		// 演算時の正規表現
+		$signiture_regx	= '\\+\\-\\/\\*\\%\\=\\<\\>\\&\\|\\(\\)\\!\\,\\[\\]';
+		// 2文字以上連続のスペースは1文字に統一
+		while( preg_match('/\\s\\s/',$strings) > 0 ) {
+			$strings	= str_replace( '  ',' ', $strings );
+		}
+		// 下位互換の為、and/orは演算子に置換する
+		$strings	= str_replace(' and ', ' && ', $strings );
+		$strings	= str_replace(' or ', ' || ', $strings );
+		// 下位互換の為、is null / is not nullを置換する
+		$strings	= preg_replace('/(|\\s)([^\\s'.$signiture_regx.']*)\\sis\\snull/','$1is_null( $2 )',$strings);
+		$strings	= preg_replace('/(|\\s)([^\\s'.$signiture_regx.']*)\\sis\\snot\\snull/','$1!is_null( $2 )',$strings);
+		// 下位互換の為inも置換する
+		$strings	= preg_replace('/(|\\s)([^\\s]*)\\sin\\s([^\\s\\}'.$signiture_regx.']*)/','$1in_array( $2 )',$strings);
+		// 下位互換の為連続していない=は連続=に変換しておく(if文中で代入が利用できなくなる為要検討)
+		$strings	= preg_replace('/([^\\+\\-\\/\\*\\%\\=\\<\\>])\\=([^\\=])/','$1==$2',$strings);
+		return $strings;
+	}
 }
 ?>
\ No newline at end of file

Modified: current/DATA/lib/spider/tags/TagBase.class.php
===================================================================
--- current/DATA/lib/spider/tags/TagBase.class.php	2009-03-26 12:01:45 UTC (rev 10)
+++ current/DATA/lib/spider/tags/TagBase.class.php	2009-03-26 12:09:16 UTC (rev 11)
@@ -122,5 +122,85 @@
 		}
 		return $option_array;
 	}
+	/**
+	 * タグコードをPHPコードに変換します
+	 */
+	function tagCode2NativeCode( $strings ) {
+		// 演算時の正規表現
+		$signiture_regx	= '\\+\\-\\/\\*\\%\\=\\<\\>\\&\\|\\(\\)\\!\\,\\[\\]';
+		// 変換後文字列
+		$converted_strings	= '';
+		$element_array		= preg_split('/([\\s'.$signiture_regx.'])/', $strings, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE );
+		$element_data		= '';
+		$prev_data			= '';
+		foreach( $element_array as $key => $element ) {
+			$element_data		.= $element;
+			if( preg_match('/^\\\'/',$element_data) > 0 && substr_count( $element_data, "'" ) % 2 == 1 ) {
+				// 'から始まって'の数が偶数個なら次のカラムとつなげる
+				continue;
+			} else if( preg_match('/^\\\'/',$element_data) > 0 && substr_count( $element_data, "'" ) % 2 == 1 ) {
+				// 'から始まって'の数が偶数個なら次のカラムとつなげる
+				continue;
+			} else {
+				if( preg_match('/([\\s'.$signiture_regx.'])/',$element_data) == 0 ) {
+					// 演算子でない場合のみ処理
+					if( preg_match('/^\\$/',$element_data ) > 0 ) {
+						// $から始まるなら変換しないでそのまま追加
+						$converted_strings	.= $element_data;
+					} else if( preg_match('/^\\\'/',$element_data ) > 0 && preg_match('/\\\'$/',$element_data ) > 0 ) {
+						// クォートされているなら文字列
+						if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
+							// 前の要素が->オブジェクトメンバ指定子の場合クォートを除去して追加
+							$converted_strings	.= preg_replace('/(^\'|\'$)/','',$element_data);
+						} else {
+							// ただの文字列の場合はそのまま追加
+							$converted_strings	.= $element_data;
+						}
+					} else if( preg_match('/^\\\"/',$element_data ) > 0 && preg_match('/\\\"$/',$element_data ) > 0 ) {
+						// クォートされているなら文字列
+						if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
+							// 前の要素が->オブジェクトメンバ指定子の場合
+							$converted_strings	.= preg_replace('/(^\\"|\\"$)/','',$element_data);
+						} else {
+							// ただの文字列の場合はそのまま追加
+							$converted_strings	.= $element_data;
+						}
+					} else if( preg_match('/^[0-9]+$/',$element_data ) > 0 ) {
+						// 数字だけならそのまま追加
+						$converted_strings	.= $element_data;
+					} else {
+						// 次の演算子以外の要素が(なら関数なので次の空でない要素をチェック
+						$is_method	= false;
+						for( $i=$key+1;$i<count($element_array);$i++){
+							$val	= trim($element_array[$i]);
+							if( strlen($val) > 0 ) {
+								if( $val == '(' ) {
+									$is_method	= true;
+								}
+								break;
+							}
+						}
+						if( $is_method ) {
+							// 関数名・メソッド名の場合はそのまま追加
+							$converted_strings	.= $element_data;
+						} else if( $key > 2 && $element_array[$key-1] == '>' &&  $element_array[$key-2] == '-'){
+							// メソッドでなくて前の要素が->の場合オブジェクトメンバも変換(要検討...)
+							$converted_strings	.= '$GLOBALS[\''.$element_data.'\']';
+						} else {
+							// それ以外は$GLOBALSへ変換
+							$converted_strings	.= '$GLOBALS[\''.$element_data.'\']';
+						}
+					}
+				} else {
+					// 演算子はそのまま追加
+					$converted_strings	.= $element_data;
+				}
+				$prev_data			= $element_data;
+				$element_data		= '';
+			}
+		}
+
+		return $converted_strings;
+	}
 }
 ?>
\ No newline at end of file



Frameworkspider-svn メーリングリストの案内
Back to archive index