function plugin_minicalendar_convert()
{
    global $script, $vars, $post, $get, $weeklabels, $WikiName, $BracketName;
    //	global $_minicalendar_plugin_edit, $_minicalendar_plugin_empty;
    $_minicalendar_plugin_edit = _('[edit]');
    $_minicalendar_plugin_empty = _('%s is empty.');
    $today_view = TRUE;
    $today_args = 'viewex';
    $date_str = get_date('Ym');
    $base = strip_bracket($vars['page']);
    if (func_num_args() > 0) {
        $args = func_get_args();
        foreach ($args as $arg) {
            if (is_numeric($arg) && strlen($arg) == 6) {
                $date_str = $arg;
            } else {
                if ($arg == 'off') {
                    $today_view = FALSE;
                } else {
                    if ($arg == 'past' || $arg == 'pastex' || $arg == 'future' || $arg == 'futureex' || $arg == 'view' || $arg == 'viewex') {
                        $today_args = $arg;
                    } else {
                        $base = strip_bracket($arg);
                    }
                }
            }
        }
    }
    if ($base == '*') {
        $base = '';
        $prefix = '';
    } else {
        $prefix = $base . '/';
    }
    $r_base = rawurlencode($base);
    $s_base = htmlspecialchars($base);
    $r_prefix = rawurlencode($prefix);
    $s_prefix = htmlspecialchars($prefix);
    $yr = substr($date_str, 0, 4);
    $mon = substr($date_str, 4, 2);
    if ($yr != get_date('Y') || $mon != get_date('m')) {
        $now_day = 1;
        $other_month = 1;
    } else {
        $now_day = get_date('d');
        $other_month = 0;
    }
    $today = getdate(mktime(0, 0, 0, $mon, $now_day, $yr));
    $m_num = $today['mon'];
    $d_num = $today['mday'];
    $year = $today['year'];
    $f_today = getdate(mktime(0, 0, 0, $m_num, 1, $year));
    $wday = $f_today['wday'];
    $day = 1;
    $m_name = $year . '.' . $m_num;
    $y = substr($date_str, 0, 4) + 0;
    $m = substr($date_str, 4, 2) + 0;
    $prev_date_str = $m == 1 ? sprintf('%04d%02d', $y - 1, 12) : sprintf('%04d%02d', $y, $m - 1);
    $next_date_str = $m == 12 ? sprintf('%04d%02d', $y + 1, 1) : sprintf('%04d%02d', $y, $m + 1);
    $this_date_str = sprintf('%04d%02d', $y, $m);
    $page_YM = sprintf('%04d-%02d', $y, $m);
    $ret = '';
    if (!defined('UA_MOBILE') || UA_MOBILE == 0) {
        if ($today_view) {
            if (exist_plugin('topicpath')) {
                $ret = "<div id=\"topicpath\"><a href=\"" . $script . "\">" . PLUGIN_TOPICPATH_TOP_LABEL . "</a>" . PLUGIN_TOPICPATH_TOP_SEPARATOR . "calendar - " . $s_base . "</div>\n";
            }
            $ret .= "<h2>" . sprintf(_('%04d/%02d %s'), $y, $m, $s_base) . "</h2>\n";
            $ret .= "<table style=\"width:92%\" border=\"0\" cellspacing=\"0\" cellpadding=\"8\" summary=\"calendar frame\">\n <tr>\n  <td valign=\"top\" width=\"160\">\n";
        }
        $ret .= <<<EOD
   <table class="ministyle_calendar" cellspacing="1" width="150" border="0" summary="calendar body">
    <tr>
     <td class="ministyle_td_caltop" colspan="7">
      <a href="{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$prev_date_str}&amp;mode={$today_args}">&lt;&lt;</a>
      <strong>{$m_name}</strong>
      <a href="{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$next_date_str}&amp;mode={$today_args}">&gt;&gt;</a>
EOD;
        if ($prefix) {
            //		$ret .= "\n      <br />[<a href=\"" . get_page_uri($base) . "\">$s_base</a>]";
            $ret .= "\n      <br />[<a href=\"{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$this_date_str}&amp;mode={$today_args}\">{$s_base}</a>]";
        }
        $ret .= "\n     </td>\n    </tr>\n    <tr>\n";
        foreach ($weeklabels as $label) {
            $ret .= "     <td class=\"ministyle_td_week\">{$label}</td>\n";
        }
        $ret .= "    </tr>\n    <tr>\n";
        // Blank
        for ($i = 0; $i < $wday; $i++) {
            $ret .= "     <td class=\"ministyle_td_blank\">&nbsp;</td>\n";
        }
        while (checkdate($m_num, $day, $year)) {
            $dt = sprintf('%4d-%02d-%02d', $year, $m_num, $day);
            $page = $prefix . $dt;
            $r_page = rawurlencode($page);
            $s_page = htmlspecialchars($page);
            $h_today = public_holiday($year, $m_num, $day);
            $hday = $h_today['rc'];
            if ($wday == 0 and $day > 1) {
                $ret .= "    </tr>\n    <tr>\n";
            }
            $style = 'ministyle_td_day';
            // Weekday
            if (!$other_month && $day == $today['mday'] && $m_num == $today['mon'] && $year == $today['year']) {
                // Today
                $style = 'ministyle_td_today';
            } else {
                if ($hday != 0) {
                    // Holiday
                    $style = 'ministyle_td_sun';
                } else {
                    if ($wday == 0) {
                        // Sunday
                        $style = 'ministyle_td_sun';
                    } else {
                        if ($wday == 6) {
                            //  Saturday
                            $style = 'ministyle_td_sat';
                        }
                    }
                }
            }
            if (is_page($page)) {
                $link = "<a class=\"small\" href=\"" . get_page_uri($page) . "\" title=\"{$s_page}\"><strong>{$day}</strong></a>";
            } else {
                $link = "<a class=\"small\" href=\"{$script}?cmd=edit&amp;page={$r_page}&amp;refer={$r_base}\" title=\"{$s_page}\">{$day}</a>";
            }
            //		$ret .= "     <td class=\"$style\">\n      $link\n     </td>\n";
            $ret .= "     <td class=\"{$style}\">{$link}</td>\n";
            $day++;
            $wday = ++$wday % 7;
        }
        if ($wday > 0) {
            while ($wday++ < 7) {
                // Blank
                //			$ret .= "     <td class=\"ministyle_td_blank\">&nbsp;</td>\n";
                $ret .= "     <td class=\"ministyle_td_blank\"> </td>\n";
            }
        }
        $ret .= "    </tr>\n   </table>\n";
        if ($today_view) {
            if ($today_args == '') {
                $tpage = $prefix . sprintf("%4d-%02d-%02d", $today['year'], $today['mon'], $today['mday']);
                $r_tpage = rawurlencode($tpage);
                if (is_page($tpage)) {
                    $_page = $vars['page'];
                    $get['page'] = $post['page'] = $vars['page'] = $tpage;
                    $str = convert_html(get_source($tpage));
                    $str .= "<hr /><a class=\"small\" href=\"{$script}?cmd=edit&amp;page={$r_tpage}\">{$_minicalendar_plugin_edit}</a>";
                    $get['page'] = $post['page'] = $vars['page'] = $_page;
                } else {
                    $str = sprintf($_minicalendar_plugin_empty, make_pagelink(sprintf('%s%4d-%02d-%02d', $prefix, $today['year'], $today['mon'], $today['mday'])));
                }
            } else {
                $aryargs = array(rawurldecode($r_base), $page_YM, $today_args);
                if (exist_plugin('minicalendar_viewer')) {
                    bindtextdomain('minicalendar_viewer', LANG_DIR);
                    bind_textdomain_codeset('minicalendar_viewer', SOURCE_ENCODING);
                    textdomain('minicalendar_viewer');
                    $str = call_user_func_array('plugin_minicalendar_viewer_convert', $aryargs);
                    textdomain('minicalendar');
                }
            }
            $ret .= "  </td>\n  <td valign=\"top\">{$str}</td>\n </tr>\n</table>\n";
        }
    } else {
        //
        // for non-default profile
        //
        $ret .= <<<EOD
      <a href="{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$prev_date_str}&amp;mode={$today_args}">&lt;&lt;</a>
      <strong>{$m_name}</strong>
      <a href="{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$next_date_str}&amp;mode={$today_args}">&gt;&gt;</a>
EOD;
        if ($prefix) {
            //		$ret .= "\n      <br />[<a href=\"" . get_page_uri($base) . "\">$s_base</a>]";
            $ret .= "\n      <br />[<a href=\"{$script}?plugin=minicalendar&amp;file={$r_base}&amp;date={$this_date_str}&amp;mode={$today_args}\">{$s_base}</a>]";
        }
        $ret .= "<br />\n";
        foreach ($weeklabels as $label) {
            $ret .= "     {$label}\n";
        }
        $ret .= "<br />\n";
        // Blank
        for ($i = 0; $i < $wday; $i++) {
            $ret .= " &nbsp;&nbsp;\n";
        }
        while (checkdate($m_num, $day, $year)) {
            $dt = sprintf('%4d-%02d-%02d', $year, $m_num, $day);
            $page = $prefix . $dt;
            $r_page = rawurlencode($page);
            $s_page = htmlspecialchars($page);
            $h_today = public_holiday($year, $m_num, $day);
            $hday = $h_today['rc'];
            if ($wday == 0 and $day > 1) {
                $ret .= "    <br />\n";
            }
            $style = 'ministyle_td_day';
            // Weekday
            if (!$other_month && $day == $today['mday'] && $m_num == $today['mon'] && $year == $today['year']) {
                // Today
                $style = 'ministyle_td_today';
            } else {
                if ($hday != 0) {
                    // Holiday
                    $style = 'ministyle_td_sun';
                } else {
                    if ($wday == 0) {
                        // Sunday
                        $style = 'ministyle_td_sun';
                    } else {
                        if ($wday == 6) {
                            //  Saturday
                            $style = 'ministyle_td_sat';
                        }
                    }
                }
            }
            if (is_page($page)) {
                if ($day < 10) {
                    $spc = '&nbsp;';
                } else {
                    $spc = '';
                }
                $link = "{$spc}<a class=\"small\" href=\"" . get_page_uri($page) . "\" title=\"{$s_page}\"><font color=\"red\">{$day}</font></a>";
            } else {
                if ($day < 10) {
                    $spc = '&nbsp;';
                } else {
                    $spc = '';
                }
                $link = "{$spc}<a class=\"small\" href=\"{$script}?cmd=edit&amp;page={$r_page}&amp;refer={$r_base}\" title=\"{$s_page}\">{$day}</a>";
            }
            $ret .= $link . "\n";
            $day++;
            $wday = ++$wday % 7;
        }
        if ($wday > 0) {
            while ($wday++ < 7) {
                // Blank
                $ret .= " &nbsp;\n";
            }
        }
        $ret .= "<br /><br />\n";
        if ($today_view) {
            if ($today_args == '') {
                $tpage = $prefix . sprintf("%4d-%02d-%02d", $today['year'], $today['mon'], $today['mday']);
                $r_tpage = rawurlencode($tpage);
                if (is_page($tpage)) {
                    $_page = $vars['page'];
                    $get['page'] = $post['page'] = $vars['page'] = $tpage;
                    $str = convert_html(get_source($tpage));
                    $str .= "<hr /><a class=\"small\" href=\"{$script}?cmd=edit&amp;page={$r_tpage}\">{$_minicalendar_plugin_edit}</a>";
                    $get['page'] = $post['page'] = $vars['page'] = $_page;
                } else {
                    $str = sprintf($_minicalendar_plugin_empty, make_pagelink(sprintf('%s%4d-%02d-%02d', $prefix, $today['year'], $today['mon'], $today['mday'])));
                }
            } else {
                $aryargs = array(rawurldecode($r_base), $page_YM, $today_args);
                if (exist_plugin('minicalendar_viewer')) {
                    bindtextdomain('minicalendar_viewer', LANG_DIR);
                    bind_textdomain_codeset('minicalendar_viewer', SOURCE_ENCODING);
                    textdomain('minicalendar_viewer');
                    $str = call_user_func_array('plugin_minicalendar_viewer_convert', $aryargs);
                    textdomain('minicalendar');
                }
            }
            $ret .= $str . "\n";
        }
    }
    return $ret;
}
function plugin_calendar2_convert()
{
    global $script, $vars, $post, $get, $weeklabels, $WikiName, $BracketName;
    //	global $_calendar2_plugin_edit, $_calendar2_plugin_empty;
    $_calendar2_plugin_edit = _('[edit]');
    $_calendar2_plugin_empty = _('%s is empty.');
    $date_str = get_date('Ym');
    $base = strip_bracket($vars['page']);
    $today_view = TRUE;
    if (func_num_args()) {
        $args = func_get_args();
        foreach ($args as $arg) {
            if (is_numeric($arg) && strlen($arg) == 6) {
                $date_str = $arg;
            } else {
                if ($arg == 'off') {
                    $today_view = FALSE;
                } else {
                    $base = strip_bracket($arg);
                }
            }
        }
    }
    if ($base == '*') {
        $base = '';
        $prefix = '';
    } else {
        $prefix = $base . '/';
    }
    $r_base = rawurlencode($base);
    $s_base = htmlspecialchars($base);
    $r_prefix = rawurlencode($prefix);
    $s_prefix = htmlspecialchars($prefix);
    $yr = substr($date_str, 0, 4);
    $mon = substr($date_str, 4, 2);
    if ($yr != get_date('Y') || $mon != get_date('m')) {
        $now_day = 1;
        $other_month = 1;
    } else {
        $now_day = get_date('d');
        $other_month = 0;
    }
    $today = getdate(mktime(0, 0, 0, $mon, $now_day, $yr));
    $m_num = $today['mon'];
    $d_num = $today['mday'];
    $year = $today['year'];
    $f_today = getdate(mktime(0, 0, 0, $m_num, 1, $year));
    $wday = $f_today['wday'];
    $day = 1;
    $m_name = $year . '.' . $m_num;
    $y = substr($date_str, 0, 4) + 0;
    $m = substr($date_str, 4, 2) + 0;
    $prev_date_str = $m == 1 ? sprintf('%04d%02d', $y - 1, 12) : sprintf('%04d%02d', $y, $m - 1);
    $next_date_str = $m == 12 ? sprintf('%04d%02d', $y + 1, 1) : sprintf('%04d%02d', $y, $m + 1);
    $ret = '';
    if ($today_view) {
        $ret = '<table border="0" summary="calendar frame">' . "\n" . ' <tr>' . "\n" . '  <td valign="top">' . "\n";
    }
    $ret .= <<<EOD
   <table class="style_calendar" cellspacing="1" width="150" border="0" summary="calendar body">
    <tr>
     <td class="style_td_caltop" colspan="7">
      <a href="{$script}?plugin=calendar2&amp;file={$r_base}&amp;date={$prev_date_str}">&lt;&lt;</a>
      <strong>{$m_name}</strong>
      <a href="{$script}?plugin=calendar2&amp;file={$r_base}&amp;date={$next_date_str}">&gt;&gt;</a>
EOD;
    if ($prefix) {
        $ret .= "\n" . '      <br />[<a href="' . get_page_uri($base) . '">' . $s_base . '</a>]';
    }
    $ret .= "\n" . '     </td>' . "\n" . '    </tr>' . "\n" . '    <tr>' . "\n";
    foreach ($weeklabels as $label) {
        $ret .= '     <td class="style_td_week">' . $label . '</td>' . "\n";
    }
    $ret .= '    </tr>' . "\n" . '    <tr>' . "\n";
    // Blank
    for ($i = 0; $i < $wday; $i++) {
        $ret .= '     <td class="style_td_blank">&nbsp;</td>' . "\n";
    }
    while (checkdate($m_num, $day, $year)) {
        $dt = sprintf('%4d-%02d-%02d', $year, $m_num, $day);
        $page = $prefix . $dt;
        $r_page = rawurlencode($page);
        $s_page = htmlspecialchars($page);
        $h_today = public_holiday($year, $m_num, $day);
        $hday = $h_today['rc'];
        if ($wday == 0 && $day > 1) {
            $ret .= '    </tr>' . "\n" . '    <tr>' . "\n";
        }
        $style = 'style_td_day';
        // Weekday
        if (!$other_month && $day == $today['mday'] && $m_num == $today['mon'] && $year == $today['year']) {
            // Today
            $style = 'style_td_today';
        } else {
            if ($hday != 0) {
                // Holiday
                $style = 'style_td_sun';
            } else {
                if ($wday == 0) {
                    // Sunday
                    $style = 'style_td_sun';
                } else {
                    if ($wday == 6) {
                        // Saturday
                        $style = 'style_td_sat';
                    }
                }
            }
        }
        if (is_page($page)) {
            $link = '<a href="' . get_page_uri($page) . '" title="' . $s_page . '"><strong>' . $day . '</strong></a>';
        } else {
            // if (PKWK_READONLY) {
            if (auth::check_role('readonly')) {
                $link = '<span class="small">' . $day . '</small>';
            } else {
                $link = $script . '?cmd=edit&amp;page=' . $r_page . '&amp;refer=' . $r_base;
                $link = '<a class="small" href="' . $link . '" title="' . $s_page . '">' . $day . '</a>';
            }
        }
        $ret .= '     <td class="' . $style . '">' . "\n" . '      ' . $link . "\n" . '     </td>' . "\n";
        ++$day;
        $wday = ++$wday % 7;
    }
    if ($wday > 0) {
        while ($wday++ < 7) {
            // Blank
            $ret .= '     <td class="style_td_blank">&nbsp;</td>' . "\n";
        }
    }
    $ret .= '    </tr>' . "\n" . '   </table>' . "\n";
    if ($today_view) {
        $tpage = $prefix . sprintf('%4d-%02d-%02d', $today['year'], $today['mon'], $today['mday']);
        $r_tpage = rawurlencode($tpage);
        if (is_page($tpage)) {
            $_page = $vars['page'];
            $get['page'] = $post['page'] = $vars['page'] = $tpage;
            $str = convert_html(get_source($tpage));
            $str .= '<hr /><a class="small" href="' . $script . '?cmd=edit&amp;page=' . $r_tpage . '">' . $_calendar2_plugin_edit . '</a>';
            $get['page'] = $post['page'] = $vars['page'] = $_page;
        } else {
            $str = sprintf($_calendar2_plugin_empty, make_pagelink(sprintf('%s%4d-%02d-%02d', $prefix, $today['year'], $today['mon'], $today['mday'])));
        }
        $ret .= '  </td>' . "\n" . '  <td valign="top">' . $str . '</td>' . "\n" . ' </tr>' . "\n" . '</table>' . "\n";
    }
    return $ret;
}
function plugin_minicalendar_viewer_convert()
{
    global $vars, $get, $post, $script, $weeklabels;
    global $_err_calendar_viewer_param, $_err_calendar_viewer_param2;
    global $_msg_calendar_viewer_right, $_msg_calendar_viewer_left;
    global $_msg_calendar_viewer_restrict;
    global $_symbol_paraedit, $trackback;
    static $viewed = array();
    if (func_num_args() < 2) {
        return PLUGIN_MINICALENDAR_VIEWER_USAGE . '<br />' . "\n";
    }
    $func_vars_array = func_get_args();
    // デフォルト値をセット
    $pagename = $func_vars_array[0];
    // 基準となるページ名
    $limit_page = 7;
    // 表示する件数制限
    $date_YM = '';
    // 一覧表示する年月
    $mode = 'past';
    // 動作モード
    $date_sep = '-';
    // 日付のセパレータ calendar2なら"-" calendarなら""
    // Check $func_args[1]
    if (preg_match("/[0-9]{4}" . $date_sep . "[0-9]{2}/", $func_vars_array[1])) {
        //指定年月の一覧表示
        $page_YM = $func_vars_array[1];
        $limit_base = 0;
        $limit_page = 31;
        //手抜き。31日分をリミットとする。
    } else {
        if (preg_match("/this/si", $func_vars_array[1])) {
            //今月の一覧表示
            $page_YM = get_date('Y' . $date_sep . 'm');
            $limit_base = 0;
            $limit_page = 31;
        } else {
            if (preg_match("/^[0-9]+\$/", $func_vars_array[1])) {
                //n日分表示
                $limit_pitch = $func_vars_array[1];
                $limit_page = $limit_pitch;
                $limit_base = 0;
                $page_YM = '';
            } else {
                if (preg_match("/([0-9]+)\\*([0-9]+)/", $func_vars_array[1], $reg_array)) {
                    $limit_pitch = $reg_array[2];
                    $limit_page = $reg_array[1] + $limit_pitch;
                    $limit_base = $reg_array[1];
                    $page_YM = '';
                } else {
                    return '#calendar_viewer(): ' . $_err_calendar_viewer_param2 . '<br />' . "\n";
                }
            }
        }
    }
    // $func_args[2]: Change default delimiter
    if (isset($func_vars_array[2]) && preg_match("/^(past|pastex|view|viewex|future|futureex)\$/si", $func_vars_array[2])) {
        $mode = $func_vars_array[2];
    }
    // $func_args[3]: Change default delimiter
    if (isset($func_vars_array[3])) {
        $date_sep = $func_vars_array[3];
    }
    // Avoid Loop etc.
    if (isset($viewed[$pagename])) {
        if ($viewed[$pagename] > PLUGIN_MINICALENDAR_MAX_VIEWS) {
            $s_page = htmlspecialchars($pagename);
            return '#calendar_viewer(): You already view: ' . $s_page . '<br />';
        }
        $viewed[$pagename]++;
        // Valid
    } else {
        $viewed[$pagename] = 1;
        // Valid
    }
    // 一覧表示するページ名とファイル名のパターン ファイル名には年月を含む
    if ($pagename == '') {
        // pagename無しのyyyy-mm-ddに対応するための処理
        $pagepattern = '';
        $pagepattern_len = 0;
        $filepattern = encode($page_YM);
        $filepattern_len = strlen($filepattern);
    } else {
        $pagepattern = strip_bracket($pagename) . '/';
        $pagepattern_len = strlen($pagepattern);
        $filepattern = encode($pagepattern . $page_YM);
        $filepattern_len = strlen($filepattern);
    }
    // ページリストの取得
    $pagelist = array();
    if ($dir = @opendir(DATA_DIR)) {
        $_date = get_date('Y' . $date_sep . 'm' . $date_sep . 'd');
        $page_date = '';
        while ($file = readdir($dir)) {
            if ($file == '..' || $file == '.') {
                continue;
            }
            if (substr($file, 0, $filepattern_len) != $filepattern) {
                continue;
            }
            $page = decode(trim(preg_replace("/\\.txt\$/", " ", $file)));
            $page_date = substr($page, $pagepattern_len);
            // $pageがカレンダー形式なのかチェック デフォルトでは yyyy-mm-dd
            if (plugin_minicalendar_viewer_isValidDate($page_date, $date_sep) == FALSE) {
                continue;
            }
            // mode毎に別条件ではじく
            // pastex modeでは今日を含む未来のページはNG
            // futureex modeでは今日を含む過去のページはNG
            // past modeでは未来のページはNG
            // future modeでは過去のページはNG
            if ($page_date >= $_date && $mode == 'pastex') {
                continue;
            }
            if ($page_date <= $_date && $mode == 'futureex') {
                continue;
            }
            if ($page_date > $_date && $mode == 'past') {
                continue;
            }
            if ($page_date < $_date && $mode == 'future') {
                continue;
            }
            $pagelist[] = $page;
        }
    }
    closedir($dir);
    // まずソート
    if ($mode == 'past' || $mode == 'pastex' || $mode == 'viewex') {
        rsort($pagelist);
    } else {
        sort($pagelist);
    }
    // ここからインクルード
    $tmppage = $vars['page'];
    $return_body = '';
    // $limit_pageの件数までインクルード
    $tmp = max($limit_base, 0);
    // Skip minus
    while ($tmp < $limit_page) {
        if (!isset($pagelist[$tmp])) {
            break;
        }
        $page = $pagelist[$tmp];
        $get['page'] = $post['page'] = $vars['page'] = $page;
        // 現状で閲覧許可がある場合だけ表示する
        if (check_readable($page, FALSE, FALSE)) {
            if (function_exists('convert_filter')) {
                $body = convert_html(convert_filter(get_source($page)));
            } else {
                $body = convert_html(get_source($page));
            }
        } else {
            $body = str_replace('$1', $page, $_msg_calendar_viewer_restrict);
        }
        $r_page = rawurlencode($page);
        $s_page = htmlspecialchars($page);
        if (PLUGIN_MINICALENDAR_VIEWER_DATE_FORMAT !== FALSE) {
            $time = strtotime(basepagename($page));
            // $date_sep must be assumed '-' or ''!
            if ($time == -1 || $time == FALSE) {
                $s_page = htmlspecialchars($page);
                // Failed. Why?
            } else {
                $week = $weeklabels[date('w', $time)];
                $s_page = htmlspecialchars(str_replace(array('$w'), array($week), date(PLUGIN_CALENDAR_VIEWER_DATE_FORMAT, $time)));
            }
        }
        $refpage = rawurlencode($tmppage);
        $page_title = basepagename($page);
        $s_page_title = htmlspecialchars($page_title);
        // if (PKWK_READONLY) {
        if (auth::check_role('readonly')) {
            $link = get_page_uri($page);
        } else {
            $link = get_cmd_uri('edit', $page, '', 'refpage=' . $refpage);
        }
        $link = '<a class="anchor_super" href="' . $link . '">' . $_symbol_paraedit . '</a>';
        $head = '<h3 class="minicalendar">' . $s_page_title . ' ' . $link . '</h3>' . "\n";
        $tail = '';
        if (PLUGIN_MINICALENDAR_VIEWER_HOLIDAYVIEW === TRUE) {
            $time = strtotime($page_title);
            if ($time != -1) {
                $yy = intval(date('Y', $time));
                $mm = intval(date('n', $time));
                $dd = intval(date('d', $time));
                $monthlabel = array(1 => 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
                $mmstr = $monthlabel[$mm];
                $h_today = public_holiday($yy, $mm, $dd);
                if ($h_today['rc'] != 0) {
                    $classname = 'date_holiday';
                } else {
                    if ($h_today['w'] == 0) {
                        $classname = 'date_holiday';
                    } else {
                        if ($h_today['w'] == 6) {
                            $classname = 'date_weekend';
                        } else {
                            $classname = 'date_weekday';
                        }
                    }
                }
                $head = '<h3 class="' . $classname . '"><span class="day">' . sprintf('%02d', $dd) . '</span> <br />' . '<b>' . $mmstr . '</b>, <b>' . $yy . '</b>' . $link . '</h3>' . "\n";
            }
        }
        if (PLUGIN_MINICALENDAR_VIEWER_COMMENT === TRUE) {
            if (is_page(':config/plugin/addline/comment') && exist_plugin_inline('addline')) {
                $comm = convert_html(array('&addline(comment,above){comment};'));
                $comm = preg_replace(array("'<p>'si", "'</p>'si"), array("", ""), $comm);
                $tail .= str_replace('>comment', '><img src="' . IMAGE_URI . 'plus/comment.png" width="15" height="15" alt="Comment" title="Comment" />Comment', $comm);
            }
        }
        if (PLUGIN_MINICALENDAR_VIEWER_TRACKBACK === TRUE) {
            if ($trackback) {
                $tb_id = tb_get_id($page);
                $tail .= '<a href="' . $script . '?plugin=tb&amp;__mode=view&amp;tb_id=' . $tb_id . '">' . '<img src="' . IMAGE_URI . 'plus/trackback.png" width="15" height="15" alt="" title="" />Trackback(' . tb_count($page) . ')' . '</a>' . "\n";
            }
        }
        if ($tail != '') {
            $tail = '<div class="trackback">' . $tail . '</div>';
        }
        $return_body .= $head . '<div class="minicalendar_viewer">' . $body . '</div>' . $tail;
        ++$tmp;
    }
    //ここで、前後のリンクを表示
    //?plugin=minicalendar_viewer&file=ページ名&date=yyyy-mm
    $enc_pagename = rawurlencode(substr($pagepattern, 0, $pagepattern_len - 1));
    if ($page_YM != '') {
        // 年月表示時
        $date_sep_len = strlen($date_sep);
        $this_year = substr($page_YM, 0, 4);
        $this_month = substr($page_YM, 4 + $date_sep_len, 2);
        // 次月
        $next_year = $this_year;
        $next_month = $this_month + 1;
        if ($next_month > 12) {
            $next_year++;
            $next_month = 1;
        }
        $next_YM = sprintf('%04d%s%02d', $next_year, $date_sep, $next_month);
        $next_YMX = sprintf('%04d%02d', $next_year, $next_month);
        // 前月
        $prev_year = $this_year;
        $prev_month = $this_month - 1;
        if ($prev_month < 1) {
            $prev_year--;
            $prev_month = 12;
        }
        $prev_YM = sprintf('%04d%s%02d', $prev_year, $date_sep, $prev_month);
        $prev_YMX = sprintf('%04d%02d', $prev_year, $prev_month);
        //		if ($mode == "past" || $mode == "pastex") {
        //			$right_YM   = $prev_YM;
        //			$right_YMX  = $prev_YMX;
        //			$right_text = $prev_YM."&gt;&gt;";
        //			$left_YM    = $next_YM;
        //			$left_YMX   = $next_YMX;
        //			$left_text  = "&lt;&lt;".$next_YM;
        //		} else {
        $left_YM = $prev_YM;
        $left_YMX = $prev_YMX;
        $left_text = '&lt;&lt;' . $prev_YM;
        $right_YM = $next_YM;
        $right_YMX = $next_YMX;
        $right_text = $next_YM . '&gt;&gt;';
        //		}
    } else {
        // n件表示時
        if ($limit_base >= count($pagelist)) {
            $right_YM = '';
        } else {
            $right_base = $limit_base + $limit_pitch;
            $right_YM = $right_base . '*' . $limit_pitch;
            $right_text = sprintf($_msg_calendar_viewer_right, $limit_pitch);
        }
        $left_base = $limit_base - $limit_pitch;
        if ($left_base >= 0) {
            $left_YM = $left_base . '*' . $limit_pitch;
            $left_text = sprintf($_msg_calendar_viewer_left, $limit_pitch);
        } else {
            $left_YM = '';
        }
        $prev_YMX = '';
        $next_YMX = '';
    }
    // ナビゲート用のリンクを末尾に追加
    $s_date_sep = htmlspecialchars($date_sep);
    if ($left_YM != '') {
        if ($left_YMX != '') {
            $left_link = '<a href="' . $script . '?plugin=minicalendar&amp;file=' . $enc_pagename . '&amp;date=' . $left_YMX . '">' . $left_text . '</a>';
        } else {
            $left_link = '<a href="' . $script . '?plugin=minicalendar_viewer&amp;file=' . $enc_pagename . '&amp;date=' . $left_YM . '&amp;date_sep=' . $s_date_sep . '&amp;mode=' . $mode . '">' . $left_text . '</a>';
        }
    } else {
        $left_link = '';
    }
    if ($right_YM != '') {
        if ($right_YMX != '') {
            $right_link = '<a href="' . $script . '?plugin=minicalendar&amp;file=' . $enc_pagename . '&amp;date=' . $right_YMX . '">' . $right_text . '</a>';
        } else {
            $right_link = '<a href="' . $script . '?plugin=minicalendar_viewer&amp;file=' . $enc_pagename . '&amp;date=' . $right_YM . '&amp;date_sep=' . $s_date_sep . '&amp;mode=' . $mode . '">' . $right_text . '</a>';
        }
    } else {
        $right_link = '';
    }
    //past modeは<<新 旧>> 他は<<旧 新>>
    $return_body .= '<div class="prevnext">';
    $return_body .= '<div class="prevnext_r">' . $right_link . '</div>';
    $return_body .= '<div class="prevnext_l">' . $left_link . '</div>';
    $return_body .= '</div><br style="display:block;clear:both" />';
    $get['page'] = $post['page'] = $vars['page'] = $tmppage;
    return $return_body;
}
function plugin_calendar_convert()
{
    global $vars, $weeklabels;
    $read_only = 0;
    $around = 0;
    $align = '';
    $mode = 'viewex';
    $summary = 'calendar body';
    $date_str = get_date('Ym');
    $base = strip_bracket($vars['page']);
    // First Arguments are "PAGE"
    $attr = func_get_args();
    if (func_num_args()) {
        $argv = array_shift($attr);
        if ($argv) {
            $base = strip_bracket($argv);
        }
    }
    // Vaildate argument(s)
    foreach ($attr as $argv) {
        if (is_numeric($argv) && strlen($argv) == 6) {
            $date_str = $argv;
        } else {
            if ($argv == 'noedit') {
                $read_only = 1;
            } else {
                if ($argv == 'around') {
                    $around = 1;
                } else {
                    if ($argv == 'left' || $argv == 'center' || $argv == 'right') {
                        $align = $argv;
                    } else {
                        $summary = htmlspecialchars($argv);
                    }
                }
            }
        }
    }
    if ($base == '*') {
        $prefix = $base = '';
    } else {
        $prefix = $base . '/';
    }
    $r_base = rawurlencode($base);
    $s_base = htmlspecialchars($base);
    $r_prefix = rawurlencode($prefix);
    $s_prefix = htmlspecialchars($prefix);
    $yy = substr($date_str, 0, 4);
    $mm = substr($date_str, 4, 2);
    if ($yy != get_date('Y') || $mm != get_date('m')) {
        $other_month = 1;
        $now_day = 1;
    } else {
        $other_month = 0;
        $now_day = get_date('d');
    }
    $today = getdate(mktime(0, 0, 0, $mm, $now_day, $yy));
    $m_num = $today['mon'];
    $d_num = $today['mday'];
    $y_num = $today['year'];
    $f_today = getdate(mktime(0, 0, 0, $m_num, 1, $y_num));
    $wday = $f_today['wday'];
    $day = 1;
    $m_name = $y_num . '/' . $m_num;
    $y = substr($date_str, 0, 4) + 0;
    $m = substr($date_str, 4, 2) + 0;
    $prev_date_str = $m == 1 ? sprintf('%04d%02d', $y - 1, 12) : sprintf('%04d%02d', $y, $m - 1);
    $next_date_str = $m == 12 ? sprintf('%04d%02d', $y + 1, 1) : sprintf('%04d%02d', $y, $m + 1);
    $this_date_str = sprintf('%04d%02d', $y, $m);
    $page_YM = sprintf('%04d-%02d', $y, $m);
    $calendar_head = $calendar_week = $calendar_body = '';
    // create header
    $calendar_head .= '   <a href="' . get_cmd_uri(PLUGIN_CALENDAR_ACTION, '', '', 'file=' . $r_base . '&date=' . $prev_date_str . '&mode=' . $mode) . '">&lt;&lt;</a>' . "\n" . '   <strong>' . $m_name . '</strong>' . "\n" . '   <a href="' . get_cmd_uri(PLUGIN_CALENDAR_ACTION, '', '', 'file=' . $r_base . '&date=' . $next_date_str . '&mode=' . $mode) . '">&gt;&gt;</a>';
    if ($prefix) {
        $calendar_head .= "\n" . '   <br />' . "\n" . '[<a href="' . get_cmd_uri(PLUGIN_CALENDAR_ACTION, '', '', 'file=' . $r_base . '&date=' . $this_date_str . '&mode=' . $mode) . '">' . $s_base . '</a>]';
    }
    // create week label
    foreach ($weeklabels as $label) {
        $calendar_week .= '  <td class="calendar_td_week">' . $label . '</td>' . "\n";
    }
    // Blank
    for ($i = 0; $i < $wday; $i++) {
        $calendar_body .= '  <td class="calendar_td_blank">&nbsp;</td>' . "\n";
    }
    while (checkdate($m_num, $day, $y_num)) {
        $dt = sprintf('%4d-%02d-%02d', $y_num, $m_num, $day);
        $page = $prefix . $dt;
        $s_page = htmlspecialchars($page);
        $h_today = public_holiday($y_num, $m_num, $day);
        $hday = $h_today['rc'];
        if ($wday == 0 and $day > 1) {
            $calendar_body .= " </tr>\n <tr>\n";
        }
        $style = 'calendar_td_day';
        // Weekday
        if (!$other_month && $day == $today['mday'] && $m_num == $today['mon'] && $y_num == $today['year']) {
            $style = 'calendar_td_today';
            // Today
        } else {
            if ($hday != 0) {
                $style = 'calendar_td_sun';
                // Holiday
            } else {
                if ($wday == 0) {
                    $style = 'calendar_td_sun';
                    // Sunday
                } else {
                    if ($wday == 6) {
                        $style = 'calendar_td_sat';
                        // Saturday
                    }
                }
            }
        }
        if (is_page($page)) {
            $link = '<a href="' . get_page_uri($page) . '" title="' . $s_page . '"><strong>' . $day . '</strong></a>';
        } elseif ($read_only) {
            $link = $day;
        } else {
            $link = '<a href="' . get_cmd_uri('edit', $page, '', 'refer=' . $base) . '" title="' . $s_page . '">' . $day . '</a>';
        }
        $calendar_body .= '  <td class="' . $style . '">' . $link . '</td>' . "\n";
        $day++;
        $wday = ++$wday % 7;
    }
    if ($wday > 0) {
        while ($wday++ < 7) {
            $calendar_body .= '  <td class="calendar_td_blank">&nbsp;</td>' . "\n";
        }
    }
    $calstyle = '';
    if ($align != '') {
        if ($around && $align != 'center') {
            $calstyle = 'float:' . $align . ';';
        }
        $ex = $around ? '1ex' : 'auto';
        if ($align == 'left') {
            $calstyle .= "margin:auto {$ex} auto 0px;";
        }
        if ($align == 'right') {
            $calstyle .= "margin:auto 0px auto {$ex};";
        }
    }
    if ($calstyle != '') {
        $calstyle = ' style="' . $calstyle . '"';
    }
    $output .= <<<EOD
<div class="ie5">
<table class="calendar"{$calstyle} border="0" cellspacing="1" summary="{$summary}">
 <tr>
  <td class="calendar_td_caltop" colspan="7">
{$calendar_head}
  </td>
 </tr>
 <tr>
{$calendar_week}
 </tr>
 <tr>
{$calendar_body}
 </tr>
</table>
</div><!--/ie5/-->
EOD;
    return $output;
}