NAME
     Tags::Output::Indent - Indent class for Tags.

SYNOPSIS
     use Tags::Output::Indent(%params);

     my $tags = Tags::Output::Indent->new;
     $tags->put(['b', 'tag']);
     my @open_tags = $tags->open_tags;
     $tags->finalize;
     $tags->flush;
     $tags->reset;

METHODS
  "new"
     my $tags = Tags::Output::Indent->new;

    Constructor.

    Returns instance of class.

    *       "attr_callback"

             Subroutine for output processing of attribute key and value.
             Input argument is reference to array.
             Default value is &Tags::Utils::encode_attr_entities.
             Example is similar as 'data_callback'.

    *       "attr_delimeter"

             String, that defines attribute delimeter.
             Default is '"'.
             Possible is '"' or "'".

             Example:
             Prints <tag attr='val' /> instead default <tag attr="val" />

             my $tags = Tags::Output::Indent->new(
                     'attr_delimeter' => "'",
             );
             $tags->put(
                     ['b', 'tag'],
                     ['a', 'attr', 'val'],
                     ['e', 'tag'],
             );
             $tags->flush;

    *       "auto_flush"

             Auto flush flag.
             Default is 0.

    *       "cdata_indent"

             Flag, that means indent CDATA section.
             Default value is no-indent (0).

    *       "cdata_callback"

             Subroutine for output processing of cdata.
             Input argument is reference to array.
             Default value is undef.
             Example is similar as 'data_callback'.

    *       "data_callback"

             Subroutine for output processing of data.
             Input argument is reference to array.
             Default value is &Tags::Utils::encode_char_entities.

             Example:
             'data_callback' => sub {
                     my $data_ar = shift;
                     foreach my $data (@{$data_ar}) {

                             # Some process.
                             $data =~ s/^\s*//ms;
                     }
                     return;
             }

    *       "input_tags_item_callback"

             Input 'Tags' item callback.
             Callback is processing before main 'Tags' put().
             It's usefull for e.g. validation.
             Default value is undef.

    *       "line_size"

             Line size.
             Default value is 79.

    *       "next_indent"

             Value of indent, which are added to begin of line.
             Default value is "  ".

    *       "no_data_callback"

             Reference to array of tags, that can't use data callback.
             Default is ['script', 'style'].

             Example:
             For elements defined in this field we don't use 'data_callback'. It's used for
             doing of HTML escape sequences.
             Prints <script>&</script> instead <script>&amp;</script> in default setting of 'data_callback'.

             my $tags = Tags::Output::Indent->new(
                     'no_data_callback' => ['script'],
             );
             $tags->put(['b', 'script'], ['d', '&'], ['e', 'script']);
             $tags->flush;

    *       "no_simple"

             Reference to array of tags, that can't by simple.
             Default is [].

             Example:
             That's normal in html pages, web browsers has problem with <script /> tag.
             Prints <script></script> instead <script />.

             my $tags = Tags::Output::Raw->new(
                     'no_simple' => ['script']
             );
             $tags->put(
                     ['b', 'script'],
                     ['e', 'script'],
             );
             $tags->flush;

    *       "output_callback"

             Output callback.
             Input argument is reference to scalar of output string.
             Default value is undef.
             Example is similar as 'data_callback'.

    *       "output_handler"

             Handler for print output strings.
             Must be a GLOB.
             Default is undef.

    *       "output_sep"

             Output separator.
             Default value is newline (\n).

    *       "preserved"

             List of elements, which content will be preserved.
             Default value is reference to blank array.

    *       "raw_callback"

             Subroutine for output processing of raw data.
             Input argument is reference to array.
             Default value is undef.
             Example is similar as 'data_callback'.

    *       "skip_bad_tags"

             Skip bad tags.
             Default value is 0.

    *       "strict_instruction"

             Strict instruction.
             Default value is 1.

    *       "xml"

             Flag, that means xml output.
             Default is 0 (sgml).

  "finalize"
     $tags->finalize;

    Finalize Tags output. Automaticly puts end of all opened tags.

  "flush"
     $tags->flush;

    Flush tags in object. If defined 'output_handler' flush to its. Or
    return code. If enabled $reset_flag, then resets internal variables via
    reset method.

  "open_tags"
     my @open_tags = $tags->open_tags;

    Return array of opened tags.

  "put"
     $tags->put(['b', 'tag']);

    Put tags code in tags format.

  "reset"
     $tags->reset;

    Resets internal variables.

ERRORS
     'auto_flush' parameter can't use without 'output_handler' parameter.
     Bad attribute delimeter '%s'.
     Bad CDATA section.
     Bad data.
     Bad parameter '%s'.
     Bad tag type 'a'.
     Bad type of data.
     Ending bad tag: '%s' in block of tag '%s'.
     In XML mode must be a attribute value.

EXAMPLE
     use strict;
     use warnings;

     use Tags::Output::Indent;

     # Object.
     my $tags = Tags::Output::Indent->new;

     # Put data.
     $tags->put(
             ['b', 'text'],
             ['d', 'data'],
             ['e', 'text'],
     );

     # Print.
     print $tags->flush."\n";

     # Output:
     # <text>
     #   data
     # </text>

DEPENDENCIES
    Error::Pure, Indent, Indent::Word, Indent::Block, List::Util, Readonly,
    Tags::Utils::Preserve.

SEE ALSO
    Tags
        Structure oriented SGML/XML/HTML/etc. elements manipulation.

    Tags::Output
        Base class for Tags::Output::*.

    Task::Tags
        Install the Tags modules.

REPOSITORY
    <https://github.com/michal-josef-spacek/Tags-Output-Indent>

AUTHOR
    Michal Josef Špaček skim@cpan.org

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © 2011-2026 Michal Josef Špaček

    BSD 2-Clause License

VERSION
    0.13

