--- 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[ -

WebHACC

-]); +

]); + $self->nl_text (q[WebHACC:Heading]); + $self->html ('

'); } # html_header sub encode_url_component ($$) {