| 530 |
|
|
| 531 |
package Whatpm::Charset::DecodeHandle::ByteBuffer; |
package Whatpm::Charset::DecodeHandle::ByteBuffer; |
| 532 |
|
|
| 533 |
|
## NOTE: Provides a byte buffer wrapper object. |
| 534 |
|
|
| 535 |
sub new ($$) { |
sub new ($$) { |
| 536 |
my $self = bless { |
my $self = bless { |
| 537 |
buffer => '', |
buffer => '', |
| 552 |
|
|
| 553 |
package Whatpm::Charset::DecodeHandle::Encode; |
package Whatpm::Charset::DecodeHandle::Encode; |
| 554 |
|
|
| 555 |
|
## NOTE: Provides a Perl |Encode| module wrapper object. |
| 556 |
|
|
| 557 |
sub charset ($) { $_[0]->{charset} } |
sub charset ($) { $_[0]->{charset} } |
| 558 |
|
|
| 559 |
sub close ($) { $_[0]->{filehandle}->close } |
sub close ($) { $_[0]->{filehandle}->close } |
| 607 |
|
|
| 608 |
if ($error) { |
if ($error) { |
| 609 |
$r = substr $self->{byte_buffer}, 0, 1, ''; |
$r = substr $self->{byte_buffer}, 0, 1, ''; |
| 610 |
$self->{onerror}->($self, 'illegal-octets-error', octets => \$r); |
my $fallback = $self->{fallback}->{$r}; |
| 611 |
|
if (defined $fallback) { |
| 612 |
|
## NOTE: This is an HTML5 parse error. |
| 613 |
|
$self->{onerror}->($self, 'fallback-char-error', octets => \$r, |
| 614 |
|
char => \$fallback, |
| 615 |
|
level => $self->{level}->{$self->{error_level}->{'fallback-char-error'}}); |
| 616 |
|
return $fallback; |
| 617 |
|
} elsif (exists $self->{fallback}->{$r}) { |
| 618 |
|
## NOTE: This is an HTML5 parse error. In addition, the octet |
| 619 |
|
## is not assigned with a character. |
| 620 |
|
$self->{onerror}->($self, 'fallback-unassigned-error', octets => \$r, |
| 621 |
|
level => $self->{level}->{$self->{error_level}->{'fallback-unassigned-error'}}); |
| 622 |
|
} else { |
| 623 |
|
$self->{onerror}->($self, 'illegal-octets-error', octets => \$r, |
| 624 |
|
level => $self->{level}->{$self->{error_level}->{'illegal-octets-error'}}); |
| 625 |
|
} |
| 626 |
} |
} |
| 627 |
|
|
| 628 |
return $r; |
return $r; |
| 716 |
} elsif ($r eq "\xA0" or $r eq "\xFF") { |
} elsif ($r eq "\xA0" or $r eq "\xFF") { |
| 717 |
$etype = 'unassigned-code-point-error'; |
$etype = 'unassigned-code-point-error'; |
| 718 |
} |
} |
| 719 |
$self->{onerror}->($self, $etype, octets => \$r); |
$self->{onerror}->($self, $etype, octets => \$r, |
| 720 |
|
level => $self->{level}->{$self->{error_level}->{$etype}}); |
| 721 |
} |
} |
| 722 |
|
|
| 723 |
return $r; |
return $r; |
| 778 |
} else { |
} else { |
| 779 |
$r = undef; |
$r = undef; |
| 780 |
$self->{onerror}->($self, 'invalid-state-error', |
$self->{onerror}->($self, 'invalid-state-error', |
| 781 |
state => $self->{state}); |
state => $self->{state}, |
| 782 |
|
level => $self->{level}->{$self->{error_level}->{'invalid-state-error'}}); |
| 783 |
} |
} |
| 784 |
} |
} |
| 785 |
} elsif ($self->{state} eq 'state_2442') { # 1983 |
} elsif ($self->{state} eq 'state_2442') { # 1983 |
| 795 |
} else { |
} else { |
| 796 |
$r = undef; |
$r = undef; |
| 797 |
$self->{onerror}->($self, 'invalid-state-error', |
$self->{onerror}->($self, 'invalid-state-error', |
| 798 |
state => $self->{state}); |
state => $self->{state}, |
| 799 |
|
level => $self->{level}->{$self->{error_level}->{'invalid-state-error'}}); |
| 800 |
} |
} |
| 801 |
} |
} |
| 802 |
} elsif ($self->{state} eq 'state_2440') { # 1978 |
} elsif ($self->{state} eq 'state_2440') { # 1978 |
| 812 |
} else { |
} else { |
| 813 |
$r = undef; |
$r = undef; |
| 814 |
$self->{onerror}->($self, 'invalid-state-error', |
$self->{onerror}->($self, 'invalid-state-error', |
| 815 |
state => $self->{state}); |
state => $self->{state}, |
| 816 |
|
level => $self->{level}->{$self->{error_level}->{'invalid-state-error'}}); |
| 817 |
} |
} |
| 818 |
} |
} |
| 819 |
} else { |
} else { |
| 835 |
$r .= "(H"; |
$r .= "(H"; |
| 836 |
$self->{state} = 'state_284A'; |
$self->{state} = 'state_284A'; |
| 837 |
} |
} |
| 838 |
$self->{onerror}->($self, $etype, octets => \$r); |
$self->{onerror}->($self, $etype, octets => \$r, |
| 839 |
|
level => $self->{level}->{$self->{error_level}->{$etype}}); |
| 840 |
} |
} |
| 841 |
} # A |
} # A |
| 842 |
|
|
| 899 |
} elsif ($r =~ /^[\x80\xA0\xFD-\xFF]/) { |
} elsif ($r =~ /^[\x80\xA0\xFD-\xFF]/) { |
| 900 |
$etype = 'unassigned-code-point-error'; |
$etype = 'unassigned-code-point-error'; |
| 901 |
} |
} |
| 902 |
$self->{onerror}->($self, $etype, octets => \$r); |
$self->{onerror}->($self, $etype, octets => \$r, |
| 903 |
|
level => $self->{level}->{$self->{error_level}->{$etype}}); |
| 904 |
} |
} |
| 905 |
|
|
| 906 |
return $r; |
return $r; |