diff --git a/KanjiVG.pm b/KanjiVG.pm new file mode 100644 index 000000000..aca445529 --- /dev/null +++ b/KanjiVG.pm @@ -0,0 +1,53 @@ +package KanjiVG; +use parent Exporter; +our @EXPORT_OK = qw/handle_element/; +use warnings; +use strict; +use Carp; + +my $dir = "$FindBin::Bin/kanjivg"; + +sub find_element +{ + my ($element) = @_; + if (! defined $element) { + croak "No element"; + } + my $string = qr/kanjivg:element="$element"/; + my @files = <$dir/*.svg>; + my @matches; + for my $file (@files) { + open my $in, "<:encoding(utf8)", $file + or die $!; + while (<$in>) { + if (/$string/) { + push @matches, $file; + # print "$file matches.\n"; + } + } + close $in or die $!; + } + return @matches; +} + +sub handle_element +{ + my ($element, $handle_start, $data) = @_; + my @matches = find_element ($element); + if (ref $data ne 'HASH') { + croak "Give me a hash ref"; + } + my $parser = XML::Parser->new ( + Handlers => { + Start => sub { &{$handle_start} ($element, $data, @_)}, + }, + ); + for my $file (@matches) { +# print "Parsing '$file'.\n"; + $data->{file} = $file; + $parser->parsefile ($file); + } +} + + +1; diff --git a/SVG/6726.svg b/SVG/6726.svg index f50c3139e..8c8079944 100644 --- a/SVG/6726.svg +++ b/SVG/6726.svg @@ -46,6 +46,10 @@ See http://creativecommons.org/licenses/by-sa/3.0/ for more details. --> 17 + + + + @@ -59,9 +63,5 @@ See http://creativecommons.org/licenses/by-sa/3.0/ for more details. --> - - - - diff --git a/find-ie.pl b/find-ie.pl new file mode 100755 index 000000000..a47d8fbc2 --- /dev/null +++ b/find-ie.pl @@ -0,0 +1,75 @@ +#!/home/ben/software/install/bin/perl +use warnings; +use strict; +use FindBin; +use XML::Parser; +use Image::SVG::Path 'extract_path_info'; +use utf8; +use KanjiVG qw/handle_element/; +binmode STDOUT, "utf8"; +my %data; +my $element = '豕'; + +my $start; +my $count; + +handle_element ($element, \& handle_start, \%data); + +sub handle_ie +{ + my ($data, $count, $attr) = @_; + my $d = $attr->{d}; + if ($count == 1 || $count == 2) { + my @values = extract_path_info ($d, { + no_shortcuts => 1, + absolute => 1, + }); + my @start = @{$values[0]->{point}}; + my @end = @{$values[-1]->{end}}; + my $x_diff = $end[0] - $start[0]; + my $y_diff = $end[1] - $start[1]; + $data->{"line$count"} = [$x_diff, $y_diff]; + my $f = $data->{file}; + $f =~ s!.*/!!; + if ($count == 1 && ($x_diff < 10 || $y_diff > 0)) { +# print "$f: $count: $x_diff $y_diff\n"; + } + elsif ($count == 2) { + print "$f: $count: $x_diff $y_diff\n"; + } + } + if ($count == 2) { +# print $data->{line1}->[0]->[0]; + } +} + +sub handle_start +{ + my ($kanjivg_element, $data, $parser, $xml_element, %attr) = @_; + if ($xml_element eq 'g') { + my $kvg = $attr{'kanjivg:element'}; + if ($kvg) { + if ($kvg eq $kanjivg_element) { + my $kp = $attr{"kanjivg:part"}; + if (defined $kp) { +# print "$kp\n"; + if ($kp == 2) { + return; + } + } +# print "Found '$kvg' in '$data->{file}'\n"; + $start = 1; + $count = 0; + } + } + else { + $start = undef; + $count = 0; + } + } + elsif ($start && $xml_element eq 'path') { + $count++; + handle_ie ($data, $count, \%attr); + } +} + diff --git a/find-radical.pl b/find-radical.pl index 734208252..5294f2595 100755 --- a/find-radical.pl +++ b/find-radical.pl @@ -5,72 +5,26 @@ use FindBin; use XML::Parser; use Image::SVG::Path 'extract_path_info'; use utf8; -my $string = qr/kanjivg:element="氵"/; -my @files = <$FindBin::Bin/kanjivg/*.svg>; -my @matches; -for my $file (@files) { - open my $in, "<:encoding(utf8)", $file - or die $!; - while (<$in>) { - if (/$string/) { - push @matches, $file; -# print "$file matches.\n"; - } - } - close $in or die $!; -} - -my $start; -my $count; - -my %global; - -my $parser = XML::Parser->new ( - Handlers => { - Start => \& handle_start - }, -); - +use KanjiVG qw/find_element/; binmode STDOUT, "utf8"; +my %data; +my $element = '氵'; -for my $file (@matches) { -# print "Parsing '$file'.\n"; - $global{file} = $file; - $parser->parsefile ($file); -} sub handle_start { - my ($parser, $element, %attr) = @_; - if ($element eq 'g') { - my $kvg = $attr{'kanjivg:element'}; - if ($kvg) { - if ($kvg eq '氵') { - #print "Found '$kvg' in '$global{file}'\n"; - $start = 1; - $count = 0; - } - } - else { - $start = undef; - $count = 0; - } - } - if ($start && $element eq 'path') { - $count++; - if ($count == 3) { - my $d = $attr{d}; - my @values = extract_path_info ($d, { - no_shortcuts => 1, - absolute => 1, - }); - my @start = @{$values[0]->{point}}; - my @end = @{$values[-1]->{end}}; - my $x_diff = $end[0] - $start[0]; - my $y_diff = $end[1] - $start[1]; - if ($x_diff < 0 || $y_diff > 0) { - printf ("file $global{file}: %d %d\n", $x_diff, $y_diff); - } - } + my ($data, $count, $d) = @_; + if ($count == 3) { + my @values = extract_path_info ($d, { + no_shortcuts => 1, + absolute => 1, + }); + my @start = @{$values[0]->{point}}; + my @end = @{$values[-1]->{end}}; + my $x_diff = $end[0] - $start[0]; + my $y_diff = $end[1] - $start[1]; +# if ($x_diff < 0 || $y_diff > 0) { + printf ("file $global{file}: %d %d\n", $x_diff, $y_diff); +# } } } diff --git a/find-sanzui.pl b/find-sanzui.pl new file mode 100755 index 000000000..c65484758 --- /dev/null +++ b/find-sanzui.pl @@ -0,0 +1,59 @@ +#!/home/ben/software/install/bin/perl +use warnings; +use strict; +use FindBin; +use XML::Parser; +use Image::SVG::Path 'extract_path_info'; +use utf8; +use KanjiVG qw/handle_element/; +binmode STDOUT, "utf8"; +my %data; +my $element = '氵'; + +my $start; +my $count; + +handle_element ($element, \& handle_start, \%data); + +sub handle_sanzui +{ + my ($data, $count, $attr) = @_; + if ($count == 3) { + my $d = $attr->{d}; + my @values = extract_path_info ($d, { + no_shortcuts => 1, + absolute => 1, + }); + my @start = @{$values[0]->{point}}; + my @end = @{$values[-1]->{end}}; + my $x_diff = $end[0] - $start[0]; + my $y_diff = $end[1] - $start[1]; +# if ($x_diff < 0 || $y_diff > 0) { + printf ("file $data->{file}: %d %d\n", $x_diff, $y_diff); +# } + } +} + +sub handle_start +{ + my ($kanjivg_element, $data, $parser, $xml_element, %attr) = @_; + if ($xml_element eq 'g') { + my $kvg = $attr{'kanjivg:element'}; + if ($kvg) { + if ($kvg eq $kanjivg_element) { +# print "Found '$kvg' in '$data->{file}'\n"; + $start = 1; + $count = 0; + } + } + else { + $start = undef; + $count = 0; + } + } + elsif ($start && $xml_element eq 'path') { + $count++; + handle_sanzui ($data, $count, \%attr); + } +} +