diff --git a/README.pod b/README.pod index 87a2eca..849142f 100644 --- a/README.pod +++ b/README.pod @@ -6,8 +6,9 @@ ud - TrEd extension to display and edit Universal Dependencies =head1 DESCRIPTION -Use mouse to change the tree structure. Drop a node with Ctrl to add -or remove an enhanced dependency. +Use mouse to change the tree structure. Drop a node with C to add or +remove an enhanced dependency. Press C to edit the current node's +C. =head1 INSTALLATION diff --git a/ud/contrib/ud/contrib.mac b/ud/contrib/ud/contrib.mac index e94c5ab..69dfebc 100644 --- a/ud/contrib/ud/contrib.mac +++ b/ud/contrib/ud/contrib.mac @@ -2,6 +2,8 @@ #ifndef ud #define ud #binding-context UD +# bind edit_this_deprel to d menu Edit DepRel + #include "ud.inc" #endif ud diff --git a/ud/contrib/ud/ud.inc b/ud/contrib/ud/ud.inc index d5bf0a5..09b96a6 100644 --- a/ud/contrib/ud/ud.inc +++ b/ud/contrib/ud/ud.inc @@ -72,6 +72,17 @@ } + sub do_edit_attr_hook { + my ($attr, $node) = @_; + return unless 'deprel' eq $attr; + edit_deprel($node); + } + + sub edit_this_deprel { + edit_deprel($this); + } + + { my @deprels = qw( acl advcl advmod amod appos aux case cc ccomp clf compound conj cop csubj dep det discourse dislocated expl fixed flat @@ -79,20 +90,28 @@ obj obl orphan parataxis punct reparandum root vocative xcomp ); - sub do_edit_attr_hook { - my ($attr, $node) = @_; - return unless 'deprel' eq $attr; + sub edit_deprel { + my ($node) = @_; my $dialog = $grp->toplevel->DialogBox( -title => 'Deprel', -buttons => ['OK', 'Cancel']); my $list = $dialog->add( BrowseEntry => -label => 'deprel', - -variable => \(my $choice = $node->{deprel}))->pack; + -variable => \(my $choice = $node->{deprel}) + )->pack; $list->insert(end => $_) for @deprels; my $reply = $dialog->Show; if ('OK' eq $reply) { + my $old_deprel = $node->{deprel}; $node->{deprel} = $choice; + $node->{deps} = List(map { + ($_->content == $node->parent->{ord} + && $_->{func} eq $old_deprel) + ? _create_container($_->content, $choice) + : $_ + } ListV($node->{deps})); + ChangingFile(1); Redraw(); } return 'stop' @@ -118,14 +137,13 @@ ChangingFile(1); AddToList($node, 'deps', - 'Treex::PML::StandardFactory'->createContainer( - $target->{ord}, {func => $func})); + _create_container($target->{ord}, $func)); } } else { return if $target == $parent; - my @deps = ('Treex::PML::StandardFactory'->createContainer( - $target->{ord}, {func => $node->{deprel}}), + my @deps = (_create_container( + $target->{ord}, $node->{deprel}), grep $_->{func} ne $node->{deprel} && $_->content != $parent->{ord}, ListV($node->{deps})); @@ -153,4 +171,11 @@ ); } } + + + sub _create_container { + my ($ord, $func) = @_; + return 'Treex::PML::StandardFactory'->createContainer( + $ord, {func => $func}) + } }