/////////////////////////////////////////////////
// PukiWiki - Yet another WikiWikiWeb clone.
//
-// $Id: make_link.php,v 1.16 2003/02/21 07:04:44 panda Exp $
+// $Id: make_link.php,v 1.17 2003/02/26 07:12:30 panda Exp $
//
// ¥ê¥ó¥¯¤òÉղ乤ë
global $vars;
static $converter;
- if (!isset($converter)) {
+ if (!isset($converter))
+ {
$converter = new InlineConverter();
}
return $converter->convert($string, ($page != '') ? $page : $vars['page']);
}
-
+//¥¤¥ó¥é¥¤¥óÍ×ÁǤòÃÖ´¹¤¹¤ë
class InlineConverter
{
var $converters; // as array()
function InlineConverter($converters = NULL)
{
- if ($converters == NULL) {
+ if ($converters == NULL)
+ {
$converters = array('plugin','url','mailto','interwiki','page','auto');
}
$this->converters = array();
$pattern = array();
$start = 1;
- foreach ($converters as $name) {
+ foreach ($converters as $name)
+ {
$classname = "Link_$name";
$converter = new $classname($start);
$pattern[] = '('.$converter->get_pattern().')';
{
$obj = $this->get_converter($arr);
- if ($obj === NULL) {
- return $arr[0];
+ if ($obj !== NULL and $obj->set($arr,$this->page) !== FALSE)
+ {
+ return $obj->toString();
}
-
- $obj->set($arr,$this->page);
- return $obj->toString();
+ return $arr[0];
}
function get_objects($string,$page)
{
preg_match_all("/{$this->pattern}/x",$string,$matches,PREG_SET_ORDER);
$arr = array();
- foreach ($matches as $match) {
+ foreach ($matches as $match)
+ {
$obj = $this->get_converter($match);
$obj->set($match,$page);
$arr[] = $obj; // copy
}
function &get_converter(&$arr)
{
- foreach (array_keys($this->converters) as $start) {
- if ($arr[$start] != '') {
+ foreach (array_keys($this->converters) as $start)
+ {
+ if ($arr[$start] != '')
+ {
return $this->converters[$start];
}
}
return NULL;
}
}
-
+//¥¤¥ó¥é¥¤¥óÍ×Áǽ¸¹ç¤Î¥Ù¡¼¥¹¥¯¥é¥¹
class Link
{
var $start; // ³ç¸Ì¤ÎÀèƬÈÖ¹æ(0¥ª¥ê¥¸¥ó)
var $text; // ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎóÁ´ÂÎ
- var $valid;
var $type;
var $page;
var $name;
var $alias;
+ // constructor
function Link($start)
{
$this->start = $start;
}
+ // ¥Þ¥Ã¥Á¤Ë»ÈÍѤ¹¤ë¥Ñ¥¿¡¼¥ó¤òÊÖ¤¹
function get_pattern()
{
}
+ // »ÈÍѤ·¤Æ¤¤¤ë³ç¸Ì¤Î¿ô¤òÊÖ¤¹ ((?:...)¤ò½ü¤¯)
function get_count()
{
}
+ // ¥Þ¥Ã¥Á¤·¤¿¥Ñ¥¿¡¼¥ó¤òÀßÄꤹ¤ë
function set($arr,$page)
{
}
+ // ʸ»úÎó¤ËÊÑ´¹¤¹¤ë
function toString()
{
}
+
+ //private
+ // ¥Þ¥Ã¥Á¤·¤¿ÇÛÎ󤫤顢¼«Ê¬¤ËɬÍפÊÉôʬ¤À¤±¤ò¼è¤ê½Ð¤¹
function splice($arr)
{
$count = $this->get_count() + 1;
$arr = array_splice($arr,$this->start,$count);
- while (count($arr) < $count) {
+ while (count($arr) < $count)
+ {
$arr[] = '';
}
$this->text = $arr[0];
return $arr;
}
-
- //private
+ // ´ðËܥѥé¥á¡¼¥¿¤òÀßÄꤹ¤ë
function setParam($page,$name,$type = '',$alias = '')
{
$this->page = $page;
$this->type = $type;
$this->alias = $alias;
- $this->valid = TRUE;
return TRUE;
}
}
+// ¥ª¡¼¥È¥ê¥ó¥¯,WikiName
class Link_auto extends Link
{
function Link_auto($start)
{
global $WikiName,$autolink,$nowikiname;
- if (!$autolink or !file_exists(CACHE_DIR.'autolink.dat')) {
+ if (!$autolink or !file_exists(CACHE_DIR.'autolink.dat'))
+ {
return $nowikiname ? '(?!)' : $WikiName;
}
{
$arr = $this->splice($arr);
$name = $alias = $arr[0];
+ // ¥ß¥¹¥Þ¥Ã¥Á¤ò¼Î¤Æ¤ë
+ if (!is_page($name))
+ {
+ return FALSE;
+ }
return parent::setParam($page,$name,'pagename',$alias);
}
function toString($page = '')
);
}
}
+//InterWiki
class Link_interwiki extends Link
{
var $r_name;
return "<a href=\"$script?$this->r_name\">{$this->alias}</a>";
}
}
+//mailto:
class Link_mailto extends Link
{
var $is_image,$image;
$name = $arr[2];
$alias = $arr[1];
- if (preg_match("/\.(gif|png|jpeg|jpg)$/i",$alias)) {
+ if (preg_match("/\.(gif|png|jpeg|jpg)$/i",$alias))
+ {
$this->is_image = TRUE;
$this->image = "<img src=\"$alias\" alt=\"$name\" />";
}
- else {
+ else
+ {
$this->is_image = FALSE;
$this->image = '';
}
.'</a>';
}
}
+// ¥Ú¡¼¥¸Ì¾
class Link_page extends Link
{
var $anchor,$refer;
global $WikiName,$BracketName;
static $converter;
- if (!isset($converter)) {
+ if (!isset($converter))
+ {
$converter = new InlineConverter(array('plugin'));
}
$name = $arr[4];
$this->anchor = $arr[8];
- if ($name == '' and $this->anchor == '') {
- $this->valid = FALSE;
+ if ($name == '' and $this->anchor == '')
+ {
return FALSE;
}
-
- if ($name != '' and preg_match("/^$WikiName$/",$name)) {
+ if ($name != '' and preg_match("/^$WikiName$/",$name))
+ {
return parent::setParam($page,$name,'pagename',$alias);
}
- if ($alias == '') {
+ if ($alias == '')
+ {
$alias = $name.$this->anchor;
}
- if ($name == '' and $this->anchor == '') {
- $this->valid = FALSE;
+ if ($name == '' and $this->anchor == '')
+ {
return FALSE;
}
+
$name = get_fullname($name,$page);
- if ($name != '' and !preg_match("/^($WikiName)|($BracketName)$/",$name)) {
- $this->valid = FALSE;
+ if ($name != '' and !preg_match("/^($WikiName)|($BracketName)$/",$name))
+ {
return FALSE;
}
- parent::setParam($page,$name,'pagename',$alias);
+ return parent::setParam($page,$name,'pagename',$alias);
}
function toString()
{
global $script; //,$interwiki_target;
- if (!$this->valid) {
- return $this->text;
- }
return make_pagelink(
$this->name,
$this->alias,
);
}
}
+// ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
class Link_plugin extends Link
{
var $param,$body;
$this->param = $arr[2];
$this->body = ($arr[3] == '') ? '' : make_link($arr[3]);
- if (!exist_plugin_inline($name)) {
- $this->valid = FALSE;
+ if (!exist_plugin_inline($name))
+ {
return FALSE;
}
}
function toString($refer = '')
{
- if (!$this->valid) {
- return $this->text;
- }
return $this->make_inline($this->name,$this->param,$this->body);
}
function make_inline($func,$param,$body)
}
// ¥×¥é¥°¥¤¥ó¸Æ¤Ó½Ð¤·
- if (exist_plugin_inline($func)) {
+ if (exist_plugin_inline($func))
+ {
$str = do_plugin_inline($func,$param,$body);
if ($str !== FALSE) { //À®¸ù
return $str.$after;
return $this->text;
}
}
+// url
class Link_url extends Link
{
var $is_image,$image;
$anchor = $arr[4];
$alias = $arr[1].$anchor;
- if ($alias == '' and preg_match("/\.(gif|png|jpeg|jpg)$/i",$name)) {
+ if ($alias == '' and preg_match("/\.(gif|png|jpeg|jpg)$/i",$name))
+ {
$this->is_image = TRUE;
- if ($alias == '') {
+ if ($alias == '')
+ {
$alias = $name;
}
$this->image = "<img src=\"$name\" alt=\"$alias\" />";
}
- else if (preg_match("/\.(gif|png|jpeg|jpg)$/i",$alias)) {
+ else if (preg_match("/\.(gif|png|jpeg|jpg)$/i",$alias))
+ {
$this->is_image = TRUE;
$this->image = "<img src=\"$alias\" alt=\"$name\" />";
}
- else {
+ else
+ {
$this->is_image = FALSE;
$this->image = '';
}
$s_page = htmlspecialchars(strip_bracket($page));
$s_alias = ($alias == '') ? $s_page : $alias;
- if ($page == '') {
+ if ($page == '')
+ {
return "<a href=\"$anchor\">$s_alias</a>";
}
$r_page = rawurlencode($page);
$r_refer = ($refer == '') ? '' : '&refer='.rawurlencode($refer);
- if (!array_key_exists($page,$related) and $page != $vars['page'] and is_page($page)) {
+ if (!array_key_exists($page,$related) and $page != $vars['page'] and is_page($page))
+ {
$related[$page] = get_filetime($page);
}
- if (is_page($page)) {
+ if (is_page($page))
+ {
$passage = get_pg_passage($page,FALSE);
$title = $link_compact ? '' : " title=\"$s_page$passage\"";
return "<a href=\"$script?$r_page$anchor\"$title>$s_alias</a>";
}
- else {
+ else
+ {
return $link_compact ?
"$s_alias<a href=\"$script?cmd=edit&page=$r_page$r_refer\">?</a>" :
"<span class=\"noexists\">$s_alias<a href=\"$script?cmd=edit&page=$r_page$r_refer\">?</a></span>";
{
global $defaultpage;
- if ($name == './') {
+ if ($name == './')
+ {
return $refer;
}
- if (substr($name,0,2) == './') {
+ if (substr($name,0,2) == './')
+ {
return $refer.substr($name,1);
}
- if (substr($name,0,3) == '../') {
+ if (substr($name,0,3) == '../')
+ {
$arrn = preg_split('/\//',$name,-1,PREG_SPLIT_NO_EMPTY);
$arrp = preg_split('/\//',$refer,-1,PREG_SPLIT_NO_EMPTY);
- while (count($arrn) > 0 and $arrn[0] == '..') {
+ while (count($arrn) > 0 and $arrn[0] == '..')
+ {
array_shift($arrn);
array_pop($arrp);
}