fix: add utf8::decode for perl 5.8.
[chise/perl.git] / Chise_utils / scripts / sample.pl
1 #!/usr/bin/perl -w -CSD
2
3 use Getopt::Long;  
4 use strict;
5 use vars qw($atr $value $char
6             $opt_map $opt_rev_map $opt_mapfrom $opt_mapto
7             $opt_atr $opt_allatr $opt_showatr
8             $opt_query
9             $opt_help
10             );
11 use Chise_utils ':all';
12 require 5.008001;
13
14 my $usage=<<EOF;
15 Usage: perl $0 [-m <map> | --map <map> |
16                 -r <reverse map> |
17                 --mapfrom <map> |
18                 --mapto <map> |
19                 -q <expression> |
20                 --show-attribute |
21                 -h | --help |
22                 -a=<atribuite> <char> |
23                 -aa <char>]
24     -q  <expression>
25       ex. of <expression>
26          total-strokes==8 means
27            the attribute of total-strokes exactly matches to 8.
28          ids-parts=~矢 means
29             the attribute of ids-parts contains the string 矢.
30          total-strokes==8,ids-parts=~矢 means both at the same time.
31     -a  get <attribute> of <char>
32     -aa get all attributes of <char>
33 EOF
34
35 &GetOptions("mapto=s"=>\$opt_mapto,
36             "mapfrom=s"=>\$opt_mapfrom,
37             "m=s"=>\$opt_map,
38             "r=s"=>\$opt_rev_map,
39             "a=s"=>\$opt_atr,
40             "aa"=>\$opt_allatr,
41             "show-attribute"=>\$opt_showatr,
42             "q"=>\$opt_query,
43             "help",\$opt_help,
44             "h",\$opt_help);
45
46 if($opt_help
47    or !((($opt_map or $opt_rev_map or $opt_mapfrom or $opt_mapto) and @ARGV==0)
48         or($opt_showatr and @ARGV==0)
49         or @ARGV==1
50         )
51    ){
52     print $usage;
53     exit 1;
54 }else{
55     $char=shift or $char="";
56     $char=&de_er($char);
57     utf8::decode($char);
58 }
59
60 if($opt_mapfrom){
61     $opt_map="<=".$opt_mapfrom;
62 }elsif($opt_mapto){
63     $opt_map="=>".$opt_mapto;
64 }
65
66 if($opt_map){
67     if(&get_db($opt_map)){
68         foreach $char (sort keys %{$chardb{$opt_map}}){
69             utf8::decode($char);
70             if($chardb{$opt_map}->{$char}){
71                 print $char,"\t",$chardb{$opt_map}->{$char},"\n";
72             }
73         }
74     }else{
75         print STDERR "No map for $opt_map.\n";
76     }
77 }elsif($opt_rev_map){
78     if(&get_reverse_db($opt_rev_map)){
79         foreach $char (sort keys %{$reverse_chardb{$opt_rev_map}}){
80             utf8::decode($char);
81             if($reverse_chardb{$opt_rev_map}->{$char}){
82                 print $char,"\t",$reverse_chardb{$opt_rev_map}->{$char},"\n";
83             }
84         }
85     }else{
86         print STDERR "No map for $opt_rev_map.\n";
87     }
88 }elsif($opt_allatr){
89     print $char,"\n";
90     foreach $atr (sort keys %db){
91         if($value=&get_char_attribute($char,$atr)){
92             print "  ",$atr,":",$value,"\n";
93         }
94     }
95 }elsif($opt_atr){
96     print $char,"\n";
97     print "  ",$opt_atr,":",&get_char_attribute($char,$opt_atr),"\n";
98 }elsif($opt_showatr){
99 #    print "In DB\n";
100     foreach $atr (sort keys %db){
101         print "  ",$atr,"\n";
102     }
103 #    print "In reverse DB\n";
104 #    foreach $atr (sort keys %reverse_db){
105 #       print "  ",$atr,"\n";
106 #    }
107 }elsif($opt_query){
108     my $query=$char;
109     print join "\n",&get_chars_for($query),"\n";
110 }
111
112 exit 0;