vendor/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
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
 * This file is part of SwiftMailer.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * (c) 2004-2009 Chris Corbyn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * An abstract base MIME Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * @package Swift
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * @subpackage Mime
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @author Chris Corbyn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
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
   * The name of this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
  private $_name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
   * The Grammar used for this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
   * @var Swift_Mime_Grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  private $_grammar;
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 Encoder used to encode this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
   * @var Swift_Encoder
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 $_encoder;
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
   * The maximum length of a line in the header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
   * @var int
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 $_lineLength = 78;
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 language used in this Header.
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
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  private $_lang;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
   * The character set of the text in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
  private $_charset = 'utf-8';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
   * The value of this Header, cached.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
   * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
  private $_cachedValue = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
   * Creates a new Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
   * @param Swift_Mime_Grammar $grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
   */ 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
  public function __construct(Swift_Mime_Grammar $grammar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    $this->setGrammar($grammar);
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
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
   * Set the character set used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
   * @param string $charset
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
  public function setCharset($charset)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    $this->clearCachedValueIf($charset != $this->_charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    $this->_charset = $charset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    if (isset($this->_encoder))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
      $this->_encoder->charsetChanged($charset);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    }
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
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
   * Get the character set used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
  public function getCharset()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    return $this->_charset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
   * Set the language used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
   * For example, for US English, 'en-us'.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
   * This can be unspecified.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
   * @param string $lang
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
  public function setLanguage($lang)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    $this->clearCachedValueIf($this->_lang != $lang);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    $this->_lang = $lang;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
  }
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
   * Get the language used in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
   * @return string
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 getLanguage()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    return $this->_lang;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
   * Set the encoder used for encoding the header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
   * @param Swift_Mime_HeaderEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
  public function setEncoder(Swift_Mime_HeaderEncoder $encoder)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    $this->_encoder = $encoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    $this->setCachedValue(null);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
   * Get the encoder used for encoding this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
   * @return Swift_Mime_HeaderEncoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
  public function getEncoder()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    return $this->_encoder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
   * Set the grammar used for the header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
   * @param Swift_Mime_Grammar $grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
  public function setGrammar(Swift_Mime_Grammar $grammar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    $this->_grammar = $grammar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    $this->setCachedValue(null);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
   * Get the grammar used for this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
   * @return Swift_Mime_Grammar
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
  public function getGrammar()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    return $this->_grammar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
  }
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
   * Get the name of this header (e.g. charset).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
  public function getFieldName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    return $this->_name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
   * Set the maximum length of lines in the header (excluding EOL).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
   * @param int $lineLength
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
  public function setMaxLineLength($lineLength)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    $this->clearCachedValueIf($this->_lineLength != $lineLength);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    $this->_lineLength = $lineLength;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
   * Get the maximum permitted length of lines in this Header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
   * @return int
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
  public function getMaxLineLength()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    return $this->_lineLength;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
   * Get this Header rendered as a RFC 2822 compliant string.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
   * @throws Swift_RfcComplianceException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
  public function toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
    return $this->_tokensToString($this->toTokens());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
   * Returns a string representation of this object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
   *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
   * @see toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
  public function __toString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    return $this->toString();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
  // -- Points of extension
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
   * Set the name of this Header field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
   * @param string $name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
  protected function setFieldName($name)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    $this->_name = $name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
   * Produces a compliant, formatted RFC 2822 'phrase' based on the string given.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
   * @param Swift_Mime_Header $header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
   * @param string $string as displayed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
   * @param string $charset of the text
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
   * @param Swift_Mime_HeaderEncoder $encoder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
   * @param boolean $shorten the first line to make remove for header name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
  protected function createPhrase(Swift_Mime_Header $header, $string, $charset,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
    Swift_Mime_HeaderEncoder $encoder = null, $shorten = false)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    //Treat token as exactly what was given
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    $phraseStr = $string;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    //If it's not valid
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    if (!preg_match('/^' . $this->getGrammar()->getDefinition('phrase') . '$/D', $phraseStr))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
      // .. but it is just ascii text, try escaping some characters
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
      // and make it a quoted-string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
      if (preg_match('/^' . $this->getGrammar()->getDefinition('text') . '*$/D', $phraseStr))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
        $phraseStr = $this->getGrammar()->escapeSpecials(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
          $phraseStr, array('"'), $this->getGrammar()->getSpecials()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
          );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
        $phraseStr = '"' . $phraseStr . '"';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
      else // ... otherwise it needs encoding
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
        //Determine space remaining on line if first line
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        if ($shorten)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
          $usedLength = strlen($header->getFieldName() . ': ');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
        else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
          $usedLength = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
        $phraseStr = $this->encodeWords($header, $string, $usedLength);
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
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    return $phraseStr;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
   * Encode needed word tokens within a string of input.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
   * @param string $input
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
   * @param string $usedLength, optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
  protected function encodeWords(Swift_Mime_Header $header, $input,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
    $usedLength = -1)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
    $value = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
    $tokens = $this->getEncodableWordTokens($input);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
    foreach ($tokens as $token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
      //See RFC 2822, Sect 2.2 (really 2.2 ??)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
      if ($this->tokenNeedsEncoding($token))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        //Don't encode starting WSP
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        $firstChar = substr($token, 0, 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        switch($firstChar)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
          case ' ':
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
          case "\t":
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
            $value .= $firstChar;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
            $token = substr($token, 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
        if (-1 == $usedLength)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
          $usedLength = strlen($header->getFieldName() . ': ') + strlen($value);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
        $value .= $this->getTokenAsEncodedWord($token, $usedLength);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
        $header->setMaxLineLength(76); //Forefully override
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
      else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
        $value .= $token;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
    return $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
   * Test if a token needs to be encoded or not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
   * @param string $token
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
   * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
  protected function tokenNeedsEncoding($token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
    return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
   * Splits a string into tokens in blocks of words which can be encoded quickly.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
   * @param string $string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
   * @return string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
  protected function getEncodableWordTokens($string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
    $tokens = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
    $encodedToken = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
    //Split at all whitespace boundaries
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
    foreach (preg_split('~(?=[\t ])~', $string) as $token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
      if ($this->tokenNeedsEncoding($token))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
        $encodedToken .= $token;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
      else
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
        if (strlen($encodedToken) > 0)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
        {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
          $tokens[] = $encodedToken;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
          $encodedToken = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
        $tokens[] = $token;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
    if (strlen($encodedToken))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
      $tokens[] = $encodedToken;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    return $tokens;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
   * Get a token as an encoded word for safe insertion into headers.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
   * @param string $token to encode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
   * @param int $firstLineOffset, optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
  protected function getTokenAsEncodedWord($token, $firstLineOffset = 0)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    //Adjust $firstLineOffset to account for space needed for syntax
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
    $charsetDecl = $this->_charset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
    if (isset($this->_lang))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
      $charsetDecl .= '*' . $this->_lang;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
    $encodingWrapperLength = strlen(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
      '=?' . $charsetDecl . '?' . $this->_encoder->getName() . '??='
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
      );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    if ($firstLineOffset >= 75) //Does this logic need to be here?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
      $firstLineOffset = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
    $encodedTextLines = explode("\r\n",
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
      $this->_encoder->encodeString(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
        $token, $firstLineOffset, 75 - $encodingWrapperLength
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
        )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
      );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
    foreach ($encodedTextLines as $lineNum => $line)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
      $encodedTextLines[$lineNum] = '=?' . $charsetDecl .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
        '?' . $this->_encoder->getName() .
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
        '?' . $line . '?=';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
    return implode("\r\n ", $encodedTextLines);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
   * Generates tokens from the given string which include CRLF as individual tokens.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
   * @param string $token
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
   * @return string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
  protected function generateTokenLines($token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
    return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
   * Set a value into the cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
   * @param string $value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
  protected function setCachedValue($value)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
    $this->_cachedValue = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
   * Get the value in the cache.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
  protected function getCachedValue()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    return $this->_cachedValue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
   * Clear the cached value if $condition is met.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
   * @param boolean $condition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
   * @access protected
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
  protected function clearCachedValueIf($condition)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
    if ($condition)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
      $this->setCachedValue(null);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
  // -- Private methods
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
   * Generate a list of all tokens in the final header.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
   * @param string $string input, optional
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
   * @return string[]
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
  protected function toTokens($string = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
    if (is_null($string))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
      $string = $this->getFieldBody();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
    $tokens = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
    //Generate atoms; split at all invisible boundaries followed by WSP
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
    foreach (preg_split('~(?=[ \t])~', $string) as $token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
      $tokens = array_merge($tokens, $this->generateTokenLines($token));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
    return $tokens;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
  /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
   * Takes an array of tokens which appear in the header and turns them into
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
   * an RFC 2822 compliant string, adding FWSP where needed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
   * @param string[] $tokens
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
   * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
   * @access private
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
   */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
  private function _tokensToString(array $tokens)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
  {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
    $lineCount = 0;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
    $headerLines = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
    $headerLines[] = $this->_name . ': ';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
    $currentLine =& $headerLines[$lineCount++];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
    //Build all tokens back into compliant header
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
    foreach ($tokens as $i => $token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
      //Line longer than specified maximum or token was just a new line
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
      if (("\r\n" == $token) ||
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
        ($i > 0 && strlen($currentLine . $token) > $this->_lineLength)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
        && 0 < strlen($currentLine))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
        $headerLines[] = '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
        $currentLine =& $headerLines[$lineCount++];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
      
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
      //Append token to the line
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
      if ("\r\n" != $token)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
      {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
        $currentLine .= $token;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
      }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
    //Implode with FWS (RFC 2822, 2.2.3)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
    return implode("\r\n", $headerLines) . "\r\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
  }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
  
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
}