• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

コミットメタ情報

リビジョン02ad12df5f3d524a5643b3920e4f73ee65ee51f1 (tree)
日時2022-01-24 02:11:23
作者hai-fun <haifun129@gmai...>
コミッターhai-fun

ログメッセージ

変更サマリ

差分

--- /dev/null
+++ b/paraedit.inc.php
@@ -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(&amp;help=true)/", "plugin=paraedit&amp;parnum=$vars[parnum]$1&amp;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&amp;parnum=$para_num&amp;page=" . rawurlencode($vars['page']) . '&amp;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