kafuka Blog / SourceFoge header("Location: http://blogs.yahoo.co.jp/kafukanoochan/62474900.html\n\n"); exit; } if (substr($_session["qstr"],0, 4) == 'ref='){ $_session["func"] = '//ExprIndr'; $_session["refurl"] = $_REQUEST["ref"]; if ($_session["refurl"] == 'this'){ $_session["refurl"] = $_SERVER['HTTP_REFERER']; } $_session["refno"] = ''; if (array_key_exists("no",$_REQUEST) ){ // expr no $_session["refno"] = $_REQUEST["no"]; } if (array_key_exists("eno",$_REQUEST) ){ // expr no $_session["refno"] = $_REQUEST["eno"]; } if (array_key_exists("gno",$_REQUEST) ){ // graph no $_session["func"] = '//GraphIndr'; $_session["refno"] = $_REQUEST["gno"]; $_session["size"] = '100'; if (array_key_exists("size",$_REQUEST) ){ $_session["size"] = $_REQUEST["size"]; } } }else if (substr($_session["qstr"],0, 4) == 'help'){ $_session["help"] = ''; if (array_key_exists("help",$_REQUEST) ){ $_session["help"] = $_REQUEST["help"]; // '' guid editerTeX } $_session["func"] = '//Help'; }else{ // 式/数式表示 $_session["func"] = '//Expr'; } $reslt = ''; $err = ''; try{ $Lp = fopen('lock.txt','w'); $sts = flock($Lp, LOCK_EX); //排他ロックを行います if ($sts===FALSE){ for ($i=1;$i<9;$i++){ $sts = flock($Lp, LOCK_EX); //排他ロック if ($sts){ break; } sleep(1); } } if ( $_session["func"] == '//ExprIndr' || $_session["func"] == '//Expr'){ if ($_session["func"] == '//ExprIndr'){ $refurl = $_session["refurl"]; $refno = $_session["refno"]; $expr = getExpr_rtn($refurl, $refno); // 式(間接指定) }else{ $expr = qstr_expr_rtn($_session["qstr"]); // 式xxxx / 数式表示xxxx -> 式xxxx } if ($expr == ''){ $err = 'ExprMissing'; }else if(mb_substr($expr,0,1,'SJIS') == '式'){ $expr = preconvREQUEST(substr($expr,2 ), $GooTbl); if (strpos($expr, "\\TeX") !== FALSE){ $posTeX = strpos($expr, "\\TeX"); $reslt = substr($expr, 0,pos); // cut \TeX option. $reslt = $reslt + substr($expr, posTeX+4, strlen($expr)-posTeX-4); }else{ $opt = strpos($expr, "\\small"); $wk = preConvForTOSHI($expr, $opt); // Add { } at \over And ∫_( , ) -> ∫_{}^{} $wk = convToTeX($wk.' ', $grk,$grk2,$grk3); $reslt = convMatrixInTeX($wk); } $TeXstr = rawurlencode($reslt); // %20 ' " () [] ? & if (isset($test) ){ print "\n expr:".$expr."\n"; print "\n reslt:".$reslt; // Local test print "\n".$mimeTeXurl; }else{ $pg = ''; if (strpos($TeXstr,"\\inline") === FALSE && strpos($TeXstr,"\\textstyle") === FALSE){ $pg = @file_get_contents($mimeTeXurl.$TeXstr); }else{ $pg = @file_get_contents($mimeTeXinL."\\small ".$TeXstr); } if ($pg == ''){ $err = 'mimeTeX not Active'; }else{ header('Content-Type: image/gif'); print ''.$pg; } } }else{ $err = $expr; } }else if($_session["func"] == '//GraphIndr'){ // ?ref=http://...&gno=nn) $refurl = $_session["refurl"]; $refno = $_session["refno"]; $url = getGraph_rtn($refurl, $refno); // URL of 図(間接指定) if (mb_substr($url,0,1,'SJIS') == '図'){ $reslt = substr($url,2 ); if (isset($test) ){ print "\n graph:".$reslt; // Local test }else{ $pg = ''; $pg = @file_get_contents($reslt); if ($pg == ''){ $err = 'Graph not exist'; }else{ header('Content-Type: image/gif'); print ''.$pg; } } }else{ $err = $url; } }else if($_session["func"] == '//Help'){ $help = $_session["help"]; if ($help == '' || $help == 'guid'){ $reslt = $GuidURL; }else if($help == 'sample1'){ $reslt = $SampleTxtURL; }else if($help == 'sample2'){ $reslt = $SampleHtmlURL; }else if($help == 'TeX' || $help == 'tex'){ $reslt = $HelpTeXurl; }else{ $err = 'UnknownHelp'; } if ($err == ''){ header("Location: $reslt\n\n"); } }else{ $err = 'UnknownFunction'; } //fprintf($Lp,"%s", "\n [".$qstr . "] ".$reslt.$err); if ($err <> ''){ //header("Content-Type: text/html; charset=SJIS"); //print ''.$err; $errmsg = @file_get_contents($mimeTeXinL.$err); header('Content-Type: image/gif'); print ''.$errmsg; } }catch (Exception $ex) { @header("Content-Type: text/html; charset=SJIS"); @fprintf($Lp,"\n Exception!! "); @fprintf($Lp,"\n%s", "QUERY_STRING=".$_session["qstr"]); @fprintf($Lp,"\n%s", "FUNC=".$_session["func"] ); @fprintf($Lp,"\n%s", "EXPR=".$expr); @fprintf($Lp,"\n%s", $ex->getLine().$ex->getMessage() ); print "Exception=".$ex->getLine().$ex->getMessage(); } flock ($Lp, LOCK_UN); //ロック解放 fclose($Lp); exit; //End Main function qstr_expr_rtn($qstr){ if ( mb_substr('式',0,1,'SJIS') == mb_substr($qstr,0,1,'SJIS') ){ return $qstr; } if ( mb_substr('数式表示',0,4,'SJIS') == mb_substr($qstr,0,4,'SJIS') ){ return '式'.substr($qstr,8 ); } if (strlen($qstr) <= 2){ return 'CanNotEncode'; } // 自動検出 $encd = mb_detect_encoding($qstr, 'EUC-JP,SJIS,UTF-8,JIS'); if ($encd != ''){ $expr = mb_convert_encoding($qstr,"SJIS", $encd); if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){ return $expr; } if ( mb_substr('数式表示',0,4,'SJIS') == mb_substr($expr,0,4,'SJIS') ){ return '式'.substr($expr,8 ); } } // Gooブログ対策 (%C3%A5 -> %E5 %C2 -> '')-> UTF-8 $qstr2 = utf8_decode($qstr); $encd = mb_detect_encoding($qstr2, 'EUC-JP,SJIS,UTF-8,JIS'); $expr = mb_convert_encoding($qstr2,'SJIS', $encd); if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){ return $expr; } if ( mb_substr('数式表示',0,4,'SJIS') == mb_substr($expr,0,4,'SJIS') ){ return '式'.substr($expr,8 ); } // Yahooブログ(EUC-JP) だけは救う $expr = mb_convert_encoding($qstr,"SJIS", 'EUC-JP'); if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){ return $expr; } if ( mb_substr('数式表示',0,4,'SJIS') == mb_substr($expr,0,4,'SJIS') ){ return '式'.substr($expr,8 ); } return 'EncodeFail ['.substr($qstr,0,8).']'; } function getEncdFromHtml($pg){ $encd = ''; if (strlen($pg) < 10){ return $encd; } $i = strpos($pg,'http-equiv="content-type"'); if ($i === FALSE) $i = strpos($pg,'http-equiv="Content-Type"'); if ($i === FALSE) $i = strpos($pg,"http-equiv="); if ($i !== FALSE){ $j = strpos($pg,'>', $i); $s1 = substr($pg, $i, $j-$i); $i = strpos($s1, 'charset='); if ($i !== FALSE){ $j = strpos($s1,'"', $i); if ($j === FALSE){ $j = strpos($s1,"'", $i); } if ($j !== FALSE){ $encd = substr($s1, $i+8,$j-$i-8); } } } //print $s1." ->".$encd."\n"; return $encd; } function getGraph_rtn($refurl, $refno){ // 図 間接指定 if ($refurl == ''){ return 'RefUrlMissing'; } if ($refno == ''){ return 'RefNoMissing'; } $pg = getPageByRefURL($refurl); if (substr($pg,0,1) == '@'){ return substr($pg,1,20); } $L = strlen ('/*図'.$refno); $i = strpos($pg,'/*図'.$refno); if ($i === FALSE){ return 'GraphNotFound'; } $pg = substr($pg,$i+$L+1 ); $i = strpos($pg, 'src='); if ($i === FALSE){ return 'SRC=NotFound'; } $src = substr($pg, $i+5 ); $delm= substr($pg, $i+4,1); $j = strpos($src, $delm); if ($j <= 0){ return 'SRC=NotClosed'; } $src = substr($src,0,$j); return '図'.$src; } function getExpr_rtn($refurl, $refno){ // 式 間接指定 if ($refurl == ''){ return 'RefUrlMissing'; } if ($refno == ''){ return 'RefNoMissing'; } $pg = getPageByRefURL($refurl); if (substr($pg,0,1) == '@'){ return substr($pg,1,20); } $L = strlen ('/*式'.$refno); $i = strpos($pg,'/*式'.$refno); if ($i === FALSE){ return 'ExprNotFound'; } $expr = substr($pg,$i+$L ); $j = strpos($expr,'*/',0); if ($j==FALSE){ $j = strpos($expr,'/*',0); } if ($j>0){ $expr = substr($expr,0, $j); } if (substr($refurl,-4) == '.txt' || substr($refurl,-4) == '.TXT'){ $expr2 = preconvTxt ($expr); }else{ $expr2 = preconvHtml($expr); } return '式'.$expr2; } function getPageByRefURL($refurl){ // 式定義.txt Get if (substr($refurl,0,7) == 'http://'){ }else if(substr($refurl,0,7) == 'file://'){ }else{ $refurl = 'http://'.$refurl; } $pg = ""; $pg = @file_get_contents($refurl); if (strpos($pg, '') > 0 || strpos($pg, '') > 0){ }else{ $pg = @file_get_contents($refurl); } if (strlen($pg) < 10){ return '@RefURLcannotOpen'; } if (mb_strpos($pg,'/*式', 0,'SJIS')) return $pg; if (substr($refurl,-4) == '.txt' || substr($refurl,-4) == '.TXT'){ }else{ $encd = getEncdFromHtml($pg); $pg = mb_convert_encoding($pg,"SJIS", $encd); } return $pg; } function preconvREQUEST($org, $preconvTbl){ $line = ""; for($i=0; $i<5000 && $i $line .= '>'; $i = $i + 4; }else if (mb_substr($org,$i, 4, 'SJIS')=='<'){ // < $line .= '<'; $i = $i + 4; }else if(mb_substr($org,$i,1, 'SJIS')=='&'){ $a = mb_substr($org,$i,9, 'SJIS'); $j = mb_strpos($a, ';', 0,'SJIS'); if ($j > 0){ $a = mb_substr($a, 0,$j+1, 'SJIS'); $nxt = mb_strLen($a, 'SJIS'); if (array_key_exists($a, $preconvTbl) ){ $line .= $preconvTbl[$a] ; $i += $nxt; }else{ $line .= "?"; $i += 1; } }else{ $line .= "&"; $i += 1; } }else{ if (mb_substr($org,$i,2, 'SJIS') == ' '){ $line .= ' '; // cut 1space $i += 2; }else{ $a = mb_substr($org,$i,1,'SJIS'); if (array_key_exists($a, $preconvTbl) ){ $line .= $preconvTbl[$a] ; }else{ // no found in tbl $line .= $a; } $i++; } } }//For return $line; } function preconvHtml($org){ $line = ""; $L = strlen("\n"); for($i=0; $i<2000 && $i<=strlen($org);){ if (substr($org,$i, 6)==' '){ $line .= ' '; $i = $i + 6; }else if (substr($org,$i, 5)=='&'){ // & $line .= '&'; $i = $i + 5; }else if (substr($org,$i, 4)=='>'){ // > $line .= '>'; $i = $i + 4; }else if (substr($org,$i, 6)=='"'){ // " $line .= '”'; $i = $i + 6; }else if (substr($org,$i, 4)=='<'){ // < $line .= '<'; $i = $i + 4; }else if (substr($org,$i, 5)=='\'){ // \ $line .= "\\"; $i = $i + 5; }else if (substr($org,$i, 2)=='¥'){ $line .= "\\"; $i = $i + 2; }else if (substr($org,$i, 4)=='
'){ //$line .= ' '; $i = $i + 4; }else if (substr($org,$i, 6)=='
'){ //$line .= ' '; $i = $i + 6; }else if (substr($org,$i, 20)=="
"){ $i = $i + 20; }else if (substr($org,$i, 6)=="
"){ $i = $i + 6; }else if (substr($org,$i, 4)=='

'){ $i = $i + 4; }else if (substr($org,$i, 3)=='

', $i+3); if ($j === FALSE){ $j = $i+2; } $i = $j+1; }else if (substr($org,$i, $L) == "\n"){ //$line .= ' '; $i += $L; }else if (substr($org,$i, strlen("\r") ) == "\r"){ //$line .= ' '; $i += strlen("\r"); /* }else if (substr($org,$i, 2)=="\\\\"){ $line .= "\\"; $i = $i + 2; */ }else if (substr($org,$i, 2)=='\"'){ $line .= "”"; $i = $i + 2; }else if (substr($org,$i, 1)=='"'){ $line .= "”"; $i = $i + 1; }else if (substr($org,$i, 1)=="'"){ $line .= "’"; $i = $i + 1; }else if (substr($org,$i, 1)==','){ $line .= '、'; $i = $i + 1; }else{ $line .= substr($org,$i,1); $i += 1; } } return $line; } function preconvTxt($org){ $line = ""; for($i=0; $i<2000 && $i<=strlen($org);){ if (substr($org,$i, strlen("\n") ) == "\n"){ //$line .= ' '; $i += strlen("\n"); }else{ $line .= substr($org,$i,1); $i += 1; } } return $line; } function convToTeX($pStr, $zenTb1,$zenTb2,$zenTb3){ $line = ""; $org = ' '.$pStr; for($i=1; $i<1000 && $i<=mb_strlen($org,'SJIS')-5;){ if (mb_substr($org,$i, 4,'SJIS')=='hbar'){ if ( chkAlpha(mb_substr($org,$i+4,1, 'SJIS')) ){ $line .= "hbar"; }else{ $a = mb_substr($org,$i-1,1, 'SJIS'); if ($a == 'i'){ $line .= "\\hbar"; // ihbar }else if ( chkAlpha($a) || $a=="\\" || $a=='¥'){ // \ or a-z $line .= "hbar"; }else{ $line .= "\\hbar"; } } $i += 4; }else if (mb_substr($org,$i, 5,'SJIS')=='ihbar'){ $line .= "i\\hbar"; $i += 5; }else if (mb_substr($org,$i, 4,'SJIS')=="Lim_"){ $line .= "\\lim"; $i += 3; // _ から処理 }else{ $a = mb_substr($org,$i,3,'SJIS'); if (array_key_exists($a, $zenTb3) ){ $a = $zenTb3[$a] ; $nxt = 3; }else{ $a = mb_substr($org,$i,2,'SJIS'); if (array_key_exists($a, $zenTb2) ){ $a = $zenTb2[$a] ; $nxt = 2; }else{ $a = mb_substr($org,$i,1,'SJIS'); if (array_key_exists($a, $zenTb1) ){ $a = $zenTb1[$a] ; $nxt = 1; }else{ // no found in tbl $nxt = 1; if (strlen($a) >= 2){ // not ANK $a = '?'; // -> %3F } } } } $line .= $a; $i += $nxt; } }//For //printf("\n Line=".$line . " orgnL=".mb_strlen($org) ); return $line; } function convMatrixInTeX($org){ $line = ""; $kaklvl = 0; // vector( matrix( make \begin{pmatrix} $kaktyp1 = 'ンン'; // (1->0) make \end{pmatrix} (>=1) conv ; to \\ $kaktyp2 = 'ンン'; for($i=0; $i<1000 && $i<=mb_strlen($org,'SJIS');){ if (mb_substr($org,$i,7,'SJIS')=="\\vector" || mb_substr($org,$i,7,'SJIS')=="\\matrix"){ $kaktyp1 = mb_substr($org,$i+7,1,'SJIS'); if ($kaktyp1 == '(' ){ $kaktyp2 = ')'; $kaklvl = 1; $line .= "\\begin{pmatrix}"; }else if($kaktyp1 == '['){ $kaktyp2 = ']'; $kaklvl = 1; $line .= "\\begin{bmatrix}"; }else if($kaktyp1 == '|'){ $kaktyp2 = '|'; $kaklvl = 1; $line .= "\\begin{vmatrix}"; }else{ $line .= mb_substr($org,$i,8,'SJIS'); } $i += 8; }else if(mb_substr($org,$i, 1,'SJIS') == $kaktyp2){ // ) ] | if ($kaklvl >= 1){ $kaklvl -= 1; if ($kaklvl == 0){ if($kaktyp2 == ')' ){ $line .= "\\end{pmatrix}"; }else if($kaktyp2 == ']'){ $line .= "\\end{bmatrix}"; }else if($kaktyp2 == '|'){ $line .= "\\end{vmatrix}"; }else{ $line .= $kaktyp2; } }else{ $line .= $kaktyp2; } }else{ $line .= $kaktyp2; } $i += 1; }else if(mb_substr($org,$i, 1,'SJIS') == $kaktyp1){ // ( [ | if ($kaklvl >= 1) $kaklvl += 1; $line .= $kaktyp1; $i += 1; }else if(mb_substr($org,$i, 1,'SJIS') == ';'){ if ($kaklvl == 1){ $line .= "\\\\"; }else{ $line .= ';'; } $i += 1; }else if(mb_substr($org,$i, 2,'SJIS') == '##'){ if ($kaklvl == 1){ $line .= "\\\\"; }else{ $line .= '##'; } $i += 2; }else if(mb_substr($org,$i, 1,'SJIS') == '#'){ if ($kaklvl == 1){ $line .= "&"; }else{ $line .= '#'; } $i += 1; }else{ $line .= mb_substr($org,$i, 1,'SJIS'); $i += 1; } } //printf("\n Line=".$line . " orgnL=".mb_strlen($org) ); return $line; } //----------------------------------------------------------------------------------------------// function preConvForTOSHI($pStr, $opt){ $wk = $pStr; if ($opt === FALSE){ // != '[[expr('){ if (mb_strpos($wk,"/",0,'SJIS')>0){ ; // {}は既にちゃんと入れているはず }else if (mb_strpos($pStr,"∫",0,'SJIS')===FALSE || mb_strpos($pStr,"/",0,'SJIS')===FALSE ){ if (mb_strpos($pStr,"|",0,'SJIS')===FALSE || mb_strpos($pStr,"/",0,'SJIS')===FALSE ){ $wk = preConvOverKako($wk); // {}を補う (でなければ、手で入れて/に直す) } } } $wk = preConvIntRange($wk); // 範囲指定 -> _{xxx}^{xxx} return $wk; } function preConvOverKako($pStr){ $org = $pStr; for ($n=0; $n<99; $n++){ $p = mb_strpos($org,"/",0, 'SJIS'); if ($p === FALSE){ $p = mb_strpos($org,"/",0, 'SJIS'); if ($p === FALSE){ //$org .= "=".$n; break; } } $L = mb_strlen($org,'SJIS'); $flg = true; for ($i=$p-1; $i>=0; ){ $s1 = mb_substr($org,$i,1,'SJIS'); if ($s1 == "{" || $s1 == "{"){ $flg = false; // { 挿入不要 break; } if ($s1==")" || $s1==")" || $s1=="}" || $s1=="]" || $s1=="}"){ // nest -> skip ただし、] なら範囲指定とみなす $j = nestKakoBack($org, $i); $i = $j-1; }else if ($s1=="+" || $s1=="+" || $s1=="-" || $s1=="ー" || $s1=="−" || $s1=="=" || $s1=="=" || $s1=="," || $s1=="、" || $s1==";"){ break; }else if ($s1== "(" || $s1=="(" || $s1=="[" || $s1=="["){ break; }else if ($s1=='∫' || $s1=="Σ" || $s1=="Π"){ break; }else if ($s1=="]"){ // 範囲指定とみなして、分数範囲の終わりとする break; }else{ $i -= 1; } } if ($flg){ if ($i<0){ $wk1 = "{".mb_substr($org, 0,$p, 'SJIS'); }else{ $wk1 = mb_substr($org,0, $i+1,'SJIS')."{".mb_substr($org,$i+1, $p-$i-1, 'SJIS'); } }else{ $wk1 = mb_substr($org, 0,$p, 'SJIS'); } $flg = true; for ($i=$p+1; $i<$L; ){ $s1 = mb_substr($org,$i,1,'SJIS'); if ($s1 == "}" || $s1 == "}"){ $flg = false; // { 挿入不要 break; } if ($s1=="(" || $s1=="(" || $s1=="[" || $s1=="[" || $s1=="{" || $s1=="{"){ // nest -> skip to ) $j = nestKako($org, $i); $i = $j+1; }else if ($s1=="+" || $s1=="+" || $s1=="-" || $s1=="ー" || $s1=="−" || $s1=="=" || $s1=="=" || $s1=="," || $s1=="、" || $s1==";"){ break; }else if ($s1==")" || $s1==")" || $s1=="]" || $s1=="]"){ break; }else{ $i += 1; } } if ($flg){ if ($i >= $L){ $wk2 = mb_substr($org, $p+1,$L-$p-1,'SJIS').'}'; }else{ $wk2 = mb_substr($org, $p+1,$i-$p-1,'SJIS')."}".mb_substr($org,$i,$L-$i,'SJIS'); } }else{ $wk2 = mb_substr($org, $p+1,$L-$p-1,'SJIS'); } if (mb_substr($wk2,0,1,'SJIS')=="d"){ $wk2 = "d".mb_substr($wk2,1,mb_strlen($wk2,'SJIS')-1,'SJIS'); // ??? } $org = $wk1."\\over ".$wk2; } return $org; } function preConvIntRange($pStr){ $line = ""; $org = $pStr; $L = mb_strlen($org,'SJIS'); for($i=0; $i<1000 && $i<=$L; ){ if (mb_substr($org,$i, 1,'SJIS')=='∫' || mb_substr($org,$i, 1,'SJIS')=='Σ' || mb_substr($org,$i, 1,'SJIS')=='Π' || mb_substr($org,$i, 4,'SJIS')=="\\int" || mb_substr($org,$i, 4,'SJIS')=="\\sum" || mb_substr($org,$i, 5,'SJIS')=="\\prod" || mb_substr($org,$i, 4,'SJIS')=="\\lim" || mb_substr($org,$i, 3,'SJIS')=="Lim"){ $svPos = $i; if (mb_substr($org,$i, 5,'SJIS')=="\\prod"){ $i += 5; }else if (mb_substr($org,$i, 4,'SJIS')=="\\int" || mb_substr($org,$i, 4,'SJIS')=="\\sum" || mb_substr($org,$i, 4,'SJIS')=="\\lim"){ $i += 4; }else if (mb_substr($org,$i, 3,'SJIS')=="Lim"){ $i += 3; }else{ $i += 1; } if ($i >= $L){ $line .= mb_substr($org, $svPos, $L-$svPos,'SJIS'); break; } $s1 = mb_substr($org,$i, 1,'SJIS'); if ($s1=='(' || $s1=='(' || $s1=='[' || $s1=="["){ $j = nestKako($org, $i); if ($j >= $L){ $line .= mb_substr($org, $svPos, $L-$svPos,'SJIS'); break; } $j += 1; // )の次 $s1 = mb_substr($org, $i,$j-$i, 'SJIS'); $staRange = getParm(1, $s1); $endRange = getParm(2, $s1); $line .= mb_substr($org, $svPos,$i-$svPos, 'SJIS'); // (の前 if ($staRange != ''){ $line .= '_{'.$staRange.'}'; } if ($endRange != ''){ $line .= '^{'.$endRange.'}'; } $i = $j; }else{ $i = $svPos; $line .= mb_substr($org, $i,1,'SJIS'); $i += 1; } }else{ $line .= mb_substr($org,$i, 1,'SJIS'); $i += 1; } } return $line; } function chkAlpha($s){ $s1 = strtolower($s); $s2 = strtoupper($s); if ($s1 == $s2){ return FALSE; // 記号、数字 }else{ return TRUE; // 英字 } } function nestKako($s1, $pos){ $kakL = mb_substr($s1,$pos,1, 'SJIS'); if ($kakL == '(' || $kakL == '('){ $kakL2 = '('; $kakR1 = ')'; $kakR2 = ')'; }else if($kakL=='[' || $kakL == '['){ $kakL2 = '['; $kakR1 = ']'; $kakR2 = ']'; }else if($kakL=='{' || $kakL == '{'){ $kakL2 = '{'; $kakR1 = '}'; $kakR2 = '}'; }else{ $kakL2 = '|'; $kakR1 = '|'; $kakR2 = '|'; } $lvl = 1; for ($i=$pos+1; $i=0; ){ $a = mb_substr($s1,$i,1, 'SJIS'); if ($a==$kakL1 || $a==$kakL2){ $lvl = $lvl-1; if ($lvl <=0){ break; } $i = $i-1; }else if($a==$kakR || $a==$kakR2){ $lvl = $lvl+1; $i = $i-1; }else{ $i = $i-1; } } return $i; } function getParm($n, $pStr){ $xxx = "UNDEF"; // return value $s1 = mb_substr($pStr,0,1, 'SJIS'); if ($s1 == '(' || $s1 == '('){ $tmDelm = ')'; $tmDelm2 = ')'; }else if ($s1=='[' || $s1 == '['){ $tmDelm = ']'; $tmDelm2 = ']'; }else if ($s1=='{' || $s1 == '}'){ $tmDelm = '}'; $tmDelm2 = '}'; }else{ return "Error"; } $str = $pStr.$tmDelm; $j=1; // 開始位置 str[0]は ( か [ for ($cnt=1; $cnt<=$n; ++$cnt){ for ($pos=$j; $pos=mb_strlen($pStr, 'SJIS') ) break; $pos += 1; $s1 = mb_substr($str,$pos,1, 'SJIS'); } if ($s1=="," || $s1=='、' || $s1==$tmDelm || $s1==$tmDelm2){ break; } $pos += 1; } if ($pos>=mb_strlen($pStr, 'SJIS') ) break; $xxx = mb_substr($str, $j, $pos-$j, 'SJIS'); if (mb_substr($str, $pos,1, 'SJIS') == $tmDelm || mb_substr($str, $pos,1, 'SJIS') == $tmDelm2){ break; } $j = $pos+1; } if ($cnt < $n){ $xxx = ''; }else{ if (mb_substr($xxx,0,1,'SJIS')==' ' || mb_substr($xxx,0,1,'SJIS')==' ' || mb_substr($xxx,0,1,'SJIS')=="\n") $xxx = mb_substr($xxx,1 ,mb_strlen($xxx, 'SJIS')-1, 'SJIS'); if (mb_substr($xxx,0,1,'SJIS')==' ' || mb_substr($xxx,0,1,'SJIS')==' ' || mb_substr($xxx,0,1,'SJIS')=="\n") $xxx = mb_substr($xxx,1 ,mb_strlen($xxx, 'SJIS')-1, 'SJIS'); if (mb_substr($xxx,0,2,'SJIS')=="\r\n") $xxx = mb_substr($xxx,2, mb_strlen($xxx,'SJIS')-2,'SJIS'); if (mb_substr($xxx,mb_strlen($xxx,'SJIS')-1,1,'SJIS')==' ' || mb_substr($xxx, mb_strlen($xxx,'SJIS')-1,1,'SJIS')==' ') $xxx = mb_substr($xxx,0, mb_strlen($xxx, 'SJIS')-1, 'SJIS'); if (mb_substr($xxx,mb_strlen($xxx,'SJIS')-1,1,'SJIS')==' ' || mb_substr($xxx, mb_strlen($xxx,'SJIS')-1,1,'SJIS')==' ') $xxx = mb_substr($xxx,0, mb_strlen($xxx, 'SJIS')-1, 'SJIS'); if (mb_substr($xxx,mb_strlen($xxx,'SJIS')-1,1,'SJIS')=="\n") $xxx = mb_substr($xxx,0, mb_strlen($xxx,'SJIS')-1, 'SJIS'); if (mb_substr($xxx,mb_strlen($xxx,'SJIS')-2,2,'SJIS')=="\r\n") $xxx = mb_substr($xxx,0, mb_strlen($xxx,'SJIS')-2, 'SJIS'); } return $xxx; } ?>