--- test/html-webhacc/WebHACC/Output.pm 2008/07/21 09:54:59 1.6
+++ test/html-webhacc/WebHACC/Output.pm 2008/07/21 12:56:34 1.7
@@ -95,7 +95,8 @@
if (defined $opt{role}) {
if ($opt{role} eq 'parse-errors') {
$opt{id} ||= 'parse-errors';
- $opt{title} ||= 'Parse Errors';
+ $opt{title} ||= 'Parse Errors Section';
+ $opt{short_title} ||= 'Parse Errors';
delete $opt{role};
} elsif ($opt{role} eq 'structure-errors') {
$opt{id} ||= 'document-errors';
@@ -125,14 +126,15 @@
if (defined $opt{id}) {
my $id = $self->input->id_prefix . $opt{id};
$self->html (' id="' . $htescape->($id) . '"');
- push @{$self->{nav}}, [$id => $opt{short_title} || $opt{title}]
+ push @{$self->{nav}},
+ [$id => $opt{short_title} || $opt{title} => $opt{text}]
if $self->{section_rank} == 2;
}
my $section_rank = $self->{section_rank};
$section_rank = 6 if $section_rank > 6;
- $self->html ('>' .
- $htescape->($opt{title}) .
- '');
+ $self->html ('>');
+ $self->nl_text ($opt{title}, text => $opt{text});
+ $self->html ('');
} # start_section
sub end_section ($) {
@@ -213,7 +215,7 @@
sub dt ($$;%) {
my ($self, $content, %opt) = @_;
$self->start_tag ('dt', %opt);
- $self->text ($content);
+ $self->nl_text ($content, text => $opt{text});
} # dt
sub link ($$%) {
@@ -226,7 +228,7 @@
sub xref ($$%) {
my ($self, $content, %opt) = @_;
$self->html ('');
- $self->text ($content);
+ $self->nl_text ($content, text => $opt{text});
$self->html ('');
} # xref
@@ -236,7 +238,6 @@
$self->link ($content, %opt);
} # link_to_webhacc
-
my $get_node_path = sub ($) {
my $node = shift;
my @r;
@@ -269,11 +270,78 @@
$self->xref ($get_node_path->($node), target => 'node-' . refaddr $node);
} # node_link
+{
+ my $Msg = {};
+
+sub load_text_catalog ($$) {
+ my $self = shift;
+
+ my $lang = shift; # MUST be a canonical lang name
+ my $file_name = qq[cc-msg.$lang.txt];
+ $lang = 'en' unless -f $file_name;
+ $self->{primary_language} = $lang;
+
+ open my $file, '<:utf8', $file_name or die "$0: $file_name: $!";
+ while (<$file>) {
+ if (s/^([^;]+);([^;]*);//) {
+ my ($type, $cls, $msg) = ($1, $2, $_);
+ $msg =~ tr/\x0D\x0A//d;
+ $Msg->{$type} = [$cls, $msg];
+ }
+ }
+} # load_text_catalog
+
+sub nl_text ($$;%) {
+ my ($self, $type, %opt) = @_;
+ my $node = $opt{node};
+
+ my @arg;
+ {
+ if (defined $Msg->{$type}) {
+ my $msg = $Msg->{$type}->[1];
+ if ($msg =~ //) {
+ $msg =~ s{\$([0-9]+)}{
+ defined $arg[$1] ? $htescape->($arg[$1]) : '(undef)';
+ }ge;
+ $msg =~ s{{\@([A-Za-z0-9:_.-]+)}}{
+ UNIVERSAL::can ($node, 'get_attribute_ns')
+ ? $htescape->($node->get_attribute_ns (undef, $1)) : ''
+ }ge;
+ $msg =~ s{{\@}}{
+ UNIVERSAL::can ($node, 'value') ? $htescape->($node->value) : ''
+ }ge;
+ $msg =~ s{{text}}{
+ defined $opt{text} ? $htescape->($opt{text}) : ''
+ }ge;
+ $msg =~ s{{local-name}}{
+ UNIVERSAL::can ($node, 'manakai_local_name')
+ ? $htescape->($node->manakai_local_name) : ''
+ }ge;
+ $msg =~ s{{element-local-name}}{
+ (UNIVERSAL::can ($node, 'owner_element') and
+ $node->owner_element)
+ ? $htescape->($node->owner_element->manakai_local_name) : ''
+ }ge;
+ }
+ $self->html ($msg);
+ return;
+ } elsif ($type =~ s/:([^:]*)$//) {
+ unshift @arg, $1;
+ redo;
+ }
+ }
+ $self->text ($type);
+} # nl_text
+
+}
+
sub nav_list ($) {
my $self = shift;
$self->html (q[');
} # nav_list
@@ -293,15 +361,17 @@
sub html_header ($) {
my $self = shift;
- $self->html (q[
-
-
-WebHACC (BETA) Result
+ $self->html (q[]);
+ $self->start_tag ('html', lang => $self->{primary_language});
+ $self->html (q[]);
+ $self->nl_text (q[WebHACC:Title]);
+ $self->html (q[
-
-]);
+]);
+ $self->nl_text (q[WebHACC:Heading]);
+ $self->html ('
');
} # html_header
sub encode_url_component ($$) {