%PDF- %PDF-
Direktori : C:/xampp/perl/vendor/lib/Excel/Writer/XLSX/Package/ |
Current File : C:/xampp/perl/vendor/lib/Excel/Writer/XLSX/Package/Comments.pm |
package Excel::Writer::XLSX::Package::Comments; ############################################################################### # # Comments - A class for writing the Excel XLSX Comments files. # # Used in conjunction with Excel::Writer::XLSX # # Copyright 2000-2019, John McNamara, jmcnamara@cpan.org # # Documentation after __END__ # # perltidy with the following options: -mbl=2 -pt=0 -nola use 5.008002; use strict; use warnings; use Carp; use Excel::Writer::XLSX::Package::XMLwriter; use Excel::Writer::XLSX::Utility qw(xl_rowcol_to_cell); our @ISA = qw(Excel::Writer::XLSX::Package::XMLwriter); our $VERSION = '1.03'; ############################################################################### # # Public and private API methods. # ############################################################################### ############################################################################### # # new() # # Constructor. # sub new { my $class = shift; my $fh = shift; my $self = Excel::Writer::XLSX::Package::XMLwriter->new( $fh ); $self->{_author_ids} = {}; bless $self, $class; return $self; } ############################################################################### # # _assemble_xml_file() # # Assemble and write the XML file. # sub _assemble_xml_file { my $self = shift; my $comments_data = shift; $self->xml_declaration; # Write the comments element. $self->_write_comments(); # Write the authors element. $self->_write_authors( $comments_data ); # Write the commentList element. $self->_write_comment_list( $comments_data ); $self->xml_end_tag( 'comments' ); # Close the XML writer filehandle. $self->xml_get_fh()->close(); } ############################################################################### # # Internal methods. # ############################################################################### ############################################################################### # # XML writing methods. # ############################################################################### ############################################################################## # # _write_comments() # # Write the <comments> element. # sub _write_comments { my $self = shift; my $xmlns = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'; my @attributes = ( 'xmlns' => $xmlns ); $self->xml_start_tag( 'comments', @attributes ); } ############################################################################## # # _write_authors() # # Write the <authors> element. # sub _write_authors { my $self = shift; my $comment_data = shift; my $author_count = 0; $self->xml_start_tag( 'authors' ); for my $comment ( @$comment_data ) { my $author = $comment->[3]; if ( defined $author && !exists $self->{_author_ids}->{$author} ) { # Store the author id. $self->{_author_ids}->{$author} = $author_count++; # Write the author element. $self->_write_author( $author ); } } $self->xml_end_tag( 'authors' ); } ############################################################################## # # _write_author() # # Write the <author> element. # sub _write_author { my $self = shift; my $data = shift; $self->xml_data_element( 'author', $data ); } ############################################################################## # # _write_comment_list() # # Write the <commentList> element. # sub _write_comment_list { my $self = shift; my $comment_data = shift; $self->xml_start_tag( 'commentList' ); for my $comment ( @$comment_data ) { my $row = $comment->[0]; my $col = $comment->[1]; my $text = $comment->[2]; my $author = $comment->[3]; my $font_name = $comment->[6]; my $font_size = $comment->[7]; my $font_family = $comment->[8]; # Look up the author id. my $author_id = undef; $author_id = $self->{_author_ids}->{$author} if defined $author; # Write the comment element. my $font = [ $font_name, $font_size, $font_family ]; $self->_write_comment( $row, $col, $text, $author_id, $font ); } $self->xml_end_tag( 'commentList' ); } ############################################################################## # # _write_comment() # # Write the <comment> element. # sub _write_comment { my $self = shift; my $row = shift; my $col = shift; my $text = shift; my $author_id = shift; my $ref = xl_rowcol_to_cell( $row, $col ); my $font = shift; my @attributes = ( 'ref' => $ref ); push @attributes, ( 'authorId' => $author_id ) if defined $author_id; $self->xml_start_tag( 'comment', @attributes ); # Write the text element. $self->_write_text( $text, $font ); $self->xml_end_tag( 'comment' ); } ############################################################################## # # _write_text() # # Write the <text> element. # sub _write_text { my $self = shift; my $text = shift; my $font = shift; $self->xml_start_tag( 'text' ); # Write the text r element. $self->_write_text_r( $text, $font ); $self->xml_end_tag( 'text' ); } ############################################################################## # # _write_text_r() # # Write the <r> element. # sub _write_text_r { my $self = shift; my $text = shift; my $font = shift; $self->xml_start_tag( 'r' ); # Write the rPr element. $self->_write_r_pr($font); # Write the text r element. $self->_write_text_t( $text ); $self->xml_end_tag( 'r' ); } ############################################################################## # # _write_text_t() # # Write the text <t> element. # sub _write_text_t { my $self = shift; my $text = shift; my @attributes = (); if ( $text =~ /^\s/ || $text =~ /\s$/ ) { push @attributes, ( 'xml:space' => 'preserve' ); } $self->xml_data_element( 't', $text, @attributes ); } ############################################################################## # # _write_r_pr() # # Write the <rPr> element. # sub _write_r_pr { my $self = shift; my $font = shift; $self->xml_start_tag( 'rPr' ); # Write the sz element. $self->_write_sz($font->[1]); # Write the color element. $self->_write_color(); # Write the rFont element. $self->_write_r_font($font->[0]); # Write the family element. $self->_write_family($font->[2]); $self->xml_end_tag( 'rPr' ); } ############################################################################## # # _write_sz() # # Write the <sz> element. # sub _write_sz { my $self = shift; my $val = shift; my @attributes = ( 'val' => $val ); $self->xml_empty_tag( 'sz', @attributes ); } ############################################################################## # # _write_color() # # Write the <color> element. # sub _write_color { my $self = shift; my $indexed = 81; my @attributes = ( 'indexed' => $indexed ); $self->xml_empty_tag( 'color', @attributes ); } ############################################################################## # # _write_r_font() # # Write the <rFont> element. # sub _write_r_font { my $self = shift; my $val = shift; my @attributes = ( 'val' => $val ); $self->xml_empty_tag( 'rFont', @attributes ); } ############################################################################## # # _write_family() # # Write the <family> element. # sub _write_family { my $self = shift; my $val = shift; my @attributes = ( 'val' => $val ); $self->xml_empty_tag( 'family', @attributes ); } 1; __END__ =pod =head1 NAME Comments - A class for writing the Excel XLSX Comments files. =head1 SYNOPSIS See the documentation for L<Excel::Writer::XLSX>. =head1 DESCRIPTION This module is used in conjunction with L<Excel::Writer::XLSX>. =head1 AUTHOR John McNamara jmcnamara@cpan.org =head1 COPYRIGHT (c) MM-MMXIX, John McNamara. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself. =head1 LICENSE Either the Perl Artistic Licence L<http://dev.perl.org/licenses/artistic.html> or the GPL L<http://www.opensource.org/licenses/gpl-license.php>. =head1 DISCLAIMER OF WARRANTY See the documentation for L<Excel::Writer::XLSX>. =cut