--- test/html-webhacc/WebHACC/Output.pm 2008/07/20 16:53:10 1.2
+++ test/html-webhacc/WebHACC/Output.pm 2008/07/21 05:24:32 1.3
@@ -1,6 +1,8 @@
package WebHACC::Output;
use strict;
+
require IO::Handle;
+use Scalar::Util qw/refaddr/;
my $htescape = sub ($) {
my $s = $_[0];
@@ -113,10 +115,26 @@
shift->html ('');
} # end_code_block
-sub code ($$) {
- shift->html ('' . $htescape->(shift) . '
');
+sub code ($$;%) {
+ my ($self, $content, %opt) = @_;
+ $self->start_tag ('code', %opt);
+ $self->text ($content);
+ $self->html ('');
} # code
+sub script ($$;%) {
+ my ($self, $content, %opt) = @_;
+ $self->start_tag ('script', %opt);
+ $self->html ($content);
+ $self->html ('');
+} # script
+
+sub dt ($$;%) {
+ my ($self, $content, %opt) = @_;
+ $self->start_tag ('dt', %opt);
+ $self->text ($content);
+} # dt
+
sub link ($$%) {
my ($self, $content, %opt) = @_;
$self->start_tag ('a', %opt, href => $opt{url});
@@ -137,11 +155,44 @@
$self->link ($content, %opt);
} # link_to_webhacc
+
+my $get_node_path = sub ($) {
+ my $node = shift;
+ my @r;
+ while (defined $node) {
+ my $rs;
+ if ($node->node_type == 1) {
+ $rs = $node->node_name;
+ $node = $node->parent_node;
+ } elsif ($node->node_type == 2) {
+ $rs = '@' . $node->node_name;
+ $node = $node->owner_element;
+ } elsif ($node->node_type == 3) {
+ $rs = '"' . $node->data . '"';
+ $node = $node->parent_node;
+ } elsif ($node->node_type == 9) {
+ @r = ('') unless @r;
+ $rs = '';
+ $node = $node->parent_node;
+ } else {
+ $rs = '#' . $node->node_type;
+ $node = $node->parent_node;
+ }
+ unshift @r, $rs;
+ }
+ return join '/', @r;
+}; # $get_node_path
+
+sub node_link ($$) {
+ my ($self, $node) = @_;
+ $self->xref ($get_node_path->($node), target => 'node-' . refaddr $node);
+} # node_link
+
sub nav_list ($) {
my $self = shift;
$self->html (q[