1: <?php
2: /**
3: * PHPWord
4: *
5: * Copyright (c) 2013 PHPWord
6: *
7: * This library is free software; you can redistribute it and/or
8: * modify it under the terms of the GNU Lesser General Public
9: * License as published by the Free Software Foundation; either
10: * version 2.1 of the License, or (at your option) any later version.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this library; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20: *
21: * @category PHPWord
22: * @package PHPWord
23: * @copyright Copyright (c) 2013 PHPWord
24: * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25: * @version 0.7.0
26: */
27:
28: /**
29: * PHPWord_Style_Tabs
30: */
31: class PHPWord_Style_Tab
32: {
33:
34: /**
35: * Tab Stop Type
36: *
37: * @var string
38: */
39: private $_val;
40:
41: /**
42: * Tab Leader Character
43: *
44: * @var string
45: */
46: private $_leader;
47:
48: /**
49: * Tab Stop Position
50: *
51: * @var int
52: */
53: private $_position;
54:
55: /**
56: * Tab Stop Type
57: *
58: * @var array
59: * @link http://www.schemacentral.com/sc/ooxml/a-w_val-26.html Tab Stop Type
60: */
61: private static $_possibleStopTypes = array(
62: 'clear', // No Tab Stop
63: 'left', // Left Tab Stop
64: 'center', // Center Tab Stop
65: 'right', // Right Tab Stop
66: 'decimal', // Decimal Tab
67: 'bar', // Bar Tab
68: 'num' // List tab
69: );
70:
71: /**
72: * Tab Leader Character
73: *
74: * @var array
75: * @link http://www.schemacentral.com/sc/ooxml/a-w_leader-1.html Tab Leader Character
76: */
77: private static $_possibleLeaders = array(
78: 'none', // No tab stop leader
79: 'dot', // Dotted leader line
80: 'hyphen', // Dashed tab stop leader line
81: 'underscore', // Solid leader line
82: 'heavy', // Heavy solid leader line
83: 'middleDot' // Middle dot leader line
84: );
85:
86: /**
87: * Create a new instance of PHPWord_Style_Tab. Both $val and $leader
88: * must conform to the values put forth in the schema. If they do not
89: * they will be changed to default values.
90: *
91: * @param string $val Defaults to 'clear' if value is not possible.
92: * @param int $position Must be an integer; otherwise defaults to 0.
93: * @param string $leader Defaults to NULL if value is not possible.
94: */
95: public function __construct($val = NULL, $position = 0, $leader = NULL)
96: {
97: // Default to clear if the stop type is not matched
98: $this->_val = (self::isStopType($val)) ? $val : 'clear';
99:
100: // Default to 0 if the position is non-numeric
101: $this->_position = (is_numeric($position)) ? intval($position) : 0;
102:
103: // Default to NULL if no tab leader
104: $this->_leader = (self::isLeaderType($leader)) ? $leader : NULL;
105: }
106:
107: /**
108: * Creates the XML DOM for the instance of PHPWord_Style_Tab.
109: *
110: * @param PHPWord_Shared_XMLWriter $objWriter
111: */
112: public function toXml(PHPWord_Shared_XMLWriter &$objWriter = NULL)
113: {
114: if (isset($objWriter)) {
115: $objWriter->startElement("w:tab");
116: $objWriter->writeAttribute("w:val", $this->_val);
117: if (!is_null($this->_leader)) {
118: $objWriter->writeAttribute("w:leader", $this->_leader);
119: }
120: $objWriter->writeAttribute("w:pos", $this->_position);
121: $objWriter->endElement();
122: }
123: }
124:
125: /**
126: * Test if attribute is a valid stop type.
127: *
128: * @param string $attribute
129: * @return bool True if it is; false otherwise.
130: */
131: private static function isStopType($attribute)
132: {
133: return in_array($attribute, self::$_possibleStopTypes);
134: }
135:
136: /**
137: * Test if attribute is a valid leader type.
138: *
139: * @param string $attribute
140: * @return bool True if it is; false otherwise.
141: */
142: private static function isLeaderType($attribute)
143: {
144: return in_array($attribute, self::$_possibleLeaders);
145: }
146: }