add new NumberFormat values and refactor other uses

This commit is contained in:
troosan 2017-07-04 15:04:30 +02:00
parent ef95611203
commit 8a5433e5df
10 changed files with 271 additions and 53 deletions

View File

@ -1,5 +1,6 @@
<?php
use PhpOffice\PhpWord\SimpleType\FootnoteProperties;
use PhpOffice\PhpWord\ComplexType\FootnoteProperties;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
include_once 'Sample_Header.php';
@ -50,7 +51,7 @@ $footnote = $section->addFootnote();
$footnote->addText('The reference for this is wrapped in its own line');
$footnoteProperties = new FootnoteProperties();
$footnoteProperties->setNumFmt(FootnoteProperties::NUMBER_FORMAT_UPPER_ROMAN);
$footnoteProperties->setNumFmt(NumberFormat::DECIMAL_ENCLOSED_CIRCLE);
$section->setFootnoteProperties($footnoteProperties);
// Save file

View File

@ -14,7 +14,9 @@
* @copyright 2010-2016 PHPWord contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
namespace PhpOffice\PhpWord\SimpleType;
namespace PhpOffice\PhpWord\ComplexType;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
/**
* Footnote properties
@ -28,17 +30,6 @@ final class FootnoteProperties
const RESTART_NUMBER_EACH_SECTION = 'eachSect';
const RESTART_NUMBER_EACH_PAGE = 'eachPage';
const NUMBER_FORMAT_DECIMAL = 'decimal';
const NUMBER_FORMAT_UPPER_ROMAN = 'upperRoman';
const NUMBER_FORMAT_LOWER_ROMAN = 'lowerRoman';
const NUMBER_FORMAT_UPPER_LETTER = 'upperLetter';
const NUMBER_FORMAT_LOWER_LETTER = 'lowerLetter';
const NUMBER_FORMAT_ORDINAL = 'ordinal';
const NUMBER_FORMAT_CARDINAL_TEXT = 'cardinalText';
const NUMBER_FORMAT_ORDINAL_TEXT = 'ordinalText';
const NUMBER_FORMAT_NONE = 'none';
const NUMBER_FORMAT_BULLET = 'bullet';
const POSITION_PAGE_BOTTOM = 'pageBottom';
const POSITION_BENEATH_TEXT = 'beneathText';
const POSITION_SECTION_END = 'sectEnd';
@ -52,7 +43,7 @@ final class FootnoteProperties
private $pos;
/**
* Footnote Numbering Format
* Footnote Numbering Format w:numFmt, one of PhpOffice\PhpWord\SimpleType\NumberFormat
*
* @var string
*/
@ -61,7 +52,7 @@ final class FootnoteProperties
/**
* Footnote and Endnote Numbering Starting Value
*
* @var decimal
* @var double
*/
private $numStart;
@ -72,11 +63,23 @@ final class FootnoteProperties
*/
private $numRestart;
/**
* Get the Footnote Positioning Location
*
* @return string
*/
public function getPos()
{
return $this->pos;
}
/**
* Set the Footnote Positioning Location (pageBottom, beneathText, sectEnd, docEnd)
*
* @param string $pos
* @throws \InvalidArgumentException
* @return self
*/
public function setPos($pos)
{
$position = array(
@ -91,50 +94,71 @@ final class FootnoteProperties
} else {
throw new \InvalidArgumentException("Invalid value, on of " . implode(', ', $position) . " possible");
}
return $this;
}
/**
* Get the Footnote Numbering Format
*
* @return string
*/
public function getNumFmt()
{
return $this->numFmt;
}
/**
* Set the Footnote Numbering Format
*
* @param string $numFmt One of NumberFormat
* @return self
*/
public function setNumFmt($numFmt)
{
$numberFormat = array(
self::NUMBER_FORMAT_DECIMAL,
self::NUMBER_FORMAT_UPPER_ROMAN,
self::NUMBER_FORMAT_LOWER_ROMAN,
self::NUMBER_FORMAT_UPPER_LETTER,
self::NUMBER_FORMAT_LOWER_LETTER,
self::NUMBER_FORMAT_ORDINAL,
self::NUMBER_FORMAT_CARDINAL_TEXT,
self::NUMBER_FORMAT_ORDINAL_TEXT,
self::NUMBER_FORMAT_NONE,
self::NUMBER_FORMAT_BULLET
);
if (in_array($numFmt, $numberFormat)) {
$this->numFmt = $numFmt;
} else {
throw new \InvalidArgumentException("Invalid value, on of " . implode(', ', $numberFormat) . " possible");
}
NumberFormat::validate($numFmt);
$this->numFmt = $numFmt;
return $this;
}
/**
* Get the Footnote Numbering Format
*
* @return double
*/
public function getNumStart()
{
return $this->numStart;
}
/**
* Set the Footnote Numbering Format
*
* @param double $numStart
* @return self
*/
public function setNumStart($numStart)
{
$this->numStart = $numStart;
return $this;
}
/**
* Get the Footnote and Endnote Numbering Starting Value
*
* @return string
*/
public function getNumRestart()
{
return $this->numRestart;
}
/**
* Set the Footnote and Endnote Numbering Starting Value (continuous, eachSect, eachPage)
*
* @param string $numRestart
* @throws \InvalidArgumentException
* @return self
*/
public function setNumRestart($numRestart)
{
$restartNumbers = array(
@ -148,5 +172,6 @@ final class FootnoteProperties
} else {
throw new \InvalidArgumentException("Invalid value, on of " . implode(', ', $restartNumbers) . " possible");
}
return $this;
}
}

