CIPP
view release on metacpan or search on metacpan
lib/CIPP/Compile/Parser.pm view on Meta::CPAN
$self->generate_close_exception_handler;
$self->generate_close_request;
$self->close_files;
$self->perl_error_check;
$self->install_file;
1;
}
sub process_module {
my $self = shift; $self->trace_in;
# open files
$self->open_files;
return unless $self->get_out_fh and $self->get_in_fh;
$self->generate_module_open;
$self->parse;
$self->generate_module_close;
$self->close_files;
$self->perl_error_check;
$self->install_file;
$self->write_dependencies;
1;
}
sub process_include {
my $self = shift; $self->trace_in;
# open files
$self->open_files;
return unless $self->get_out_fh and $self->get_in_fh;
# buffer output from the parser
my $buffer_sref = $self->open_output_buffer;
$self->parse;
$self->close_output_buffer;
# generate the Include header (now the interface is known)
$self->generate_include_open;
# add result from the parser
$self->flush_output_buffer ( buffer_sref => $buffer_sref );
# close include
$self->generate_include_close;
$self->close_files;
$self->perl_error_check;
$self->install_file;
#-------------------------------------------------------------
# Now update meta data: interface and dependecy information
#-------------------------------------------------------------
my $iface_filename = $self->get_iface_filename;
# remember atime and mtime of the interface file
my ($last_interface_atime, $last_interface_mtime);
($last_interface_atime, $last_interface_mtime) =
(stat($iface_filename))[8,9] if -f $iface_filename;
# remember old interface (interface file may not exist)
my $old_interface = eval { $self->read_include_interface_file };
# store (possibly) new Include interface
my $new_interface = $self->store_include_interface_file;
# update dependencies
$self->write_dependencies;
# reset timestamps if interfaces are compatible
if ( $self->check_interfaces_are_compatible (
old_interface => $old_interface,
new_interface => $new_interface
) and $last_interface_atime ) {
# set back timestamps
utime $last_interface_atime, $last_interface_mtime,
$iface_filename;
}
1;
}
#---------------------------------------------------------------------
# Elementary public Parser methods
#---------------------------------------------------------------------
sub parse {
my $self = shift; $self->trace_in;
my $in_fh = $self->get_in_fh;
# these characters indicate CIPP commands
my $magic_start = $self->get_magic_start;
my $magic_end = $self->get_magic_end;
my $magic_start_length = length($magic_start);
my $magic_end_length = length($magic_end);
# holds actual read line
my $line;
# holds actual lines which belongs together
my $buffer = "";
# state of the parser. the following values are defined:
# 'text' : text between CIPP tags
# 'tag : we are inside a CIPP tag
my $state = 'text';
$self->set_current_tag ($state);
$self->set_current_tag_line_nr (0);
# $start_pos: starting position for searches inside lines
# $pos: temporary search position
# $quote_pos: position of quote sign
# $backslash_pos: position of backslash
# $tag_name: name of tag we are currently in
my ($start_pos, $pos, $quote_pos, $backslash_pos);
# line number counter
my $line_nr = 0;
( run in 2.781 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )