23 const TOKEN_REGEX =
'(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)';
49 parent::__construct($name, $encoder, $grammar);
50 $this->_paramEncoder = $paramEncoder;
63 return self::TYPE_PARAMETERIZED;
73 parent::setCharset($charset);
74 if (isset($this->_paramEncoder)) {
75 $this->_paramEncoder->charsetChanged($charset);
101 return array_key_exists($parameter, $params)
102 ? $params[$parameter]
114 $this->_params = $parameters;
134 $body = parent::getFieldBody();
135 foreach ($this->_params as $name => $value) {
136 if (!is_null($value)) {
138 $body .=
'; '.$this->_createParameter($name, $value);
157 $tokens = parent::toTokens(parent::getFieldBody());
160 foreach ($this->_params as $name => $value) {
161 if (!is_null($value)) {
163 $tokens[count($tokens) - 1] .=
';';
188 $firstLineOffset = 0;
191 if (!preg_match(
'/^'.self::TOKEN_REGEX.
'$/D', $value)) {
194 if (!preg_match(
'/^'.$this->
getGrammar()->getDefinition(
'text').
'*$/D', $value)) {
198 $firstLineOffset = strlen(
205 if (
$encoded || strlen($value) > $maxValueLength) {
206 if (isset($this->_paramEncoder)) {
207 $value = $this->_paramEncoder->encodeString(
208 $origValue, $firstLineOffset, $maxValueLength, $this->
getCharset()
217 $valueLines = isset($this->_paramEncoder) ? explode(
"\r\n", $value) : array($value);
220 if (count($valueLines) > 1) {
221 $paramLines = array();
222 foreach ($valueLines as $i => $line) {
223 $paramLines[] = $name.
'*'.$i.
227 return implode(
";\r\n ", $paramLines);
229 return $name.$this->_getEndOfParameterValue(
246 if (!preg_match(
'/^'.self::TOKEN_REGEX.
'$/D', $value)) {
247 $value =
'"'.$value.
'"';
253 $prepend =
'*='.$this->getCharset().
"'".$this->
getLanguage().
258 return $prepend.$value;