[ 新規 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

WalWiki/カスタマイズ/整形ルールの定義

差分表示


編集前の状態に戻します。
整形ルールを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