Tag: PHP wiki

preg_matchだけでwikiに挑戦

サンプル

ソース

<?php
$s = <<<EOS

#nofollow
#norelated
* SandBox: お砂場(練習ページ)です [#v299c566]
|SEO SPAMボットの攻撃対象になるため、デフォルトでこのページは凍結されています。|h
|SEO SPAMボットの攻撃対象になるため、デフォルトでこのページは凍結されています。|

#contents

* ''見出し'' [#n151e840]

* 大見出し 1 [#a6dc7f79]

** 中見出し 1-1 [#qa1c1e8c]

*** 小見出し 1-1-1 [#k28ac390]
- 項目1
- 項目2
- 項目3

段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1
段落1段落1段落1段落1段落1段落''強調''1段落1段落1段落1段落1段落1
段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1

段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2
段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2
段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2

** 中見出し 1-2 [#zcbf4116]
:用語1|いろいろ書いた解説文1と''強調単語'' ((注釈1: WikiName))
段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1
段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1
段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1
:用語2|いろいろ書いた解説文2 ((注釈2: [[SandBox]]へのリンク))
:用語3|いろいろ書いた解説文3 ((注釈3: 注釈の中にも((注釈の注釈を))作ることができます))

-----------------------------------------
* 大見出し 2 [#z3909cff]

** 小見出し 2-1 [#l26a869a]

** 小見出し 2-2 [#s6844309]
段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1
段落1段落1段落1段落'''イタリック'''1段落1段落1段落1段落1段落1段落1段落1
段落1段落1段落1段落'''''イタリックボールド'''''1段落1段落1段落1段落1段落1
> 段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2
> 段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2
> 段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2

レベル0レベル0レベル0レベル0レベル0レベル0
> レベル1
> レベル1
> レベル1
>> レベル2
>> レベル2
>> レベル2
>>> レベル3
- はろ1
-- はろ2
ろろろろ2
--- はろ3
-- はろ2
--- はろ3
-- はろ2
--- はろ3
>>> レベル3
>>> レベル3
>>> レベル3

* ''日付'' [#jfce72b9]
 日付 &date;
- 日付 &date;

 date?
- date?

 時刻 &time;
- 時刻 &time;

 time?
- time?

 日時 &now;
- 日時 &now;

 now?
- now?

 
* ''リンク'' [#jb6d4e84]

URLやメールアドレスは自動的にリンクになります
- URL -- http://example.org/
- メールアドレス -- foo@example.org
- URLが各種画像ファイルであればそのまま表示します
-- http://pukiwiki.sourceforge.jp/image/b_pukiwiki.official.png

 
* ''その他の文字装飾'' [#l89b765d]

 整形済みテキスト整形済みテキスト整形済みテキスト
 整形済みテキスト整形済みテキスト整形済みテキスト

&color(#993333){ 色の変更も可能なルール(&color(#993333)) };
&color(black,#993333){ 色の変更も可能なルール(&color(black,#993333)) };
COLOR(#993333){ 色の変更も可能なルール(COLOR(#993333)) }

&size(10){ サイズの変更も可能なルール(&size(10)) };
SIZE(10){ サイズの変更も可能なルール(SIZE(10)) }

SIZE(20){ COLOR(#333399){ 両方指定(SIZE(20)COLOR(#333399)) } }

%%打ち消し線%%

左寄せ
CENTER:中寄せ
RIGHT:右寄せ

aaa&br;bbb

ccc
#br
ddd

EOS;

$def = array(
"/\r?\n/"                                               => "\n",
                                                         
"/\n(LEFT|CENTER|RIGHT):([^\n]+)/e"                     => "'\n<div style=\"text-align:' . strtolower('\\1') . '\">\\2</div>'",
"/\n#br\n/"                                             => "\n<br />\n",
"/\n(#hr|-{4,})\n/"                                     => "\n<hr />\n",
"/~\n/"                                                 => "<br />",
"!(https?://[\w\d\./\-\_\?\&\%]+)!e"                    => "'<a href=\"\\1\">' . (preg_match('/(gif|jpe?g|png)$/', '\\1') ? '<img alt=\"\\1\" src=\"\\1\" />' : '\\1') . '</a>'",
"/([\w\d\.\_\-]+@[\w\d\.\-]+)/"                         => "<a href=\"mailto:\\1\">\\1</a>",
"/\n([^ \n].*)(&date;|date\?)/e"                        => "'\n\\1' . date('Y-m-d')",
"/\n([^ \n].*)(&time;|time\?)/e"                        => "'\n\\1' . date('H:i:s')",
"/\n([^ \n].*)(&now;|now\?)/e"                          => "'\n\\1' . date('Y-m-d (D) H:i:s')",

"/\n((?:\|[^\n]+)(?:\n\|[^\n]+)*)/e"                    => "'\n<table class=\"style_table\">\n<' . (strpos('\\1', \"|h\n\") === false ? 'tbody' : 'thead') . '>\n\\1\n</tbody>\n</table>\n'",
"/\n(?:\|([^\n\|]+(?:\|[^\n\|]+)*)\|)/e"                => "'\n<tr><td class=\"style_td\">' . preg_replace('/\|/', '</td><td>', '\\1') . '</td></tr>'",
"/tr>h\n/"                                              => "tr>\n</thead>\n<tbody>\n",
                                                         
"/\n((?:(?:[^\-\+<> \*\n]|\~)[^\n]+\n)+)/"              => "\n<p>\n\\1</p>\n",
"/\n((?:([>])[^\n]+\n)(?:[\-\+>][^\n]+\n)*)/"           => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?:([>]{2})[^\n]+\n)(?:[\-\+>]{2}[^\n]+\n)*)/"     => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?:([>]{3})[^\n]+\n)(?:[\-\+>]{3}[^\n]+\n)*)/"     => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?:([\-\+])[^\n]+\n)(?:[\-\+][^\n]+\n)*)/"         => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?:([\-\+]{2})[^\n]+\n)(?:[\-\+]{2}[^\n]+\n)*)/"   => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?:([\-\+]{3})[^\n]+\n)(?:[\-\+]{3}[^\n]+\n)*)/"   => "\n<ul\\2>\n\\1</ul\\2>\n",
"/\n((?: [^\n]+\n)+)/"                                  => "\n<pre>\n\\1</pre>\n",
                                                         
"/&br;/"                                                => "\n<br />\n",
"/'''([^']+)'''/"                                       => "<em>\\1</em>",
"/''([^']+)''/"                                         => "<strong>\\1</strong>",
"/%%([^']+)%%/"                                         => "<del>\\1</del>",
"/&color\(([^,\)]+),?([^\)]+|)\){([^}]+)};/e"           => "'<span style=\"color:\\1' . (strlen('\\2') > 0 ? ';background-color:\\2' : '') . '\">\\3</span>'",
"/COLOR\(([^\)]+)\){([^}]+)}/"                          => "<span style=\"color:\\1\">\\2</span>",
"/&size\(([^\)]+)\){([^}]+)};/"                         => "<span style=\"font-size:\\1px\">\\2</span>",
"/SIZE\(([^\)]+)\){([^}]+)}/"                           => "<span style=\"font-size:\\1px\">\\2</span>",
                                                         
"/\n\~([^\n]+)/"                                        => "\n\\1",
"/\n[\-\+]{1,3}([^\n]+)/"                               => "\n<li>\\1</li>",
"/\n>{1,3}([^\n]+)/"                                    => "\n<p class=\"quotation\">\\1</p>",
"/\n {1,3}([^\n]+)/"                                    => "\n\\1",
"/\n(\*{1,3})([^\n]+)/e"                                => "'\n<h' . (strlen('\\1') + 1) . '>\\2</h' . (strlen('\\1') + 1) . '>'",
                                                         
"/<(\/?)ul\-{1,3}>/"                                    => "<\\1ul>",
"/<(\/?)ul\+{1,3}>/"                                    => "<\\1ol>",
"/<(\/?)ul\>{1,3}>/"                                    => "<\\1blockquote>",
);

$p = array_keys($def);
$r = array_values($def);
$s1 = preg_replace($p, $r, $s);

echo <<< EOS
<?xml version="1.0" encoding="euc-jp"?>
EOS;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /><title>php</title>
<link rel="stylesheet" type="text/css" media="screen" href="/skin/pukiwiki.css.php?charset=Shift_JIS" charset="Shift_JIS" />
</head>
<body>
<?php echo $s1; ?>
</body>
</html>

Last-modified: 2010-05-25 (火) 16:24:04 (2647d)