/[pub]/suikawiki/script/wiki.cgi
Suika

Diff of /suikawiki/script/wiki.cgi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by wakaba, Mon Feb 4 13:19:08 2002 UTC revision 1.8 by wakaba, Sun Mar 24 00:51:52 2002 UTC
# Line 1  Line 1 
1  #!/usr/local/bin/perl  #!/usr/bin/perl
2  use lib "../lib";  use lib "../lib";
3  use CGI::Carp 'fatalsToBrowser';  use CGI::Carp 'fatalsToBrowser';
4  use Algorithm::Diff qw(traverse_sequences);  use Algorithm::Diff qw(traverse_sequences);
# Line 24  use Algorithm::Diff qw(traverse_sequence Line 24  use Algorithm::Diff qw(traverse_sequence
24  ##############################  ##############################
25  my $version = "1.6.6";  my $version = "1.6.6";
26  ##############################  ##############################
27  # 単独テストのときには 1 にする。  # テアニネ・ニ・ケ・ネ、ホ、ネ、ュ、ヒ、マ 1 、ヒ、ケ、。」
28  my $testing = 0;  my $testing = 0;
29  ##############################  ##############################
30  # 漢字ライブラリ  # エチサ・鬣、・ヨ・鬣
31  my $jcodelib = 'jcode.pl';  my $jcodelib = 'jcode.pl';
32  ##############################  ##############################
33  # 保存・表示の漢字コード  # ハンツク。ヲノスシィ、ホエチサ・ウ。シ・ノ
34  my $kanjicode = 'sjis';     # 'sjis' 'euc'  my $kanjicode = 'euc';     # 'sjis' 'euc'
35  my $charset = 'Shift_JIS';  # 'Shift_JIS' 'EUC-JP'  my $charset = 'euc-jisx0213';  # 'Shift_JIS' 'EUC-JP'
36  ##############################  ##############################
37  # dbmopenが使えるなら1、使えないなら0  # dbmopen、ャサネ、ィ、、ハ、1。「サネ、ィ、ハ、、、ハ、0
38  my $dbmopen = 0;  my $dbmopen = 0;
39  ##############################  ##############################
40  # データベース名(.pag, .dir, .dbなどは不要)  # ・ヌ。シ・ソ・ル。シ・ケフセ。ハ.pag, .dir, .db、ハ、ノ、マノヤヘラ。ヒ
41  # $dbmopen = 1のときはデータベース名、  # $dbmopen = 1、ホ、ネ、ュ、マ・ヌ。シ・ソ・ル。シ・ケフセ。「
42  # $dbmopen = 0のときはディレクトリ名になる。  # $dbmopen = 0、ホ、ネ、ュ、マ・ヌ・」・・ッ・ネ・フセ、ヒ、ハ、。」
43  my $dbname = './yukiwiki';  my $dbname = './wikidata';
44  my $diffdbname = './yukidiff';  my $diffdbname = './wikidiff';
45  ##############################  ##############################
46  # 修正者の氏名(自由に変更してください)  # ス、タオシヤ、ホサ睥セ。ハシォヘウ、ヒハムケケ、キ、ニ、ッ、タ、オ、、。ヒ
47  my $modifier = 'Hiroshi Yuki';  my $modifier = 'suika';
48  ##############################  ##############################
49  # 修正者のWebページ(自由に変更してください)  # ス、タオシヤ、ホWeb・レ。シ・ク。ハシォヘウ、ヒハムケケ、キ、ニ、ッ、タ、オ、、。ヒ
50  my $modifierlink = 'http://www.hyuki.com/';  my $modifierlink = 'http://suika.fam.cx/';
51  ##############################  ##############################
52  # このページのURL  # 、ウ、ホ・レ。シ・ク、ホURL
53  my $thisurl = 'yukiwiki.cgi';  my $thisurl = 'wiki';
54  ##############################  ##############################
55  # 開始ページ名  # ウォサマ・レ。シ・クフセ
56  my $toppage = 'FrontPage';  my $toppage = 'HomePage';
57  ##############################  ##############################
58  # 最終更新ページ名  # コヌスェケケソキ・レ。シ・クフセ
59  my $whatsnew = 'RecentChanges';  my $whatsnew = 'RecentChanges';
60  ##############################  ##############################
61  # 最終更新に掲載するページ数  # コヌスェケケソキ、ヒキヌコワ、ケ、・レ。シ・クソ
62  my $maxnew = 50;  my $maxnew = 50;
63  ##############################  ##############################
64  # アイコンファイル名(カラー版)  # ・「・、・ウ・・ユ・。・、・フセ。ハ・ォ・鬘シネヌ。ヒ
65  my $iconfile = 'yukiwiki.gif';  my $iconfile = '';
66  ##############################  ##############################
67  # アイコンファイル名(モノクロ版)  # ・「・、・ウ・・ユ・。・、・フセ。ハ・筵ホ・ッ・ネヌ。ヒ
68  # my $iconfile = 'yukimono.gif';  # my $iconfile = '';
69  ##############################  ##############################
70  # ページを変更したときにtouchするファイル(''なら何もしない)  # ・レ。シ・ク、ハムケケ、キ、ソ、ネ、ュ、ヒtouch、ケ、・ユ・。・、・。ハ''、ハ、魎ソ、筅キ、ハ、、。ヒ
71  my $touchfile = 'touch.txt';  my $touchfile = 'touch.txt';
72  ##############################  ##############################
73  # プレビュー用の背景色  # ・ラ・・モ・蝪シヘム、ホヌリキハソァ
74  my $preview_color = '#FFCCCC';  my $preview_color = '#FFCCCC';
75  ##############################  ##############################
76  # 全ページのスタイル  # チエ・レ。シ・ク、ホ・ケ・ソ・、・
77  my $style = <<'EOD';  my $style = <<'EOD';
78  pre, dl, ul, ol, p, blockquote { line-height:120%; }  pre, dl, ul, ol, p, blockquote { line-height:120%; }
79  a { text-decoration: none; }  a { text-decoration: none; }
# Line 82  a:visited { color: #9900CC; background-c Line 82  a:visited { color: #9900CC; background-c
82  a:hover { text-decoration: underline; }  a:hover { text-decoration: underline; }
83  EOD  EOD
84  ##############################  ##############################
85  # テキスト入力部分の大きさ  # ・ニ・ュ・ケ・ネニホマノハャ、ホツ遉ュ、オ
86  my $cols = 80;  my $cols = 80;
87  my $rows = 20;  my $rows = 20;
88  ##############################  ##############################
# Line 95  my @diff_deleted = (); Line 95  my @diff_deleted = ();
95  my $msgrefA;  my $msgrefA;
96  my $msgrefB;  my $msgrefB;
97  ##############################  ##############################
98  # 編集不可ページ名一覧  # ハヤスクノヤイト・レ。シ・クフセーヘ
99  my @uneditable = ( $whatsnew );  my @uneditable = ( $whatsnew );
100  ##############################  ##############################
101  # リンク用の正規表現  # ・・・ッヘム、ホタオオャノスクス
102  # YukiWikiのリンクは2種類ある。  # YukiWiki、ホ・・・ッ、マ2シホ爨「、。」
103  #  #
104  # (1) WikiName (RecentChangesとかFrontPageのようなもの)  # (1) WikiName (RecentChanges、ネ、ォFrontPage、ホ、隍ヲ、ハ、筅ホ)
105  # (2) BracketName ([[結城浩]]とか[[トラブルシュート]]のようなもの)  # (2) BracketName ([[キセケタ]]、ネ、ォ[[・ネ・鬣ヨ・・キ・蝪シ・ネ]]、ホ、隍ヲ、ハ、筅ホ)
106  #  #
107  # ※シフトJISの2バイト目には ']' が来うるので、  # 「ィ・キ・ユ・ネJIS、ホ2・ミ・、・ネフワ、ヒ、マ ']' 、ャヘ隍ヲ、、ホ、ヌ。「
108  # 文字']'を1つ多くとるようにしている。  # ハクサ']'、1、トツソ、ッ、ネ、、隍ヲ、ヒ、キ、ニ、、、。」
109  #  #
110  my $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';  my $WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';
111  my $BracketName = '\[\[([^>\s]+?\]?)\]\]';  my $BracketName = '\[\[([^>\x09]+?\]?)\]\]';
112    
113  # アイコン部分のタグ  # ・「・、・ウ・ノハャ、ホ・ソ・ー
114  my $IconTag = <<"EOD";  my $IconTag = ''; #<<"EOD";
115  <a href="http://www.hyuki.com/yukiwiki/"><img src="$iconfile"  #<a href="http://www.hyuki.com/yukiwiki/"><img src="$iconfile"
116   border="0" width="80" height="80" alt="[YukiWiki]" /></a>  # border="0" width="80" height="80" alt="[YukiWiki]" /></a>
117  EOD  #EOD
118    
119  require "$jcodelib";  require "$jcodelib";
120    
# Line 127  if ($testing) { Line 127  if ($testing) {
127          #'mycmd' => 'search',          #'mycmd' => 'search',
128          #'mycmd' => 'edit',          #'mycmd' => 'edit',
129          'mymsg' => <<"EOD",          'mymsg' => <<"EOD",
130  はじめまして。  、マ、ク、皃゙、キ、ニ。」
131  これからいろいろ書き込みますね。  、ウ、、ォ、鬢、、、、、ス、ュケ、゚、゙、ケ、ヘ。」
132  LinkPageも見てください。  LinkPage、篋ォ、ニ、ッ、タ、オ、、。」
133  TestPageはどうでしょうか。  TestPage、マ、ノ、ヲ、ヌ、キ、遉ヲ、ォ。」
134  どうぞよろしく。  、ノ、ヲ、セ、隍、キ、ッ。」
135  http://www.hyuki.com/  http://www.hyuki.com/
136  [[結城浩]]  [[キセケタ]]
137  EOD  EOD
138          'mypage' => '<結城浩>',          'mypage' => '<キセケタ>',
139          'myword' => '結',          'myword' => 'キ',
140          # '3C8C8B8FE98D5F3E' => '',          # '3C8C8B8FE98D5F3E' => '',
141          # 'TestPage' => '',          # 'TestPage' => '',
142      );      );
# Line 144  EOD Line 144  EOD
144  &main;  &main;
145  exit(0);  exit(0);
146    
147  # メイン  # ・皈、・
148  sub main {  sub main {
149      &normalize_form;      &normalize_form;
150      if ($dbmopen) {      if ($dbmopen) {
151          if (!dbmopen(%database, $dbname, 0666)) {          if (!dbmopen(%database, $dbname, 0666)) {
152              &print_error("(dbmopen) $dbname が作れません。");              &print_error("(dbmopen) $dbname 、ャコ、、゙、サ、。」");
153          }          }
154      } else {      } else {
155          if (!tie(%database, "YukiWikiDB", $dbname)) {          if (!tie(%database, "YukiWikiDB", $dbname)) {
# Line 157  sub main { Line 157  sub main {
157          }          }
158      }      }
159    
160      # myspecial対応      # myspecialツミア
161      foreach (keys %form) {      foreach (keys %form) {
162          if (/^myspecial_(.*)/) {          if (/^myspecial_(.*)/) {
163              $form{mycmd} = $1;              $form{mycmd} = $1;
# Line 192  sub main { Line 192  sub main {
192      }      }
193  }  }
194    
195  # ページの表示  # ・レ。シ・ク、ホノスシィ
196  sub do_read {  sub do_read {
197      my $page_name = $form{mypage};      my $page_name = $form{mypage};
198      my $percent_name = &encode_percent($page_name);      my $percent_name = &encode_percent($page_name);
199      &print_header($page_name);      &print_header($page_name);
200      print qq|<h1>$IconTag<a href="$thisurl?mycmd=search&myword=$percent_name">$page_name</a></h1>\n|;      print qq|<h1>$IconTag<a href="$thisurl?mycmd=search;myword=$percent_name">$page_name</a></h1>\n|;
201      &print_toolbar($page_name);      &print_toolbar($page_name);
202      print &convert_html(&get_page($page_name));      print &convert_html(&get_page($page_name));
203      &print_footer;      &print_footer;
204  }  }
205    
206  # ページの編集  # ・レ。シ・ク、ホハヤスク
207  sub do_edit {  sub do_edit {
208      if (not &is_editable($form{mypage})) {      if (not &is_editable($form{mypage})) {
209          # 編集不可ページは表示のみ          # ハヤスクノヤイト・レ。シ・ク、マノスシィ、ホ、゚
210          &do_read;          &do_read;
211          return;          return;
212      }      }
213      &editpage(&get_page($form{mypage}));      &editpage(&get_page($form{mypage}));
214  }  }
215    
216  # ページの再編集  # ・レ。シ・ク、ホコニハヤスク
217  sub do_reedit {  sub do_reedit {
218      if (not &is_editable($form{mypage})) {      if (not &is_editable($form{mypage})) {
219          # 編集不可ページは表示のみ          # ハヤスクノヤイト・レ。シ・ク、マノスシィ、ホ、゚
220          &do_read;          &do_read;
221      } else {      } else {
222          &editpage($form{mymsg});          &editpage($form{mymsg});
# Line 228  sub editpage { Line 228  sub editpage {
228      my $page_name = $form{mypage};      my $page_name = $form{mypage};
229      my $digest = &calc_message_digest($page_msg);      my $digest = &calc_message_digest($page_msg);
230      &print_header($page_name);      &print_header($page_name);
231      print qq|<h1>$IconTag${page_name}の編集</h1>\n|;      print qq|<h1>$IconTag${page_name}、ホハヤスク</h1>\n|;
232      &print_toolbar($page_name);      &print_toolbar($page_name);
233      $page_msg = &escape($page_msg);      $page_msg = &escape($page_msg);
234      print <<"EOD";      print <<"EOD";
235  <form action="$thisurl" method="post">  <form action="$thisurl" method="post">
236  <input type="hidden" name="mycmd" value="preview">  <!--<input type="hidden" name="mycmd" value="preview">-->
237  <input type="hidden" name="mypage" value="$page_name">  <input type="hidden" name="mypage" value="$page_name">
238  <input type="hidden" name="mydigest" value="$digest">  <input type="hidden" name="mydigest" value="$digest">
239  <textarea cols="$cols" rows="$rows" name="mymsg" wrap="virtual">$page_msg</textarea><br>  <textarea cols="$cols" rows="$rows" name="mymsg" wrap="virtual">$page_msg</textarea><br>
240  <input type="submit" value="プレビュー">  <input type="submit" name="myspecial_preview" value="ウホヌァ">
241    <input type="submit" name="myspecial_write" value="ウホヌァ、サ、コハムケケ">
242  </form>  </form>
243  <hr>  <hr>
244  <h3>テキスト整形のルール</h3>  <h3>・ニ・ュ・ケ・ネターキチ、ホ・。シ・</h3>
245    
246  <p>通常は入力した文字がそのまま出力されますが、  <p>トフセ、マニホマ、キ、ソハクサ、ャ、ス、ホ、゙、゙スミホマ、オ、、゙、ケ、ャ。「
247  以下のルールに従ってテキスト整形を行うことができます。</p>  ーハイシ、ホ・。シ・、ヒスセ、テ、ニ・ニ・ュ・ケ・ネターキチ、ケヤ、ヲ、ウ、ネ、ャ、ヌ、ュ、゙、ケ。」</p>
248    
249  <ul>  <ul>
250  <li>  <li>
251  空行は段落の区切りとなります。  カケヤ、マテハヘ、ホカ霏レ、熙ネ、ハ、熙゙、ケ。」
252    
253  <li>  <li>
254  HTMLのタグは書けません。  HTML、ホ・ソ・ー、マス、ア、゙、サ、。」
255    
256  <li>  <li>
257  ''ボールド''のようにシングルクォート二つではさむと、ボールドになります。  ''カットエ''、ホ、隍ヲ、ヒ・キ・・ー・・ッ・ゥ。シ・ネニ、ト、ヌ、マ、オ、爨ネ。「カットエ、ヒ、ハ、熙゙、ケ。」
258    
259  <li>  <li>
260  '''イタリック'''のようにシングルクォート三つではさむと、イタリックになります。  '''ケケ、ヒカットエ'''、ホ、隍ヲ、ヒ・キ・・ー・・ッ・ゥ。シ・ネサー、ト、ヌ、マ、オ、爨ネ。「ケケ、ヒカットエ、ヒ、ハ、熙゙、ケ。」
261    
262  <li>  <li>
263  ----のようにマイナス4つがあると、水平線になります。  ----、ホ、隍ヲ、ヒ・゙・、・ハ・ケ4、ト、ャ、「、、ネ。「ソ衞ソタ、ヒ、ハ、熙゙、ケ。」
264    
265  <li>  <li>
266  *を行頭に書くと大見出しになります。  *、ケヤニャ、ヒス、ッ、ネツ邵ォスミ、キ、ヒ、ハ、熙゙、ケ。」
267    
268  <li>  <li>
269  **を行頭に書くと小見出しになります。  **、ケヤニャ、ヒス、ッ、ネセョクォスミ、キ、ヒ、ハ、熙゙、ケ。」
270    
271  <li>  <li>
272  -を行頭に書くと箇条書きになります。- -- --- の3レベルがあります。  -、ケヤニャ、ヒス、ッ、ネイユセス、ュ、ヒ、ハ、熙゙、ケ。」- -- --- 、ホ3・・ル・、ャ、「、熙゙、ケ。」
273    
274  <li>  <li>
275  :を行頭に書くと用語と解説文が作れます。  :、ケヤニャ、ヒス、ッ、ネヘムク、ネイタ簗ク、ャコ、、゙、ケ。」
276    
277  <pre>  <pre>
278      :用語1:いろいろ書いた解説文1      :ヘムク1:、、、、、、ス、、、ソイタ簗ク1
279      :用語2:いろいろ書いた解説文2      :ヘムク2:、、、、、、ス、、、ソイタ簗ク2
280      :用語3:いろいろ書いた解説文3      :ヘムク3:、、、、、、ス、、、ソイタ簗ク3
281  </pre>  </pre>
282    
283  <li>  <li>
284  http://www.hyuki.com/ のようなURLは自動的にリンクになります。  http://www.hyuki.com/ 、ホ、隍ヲ、ハURL、マシォニーナェ、ヒ・・・ッ、ヒ、ハ、熙゙、ケ。」
285    
286  <li>  <li>
287  YukiWikiのように大文字小文字を混ぜた英文字列を書くと、  YukiWiki、ホ、隍ヲ、ヒツ醋クサセョハクサ、コョ、シ、ソアムハクサホ、ス、ッ、ネ。「
288  YukiWikiのページ名になります。  YukiWiki、ホ・レ。シ・クフセ、ヒ、ハ、熙゙、ケ。」
289    
290  <li>  <li>
291  [[結城浩]]のように二重の大かっこ[[ ]]でくくった文字列を書くと、  [[キセケタ]]、ホ、隍ヲ、ヒニスナ、ホツ遉ォ、テ、ウ[[ ]]、ヌ、ッ、ッ、テ、ソハクサホ、ス、ッ、ネ。「
292  YukiWikiのページ名になります。  YukiWiki、ホ・レ。シ・クフセ、ヒ、ハ、熙゙、ケ。」
293  大かっこの中にはスペースを含めてはいけません。  ツ遉ォ、テ、ウ、ホテ讀ヒ、マ・ケ・レ。シ・ケ、エ゙、皃ニ、マ、、、ア、゙、サ、。」
294  日本語も使えます。  ニヒワク、篏ネ、ィ、゙、ケ。」
295    
296  <li>  <li>
297  行頭がスペースで始まっていると、  ケヤニャ、ャ・ケ・レ。シ・ケ、ヌサマ、゙、テ、ニ、、、、ネ。「
298  その段落は整形済み扱われます。  、ス、ホテハヘ、マターキチコム、゚ーキ、、、゙、ケ。」
299  プログラムを書き込むときに使うと便利です。  ・ラ・・ー・鬣爨ス、ュケ、爨ネ、ュ、ヒサネ、ヲ、ネハリヘ、ヌ、ケ。」
300    
301  <li>  <li>
302  > を行頭に書くと、  &gt; 、ケヤニャ、ヒス、ッ、ネ。「
303  引用文が書けます。  ーヘムハク、ャス、ア、゙、ケ。」
304  >の数が多いとインデントが深くなります(3レベルまで)。  &gt; 、ホソ、ャツソ、、、ネ・、・・ヌ・・ネ、ャソシ、ッ、ハ、熙゙、ケ。ハ3・・ル・、゙、ヌ。ヒ。」
305    
306  </ul>  </ul>
307  EOD  EOD
308      &print_footer;      &print_footer;
309  }  }
310    
311  # ページの検索  # ・レ。シ・ク、ホク。コ
312  sub do_search {  sub do_search {
313      if ($form{myword}) {      if ($form{myword}) {
314          &print_header('検索結果');          &print_header('ク。コキイフ');
315          print qq|<h1>$IconTag$form{myword}の検索結果</h1>\n|;          print qq|<h1>$IconTag$form{myword}、ホク。コキイフ</h1>\n|;
316          &print_toolbar();          &print_toolbar();
317          print qq|<ul>\n|;          print qq|<ul>\n|;
318          my $count = 0;          my $count = 0;
319          foreach my $page_name (sort keys %database) {    # sortするのは無謀かな          foreach my $page_name (sort keys %database) {    # sort、ケ、、ホ、マフオヒナ、ォ、ハ
320              if ($database{$page_name} =~ /\Q$form{'myword'}\E/) {              if ($database{$page_name} =~ /\Q$form{'myword'}\E/) {
321                  my $encoded = &encode_percent($page_name);                  my $encoded = &encode_percent($page_name);
322                  print qq|<li><a href="$thisurl?mycmd=read&mypage=$encoded">$page_name</a>\n|;                  print qq|<li><a href="$thisurl?mycmd=read;mypage=$encoded">$page_name</a>\n|;
323                  $count++;                  $count++;
324              }              }
325          }          }
326          print qq|</ul>\n|;          print qq|</ul>\n|;
327          if ($count > 0) {          if ($count > 0) {
328              print qq|<p><b>$form{myword}</b>を含むページは、上に示す<b>$count</b>ページです。</p>\n|;              print qq|<p><strong>$form{myword}</strong>、エ゙、爭レ。シ・ク、マ。「セ螟ヒシィ、ケ<strong>$count</strong> ・レ。シ・ク、ヌ、ケ。」</p>\n|;
329          } else {          } else {
330              print qq|<p><b>$form{myword}</b>を含むページは見つかりません。</p>\n|;              print qq|<p><strong>$form{myword}</strong>、エ゙、爭レ。シ・ク、マクォ、ト、ォ、熙゙、サ、。」</p>\n|;
331          }          }
332      } else {      } else {
333          &print_header('単語検索');          &print_header('テアクク。コ');
334          print qq|<h1>$IconTag単語検索</h1>\n|;          print qq|<h1>$IconTagテアクク。コ</h1>\n|;
335          &print_toolbar();          &print_toolbar();
336      }      }
337      print <<"EOD";      print <<"EOD";
# Line 338  sub do_search { Line 339  sub do_search {
339  <form action="$thisurl" method="post">  <form action="$thisurl" method="post">
340  <input type="hidden" name="mycmd" value="search">  <input type="hidden" name="mycmd" value="search">
341  <input type="text" name="myword" size="20" value="$form{myword}">  <input type="text" name="myword" size="20" value="$form{myword}">
342  <input type="submit" value="単語検索">  <input type="submit" value="テアクク。コ">
343  </form>  </form>
344  </p>  </p>
345  EOD  EOD
346      &print_footer;      &print_footer;
347  }  }
348    
349  # ページの一覧  # ・レ。シ・ク、ホーヘ
350  sub do_list {  sub do_list {
351      &print_header('ページ一覧');      &print_header('・レ。シ・クーヘ');
352      print qq|<h1>$IconTag ページ一覧</h1>\n|;      print qq|<h1>$IconTag ・レ。シ・クーヘ</h1>\n|;
353      &print_toolbar();      &print_toolbar();
354      print qq|<ul>\n|;      print qq|<ul>\n|;
355      foreach my $page_name (sort keys %database) {    # sortするのは無謀かな      foreach my $page_name (sort keys %database) {    # sort、ケ、、ホ、マフオヒナ、ォ、ハ
356          my $encoded = &encode_percent($page_name);          my $encoded = &encode_percent($page_name);
357          print qq|<li><a href="$thisurl?mycmd=read&mypage=$encoded">$page_name</a>\n|          print qq|<li><a href="$thisurl?mycmd=read;mypage=$encoded">$page_name</a>\n|
358      }      }
359      print qq|</ul>\n|;      print qq|</ul>\n|;
360      &print_footer;      &print_footer;
361  }  }
362    
363  # プレビュー  # ・ラ・・モ・蝪シ
364  sub do_preview {  sub do_preview {
365      my $page_name = $form{mypage};      my $page_name = $form{mypage};
366      my $escapedmsg = &escape($form{mymsg});      my $escapedmsg = &escape($form{mymsg});
367      &print_header($page_name);      &print_header($page_name);
368      print qq|<h1>$IconTag${page_name}のプレビュー</h1>\n|;      print qq|<h1>$IconTag${page_name}、ホ・ラ・・モ・蝪シ</h1>\n|;
369      &print_toolbar($page_name);      &print_toolbar($page_name);
370      # local $percent_name = &encode_percent($page_name);      # local $percent_name = &encode_percent($page_name);
371      print qq|<p>以下のプレビューを確認して、よければページ下部のボタンで更新してください。</p>\n|;      print qq|<p>ーハイシ、ホ・ラ・・モ・蝪シ、ウホヌァ、キ、ニ。「、隍ア、、ミ・レ。シ・クイシノ、ホ・ワ・ソ・、ヌケケソキ、キ、ニ、ッ、タ、オ、、。」</p>\n|;
372      if ($form{mymsg}) {      if ($form{mymsg}) {
373          print qq|<table width="100%" bgcolor="$preview_color" ><tr><td>\n|;          print qq|<table width="100%" bgcolor="$preview_color" ><tr><td>\n|;
374          # print &convert_html($escapedmsg);          # print &convert_html($escapedmsg);
375          print &convert_html($form{mymsg});          print &convert_html($form{mymsg});
376          print qq|</td></tr></table>\n|;          print qq|</td></tr></table>\n|;
377      } else {      } else {
378          print qq|<p>(ページの内容は空です。更新するとこのページは<b>削除</b>されます。)</p>\n|;          print qq|<p>。ハ・レ。シ・ク、ホニ簣ニ、マカ、ヌ、ケ。」ケケソキ、ケ、、ネ、ウ、ホ・レ。シ・ク、マ<strong>コス</strong>、オ、、゙、ケ。」。ヒ</p>\n|;
379      }      }
380      &print_preview_buttons($page_name, $escapedmsg, $form{mydigest});      &print_preview_buttons($page_name, $escapedmsg, $form{mydigest});
381      &print_footer;      &print_footer;
# Line 388  sub print_preview_buttons { Line 389  sub print_preview_buttons {
389      <br />      <br />
390      <input type="hidden" name="mypage" value="$page_name">      <input type="hidden" name="mypage" value="$page_name">
391      <input type="hidden" name="mydigest" value="$digest">      <input type="hidden" name="mydigest" value="$digest">
392      <input type="submit" name="myspecial_preview" value="再度プレビュー">      <input type="submit" name="myspecial_preview" value="コニナル・ラ・・モ・蝪シ">
393      <input type="submit" name="myspecial_write" value="ページの更新">      <input type="submit" name="myspecial_write" value="・レ。シ・ク、ホケケソキ">
394      </form>      </form>
395  EOD  EOD
396  }  }
397    
398  # 書き込む  # ス、ュケ、
399  sub do_write {  sub do_write {
400      if (not &is_editable($form{mypage})) {      if (not &is_editable($form{mypage})) {
401          # 編集不可ページは表示のみ          # ハヤスクノヤイト・レ。シ・ク、マノスシィ、ホ、゚
402          &do_read;          &do_read;
403          return;          return;
404      }      }
405    
406      my $page_name = $form{mypage};      my $page_name = $form{mypage};
407    
408      # digestを使って、更新の衝突チェック      # digest、サネ、テ、ニ。「ケケソキ、ホセラニヘ・チ・ァ・テ・ッ
409      my $original_digest = &calc_message_digest(&get_page($page_name));      my $original_digest = &calc_message_digest(&get_page($page_name));
410      if ($form{mydigest} ne $original_digest) {      if ($form{mydigest} ne $original_digest) {
411          &print_header($page_name);          &print_header($page_name);
412          print qq|<h1>$IconTag${page_name}で【更新の衝突】が起きました</h1>\n|;          print qq|<h1>$IconTag${page_name}、ヌ。レケケソキ、ホセラニヘ。ロ、ャオッ、ュ、゙、キ、ソ</h1>\n|;
413          print <<"EOD";          print <<"EOD";
414  <p>あなたがこのページを編集している間に、  <p>、「、ハ、ソ、ャ、ウ、ホ・レ。シ・ク、ハヤスク、キ、ニ、、、エヨ、ヒ。「
415  他の人が同じページを更新してしまったようです。  ツセ、ホソヘ、ャニア、ク・レ。シ・ク、ケケソキ、キ、ニ、キ、゙、テ、ソ、隍ヲ、ヌ、ケ。」
416  </p><p>  </p><p>
417  以下に、あなたの編集したテキストがありますので、  ーハイシ、ヒ。「、「、ハ、ソ、ホハヤスク、キ、ソ・ニ・ュ・ケ・ネ、ャ、「、熙゙、ケ、ホ、ヌ。「
418  あなたの編集内容が失われないように、  、「、ハ、ソ、ホハヤスクニ簣ニ、ャシコ、、、ハ、、、隍ヲ、ヒ。「
419  いますぐ、メモ帳などにコピー&ペーストしてください。  、、、゙、ケ、ー。「・皈籠「、ハ、ノ、ヒ・ウ・ヤ。シ。・レ。シ・ケ・ネ、キ、ニ、ッ、タ、オ、、。」
420  </p><p>  </p><p>
421  コピー&ペーストが済んでから、  ・ウ・ヤ。シ。・レ。シ・ケ・ネ、ャコム、、ヌ、ォ、鬘「
422  最新の内容を見て再度編集し直してください。  コヌソキ、ホニ簣ニ、クォ、ニコニナルハヤスク、キトセ、キ、ニ、ッ、タ、オ、、。」
423  最新の内容は  コヌソキ、ホニ簣ニ、マ
424  <a target="_blank" href="$thisurl?mycmd=read&mypage=$form{mypage}">$form{mypage}</a>  <a target="_blank" href="$thisurl?mycmd=read;mypage=$form{mypage}">$form{mypage}</a>
425  で見ることができます。  、ヌクォ、、ウ、ネ、ャ、ヌ、ュ、゙、ケ。」
426  </p>  </p>
427  EOD  EOD
428          # &print_toolbar($page_name);          # &print_toolbar($page_name);
# Line 430  EOD Line 431  EOD
431          return;          return;
432      }      }
433    
434      # diff生成      # diffタクタョ
435      {      {
436          &opendiff;          &opendiff;
437          my @msg1 = split(/\n/, &get_page($page_name));          my @msg1 = split(/\n/, &get_page($page_name));
# Line 446  EOD Line 447  EOD
447      &print_header($page_name);      &print_header($page_name);
448      &set_page($page_name, $form{mymsg});      &set_page($page_name, $form{mymsg});
449      if ($form{mymsg}) {      if ($form{mymsg}) {
450          print qq|<h1>$IconTag${page_name}を更新しました</h1>\n|;          print qq|<h1>$IconTag${page_name}、ケケソキ、キ、゙、キ、ソ</h1>\n|;
451          &print_toolbar($page_name);          &print_toolbar($page_name);
452          print &convert_html(&get_page($page_name));          print &convert_html(&get_page($page_name));
453      } else {      } else {
454          print qq|<h1>$IconTag${page_name}を削除しました</h1>\n|;          print qq|<h1>$IconTag${page_name}、コス、キ、゙、キ、ソ</h1>\n|;
455          &print_toolbar($page_name);          &print_toolbar($page_name);
456          print qq|<p>${page_name}を削除しました。</p>\n|;          print qq|<p>${page_name}、コス、キ、゙、キ、ソ。」</p>\n|;
457      }      }
458      &print_footer;      &print_footer;
459      # 更新されたのでタッチしておく。      # ケケソキ、オ、、ソ、ホ、ヌ・ソ・テ・チ、キ、ニ、ェ、ッ。」
460      if ($touchfile) {      if ($touchfile) {
461          open(FILE, "> $touchfile");          open(FILE, "> $touchfile");
462          print FILE "\n";          print FILE "\n";
# Line 463  EOD Line 464  EOD
464      }      }
465  }  }
466    
467  # ページの変更点  # ・レ。シ・ク、ホハムケケナタ
468  sub do_diff {  sub do_diff {
469      if (not &is_editable($form{mypage})) {      if (not &is_editable($form{mypage})) {
470          # 編集不可ページは表示のみ          # ハヤスクノヤイト・レ。シ・ク、マノスシィ、ホ、゚
471          &do_read;          &do_read;
472          return;          return;
473      }      }
474      &opendiff;      &opendiff;
475      &print_header($form{mypage} . 'の変更点');      &print_header($form{mypage} . '、ホハムケケナタ');
476      print qq|<h1>$IconTag <a href="$thisurl?mycmd=read&mypage=$form{mypage}">$form{mypage}</a>の変更点</h1>\n|;      print qq|<h1>$IconTag <a href="$thisurl?mycmd=read&mypage=$form{mypage}">$form{mypage}</a>、ホハムケケナタ</h1>\n|;
477      &print_toolbar();      &print_toolbar();
478      $_ = &escape($diffbase{$form{mypage}});      $_ = &escape($diffbase{$form{mypage}});
479      print <<"EOD";      print <<"EOD";
480  <ul>  <ul>
481  <li>追加された行は<font color="blue">青色</font>です。  <li>トノイテ、オ、、ソケヤ、マ<ins>タトソァ</ins>、ヌ、ケ。」
482  <li>削除された行は<font color="red">赤色</font>です。  <li>コス、オ、、ソケヤ、マ<del>タヨソァ</del>、ヌ、ケ。」
483  <li><a href="$thisurl?mycmd=read&mypage=$form{mypage}">$form{mypage}</a>へ行く。  <li><a href="$thisurl?mycmd=read;mypage=$form{mypage}">$form{mypage}</a>、リケヤ、ッ。」
484  </ul>  </ul>
485  <hr />  <hr />
486  EOD  EOD
487      print qq|<pre>\n|;      print qq|<pre>\n|;
488      foreach (split(/\n/, $_)) {      foreach (split(/\n/, $_)) {
489          if (/^\+(.*)/) {          if (/^\+(.*)/) {
490              print qq|<font color="blue">$1</font>\n|;              print qq|<ins>$1</ins>\n|;
491          } elsif (/^\-(.*)/) {          } elsif (/^\-(.*)/) {
492              print qq|<font color="red">$1</font>\n|;              print qq|<del>$1</del>\n|;
493          } elsif (/^\=(.*)/) {          } elsif (/^\=(.*)/) {
494              print qq|$1\n|;              print qq|$1\n|;
495          } else {          } else {
# Line 503  EOD Line 504  EOD
504  sub opendiff {  sub opendiff {
505      if ($dbmopen) {      if ($dbmopen) {
506          if (!dbmopen(%diffbase, $diffdbname, 0666)) {          if (!dbmopen(%diffbase, $diffdbname, 0666)) {
507              &print_error("(dbmopen) $diffdbname が作れません。");              &print_error("(dbmopen) $diffdbname 、ャコ、、゙、サ、。」");
508          }          }
509      } else {      } else {
510          if (!tie(%diffbase, "YukiWikiDB", $diffdbname)) {          if (!tie(%diffbase, "YukiWikiDB", $diffdbname)) {
# Line 520  sub closediff { Line 521  sub closediff {
521      }      }
522  }  }
523    
524  # フォームからの情報を連想配列 %form に入れる  # ・ユ・ゥ。シ・爨ォ、鬢ホセハ、マ「チロヌロホ %form 、ヒニ、、
525  # &init_form('euc');  # &init_form('euc');
526  sub init_form {  sub init_form {
527      my ($charcode) = @_;      my ($charcode) = @_;
# Line 530  sub init_form { Line 531  sub init_form {
531      } else {      } else {
532          $query = $ENV{QUERY_STRING};          $query = $ENV{QUERY_STRING};
533      }      }
534      my @assocarray = split(/&/, $query);      my @assocarray = split(/[&;]/, $query);
535      foreach my $assoc (@assocarray) {      foreach my $assoc (@assocarray) {
536          my ($property, $value) = split(/=/, $assoc);          my ($property, $value) = split(/=/, $assoc);
537          $value =~ tr/+/ /;          $value =~ tr/+/ /;
# Line 540  sub init_form { Line 541  sub init_form {
541      }      }
542  }  }
543    
544  # エラーページを出力する  # ・ィ・鬘シ・レ。シ・ク、スミホマ、ケ、
545  sub print_error {  sub print_error {
546      my ($msg) = @_;      my ($msg) = @_;
547      &print_header('Error');      &print_header('Error');
# Line 560  sub escape { Line 561  sub escape {
561  sub inline {  sub inline {
562      my ($line) = shift;      my ($line) = shift;
563      $line = &escape($line);      $line = &escape($line);
564      $line =~ s|'''([^']+?)'''|<i>$1</i>|g;              # Italic      $line =~ s|'''([^']+?)'''|<strong>$1</strong>|g;
565      $line =~ s|''([^']+?)''|<b>$1</b>|g;                # Bold      $line =~ s|''([^']+?)''|<em>$1</em>|g;          
566      $line =~ s!      $line =~ s!
567                  (         (
568                      ((mailto|http|https|ftp):[\x21-\x7E]*) # Direct http://...           (?:&lt;(?:mailto|http|https|ftp|urn):[\x21-\x7E]*)&gt;
569                          |         #| (?:$WikiName)                         # LocalLinkLikeThis
570                      ($WikiName)                         # LocalLinkLikeThis         | (?:$BracketName)                      # [[ニヒワク・・・ッ]]
571                          |         )
                     ($BracketName)                      # [[日本語リンク]]  
                 )  
572              !              !
573                  &make_link($1)                  &make_link($1)
574              !gex;              !gex;
575      return $line;      return $line;
576  }  }
577    
578  # ページのタイトルからページの内容を得る  # ・レ。シ・ク、ホ・ソ・、・ネ・、ォ、鬣レ。シ・ク、ホニ簣ニ、ニタ、
579  sub get_page {  sub get_page {
580      my $page_name = shift;      my $page_name = shift;
581      return $database{$page_name};      return $database{$page_name};
582  }  }
583    
584  # ページの内容を与える  # ・レ。シ・ク、ホニ簣ニ、ヘソ、ィ、
585  # &set_page($title, $txt)  # &set_page($title, $txt)
586  sub set_page {  sub set_page {
587      # ページを更新する      # ・レ。シ・ク、ケケソキ、ケ、
588      my $title = $_[0];      my $title = $_[0];
589      $database{$title} = $_[1];      $database{$title} = $_[1];
590      # 空ページなら削除する      # カ・レ。シ・ク、ハ、鮗ス、ケ、
591      unless ($database{$title}) {      unless ($database{$title}) {
592          delete $database{$title};          delete $database{$title};
593      }      }
594      # RecentChangesを更新する      # RecentChanges、ケケソキ、ケ、
595      my $delim = ' - ';      my $delim = ' - ';
596      my @pages = split(/\n/, $database{$whatsnew});      my @pages = split(/\n/, $database{$whatsnew});
597      my $datestr = &get_current_datestr;      my $datestr = &get_current_datestr;
598      unshift(@pages, qq|-$datestr$delim$title|);      unshift(@pages, qq|-$datestr$delim$title|);
599      # 同一ページの更新は最新のもののみにし、      # ニアー・レ。シ・ク、ホケケソキ、マコヌソキ、ホ、筅ホ、ホ、゚、ヒ、キ。「
600      # 存在しないページはスキップする。      # ツクコ゚、キ、ハ、、・レ。シ・ク、マ・ケ・ュ・テ・ラ、ケ、。」
601      my %count;      my %count;
602      my @newpages;      my @newpages;
603      foreach my $line (@pages) {      foreach my $line (@pages) {
# Line 608  sub set_page { Line 607  sub set_page {
607              push(@newpages, qq|$prefix - $title|);              push(@newpages, qq|$prefix - $title|);
608          }          }
609      }      }
610      # ここで本当に更新      # 、ウ、ウ、ヌヒワナ、ヒケケソキ
611      $database{$whatsnew} = join("\n", splice(@newpages, 0, $maxnew));      $database{$whatsnew} = join("\n", splice(@newpages, 0, $maxnew));
612  }  }
613    
614  # ページのヘッダを出力  # ・レ。シ・ク、ホ・リ・テ・タ、スミホマ
615  sub print_header {  sub print_header {
616      my $title = shift;      my $title = shift;
617      print <<"EOD";      print <<"EOD";
# Line 621  Content-type: text/html Line 620  Content-type: text/html
620  <html><head>  <html><head>
621  <title>$title</title>  <title>$title</title>
622  <style type="text/css">  <style type="text/css">
 <!--  
623  $style  $style
 -->  
624  </style>  </style>
625  </head>  </head>
626  <body bgcolor="white">  <body>
627  EOD  EOD
628  }  }
629    
630  # ツールバーを出力  # ・ト。シ・・ミ。シ、スミホマ
631  sub print_toolbar {  sub print_toolbar {
632      my $page_name = shift;      my $page_name = shift;
633      my $percent_name = &encode_percent($page_name);      my $percent_name = &encode_percent($page_name);
634      my $editlink = '';      my $editlink = '';
635      if ($page_name ne '' and &is_editable($page_name)) {      if ($page_name ne '' and &is_editable($page_name)) {
636          $editlink = <<"EOD";          $editlink = <<"EOD";
637  <a href="$thisurl?mycmd=edit&mypage=$percent_name">編集</a> |  <a href="$thisurl?mycmd=edit;mypage=$percent_name">ハヤスク</a> |
638  <a href="$thisurl?mycmd=diff&mypage=$percent_name">差分</a> |  <a href="$thisurl?mycmd=diff;mypage=$percent_name">コケハャ</a> |
639  EOD  EOD
640      }      }
641      print <<"EOD";      print <<"EOD";
642  <p>  <p>
643   [   [
644  <a href="$thisurl?mycmd=read&mypage=$toppage">トップ</a> |  <a href="$thisurl?mycmd=read;mypage=$toppage">・ネ・テ・ラ</a> |
645  <a href="$thisurl?mycmd=list">一覧</a> |  <a href="$thisurl?mycmd=list">ーヘ</a> |
646  $editlink  $editlink
647  <a href="$thisurl?mycmd=search">単語検索</a> |  <a href="$thisurl?mycmd=search">テアクク。コ</a> |
648  <a href="$thisurl?mycmd=read&mypage=$whatsnew">最終更新</a>  <a href="$thisurl?mycmd=read;mypage=$whatsnew">コヌスェケケソキ</a>
649   ]   ]
650  </p>  </p>
651  EOD  EOD
652  }  }
653    
654  # ページのフッタを出力  # ・レ。シ・ク、ホ・ユ・テ・ソ、スミホマ
655  sub print_footer {  sub print_footer {
656      print <<"EOD";      print <<"EOD";
657  <hr>  <address>
658  <p>  <a href="http://www.hyuki.com/yukiwiki/">YukiWiki</a> 1.6.6 Copyright (C) 2000,2001 by <a href="http://www.hyuki.com/">Hiroshi Yuki.</a>
659  <a href="http://www.hyuki.com/yukiwiki/">YukiWiki</a> $version Copyright (C) 2000,2001 by <a href="http://www.hyuki.com/">Hiroshi Yuki.</a><br />  + <a href="$modifierlink">$modifier</a> ${version}.
660  Modified by <a href="$modifierlink">$modifier</a>.<br/>  [<a href="/" title="、ウ、ホ・オ。シ・ミ。シ、ホシハヌ">/</a>
661  </p>  <a href="/map" title="、ウ、ホ・オ。シ・ミ。シ、ホーニニ">テマゾ</a>
662    <a href="/search/" title="、ウ、ホ・オ。シ・ミ。シ、ホク。コ">ク。コ</a>]
663    </address>
664  </body></html>  </body></html>
665  EOD  EOD
666  }  }
667    
668  # URLやページの名前からリンクを作る  # URL、茹レ。シ・ク、ホフセチー、ォ、鬣・・ッ、コ、
669  sub make_link {  sub make_link {
670      my $name = shift;      my $name = shift;
671      if ($name =~ /^(http|https|ftp).*?(\.gif|\.png|\.jpeg|\.jpg)?$/) {      $name =~ s/^&lt;(.*)&gt;$/$1/;
672        $name =~ s/^\[\[(.*)\]\]$/$1/;
673        if ($name =~ /^(http|https|ftp).*?(\.png|\.jpeg|\.jpg)?$/) {
674          if ($2) {          if ($2) {
675              return qq|<a href="$name"><img border="0" src="$name" /></a>|;              return qq|<a href="$name"><img border="0" src="$name" /></a>|;
676          } else {          } else {
677              return qq|<a href="$name">$name</a>|;              return qq|&lt;<a href="$name">$name</a>&gt;|;
678          }          }
679      } elsif ($name =~ /^mailto:(.*)/) {      } elsif ($name =~ /^mailto:(.*)/) {
680          my $address = $1;          my $address = $1;
681          return qq|<a href="$name">$address</a>|;          return qq|&lt;<a href="$name">$address</a>&gt;|;
682      } elsif ($database{$name}) {      } elsif ($name =~ /^urn:[0-9A-Za-z_:-]+/) {
683          my $percent_name = &encode_percent($name);          return qq|&lt;<a href="/uri-res/N2L?${name}">$name</a>&gt;|;
         return qq|<a href="$thisurl?mycmd=read&mypage=$percent_name">$name</a>|;  
684      } else {      } else {
685          my $percent_name = &encode_percent($name);        my $name2 = $name; $name2 =~ tr/\x20/-/;
686          return qq|$name<a href="$thisurl?mycmd=edit&mypage=$percent_name">?</a>|;        if ($database{$name2}) {
687            my $percent_name = &encode_percent($name2);
688            return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|;
689          } elsif ($database{'[['.$name2.']]'}) {
690            my $percent_name = &encode_percent('[['.$name2.']]');
691            return qq|<a href="$thisurl?mycmd=read;mypage=$percent_name" class="wiki">$name</a>|;
692          } else {
693            my $percent_name = &encode_percent($name2);
694            return qq|<a href="$thisurl?mycmd=edit;mypage=$percent_name" class="wiki newpage">$name?</a>|;
695          }
696      }      }
697  }  }
698    
699  # %xx の形式にエンコードする  # %xx 、ホキチシー、ヒ・ィ・・ウ。シ・ノ、ケ、
700  # これは、  # 、ウ、、マ。「
701  # http://www.hyuki.com/yukiwiki/yukiwiki.cgi?mycmd=read&mypage=%3C%8C%8B%8F%E9%8D_%3E  # http://www.hyuki.com/yukiwiki/yukiwiki.cgi?mycmd=read&mypage=%3C%8C%8B%8F%E9%8D_%3E
702  # という形式のために使われる。  # 、ネ、、、ヲキチシー、ホ、ソ、皃ヒサネ、、、。」
703  # '<結城浩>' → '%3C%8C%8B%8F%E9%8D_%3E'  # '<キセケタ>' 「ェ '%3C%8C%8B%8F%E9%8D_%3E'
704  sub encode_percent {  sub encode_percent {
705      my $name = shift;      my $name = shift;
706      my $encoded = '';      my $encoded = '';
# Line 705  sub encode_percent { Line 714  sub encode_percent {
714      return $encoded;      return $encoded;
715  }  }
716    
717  # テキスト本体をHTMLに変換する  # ・ニ・ュ・ケ・ネヒワツホ、HTML、ヒハムエケ、ケ、
718  sub convert_html {  sub convert_html {
719      my ($txt) = shift;      my ($txt) = shift;
720      my (@txt) = split(/\n/, $txt);      my (@txt) = split(/\n/, $txt);
# Line 742  sub convert_html { Line 751  sub convert_html {
751  }  }
752    
753  # &back_push($tag, $count)  # &back_push($tag, $count)
754  # $tagのタグを$levelレベルまで詰める。  # $tag、ホ・ソ・ー、$level・・ル・、゙、ヌオヘ、皃。」
755  sub back_push {  sub back_push {
756      my ($tag, $level) = @_;      my ($tag, $level) = @_;
757      while (@saved > $level) {      while (@saved > $level) {
# Line 757  sub back_push { Line 766  sub back_push {
766      }      }
767  }  }
768    
769  # 編集可能ページか?  # ハヤスクイトヌス・レ。シ・ク、ォ。ゥ
770  sub is_editable {  sub is_editable {
771      my ($pagename) = @_;      my ($pagename) = @_;
772      foreach (@uneditable) {      foreach (@uneditable) {
# Line 771  sub is_editable { Line 780  sub is_editable {
780      return 0;      return 0;
781  }  }
782    
783  # Validな名前か?  # Valid、ハフセチー、ォ。ゥ
784  sub is_valid_name {  sub is_valid_name {
785      my ($pagename) = @_;      my ($pagename) = @_;
786      if ($pagename =~ /^$WikiName$/) {      if ($pagename =~ /^$WikiName$/) {
# Line 783  sub is_valid_name { Line 792  sub is_valid_name {
792      }      }
793  }  }
794    
795  # 現在時刻の文字列を得る  # クスコ゚サケ、ホハクサホ、ニタ、
796  sub get_current_datestr {  sub get_current_datestr {
797      my (@wdays) = ( "日", "月", "火", "水", "木", "金", "土" );      my (@wdays) = ( "ニ", "キ", "イミ", "ソ", "フレ", "カ", "ナレ" );
798      my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);      my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);
799      return sprintf("%4d-%02d-%02d (%s) %02d:%02d:%02d",      return sprintf("%4d-%02d-%02d (%s) %02d:%02d:%02d",
800          $year + 1900, $mon + 1, $mday, $wdays[$wday], $hour, $min, $sec);          $year + 1900, $mon + 1, $mday, $wdays[$wday], $hour, $min, $sec);
801  }  }
802    
803  # URL?SomePageや、  # URL?SomePage、茖「
804  # URL?[[結城浩]]の形式だった場合、(not yet)  # URL?[[キセケタ]]、ホキチシー、タ、テ、ソセケ遑「(not yet)
805  # 強制的にmycmdをreadにして$formの内容を設定する。  # カッタゥナェ、ヒmycmd、read、ヒ、キ、ニ$form、ホニ簣ニ、タ゚ト熙ケ、。」
806  sub normalize_form {  sub normalize_form {
807      foreach my $key (keys %form) {      foreach my $key (keys %form) {
808          if ($key =~ /^$WikiName$/) {          if ($key =~ /^$WikiName$/) {
# Line 808  sub normalize_form { Line 817  sub normalize_form {
817      }      }
818  }  }
819    
820  # 変換テストを行なうときのサンプル  # ハムエケ・ニ・ケ・ネ、ケヤ、ハ、ヲ、ネ、ュ、ホ・オ・・ラ・
821  sub print_sample {  sub print_sample {
822      my $txt = &convert_html(<<"EOD");      my $txt = &convert_html(<<"EOD");
823  *大見出し1  *ツ邵ォスミ、キ1
824  **小見出し1-1  **セョクォスミ、キ1-1
825  -項目1  -ケ猯ワ1
826  -項目2  -ケ猯ワ2
827  -項目3  -ケ猯ワ3
828  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
829  段落1段落1段落1段落1段落1段落''強調''1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ''カットエ''1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
830  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
831    
832  段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
833  段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
834  段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
835  **小見出し1-2  **セョクォスミ、キ1-2
836  :用語1:いろいろ書いた解説文1と''強調単語''  :ヘムク1:、、、、、、ス、、、ソイタ簗ク1、ネ''カットエテアク''
837  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
838  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
839  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
840  :用語2:いろいろ書いた解説文2  :ヘムク2:、、、、、、ス、、、ソイタ簗ク2
841  :用語3:いろいろ書いた解説文3  :ヘムク3:、、、、、、ス、、、ソイタ簗ク3
842  ----  ----
843  *大見出し2  *ツ邵ォスミ、キ2
844  **小見出し2-1  **セョクォスミ、キ2-1
845  http://www.hyuki.com/  &lt;http://suika.fam.cx/&gt;
846  **小見出し2-2  **セョクォスミ、キ2-2
847    
848  [[結城浩]]  [[キセケタ]]
849    
850  段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
851  段落1段落1段落1段落'''イタリック'''1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ'''カットエ'''1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
852  段落1段落1段落1段落'''''イタボールド'''''1段落1段落1段落1段落1段落1段落1段落1段落1  テハヘ1テハヘ1テハヘ1テハヘ'''''カッ、、カットエ'''''1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1テハヘ1
853  >段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  >テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
854  >段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  >テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
855  >段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2段落2  >テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2テハヘ2
856    
857  レベル0レベル0レベル0レベル0レベル0レベル0  ・・ル・0・・ル・0・・ル・0・・ル・0・・ル・0・・ル・0
858    
859  >レベル1  >・・ル・1
860  >レベル1  >・・ル・1
861  >レベル1  >・・ル・1
862  >>レベル2  >>・・ル・2
863  >>レベル2  >>・・ル・2
864  >>レベル2  >>・・ル・2
865  >>>レベル3  >>>・・ル・3
866  -はろ1  -、マ、1
867  --はろ2  --、マ、2
868  ろろろろ2  、、、、2
869  ---はろ3  ---、マ、3
870  --はろ2  --、マ、2
871  ---はろ3  ---、マ、3
872  --はろ2  --、マ、2
873  ---はろ3  ---、マ、3
874  >>>レベル3  >>>・・ル・3
875  >>>レベル3  >>>・・ル・3
876  >>>レベル3  >>>・・ル・3
877  EOD  EOD
878      print $txt;      print $txt;
879      exit;      exit;
# Line 1010  __END__ Line 1019  __END__
1019    
1020  =head1 NAME  =head1 NAME
1021    
1022  YukiWiki - 自由にページを追加・削除・編集できるWebページ構築CGI  YukiWiki - シォヘウ、ヒ・レ。シ・ク、トノイテ。ヲコス。ヲハヤスク、ヌ、ュ、Web・レ。シ・クケステロCGI
1023    
1024      Copyright (C) 2000,2001 by Hiroshi Yuki.      Copyright (C) 2000,2001 by Hiroshi Yuki.
1025      結城浩 <hyuki@hyuki.com>      キセケタ <hyuki@hyuki.com>
1026      http://www.hyuki.com/      http://www.hyuki.com/
1027      http://www.hyuki.com/yukiwiki/      http://www.hyuki.com/yukiwiki/
1028    
# Line 1023  YukiWiki - 自由にページを追加・削除・編 Line 1032  YukiWiki - 自由にページを追加・削除・編
1032    
1033  =head1 DESCRIPTION  =head1 DESCRIPTION
1034    
1035  YukiWiki(結城ウィキィ)は参加者が自由にページを追加・削除・編集できる  YukiWiki。ハキセ・ヲ・」・ュ・」。ヒ、マサイイテシヤ、ャシォヘウ、ヒ・レ。シ・ク、トノイテ。ヲコス。ヲハヤスク、ヌ、ュ、
1036  不思議なWebページ群を作るCGIです。  ノヤサラオト、ハWeb・レ。シ・クキイ、コ、CGI、ヌ、ケ。」
1037  Webで動作する掲示板とちょっと似ていますが、  Web、ヌニーコ、ケ、キヌシィネト、ネ、チ、遉テ、ネサ、ニ、、、゙、ケ、ャ。「
1038  Web掲示板が単にメッセージを追加するだけなのに対して、  Webキヌシィネト、ャテア、ヒ・皈テ・サ。シ・ク、トノイテ、ケ、、タ、ア、ハ、ホ、ヒツミ、キ、ニ。「
1039  YukiWikiは、Webページ全体を自由に変更することができます。  YukiWiki、マ。「Web・レ。シ・クチエツホ、シォヘウ、ヒハムケケ、ケ、、ウ、ネ、ャ、ヌ、ュ、゙、ケ。」
1040    
1041  YukiWikiは、Cunningham & CunninghamのWikiWikiWebの  YukiWiki、マ。「Cunningham & Cunningham、ホWikiWikiWeb、ホ
1042  仕様を参考にして独自に作られました。  サナヘヘ、サイケヘ、ヒ、キ、ニニネシォ、ヒコ、鬢、゙、キ、ソ。」
1043    
1044  YukiWikiはPerlで書かれたCGIスクリプトとして実現されていますので、  YukiWiki、マPerl、ヌス、ォ、、ソCGI・ケ・ッ・・ラ・ネ、ネ、キ、ニシツクス、オ、、ニ、、、゙、ケ、ホ、ヌ。「
1045  Perlが動作するWebサーバならば比較的容易に設置できます。  Perl、ャニーコ、ケ、Web・オ。シ・ミ、ハ、鬢ミネ豕モナェヘニーラ、ヒタ゚テヨ、ヌ、ュ、゙、ケ。」
1046    
1047  あとはdbmopenが使える環境ならば設置できます(Version 1.5.0以降ならdbmopenが使えなくても設置できます)。  、「、ネ、マdbmopen、ャサネ、ィ、エトカュ、ハ、鬢ミタ゚テヨ、ヌ、ュ、゙、ケ(Version 1.5.0ーハケ゚、ハ、馘bmopen、ャサネ、ィ、ハ、ッ、ニ、簑゚テヨ、ヌ、ュ、゙、ケ)。」
1048    
1049    
1050  YukiWikiはフリーソフトです。  YukiWiki、マ・ユ・遙シ・ス・ユ・ネ、ヌ、ケ。」
1051  ご自由にお使いください。  、エシォヘウ、ヒ、ェサネ、、、ッ、タ、オ、、。」
1052    
1053  =head1 設置方法  =head1 タ゚テヨハヒ。
1054    
1055  =head2 入手  =head2 ニシ
1056    
1057  YukiWikiの最新版は、  YukiWiki、ホコヌソキネヌ、マ。「
1058  http://www.hyuki.com/yukiwiki/  http://www.hyuki.com/yukiwiki/
1059  から入手できます。  、ォ、鯣シ熙ヌ、ュ、゙、ケ。」
1060    
1061  =head2 ファイル一覧  =head2 ・ユ・。・、・ーヘ
1062    
1063      readme.txt      ドキュメント      readme.txt      ・ノ・ュ・螂皈・ネ
1064      yukiwiki.cgi    YukiWiki本体      yukiwiki.cgi    YukiWikiヒワツホ
1065      yukiwiki.gif    ロゴ(カラー版)      yukiwiki.gif    ・・エ。ハ・ォ・鬘シネヌ。ヒ
1066      yukimono.gif    ロゴ(モノクロ版)      yukimono.gif    ・・エ。ハ・筵ホ・ッ・ネヌ。ヒ
1067      jcode.pl        漢字コードライブラリ      jcode.pl        エチサ・ウ。シ・ノ・鬣、・ヨ・鬣
1068    
1069  =head2 インストール  =head2 ・、・・ケ・ネ。シ・
1070    
1071  =over 4  =over 4
1072    
1073  =item 1.  =item 1.
1074    
1075  アーカイブを解く。  ・「。シ・ォ・、・ヨ、イ、ッ。」
1076    
1077  =item 2.  =item 2.
1078    
1079  yukiwiki.cgiのはじめの方にある設定を確認します。  yukiwiki.cgi、ホ、マ、ク、皃ホハ、ヒ、「、タ゚ト熙ウホヌァ、キ、゙、ケ。」
1080  通常は何もしなくてよいが、  トフセ、マイソ、筅キ、ハ、ッ、ニ、隍、、ャ。「
1081  はじめは$touchfileを''にした方がよいでしょう。  、マ、ク、皃マ$touchfile、''、ヒ、キ、ソハ、ャ、隍、、ヌ、キ、遉ヲ。」
1082    
1083  =item 3.  =item 3.
1084    
1085  yukiwiki.cgiとjcode.plを同じところに設置します。  yukiwiki.cgi、ネjcode.pl、ニア、ク、ネ、ウ、、ヒタ゚テヨ、キ、゙、ケ。」
1086    
1087  =item 4.  =item 4.
1088    
1089  サイズ0のyukiwiki.dbというファイルを設置します。  ・オ・、・コ0、ホyukiwiki.db、ネ、、、ヲ・ユ・。・、・、タ゚テヨ、キ、゙、ケ。」
1090  (Perlシステムによってはyukiwiki.pag, yukiwiki.dir)  。ハPerl・キ・ケ・ニ・爨ヒ、隍テ、ニ、マyukiwiki.pag, yukiwiki.dir。ヒ
1091    
1092  =item 5.  =item 5.
1093    
1094  yukiwiki.cgiにブラウザからアクセスします。  yukiwiki.cgi、ヒ・ヨ・鬣ヲ・カ、ォ、鬣「・ッ・サ・ケ、キ、゙、ケ。」
1095    
1096  =back  =back
1097    
1098  =head2 パーミッション  =head2 ・ム。シ・゚・テ・キ・逾
1099    
1100          ファイル        パーミッション      転送モード          ・ユ・。・、・        ・ム。シ・゚・テ・キ・逾      ナセチ・筍シ・ノ
1101          yukiwiki.cgi    755                 ASCII          yukiwiki.cgi    755                 ASCII
1102          yukiwiki.gif    644                 BINARY          yukiwiki.gif    644                 BINARY
1103          yukimono.gif    644                 BINARY          yukimono.gif    644                 BINARY
1104          jcode.pl        644                 ASCII          jcode.pl        644                 ASCII
1105    
1106      $dbmopen = 1; にした場合:      $dbmopen = 1; 、ヒ、キ、ソセケ:
1107          yukiwiki.db     666                 BINARY          yukiwiki.db     666                 BINARY
1108          (yukiwiki.pag, yukiwiki.dirの場合もあり)          (yukiwiki.pag, yukiwiki.dir、ホセケ遉筅「、遙ヒ
1109    
1110      $dbmopen = 0; にした場合: (カレントディレクトリを777にしておく)      $dbmopen = 0; 、ヒ、キ、ソセケ: (・ォ・・・ネ・ヌ・」・・ッ・ネ・熙777、ヒ、キ、ニ、ェ、ッ)
1111          .               777                 (転送しない)          .               777                 (ナセチ、キ、ハ、、)
1112    
1113  =head1 データのバックアップ方法  =head1 ・ヌ。シ・ソ、ホ・ミ・テ・ッ・「・テ・ラハヒ。
1114    
1115  $dbmopen = 1;の場合は、  $dbmopen = 1;、ホセケ遉マ。「
1116  データはすべてyukiwiki.db(.dir, .pag)に入る。  ・ヌ。シ・ソ、マ、ケ、ル、ニyukiwiki.db(.dir, .pag)、ヒニ、。」
1117  これをバックアップすればよい。  、ウ、、・ミ・テ・ッ・「・テ・ラ、ケ、、ミ、隍、。」
1118    
1119  $dbmopen = 0;の場合は、  $dbmopen = 0;、ホセケ遉マ。「
1120  yukiwikiというディレクトリができるので、  yukiwiki、ネ、、、ヲ・ヌ・」・・ッ・ネ・熙ャ、ヌ、ュ、、ホ、ヌ。「
1121  これ以下をバックアップすればよい。  、ウ、ーハイシ、・ミ・テ・ッ・「・テ・ラ、ケ、、ミ、隍、。」
1122    
1123  =head1 新しいページの作り方  =head1 ソキ、キ、、・レ。シ・ク、ホコ、ハ
1124    
1125  =over 4  =over 4
1126    
1127  =item 1.  =item 1.
1128    
1129  まず、適当なページ(例えばFrontPage)を選び、  、゙、コ。「ナャナ、ハ・レ。シ・ク。ハホ网ィ、ミFrontPage。ヒ、チェ、モ。「
1130  ページの下にある「編集」リンクをたどります。  ・レ。シ・ク、ホイシ、ヒ、「、。ヨハヤスク。ラ・・・ッ、、ソ、ノ、熙゙、ケ。」
1131    
1132  =item 2.  =item 2.
1133    
1134  するとテキスト入力ができる状態になるので、  、ケ、、ネ・ニ・ュ・ケ・ネニホマ、ャ、ヌ、ュ、セツヨ、ヒ、ハ、、ホ、ヌ。「
1135  そこにNewPageのような単語  、ス、ウ、ヒNewPage、ホ、隍ヲ、ハテアク
1136  (大文字小文字混在している英文字列)  。ハツ醋クサセョハクサコョコ゚、キ、ニ、、、アムハクサホ。ヒ
1137  を書いて「保存」します。  、ス、、、ニ。ヨハンツク。ラ、キ、゙、ケ。」
1138    
1139  =item 3.  =item 3.
1140    
1141  保存すると、FrontPageのページが書き換わり、  ハンツク、ケ、、ネ。「FrontPage、ホ・レ。シ・ク、ャス、ュエケ、、遙「
1142  あなたが書いたNewPageという文字列の後ろに ? というリンクが表示されます。  、「、ハ、ソ、ャス、、、ソNewPage、ネ、、、ヲハクサホ、ホク螟、ヒ ? 、ネ、、、ヲ・・・ッ、ャノスシィ、オ、、゙、ケ。」
1143  この ? はそのページがまだ存在しないことを示す印です。  、ウ、ホ ? 、マ、ス、ホ・レ。シ・ク、ャ、゙、タツクコ゚、キ、ハ、、、ウ、ネ、シィ、ケー、ヌ、ケ。」
1144    
1145  =item 4.  =item 4.
1146    
1147  その ? をクリックすると新しいページNewPageができますので、  、ス、ホ ? 、・ッ・・テ・ッ、ケ、、ネソキ、キ、、・レ。シ・クNewPage、ャ、ヌ、ュ、゙、ケ、ホ、ヌ。「
1148  あなたの好きな文章をその新しいページに書いて保存します。  、「、ハ、ソ、ホケ・、ュ、ハハクセマ、、ス、ホソキ、キ、、・レ。シ・ク、ヒス、、、ニハンツク、キ、゙、ケ。」
1149    
1150  =item 5.  =item 5.
1151    
1152  NewPageページができるとFrontPageの ? は消えて、リンクとなります。  NewPage・レ。シ・ク、ャ、ヌ、ュ、、ネFrontPage、ホ ? 、マセテ、ィ、ニ。「・・・ッ、ネ、ハ、熙゙、ケ。」
1153    
1154  =back  =back
1155    
1156  =head1 テキスト整形のルール  =head1 ・ニ・ュ・ケ・ネターキチ、ホ・。シ・
1157    
1158  =over 4  =over 4
1159    
1160  =item *  =item *
1161    
1162  連続した複数行はフィルされて表示されます。  マ「ツウ、キ、ソハ」ソケヤ、マ・ユ・」・、オ、、ニノスシィ、オ、、゙、ケ。」
1163    
1164  =item *  =item *
1165    
1166  空行は段落C<< <p> >>の区切りとなります。  カケヤ、マテハヘC<< <p> >>、ホカ霏レ、熙ネ、ハ、熙゙、ケ。」
1167    
1168  =item *  =item *
1169    
1170  HTMLのタグは書けません。  HTML、ホ・ソ・ー、マス、ア、゙、サ、。」
1171    
1172  =item *  =item *
1173    
1174  B<''ボールド''>のようにシングルクォート二つではさむと、  B<''・ワ。シ・・ノ''>、ホ、隍ヲ、ヒ・キ・・ー・・ッ・ゥ。シ・ネニ、ト、ヌ、マ、オ、爨ネ。「
1175  ボールドC<< <b> >>になります。  ・ワ。シ・・ノC<< <b> >>、ヒ、ハ、熙゙、ケ。」
1176    
1177  =item *  =item *
1178    
1179  B<'''イタリック'''>のようにシングルクォート三つではさむと、  B<'''・、・ソ・・テ・ッ'''>、ホ、隍ヲ、ヒ・キ・・ー・・ッ・ゥ。シ・ネサー、ト、ヌ、マ、オ、爨ネ。「
1180  イタリックC<< <i> >>になります。  ・、・ソ・・テ・ッC<< <i> >>、ヒ、ハ、熙゙、ケ。」
1181    
1182  =item *  =item *
1183    
1184  B<---->のようにマイナス4つがあると、  B<---->、ホ、隍ヲ、ヒ・゙・、・ハ・ケ4、ト、ャ、「、、ネ。「
1185  水平線C<< <hr> >>になります。  ソ衞ソタC<< <hr> >>、ヒ、ハ、熙゙、ケ。」
1186    
1187  =item *  =item *
1188    
1189  行をB<*>ではじめると、  ケヤ、B<*>、ヌ、マ、ク、皃、ネ。「
1190  大見出しC<< <h2> >>になります。  ツ邵ォスミ、キC<< <h2> >>、ヒ、ハ、熙゙、ケ。」
1191    
1192  =item *  =item *
1193    
1194  行をB<**>ではじめると、  ケヤ、B<**>、ヌ、マ、ク、皃、ネ。「
1195  小見出しC<< <h3> >>になります。  セョクォスミ、キC<< <h3> >>、ヒ、ハ、熙゙、ケ。」
1196    
1197  =item *  =item *
1198    
1199  行をマイナス-ではじめると、  ケヤ、・゙・、・ハ・ケ-、ヌ、マ、ク、皃、ネ。「
1200  箇条書きC<< <ul> >>になります。  イユセス、ュC<< <ul> >>、ヒ、ハ、熙゙、ケ。」
1201  マイナスの数が増えるとレベルが下がります(3レベルまで)  ・゙・、・ハ・ケ、ホソ、ャチ、ィ、、ネ・・ル・、ャイシ、ャ、熙゙、ケ。ハ3・・ル・、゙、ヌ。ヒ
1202    
1203      -項目1      -ケ猯ワ1
1204      --項目1-1      --ケ猯ワ1-1
1205      --項目1-2      --ケ猯ワ1-2
1206      -項目2      -ケ猯ワ2
1207      -項目3      -ケ猯ワ3
1208      --項目3-1      --ケ猯ワ3-1
1209      ---項目3-1-1      ---ケ猯ワ3-1-1
1210      ---項目3-1-2      ---ケ猯ワ3-1-2
1211      --項目3-2      --ケ猯ワ3-2
1212    
1213  =item *  =item *
1214    
1215  コロンを使うと、  ・ウ・・、サネ、ヲ、ネ。「
1216  用語と解説文のリストC<< <dl> >>が書けます。  ヘムク、ネイタ簗ク、ホ・・ケ・ネC<< <dl> >>、ャス、ア、゙、ケ。」
1217    
1218      :用語1:いろいろ書いた解説文1      :ヘムク1:、、、、、、ス、、、ソイタ簗ク1
1219      :用語2:いろいろ書いた解説文2      :ヘムク2:、、、、、、ス、、、ソイタ簗ク2
1220      :用語3:いろいろ書いた解説文3      :ヘムク3:、、、、、、ス、、、ソイタ簗ク3
1221    
1222  =item *  =item *
1223    
1224  リンク  ・・・ッ
1225    
1226  =over 4  =over 4
1227    
1228  =item *  =item *
1229    
1230  LinkToSomePageやFrontPageのように、  LinkToSomePage、腱rontPage、ホ、隍ヲ、ヒ。「
1231  英単語の最初の一文字を大文字にしたものが  アムテアク、ホコヌス鬢ホーハクサ、ツ醋クサ、ヒ、キ、ソ、筅ホ、ャ
1232  二つ以上連続したものはYukiWikiのページ名となり、  ニ、トーハセ袞「ツウ、キ、ソ、筅ホ、マYukiWiki、ホ・レ。シ・クフセ、ネ、ハ、遙「
1233  それが文章中に含まれるとリンクになります。  、ス、、ャハクセマテ讀ヒエ゙、゙、、、ネ・・・ッ、ヒ、ハ、熙゙、ケ。」
1234    
1235  =item *  =item *
1236    
1237  http://www.hyuki.com/ のようなURLは自動的にリンクになります。  http://www.hyuki.com/ 、ホ、隍ヲ、ハURL、マシォニーナェ、ヒ・・・ッ、ヒ、ハ、熙゙、ケ。」
1238    
1239  =item *  =item *
1240    
1241  二重の大かっこ[[ ]]でくくった文字列も、  ニスナ、ホツ遉ォ、テ、ウ[[ ]]、ヌ、ッ、ッ、テ、ソハクサホ、筍「
1242  YukiWikiのページ名になります。  YukiWiki、ホ・レ。シ・クフセ、ヒ、ハ、熙゙、ケ。」
1243  大かっこの中にはスペースを含めてはいけません。  ツ遉ォ、テ、ウ、ホテ讀ヒ、マ・ケ・レ。シ・ケ、エ゙、皃ニ、マ、、、ア、゙、サ、。」
1244  日本語も使えます。  ニヒワク、篏ネ、ィ、゙、ケ。」
1245    
1246  =back  =back
1247    
1248  =item *  =item *
1249    
1250  行頭がスペースやタブで始まっていると、  ケヤニャ、ャ・ケ・レ。シ・ケ、茹ソ・ヨ、ヌサマ、゙、テ、ニ、、、、ネ。「
1251  それは整形済みの段落C<< <pre> >>として扱われます。  、ス、、マターキチコム、゚、ホテハヘC<< <pre> >>、ネ、キ、ニーキ、、、゙、ケ。」
1252  プログラムの表示などに使うと便利です。  ・ラ・・ー・鬣爨ホノスシィ、ハ、ノ、ヒサネ、ヲ、ネハリヘ、ヌ、ケ。」
1253    
1254    
1255  =item *  =item *
1256    
1257  行を > ではじめると、  ケヤ、 > 、ヌ、マ、ク、皃、ネ。「
1258  引用文C<< <blockquote> >>が書けます。  ーヘムハクC<< <blockquote> >>、ャス、ア、゙、ケ。」
1259  >の数が多いとインデントが深くなります(3レベルまで)。  >、ホソ、ャツソ、、、ネ・、・・ヌ・・ネ、ャソシ、ッ、ハ、熙゙、ケ。ハ3・・ル・、゙、ヌ。ヒ。」
1260    
1261      >文章      >ハクセマ
1262      >文章      >ハクセマ
1263      >>さらなる引用      >>、オ、鬢ハ、ーヘム
1264      >文章      >ハクセマ
1265    
1266  =back  =back
1267    
1268  =head1 更新履歴  =head1 ケケソキヘホ
1269    
1270  =over 4  =over 4
1271    
1272  =item *  =item *
1273    
1274  2001年10月20日、Version 1.6.6。  2001ヌッ10キ20ニ。「Version 1.6.6。」
1275    
1276  更新の衝突対策。  ケケソキ、ホセラニヘツミコ。」
1277  元ページの簡単なチェックサムを取っておき、  クオ・レ。シ・ク、ホエハテア、ハ・チ・ァ・テ・ッ・オ・爨シ隍テ、ニ、ェ、ュ。「
1278  更新前にチェックサムを比較する。  ケケソキチー、ヒ・チ・ァ・テ・ッ・オ・爨ネ豕モ、ケ、。」
1279  修正個所はdigestという文字列を検索すれば分かる。  ス、タオクトス熙マdigest、ネ、、、ヲハクサホ、ク。コ、ケ、、ミハャ、ォ、。」
1280  本来はMD5などでちゃんとやった方がいいのだけれど。  ヒワヘ隍マMD5、ハ、ノ、ヌ、チ、网、ネ、荀テ、ソハ、ャ、、、、、ホ、タ、ア、、ノ。」
1281    
1282  衝突時に表示されるメッセージなどは「極悪」さんのページを参考にした。  セラニヘサ、ヒノスシィ、オ、、・皈テ・サ。シ・ク、ハ、ノ、マ。ヨカヒーュ。ラ、オ、、ホ・レ。シ・ク、サイケヘ、ヒ、キ、ソ。」
1283    
1284  =item *  =item *
1285    
1286  2001年10月17日、Version 1.6.5。  2001ヌッ10キ17ニ。「Version 1.6.5。」
1287    
1288  プレビュー画面で、更新ボタンを押したときに送信される  ・ラ・・モ・蝪シイ靂フ、ヌ。「ケケソキ・ワ・ソ・、イ。、キ、ソ、ネ、ュ、ヒチソョ、オ、、
1289  メッセージの内容をinput要素のtype="hidden"を使って埋め込むのをやめる。  ・皈テ・サ。シ・ク、ホニ簣ニ、inputヘラチヌ、ホtype="hidden"、サネ、テ、ニヒ荀盪、爨ホ、、荀皃。」
1290  代わりに、textarea要素を使う。  ツ螟、熙ヒ。「textareaヘラチヌ、サネ、ヲ。」
1291  再プレビュー用にmyspecial_を導入。でもきれいな対策ではない。  コニ・ラ・・モ・蝪シヘム、ヒmyspecial_、ニウニ。」、ヌ、筅ュ、、、、ハツミコ、ヌ、マ、ハ、、。」
1292    
1293  =item *  =item *
1294    
1295  2001年8月30日、Version 1.6.4。  2001ヌッ8キ30ニ。「Version 1.6.4。」
1296    
1297  URLでダイレクトにページ名を指定しても、  URL、ヌ・タ・、・・ッ・ネ、ヒ・レ。シ・クフセ、サリト熙キ、ニ、筍「
1298  $WikiNameと$BracketName以外のページを作れないようにした。  $WikiName、ネ$BracketNameーハウー、ホ・レ。シ・ク、コ、、ハ、、、隍ヲ、ヒ、キ、ソ。」
1299  (is_valid_nameとis_editable参照)。  (is_valid_name、ネis_editableサイセネ)。」
1300    
1301  =item *  =item *
1302    
1303  2001年8月30日、Version 1.6.3。  2001ヌッ8キ30ニ。「Version 1.6.3。」
1304    
1305  RecentChangesを編集・再編集不可とした。  RecentChanges、ハヤスク。ヲコニハヤスクノヤイト、ネ、キ、ソ。」
1306  編集不可ページは@uneditableにページ名を入れる。  ハヤスクノヤイト・レ。シ・ク、マ@uneditable、ヒ・レ。シ・クフセ、ニ、、。」
1307    
1308  =item *  =item *
1309    
1310  2001年2月25日、Version 1.6.1, 1.6.2。  2001ヌッ2キ25ニ。「Version 1.6.1, 1.6.2。」
1311    
1312  差分機能のバグ修正。  コケハャオ。ヌス、ホ・ミ・ース、タオ。」
1313  do_previewで'>'が扱えないバグを修正  do_preview、ヌ'>'、ャーキ、ィ、ハ、、・ミ・ー、ス、タオ
1314  (ユーザからの指摘)。  。ハ・譯シ・カ、ォ、鬢ホサリナヲ。ヒ。」
1315    
1316  =item *  =item *
1317    
1318  2001年2月22日、Version 1.6.0。  2001ヌッ2キ22ニ。「Version 1.6.0。」
1319  差分機能を実装した。  コケハャオ。ヌス、シツチ、キ、ソ。」
1320    
1321  =item *  =item *
1322    
1323  2001年2月19日、Version 1.5.4。  2001ヌッ2キ19ニ。「Version 1.5.4。」
1324  画像ファイルへのリンクは画像にしてみた。  イ霖・ユ・。・、・、リ、ホ・・・ッ、マイ霖、ヒ、キ、ニ、゚、ソ。」
1325    
1326  =item *  =item *
1327    
1328  2001年2月19日、Version 1.5.3。  2001ヌッ2キ19ニ。「Version 1.5.3。」
1329  RecentChangesの中に削除したページがあるのをやめた。  RecentChanges、ホテ讀ヒコス、キ、ソ・レ。シ・ク、ャ、「、、ホ、、荀皃ソ。」
1330  use strict;で引っかかる部分を少し整理(完全ではない)。  use strict;、ヌー、テ、ォ、ォ、ノハャ、セッ、キターヘ(エーチエ、ヌ、マ、ハ、、)。」
1331    
1332  =item *  =item *
1333    
1334  2001年2月16日、Version 1.5.2。  2001ヌッ2キ16ニ。「Version 1.5.2。」
1335  textareaに表示およびプレビューする前に < や > を &lt; や &gt; に変換した  textarea、ヒノスシィ、ェ、隍モ・ラ・・モ・蝪シ、ケ、チー、ヒ < 、 > 、 &lt; 、 &gt; 、ヒハムエケ、キ、ソ
1336  (do_preview, editpage, print_preview_buttons)。  (do_preview, editpage, print_preview_buttons)。」
1337    
1338  =item *  =item *
1339    
1340  2000年12月27日、Version 1.5.1。  2000ヌッ12キ27ニ。「Version 1.5.1。」
1341  プレビュー画面を整理した。  ・ラ・・モ・蝪シイ靂フ、ターヘ、キ、ソ。」
1342    
1343  =item *  =item *
1344    
1345  2000年12月22日、Version 1.5.0。  2000ヌッ12キ22ニ。「Version 1.5.0。」
1346  全体的にずいぶん書き直した。  チエツホナェ、ヒ、コ、、、ヨ、ス、ュトセ、キ、ソ。」
1347  一覧を別途作成するようにした(do_list)。  ーヘ、ハフナモコタョ、ケ、、隍ヲ、ヒ、キ、ソ(do_list)。」
1348  書き込む前に確認画面を出すようにした(do_preview)。  ス、ュケ、狠ー、ヒウホヌァイ靂フ、スミ、ケ、隍ヲ、ヒ、キ、ソ(do_preview)。」
1349  テキストの書き方を編集画面に入れた(do_edit, do_reedit)。  ・ニ・ュ・ケ・ネ、ホス、ュハ、ハヤスクイ靂フ、ヒニ、、ソ(do_edit, do_reedit)。」
1350  WhatsNew→RecentChanges、TopPage→FrontPageに変更した。  WhatsNew「ェRecentChanges。「TopPage「ェFrontPage、ヒハムケケ、キ、ソ。」
1351    
1352  =item *  =item *
1353    
1354  2000年12月20日、Version 1.1.0。  2000ヌッ12キ20ニ。「Version 1.1.0。」
1355  tieを利用して、dbmopenが使えない場合でも動作するように修正。  tie、ヘヘム、キ、ニ。「dbmopen、ャサネ、ィ、ハ、、セケ遉ヌ、簇ーコ、ケ、、隍ヲ、ヒス、タオ。」
1356  利用者の1人である「極悪」さんから  ヘヘムシヤ、ホ1ソヘ、ヌ、「、。ヨカヒーュ。ラ、オ、、ォ、
1357  送っていただいたコードを元にしています。  チ、テ、ニ、、、ソ、タ、、、ソ・ウ。シ・ノ、クオ、ヒ、キ、ニ、、、゙、ケ。」
1358    
1359  =item *  =item *
1360    
1361  2000年9月5日、Version 1.0.2。  2000ヌッ9キ5ニ。「Version 1.0.2。」
1362   <body color=...> → <body bgcolor=...>   <body color=...> 「ェ <body bgcolor=...>
1363  利用者からの指摘による。感謝。  ヘヘムシヤ、ォ、鬢ホサリナヲ、ヒ、隍。」エカシユ。」
1364    
1365  =item *  =item *
1366    
1367  2000年8月6日、Version 1.0.1を公開。  2000ヌッ8キ6ニ。「Version 1.0.1、クウォ。」
1368  C MAGAZINE(ソフトバンクパブリッシング)  C MAGAZINE。ハ・ス・ユ・ネ・ミ・・ッ・ム・ヨ・・テ・キ・・ー。ヒ
1369  2000年10月号連載記事向け公開版。  2000ヌッ10キケ賺「コワオュサク、アクウォネヌ。」
1370  [[ ]] の最後が「望」のようにシフトJISで  [[ ]] 、ホコヌク螟ャ。ヨヒセ。ラ、ホ、隍ヲ、ヒ・キ・ユ・ネJIS、ヌ
1371  0x5Dになる場合の回避を行なった。  0x5D、ヒ、ハ、セケ遉ホイネ、ケヤ、ハ、テ、ソ。」
1372    
1373  =item *  =item *
1374    
1375  2000年8月5日、Version 1.0.0を公開。  2000ヌッ8キ5ニ。「Version 1.0.0、クウォ。」
1376    
1377  =item *  =item *
1378    
1379  2000年7月23日、Version 0.82を公開。  2000ヌッ7キ23ニ。「Version 0.82、クウォ。」
1380  編集時のリンクミス。  ハヤスクサ、ホ・・・ッ・゚・ケ。」
1381  <textarea>の属性変更。  <textarea>、ホツータュハムケケ。」
1382    
1383  =item *  =item *
1384    
1385  2000年7月22日、Version 0.81を公開。  2000ヌッ7キ22ニ。「Version 0.81、クウォ。」
1386  ロゴを組み込む。  ・・エ、チネ、゚ケ、爍」
1387    
1388  =item *  =item *
1389    
1390  2000年7月21日、Version 0.80を公開。  2000ヌッ7キ21ニ。「Version 0.80、クウォ。」
1391  PODをCGI中に書き込む。  POD、CGIテ讀ヒス、ュケ、爍」
1392    
1393  =item *  =item *
1394    
1395  2000年7月19日、Version 0.70を公開。  2000ヌッ7キ19ニ。「Version 0.70、クウォ。」
1396  '''イタリック'''や、--、---、>>、>>>などを実装。  '''・、・ソ・・テ・ッ'''、茖「--。「---。「>>。「>>>、ハ、ノ、シツチ。」
1397    
1398  =item *  =item *
1399    
1400  2000年7月18日、Version 0.60を公開。  2000ヌッ7キ18ニ。「Version 0.60、クウォ。」
1401  *太字*を''太字''に変更  *ツタサ*、''ツタサ''、ヒハムケケ
1402    
1403  =item *  =item *
1404    
1405  2000年7月17日、Version 0.50を公開。  2000ヌッ7キ17ニ。「Version 0.50、クウォ。」
1406    
1407  =item *  =item *
1408    
1409  2000年7月17日、さらにいろいろ追加する。  2000ヌッ7キ17ニ。「、オ、鬢ヒ、、、、、、トノイテ、ケ、。」
1410    
1411  =item *  =item *
1412    
1413  2000年7月16日、いろいろ追加。  2000ヌッ7キ16ニ。「、、、、、、トノイテ。」
1414    
1415  =item *  =item *
1416    
1417  2000年7月15日、公開。  2000ヌッ7キ15ニ。「クウォ。」
1418    
1419  =back  =back
1420    
1421  =head1 TODO  =head1 TODO
1422    
1423      - テキスト表示モード      - ・ニ・ュ・ケ・ネノスシィ・筍シ・ノ
1424      - Charsetを明示。      - Charset、フタシィ。」
1425      - textarea中の閉じタグ対応      - textareaテ讀ホハト、ク・ソ・ーツミア
1426      - メニューの英語表記付記      - ・皈ヒ・蝪シ、ホアムクノスオュノユオュ
1427      - プレビューのボタンで、mymsgをinputのvalueに入れているが、改行をそのままvalueにいれてはいけないのではないか。      - ・ラ・・モ・蝪シ、ホ・ワ・ソ・、ヌ。「mymsg、input、ホvalue、ヒニ、、ニ、、、、ャ。「イケヤ、、ス、ホ、゙、゙value、ヒ、、、、ニ、マ、、、ア、ハ、、、ホ、ヌ、マ、ハ、、、ォ。」
1428      - 「再編集」の機能はブラウザの back で充分ではないか。プレビューはもっとシンプルに。      - 。ヨコニハヤスク。ラ、ホオ。ヌス、マ・ヨ・鬣ヲ・カ、ホ back 、ヌスシハャ、ヌ、マ、ハ、、、ォ。」・ラ・・モ・蝪シ、マ、筅テ、ネ・キ・・ラ・、ヒ。」
1429      - ページタイトル(Wikiname)が検索にかかるようにする。      - ・レ。シ・ク・ソ・、・ネ・。ハWikiname。ヒ、ャク。コ、ヒ、ォ、ォ、、隍ヲ、ヒ、ケ、。」
1430      - InterWiki風の機能「URLを隠しつつ、リンクを張る」      - InterWikiノ、ホオ。ヌス。ヨURL、ア」、キ、ト、ト。「・・・ッ、ト・、。ラ
1431    
1432  =head1 作者  =head1 コシヤ
1433    
1434      Copyright (C) 2000 by Hiroshi Yuki.      Copyright (C) 2000 by Hiroshi Yuki.
1435      結城浩 <hyuki@hyuki.com>      キセケタ <hyuki@hyuki.com>
1436      http://www.hyuki.com/      http://www.hyuki.com/
1437      http://www.hyuki.com/yukiwiki/      http://www.hyuki.com/yukiwiki/
1438    
1439  質問、意見、バグ報告は hyuki@hyuki.com にメールしてください。  シチフ茖「ーユクォ。「・ミ・ーハケ、マ hyuki@hyuki.com 、ヒ・癸シ・、キ、ニ、ッ、タ、オ、、。」
1440    
1441  =head1 配布条件  =head1 ヌロノロセキ
1442    
1443  YukiWikiは、  YukiWiki、マ。「
1444  GNU General Public Licenseにて公開します。  GNU General Public License、ヒ、ニクウォ、キ、゙、ケ。」
1445    
1446  YukiWikiはフリーソフトです。  YukiWiki、マ・ユ・遙シ・ス・ユ・ネ、ヌ、ケ。」
1447  ご自由にお使いください。  、エシォヘウ、ヒ、ェサネ、、、ッ、タ、オ、、。」
1448  自分好みのYukiWikiが作れるようにシンプルにしてあります。  シォハャケ・、゚、ホYukiWiki、ャコ、、、隍ヲ、ヒ・キ・・ラ・、ヒ、キ、ニ、「、熙゙、ケ。」
1449    
1450  =head1 謝辞  =head1 シユシュ
1451    
1452  本家のWikiWikiを作ったCunningham & Cunningham, Inc.に  ヒワイネ、ホWikiWiki、コ、テ、ソCunningham & Cunningham, Inc.、ヒ
1453  感謝します。  エカシユ、キ、゙、ケ。」
1454    
1455  YukiWikiを楽しんで使ってくださる  YukiWiki、ウレ、キ、、ヌサネ、テ、ニ、ッ、タ、オ、
1456  ネット上の方々に感謝します。  ・ヘ・テ・ネセ螟ホハ。ケ、ヒエカシユ、キ、゙、ケ。」
1457    
1458  YukiWikiのロゴをデザインしてくださった橋本礼奈さん  YukiWiki、ホ・・エ、・ヌ・カ・、・、キ、ニ、ッ、タ、オ、テ、ソカカヒワホ鯣爨オ、
1459  http://city.hokkai.or.jp/~reina/  http://city.hokkai.or.jp/~reina/
1460  に感謝します。  、ヒエカシユ、キ、゙、ケ。」
1461    
1462  tieを使った版の元になるコードを送ってくださった  tie、サネ、テ、ソネヌ、ホクオ、ヒ、ハ、・ウ。シ・ノ、チ、テ、ニ、ッ、タ、オ、テ、ソ
1463  「極悪」さんに感謝します。  。ヨカヒーュ。ラ、オ、、ヒエカシユ、キ、゙、ケ。」
1464    
1465  =head1 参照リンク  =head1 サイセネ・・・ッ
1466    
1467  =over 4  =over 4
1468    
1469  =item *  =item *
1470    
1471  YukiWikiホームページ  YukiWiki・ロ。シ・爭レ。シ・ク
1472  http://www.hyuki.com/yukiwiki/  http://www.hyuki.com/yukiwiki/
1473    
1474  =item *  =item *
1475    
1476  本家のWikiWiki  ヒワイネ、ホWikiWiki
1477  http://c2.com/cgi/wiki?WikiWikiWeb  http://c2.com/cgi/wiki?WikiWikiWeb
1478    
1479  =item *  =item *
1480    
1481  本家のWikiWikiの作者(Cunningham & Cunningham, Inc.)  ヒワイネ、ホWikiWiki、ホコシヤ(Cunningham & Cunningham, Inc.)
1482  http://c2.com/  http://c2.com/
1483    
1484  =item *  =item *
1485    
1486  YukiWikiのロゴデザインをしてくださった橋本礼奈さんのページ  YukiWiki、ホ・・エ・ヌ・カ・、・、、キ、ニ、ッ、タ、オ、テ、ソカカヒワホ鯣爨オ、、ホ・レ。シ・ク
1487  http://city.hokkai.or.jp/~reina/  http://city.hokkai.or.jp/~reina/
1488    
1489  =back  =back

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.8

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24