| 117 |
$column = $opt{column}; |
$column = $opt{column}; |
| 118 |
} |
} |
| 119 |
} |
} |
| 120 |
|
$line += $opt{line_diff} || 0 if defined $line; |
| 121 |
|
$column += $opt{column_diff} || 0 if defined $column; |
| 122 |
$line = $line - 1 || 1 |
$line = $line - 1 || 1 |
| 123 |
if defined $line and not (defined $column and $column > 0); |
if defined $line and not (defined $column and $column > 0); |
| 124 |
|
|
| 170 |
$has_location = 1; |
$has_location = 1; |
| 171 |
} |
} |
| 172 |
|
|
| 173 |
if (defined $opt{value}) { |
if (not defined $opt{valueref} and defined $opt{value}) { |
| 174 |
|
$opt{valueref} = \($opt{value}); |
| 175 |
|
} |
| 176 |
|
|
| 177 |
|
if (defined $opt{valueref}) { |
| 178 |
$out->html (' '); |
$out->html (' '); |
| 179 |
$out->code ($opt{value}); |
if (defined $opt{pos_start}) { |
| 180 |
|
$out->start_tag ('code'); |
| 181 |
|
$out->text (substr ${$opt{valueref}}, 0, $opt{pos_start}); |
| 182 |
|
$out->start_tag ('mark'); |
| 183 |
|
$out->text (substr ${$opt{valueref}}, $opt{pos_start}, |
| 184 |
|
$opt{pos_end} - $opt{pos_start}); |
| 185 |
|
$out->end_tag ('mark'); |
| 186 |
|
$out->text (substr ${$opt{valueref}}, $opt{pos_end}) |
| 187 |
|
if $opt{pos_end} < length ${$opt{valueref}}; |
| 188 |
|
$out->end_tag ('code'); |
| 189 |
|
} elsif ($opt{value_mark_end}) { |
| 190 |
|
$out->start_tag ('code'); |
| 191 |
|
$out->text (${$opt{valueref}}); |
| 192 |
|
$out->start_tag ('mark'); |
| 193 |
|
$out->end_tag ('mark'); |
| 194 |
|
$out->end_tag ('code'); |
| 195 |
|
} elsif (defined $opt{value_mark}) { |
| 196 |
|
$out->start_tag ('code'); |
| 197 |
|
for (split /($opt{value_mark})/, ${$opt{valueref}}) { |
| 198 |
|
if (/$opt{value_mark}/) { |
| 199 |
|
$out->start_tag ('mark'); |
| 200 |
|
$out->text ($_); |
| 201 |
|
$out->end_tag ('mark'); |
| 202 |
|
} else { |
| 203 |
|
$out->text ($_); |
| 204 |
|
} |
| 205 |
|
} |
| 206 |
|
$out->end_tag ('code'); |
| 207 |
|
} else { |
| 208 |
|
$out->code (${$opt{valueref}}); |
| 209 |
|
} |
| 210 |
$has_location = 1; |
$has_location = 1; |
| 211 |
} |
} |
| 212 |
|
|
| 241 |
## Error message |
## Error message |
| 242 |
my $error_type_text = $opt{type}; |
my $error_type_text = $opt{type}; |
| 243 |
$out->nl_text ($error_type_text, node => $opt{node}, text => $opt{text}, |
$out->nl_text ($error_type_text, node => $opt{node}, text => $opt{text}, |
| 244 |
value => $opt{value}); |
value => ${$opt{valueref} or \''}, char => $opt{char}, |
| 245 |
|
octets => $opt{octets}); |
| 246 |
|
|
| 247 |
## Link to a long description |
## Link to a long description |
| 248 |
|
|
| 327 |
target => 'parse-errors', score_base => 10, |
target => 'parse-errors', score_base => 10, |
| 328 |
parent_status => $maindoc_status}, |
parent_status => $maindoc_status}, |
| 329 |
{label => 'Char L.', status => $self->{layers}->{charset}, |
{label => 'Char L.', status => $self->{layers}->{charset}, |
| 330 |
score_base => 10, |
target => 'parse-errors', score_base => 10, |
| 331 |
parent_status => $maindoc_status}, |
parent_status => $maindoc_status}, |
| 332 |
|
## TODO: char semantics layer |
| 333 |
{label => 'Syntax L.', status => $self->{layers}->{syntax}, |
{label => 'Syntax L.', status => $self->{layers}->{syntax}, |
| 334 |
target => 'parse-errors', score_base => 20, |
target => 'parse-errors', score_base => 20, |
| 335 |
parent_status => $maindoc_status}, |
parent_status => $maindoc_status}, |