CollateX format for GraphML output changed; parser update
[scpubgit/stemmatology.git] / lib / Text / Tradition / Collation.pm
index 7176134..68b2adf 100644 (file)
@@ -338,15 +338,15 @@ $c->flatten_ranks();
 ok( $c->reading( 'n21p0' ), "New reading exists" );
 is( scalar $c->readings, $rno, "Reading add offset by flatten_ranks" );
 
-# Combine n3 and n4
+# Combine n3 and n4 ( with his )
 $c->merge_readings( 'n3', 'n4', 1 );
 ok( !$c->reading('n4'), "Reading n4 is gone" );
 is( $c->reading('n3')->text, 'with his', "Reading n3 has both words" );
 
-# Collapse n25 and n26
-$c->merge_readings( 'n25', 'n26' );
-ok( !$c->reading('n26'), "Reading n26 is gone" );
-is( $c->reading('n25')->text, 'rood', "Reading n25 has an unchanged word" );
+# Collapse n9 and n10 ( rood / root )
+$c->merge_readings( 'n9', 'n10' );
+ok( !$c->reading('n10'), "Reading n10 is gone" );
+is( $c->reading('n9')->text, 'rood', "Reading n9 has an unchanged word" );
 
 # Combine n21 and n21p0
 my $remaining = $c->reading('n21');
@@ -594,6 +594,7 @@ sub as_dot {
     my $color_common = $opts->{'color_common'} if $opts;
     my $STRAIGHTENHACK = !$startrank && !$endrank && $self->end->rank 
        && $self->end->rank > 100;
+    $STRAIGHTENHACK = 1 if $opts->{'straight'}; # even for subgraphs or small graphs
 
     # Check the arguments
     if( $startrank ) {
@@ -638,7 +639,8 @@ sub as_dot {
        }
        if( $STRAIGHTENHACK ) {
                ## HACK part 1
-               $dot .= "\tsubgraph { rank=same \"#START#\" \"#SILENT#\" }\n";  
+               my $startlabel = $startrank ? 'SUBSTART' : 'START';
+               $dot .= "\tsubgraph { rank=same \"#$startlabel#\" \"#SILENT#\" }\n";  
                $dot .= "\t\"#SILENT#\" [ shape=diamond,color=white,penwidth=0,label=\"\" ];"
        }
        my %used;  # Keep track of the readings that actually appear in the graph
@@ -719,7 +721,8 @@ sub as_dot {
        }
        # HACK part 2
        if( $STRAIGHTENHACK ) {
-               $dot .= "\t\"#END#\" -> \"#SILENT#\" [ color=white,penwidth=0 ];\n";
+               my $endlabel = $endrank ? 'SUBEND' : 'END';
+               $dot .= "\t\"#$endlabel#\" -> \"#SILENT#\" [ color=white,penwidth=0 ];\n";
        }       
 
     $dot .= "}\n";
@@ -1404,7 +1407,7 @@ ok( $c->has_cached_table, "Alignment table was cached" );
 is( $c->alignment_table, $table, "Cached table returned upon second call" );
 $c->calculate_ranks;
 is( $c->alignment_table, $table, "Cached table retained with no rank change" );
-$c->add_relationship( 'n9', 'n23', { 'type' => 'spelling' } );
+$c->add_relationship( 'n24', 'n23', { 'type' => 'spelling' } );
 isnt( $c->alignment_table, $table, "Alignment table changed after relationship add" );
 
 =end testing
@@ -1582,7 +1585,7 @@ my @common = $c->calculate_common_readings();
 is( scalar @common, 8, "Found correct number of common readings" );
 my @marked = sort $c->common_readings();
 is( scalar @common, 8, "All common readings got marked as such" );
-my @expected = qw/ n1 n12 n16 n19 n20 n5 n6 n7 /;
+my @expected = qw/ n1 n11 n16 n19 n20 n5 n6 n7 /;
 is_deeply( \@marked, \@expected, "Found correct list of common readings" );
 
 =end testing
@@ -1627,14 +1630,22 @@ original texts.
 sub text_from_paths {
        my $self = shift;
     foreach my $wit ( $self->tradition->witnesses ) {
-       my @text = split( /\s+/, 
-               $self->reading_sequence( $self->start, $self->end, $wit->sigil ) );
+       my @readings = $self->reading_sequence( $self->start, $self->end, $wit->sigil );
+       my @text;
+       foreach my $r ( @readings ) {
+               next if $r->is_meta;
+               push( @text, $r->text );
+       }
        $wit->text( \@text );
        if( $wit->is_layered ) {
-                       my @uctext = split( /\s+/, 
-                               $self->reading_sequence( $self->start, $self->end, 
-                                       $wit->sigil.$self->ac_label ) );
-                       $wit->text( \@uctext );
+                       my @ucrdgs = $self->reading_sequence( $self->start, $self->end, 
+                                                                                                 $wit->sigil.$self->ac_label );
+                       my @uctext;
+                       foreach my $r ( @ucrdgs ) {
+                               next if $r->is_meta;
+                               push( @uctext, $r->text );
+                       }
+                       $wit->layertext( \@uctext );
        }
     }    
 }
@@ -1661,14 +1672,14 @@ my $t = Text::Tradition->new(
     );
 my $c = $t->collation;
 
-is( $c->common_predecessor( 'n9', 'n23' )->id, 
+is( $c->common_predecessor( 'n24', 'n23' )->id, 
     'n20', "Found correct common predecessor" );
-is( $c->common_successor( 'n9', 'n23' )->id, 
+is( $c->common_successor( 'n24', 'n23' )->id, 
     '#END#', "Found correct common successor" );
 
 is( $c->common_predecessor( 'n19', 'n17' )->id, 
     'n16', "Found correct common predecessor for readings on same path" );
-is( $c->common_successor( 'n21', 'n26' )->id, 
+is( $c->common_successor( 'n21', 'n10' )->id, 
     '#END#', "Found correct common successor for readings on same path" );
 
 =end testing