--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Text/Table/Column.php Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,243 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Text_Table
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Column.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+/**
+ * @see Zend_Text_Table
+ */
+require_once 'Zend/Text/Table.php';
+
+/**
+ * @see Zend_Text_MultiByte
+ */
+require_once 'Zend/Text/MultiByte.php';
+
+/**
+ * Column class for Zend_Text_Table_Row
+ *
+ * @category Zend
+ * @package Zend_Text_Table
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Text_Table_Column
+{
+ /**
+ * Aligns for columns
+ */
+ const ALIGN_LEFT = 'left';
+ const ALIGN_CENTER = 'center';
+ const ALIGN_RIGHT = 'right';
+
+ /**
+ * Content of the column
+ *
+ * @var string
+ */
+ protected $_content = '';
+
+ /**
+ * Align of the column
+ *
+ * @var string
+ */
+ protected $_align = self::ALIGN_LEFT;
+
+ /**
+ * Colspan of the column
+ *
+ * @var integer
+ */
+ protected $_colSpan = 1;
+
+ /**
+ * Allowed align parameters
+ *
+ * @var array
+ */
+ protected $_allowedAligns = array(self::ALIGN_LEFT, self::ALIGN_CENTER, self::ALIGN_RIGHT);
+
+ /**
+ * Create a column for a Zend_Text_Table_Row object.
+ *
+ * @param string $content The content of the column
+ * @param string $align The align of the content
+ * @param integer $colSpan The colspan of the column
+ * @param string $charset The encoding of the content
+ */
+ public function __construct($content = null, $align = null, $colSpan = null, $charset = null)
+ {
+ if ($content !== null) {
+ $this->setContent($content, $charset);
+ }
+
+ if ($align !== null) {
+ $this->setAlign($align);
+ }
+
+ if ($colSpan !== null) {
+ $this->setColSpan($colSpan);
+ }
+ }
+
+ /**
+ * Set the content.
+ *
+ * If $charset is not defined, it is assumed that $content is encoded in
+ * the charset defined via Zend_Text_Table::setInputCharset() (defaults
+ * to utf-8).
+ *
+ * @param string $content Content of the column
+ * @param string $charset The charset of the content
+ * @throws Zend_Text_Table_Exception When $content is not a string
+ * @return Zend_Text_Table_Column
+ */
+ public function setContent($content, $charset = null)
+ {
+ if (is_string($content) === false) {
+ require_once 'Zend/Text/Table/Exception.php';
+ throw new Zend_Text_Table_Exception('$content must be a string');
+ }
+
+ if ($charset === null) {
+ $inputCharset = Zend_Text_Table::getInputCharset();
+ } else {
+ $inputCharset = strtolower($charset);
+ }
+
+ $outputCharset = Zend_Text_Table::getOutputCharset();
+
+ if ($inputCharset !== $outputCharset) {
+ if (PHP_OS !== 'AIX') {
+ // AIX does not understand these character sets
+ $content = iconv($inputCharset, $outputCharset, $content);
+ }
+
+ }
+
+ $this->_content = $content;
+
+ return $this;
+ }
+
+ /**
+ * Set the align
+ *
+ * @param string $align Align of the column
+ * @throws Zend_Text_Table_Exception When supplied align is invalid
+ * @return Zend_Text_Table_Column
+ */
+ public function setAlign($align)
+ {
+ if (in_array($align, $this->_allowedAligns) === false) {
+ require_once 'Zend/Text/Table/Exception.php';
+ throw new Zend_Text_Table_Exception('Invalid align supplied');
+ }
+
+ $this->_align = $align;
+
+ return $this;
+ }
+
+ /**
+ * Set the colspan
+ *
+ * @param int $colSpan
+ * @throws Zend_Text_Table_Exception When $colSpan is smaller than 1
+ * @return Zend_Text_Table_Column
+ */
+ public function setColSpan($colSpan)
+ {
+ if (is_int($colSpan) === false or $colSpan < 1) {
+ require_once 'Zend/Text/Table/Exception.php';
+ throw new Zend_Text_Table_Exception('$colSpan must be an integer and greater than 0');
+ }
+
+ $this->_colSpan = $colSpan;
+
+ return $this;
+ }
+
+ /**
+ * Get the colspan
+ *
+ * @return integer
+ */
+ public function getColSpan()
+ {
+ return $this->_colSpan;
+ }
+
+ /**
+ * Render the column width the given column width
+ *
+ * @param integer $columnWidth The width of the column
+ * @param integer $padding The padding for the column
+ * @throws Zend_Text_Table_Exception When $columnWidth is lower than 1
+ * @throws Zend_Text_Table_Exception When padding is greater than columnWidth
+ * @return string
+ */
+ public function render($columnWidth, $padding = 0)
+ {
+ if (is_int($columnWidth) === false or $columnWidth < 1) {
+ require_once 'Zend/Text/Table/Exception.php';
+ throw new Zend_Text_Table_Exception('$columnWidth must be an integer and greater than 0');
+ }
+
+ $columnWidth -= ($padding * 2);
+
+ if ($columnWidth < 1) {
+ require_once 'Zend/Text/Table/Exception.php';
+ throw new Zend_Text_Table_Exception('Padding (' . $padding . ') is greater than column width');
+ }
+
+ switch ($this->_align) {
+ case self::ALIGN_LEFT:
+ $padMode = STR_PAD_RIGHT;
+ break;
+
+ case self::ALIGN_CENTER:
+ $padMode = STR_PAD_BOTH;
+ break;
+
+ case self::ALIGN_RIGHT:
+ $padMode = STR_PAD_LEFT;
+ break;
+
+ default:
+ // This can never happen, but the CS tells I have to have it ...
+ break;
+ }
+
+ $outputCharset = Zend_Text_Table::getOutputCharset();
+ $lines = explode("\n", Zend_Text_MultiByte::wordWrap($this->_content, $columnWidth, "\n", true, $outputCharset));
+ $paddedLines = array();
+
+ foreach ($lines AS $line) {
+ $paddedLines[] = str_repeat(' ', $padding)
+ . Zend_Text_MultiByte::strPad($line, $columnWidth, ' ', $padMode, $outputCharset)
+ . str_repeat(' ', $padding);
+ }
+
+ $result = implode("\n", $paddedLines);
+
+ return $result;
+ }
+}