123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708 |
- <?php
- /**
- * This file is part of PHPWord - A pure PHP library for reading and writing
- * word processing documents.
- *
- * PHPWord is free software distributed under the terms of the GNU Lesser
- * General Public License version 3 as published by the Free Software Foundation.
- *
- * For the full copyright and license information, please read the LICENSE
- * file that was distributed with this source code. For the full list of
- * contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
- *
- * @link https://github.com/PHPOffice/PHPWord
- * @copyright 2010-2014 PHPWord contributors
- * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
- */
-
- namespace PhpOffice\PhpWord\Style;
-
- use PhpOffice\PhpWord\Exception\InvalidStyleException;
- use PhpOffice\PhpWord\Shared\String;
-
- /**
- * Paragraph style
- *
- * OOXML:
- * - General: alignment, outline level
- * - Indentation: left, right, firstline, hanging
- * - Spacing: before, after, line spacing
- * - Pagination: widow control, keep next, keep line, page break before
- * - Formatting exception: suppress line numbers, don't hyphenate
- * - Textbox options
- * - Tabs
- * - Shading
- * - Borders
- *
- * OpenOffice:
- * - Indents & spacing
- * - Alignment
- * - Text flow
- * - Outline & numbering
- * - Tabs
- * - Dropcaps
- * - Tabs
- * - Borders
- * - Background
- *
- * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_PPr.html
- */
- class Paragraph extends Border
- {
- /**
- * @const int One line height equals 240 twip
- */
- const LINE_HEIGHT = 240;
-
- /**
- * Aliases
- *
- * @var array
- */
- protected $aliases = array('line-height' => 'lineHeight');
-
- /**
- * Parent style
- *
- * @var string
- */
- private $basedOn = 'Normal';
-
- /**
- * Style for next paragraph
- *
- * @var string
- */
- private $next;
-
- /**
- * Alignment
- *
- * @var \PhpOffice\PhpWord\Style\Alignment
- */
- private $alignment;
-
- /**
- * Indentation
- *
- * @var \PhpOffice\PhpWord\Style\Indentation
- */
- private $indentation;
-
- /**
- * Spacing
- *
- * @var \PhpOffice\PhpWord\Style\Spacing
- */
- private $spacing;
-
- /**
- * Text line height
- *
- * @var int
- */
- private $lineHeight;
-
- /**
- * Allow first/last line to display on a separate page
- *
- * @var bool
- */
- private $widowControl = true;
-
- /**
- * Keep paragraph with next paragraph
- *
- * @var bool
- */
- private $keepNext = false;
-
- /**
- * Keep all lines on one page
- *
- * @var bool
- */
- private $keepLines = false;
-
- /**
- * Start paragraph on next page
- *
- * @var bool
- */
- private $pageBreakBefore = false;
-
- /**
- * Numbering style name
- *
- * @var string
- */
- private $numStyle;
-
- /**
- * Numbering level
- *
- * @var int
- */
- private $numLevel = 0;
-
- /**
- * Set of Custom Tab Stops
- *
- * @var \PhpOffice\PhpWord\Style\Tab[]
- */
- private $tabs = array();
-
- /**
- * Shading
- *
- * @var \PhpOffice\PhpWord\Style\Shading
- */
- private $shading;
-
- /**
- * Create new instance
- */
- public function __construct()
- {
- $this->alignment = new Alignment();
- }
-
- /**
- * Set Style value
- *
- * @param string $key
- * @param mixed $value
- * @return self
- */
- public function setStyleValue($key, $value)
- {
- $key = String::removeUnderscorePrefix($key);
- if ($key == 'indent' || $key == 'hanging') {
- $value = $value * 720;
- } elseif ($key == 'spacing') {
- $value += 240; // because line height of 1 matches 240 twips
- }
-
- return parent::setStyleValue($key, $value);
- }
-
- /**
- * Get style values
- *
- * An experiment to retrieve all style values in one function. This will
- * reduce function call and increase cohesion between functions. Should be
- * implemented in all styles.
- *
- * @ignoreScrutinizerPatch
- * @return array
- */
- public function getStyleValues()
- {
- $styles = array(
- 'name' => $this->getStyleName(),
- 'basedOn' => $this->getBasedOn(),
- 'next' => $this->getNext(),
- 'alignment' => $this->getAlign(),
- 'indentation' => $this->getIndentation(),
- 'spacing' => $this->getSpace(),
- 'pagination' => array(
- 'widowControl' => $this->hasWidowControl(),
- 'keepNext' => $this->isKeepNext(),
- 'keepLines' => $this->isKeepLines(),
- 'pageBreak' => $this->hasPageBreakBefore(),
- ),
- 'numbering' => array(
- 'style' => $this->getNumStyle(),
- 'level' => $this->getNumLevel(),
- ),
- 'tabs' => $this->getTabs(),
- 'shading' => $this->getShading(),
- );
-
- return $styles;
- }
-
- /**
- * Get alignment
- *
- * @return string
- */
- public function getAlign()
- {
- return $this->alignment->getValue();
- }
-
- /**
- * Set alignment
- *
- * @param string $value
- * @return self
- */
- public function setAlign($value = null)
- {
- $this->alignment->setValue($value);
-
- return $this;
- }
-
- /**
- * Get parent style ID
- *
- * @return string
- */
- public function getBasedOn()
- {
- return $this->basedOn;
- }
-
- /**
- * Set parent style ID
- *
- * @param string $value
- * @return self
- */
- public function setBasedOn($value = 'Normal')
- {
- $this->basedOn = $value;
-
- return $this;
- }
-
- /**
- * Get style for next paragraph
- *
- * @return string
- */
- public function getNext()
- {
- return $this->next;
- }
-
- /**
- * Set style for next paragraph
- *
- * @param string $value
- * @return self
- */
- public function setNext($value = null)
- {
- $this->next = $value;
-
- return $this;
- }
-
- /**
- * Get shading
- *
- * @return \PhpOffice\PhpWord\Style\Indentation
- */
- public function getIndentation()
- {
- return $this->indentation;
- }
-
- /**
- * Set shading
- *
- * @param mixed $value
- * @return self
- */
- public function setIndentation($value = null)
- {
- $this->setObjectVal($value, 'Indentation', $this->indentation);
-
- return $this;
- }
-
- /**
- * Get indentation
- *
- * @return int
- */
- public function getIndent()
- {
- return $this->getChildStyleValue($this->indentation, 'left');
- }
-
- /**
- * Set indentation
- *
- * @param int $value
- * @return self
- */
- public function setIndent($value = null)
- {
- return $this->setIndentation(array('left' => $value));
- }
-
- /**
- * Get hanging
- *
- * @return int
- */
- public function getHanging()
- {
- return $this->getChildStyleValue($this->indentation, 'hanging');
- }
-
- /**
- * Set hanging
- *
- * @param int $value
- * @return self
- */
- public function setHanging($value = null)
- {
- return $this->setIndentation(array('hanging' => $value));
- }
-
- /**
- * Get spacing
- *
- * @return \PhpOffice\PhpWord\Style\Spacing
- * @todo Rename to getSpacing in 1.0
- */
- public function getSpace()
- {
- return $this->spacing;
- }
-
- /**
- * Set spacing
- *
- * @param mixed $value
- * @return self
- * @todo Rename to setSpacing in 1.0
- */
- public function setSpace($value = null)
- {
- $this->setObjectVal($value, 'Spacing', $this->spacing);
-
- return $this;
- }
-
- /**
- * Get space before paragraph
- *
- * @return integer
- */
- public function getSpaceBefore()
- {
- return $this->getChildStyleValue($this->spacing, 'before');
- }
-
- /**
- * Set space before paragraph
- *
- * @param int $value
- * @return self
- */
- public function setSpaceBefore($value = null)
- {
- return $this->setSpace(array('before' => $value));
- }
-
- /**
- * Get space after paragraph
- *
- * @return integer
- */
- public function getSpaceAfter()
- {
- return $this->getChildStyleValue($this->spacing, 'after');
- }
-
- /**
- * Set space after paragraph
- *
- * @param int $value
- * @return self
- */
- public function setSpaceAfter($value = null)
- {
- return $this->setSpace(array('after' => $value));
- }
-
- /**
- * Get spacing between lines
- *
- * @return int
- */
- public function getSpacing()
- {
- return $this->getChildStyleValue($this->spacing, 'line');
- }
-
- /**
- * Set spacing between lines
- *
- * @param int $value
- * @return self
- */
- public function setSpacing($value = null)
- {
- return $this->setSpace(array('line' => $value));
- }
-
- /**
- * Get line height
- *
- * @return int|float
- */
- public function getLineHeight()
- {
- return $this->lineHeight;
- }
-
- /**
- * Set the line height
- *
- * @param int|float|string $lineHeight
- * @return self
- * @throws \PhpOffice\PhpWord\Exception\InvalidStyleException
- */
- public function setLineHeight($lineHeight)
- {
- if (is_string($lineHeight)) {
- $lineHeight = floatval(preg_replace('/[^0-9\.\,]/', '', $lineHeight));
- }
-
- if ((!is_integer($lineHeight) && !is_float($lineHeight)) || !$lineHeight) {
- throw new InvalidStyleException('Line height must be a valid number');
- }
-
- $this->lineHeight = $lineHeight;
- $this->setSpacing($lineHeight * self::LINE_HEIGHT);
- return $this;
- }
-
- /**
- * Get allow first/last line to display on a separate page setting
- *
- * @return bool
- */
- public function hasWidowControl()
- {
- return $this->widowControl;
- }
-
- /**
- * Set keep paragraph with next paragraph setting
- *
- * @param bool $value
- * @return self
- */
- public function setWidowControl($value = true)
- {
- $this->widowControl = $this->setBoolVal($value, $this->widowControl);
-
- return $this;
- }
-
- /**
- * Get keep paragraph with next paragraph setting
- *
- * @return bool
- */
- public function isKeepNext()
- {
- return $this->keepNext;
- }
-
- /**
- * Set keep paragraph with next paragraph setting
- *
- * @param bool $value
- * @return self
- */
- public function setKeepNext($value = true)
- {
- $this->keepNext = $this->setBoolVal($value, $this->keepNext);
-
- return $this;
- }
-
- /**
- * Get keep all lines on one page setting
- *
- * @return bool
- */
- public function isKeepLines()
- {
- return $this->keepLines;
- }
-
- /**
- * Set keep all lines on one page setting
- *
- * @param bool $value
- * @return self
- */
- public function setKeepLines($value = true)
- {
- $this->keepLines = $this->setBoolVal($value, $this->keepLines);
-
- return $this;
- }
-
- /**
- * Get start paragraph on next page setting
- *
- * @return bool
- */
- public function hasPageBreakBefore()
- {
- return $this->pageBreakBefore;
- }
-
- /**
- * Set start paragraph on next page setting
- *
- * @param bool $value
- * @return self
- */
- public function setPageBreakBefore($value = true)
- {
- $this->pageBreakBefore = $this->setBoolVal($value, $this->pageBreakBefore);
-
- return $this;
- }
-
- /**
- * Get numbering style name
- *
- * @return string
- */
- public function getNumStyle()
- {
- return $this->numStyle;
- }
-
- /**
- * Set numbering style name
- *
- * @param string $value
- * @return self
- */
- public function setNumStyle($value)
- {
- $this->numStyle = $value;
-
- return $this;
- }
-
- /**
- * Get numbering level
- *
- * @return int
- */
- public function getNumLevel()
- {
- return $this->numLevel;
- }
-
- /**
- * Set numbering level
- *
- * @param int $value
- * @return self
- */
- public function setNumLevel($value = 0)
- {
- $this->numLevel = $this->setIntVal($value, $this->numLevel);
-
- return $this;
- }
-
- /**
- * Get tabs
- *
- * @return \PhpOffice\PhpWord\Style\Tab[]
- */
- public function getTabs()
- {
- return $this->tabs;
- }
-
- /**
- * Set tabs
- *
- * @param array $value
- * @return self
- */
- public function setTabs($value = null)
- {
- if (is_array($value)) {
- $this->tabs = $value;
- }
-
- return $this;
- }
-
- /**
- * Get allow first/last line to display on a separate page setting
- *
- * @deprecated 0.10.0
- * @codeCoverageIgnore
- */
- public function getWidowControl()
- {
- return $this->hasWidowControl();
- }
-
- /**
- * Get keep paragraph with next paragraph setting
- *
- * @deprecated 0.10.0
- * @codeCoverageIgnore
- */
- public function getKeepNext()
- {
- return $this->isKeepNext();
- }
-
- /**
- * Get keep all lines on one page setting
- *
- * @deprecated 0.10.0
- * @codeCoverageIgnore
- */
- public function getKeepLines()
- {
- return $this->isKeepLines();
- }
-
- /**
- * Get start paragraph on next page setting
- *
- * @deprecated 0.10.0
- * @codeCoverageIgnore
- */
- public function getPageBreakBefore()
- {
- return $this->hasPageBreakBefore();
- }
-
- /**
- * Get shading
- *
- * @return \PhpOffice\PhpWord\Style\Shading
- */
- public function getShading()
- {
- return $this->shading;
- }
-
- /**
- * Set shading
- *
- * @param mixed $value
- * @return self
- */
- public function setShading($value = null)
- {
- $this->setObjectVal($value, 'Shading', $this->shading);
-
- return $this;
- }
- }
|