* @author Ryan Butterfield * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id$ */ final class Zend_Media_Id3_Frame_Wxxx extends Zend_Media_Id3_LinkFrame implements Zend_Media_Id3_Encoding { /** @var integer */ private $_encoding; /** @var string */ private $_description; /** * Constructs the class with given parameters and parses object related * data. * * @param Zend_Io_Reader $reader The reader object. * @param Array $options The options array. */ public function __construct($reader = null, &$options = array()) { Zend_Media_Id3_Frame::__construct($reader, $options); $this->setEncoding ($this->getOption('encoding', Zend_Media_Id3_Encoding::UTF8)); if ($this->_reader === null) { return; } $encoding = $this->_reader->readUInt8(); switch ($encoding) { case self::UTF16: // break intentionally omitted case self::UTF16BE: list($this->_description, $this->_link) = $this->_explodeString16 ($this->_reader->read($this->_reader->getSize()), 2); break; case self::UTF8: // break intentionally omitted default: list($this->_description, $this->_link) = $this->_explodeString8 ($this->_reader->read($this->_reader->getSize()), 2); break; } $this->_description = $this->_convertString($this->_description, $encoding); $this->_link = implode($this->_explodeString8($this->_link, 1), ''); } /** * Returns the text encoding. * * All the strings read from a file are automatically converted to the * character encoding specified with the encoding option. See * {@link Zend_Media_Id3v2} for details. This method returns that character * encoding, or any value set after read, translated into a string form * regarless if it was set using a {@link Zend_Media_Id3_Encoding} constant * or a string. * * @return integer */ public function getEncoding() { return $this->_translateIntToEncoding($this->_encoding); } /** * Sets the text encoding. * * All the string written to the frame are done so using given character * encoding. No conversions of existing data take place upon the call to * this method thus all texts must be given in given character encoding. * * The character encoding parameter takes either a * {@link Zend_Media_Id3_Encoding} constant or a character set name string * in the form accepted by iconv. The default character encoding used to * write the frame is 'utf-8'. * * @see Zend_Media_Id3_Encoding * @param integer $encoding The text encoding. */ public function setEncoding($encoding) { $this->_encoding = $this->_translateEncodingToInt($encoding); } /** * Returns the link description. * * @return string */ public function getDescription() { return $this->_description; } /** * Sets the content description text using given encoding. * * @param string $description The content description text. * @param integer $encoding The text encoding. */ public function setDescription($description, $encoding = null) { $this->_description = $description; if ($encoding !== null) { $this->setEncoding($encoding); } } /** * Writes the frame raw data without the header. * * @param Zend_Io_Writer $writer The writer object. * @return void */ protected function _writeFrame($writer) { $writer->writeUInt8($this->_encoding); switch ($this->_encoding) { case self::UTF16LE: $writer->writeString16 ($this->_description, Zend_Io_Writer::LITTLE_ENDIAN_ORDER, 1); break; case self::UTF16: // break intentionally omitted case self::UTF16BE: $writer->writeString16($this->_description, null, 1); break; default: $writer->writeString8($this->_description, 1); break; } $writer->write($this->_link); } }