svnno****@sourc*****
svnno****@sourc*****
2009年 3月 27日 (金) 16:12:05 JST
Revision: 14 http://svn.sourceforge.jp/view?root=frameworkspider&view=rev&rev=14 Author: m_nakashima Date: 2009-03-27 16:12:05 +0900 (Fri, 27 Mar 2009) Log Message: ----------- Modified Paths: -------------- current/DATA/lib/spider/tags/TagBase.class.php current/DATA/lib/spider/tags/Write.class.php current/README.txt -------------- next part -------------- Modified: current/DATA/lib/spider/tags/TagBase.class.php =================================================================== --- current/DATA/lib/spider/tags/TagBase.class.php 2009-03-27 02:03:06 UTC (rev 13) +++ current/DATA/lib/spider/tags/TagBase.class.php 2009-03-27 07:12:05 UTC (rev 14) @@ -147,7 +147,7 @@ if( preg_match('/^\\$/',$element_data ) > 0 ) { // $から始まるなら変換しないでそのまま追加 $converted_strings .= $element_data; - } else if( preg_match('/^\\\'/',$element_data ) > 0 && preg_match('/\\\'$/',$element_data ) > 0 ) { + } else if( preg_match('/^\'/',$element_data ) > 0 && preg_match('/\'$/',$element_data ) > 0 ) { // クォートされているなら文字列 if( $key > 2 && $element_array[$key-1] == '>' && $element_array[$key-2] == '-'){ // 前の要素が->オブジェクトメンバ指定子の場合クォートを除去して追加 @@ -156,7 +156,7 @@ // ただの文字列の場合はそのまま追加 $converted_strings .= $element_data; } - } else if( preg_match('/^\\\"/',$element_data ) > 0 && preg_match('/\\\"$/',$element_data ) > 0 ) { + } else if( preg_match('/^"/',$element_data ) > 0 && preg_match('/"$/',$element_data ) > 0 ) { // クォートされているなら文字列 if( $key > 2 && $element_array[$key-1] == '>' && $element_array[$key-2] == '-'){ // 前の要素が->オブジェクトメンバ指定子の場合 Modified: current/DATA/lib/spider/tags/Write.class.php =================================================================== --- current/DATA/lib/spider/tags/Write.class.php 2009-03-27 02:03:06 UTC (rev 13) +++ current/DATA/lib/spider/tags/Write.class.php 2009-03-27 07:12:05 UTC (rev 14) @@ -67,14 +67,63 @@ $var_name = preg_replace( '/\\{write\\:/','', $vars_tag ); $var_name = preg_replace( '/\\}$/','', $var_name ); $var_name = trim( $var_name ); - $repstr = $this->parseString( $var_name, $valiable_counter ); + // 下位互換の為::を含むなら旧ロジック + $repstr = ''; + if( preg_match('/\\:\\:/',$var_name) > 0 ) { + $repstr = $this->parseString( $var_name, $valiable_counter ); + } else { + $repstr = $this->tagOption2code( $var_name ); + } $result_strings = str_replace( $vars_tag, $repstr, $result_strings ); $valiable_counter++; } } } /** + * + */ + function tagOption2code( $strings ) { + // 最初に文字列化コード + $ret_strings = 'print_r( '.$strings.', true )'; + // 出力オプション指定文字の処理 + if( strpos( $ret_strings, 'nl2null' ) !== false ) { + $ret_strings = 'str_replace("\\n","",str_replace("\\r","",str_replace("\\r\\n","",'.$ret_strings.')))'; + $ret_strings = str_replace('nl2null','',$ret_strings); + } + if( strpos( $ret_strings, 'escape-nl' ) !== false ) { + $ret_strings = 'str_replace("\\n","\\\n",str_replace("\\r","\\n",str_replace("\\r\\n","\\n",'.$ret_strings.')))'; + $ret_strings = str_replace('escape-nl','',$ret_strings); + } + if( strpos( $ret_strings, 'escape-sq' ) !== false ) { + $ret_strings = 'str_replace("\'","\\\'",'.$ret_strings.')'; + $ret_strings = str_replace('escape-sq','',$ret_strings); + } + if( strpos( $ret_strings, 'escape-dq' ) !== false ) { + $ret_strings = 'str_replace(\'"\',\'\\"\','.$ret_strings.')'; + $ret_strings = str_replace('escape-dq','',$ret_strings); + } + if( strpos( $ret_strings, 'noescape' ) !== false ) { + $ret_strings = str_replace('noescape','',$ret_strings); + } else { + $ret_strings = 'htmlspecialchars('.$ret_strings.')'; + } + if( strpos( $ret_strings, 'nl2br' ) !== false ) { + $ret_strings = str_replace('nl2br','',$ret_strings); + $ret_strings = 'nl2br('.$ret_strings.')'; + } + if( strpos( $ret_strings, 'urlencode' ) !== false ) { + $ret_strings = str_replace('urlencode','',$ret_strings); + $ret_strings = 'urlencode('.$ret_strings.')'; + } + // ネイティブコード化 + $ret_strings = $this->tagCode2NativeCode( $ret_strings ); + // 最後にecho + $ret_strings = '<?php echo '.$ret_strings.'; ?>'; + return $ret_strings; + } + /** * 文字列解析 + * 旧バージョン互換::を利用できる */ function parseString( $strings, $prefix=1 ) { @@ -222,39 +271,39 @@ $retstring = '<?php ' . implode("",$temporary_valiable_getter_array); $retstring .= ' if(is_object('.$strings.')||is_array('.$strings.')){ '; $retstring .= 'echo '; + if( $is_urlencode ) { $retstring .= 'urlencode('; } if( $is_nl2br ) { $retstring .= 'nl2br('; } if( !$is_noescape ) { $retstring .= 'htmlspecialchars('; } if( $is_escape_sq ) { $retstring .= 'str_replace("\'","\\\'",'; } if( $is_escape_dq ) { $retstring .= 'str_replace(\'"\',\'\\"\','; } if( $is_escape_nl ) { $retstring .= 'str_replace("\\n","\\\n",str_replace("\\r","\\n",str_replace("\\r\\n","\\n",'; } if( $is_nl2null ) { $retstring .= 'str_replace("\\n","",str_replace("\\r","",str_replace("\\r\\n","",'; } - if( $is_urlencode ) { $retstring .= 'urlencode('; } $retstring .= 'print_r( '.$strings.', true )'; - if( $is_urlencode ) { $retstring .= ')'; } if( $is_nl2null ) { $retstring .= ')'; } if( $is_escape_nl ) { $retstring .= ')'; } if( $is_escape_dq ) { $retstring .= ')'; } if( $is_escape_sq ) { $retstring .= ')'; } if( !$is_noescape ) { $retstring .= ')'; } if( $is_nl2br ) { $retstring .= ')'; } + if( $is_urlencode ) { $retstring .= ')'; } $retstring .= ';'; $retstring .= ' }else{ '; $retstring .= 'echo '; + if( $is_urlencode ) { $retstring .= 'urlencode('; } if( $is_nl2br ) { $retstring .= 'nl2br('; } if( !$is_noescape ) { $retstring .= 'htmlspecialchars('; } if( $is_escape_sq ) { $retstring .= 'str_replace("\'","\\\'",'; } if( $is_escape_dq ) { $retstring .= 'str_replace(\'"\',\'\\"\','; } if( $is_escape_nl ) { $retstring .= 'str_replace("\\n","\\\n",str_replace("\\r","\\n",str_replace("\\r\\n","\\n",'; } if( $is_nl2null ) { $retstring .= 'str_replace("\\n","",str_replace("\\r","",str_replace("\\r\\n","",'; } - if( $is_urlencode ) { $retstring .= 'urlencode('; } $retstring .= $strings; - if( $is_urlencode ) { $retstring .= ')'; } if( $is_nl2null ) { $retstring .= ')'; } if( $is_escape_nl ) { $retstring .= ')'; } if( $is_escape_dq ) { $retstring .= ')'; } if( $is_escape_sq ) { $retstring .= ')'; } if( !$is_noescape ) { $retstring .= ')'; } if( $is_nl2br ) { $retstring .= ')'; } + if( $is_urlencode ) { $retstring .= ')'; } $retstring .= ';'; $retstring .= ' } ?>'; Modified: current/README.txt =================================================================== --- current/README.txt 2009-03-27 02:03:06 UTC (rev 13) +++ current/README.txt 2009-03-27 07:12:05 UTC (rev 14) @@ -12,6 +12,12 @@ 内部的な変更なのでコアなプログラム変更を行っているユーザ以外には影響ありません。 +2) TagBaseクラスでタグコードをネイティブコードに変更するメソッドを修正しました。 + +3) writeタグの修正をおこないました。::で配列要素やオブジェクトメンバを指定する場合をは旧ロジックで + 呼び出しを->メンバ名、['添え字']で指定する場合は、階層に関係なくPHPネイティブコードの許す限り記述できる + ように機能を変更しました。 + -- 2009-03-26 1) OutputHtmlタグで出力するファイルパスがWindowsで不具合を起こす問題の修正