package Mail::AuthenticationResults::Token::String; # ABSTRACT: Class for modelling AuthenticationResults Header parts detected as strings require 5.008; use strict; use warnings; our $VERSION = '2.20210112'; # VERSION use Carp; use base 'Mail::AuthenticationResults::Token'; sub is { my ( $self ) = @_; return 'string'; } sub parse { my ($self) = @_; my $header = $self->{ 'header' }; my $value = q{}; croak 'Not a string' if $header =~ /^"/; croak 'Not a string' if $header =~ /^\(/; # Parse differently if we are post assignment (we are a value) or not (we are likely a key or key part) my $is_value = 0; my $is_first = 0; if ( exists ( $self->{ 'args' }->{ 'last_non_comment_type' } ) ) { if ( $self->{ 'args' }->{ 'last_non_comment_type' }->is() eq 'assignment' ) { if ( $self->{ 'args' }->{ 'last_non_comment_type' }->value() eq '=' ) { $is_value = 1; } } } else { $is_first = 1; } while ( length $header > 0 ) { my $first = substr( $header,0,1 ); last if $first =~ /\s/; last if $first eq ';'; last if $first eq '"' && ! $is_value && ! $is_first; last if $first eq '(' && ! $is_value && ! $is_first; last if $first eq '=' && ! $is_value && ! $is_first; last if $first eq '/' && ! $is_value && ! $is_first; last if $first eq '.' && ! $is_value && ! $is_first; $value .= $first; $header = substr( $header,1 ); } croak 'Not a string' if $value eq q{}; $self->{ 'value' } = $value; $self->{ 'header' } = $header; return; } 1; __END__ =pod =encoding UTF-8 =head1 NAME Mail::AuthenticationResults::Token::String - Class for modelling AuthenticationResults Header parts detected as strings =head1 VERSION version 2.20210112 =head1 DESCRIPTION Token representing a string =head1 AUTHOR Marc Bradshaw =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2020 by Marc Bradshaw. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut