vendor/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php
author cavaliet
Mon, 07 Jul 2014 17:23:47 +0200
changeset 122 d672f7dd74dc
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
Added tag V00.17 for changeset ada5f3d8b5b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 CharacterStream implementation using an array in Swift Mailer.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 This program is free software: you can redistribute it and/or modify
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 it under the terms of the GNU General Public License as published by
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 the Free Software Foundation, either version 3 of the License, or
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 (at your option) any later version.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 This program is distributed in the hope that it will be useful,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 but WITHOUT ANY WARRANTY; without even the implied warranty of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 GNU General Public License for more details.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 You should have received a copy of the GNU General Public License
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * A CharacterStream implementation which stores characters in an internal array.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * @package Swift
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * @subpackage CharacterStream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * @author Xavier De Cock <xdecock@gmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
Class Swift_CharacterStream_NgCharacterStream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
  implements Swift_CharacterStream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
   * The char reader (lazy-loaded) for the current charset.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
   * @var Swift_CharacterReader
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  private $_charReader;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
   * A factory for creatiing CharacterReader instances.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
   * @var Swift_CharacterReaderFactory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
  private $_charReaderFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
   * The character set this stream is using.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  private $_charset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
   * The datas stored as is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
  private $_datas = "";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
   * Number of bytes in the stream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
   * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
  private $_datasSize = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
   * Map
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
   * @var mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
  private $_map;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
   * Map Type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
   * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
  private $_mapType = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
   * Number of characters in the stream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
   * @var int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
  private $_charCount = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
   * Position in the stream
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
   * @var unknown_type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
  private $_currentPos = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
   * The constructor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
   * @param Swift_CharacterReaderFactory $factory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
   * @param unknown_type $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
  public function __construct(Swift_CharacterReaderFactory $factory,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    $charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    $this->setCharacterReaderFactory($factory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    $this->setCharacterSet($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
  /* -- Changing parameters of the stream -- */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
   * Set the character set used in this CharacterStream.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
   * @param string $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
  public function setCharacterSet($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    $this->_charset = $charset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    $this->_charReader = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
  	$this->_mapType = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
   * Set the CharacterReaderFactory for multi charset support.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
   * @param Swift_CharacterReaderFactory $factory
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
  public function setCharacterReaderFactory(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    Swift_CharacterReaderFactory $factory)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    $this->_charReaderFactory = $factory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
   * @see Swift_CharacterStream::flushContents()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
  public function flushContents()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
  	$this->_datas = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
  	$this->_map = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
  	$this->_charCount = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
  	$this->_currentPos = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
  	$this->_datasSize = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
   * @see Swift_CharacterStream::importByteStream()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
   * @param Swift_OutputByteStream $os
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
  public function importByteStream(Swift_OutputByteStream $os)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
    $this->flushContents();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    $blocks=512;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    $os->setReadPointer(0);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    while(false!==($read = $os->read($blocks)))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
      $this->write($read);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
   * @see Swift_CharacterStream::importString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
   * @param string $string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
  public function importString($string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
    $this->flushContents();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    $this->write($string);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
   * @see Swift_CharacterStream::read()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
   * @param int $length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
  public function read($length)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
  	if ($this->_currentPos>=$this->_charCount)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
  	{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
  	  return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
  	}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
  	$ret=false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
  	$length = ($this->_currentPos+$length > $this->_charCount)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
  	  ? $this->_charCount - $this->_currentPos
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
  	  : $length;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
  	  switch ($this->_mapType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
  	{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
      case Swift_CharacterReader::MAP_TYPE_FIXED_LEN:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        $len = $length*$this->_map;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
        $ret = substr($this->_datas,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
            $this->_currentPos * $this->_map,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
            $len);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        $this->_currentPos += $length;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
      
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
      case Swift_CharacterReader::MAP_TYPE_INVALID:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        $end = $this->_currentPos + $length;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        $end = $end > $this->_charCount
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
          ?$this->_charCount
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
          :$end;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        $ret = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
        for (; $this->_currentPos < $length; ++$this->_currentPos)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
          if (isset ($this->_map[$this->_currentPos]))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
            $ret .= '?';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
          else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
          {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
            $ret .= $this->_datas[$this->_currentPos];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
        break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
      
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
      case Swift_CharacterReader::MAP_TYPE_POSITIONS:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        $end = $this->_currentPos + $length;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
        $end = $end > $this->_charCount
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
          ?$this->_charCount
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
          :$end;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        $ret = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        $start = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        if ($this->_currentPos>0)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
          $start = $this->_map['p'][$this->_currentPos-1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
        $to = $start;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
        for (; $this->_currentPos < $end; ++$this->_currentPos)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
          if (isset($this->_map['i'][$this->_currentPos])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
          	$ret .= substr($this->_datas, $start, $to - $start).'?';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
          	$start = $this->_map['p'][$this->_currentPos];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
          } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
          	$to = $this->_map['p'][$this->_currentPos];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
          }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        $ret .= substr($this->_datas, $start, $to - $start);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
  	}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
  	return $ret;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
   * @see Swift_CharacterStream::readBytes()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
   * @param int $length
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
   * @return int[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
  public function readBytes($length)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
    $read=$this->read($length);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
  	if ($read!==false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
  	{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
      $ret = array_map('ord', str_split($read, 1));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
      return $ret;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
  	}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
  	return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
   * @see Swift_CharacterStream::setPointer()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
   * @param int $charOffset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
  public function setPointer($charOffset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
  	if ($this->_charCount<$charOffset){
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
  		$charOffset=$this->_charCount;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
  	}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
  	$this->_currentPos = $charOffset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
   * @see Swift_CharacterStream::write()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
   * @param string $chars
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
  public function write($chars)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
  	if (!isset($this->_charReader))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
      $this->_charReader = $this->_charReaderFactory->getReaderFor(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        $this->_charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
      $this->_map = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
      $this->_mapType = $this->_charReader->getMapType();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
  	$ignored='';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
  	$this->_datas .= $chars;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
    $this->_charCount += $this->_charReader->getCharPositions(substr($this->_datas, $this->_datasSize), $this->_datasSize, $this->_map, $ignored);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
    if ($ignored!==false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
      $this->_datasSize=strlen($this->_datas)-strlen($ignored);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
    else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
      $this->_datasSize=strlen($this->_datas);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
}