OpenOffice-OODoc
view release on metacpan or search on metacpan
OODoc/Text.pm view on Meta::CPAN
#----------------------------------------------------------------------------
#
# $Id : Text.pm 2.243 2010-07-08 JMG$
#
# Created and maintained by Jean-Marie Gouarne
# Copyright 2010 by Genicorp, S.A. (www.genicorp.com)
#
#-----------------------------------------------------------------------------
package OpenOffice::OODoc::Text;
use 5.008_000;
use strict;
use OpenOffice::OODoc::XPath 2.237;
our @ISA = qw ( OpenOffice::OODoc::XPath );
our $VERSION = '2.243';
#-----------------------------------------------------------------------------
# synonyms
BEGIN {
*findElementsByContent = *selectElementsByContent;
*replaceAll = *selectElementsByContent;
*findTextContent = *selectTextContent;
*getHeaderList = *getHeadingList;
*getHeaderTextList = *getHeadingTextList;
*getBibliographyElements = *getBibliographyMarks;
*bibliographyElementContent = *bibliographyEntryContent;
*setBibliographyElement = *setBibliographyMark;
*bookmarkElement = *setBookmark;
*removeBookmark = *deleteBookmark;
*getHeader = *getHeading;
*getHeaderContent = *getHeadingContent;
*getHeaderText = *getHeadingText;
*getOutlineLevel = *getLevel;
*setOutlineLevel = *setLevel;
*getSections = *getSectionList;
*getChapter = *getChapterContent;
*getParagraphContent = *getParagraphText;
*createTextBox = *createTextBoxElement;
*getTextBox = *getTextBoxElement;
*getTextBoxElements = *getTextBoxElementList;
*getList = *getItemList;
*getColumn = *getTableColumn;
*getRow = *getTableRow;
*getHeaderRow = *getTableHeaderRow;
*getCell = *getTableCell;
*getSheet = *getTable;
*selectTableByName = *getTableByName;
*getSheetByName = *getTableByName;
*getTableContent = *getTableText;
*normalizeTable = *normalizeSheet;
*normalizeTables = *normalizeSheets;
*expandSheet = *expandTable;
*insertColumn = *insertTableColumn;
*deleteColumn = *deleteTableColumn;
*replicateRow = *replicateTableRow;
*insertRow = *insertTableRow;
*appendRow = *appendTableRow;
*deleteRow = *deleteTableRow;
*appendHeader = *appendHeading;
*insertHeader = *insertHeading;
*removeHeader = *removeHeading;
*deleteHeading = *removeHeading;
*getNote = *getNoteElement;
*getNoteList = *getNoteElementList;
*getHeadingText = *getHeadingContent;
*cellType = *fieldType;
*cellValueAttributeName = *fieldValueAttributeName;
*cellCurrency = *fieldCurrency;
*getStyle = *textStyle;
*setStyle = *textStyle;
*removeMark = *deleteMark;
*removeSpan = *removeTextStyleChanges;
}
#-----------------------------------------------------------------------------
# default text style attributes
our %DEFAULT_TEXT_STYLE =
(
references =>
{
'style:name' => undef,
'style:family' => 'paragraph',
'style:parent-style-name' => 'Standard',
'style:next-style-name' => 'Standard',
'style:class' => 'text'
},
properties =>
{
}
);
#-----------------------------------------------------------------------------
# default delimiters for flat text export
our %DEFAULT_DELIMITERS =
(
'text:footnote-citation' =>
{
begin => '[',
end => ']'
},
'text:note-citation' =>
{
begin => '[',
end => ']'
},
'text:footnote-body' =>
{
begin => '{NOTE: ',
end => '}'
},
OODoc/Text.pm view on Meta::CPAN
my $last_width = $self->_expand_row($row, $width);
$new_width = $last_width if $last_width > $new_width;
$rep = $row ?
$row->getAttribute($ROW_REPEAT_ATTRIBUTE) :
0;
if ($rep)
{
$row->removeAttribute($ROW_REPEAT_ATTRIBUTE);
while ($rep > 1)
{
last if
(defined $length and ($rownum >= $length));
$last_row = $last_row->replicateNode;
$rep--; $rownum++;
}
}
$rownum++ if $row;
}
$last_row->setAttribute($ROW_REPEAT_ATTRIBUTE, $rep)
if ($rep && ($rep > 1));
return wantarray ? ($rownum, $new_width) : $table;
}
#-----------------------------------------------------------------------------
# get a table size in ($lines, $columns) form
sub getTableSize
{
my $self = shift;
my $table = $self->getTable(@_) or return undef;
my $height = 0;
my $width = 0;
my @rows = ();
my $header = $table->first_child('table:table-header-rows');
@rows = $header->children('table:table-row') if $header;
push @rows, $table->children('table:table-row');
foreach my $row (@rows)
{
my $rep = $row->getAttribute($ROW_REPEAT_ATTRIBUTE) || 1;
$height += $rep;
my @cells = $row->selectChildElements
('table:(covered-|)table-cell');
my $row_width = 0;
foreach my $cell (@cells)
{
my $rep = $cell->getAttribute($COL_REPEAT_ATTRIBUTE);
$row_width += $rep ? $rep : 1;
}
$width = $row_width if $row_width > $width;
}
return ($height, $width);
}
#-----------------------------------------------------------------------------
# increases the size of an existing table
# improved by Barry Slaymaker [rt.cpan.org #41975]
sub expandTable
{
my $self = shift;
my $table = shift;
my $length = shift || 0;
my $width = shift || 0;
my $context = shift;
my ($old_length, $old_width) = $self->getTableSize($table);
$table = $self->normalizeSheet($table, 'full');
unless ($table)
{
warn "[" . __PACKAGE__ . "::expandTable] " .
"Unknown or badly formed table\n";
return undef;
}
my $last_col = $self->getTableColumn($table, -1);
my $last_row = $self->getRow($table, -1);
my $i = 0;
my $j = 0;
# expand column declarations
for ($i = $old_width ; $i < $width ; $i++)
{
$last_col = $last_col->replicateNode;
}
# expand existing rows
for ($i = 0 ; $i < $old_length ; $i++)
{
my $row = $self->getTableRow($table, $i);
my $last_cell = $self->getTableCell($row, -1);
for ($j = $old_width ; $j < $width ; $j++)
{
$last_cell = $last_cell->replicateNode;
}
}
# append new rows
for ($i = $old_length; $i < $length; $i++)
{
$last_row = $last_row->replicateNode;
}
return wantarray ? $self->getTableSize($table) : $table;
}
#-----------------------------------------------------------------------------
# get a table column descriptor element
sub getTableColumn
{
my $self = shift;
my $p1 = shift;
return $p1 if (ref $p1 && $p1->isTableColumn);
my $col = shift || 0;
my $table = $self->getTable($p1, @_) or return undef;
return $table->child($col, 'table:table-column');
}
#-----------------------------------------------------------------------------
# get/set a column style
sub columnStyle
{
my $self = shift;
my $p1 = shift;
my $column = undef;
if (ref $p1 && $p1->isTableColumn)
{
$column = $p1;
}
else
( run in 0.769 second using v1.01-cache-2.11-cpan-9581c071862 )