mirror of
https://github.com/KanjiVG/kanjivg.git
synced 2026-01-26 16:13:13 +01:00
55 lines
1.1 KiB
Perl
55 lines
1.1 KiB
Perl
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;
|