差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行はこのように表示します。
整形ルールをWikiのページで管理する
* [format rule definition]
[[FormatRules]] の記述例
-タグの定義
,''<b>強調文字</b>'' ,クォート[']2つで括る。
,'''<i>より強い強調</i>''' ,クォート[']3つで括る。
,''''<span class="hoge">hoge な文字列</span>'''' ,クォート[']4つで括る。
,""<span>汎用インライン要素</span>"" ,ダブルクォート["]2つで括る。
-任意属性値を使用する場合
,(blue),style,color:blue;
,(color:$1),style,color:$1;
,(size:$1),style,font-size:$1;
,(class:$1),class,$1
,(id:$1),id,$1
任意属性値を使った記述例
""(color:#000000)ほげほげ""
生成されるタグ <span style="color:#000000">
""ほげほげ(id:hoge)(size:20pt)""
生成されるタグ <span id="hoge" style="font-size:20pt">ほげほげ</span>
() は任意の位置に書くことができます。
** グローバル変数定義
my $FormatRules = 'FormatRules'; # yakty add [format rule definition]
my %format_rules; # yakty add [format rule definition]
my @format_attrs; # yakty add [format rule definition]
** %allow_format_tags 追加
許可するタグの指定
-2003-08-14 (Thu) 00:37:25 divを削除
# yakty add [format rule definition] start
my %allow_format_tags = (
a => 1,
b => 1,
i => 1,
em => 1,
del => 1,
ins => 1,
strong => 1,
q => 1,
code => 1,
span => 1,
kbd => 1,
samp => 1,
var => 1,
sup => 1,
sub => 1,
dfn => 1,
cite => 1,
tt => 1,
big => 1,
small => 1,
);
# yakty add [format rule definition] end
** %allow_format_attrs 追加
許可する属性の指定
# yakty add [format rule definition] start
my %allow_format_attrs = (
class => 1,
id => 1,
style => 1,
cite => 1,
);
# yakty add [format rule definition] end
** main()内の変更
sub main {
open(LOG, ">>${modifier_dir_data}/log.txt") if ($walrus_debugging >= 2); # Walrus add [for debug]
&init_resource;
&check_modifiers;
&open_db;
&init_form;
&init_InterWikiName;
&init_AntennaSite;
&init_FormatRules; # yakty add [format rule definition]
** init_FormatRules()追加
-2003-08-14 (Thu) 00:31:41 正規表現を修正
-2003-08-14 (Thu) 18:15:25 さらに正規表現を修正
# yakty add [format rule definition] start
sub init_FormatRules
{
if($database{$FormatRules}){
my $content = $database{$FormatRules};
my @txt = split(/\n/, $content);
foreach (@txt){
if(/^,\s*(([^a-zA-Z0-9\s])\2+)(<(\w+)([^<>]*)>)[^<>]*(<\/\4>)\1/){
my ($rule, $mark, $tag, $attr) = ($1, $2, lc($4), $5);
next if(not $allow_format_tags{$tag});
my $attrs;
foreach ($attr =~ m/\w+="[^"]+"/g){
/((\w+)="[^"]+")/;
next if(not $allow_format_attrs{lc($2)});
$attrs .= ' ' . $1;
}
$format_rules{$rule} = {
tag => $tag,
attr => $attrs,
mark => $mark,
};
} elsif(/^,\s*(\(.+?\))\s*,\s*(\w+)\s*,\s*([^,]+\S)/){
my ($rule, $name, $value) = ($1, lc($2), $3);
next if(not $allow_format_attrs{$name});
$rule =~ s/([()])/\\$1/g;
$rule =~ s/\$1/\(.+?\)/;
push(@format_attrs, {
rule => $rule,
name => $name,
value => $value,
});
}
}
} else {
# default
%format_rules = (
"''" => { tag => "b", mark => "'", },
"'''" => { tag => "i", mark => "'", },
);
;
}
}
# yakty add [format rule definition] end
** extract_attr()追加
# yakty add [format rule definition] start
sub extract_attr {
my ($textref) = @_;
my $attr;
my %attr;
foreach my $attrref (@format_attrs){
if($$textref =~ $attrref->{rule}){
my $val = $1;
my ($name, $value) = ($attrref->{name}, $attrref->{value});
$value =~ s/\$1/$val/;
$value = &escape($value);
$$textref =~ s/$attrref->{rule}//;
$attr{$name} .= $value;
#$attr .= qq( $name="$value");
}
}
foreach (keys %attr){
$attr .= qq( $_="$attr{$_}");
}
return $attr;
}
# yakty add [format rule definition] end
** format_text()追加
-2003-08-14 (Thu) 18:13:38 extract_attr()を使用するように変更
# yakty add [format rule definition] start
sub format_text {
my ($rule, $text) = @_;
my ($tag, $attr) = ($format_rules{$rule}{tag}, $format_rules{$rule}{attr});
# foreach my $attrref (@format_attrs){
# if($text =~ $attrref->{rule}){
# my $val = $1;
# my ($name, $value) = ($attrref->{name}, $attrref->{value});
# $value =~ s/\$1/$val/;
# $value = &escape($value);
# $text =~ s/$attrref->{rule}//;
# $attr .= qq( $name="$value");
# }
# }
$attr .= &extract_attr(\$text);
return qq(<$tag$attr>$text</$tag>);
}
# yakty add [format rule definition] end
** inline()内の変更
-2003-08-13 (Wed) 14:17:38 処理の順番を変更
sub inline {
my ($line) = @_;
$line = &escape($line);
# $line =~ s|'''([^']+?)'''|<i>$1</i>|g; # Italic # Walrus del [six single quotes]
# $line =~ s|''([^']+?)''|<b>$1</b>|g; # Bold # Walrus del [six single quotes]
# yakty add [format rule definition] start
foreach my $rule (sort {length($b) <=> length($a)} keys %format_rules){
my $rulestr = &escape($rule);
my $mark = &escape($format_rules{$rule}{mark});
$line =~ s|(?<!\Q$mark\E)\Q$rulestr\E(?!\Q$mark\E)(.+?)(?<!\Q$mark\E)\Q$rulestr\E(?!\Q$mark\E)|&format_text($rule, $1)|ge;
#$line =~ s|(?<!\Q$mark\E)\Q$rulestr\E(?!\Q$mark\E)(.+?)(?<!\Q$mark\E)\Q$rulestr\E(?!\Q$mark\E)|&format_text($rule, $1)|ge;
$line =~ s|\Q$rulestr\E(?!\Q$mark\E)(.+?)(?<!\Q$mark\E)\Q$rulestr\E|&format_text($rule, $1)|ge;
}
# yakty add [format rule definition] end
$line =~ s|(\d\d\d\d-\d\d-\d\d \(\w\w\w\) \d\d:\d\d:\d\d)|<span class="date">$1</span>|g; # Date
$line =~ s!
(
((mailto|http|https|ftp):([^\x00-\x20()<>\x7F-\xFF])*) # Direct http://...
|
($bracket_name) # [[likethis]], [[#comment]], [[Friend:remotelink]]
|
($interwiki_definition) # [[Friend http://somewhere/?q=sjis($1)]]
|
($wiki_name) # LocalLinkLikeThis
| # yakty add [auto link]
($auto_link_name) # yakty add [auto link]
)
(?\![^<]*>) # yakty add [format rule definition]
!
# &make_link($1) # Walrus del [link cache]
# (defined($link_cache{$1})) ? $link_cache{$1} : (length($_ = &make_link($1)) < 1024) ? ($link_cache{$1} = $_) : $_ # Walrus add [link cache] # yakty del [make cached link]
&make_cachedlink($1) # yakty add [make cached link]
!gex;
# Walrus add [six single quotes] start
$line =~ s|''''''||g; # six single quotes
# yakty del [format rule definition] start
# $line =~ s|'''(.+?)'''|<i>$1</i>|g; # Italic
# $line =~ s|''(.+?)''|<b>$1</b>|g; # Bold
# $line =~ s|```(.+?)```|<ins>$1</ins>|g; # Insert
# $line =~ s|``(.+?)``|<del>$1</del>|g; # Delete
# yakty del [format rule definition] end
# Walrus add [six single quotes] end
return $line;
}
** remove_modification()内の変更
# Walrus add [remove modification] start
sub remove_modification {
my ($text, $remove_block_simbol) = @_;
$text =~ s/^(\*+|-+|:)?\s*// if ($remove_block_simbol);
$text =~ s/\[\[(\S+)( \S+)?\]\]/$1/g;
# yakty del [format rule definition] start
#$text =~ s/''+//g;
#$text =~ s/``+//g;
# yakty del [format rule definition] end
# yakty add [format rule definition] start
foreach my $rule (sort {length($b) <=> length($a)} keys %format_rules){
$text =~ s/\Q$rule\E//g;
}
# yakty add [format rule definition] end
return $text;
}
# Walrus add [remove modification] end
** match_text()内の変更
foreach my $line (split(/\x0D\x0A|\x0D|\x0A/, $text)) {
unless ($line =~ s/^[ \t]//) {
#$line =~ s/'{2,}//g; # yakty del [format rule definition]
# yakty add [format rule definition] start
foreach my $rule (sort {length($b) <=> length($a)} keys %format_rules){
$line =~ s/\Q$rule\E//g;
}
# yakty add [format rule definition] end
push(@links, $2) while ($line =~ s/$interwiki_definition/$1/);
$line =~ s/$bracket_name/$1/g;
$line =~ s/^[:,\*-]+ *//;
$line =~ s/\s+/ /g;
}
push(@lines, $line." ");
}
04087