リビジョン | 02ad12df5f3d524a5643b3920e4f73ee65ee51f1 (tree) |
---|---|
日時 | 2022-01-24 02:11:23 |
作者 | hai-fun <haifun129@gmai...> |
コミッター | hai-fun |
v0.9, author: tmk, dl: http://taru.s223.xrea.com/index.php?PukiWiki%2Fvanish
@@ -0,0 +1,231 @@ | ||
1 | +<?php | |
2 | +define(_PARAEDIT_VERSION, 0.8); | |
3 | + | |
4 | +/* | |
5 | + | |
6 | +* パラグラフ指向化プラグイン - paraedit 0.8 | |
7 | + | |
8 | +PukiWikiでパラグラフ単位の編集をできるようにするプラグインです。 | |
9 | + | |
10 | +*********************************************************** | |
11 | + taru : paraedit0.7a 変更点について | |
12 | + | |
13 | + 1. PHP5.2.0より正規表現関数への制限としてphp.iniに | |
14 | + pcre.backtrack_limitとpcre.recursion_limitの設定が | |
15 | + 追加されています。 | |
16 | + この動作変更により、paraedit 0.6の仕様ではページ | |
17 | + 内の文字数が制限値へダイレクトに影響してしまい、 | |
18 | + 制限値を超える文字を加えた場合、空データを返して | |
19 | + しまう事がわかりました。 | |
20 | + 調べてみると問題になっている部分のparaedit 0.6 | |
21 | + の処理は、無駄っぽいため、直接ページデータ渡す処理 | |
22 | + に変更してみました。 | |
23 | + ※php.iniを変更できる管理者であれば、設定値を調整 | |
24 | + することで、問題の現象を回避することが出来るかも | |
25 | + しれません。 | |
26 | + | |
27 | + 2. 「テキスト整形のルール」のリンク処理を変更 | |
28 | + | |
29 | + | |
30 | + taru : paraedit0.8 変更点について | |
31 | + | |
32 | + 1. function plugin_paraedit_init()で参照しているinit.php | |
33 | + がPukiWiki 1.4.7ではlibフォルダに格納されているから | |
34 | + pukiwiki.phpの定義をコピペしてみた。 | |
35 | + 但し、必要なのか不明 | |
36 | + 2. UTF-8環境でEUC-JPにて書かれたプログラムをそのまま使う | |
37 | + 人が多いようなのでUTF-8Nで保存しなおします。 | |
38 | + | |
39 | + 対象環境: PukiWiki-1.4.7 UTF-8N | |
40 | + PHP5.2.0以降 | |
41 | + | |
42 | + http://taru.s223.xrea.com/ | |
43 | +*********************************************************** | |
44 | + | |
45 | +** Copyright | |
46 | +tmk http://linux.s33.xrea.com:8080/SxWiki/ | |
47 | + | |
48 | +** Licence | |
49 | +GPL2 (GNU General Public License version 2) | |
50 | + | |
51 | + | |
52 | +*/ | |
53 | + | |
54 | +// 編集リンクの文字列・スタイルを指定 | |
55 | +// %s に URL が入る | |
56 | +//define(_EDIT_LINK, '<div style="text-align: right; font-size: x-small; padding: 0px; "><a href="%s">[edit]</a></div>'); | |
57 | + | |
58 | +define(_EDIT_LINK, '<span style="float:right; font-size: small; font-weight: lighter; padding: 0px 0px 0px 1em; ">[<a href="%s">edit</a>]</span>'); | |
59 | + | |
60 | + | |
61 | +// 編集リンクの挿入箇所を指定 | |
62 | +// <h2>header</h2> の時、$1:<h2>, $2:header, $3:</h2> となるので $link を好きな場所に移動 | |
63 | +// (例) | |
64 | +// define(_PARAEDIT_LINK_POS, '$1$2$link$3'); // </h2>の前 | |
65 | + define(_PARAEDIT_LINK_POS, '$1$2$link$3'); // </h2>の前 | |
66 | +// define(_PARAEDIT_LINK_POS, '$link$1$2$3'); // <h2>の前 | |
67 | +// define(_PARAEDIT_LINK_POS, '$1$2$3$link'); // </h2>の後ろ | |
68 | + | |
69 | + | |
70 | + | |
71 | + | |
72 | +// 改行の代替文字列 | |
73 | +// <input type=hidden value=XXXXX> で改行(CR,LFなど)の変わりに使用する文字列 | |
74 | +define(_PARAEDIT_SEPARATE_STR, '_PaRaeDiT_'); | |
75 | + | |
76 | + | |
77 | +function plugin_paraedit_init() | |
78 | +{ | |
79 | + // init | |
80 | + // プログラムファイル読み込み | |
81 | + require(LIB_DIR . 'init.php'); | |
82 | +} | |
83 | + | |
84 | + | |
85 | +function plugin_paraedit_convert() | |
86 | +{ | |
87 | + // HTML にコンバート時に呼び出される- | |
88 | + return 'ParaEdit version '. _PARAEDIT_VERSION . "\n"; | |
89 | +} | |
90 | + | |
91 | + | |
92 | +function plugin_paraedit_action() | |
93 | +{ | |
94 | + // GET POST 時に呼び出される | |
95 | + global $script, $get, $post, $vars; | |
96 | + global $_title_edit; // $LANG.lng で定義済 | |
97 | + | |
98 | + // 編集不可能なページを編集しようとしたとき | |
99 | + if (S_VERSION < 1.4) { | |
100 | + if (is_freeze($vars['page']) || !is_editable($vars['page']) || $vars["page"] == "") | |
101 | + { | |
102 | + $wikiname = rawurlencode($vars['page']); | |
103 | + header("Location: $script?cmd=edit&page=$wikiname"); | |
104 | + die(); | |
105 | + } | |
106 | + } else { | |
107 | + // check_editable($page, BASIC認証表示, NG画面に遷移) | |
108 | + check_editable($vars['page'], true, true); | |
109 | + } | |
110 | + | |
111 | + // pukiwiki.php から拝借 | |
112 | + $postdata = @join("",get_source($get['page'])); | |
113 | + if($postdata == "") { | |
114 | + $postdata = auto_template($get['page']); //# should be test | |
115 | + } | |
116 | + $postdata = htmlspecialchars($postdata); | |
117 | + | |
118 | +// #$page = str_replace('$1',make_search($get['page']), $_title_edit); | |
119 | + $page = $_title_edit; | |
120 | + | |
121 | + // edit_form() で $postdata = $vars[refer] . $postdata; となるため小細工 | |
122 | + $refer = $vars['refer']; | |
123 | + $vars['refer'] = ''; | |
124 | + | |
125 | + $textdata = '___paraedit_taxtarea___'; | |
126 | + if (S_VERSION < 1.4) { | |
127 | + $body = edit_form($textdata, $get['page']); // v 1.3.5 | |
128 | + } else { | |
129 | + $body = edit_form($get['page'], $textdata); // v 1.4 | |
130 | + } | |
131 | + | |
132 | + $vars['refer'] = $refer; | |
133 | + | |
134 | + // <textarea name="msg" ...> 前後で分割 | |
135 | + $lines = array(); | |
136 | + $textareas = array(); // 0: whole, 1: before msg, 2: textarea tag, 3: msg 4: after msg | |
137 | + preg_match("/^(.*?)(<textarea .*?>)(___paraedit_taxtarea___)(<\/textarea>.*)$/is", $body, $textareas); | |
138 | + | |
139 | + // 改行コードを \n に統一 | |
140 | +// $vars['msg'] = preg_replace("/((\x0D\x0A)|(\x0D)|(\x0A))/", "\n", $vars["msg"]); | |
141 | + $vars["msg"] = str_replace("\r", "\n", str_replace("\r\n", "\n", $vars["msg"])); | |
142 | + | |
143 | + // $vars[msg] を分割 | |
144 | + $msg_before; $msg_now; $msg_after; // 編集行とその前後 | |
145 | + $part = $vars['parnum']; | |
146 | + $index_num = 0; | |
147 | + $is_first_line = 1; | |
148 | + foreach (explode ("\n", $postdata) as $line) { | |
149 | + if (preg_match("/^\*{1,3}/", $line)) { | |
150 | + $index_num++; | |
151 | + } | |
152 | + if (!$is_first_line) { $line = "\n$line"; } else { $is_first_line = 0; } | |
153 | + if ($index_num < $part) { | |
154 | + $msg_before .= $line; | |
155 | + } else if ($index_num == $part) { | |
156 | + $msg_now .= $line; | |
157 | + } else if ($index_num > $part) { | |
158 | + $msg_after .= $line; | |
159 | + } | |
160 | + } | |
161 | + | |
162 | + // 微調整 (silly!) | |
163 | + $msg_before = preg_replace("/^\n/", "", $msg_before); | |
164 | + if ($msg_before) { $msg_before .= "\n"; } | |
165 | + | |
166 | + // 改行コードを書換え | |
167 | + $msg_before = preg_replace("/\n/", _PARAEDIT_SEPARATE_STR, $msg_before); | |
168 | + $msg_after = preg_replace("/\n/", _PARAEDIT_SEPARATE_STR, $msg_after); | |
169 | + | |
170 | + // 結合 | |
171 | + $body = $textareas[1] | |
172 | + . '<input type="hidden" name="msg_before" value="' . $msg_before . '" />' . "\n" | |
173 | + . '<input type="hidden" name="msg_after" value="' . $msg_after . '" />' . "\n" | |
174 | + . $textareas[2] . $msg_now . $textareas[4]; | |
175 | + | |
176 | + // ヘルプ表示 : リンク書き換え | |
177 | + $body = preg_replace("/cmd=edit(&help=true)/", "plugin=paraedit&parnum=$vars[parnum]$1&refer=" . rawurlencode($vars['page']), $body); | |
178 | + | |
179 | + return array("msg" => $page, "body" => $body); | |
180 | +} | |
181 | + | |
182 | +function _plugin_paraedit_mkeditlink($body) | |
183 | +{ | |
184 | + // [edit]リンクの作成 | |
185 | + global $script, $get, $post, $vars; | |
186 | + $lines = explode("\n", $body); | |
187 | + | |
188 | + $para_num = 1; | |
189 | + $lines2 = array(); | |
190 | + foreach ($lines as $line) { | |
191 | +// #if (preg_match("/<\/h\d>$/", $line)) { | |
192 | + if (preg_match("/<h\d .*? paraedit_flag=on/", $line)) { | |
193 | + #$link = "$script?plugin=paraedit&parnum=$para_num&page=" . rawurlencode($vars[page]); // v 1.3.5 | |
194 | + $line = preg_replace("/ paraedit_flag=on/", "", $line); | |
195 | + $link = "$script?plugin=paraedit&parnum=$para_num&page=" . rawurlencode($vars['page']) . '&refer=' . rawurlencode($vars['page']); // v 1.4 | |
196 | + $link = sprintf(_EDIT_LINK, $link); | |
197 | + $replaced = _PARAEDIT_LINK_POS; | |
198 | + eval(" \$replaced = \"$replaced\"; "); | |
199 | + $line = preg_replace("/(<h\d.*?>)(.*)(<\/h\d>)/", $replaced, $line); | |
200 | + | |
201 | + $para_num++; | |
202 | + } | |
203 | + array_push($lines2, $line); | |
204 | + } | |
205 | + | |
206 | + $body = @join("\n", $lines2); | |
207 | + return $body; | |
208 | +} | |
209 | + | |
210 | + | |
211 | +function _plugin_paraedit_parse_postmsg($msg_before, $msg_now, $msg_after) | |
212 | +{ | |
213 | + // pukiwiki.php から呼び出し、 | |
214 | + // $post["msg_*"] を整形・結合して $post["msg"] を返す | |
215 | + | |
216 | + if ($msg_before == "" && $msg_after == "") { return $msg_now; } | |
217 | + | |
218 | + // 改行代替文字列を \n に変換 | |
219 | + $msg_before = str_replace(_PARAEDIT_SEPARATE_STR, "\n", $msg_before); | |
220 | + $msg_now = str_replace(_PARAEDIT_SEPARATE_STR, "\n", $msg_now); | |
221 | + $msg_after = str_replace(_PARAEDIT_SEPARATE_STR, "\n", $msg_after); | |
222 | + | |
223 | + // 整形 | |
224 | + //$msg_before .= (preg_match("/\n$/", $msg_before)) ? "" : "\n"; | |
225 | + //$msg_now .= (preg_match("/\n$/", $msg_now) ) ? "" : "\n"; | |
226 | + | |
227 | + // 結合 | |
228 | + return $msg_before . $msg_now . $msg_after; | |
229 | +} | |
230 | + | |
231 | +?> | |
\ No newline at end of file |