OSDN Git Service

[[pukiwiki:BugTrack/36]] <input>タグ内でページ名などがエスケープされていなかったのを修正
[pukiwiki/pukiwiki.git] / html.php
1 <?
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // $Id: html.php,v 1.14 2002/07/02 04:15:10 masui Exp $
4 /////////////////////////////////////////////////
5
6 // ËÜʸ¤ò¥Ú¡¼¥¸Ì¾¤«¤é½ÐÎÏ
7 function catbodyall($page,$title="",$pg="")
8 {
9         if($title === "") $title = strip_bracket($page);
10         if($pg === "") $pg = make_search($page);
11
12         $body = join("",get_source($page));
13         $body = convert_html($body);
14
15         header_lastmod($vars["page"]);
16         catbody($title,$pg,$body);
17         die();
18 }
19
20 // ËÜʸ¤ò½ÐÎÏ
21 function catbody($title,$page,$body)
22 {
23         global $script,$vars,$arg,$do_backup,$modifier,$modifierlink,$defaultpage,$whatsnew,$hr;
24         global $date_format,$weeklabels,$time_format,$longtaketime,$related_link;
25         global $HTTP_SERVER_VARS,$cantedit;
26
27         if($vars["page"] && !arg_check("backup") && $vars["page"] != $whatsnew)
28         {
29                 $is_page = 1;
30         }
31
32         $link_add = "$script?cmd=add&amp;page=".rawurlencode($vars["page"]);
33         $link_edit = "$script?cmd=edit&amp;page=".rawurlencode($vars["page"]);
34         $link_diff = "$script?cmd=diff&amp;page=".rawurlencode($vars["page"]);
35         $link_top = "$script?$defaultpage";
36         $link_list = "$script?cmd=list";
37         $link_filelist = "$script?cmd=filelist";
38         $link_search = "$script?cmd=search";
39         $link_whatsnew = "$script?$whatsnew";
40         $link_backup = "$script?cmd=backup&amp;page=".rawurlencode($vars["page"]);
41         $link_help = "$script?cmd=help";
42
43         if(is_page($vars["page"]) && $is_page)
44         {
45                 $fmt = @filemtime(get_filename(encode($vars["page"])));
46         }
47
48         if(is_page($vars["page"]) && $related_link && $is_page && !arg_check("edit") && !arg_check("freeze") && !arg_check("unfreeze"))
49         {
50                 $related = make_related($vars["page"],false);
51         }
52
53         if(is_page($vars["page"]) && !in_array($vars["page"],$cantedit) && !arg_check("backup") && !arg_check("edit") && !$vars["preview"])
54         {
55                 $is_read = TRUE;
56         }
57
58         //if(!$longtaketime)
59                 $longtaketime = getmicrotime() - MUTIME;
60         $taketime = sprintf("%01.03f",$longtaketime);
61
62         require(SKIN_FILE);
63 }
64
65 // ¥Æ¥­¥¹¥ÈËÜÂΤòHTML¤ËÊÑ´¹¤¹¤ë
66 function convert_html($string)
67 {
68         global $result,$saved,$hr,$script,$page,$vars,$top;
69         global $note_id,$foot_explain,$digest,$note_hr;
70         global $user_rules,$str_rules,$line_rules,$strip_link_wall;
71
72         global $longtaketime;
73
74         $string = rtrim($string);
75         $string = preg_replace("/((\x0D\x0A)|(\x0D)|(\x0A))/","\n",$string);
76
77         $start_mtime = getmicrotime();
78
79         $digest = md5(@join("",get_source($vars["page"])));
80
81         $content_id = 0;
82         $user_rules = array_merge($str_rules,$line_rules);
83
84         $result = array();
85         $saved = array();
86         $arycontents = array();
87
88         $string = preg_replace("/^#freeze\n/","",$string);
89
90         $lines = split("\n", $string);
91         $note_id = 1;
92         $foot_explain = array();
93
94         $table = 0;
95
96         if(preg_match("/#contents/",$string))
97                 $top_link = "<a href=\"#contents\">$top</a>";
98
99         foreach ($lines as $line)
100         {
101                 if(!preg_match("/^\/\/(.*)/",$line,$comment_out) && $table != 0)
102                 {
103                         if(!preg_match("/^\|(.+)\|$/",$line,$out))
104                                 array_push($result, "</table>");
105                         if(!$out[1] || $table != count(explode("|",$out[1])))
106                                 $table = 0;
107                 }
108
109                 $comment_out = $comment_out[1];
110
111                 if(preg_match("/^(\*{1,3})(.*)/",$line,$out))
112                 {
113                         $result = array_merge($result,$saved); $saved = array();
114                         $str = inline($out[2]);
115                         
116                         $level = strlen($out[1]) + 1;
117                         
118                         array_push($result, "<h$level><a name=\"content:$content_id\">$str</a> $top_link</h$level>");
119                         $arycontents[] = str_repeat("-",$level-1)."<a href=\"#content:$content_id\">".strip_htmltag(make_user_rules($str))."</a>\n";
120                         $content_id++;
121                 }
122                 else if(preg_match("/^(-{1,4})(.*)/",$line,$out))
123                 {
124                         if(strlen($out[1]) == 4)
125                         {
126                                 $result = array_merge($result,$saved); $saved = array();
127                                 array_push($result, $hr);
128                         }
129                         else
130                         {
131                                 back_push('ul', strlen($out[1]));
132                                 array_push($result, '<li>' . inline($out[2]) . '</li>');
133                         }
134                 }
135                 else if (preg_match("/^:([^:]+):(.*)/",$line,$out))
136                 {
137                         back_push('dl', 1);
138                         array_push($result, '<dt>' . inline($out[1]) . '</dt>', '<dd>' . inline($out[2]) . '</dd>');
139                 }
140                 else if(preg_match("/^(>{1,3})(.*)/",$line,$out))
141                 {
142                         back_push('blockquote', strlen($out[1]));
143                         array_push($result, ltrim(inline($out[2])));
144                 }
145                 else if (preg_match("/^\s*$/",$line,$out))
146                 {
147                         $i = array_pop($saved);
148                         array_push($saved,$i);
149                         if($i == '</pre>' && preg_match("/^\s+$/",$line)) {
150                           back_push('pre', 1);  
151                           array_push($result, '');
152                         }
153                         else {
154                           $result = array_merge($result,$saved); $saved = array();
155                           //array_unshift($saved, "</p>");
156                           array_push($result, "<p>");
157                         }
158                 }
159                 else if(preg_match("/^(\s+.*)/",$line,$out))
160                 {
161                         back_push('pre', 1);
162                         array_push($result, htmlspecialchars($out[1],ENT_NOQUOTES));
163                 }
164                 else if(preg_match("/^\|(.+)\|$/",$line,$out))
165                 {
166                         $arytable = explode("|",$out[1]);
167
168                         if(!$table)
169                         {
170                                 $result = array_merge($result,$saved); $saved = array();
171                                 array_push($result,"<table class=\"style_table\" cellspacing=\"1\" border=\"0\">");
172                                 $table = count($arytable);
173                         }
174
175                         array_push($result,"<tr>");
176                         foreach($arytable as $td)
177                         {
178                                 array_push($result,"<td class=\"style_td\">");
179                                 array_push($result,ltrim(inline($td)));
180                                 array_push($result,"</td>");
181                         }
182                         array_push($result,"</tr>");
183
184                 }
185                 else if(strlen($comment_out) != 0)
186                 {
187                         array_push($result," <!-- ".htmlspecialchars($comment_out)." -->");
188                 }
189                 else
190                 {
191                         array_push($result, inline($line));
192                 }
193         }
194         if($table) array_push($result, "</table>");
195
196         $result_last = $result = array_merge($result,$saved); $saved = array();
197
198         if($content_id != 0)
199         {
200                 $result = array();
201                 $saved = array();
202
203                 foreach($arycontents as $line)
204                 {
205                         if(preg_match("/^(-{1,3})(.*)/",$line,$out))
206                         {
207                                 back_push('ul', strlen($out[1]));
208                                 array_push($result, '<li>'.$out[2].'</li>');
209                         }
210                 }
211                 $result = array_merge($result,$saved); $saved = array();
212                 
213                 $contents = "<a name=\"contents\"></a>\n";
214                 $contents .= join("\n",$result);
215                 if($strip_link_wall)
216                 {
217                         $contents = preg_replace("/\[\[([^\]]+)\]\]/","$1",$contents);
218                 }
219         }
220
221         $result_last = inline2($result_last);
222         
223         $result_last = preg_replace("/^#contents/",$contents,$result_last);
224
225         $str = join("\n", $result_last);
226
227         if($foot_explain)
228         {
229                 $str .= "\n";
230                 $str .= "$note_hr\n";
231                 //$str .= "<p>\n";
232                 $str .= join("\n",inline2($foot_explain));
233                 //$str .= "</p>\n";
234         }
235
236         $longtaketime = getmicrotime() - $start_mtime;
237
238 #       $str = preg_replace("/&((amp)|(quot)|(nbsp)|(lt)|(gt));/","&$1;",$str);
239
240         return $str;
241 }
242
243 // $tag¤Î¥¿¥°¤ò$level¥ì¥Ù¥ë¤Þ¤ÇµÍ¤á¤ë¡£
244 function back_push($tag, $level)
245 {
246         global $result,$saved;
247         
248         while (count($saved) > $level) {
249                 array_push($result, array_shift($saved));
250         }
251         if ($saved[0] != "</$tag>") {
252                 $result = array_merge($result,$saved); $saved = array();
253         }
254         while (count($saved) < $level) {
255                 array_unshift($saved, "</$tag>");
256                 array_push($result, "<$tag>");
257         }
258 }
259
260 // ¥ê¥ó¥¯¤ÎÉղ佤ξ
261 function inline($line)
262 {
263         $line = htmlspecialchars($line);
264
265         $line = preg_replace("/(
266
267                                         (\(\(([^\(\)]+)\)\))
268                                         |
269                                         (\(\((.+)\)\))
270
271                                 )/ex","make_note(\"$1\")",$line);
272
273         return $line;
274 }
275
276 // ¥ê¥ó¥¯¤ÎÉղ佤ξ2
277 function inline2($str)
278 {
279         global $WikiName,$BracketName,$InterWikiName,$vars,$related,$related_link,$script;
280         $cnts_plain = array();
281         $cnts_plugin = array();
282         $arykeep = array();
283
284         for($cnt=0;$cnt<count($str);$cnt++)
285         {
286                 if(preg_match("/^(\s)/",$str[$cnt]))
287                 {
288                         $arykeep[$cnt] = $str[$cnt];
289                         $str[$cnt] = "";
290                         $cnts_plain[] = $cnt;
291                 }
292                 else if(preg_match("/^\#([^\(]+)\(?(.*)\)?$/",$str[$cnt],$match))
293                 {
294                   if(exist_plugin_convert($match[1])) {
295                         $aryplugins[$cnt] = $str[$cnt];
296                         $str[$cnt] = "";
297                         $cnts_plugin[] = $cnt;
298                   }
299                 }
300         }
301
302         $str = preg_replace("/
303                 (
304                         (\[\[([^\]]+)\:(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\]\])
305                         |
306                         (\[(https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\s([^\]]+)\])
307                         |
308                         (https?|ftp|news)(:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
309                         |
310                         ([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)
311                         |
312                         (\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\])
313                         |
314                         ($InterWikiName)
315                         |
316                         ($BracketName)
317                         |
318                         ($WikiName)
319                 )/ex","make_link('$1')",$str);
320
321         $str = preg_replace("/#related/",make_related($vars["page"],true),$str);
322
323         $str = make_user_rules($str);
324
325         $aryplugins = preg_replace("/^\#([^\(]+)$/ex","do_plugin_convert('$1','$2')",$aryplugins);
326         $aryplugins = preg_replace("/^\#([^\(]+)\((.*)\)$/ex","do_plugin_convert('$1','$2')",$aryplugins);
327
328         $tmp = $str;
329         $str = preg_replace("/^#norelated$/","",$str);
330         if($tmp != $str)
331                 $related_link = 0;
332
333         foreach($cnts_plain as $cnt)
334                 $str[$cnt] = $arykeep[$cnt];
335
336         foreach($cnts_plugin as $cnt)
337                 $str[$cnt] = $aryplugins[$cnt];
338
339         return $str;
340 }
341
342 // °ìÍ÷¤Î¼èÆÀ
343 function get_list($withfilename)
344 {
345         global $script,$list_index,$top,$non_list,$whatsnew;
346         global $_msg_symbol,$_msg_other;
347         
348         $retval = array();
349         $files = get_existpages();
350         foreach($files as $page) {
351                 if(preg_match("/$non_list/",$page) && !$withfilename) continue;
352                 if($page == $whatsnew) continue;
353                 $page_url = rawurlencode($page);
354                 $page2 = strip_bracket($page);
355                 $pg_passage = get_pg_passage($page);
356                 $file = encode($page).".txt";
357                 $retval[$page2] .= "<li><a href=\"$script?$page_url\">".htmlspecialchars($page2,ENT_QUOTES)."</a>$pg_passage</li>\n";
358                 if($withfilename)
359                 {
360                         $retval[$page2] .= "<ul><li>$file</li></ul>\n";
361                 }
362         }
363         
364         $retval = list_sort($retval);
365         
366         if($list_index)
367         {
368                 $head_str = "";
369                 $etc_sw = 0;
370                 $symbol_sw = 0;
371                 $top_link = "";
372                 foreach($retval as $page => $link)
373                 {
374                         $head = substr($page,0,1);
375                         if($head_str != $head && !$etc_sw)
376                         {
377                                 $retval2[$page] = "";
378                                 
379                                 if(preg_match("/([A-Z])|([a-z])/",$head,$match))
380                                 {
381                                         if($match[1])
382                                                 $head_nm = "High:$head";
383                                         else
384                                                 $head_nm = "Low:$head";
385                                         
386                                         if($head_str) $retval2[$page] = "</ul>\n";
387                                         $retval2[$page] .= "<li><a href=\"#top:$head_nm\" name=\"$head_nm\"><strong>$head</strong></a></li>\n<ul>\n";
388                                         $head_str = $head;
389                                         if($top_link) $top_link .= "|";
390                                         $top_link .= "<a href=\"#$head_nm\" name=\"top:$head_nm\"><strong>&nbsp;".$head."&nbsp;</strong></a>";
391                                 }
392                                 else if(preg_match("/[ -~]/",$head))
393                                 {
394                                         if(!$symbol_sw)
395                                         {
396                                                 if($head_str) $retval2[$page] = "</ul>\n";
397                                                 $retval2[$page] .= "<li><a href=\"#top:symbol\" name=\"symbol\"><strong>$_msg_symbol</strong></a></li>\n<ul>\n";
398                                                 $head_str = $head;
399                                                 if($top_link) $top_link .= "|";
400                                                 $top_link .= "<a href=\"#symbol\" name=\"top:symbol\"><strong>$_msg_symbol</strong></a>";
401                                                 $symbol_sw = 1;
402                                         }
403                                 }
404                                 else
405                                 {
406                                         if($head_str) $retval2[$page] = "</ul>\n";
407                                         $retval2[$page] .= "<li><a href=\"#top:etc\" name=\"etc\"><strong>$_msg_other</strong></a></li>\n<ul>\n";
408                                         $etc_sw = 1;
409                                         if($top_link) $top_link .= "|";
410                                         $top_link .= "<a href=\"#etc\" name=\"top:etc\"><strong>$_msg_other</strong></a>";
411                                 }
412                         }
413                         $retval2[$page] .= $link;
414                 }
415                 $retval2[] = "</ul>\n";
416                 
417                 $top_link = "<div style=\"text-align:center\"><a name=\"top\">$top_link</a></div><br />\n";
418                 
419                 array_unshift($retval2,$top_link);
420         }
421         else
422         {
423                 $retval2 = $retval;
424         }
425         
426         return join("",$retval2);
427 }
428
429 // ÊÔ½¸¥Õ¥©¡¼¥à¤Îɽ¼¨
430 function edit_form($postdata,$page,$add=0)
431 {
432         global $script,$rows,$cols,$hr,$vars,$function_freeze;
433         global $_btn_addtop,$_btn_preview,$_btn_update,$_btn_freeze,$_msg_help,$_btn_notchangetimestamp;
434         global $whatsnew,$_btn_template,$_btn_load,$non_list,$load_template_func;
435
436         $digest = md5(@join("",get_source($page)));
437
438         if($add)
439         {
440                 $addtag = '<input type="hidden" name="add" value="true" />';
441                 $add_top = '<input type="checkbox" name="add_top" value="true" /><span class="small">'.$_btn_addtop.'</span>';
442         }
443
444         if($vars["help"] == "true")
445                 $help = $hr.catrule();
446         else
447                 $help = "<br />\n<ul><li><a href=\"$script?cmd=edit&amp;help=true&amp;page=".rawurlencode($page)."\">$_msg_help</a></ul></li>\n";
448
449         if($function_freeze)
450                 $str_freeze = '<input type="submit" name="freeze" value="'.$_btn_freeze.'" accesskey="f" />';
451
452         if($load_template_func)
453         {
454                 $vals = array();
455
456                 $files = get_existpages();
457                 foreach($files as $pg_org) {
458                         if($pg_org == $whatsnew) continue;
459                         if(preg_match("/$non_list/",$pg_org)) continue;
460                         $name = strip_bracket($pg_org);
461                         $vals[$name] = "    <option value=\"$pg_org\">$name</option>";
462                 }
463                 @ksort($vals);
464                 
465                 $template = "   <select name=\"template_page\">\n"
466                            ."    <option value=\"\">-- $_btn_template --</option>\n"
467                            .join("\n",$vals)
468                            ."   </select>\n"
469                            ."   <input type=\"submit\" name=\"template\" value=\"$_btn_load\" accesskey=\"r\" /><br />\n";
470
471                 if($vars["refer"]) $refer = $vars["refer"]."\n\n";
472         }
473
474 return '
475 <form action="'.$script.'" method="post">
476 '.$addtag.'
477 <table cellspacing="3" cellpadding="0" border="0">
478  <tr>
479   <td align="right">
480 '.$template.'
481   </td>
482  </tr>
483  <tr>
484   <td align="right">
485    <input type="hidden" name="page" value="'.htmlspecialchars($page).'" />
486    <input type="hidden" name="digest" value="'.htmlspecialchars($digest).'" />
487    <textarea name="msg" rows="'.$rows.'" cols="'.$cols.'" wrap="virtual">
488 '.htmlspecialchars($refer.$postdata).'</textarea>
489   </td>
490  </tr>
491  <tr>
492   <td>
493    <input type="submit" name="preview" value="'.$_btn_preview.'" accesskey="p" />
494    <input type="submit" name="write" value="'.$_btn_update.'" accesskey="s" />
495    '.$add_top.'
496    <input type="checkbox" name="notimestamp" value="true" /><span style="small">'.$_btn_notchangetimestamp.'</span>
497   </td>
498  </tr>
499 </table>
500 </form>
501
502 <form action="'.$script.'?cmd=freeze" method="post">
503 <div>
504 <input type="hidden" name="page" value="'.htmlspecialchars($vars["page"]).'" />
505 '.$str_freeze.'
506 </div>
507 </form>
508
509 ' . $help;
510 }
511
512 // ´ØÏ¢¤¹¤ë¥Ú¡¼¥¸
513 function make_related($page,$_isrule)
514 {
515         global $related_str,$rule_related_str,$related,$_make_related,$vars;
516
517         $page_name = strip_bracket($vars["page"]);
518
519         if(!is_array($_make_related))
520         {
521                 $aryrelated = do_search($page,"OR",1);
522
523                 if(is_array($aryrelated))
524                 {
525                         foreach($aryrelated as $key => $val)
526                         {
527                                 $new_arylerated[$key.md5($val)] = $val;
528                         }
529                 }
530
531                 if(is_array($related))
532                 {
533                         foreach($related as $key => $val)
534                         {
535                                 $new_arylerated[$key.md5($val)] = $val;
536                         }
537                 }
538
539                 @krsort($new_arylerated);
540                 $_make_related = @array_unique($new_arylerated);
541         }
542
543         if($_isrule)
544         {
545                 if(is_array($_make_related))
546                 {
547                         foreach($_make_related as $str)
548                         {
549                                 preg_match("/<a\shref=\"([^\"]+)\">([^<]+)<\/a>(.*)/",$str,$out);
550                                 
551                                 if($out[3]) $title = " title=\"$out[2] $out[3]\"";
552                                 
553                                 $aryret[$out[2]] = "<a href=\"$out[1]\"$title>$out[2]</a>";
554                         }
555                         @ksort($aryret);
556                 }
557         }
558         else
559         {
560                 $aryret = $_make_related;
561         }
562
563         if($_isrule) $str = $rule_related_str;
564         else         $str = $related_str;
565
566         return @join($str,$aryret);
567 }
568
569 // Ãí¼á½èÍý
570 function make_note($str)
571 {
572         global $note_id,$foot_explain;
573
574         $str = preg_replace("/^\(\(/","",$str);
575         $str = preg_replace("/\)\)$/","",$str);
576
577         $str= str_replace("\\'","'",$str);
578
579         $str = make_user_rules($str);
580
581         $foot_explain[] = "<a name=\"notefoot:$note_id\" href=\"#notetext:$note_id\" class=\"note_super\">*$note_id</a> <span class=\"small\">$str</span><br />\n";
582         $note =  "<a name=\"notetext:$note_id\" href=\"#notefoot:$note_id\" class=\"note_super\">*$note_id</a>";
583         $note_id++;
584
585         return $note;
586 }
587
588 // ¥ê¥ó¥¯¤òÉղ乤ë
589 function make_link($name)
590 {
591         global $BracketName,$WikiName,$InterWikiName,$InterWikiNameNoBracket,$script,$link_target,$interwiki_target;
592         global $related,$show_passage,$vars,$defaultpage;
593
594         $aryconv_htmlspecial = array("&amp;","&lt;","&gt;");
595         $aryconv_html = array("&","<",">");
596
597         $page = $name;
598
599         if(preg_match("/^\[\[([^\]]+)\:((https?|ftp|news)([^\]]+))\]\]$/",$name,$match))
600         {
601                 return "<a href=\"$match[2]\" target=\"$link_target\">$match[1]</a>";
602         }
603         else if(preg_match("/^\[((https?|ftp|news)([^\]\s]+))\s([^\]]+)\]$/",$name,$match))
604         {
605                 return "<a href=\"$match[1]\" target=\"$link_target\">$match[4]</a>";
606         }
607         else if(preg_match("/^(https?|ftp|news).*?(\.gif|\.png|\.jpeg|\.jpg)?$/",$name,$match))
608         {
609                 if($match[2])
610                         return "<a href=\"$name\" target=\"$link_target\"><img src=\"$name\" border=\"0\"></a>";
611                 else
612                         return "<a href=\"$name\" target=\"$link_target\">$page</a>";
613         }
614         else if(preg_match("/^\[\[([^\]]+)\:([[:alnum:]\-_.]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)\]\]/",$name,$match))
615         {
616                 return "<a href=\"mailto:$match[2]\">$match[1]</a>";
617         }
618         else if(preg_match("/^([[:alnum:]\-_]+@[[:alnum:]\-_]+\.[[:alnum:]\-_\.]+)/",$name))
619         {
620                 return "<a href=\"mailto:$name\">$page</a>";
621         }
622         else if(preg_match("/^(.+?)&gt;($InterWikiNameNoBracket)$/",strip_bracket($name),$match))
623         {
624                 $page = $match[1];
625                 $name = '[['.$match[2].']]';
626                 $percent_name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);
627                 $percent_name = rawurlencode($percent_name);
628
629                 return "<a href=\"$script?$percent_name\" target=\"$interwiki_target\">$page</a>";
630         }
631         else if(preg_match("/^($InterWikiName)$/",$name))
632         {
633                 $page = strip_bracket($page);
634                 $percent_name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);
635                 $percent_name = rawurlencode($percent_name);
636
637                 return "<a href=\"$script?$percent_name\" target=\"$interwiki_target\">$page</a>";
638         }
639         else if(preg_match("/^($BracketName)|($WikiName)$/",$name))
640         {
641                 if(preg_match("/^(.+?)&gt;(.+)$/",strip_bracket($name),$match))
642                 {
643
644                         $page = $match[1];
645                         $name = $match[2];
646                         if(!preg_match("/^($BracketName)|($WikiName)$/",$page))
647                                 $page = "[[$page]]";
648                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))
649                                 $name = "[[$name]]";
650                 }
651                 if(preg_match("/^\[\[\.\/([^\]]*)\]\]/",$name,$match))
652                 {
653                         if(!$match[1])
654                                 $name = $vars["page"];
655                         else
656                                 $name = "[[".strip_bracket($vars["page"])."/$match[1]]]";
657                 }
658                 else if(preg_match("/^\[\[\..\/([^\]]+)\]\]/",$name,$match))
659                 {
660                         for($i=0;$i<substr_count($name,"../");$i++)
661                                 $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));
662
663                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))
664                                 $name = "[[$name]]";
665                         
666                         if($vars["page"]==$name)
667                                 $name = "[[$match[1]]]";
668                         else
669                                 $name = "[[".strip_bracket($name)."/$match[1]]]";
670                 }
671                 else if($name == "[[../]]")
672                 {
673                         $name = preg_replace("/(.+)\/([^\/]+)$/","$1",strip_bracket($vars["page"]));
674                         
675                         if(!preg_match("/^($BracketName)|($WikiName)$/",$name))
676                                 $name = "[[$name]]";
677                         if($vars["page"]==$name)
678                                 $name = $defaultpage;
679                 }
680                 
681                 $page = strip_bracket($page);
682                 $pagename = htmlspecialchars(strip_bracket($name));
683                 $percent_name = str_replace($aryconv_htmlspecial,$aryconv_html,$name);
684                 $percent_name = rawurlencode($percent_name);
685
686                 $refer = rawurlencode($vars["page"]);
687                 if(is_page($name))
688                 {
689                         $str = get_pg_passage($name,false);
690                         $tm = @filemtime(get_filename(encode($name)));
691                         if($vars["page"] != $name)
692                                 $related[$tm] = "<a href=\"$script?$percent_name\">$pagename</a>$str";
693                         if($show_passage)
694                         {
695                                 $str_title = "title=\"$pagename $str\"";
696                         }
697                         return "<a href=\"$script?$percent_name\" $str_title>$page</a>";
698                 }
699                 else
700                         return "<span class=\"noexists\">$page<a href=\"$script?cmd=edit&amp;page=$percent_name&amp;refer=$refer\">?</a></span>";
701         }
702         else
703         {
704                 return $page;
705         }
706 }
707
708 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤òÃÖ´¹¤¹¤ë)
709 function user_rules_str($str)
710 {
711         global $str_rules;
712
713         $arystr = split("\n",$str);
714
715         // ÆüÉÕ¡¦»þ¹ïÃÖ´¹½èÍý
716         foreach($arystr as $str)
717         {
718                 if(substr($str,0,1) != " ")
719                 {
720                         foreach($str_rules as $rule => $replace)
721                         {
722                                 $str = preg_replace("/$rule/",$replace,$str);
723                         }
724                 }
725                 $retvars[] = $str;
726         }
727
728         return join("\n",$retvars);
729 }
730
731 // ¥æ¡¼¥¶ÄêµÁ¥ë¡¼¥ë(¥½¡¼¥¹¤ÏÃÖ´¹¤»¤º¥³¥ó¥Ð¡¼¥È)
732 function make_user_rules($str)
733 {
734         global $user_rules;
735
736         foreach($user_rules as $rule => $replace)
737         {
738                 $str = preg_replace("/$rule/",$replace,$str);
739         }
740
741         return $str;
742 }
743
744 // HTML¥¿¥°¤ò¼è¤ê½ü¤¯
745 function strip_htmltag($str)
746 {
747         //$str = preg_replace("/<a[^>]+>\?<\/a>/","",$str);
748         return preg_replace("/<[^>]+>/","",$str);
749 }
750
751 // ¥Ú¡¼¥¸Ì¾¤«¤é¥Ú¡¼¥¸Ì¾¤ò¸¡º÷¤¹¤ë¥ê¥ó¥¯¤òºîÀ®
752 function make_search($page)
753 {
754         global $script,$WikiName;
755
756         $page = htmlspecialchars($page);
757         $name = strip_bracket($page);
758         $url = rawurlencode($page);
759
760         //WikiWikiWeb like...
761         //if(preg_match("/^$WikiName$/",$page))
762         //      $name = preg_replace("/([A-Z][a-z]+)/","$1 ",$name);
763
764         return "<a href=\"$script?cmd=search&amp;word=$url\">$name</a> ";
765 }
766
767 ?>