View File

@ -17,8 +17,8 @@
namespace PhpOffice\PhpWord\Element;
use PhpOffice\PhpWord\ComplexType\FootnoteProperties;
use PhpOffice\PhpWord\Style\Section as SectionStyle;
use PhpOffice\PhpWord\SimpleType\FootnoteProperties;
class Section extends AbstractContainer
{

View File

@ -0,0 +1,35 @@
<?php
namespace PhpOffice\PhpWord\Shared;
abstract class AbstractEnum
{
private static $constCacheArray = null;
private static function getConstants()
{
if (self::$constCacheArray == null) {
self::$constCacheArray = array();
}
$calledClass = get_called_class();
if (! array_key_exists($calledClass, self::$constCacheArray)) {
$reflect = new \ReflectionClass($calledClass);
self::$constCacheArray[$calledClass] = $reflect->getConstants();
}
return self::$constCacheArray[$calledClass];
}
public static function values()
{
return array_values(self::getConstants());
}
public static function validate($value)
{
$values = array_values(self::getConstants());
if (!in_array($value, $values, true)) {
$calledClass = get_called_class();
throw new \InvalidArgumentException("$value is not a valid value for $calledClass, possible values are " . implode(', ', $values));
}
}
}

View File

@ -0,0 +1,153 @@
<?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-2016 PHPWord contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
namespace PhpOffice\PhpWord\SimpleType;
use PhpOffice\PhpWord\Shared\AbstractEnum;
/**
* Numbering Format.
*
* @since 0.14.0
*
* @see http://www.datypic.com/sc/ooxml/t-w_ST_NumberFormat.html.
*
* @codeCoverageIgnore
*/
final class NumberFormat extends AbstractEnum
{
//Decimal Numbers
const DECIMAL = 'decimal';
//Uppercase Roman Numerals
const UPPER_ROMAN = 'upperRoman';
//Lowercase Roman Numerals
const LOWER_ROMAN = 'lowerRoman';
//Uppercase Latin Alphabet
const UPPER_LETTER = 'upperLetter';
//Lowercase Latin Alphabet
const LOWER_LETTER = 'lowerLetter';
//Ordinal
const ORDINAL = 'ordinal';
//Cardinal Text
const CARDINAL_TEXT = 'cardinalText';
//Ordinal Text
const ORDINAL_TEXT = 'ordinalText';
//Hexadecimal Numbering
const HEX = 'hex';
//Chicago Manual of Style
const CHICAGO = 'chicago';
//Ideographs
const IDEOGRAPH_DIGITAL = 'ideographDigital';
//Japanese Counting System
const JAPANESE_COUNTING = 'japaneseCounting';
//AIUEO Order Hiragana
const AIUEO = 'aiueo';
//Iroha Ordered Katakana
const IROHA = 'iroha';
//Double Byte Arabic Numerals
const DECIMAL_FULL_WIDTH = 'decimalFullWidth';
//Single Byte Arabic Numerals
const DECIMAL_HALF_WIDTH = 'decimalHalfWidth';
//Japanese Legal Numbering
const JAPANESE_LEGAL = 'japaneseLegal';
//Japanese Digital Ten Thousand Counting System
const JAPANESE_DIGITAL_TEN_THOUSAND = 'japaneseDigitalTenThousand';
//Decimal Numbers Enclosed in a Circle
const DECIMAL_ENCLOSED_CIRCLE = 'decimalEnclosedCircle';
//Double Byte Arabic Numerals Alternate
const DECIMAL_FULL_WIDTH2 = 'decimalFullWidth2';
//Full-Width AIUEO Order Hiragana
const AIUEO_FULL_WIDTH = 'aiueoFullWidth';
//Full-Width Iroha Ordered Katakana
const IROHA_FULL_WIDTH = 'irohaFullWidth';
//Initial Zero Arabic Numerals
const DECIMAL_ZERO = 'decimalZero';
//Bullet
const BULLET = 'bullet';
//Korean Ganada Numbering
const GANADA = 'ganada';
//Korean Chosung Numbering
const CHOSUNG = 'chosung';
//Decimal Numbers Followed by a Period
const DECIMAL_ENCLOSED_FULL_STOP = 'decimalEnclosedFullstop';
//Decimal Numbers Enclosed in Parenthesis
const DECIMAL_ENCLOSED_PAREN = 'decimalEnclosedParen';
//Decimal Numbers Enclosed in a Circle
const DECIMAL_ENCLOSED_CIRCLE_CHINESE = 'decimalEnclosedCircleChinese';
//Ideographs Enclosed in a Circle
const IDEOGRAPHENCLOSEDCIRCLE = 'ideographEnclosedCircle';
//Traditional Ideograph Format
const IDEOGRAPH_TRADITIONAL = 'ideographTraditional';
//Zodiac Ideograph Format
const IDEOGRAPH_ZODIAC = 'ideographZodiac';
//Traditional Zodiac Ideograph Format
const IDEOGRAPH_ZODIAC_TRADITIONAL = 'ideographZodiacTraditional';
//Taiwanese Counting System
const TAIWANESE_COUNTING = 'taiwaneseCounting';
//Traditional Legal Ideograph Format
const IDEOGRAPH_LEGAL_TRADITIONAL = 'ideographLegalTraditional';
//Taiwanese Counting Thousand System
const TAIWANESE_COUNTING_THOUSAND = 'taiwaneseCountingThousand';
//Taiwanese Digital Counting System
const TAIWANESE_DIGITAL = 'taiwaneseDigital';
//Chinese Counting System
const CHINESE_COUNTING = 'chineseCounting';
//Chinese Legal Simplified Format
const CHINESE_LEGAL_SIMPLIFIED = 'chineseLegalSimplified';
//Chinese Counting Thousand System
const CHINESE_COUNTING_THOUSAND = 'chineseCountingThousand';
//Korean Digital Counting System
const KOREAN_DIGITAL = 'koreanDigital';
//Korean Counting System
const KOREAN_COUNTING = 'koreanCounting';
//Korean Legal Numbering
const KOREAN_LEGAL = 'koreanLegal';
//Korean Digital Counting System Alternate
const KOREAN_DIGITAL2 = 'koreanDigital2';
//Vietnamese Numerals
const VIETNAMESE_COUNTING = 'vietnameseCounting';
//Lowercase Russian Alphabet
const RUSSIAN_LOWER = 'russianLower';
//Uppercase Russian Alphabet
const RUSSIAN_UPPER = 'russianUpper';
//No Numbering
const NONE = 'none';
//Number With Dashes
const NUMBER_IN_DASH = 'numberInDash';
//Hebrew Numerals
const HEBREW1 = 'hebrew1';
//Hebrew Alphabet
const HEBREW2 = 'hebrew2';
//Arabic Alphabet
const ARABIC_ALPHA = 'arabicAlpha';
//Arabic Abjad Numerals
const ARABIC_ABJAD = 'arabicAbjad';
//Hindi Vowels
const HINDI_VOWELS = 'hindiVowels';
//Hindi Consonants
const HINDI_CONSONANTS = 'hindiConsonants';
//Hindi Numbers
const HINDI_NUMBERS = 'hindiNumbers';
//Hindi Counting System
const HINDI_COUNTING = 'hindiCounting';
//Thai Letters
const THAI_LETTERS = 'thaiLetters';
//Thai Numerals
const THAI_NUMBERS = 'thaiNumbers';
//Thai Counting System
const THAI_COUNTING = 'thaiCounting';
}

View File

@ -18,6 +18,7 @@
namespace PhpOffice\PhpWord\Style;
use PhpOffice\PhpWord\SimpleType\Jc;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
/**
* Numbering level definition
@ -43,7 +44,7 @@ class NumberingLevel extends AbstractStyle
private $start = 1;
/**
* Numbering format bullet|decimal|upperRoman|lowerRoman|upperLetter|lowerLetter
* Numbering format w:numFmt, one of PhpOffice\PhpWord\SimpleType\NumberFormat
*
* @var string
* @link http://www.schemacentral.com/sc/ooxml/t-w_ST_NumberFormat.html
@ -67,7 +68,7 @@ class NumberingLevel extends AbstractStyle
private $pStyle;
/**
* Content between numbering symbol and paragraph text
* Content between numbering symbol and paragraph text w:suff
*
* @var string tab|space|nothing
* @link http://www.schemacentral.com/sc/ooxml/e-w_suff-1.html
@ -83,7 +84,9 @@ class NumberingLevel extends AbstractStyle
private $text;
/**
* @var string
* Justification, w:lvlJc
*
* @var string, one of PhpOffice\PhpWord\SimpleType\Jc
*/
private $alignment = '';
@ -185,13 +188,12 @@ class NumberingLevel extends AbstractStyle
*/
public function setFormat($value)
{
$enum = array('bullet', 'decimal', 'upperRoman', 'lowerRoman', 'upperLetter', 'lowerLetter');
$this->format = $this->setEnumVal($value, $enum, $this->format);
$this->format = $this->setEnumVal($value, NumberFormat::values(), $this->format);
return $this;
}
/**
* Get start
* Get restart
*
* @return integer
*/
@ -201,7 +203,7 @@ class NumberingLevel extends AbstractStyle
}
/**
* Set start
* Set restart
*
* @param integer $value
* @return self

View File

@ -21,7 +21,6 @@ use PhpOffice\Common\XMLWriter;
use PhpOffice\PhpWord\Element\Section;
use PhpOffice\PhpWord\Writer\Word2007\Element\Container;
use PhpOffice\PhpWord\Writer\Word2007\Style\Section as SectionStyleWriter;
use PhpOffice\PhpWord\SimpleType\FootnoteProperties;
/**
* Word2007 document part writer: word/document.xml

View File

@ -15,9 +15,10 @@
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
namespace PhpOffice\PhpWord\SimpleType;
namespace PhpOffice\PhpWord\ComplexType;
use PhpOffice\PhpWord\SimpleType\FootnoteProperties;
use PhpOffice\PhpWord\ComplexType\FootnoteProperties;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
/**
* Test class for PhpOffice\PhpWord\SimpleType\FootnoteProperties
@ -34,12 +35,12 @@ class FootnotePropertiesTest extends \PHPUnit_Framework_TestCase
{
$footnoteProp = new FootnoteProperties();
$footnoteProp->setPos(FootnoteProperties::POSITION_DOC_END);
$footnoteProp->setNumFmt(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN);
$footnoteProp->setNumFmt(NumberFormat::LOWER_ROMAN);
$footnoteProp->setNumStart(2);
$footnoteProp->setNumRestart(FootnoteProperties::RESTART_NUMBER_EACH_PAGE);
$this->assertEquals(FootnoteProperties::POSITION_DOC_END, $footnoteProp->getPos());
$this->assertEquals(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN, $footnoteProp->getNumFmt());
$this->assertEquals(NumberFormat::LOWER_ROMAN, $footnoteProp->getNumFmt());
$this->assertEquals(2, $footnoteProp->getNumStart());
$this->assertEquals(FootnoteProperties::RESTART_NUMBER_EACH_PAGE, $footnoteProp->getNumRestart());
}
@ -52,7 +53,7 @@ class FootnotePropertiesTest extends \PHPUnit_Framework_TestCase
public function testWrongPos()
{
$footnoteProp= new FootnoteProperties();
$footnoteProp->setPos(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN);
$footnoteProp->setPos(NumberFormat::LOWER_ROMAN);
}
/**
@ -74,6 +75,6 @@ class FootnotePropertiesTest extends \PHPUnit_Framework_TestCase
public function testWrongNumRestart()
{
$footnoteProp= new FootnoteProperties();
$footnoteProp->setNumRestart(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN);
$footnoteProp->setNumRestart(NumberFormat::LOWER_ROMAN);
}
}

View File

@ -16,11 +16,12 @@
*/
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
use PhpOffice\PhpWord\ComplexType\FootnoteProperties;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\SimpleType\Jc;
use PhpOffice\PhpWord\Style\Font;
use PhpOffice\PhpWord\TestHelperDOCX;
use PhpOffice\PhpWord\SimpleType\FootnoteProperties;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
/**
* Test class for PhpOffice\PhpWord\Writer\Word2007\Part\Document
@ -65,7 +66,7 @@ class DocumentTest extends \PHPUnit_Framework_TestCase
{
$properties = new FootnoteProperties();
$properties->setPos(FootnoteProperties::POSITION_DOC_END);
$properties->setNumFmt(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN);
$properties->setNumFmt(NumberFormat::LOWER_ROMAN);
$properties->setNumStart(1);
$properties->setNumRestart(FootnoteProperties::RESTART_NUMBER_EACH_PAGE);
@ -79,7 +80,7 @@ class DocumentTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(FootnoteProperties::POSITION_DOC_END, $element->getAttribute('w:val'));
$element = $doc->getElement('/w:document/w:body/w:sectPr/w:footnotePr/w:numFmt');
$this->assertEquals(FootnoteProperties::NUMBER_FORMAT_LOWER_ROMAN, $element->getAttribute('w:val'));
$this->assertEquals(NumberFormat::LOWER_ROMAN, $element->getAttribute('w:val'));
$element = $doc->getElement('/w:document/w:body/w:sectPr/w:footnotePr/w:numStart');
$this->assertEquals(1, $element->getAttribute('w:val'));

View File

@ -19,6 +19,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Part;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\SimpleType\Jc;
use PhpOffice\PhpWord\TestHelperDOCX;
use PhpOffice\PhpWord\SimpleType\NumberFormat;
/**
* Test class for PhpOffice\PhpWord\Writer\Word2007\Part\Numbering
@ -52,7 +53,7 @@ class NumberingTest extends \PHPUnit_Framework_TestCase
'levels' => array(
array(
'start' => 1,
'format' => 'decimal',
'format' => NumberFormat::DECIMAL,
'restart' => 1,
'suffix' => 'space',
'text' => '%1.',