OSDN Git Service

インラインWiki書式の入れ子をできるようにしました。
[fswiki/fswiki.git] / lib / Wiki / Parser.pm
1 ################################################################################
2 # <p>
3 #   Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤Îʸ»úÎó¤ò¥Ñ¡¼¥¹¤·¡¢½ñ¼°¤ËÂбþ¤·¤¿¥Õ¥Ã¥¯¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤ò¹Ô¤¤¤Þ¤¹¡£
4 #   Wiki::Parser¤ò·Ñ¾µ¤·¡¢¤³¤ì¤é¤Î¥Õ¥Ã¥¯¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë¤³¤È¤ÇǤ°Õ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤ÎÊÑ´¹¤¬²Äǽ¤Ç¤¹¡£
5 # </p>
6 ################################################################################
7 package Wiki::Parser;
8 use strict;
9 use Wiki::Keyword;
10 use Wiki::InterWiki;
11
12 $Wiki::Parser::keyword   = undef;
13 $Wiki::Parser::interwiki = undef;
14
15 #===============================================================================
16 # <p>
17 # ¥³¥ó¥¹¥È¥é¥¯¥¿¡£
18 # </p>
19 # <pre>
20 # my $parser = Wiki::HTMLParser-&gt;new($wiki);
21 # </pre>
22 #===============================================================================
23 sub new {
24         my $class = shift;
25         my $wiki  = shift;
26         
27         my $self = {};
28         $self->{wiki} = $wiki;
29         
30         # Keyword¤ÈInterWiki¤Ï¹â®²½¤Î¤¿¤á¥â¥¸¥å¡¼¥ëÊÑ¿ô¤È¤·¤ÆÊÝ»ý¤¹¤ë
31         #¡Ê¤¿¤À¤·mod_perl+Farm¤Î¾ì¹ç¤Ï¥À¥á¤Ê¤Î¤ÇËè²ónew¤¹¤ë¡Ë
32         if(exists $ENV{MOD_PERL}){
33                 $self->{interwiki} = Wiki::InterWiki->new($wiki);
34                 $self->{keyword}   = Wiki::Keyword->new($wiki,$self->{interwiki});
35         } else {
36                 unless(defined($Wiki::Parser::keyword)){
37                         $Wiki::Parser::interwiki = Wiki::InterWiki->new($wiki);
38                         $Wiki::Parser::keyword   = Wiki::Keyword->new($wiki,$Wiki::Parser::interwiki);
39                 }
40                 $self->{interwiki} = $Wiki::Parser::interwiki;
41                 $self->{keyword}   = $Wiki::Parser::keyword;
42         }
43         
44         $self->{dl_flag} = 0;
45         $self->{dt} = "";
46         $self->{dd} = "";
47         
48         return bless $self,$class;
49 }
50
51 #===============================================================================
52 # <p>
53 # ¥Ñ¡¼¥¹½èÍý¤ò³«»Ï¤·¤Þ¤¹¡£
54 # </p>
55 # <pre>
56 # $parser-&gt;parse($source);
57 # </pre>
58 #===============================================================================
59 sub parse {
60         my $self   = shift;
61         my $source = shift;
62         
63         $self->start_parse;
64         $source =~ s/\r//g;
65         
66         my @lines = split(/\n/,$source);
67         
68         foreach my $line (@lines){
69                 chomp $line;
70                 
71                 # Ê£¿ô¹Ô¤ÎÀâÌÀ
72                 $self->multi_explanation($line);
73                 
74                 my $word1 = substr($line,0,1);
75                 my $word2 = substr($line,0,2);
76                 my $word3 = substr($line,0,3);
77                 
78                 # ¶õ¹Ô
79                 if($line eq "" && !$self->{block}){
80                         $self->l_paragraph();
81                         next;
82                 }
83                 
84                 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó
85                 if($line =~ /^{{(.+}})$/){
86                         if(!$self->{block}){
87                                 my $plugin = $self->{wiki}->parse_inline_plugin($1);
88                                 my $info   = $self->{wiki}->get_plugin_info($plugin->{command});
89                                 if($info->{TYPE} eq "paragraph"){
90                                         $self->l_plugin($plugin);
91                                 } else {
92                                         my @obj = $self->parse_line($line);
93                                         $self->l_text(\@obj);
94                                 }
95                                 next;
96                         }
97                 } elsif($line =~ /^{{(.+)$/){
98                         if ($self->{block}) {
99                                 $self->{block}->{level}++;
100                                 $self->{block}->{args}->[0] .= $line."\n";
101                                 next;
102                         }
103                         my $plugin = $self->{wiki}->parse_inline_plugin($1);
104                         my $info   = $self->{wiki}->get_plugin_info($plugin->{command});
105                         if($info->{TYPE} eq "block"){
106                                 unshift(@{$plugin->{args}}, "");
107                                 $self->{block} = $plugin;
108                                 $self->{block}->{level} = 0;
109                         } else {
110                                 my @obj = $self->parse_line($line);
111                                 $self->l_text(\@obj);
112                         }
113                         next;
114                 }
115                 if($self->{block}){
116                         if($line eq "}}"){
117                                 if ($self->{block}->{level} > 0) {
118                                         $self->{block}->{level}--;
119                                         $self->{block}->{args}->[0] .= $line."\n";
120                                         next;
121                                 }
122                                 my $plugin = $self->{block};
123                                 delete($self->{block});
124                                 $self->l_plugin($plugin);
125                         } else {
126                                 $self->{block}->{args}->[0] .= $line."\n";
127                         }
128                         next;
129                 }
130                 
131                 # PRE
132                 if($word1 eq " " || $word1 eq "\t"){
133                         $self->l_verbatim($line);
134                         
135                 # ¸«½Ð¤·
136                 } elsif($word3 eq "!!!"){
137                         my @obj = $self->parse_line(substr($line,3));
138                         $self->l_headline(1,\@obj);
139                         
140                 } elsif($word2 eq "!!"){
141                         my @obj = $self->parse_line(substr($line,2));
142                         $self->l_headline(2,\@obj);
143                         
144                 } elsif($word1 eq "!"){
145                         my @obj = $self->parse_line(substr($line,1));
146                         $self->l_headline(3,\@obj);
147
148                 # ¹àÌÜ
149                 } elsif($word3 eq "***"){
150                         my @obj = $self->parse_line(substr($line,3));
151                         $self->l_list(3,\@obj);
152                         
153                 } elsif($word2 eq "**"){
154                         my @obj = $self->parse_line(substr($line,2));
155                         $self->l_list(2,\@obj);
156                         
157                 } elsif($word1 eq "*"){
158                         my @obj = $self->parse_line(substr($line,1));
159                         $self->l_list(1,\@obj);
160                         
161                 # ÈÖ¹æÉÕ¤­¹àÌÜ
162                 } elsif($word3 eq "+++"){
163                         my @obj = $self->parse_line(substr($line,3));
164                         $self->l_numlist(3,\@obj);
165                         
166                 } elsif($word2 eq "++"){
167                         my @obj = $self->parse_line(substr($line,2));
168                         $self->l_numlist(2,\@obj);
169                         
170                 } elsif($word1 eq "+"){
171                         my @obj = $self->parse_line(substr($line,1));
172                         $self->l_numlist(1,\@obj);
173                         
174                 # ¿åÊ¿Àþ
175                 } elsif($line eq "----"){
176                         $self->l_line();
177                 
178                 # °úÍÑ
179                 } elsif($word2 eq '""'){
180                         my @obj = $self->parse_line(substr($line,2));
181                         $self->l_quotation(\@obj);
182                         
183                 # ÀâÌÀ
184                 } elsif(index($line,":")==0 && index($line,":",1)!=-1){
185                         if(index($line,":::")==0){
186                                 $self->{dd} .= substr($line,3);
187                                 next;
188                         }
189                         if(index($line,"::")==0){
190                                 if($self->{dt} ne "" || $self->{dd} ne ""){
191                                         $self->multi_explanation;
192                                 }
193                                 $self->{dt} = substr($line,2);
194                                 $self->{dl_flag} = 1;
195                                 next;
196                         }
197                         my $dt = substr($line,1,index($line,":",1)-1);
198                         my $dd = substr($line,index($line,":",1)+1);
199                         my @obj1 = $self->parse_line($dt);
200                         my @obj2 = $self->parse_line($dd);
201                         $self->l_explanation(\@obj1,\@obj2);
202                         
203                 # ¥Æ¡¼¥Ö¥ë
204                 } elsif($word1 eq ","){
205                         if($line =~ /,$/){
206                                 $line .= " ";
207                         }
208                         my @spl = map {/^"(.*)"$/ ? scalar($_ = $1, s/\"\"/\"/g, $_) : $_}
209                                                   ($line =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g);
210                         my @array;
211                         foreach my $value (@spl){
212                                 my @cell = $self->parse_line($value);
213                                 push @array,\@cell;
214                         }
215                         $self->l_table(\@array);
216                         
217                 # ¥³¥á¥ó¥È
218                 } elsif($word2 eq "//"){
219                 
220                 # ²¿¤â¤Ê¤¤¹Ô
221                 } else {
222                         my @obj = $self->parse_line($line);
223                         $self->l_text(\@obj);
224                 }
225         }
226         
227         # Ê£¿ô¹Ô¤ÎÀâÌÀ
228         $self->multi_explanation;
229         
230         # ¥Ñ¡¼¥¹Ãæ¤Î¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¤È¤ê¤¢¤¨¤ºÉ¾²Á¤·¤Æ¤ª¤¯¡©
231         if($self->{block}){
232                 $self->l_plugin($self->{block});
233                 delete($self->{block});
234         }
235         
236         $self->end_parse;
237 }
238
239 #===============================================================================
240 # <p>
241 # Ê£¿ô¹Ô¤ÎÀâÌÀʸ¤ò½èÍý¤·¤Þ¤¹¡£
242 # </p>
243 #===============================================================================
244 sub multi_explanation {
245         my $self = shift;
246         my $line = shift;
247         if($self->{dl_flag}==1 && (index($line,":")!=0 || !defined($line))){
248                 my @obj1 = $self->parse_line($self->{dt});
249                 my @obj2 = $self->parse_line($self->{dd});
250                 $self->l_explanation(\@obj1,\@obj2);
251                 $self->{dl_flag} = 0;
252                 $self->{dt} = "";
253                 $self->{dd} = "";
254         }
255 }
256
257 #===============================================================================
258 # <p>
259 # £±¹Ôʬ¤ò¥Ñ¡¼¥¹¤·¤Þ¤¹¡£parse¥á¥½¥Ã¥É¤ÎÃ椫¤éɬÍפ˱þ¤¸¤Æ¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
260 # </p>
261 #===============================================================================
262 sub parse_line {
263         my ($self, $source) = @_;
264
265         return () if (not defined $source);
266
267         my @array = ();
268         my $pre   = q{};
269         my $parsed;
270
271         # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
272         SOURCE:
273         while ($source ne q{}) {
274
275                 # ¤É¤Î¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°¤ÎÀèƬ¤Ë¤â match ¤·¤Ê¤¤¤Ê¤é¡¢
276                 if (not $source
277                         =~ /^(.*?)((?:{{|\[\[?|https?:|mailto:|f(?:tp:|ile:)|'''?|==|__|<<).*)$/
278                         )
279                 {
280
281                         # ¥­¡¼¥ï¡¼¥É¸¡º÷¡¦ÃÖ´¹½èÍý¤Î¤ß¼Â»Ü¤·¤Æ½ªÎ»¡£
282                         push @array, $self->_parse_line_keyword($pre . $source);
283                         return @array;
284                 }
285
286                 $pre .= $1;     # match ¤·¤Ê¤«¤Ã¤¿ÀèƬÉôʬ¤Ïί¤á¤Æ¤ª¤¤¤Æ¸å¤Ç½èÍý
287                 $source = $2;  # match Éôʬ¡£¤³¤Î¸å¡¢¾ÜºÙ match ¤ò»î¤ß¤ë¡£
288                 $parsed = q{};
289
290                 # ¥×¥é¥°¥¤¥ó
291                 if ($source =~ /^{{/) {
292
293                         # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥­¡¼¥ï¡¼¥É¤Î½èÍý¤ò¼Â»Ü¡£
294                         push @array, $self->_parse_line_keyword($pre) if ($pre ne q{});
295
296                         # ¥ª¥ê¥¸¥Ê¥ë¤Î Wiki::Parser::parse_line() ¤Ë½èÍý¤ò¤ªÇ¤¤»¡£
297                         # (¥×¥é¥°¥¤¥ó¤Î½èÍý¤Ï¡¢¥ª¥ê¥¸¥Ê¥ë¤Ç¤âºÇÍ¥Àè¤Î½èÍý¤Ê¤Î¤Ç²Äǽ)
298                         push @array, $self->SUPER::parse_line($source);
299
300                         # $self->orig_parse_line() ¤Ç $source ¤ÏÁ´¤Æ½èÍýºÑ¤Ê¤Î¤Ç½ªÎ»
301                         return @array;
302                 }
303
304                 # InterWikiName
305                 elsif ($self->{interwiki}->exists_interwiki($source)) {
306                         my $label = $self->{interwiki}->{g_label};
307                         my $url   = $self->{interwiki}->{g_url};
308                         $source = $self->{interwiki}->{g_post};
309                         $parsed = $self->url_anchor($url, $label);
310                 }
311
312                 # ¥Ú¡¼¥¸ÊÌ̾¥ê¥ó¥¯
313                 elsif ($source =~ /^\[\[([^\[]+?)\|([^\|\[]+?)\]\]/) {
314                         my $label = $1;
315                         my $page  = $2;
316                         $source = substr($source, $+[0]);       # as $'
317                         $parsed = $self->wiki_anchor($page, $label);
318                 }
319
320                 # URLÊÌ̾¥ê¥ó¥¯
321                 elsif ($source
322                         =~ /^\[([^\[]+?)\|((?:http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
323                         || $source =~ /^\[([^\[]+?)\|(file:[^\[\]]*)\]/
324                         || $source
325                         =~ /^\[([^\[]+?)\|((?:\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
326                         )
327                 {
328                         my $label = $1;
329                         my $url   = $2;
330                         $source = substr($source, $+[0]);       # as $'
331                         if (   index($url, q{"}) >= 0
332                                 || index($url, '><') >= 0
333                                 || index($url, 'javascript:') >= 0)
334                         {
335                                 $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
336                         }
337                         else {
338                                 $parsed = $self->url_anchor($url, $label);
339                         }
340                 }
341
342                 # URL¥ê¥ó¥¯
343                 elsif ($source
344                         =~ /^(?:https?|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*/
345                         || $source =~ /^file:[^\[\]]*/)
346                 {
347                         my $url = substr($source, $-[0], $+[0] - $-[0]);        # as $&
348                         $source = substr($source, $+[0]);                                  # as $'
349                         if (   index($url, q{"}) >= 0
350                                 || index($url, '><') >= 0
351                                 || index($url, 'javascript:') >= 0)
352                         {
353                                 $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
354                         }
355                         else {
356                                 $parsed = $self->url_anchor($url);
357                         }
358                 }
359
360                 # ¥Ú¡¼¥¸¥ê¥ó¥¯
361                 elsif ($source =~ /^\[\[([^\|]+?)\]\]/) {
362                         my $page = $1;
363                         $source = substr($source, $+[0]);         # as $'
364                         $parsed = $self->wiki_anchor($page);
365                 }
366
367                 # Ç¤°Õ¤ÎURL¥ê¥ó¥¯
368                 elsif ($source =~ /^\[([^\[]+?)\|(.+?)\]/) {
369                         my $label = $1;
370                         my $url   = $2;
371                         $source = substr($source, $+[0]);         # as $'
372                         if (   index($url, q{"}) >= 0
373                                 || index($url, '><') >= 0
374                                 || index($url, 'javascript:') >= 0)
375                         {
376                                 $parsed = $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
377                         }
378                         else {
379
380                                 # URI¤òºîÀ®
381                                 my $wiki = $self->{wiki};
382                                 my $uri  = $wiki->config('server_host');
383                                 if ($uri eq q{}) {
384                                         $uri = $wiki->get_CGI()->url(-path_info => 1);
385                                 }
386                                 else {
387                                         $uri
388                                                 = $uri
389                                                 . $wiki->get_CGI->url(-absolute => 1)
390                                                 . $wiki->get_CGI()->path_info();
391                                 }
392                                 $parsed = $self->url_anchor($uri . '/../' . $url, $label);
393                         }
394                 }
395
396                 # ¥Ü¡¼¥ë¥É¡¢¥¤¥¿¥ê¥Ã¥¯¡¢¼è¤ê¾Ã¤·Àþ¡¢²¼Àþ
397                 elsif ($source =~ /^('''?|==|__)(.+?)\1/) {
398                         my $type  = $1;
399                         my $label = $2;
400                         $source = substr($source, $+[0]);       # as $'
401                         if ($type eq q{'''}) {
402                                 $parsed = $self->bold($label);
403                         }
404                         elsif ($type eq q{__}) {
405                                 $parsed = $self->underline($label);
406                         }
407                         elsif ($type eq q{''}) {
408                                 $parsed = $self->italic($label);
409                         }
410                         else {                                                     ## elsif ($type eq q{==}) {
411                                 $parsed = $self->denialline($label);
412                         }
413                 }
414
415                 # ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
416                 elsif ($source =~ /^<<(.+?)>>/) {
417                         my $label = $1;
418                         $source = substr($source, $+[0]);       # as $'
419                         $parsed = $self->error($label);
420                 }
421
422                 # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂΤˤϠmacth ¤·¤Ê¤«¤Ã¤¿¤È¤­
423                 else {
424
425                         # 1 Ê¸»ú¿Ê¤à¡£
426                         $pre .= substr($source, 0, 1);
427                         $source = substr($source, 1);
428
429                         # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¤òÈô¤Ð¤·¤Æ·«¤êÊÖ¤·¡£
430                         next SOURCE;
431                 }
432
433                 # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂΤˠmacth ¤·¤¿¸å¤Î
434                 # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¡£
435
436                 # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥­¡¼¥ï¡¼¥É¤Î½èÍý¤ò¼Â»Ü¡£
437                 if ($pre ne q{}) {
438                         push @array, $self->_parse_line_keyword($pre);
439                         $pre = q{};
440                 }
441
442                 push @array, $parsed;
443         }
444
445         # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥­¡¼¥ï¡¼¥É¤Î½èÍý¤ò¼Â»Ü¡£
446         push @array, $self->_parse_line_keyword($pre) if ($pre ne q{});
447
448         return @array;
449 }
450
451 #========================================================================
452 # <p>
453 # parse_line() ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¡¢¥­¡¼¥ï¡¼¥É¤Î¸¡º÷¡¦ÃÖ´¹½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
454 # </p>
455 #========================================================================
456 sub _parse_line_keyword {
457     my $self   = shift;
458     my $source = shift;
459
460     return () if (not defined $source);
461
462     my @array = ();
463
464     # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
465     while ($source ne q{}) {
466
467         # ¥­¡¼¥ï¡¼¥É
468         if ($self->{keyword}->exists_keyword($source)) {
469             my $pre   = $self->{keyword}->{g_pre};
470             my $label = $self->{keyword}->{g_label};
471             my $url   = $self->{keyword}->{g_url};
472             my $page  = $self->{keyword}->{g_page};
473             $source = $self->{keyword}->{g_post};
474             if ($pre ne q{}) {
475                 push @array, $self->_parse_line_keyword($pre);
476             }
477             if (defined($url) && $url ne q{}) {
478                 push @array, $self->url_anchor($url, $label);
479             }
480             else {
481                 push @array, $self->wiki_anchor($page, $label);
482             }
483
484         }
485
486         # WikiName
487         elsif ($self->{wiki}->config('wikiname') == 1
488             && $source =~ /[A-Z]+?[a-z]+?(?:[A-Z]+?[a-z]+)+/)
489         {
490             my $pre  = substr($source, 0,     $-[0]);            # as $`
491             my $page = substr($source, $-[0], $+[0] - $-[0]);    # as $&
492             $source = substr($source, $+[0]);                    # as $'
493             if ($pre ne q{}) {
494                 push @array, $self->_parse_line_keyword($pre);
495             }
496             push @array, $self->wiki_anchor($page);
497         }
498
499         # ¥­¡¼¥ï¡¼¥É¤â WikiName ¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­
500         else {
501             push @array, $self->text($source);
502             return @array;
503         }
504     }
505     return @array;
506 }
507
508 #===============================================================================
509 # <p>
510 # ¥Ñ¡¼¥¹¤ò³«»ÏÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
511 # ¥µ¥Ö¥¯¥é¥¹¤ÇɬÍפʽèÍý¤¬¤¢¤ë¾ì¹ç¤Ï¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
512 # </p>
513 #===============================================================================
514 sub start_parse {}
515
516 #===============================================================================
517 # <p>
518 # ¥Ñ¡¼¥¹½ªÎ»¸å¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
519 # ¥µ¥Ö¥¯¥é¥¹¤ÇɬÍפʽèÍý¤¬¤¢¤ë¾ì¹ç¤Ï¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
520 # </p>
521 #===============================================================================
522 sub end_parse {}
523
524 #===============================================================================
525 # <p>
526 # URL¥¢¥ó¥«¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
527 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
528 # </p>
529 #===============================================================================
530 sub url_anchor {}
531
532 #===============================================================================
533 # <p>
534 # ¥Ú¡¼¥¸Ì¾¥¢¥ó¥«¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
535 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
536 # </p>
537 #===============================================================================
538 sub wiki_anchor {}
539
540 #===============================================================================
541 # <p>
542 # ¥¤¥¿¥ê¥Ã¥¯¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
543 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
544 # </p>
545 #===============================================================================
546 sub italic {}
547
548 #===============================================================================
549 # <p>
550 # ¥Ü¡¼¥ë¥É¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
551 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
552 # </p>
553 #===============================================================================
554 sub bold {}
555
556 #===============================================================================
557 # <p>
558 # ²¼Àþ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
559 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
560 # </p>
561 #===============================================================================
562 sub underline {}
563
564 #===============================================================================
565 # <p>
566 # ÂǤÁ¾Ã¤·Àþ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
567 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
568 # </p>
569 #===============================================================================
570 sub denialline {}
571
572 #===============================================================================
573 # <p>
574 # ¥×¥é¥°¥¤¥ó¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
575 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
576 # </p>
577 #===============================================================================
578 sub plugin {}
579
580 #===============================================================================
581 # <p>
582 # ¥Æ¥­¥¹¥È¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
583 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
584 # </p>
585 #===============================================================================
586 sub text{}
587
588 #===============================================================================
589 # <p>
590 # ¹àÌܤ˥ޥåÁ¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
591 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
592 # </p>
593 #===============================================================================
594 sub l_list {}
595
596 #===============================================================================
597 # <p>
598 # ÈÖ¹æÉÕ¤­¹àÌܤ˥ޥåÁ¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
599 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
600 # </p>
601 #===============================================================================
602 sub l_numlist {}
603
604 #===============================================================================
605 # <p>
606 # ¸«½Ð¤·¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
607 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
608 # </p>
609 #===============================================================================
610 sub l_headline {}
611
612 #===============================================================================
613 # <p>
614 # PRE¥¿¥°¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
615 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
616 # </p>
617 #===============================================================================
618 sub l_verbatim {}
619
620 #===============================================================================
621 # <p>
622 # ¿åÊ¿Àþ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
623 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
624 # </p>
625 #===============================================================================
626 sub l_line {}
627
628 #===============================================================================
629 # <p>
630 # Æäˤʤˤâ¤Ê¤¤¹Ô¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
631 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
632 # </p>
633 #===============================================================================
634 sub l_text {}
635
636 #===============================================================================
637 # <p>
638 # ÀâÌÀ¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
639 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
640 # </p>
641 #===============================================================================
642 sub l_explanation {}
643
644 #===============================================================================
645 # <p>
646 # °úÍѤ˥ޥåÁ¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
647 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
648 # </p>
649 #===============================================================================
650 sub l_quotation {}
651
652 #===============================================================================
653 # <p>
654 # ¥Ñ¥é¥°¥é¥Õ¤Î¶èÀÚ¤ê¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
655 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
656 # </p>
657 #===============================================================================
658 sub l_paragraph {}
659
660 #===============================================================================
661 # <p>
662 # ¥Æ¡¼¥Ö¥ë¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
663 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
664 # </p>
665 #===============================================================================
666 sub l_table {}
667
668 #===============================================================================
669 # <p>
670 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
671 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
672 # </p>
673 #===============================================================================
674 sub l_plugin {}
675
676 #===============================================================================
677 # <p>
678 # ²èÁü¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
679 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
680 # </p>
681 #===============================================================================
682 sub l_image {}
683
684 #===============================================================================
685 # <p>
686 # ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë¥Þ¥Ã¥Á¤·¤¿¾ì¹ç¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
687 # ¥µ¥Ö¥¯¥é¥¹¤Ë¤Æ½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£
688 # </p>
689 #===============================================================================
690 sub error {}
691
692 1;