my @witnesses; # Keep the ordered list of our witnesses
my %ac_wits; # Track these for later removal
foreach my $sigil ( map { $_->{'witness'} } @{$table->{'alignment'}} ) {
- my $wit = $tradition->add_witness( 'sigil' => $sigil );
+ my $wit = $tradition->add_witness(
+ 'sigil' => $sigil, 'sourcetype' => 'collation' );
$wit->path( [ $c->start ] );
push( @witnesses, $wit );
my $aclabel = $c->ac_label;
foreach my $rdg ( grep { $_->is_lacuna } $c->readings ) {
$c->del_reading( $rdg ) unless $c->reading_witnesses( $rdg );
}
+
+ # Note that our ranks and common readings are set.
+ $c->_graphcalc_done(1);
}
=head2 make_nodes( $collation, $index, @tokenlist )
my( $c, $idx, @tokens ) = @_;
my %unique;
my @readings;
+ my $commonctr = 0;
foreach my $j ( 0 .. $#tokens ) {
if( $tokens[$j] ) {
my $word = _restore_punct( $tokens[$j] );
if( exists( $unique{$word} ) ) {
$rdg = $unique{$word};
} else {
- my %args = ( 'id' => join( ',', $idx, $j+1 ),
+ my %args = ( 'id' => 'r' . join( '.', $idx, $j+1 ),
+ 'rank' => $idx,
'text' => $word,
'collation' => $c );
- $args{'is_lacuna'} = 1 if $word eq '#LACUNA#';
+ if( $word eq '#LACUNA#' ) {
+ $args{'is_lacuna'} = 1
+ } else {
+ $commonctr++;
+ }
$rdg = Text::Tradition::Collation::Reading->new( %args );
$unique{$word} = $rdg;
}
push( @readings, $rdg );
} else {
+ $commonctr++;
push( @readings, undef );
}
}
+ if( $commonctr == 1 ) {
+ # Whichever reading isn't a lacuna is a common node.
+ foreach my $rdg ( values %unique ) {
+ next if $rdg->is_lacuna;
+ $rdg->is_common( 1 );
+ }
+ }
map { $c->add_reading( $_ ) } values( %unique );
return @readings;
}