Tween.exe.configからcrochetの設定ファイルを生成
id:showyou がこんなことを言っていたので作ってみた。
PerlerなのでPerlでキモく実装。バグがあったらごめんなさい。
使い方
$ perl tween2crochet.pl Tween.exe.config crochet.config
だけです。第一引数はTweenの設定ファイル(中身はXML)、第二引数はcrochetの設定ファイル(新規作成/存在する場合は上書き)です。
注意事項
- ソースコード・入力ファイル(Tween.exe.config)の文字コードに注意してください。日本語を含む場合必ずUTF-8で保存する必要があります。
- 出力も今のところUTF-8で出力しています。crochetの文字コードを確認しなかったので突発的にやったわけですが、違ったらOutputのところで使っているEncode::encode()の第一引数をsjisとかeuc-jpとかに変えればいいです。
ソースは追記に。
- 修正履歴
- jsonの仕様に合わせて最初と最後にそれぞれ'{','}'を追加(2008/10/14)
ソースコード tween2crochet.pl
#!/usr/bin/perl -w use strict; use warnings; use utf8; use Encode; use FileHandle; use XML::Parser; # Check Arguments if ($#ARGV != 1) { # Require 2 arguments &usage(); exit(1); } # Open files my $fh_o = new FileHandle; $fh_o->open("> $ARGV[1]"); &file_check($fh_o, $ARGV[1]); # Parse input file my $p = new XML::Parser(Style => 'Objects'); my $t = $p->parsefile($ARGV[0]); undef $p; my $c; # context # Configuration foreach my $e (@$t) { $c = $e->{Kids} if (ref($e) =~ m/::configuration/); } # Configuration->TwitterSetting foreach my $e (@$c) { $c = $e->{Kids} if (ref($e) =~ m/::TwitterSetting/); } # Configuration->TwitterSetting->listelement # Configuration->TwitterSetting->selecteduser my ($listelement, $selecteduser); foreach my $e (@$c) { $listelement = $e->{Kids} if (ref($e) =~ m/::listelement/); $selecteduser = $e->{Kids} if (ref($e) =~ m/::selecteduser/); } undef $c; # Make List of Tab Names my @tabName = (); my @ignore_tab_list = qw(Recent Reply Direct); # tab listed here will be ignored foreach my $e (grep ref($_) =~ /::add/, @$listelement) { # push @tabName, $e->{name} where not name is in @ignore_tab_list. push @tabName, $e->{name} if !(grep $_ eq $e->{name}, @ignore_tab_list); } # DEBUG # foreach my $tab (@tabName) { # print Encode::encode("utf8", $tab), $/; # } # Make List of Tab filtering rules my @tabFilter = (); # Array of Hash my @tabRuleEntry = (qw(tabname idfilter bodyfilter), qw(moveFrom searchboth regexenable urlsearch)); foreach my $e (grep ref($_) =~ /::add/, @$selecteduser) { my %h = (); map { $h{$_} = $e->{$_} } @tabRuleEntry; push @tabFilter, \%h; } # DEBUG # foreach my $r (@tabFilter) { # foreach my $entry (@tabRuleEntry) { # print $entry , " ", Encode::encode("utf8", $r->{$entry}), $/; # } # } print "Parse END", $/; ##### Output ##### # Tab Name $fh_o->print(q|{|, $/, q|"tabName":|, $/); $fh_o->print(' ' x 4 ,q|[|); $fh_o->print(Encode::encode("utf8", join q|,|, grep {s/^/"/; s/$/"/} @tabName)); $fh_o->print(q|]|, $/, q|,|, $/); # Tab Filter $fh_o->print(q|"tabFilter":[|, $/); $fh_o->print((join q|,| . $/, map { $_->{bodyfilter} =~ s/^ //; Encode::encode("utf8", ' ' x 4 . qq|["$_->{tabname}","$_->{idfilter}",| . qq|"$_->{bodyfilter}",| . qq|$_->{moveFrom},$_->{searchboth},| . qq|$_->{regexenable},$_->{urlsearch}]| ); } (@tabFilter)), $/); $fh_o->print(q|]|, $/, q|}|, $/); print "Convert END", $/; ########## Subroutines ########## sub file_check ($$) { my ($fh_o, $out_filename) = @_; if (!defined $fh_o) { if (! -e $out_filename) { print "File $out_filename not exists!\n"; exit(8); } if (! -w $out_filename) { print "You don't have permission to access $out_filename\n"; exit(8); } print "IO Error in Reading File\n"; exit(8); } } sub usage { print << "EOD"; Usage : $0 TWEEN_CONFIG(IN) CROCHET_CONFIG(OUT) EOD } __END__ =head1 NAME tween2crochet.pl - Converter setting file of Tween 'Tween.exe.config' to that of crochet =head1 Usage ./tween2crochet.pl B<TWEEN_CONFIG(IN)> B<CROCHET_CONFIG(OUT)> IN File must be encoded with UTF-8 OUT FILE will be encoded with UTF-8 =cut