X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FText%2FTradition%2FCollation%2FReading%2FWordForm.pm;h=968f205fae8205692c5db68a43b9e30c1026a210;hb=896fe649a80575aaa06d3484c09579a2cb34ba8a;hp=ebfa445ab80a3a288824df9ba490c4dca5a72a0f;hpb=75ae2b25a9925f075714d1471b211db3c30ffb10;p=scpubgit%2Fstemmatology.git diff --git a/lib/Text/Tradition/Collation/Reading/WordForm.pm b/lib/Text/Tradition/Collation/Reading/WordForm.pm index ebfa445..968f205 100644 --- a/lib/Text/Tradition/Collation/Reading/WordForm.pm +++ b/lib/Text/Tradition/Collation/Reading/WordForm.pm @@ -3,6 +3,8 @@ package Text::Tradition::Collation::Reading::WordForm; use Lingua::Features::Structure; use JSON (); use Moose; +use Text::Tradition::Error; +use TryCatch; =head1 NAME @@ -44,22 +46,15 @@ has 'language' => ( required => 1, ); -# TODO do we need this? -has 'form' => ( - is => 'ro', - isa => 'Str', - # required => 1, - ); - has 'lemma' => ( is => 'ro', isa => 'Str', required => 1, ); -has 'morphology' => ( +has 'morphstr' => ( is => 'ro', - isa => 'Lingua::Features::Structure', + isa => 'Str', required => 1, ); @@ -70,12 +65,34 @@ around BUILDARGS => sub { if( exists $args->{'JSON'} ) { my @data = split( / \/\/ /, $args->{'JSON'} ); # print STDERR "Attempting to parse " . $data[2] . " into structure"; - my $morph = Lingua::Features::Structure->from_string( $data[2] ); $args = { 'language' => $data[0], 'lemma' => $data[1], - 'morphology' => $morph }; + 'morphstr' => $data[2] }; + } elsif( exists $args->{'morphology'} ) { + # Backwards compat + my $mobj = delete $args->{'morphology'}; + $args->{'morphstr'} = $mobj->to_string() + if ref $mobj; } $class->$orig( $args ); }; + +=head2 morphology + +Returns a Lingua::Features::Structure object that corresponds to morphstr. + +=cut + +sub morphology { + my $self = shift; + return unless $self->morphstr; + my $struct; + try { + $struct = Lingua::Features::Structure->from_string( $self->morphstr ); + } catch { + throw( "Morphology string " . $self->morphstr . " does not parse" ); + } + return $struct; +} =head2 to_string @@ -94,9 +111,16 @@ sub to_string { sub TO_JSON { my $self = shift; return sprintf( "%s // %s // %s", $self->language, $self->lemma, - $self->morphology->to_string() ); + $self->morphstr ); } +sub throw { + Text::Tradition::Error->throw( + 'ident' => 'Wordform error', + 'message' => $_[0], + ); +} + no Moose; __PACKAGE__->meta->make_immutable;