package C4::TmplTokenType;

# Copyright 2011 Tamil
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <https://www.gnu.org/licenses>.

use Modern::Perl;
use base 'Exporter';

###############################################################################

=head1 NAME

C4::TmplTokenType.pm - Types of TmplToken objects

=head1 DESCRIPTION

This is a Java-style "safe enum" singleton class for types of TmplToken objects.
The predefined constants are

=cut

###############################################################################

###############################################################################

use vars qw( $_text $_text_parametrized $_cdata
    $_tag $_decl $_pi $_directive $_comment $_null $_unknown );

BEGIN {
    our @EXPORT_OK = qw(
        TEXT
        TEXT_PARAMETRIZED
        CDATA
        TAG
        DECL
        PI
        DIRECTIVE
        COMMENT
        UNKNOWN
    );

    my $new = sub {
        my $this  = 'C4::TmplTokenType';    #shift;
        my $class = ref($this) || $this;
        my $self  = {};
        bless $self, $class;
        ( $self->{'id'}, $self->{'name'}, $self->{'desc'} ) = @_;
        return $self;
    };
    $_text              = &$new( 0, 'TEXT' );
    $_text_parametrized = &$new( 8, 'TEXT-PARAMETRIZED' );
    $_cdata             = &$new( 1, 'CDATA' );
    $_tag               = &$new( 2, 'TAG' );
    $_decl              = &$new( 3, 'DECL' );
    $_pi                = &$new( 4, 'PI' );
    $_directive         = &$new( 5, 'DIRECTIVE' );
    $_comment           = &$new( 6, 'COMMENT' );
    $_unknown           = &$new( 7, 'UNKNOWN' );
}

=head2 to_string

Missing POD for to_string.

=cut

sub to_string {
    my $this = shift;
    return $this->{'name'};
}

sub TEXT              { $_text }
sub TEXT_PARAMETRIZED { $_text_parametrized }
sub CDATA             { $_cdata }
sub TAG               { $_tag }
sub DECL              { $_decl }
sub PI                { $_pi }
sub DIRECTIVE         { $_directive }
sub COMMENT           { $_comment }
sub UNKNOWN           { $_unknown }

###############################################################################

=over

=item TEXT

normal text (#text in the DTD)

=item TEXT_PARAMETRIZED

parametrized normal text
(result of simple recognition of text interspersed with <TMPL_VAR> directives;
this has to be explicitly enabled in the scanner)

=item CDATA

normal text (CDATA in the DTD)

=item TAG

something that has the form of an HTML tag

=item DECL

something that has the form of an SGML declaration

=item PI

something that has the form of an SGML processing instruction

=item DIRECTIVE

a Template Toolkit directive

=item COMMENT

something that has the form of an HTML comment
(and is not recognized as an HTML::Template directive)

=item UNKNOWN

something that is not recognized at all by the scanner

=back

Note that end of file is currently represented by undef,
instead of a constant predefined by this module.

=cut

1;
