if( $c->req->method eq 'POST' ) {
if( $ok eq 'full' ) {
my $dot = $c->request->body_params->{'dot'};
+ # Graph::Reader::Dot does not handle bare unicode. We get around this
+ # by wrapping all words in double quotes, but then we have to undo it
+ # for the initial 'digraph stemma' statement. Horrible hack.
+ $dot =~ s/\b(\w+)\b/"$1"/g;
+ $dot =~ s/"(digraph|stemma)"/$1/g;
try {
if( $stemmaid eq 'n' ) {
# We are adding a new stemma.
$c->forward('View::JSON');
}
+=head2 download
+
+ GET /download/$textid
+
+Returns the full XML definition of the tradition and its stemmata, if any.
+
+=cut
+
+sub download :Local :Args(1) {
+ my( $self, $c, $textid ) = @_;
+ my $tradition = $c->model('Directory')->tradition( $textid );
+ unless( $tradition ) {
+ return _json_error( $c, 404, "No tradition with ID $textid" );
+ }
+ my $ok = _check_permission( $c, $tradition );
+ return unless $ok;
+ try {
+ $c->stash->{'result'} = $tradition->collation->as_graphml();
+ } catch( Text::Tradition::Error $e ) {
+ return _json_error( $c, 500, $e->message );
+ }
+ $c->forward('View::GraphML');
+}
+
####################
### Helper functions
####################