############################################################################### # # YukiWikiの書式をサポートするフォーマットプラグイン # ############################################################################### package plugin::format::YukiWikiFormat; use base qw(plugin::format::FormatBase); use strict; #============================================================================== # FSWikiの書式に変換します。 #============================================================================== sub convert_to_fswiki_paragraph { my $self = shift; my $line = shift; if($line =~ /^\*\*\*/){ return "!".$self->_convert_line(substr($line,3))."\n"; } elsif($line =~ /^\*\*/){ return "!!".$self->_convert_line(substr($line,2))."\n"; } elsif($line =~ /^\*/){ return "!!!".$self->_convert_line(substr($line,1))."\n"; } elsif($line =~ /^----/){ return "----\n"; } elsif($line =~ /^---/){ return "***".$self->_convert_line(substr($line,3))."\n"; } elsif($line =~ /^--/){ return "**".$self->_convert_line(substr($line,2))."\n"; } elsif($line =~ /^-/){ return "*".$self->_convert_line(substr($line,1))."\n"; } elsif($line =~ /^>/){ return "\"\"".$self->_convert_line(substr($line,1))."\n"; } elsif($line =~ /^[ \t]/){ return $line."\n"; } else { return $self->_convert_line($line)."\n"; } } #============================================================================== # インライン書式をFSWikiの書式に変換します。 #============================================================================== sub convert_to_fswiki_line { my $self = shift; return $self->_convert_line(@_); } #============================================================================== # インライン書式をYukiWikiの書式に変換します。 #============================================================================== sub convert_from_fswiki_line { my $self = shift; return $self->_convert_line(@_); } #============================================================================== # 1行分のインライン書式を変換します。'''→''に、''→'''に変換にします。 #============================================================================== sub _convert_line { my $self = shift; my $line = shift; my $buf = ""; if($line =~ /(''')(.+?)(''')/){ my $pre = $`; my $post = $'; my $label = $2; if($pre ne ""){ $buf .= $self->_convert_line($pre); } $buf .= "''$label''"; if($post ne ""){ $buf .= $self->_convert_line($post); } } elsif($line =~ /('')(.+?)('')/){ my $pre = $`; my $post = $'; my $label = $2; if($pre ne ""){ $buf .= $self->_convert_line($pre); } $buf .= "'''$label'''"; if($post ne ""){ $buf .= $self->_convert_line($post); } } else { $buf .= $line; } return $buf; } #============================================================================== # FSWikiの書式から変換します。 #============================================================================== sub convert_from_fswiki_paragraph { my $self = shift; my $line = shift; if($line =~ /^!!!/){ return "*".$self->_convert_line(substr($line,3))."\n"; } elsif($line =~ /^!!/){ return "**".$self->_convert_line(substr($line,2))."\n"; } elsif($line =~ /^!/){ return "***".$self->_convert_line(substr($line,1))."\n"; } elsif($line eq "----"){ return "----\n"; } elsif($line =~ /^\*\*\*/){ return "---".$self->_convert_line(substr($line,3))."\n"; } elsif($line =~ /^\*\*/){ return "--".$self->_convert_line(substr($line,2))."\n"; } elsif($line =~ /^\*/){ return "-".$self->_convert_line(substr($line,1))."\n"; } elsif($line =~ /^""/){ return ">".$self->_convert_line(substr($line,2))."\n"; } elsif($line =~ /^[ \t]/){ return $line."\n"; } else { return $self->_convert_line($line)."\n"; } } 1;