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 )