--- test/html-webhacc/WebHACC/Result.pm	2008/08/30 05:32:51	1.16
+++ test/html-webhacc/WebHACC/Result.pm	2008/12/11 03:22:57	1.21
@@ -117,6 +117,8 @@
       $column = $opt{column};
     }
   }
+  $line += $opt{line_diff} || 0 if defined $line;
+  $column += $opt{column_diff} || 0 if defined $column;
   $line = $line - 1 || 1
       if defined $line and not (defined $column and $column > 0);
 
@@ -168,26 +170,31 @@
     $has_location = 1;
   }
 
-  if (defined $opt{value}) {
+  if (not defined $opt{valueref} and defined $opt{value}) {
+    $opt{valueref} = \($opt{value});
+  }
+
+  if (defined $opt{valueref}) {
     $out->html (' ');
     if (defined $opt{pos_start}) {
       $out->start_tag ('code');
-      $out->text (substr $opt{value}, 0, $opt{pos_start});
+      $out->text (substr ${$opt{valueref}}, 0, $opt{pos_start});
       $out->start_tag ('mark');
-      $out->text (substr $opt{value}, $opt{pos_start},
-                      $opt{pos_end} - $opt{pos_start} + 1);
+      $out->text (substr ${$opt{valueref}}, $opt{pos_start},
+                      $opt{pos_end} - $opt{pos_start});
       $out->end_tag ('mark');
-      $out->text (substr $opt{value}, $opt{pos_end} + 1);
+      $out->text (substr ${$opt{valueref}}, $opt{pos_end})
+          if $opt{pos_end} < length ${$opt{valueref}};
       $out->end_tag ('code');
     } elsif ($opt{value_mark_end}) {
       $out->start_tag ('code');
-      $out->text ($opt{value});
+      $out->text (${$opt{valueref}});
       $out->start_tag ('mark');
       $out->end_tag ('mark');
       $out->end_tag ('code');
     } elsif (defined $opt{value_mark}) {
       $out->start_tag ('code');
-      for (split /($opt{value_mark})/, $opt{value}) {
+      for (split /($opt{value_mark})/, ${$opt{valueref}}) {
         if (/$opt{value_mark}/) {
           $out->start_tag ('mark');
           $out->text ($_);
@@ -198,7 +205,7 @@
       }
       $out->end_tag ('code');
     } else {
-      $out->code ($opt{value});
+      $out->code (${$opt{valueref}});
     }
     $has_location = 1;
   }
@@ -234,7 +241,8 @@
   ## Error message
   my $error_type_text = $opt{type};
   $out->nl_text ($error_type_text, node => $opt{node}, text => $opt{text},
-                 value => $opt{value});
+                 value => ${$opt{valueref} or \''}, char => $opt{char},
+                 octets => $opt{octets});
   
   ## Link to a long description
 
@@ -319,8 +327,9 @@
        target => 'parse-errors', score_base => 10,
        parent_status => $maindoc_status},
       {label => 'Char L.', status => $self->{layers}->{charset},
-       score_base => 10,
+       target => 'parse-errors', score_base => 10,
        parent_status => $maindoc_status},
+      ## TODO: char semantics layer
       {label => 'Syntax L.', status => $self->{layers}->{syntax},
        target => 'parse-errors', score_base => 20,
        parent_status => $maindoc_status},