default => 1,
);
-has 'collapse_punctuation' => (
- is => 'rw',
- isa => 'Bool',
- default => 1,
- );
-
has 'ac_label' => (
is => 'rw',
isa => 'Str',
transposed readings should be treated as two linked readings rather than one,
and therefore whether the collation graph is acyclic. Defaults to true.
-=item * collapse_punctuation - TODO
-
=item * baselabel - The default label for the path taken by a base text
(if any). Defaults to 'base text'.
=head2 linear
-=head2 collapse_punctuation
-
=head2 wit_list_separator
=head2 baselabel
$used{$reading->id} = 1;
# Need not output nodes without separate labels
next if $reading->id eq $reading->text;
- my $label = $reading->punctuated_form;
+ my $label = $reading->text;
$label =~ s/\"/\\\"/g;
$dot .= sprintf( "\t\"%s\" [ label=\"%s\" ];\n", $reading->id, $label );
}
my $label = $self->path_display_label( $self->path_witnesses( $edge ) );
my $variables = { %edge_attrs, 'label' => $label };
# Account for the rank gap if necessary
- my $rankgap = $self->reading( $edge->[1] )->rank
+ if( $self->reading( $edge->[1] )->has_rank
+ && $self->reading( $edge->[0] )->has_rank
+ && $self->reading( $edge->[1] )->rank
+ - $self->reading( $edge->[0] )->rank > 1 ) {
+ $variables->{'minlen'} = $self->reading( $edge->[1] )->rank
- $self->reading( $edge->[0] )->rank;
- $variables->{'minlen'} = $rankgap if $rankgap > 1;
+ }
my $varopts = _dot_attr_string( $variables );
$dot .= sprintf( "\t\"%s\" -> \"%s\" %s;\n",
$edge->[0], $edge->[1], $varopts );
$node_el->setAttribute( 'id', $node_xmlid );
foreach my $d ( keys %node_data ) {
my $nval = $n->$d;
- $nval = $n->punctuated_form if $d eq 'text';
_add_graphml_data( $node_el, $node_data_keys{$d}, $nval )
if defined $nval;
}
=cut
# TODO Think about returning some lazy-eval iterator.
+# TODO Get rid of backup; we should know from what witness is whether we need it.
sub reading_sequence {
my( $self, $start, $end, $witness, $backup ) = @_;
my $regex = $self->wit_list_separator;
my @answer = split( /\Q$regex\E/, $label );
return @answer;
-}
+}
+=head2 path_text( $sigil, $mainsigil [, $start, $end ] )
+
+Returns the text of a witness (plus its backup, if we are using a layer)
+as stored in the collation. The text is returned as a string, where the
+individual readings are joined with spaces and the meta-readings (e.g.
+lacunae) are omitted. Optional specification of $start and $end allows
+the generation of a subset of the witness text.
+
+=cut
+
+sub path_text {
+ my( $self, $wit, $backup, $start, $end ) = @_;
+ $start = $self->start unless $start;
+ $end = $self->end unless $end;
+ my @path = grep { !$_->is_meta } $self->reading_sequence( $start, $end, $wit, $backup );
+ return join( ' ', map { $_->text } @path );
+}
=head1 INITIALIZATION METHODS