vendor/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2004-2009 Chris Corbyn
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+
+/**
+ * Handles RFC 2231 specified Encoding in Swift Mailer.
+ * @package Swift
+ * @subpackage Encoder
+ * @author Chris Corbyn
+ */
+class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
+{
+  
+  /**
+   * A character stream to use when reading a string as characters instead of bytes.
+   * @var Swift_CharacterStream
+   * @access private
+   */
+  private $_charStream;
+  
+  /**
+   * Creates a new Rfc2231Encoder using the given character stream instance.
+   * @param Swift_CharacterStream
+   */
+  public function __construct(Swift_CharacterStream $charStream)
+  {
+    $this->_charStream = $charStream;
+  }
+  
+  /**
+   * Takes an unencoded string and produces a string encoded according to
+   * RFC 2231 from it.
+   * @param string $string to encode
+   * @param int $firstLineOffset
+   * @param int $maxLineLength, optional, 0 indicates the default of 75 bytes
+   * @return string
+   */
+  public function encodeString($string, $firstLineOffset = 0,
+    $maxLineLength = 0)
+  {
+    $lines = array(); $lineCount = 0;
+    $lines[] = '';
+    $currentLine =& $lines[$lineCount++];
+    
+    if (0 >= $maxLineLength)
+    {
+      $maxLineLength = 75;
+    }
+    
+    $this->_charStream->flushContents();
+    $this->_charStream->importString($string);
+    
+    $thisLineLength = $maxLineLength - $firstLineOffset;
+    
+    while (false !== $char = $this->_charStream->read(4))
+    {
+      $encodedChar = rawurlencode($char);
+      if (0 != strlen($currentLine)
+        && strlen($currentLine . $encodedChar) > $thisLineLength)
+      {
+        $lines[] = '';
+        $currentLine =& $lines[$lineCount++];
+        $thisLineLength = $maxLineLength;
+      }
+      $currentLine .= $encodedChar;
+    }
+    
+    return implode("\r\n", $lines);
+  }
+  
+  /**
+   * Updates the charset used.
+   * @param string $charset
+   */
+  public function charsetChanged($charset)
+  {
+    $this->_charStream->setCharacterSet($charset);
+  }
+  
+}