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=9d27181f84f194dc8eae7279a538612be7bbe7e8;hpb=a7f4020a1a1fd72aba6e25dc0a8f8aa9a1891202;p=scpubgit%2Fstemmatology.git diff --git a/lib/Text/Tradition/Collation/Reading/WordForm.pm b/lib/Text/Tradition/Collation/Reading/WordForm.pm index 9d27181..968f205 100644 --- a/lib/Text/Tradition/Collation/Reading/WordForm.pm +++ b/lib/Text/Tradition/Collation/Reading/WordForm.pm @@ -46,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, ); @@ -72,17 +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; - try { - $morph = Lingua::Features::Structure->from_string( $data[2] ); - } catch { - throw("Could not parse string " . $data[2] . " into morphological structure"); - } $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 @@ -101,7 +111,7 @@ 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 {