<?php

/*
 include2.inc.php
 ページをインクルードする

#include2({ページ名},{行数指定},{オプション})

-----行数指定-----
省略	:全部表示
m-n	:m行目からn行目まで表示。
n-n	:n行目の一行だけ追加。
m-	:m行目から全部表示。
n	:最初からn行目まで表示。(1-n と同じ。)

-----オプション-----
read	：includeしているページへのリンクを表示。（※省略時デフォルト） 
edit	：includeしているページへの編集リンクを表示。
title	：includeしているページ名表示。（リンクはしない）
page	：階層化しているページの最後の部分を表示。
none	：includeしているページのタイトルもリンクも表示しない。

*/

// インクルードする最大ページ数
define('PLUGIN_INCLUDE2_MAX', 5);

function plugin_include2_convert()
{
	global $script,$vars,$get,$post,$hr,$WikiName,$BracketName;
	global $_msg_include_restrict;
	static $include_list = array(); //処理済ページ名の配列
	static $count = 1;

	if (func_num_args() == 0)
	{
		return;
	}

	$include_list[$vars['page']] = TRUE;

	list($page,$line,$opt) = func_get_args();
	$page = strip_bracket($page);

	//if (!is_page($page) or isset($include_list[$page]))
	//{
	//	return '';
	//}
	$include_list[$page] = TRUE;
	
	$_page = $vars['page'];
	$get['page'] = $post['page'] = $vars['page'] = $page;

	// includeのときは、認証画面をいちいち出さず、後始末もこちらでつける
	if (check_readable($page, false, false)) {
		$src = get_source($page);
		$src = array_filter($src,"include_comment");

	//      行指定の処理
	if ($line == ""){}

	//  m-n	:m行目からn行目まで表示。
		elseif (ereg ("([0-9]+)-([0-9]+)", $line, $regs)){
			list(,$line_start,$line_end) = $regs;
			if ($line_start >0 && $line_start < $line_end){
				$offset = $line_start -1;
				$length = $line_end - $line_start +1;
				$src = array_slice ($src,$offset,$length);
			}
			elseif ($line_start >0 && $line_start == $line_end){	//n-n　:ｎ行目の一行だけ表示。
				$offset = $line_start -1;
				$src = array_slice ($src,$offset,1);
			}
			else {$src = "errer\n";}
		}

	//  m-	:m行目から全部表示。
		elseif (ereg ("([0-9]+)-", $line, $regs)){
			$offset = $regs[1] -1;
			$src = array_slice ($src,$offset);
		}

	//  n	:最初からn行目まで表示。( 1-n と同じ。)
		elseif (ereg ("[0-9]+", $line)){
			if ($line > 0){
				$length = $line;
				$src = array_slice ($src,0,$length);
			}
			else {$src = "errer\n";}
	}

	else {$src = "errer\n";}

		$body = convert_html($src);
	} else {
		$body = str_replace('$1',$page,$_msg_include_restrict);
	}
	
	$get['page'] = $post['page'] = $vars['page'] = $_page;
	
	$s_page = htmlspecialchars($page);
	$r_page = rawurlencode($page);
	$k_page = array_pop(explode('/', $s_page));

	$contents_id = $count + 2; // include ページの contents_id は 2 からはじまる。
	
	if ($count > PLUGIN_INCLUDE2_MAX) {
		return '#include2(): インクルードする最大ページ数を越えました: ' . $link . '<br />' . "\n";
	} else {
		++$count;
	}

	// リンク先の作成
	if($opt === "edit") {
		$link = "<a href=\"$script?cmd=edit&amp;page=$r_page\">$s_page</a>";
	} elseif($opt === "title") {
		$link = "$s_page";
	} elseif($opt === "none") {
		$link = "";
	} elseif($opt === "page") {
		$link = "$k_page";
	} else {
		$link = "<a href=\"$script?$r_page\">$s_page</a>";
	}
	if ($page == 'MenuBar')
	{
		$body = "<span align=\"center\"><h5 class=\"side_label\" id=\"content_" . 
			($contents_id - 1) . "\">$link</h5></span>\n<small>$body</small>";
	}
	else
	{
		if ($link != "")
		{
			$body = "<h1 id=\"content_" . ($contents_id - 1) . "\">$link</h1>\n$body\n";
		}
	}

	return $body;
}
	function include_comment($var){
		if (ereg("^//",$var)){
	return false;
		}else{
	return true;
		}
}
?>
