ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
Sabre\VObject\Parser\MimeDir Class Reference

MimeDir parser. More...

+ Inheritance diagram for Sabre\VObject\Parser\MimeDir:
+ Collaboration diagram for Sabre\VObject\Parser\MimeDir:

Public Member Functions

 parse ($input=null, $options=0)
 Parses an iCalendar or vCard file. More...
 
 setCharset ($charset)
 By default all input will be assumed to be UTF-8. More...
 
 setInput ($input)
 Sets the input buffer. More...
 
- Public Member Functions inherited from Sabre\VObject\Parser\Parser
 __construct ($input=null, $options=0)
 Creates the parser. More...
 
 parse ($input=null, $options=0)
 This method starts the parsing process. More...
 
 setInput ($input)
 Sets the input data. More...
 

Static Public Member Functions

static unescapeValue ($input, $delimiter=';')
 Unescapes a property value. More...
 

Protected Member Functions

 parseDocument ()
 Parses an entire document. More...
 
 parseLine ($line)
 Parses a line, and if it hits a component, it will also attempt to parse the entire component. More...
 
 readLine ()
 Reads a single line from the buffer. More...
 
 readProperty ($line)
 Reads a property or component from a line. More...
 

Protected Attributes

 $input
 
 $root
 
 $charset = 'UTF-8'
 
 $lineBuffer
 
 $lineIndex = 0
 The real current line number. More...
 
 $startLine = 0
 
 $rawLine
 
- Protected Attributes inherited from Sabre\VObject\Parser\Parser
 $options
 

Static Protected Attributes

static $SUPPORTED_CHARSETS
 The list of character sets we support when decoding. More...
 

Private Member Functions

 unescapeParam ($input)
 Unescapes a parameter value. More...
 
 extractQuotedPrintableValue ()
 Gets the full quoted printable value. More...
 

Additional Inherited Members

- Data Fields inherited from Sabre\VObject\Parser\Parser
const OPTION_FORGIVING = 1
 Turning on this option makes the parser more forgiving. More...
 
const OPTION_IGNORE_INVALID_LINES = 2
 If this option is turned on, any lines we cannot parse will be ignored by the reader. More...
 

Detailed Description

MimeDir parser.

This class parses iCalendar 2.0 and vCard 2.1, 3.0 and 4.0 files. This parser will return one of the following two objects from the parse method:

Sabre Sabre

Author
Evert Pot (http://evertpot.com/) http://sabre.io/license/ Modified BSD License

Definition at line 25 of file MimeDir.php.

Member Function Documentation

◆ extractQuotedPrintableValue()

Sabre\VObject\Parser\MimeDir::extractQuotedPrintableValue ( )
private

Gets the full quoted printable value.

We need a special method for this, because newlines have both a meaning in vCards, and in QuotedPrintable.

This method does not do any decoding.

Returns
string

Definition at line 661 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$rawLine, and Sabre\VObject\Parser\MimeDir\readLine().

Referenced by Sabre\VObject\Parser\MimeDir\readProperty().

661  {
662 
663  // We need to parse the raw line again to get the start of the value.
664  //
665  // We are basically looking for the first colon (:), but we need to
666  // skip over the parameters first, as they may contain one.
667  $regex = '/^
668  (?: [^:])+ # Anything but a colon
669  (?: "[^"]")* # A parameter in double quotes
670  : # start of the value we really care about
671  (.*)$
672  /xs';
673 
674  preg_match($regex, $this->rawLine, $matches);
675 
676  $value = $matches[1];
677  // Removing the first whitespace character from every line. Kind of
678  // like unfolding, but we keep the newline.
679  $value = str_replace("\n ", "\n", $value);
680 
681  // Microsoft products don't always correctly fold lines, they may be
682  // missing a whitespace. So if 'forgiving' is turned on, we will take
683  // those as well.
684  if ($this->options & self::OPTION_FORGIVING) {
685  while (substr($value, -1) === '=') {
686  // Reading the line
687  $this->readLine();
688  // Grabbing the raw form
689  $value .= "\n" . $this->rawLine;
690  }
691  }
692 
693  return $value;
694 
695  }
readLine()
Reads a single line from the buffer.
Definition: MimeDir.php:284
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse()

Sabre\VObject\Parser\MimeDir::parse (   $input = null,
  $options = 0 
)

Parses an iCalendar or vCard file.

Pass a stream or a string. If null is parsed, the existing buffer is used.

Parameters
string | resource | null$input
int$options
Returns
Sabre

Definition at line 77 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$input, Sabre\VObject\Parser\Parser\$options, Sabre\VObject\Parser\MimeDir\$root, Sabre\VObject\Parser\MimeDir\parseDocument(), and Sabre\VObject\Parser\MimeDir\setInput().

77  {
78 
79  $this->root = null;
80 
81  if (!is_null($input)) {
82  $this->setInput($input);
83  }
84 
85  if (0 !== $options) {
86  $this->options = $options;
87  }
88 
89  $this->parseDocument();
90 
91  return $this->root;
92 
93  }
setInput($input)
Sets the input buffer.
Definition: MimeDir.php:123
parseDocument()
Parses an entire document.
Definition: MimeDir.php:148
+ Here is the call graph for this function:

◆ parseDocument()

Sabre\VObject\Parser\MimeDir::parseDocument ( )
protected

Parses an entire document.

Returns
void

Definition at line 148 of file MimeDir.php.

References Sabre\VObject\Component\VCalendar\$componentMap, Sabre\VObject\Component\VCard\$componentMap, $name, $result, Sabre\VObject\Parser\MimeDir\parseLine(), and Sabre\VObject\Parser\MimeDir\readLine().

Referenced by Sabre\VObject\Parser\MimeDir\parse().

148  {
149 
150  $line = $this->readLine();
151 
152  // BOM is ZERO WIDTH NO-BREAK SPACE (U+FEFF).
153  // It's 0xEF 0xBB 0xBF in UTF-8 hex.
154  if (3 <= strlen($line)
155  && ord($line[0]) === 0xef
156  && ord($line[1]) === 0xbb
157  && ord($line[2]) === 0xbf) {
158  $line = substr($line, 3);
159  }
160 
161  switch (strtoupper($line)) {
162  case 'BEGIN:VCALENDAR' :
163  $class = VCalendar::$componentMap['VCALENDAR'];
164  break;
165  case 'BEGIN:VCARD' :
166  $class = VCard::$componentMap['VCARD'];
167  break;
168  default :
169  throw new ParseException('This parser only supports VCARD and VCALENDAR files');
170  }
171 
172  $this->root = new $class([], false);
173 
174  while (true) {
175 
176  // Reading until we hit END:
177  $line = $this->readLine();
178  if (strtoupper(substr($line, 0, 4)) === 'END:') {
179  break;
180  }
181  $result = $this->parseLine($line);
182  if ($result) {
183  $this->root->add($result);
184  }
185 
186  }
187 
188  $name = strtoupper(substr($line, 4));
189  if ($name !== $this->root->name) {
190  throw new ParseException('Invalid MimeDir file. expected: "END:' . $this->root->name . '" got: "END:' . $name . '"');
191  }
192 
193  }
$result
readLine()
Reads a single line from the buffer.
Definition: MimeDir.php:284
parseLine($line)
Parses a line, and if it hits a component, it will also attempt to parse the entire component...
Definition: MimeDir.php:203
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parseLine()

Sabre\VObject\Parser\MimeDir::parseLine (   $line)
protected

Parses a line, and if it hits a component, it will also attempt to parse the entire component.

Parameters
string$lineUnfolded line
Returns
Node

Definition at line 203 of file MimeDir.php.

References $name, $result, Sabre\VObject\Parser\MimeDir\readLine(), and Sabre\VObject\Parser\MimeDir\readProperty().

Referenced by Sabre\VObject\Parser\MimeDir\parseDocument().

203  {
204 
205  // Start of a new component
206  if (strtoupper(substr($line, 0, 6)) === 'BEGIN:') {
207 
208  $component = $this->root->createComponent(substr($line, 6), [], false);
209 
210  while (true) {
211 
212  // Reading until we hit END:
213  $line = $this->readLine();
214  if (strtoupper(substr($line, 0, 4)) === 'END:') {
215  break;
216  }
217  $result = $this->parseLine($line);
218  if ($result) {
219  $component->add($result);
220  }
221 
222  }
223 
224  $name = strtoupper(substr($line, 4));
225  if ($name !== $component->name) {
226  throw new ParseException('Invalid MimeDir file. expected: "END:' . $component->name . '" got: "END:' . $name . '"');
227  }
228 
229  return $component;
230 
231  } else {
232 
233  // Property reader
234  $property = $this->readProperty($line);
235  if (!$property) {
236  // Ignored line
237  return false;
238  }
239  return $property;
240 
241  }
242 
243  }
$result
readProperty($line)
Reads a property or component from a line.
Definition: MimeDir.php:337
readLine()
Reads a single line from the buffer.
Definition: MimeDir.php:284
parseLine($line)
Parses a line, and if it hits a component, it will also attempt to parse the entire component...
Definition: MimeDir.php:203
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ readLine()

Sabre\VObject\Parser\MimeDir::readLine ( )
protected

Reads a single line from the buffer.

This method strips any newlines and also takes care of unfolding.

Exceptions

Definition at line 284 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$lineBuffer, Sabre\VObject\Parser\MimeDir\$lineIndex, Sabre\VObject\Parser\MimeDir\$rawLine, and input.

Referenced by Sabre\VObject\Parser\MimeDir\extractQuotedPrintableValue(), Sabre\VObject\Parser\MimeDir\parseDocument(), and Sabre\VObject\Parser\MimeDir\parseLine().

284  {
285 
286  if (!\is_null($this->lineBuffer)) {
288  $this->lineBuffer = null;
289  } else {
290  do {
291  $eof = \feof($this->input);
292 
293  $rawLine = \fgets($this->input);
294 
295  if ($eof || (\feof($this->input) && $rawLine === false)) {
296  throw new EofException('End of document reached prematurely');
297  }
298  if ($rawLine === false) {
299  throw new ParseException('Error reading from input stream');
300  }
301  $rawLine = \rtrim($rawLine, "\r\n");
302  } while ($rawLine === ''); // Skipping empty lines
303  $this->lineIndex++;
304  }
305  $line = $rawLine;
306 
307  $this->startLine = $this->lineIndex;
308 
309  // Looking ahead for folded lines.
310  while (true) {
311 
312  $nextLine = \rtrim(\fgets($this->input), "\r\n");
313  $this->lineIndex++;
314  if (!$nextLine) {
315  break;
316  }
317  if ($nextLine[0] === "\t" || $nextLine[0] === " ") {
318  $curLine = \substr($nextLine, 1);
319  $line .= $curLine;
320  $rawLine .= "\n " . $curLine;
321  } else {
322  $this->lineBuffer = $nextLine;
323  break;
324  }
325 
326  }
327  $this->rawLine = $rawLine;
328  return $line;
329 
330  }
$lineIndex
The real current line number.
Definition: MimeDir.php:258
input
Definition: langcheck.php:166
+ Here is the caller graph for this function:

◆ readProperty()

Sabre\VObject\Parser\MimeDir::readProperty (   $line)
protected

Reads a property or component from a line.

Returns
void

Looping through all the tokens.

Note that we are looping through them in reverse order, because if a sub-pattern matched, the subsequent named patterns will not show up in the result.

Definition at line 337 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$charset, $name, Sabre\VObject\Parser\MimeDir\extractQuotedPrintableValue(), Sabre\VObject\Parser\MimeDir\unescapeParam(), and Sabre\VObject\Document\VCARD21.

Referenced by Sabre\VObject\Parser\MimeDir\parseLine().

337  {
338 
339  if ($this->options & self::OPTION_FORGIVING) {
340  $propNameToken = 'A-Z0-9\-\._\\/';
341  } else {
342  $propNameToken = 'A-Z0-9\-\.';
343  }
344 
345  $paramNameToken = 'A-Z0-9\-';
346  $safeChar = '^";:,';
347  $qSafeChar = '^"';
348 
349  $regex = "/
350  ^(?P<name> [$propNameToken]+ ) (?=[;:]) # property name
351  |
352  (?<=:)(?P<propValue> .+)$ # property value
353  |
354  ;(?P<paramName> [$paramNameToken]+) (?=[=;:]) # parameter name
355  |
356  (=|,)(?P<paramValue> # parameter value
357  (?: [$safeChar]*) |
358  \"(?: [$qSafeChar]+)\"
359  ) (?=[;:,])
360  /xi";
361 
362  //echo $regex, "\n"; die();
363  preg_match_all($regex, $line, $matches, PREG_SET_ORDER);
364 
365  $property = [
366  'name' => null,
367  'parameters' => [],
368  'value' => null
369  ];
370 
371  $lastParam = null;
372 
380  foreach ($matches as $match) {
381 
382  if (isset($match['paramValue'])) {
383  if ($match['paramValue'] && $match['paramValue'][0] === '"') {
384  $value = substr($match['paramValue'], 1, -1);
385  } else {
386  $value = $match['paramValue'];
387  }
388 
389  $value = $this->unescapeParam($value);
390 
391  if (is_null($lastParam)) {
392  throw new ParseException('Invalid Mimedir file. Line starting at ' . $this->startLine . ' did not follow iCalendar/vCard conventions');
393  }
394  if (is_null($property['parameters'][$lastParam])) {
395  $property['parameters'][$lastParam] = $value;
396  } elseif (is_array($property['parameters'][$lastParam])) {
397  $property['parameters'][$lastParam][] = $value;
398  } else {
399  $property['parameters'][$lastParam] = [
400  $property['parameters'][$lastParam],
401  $value
402  ];
403  }
404  continue;
405  }
406  if (isset($match['paramName'])) {
407  $lastParam = strtoupper($match['paramName']);
408  if (!isset($property['parameters'][$lastParam])) {
409  $property['parameters'][$lastParam] = null;
410  }
411  continue;
412  }
413  if (isset($match['propValue'])) {
414  $property['value'] = $match['propValue'];
415  continue;
416  }
417  if (isset($match['name']) && $match['name']) {
418  $property['name'] = strtoupper($match['name']);
419  continue;
420  }
421 
422  // @codeCoverageIgnoreStart
423  throw new \LogicException('This code should not be reachable');
424  // @codeCoverageIgnoreEnd
425 
426  }
427 
428  if (is_null($property['value'])) {
429  $property['value'] = '';
430  }
431  if (!$property['name']) {
432  if ($this->options & self::OPTION_IGNORE_INVALID_LINES) {
433  return false;
434  }
435  throw new ParseException('Invalid Mimedir file. Line starting at ' . $this->startLine . ' did not follow iCalendar/vCard conventions');
436  }
437 
438  // vCard 2.1 states that parameters may appear without a name, and only
439  // a value. We can deduce the value based on it's name.
440  //
441  // Our parser will get those as parameters without a value instead, so
442  // we're filtering these parameters out first.
443  $namedParameters = [];
444  $namelessParameters = [];
445 
446  foreach ($property['parameters'] as $name => $value) {
447  if (!is_null($value)) {
448  $namedParameters[$name] = $value;
449  } else {
450  $namelessParameters[] = $name;
451  }
452  }
453 
454  $propObj = $this->root->createProperty($property['name'], null, $namedParameters);
455 
456  foreach ($namelessParameters as $namelessParameter) {
457  $propObj->add(null, $namelessParameter);
458  }
459 
460  if (strtoupper($propObj['ENCODING']) === 'QUOTED-PRINTABLE') {
461  $propObj->setQuotedPrintableValue($this->extractQuotedPrintableValue());
462  } else {
464  if ($this->root->getDocumentType() === Document::VCARD21 && isset($propObj['CHARSET'])) {
465  // vCard 2.1 allows the character set to be specified per property.
466  $charset = (string)$propObj['CHARSET'];
467  }
468  switch (strtolower($charset)) {
469  case 'utf-8' :
470  break;
471  case 'iso-8859-1' :
472  $property['value'] = utf8_encode($property['value']);
473  break;
474  case 'windows-1252' :
475  $property['value'] = mb_convert_encoding($property['value'], 'UTF-8', $charset);
476  break;
477  default :
478  throw new ParseException('Unsupported CHARSET: ' . $propObj['CHARSET']);
479  }
480  $propObj->setRawMimeDirValue($property['value']);
481  }
482 
483  return $propObj;
484 
485  }
unescapeParam($input)
Unescapes a parameter value.
Definition: MimeDir.php:629
extractQuotedPrintableValue()
Gets the full quoted printable value.
Definition: MimeDir.php:661
const VCARD21
vCard 2.1.
Definition: Document.php:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setCharset()

Sabre\VObject\Parser\MimeDir::setCharset (   $charset)

By default all input will be assumed to be UTF-8.

However, both iCalendar and vCard might be encoded using different character sets. The character set is usually set in the mime-type.

If this is the case, use setEncoding to specify that a different encoding will be used. If this is set, the parser will automatically convert all incoming data to UTF-8.

Parameters
string$charset

Definition at line 107 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$charset.

107  {
108 
109  if (!in_array($charset, self::$SUPPORTED_CHARSETS)) {
110  throw new \InvalidArgumentException('Unsupported encoding. (Supported encodings: ' . implode(', ', self::$SUPPORTED_CHARSETS) . ')');
111  }
112  $this->charset = $charset;
113 
114  }

◆ setInput()

Sabre\VObject\Parser\MimeDir::setInput (   $input)

Sets the input buffer.

Must be a string or stream.

Parameters
resource | string$input
Returns
void

Definition at line 123 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$input, GuzzleHttp\Psr7\$stream, and input.

Referenced by Sabre\VObject\Parser\MimeDir\parse().

123  {
124 
125  // Resetting the parser
126  $this->lineIndex = 0;
127  $this->startLine = 0;
128 
129  if (is_string($input)) {
130  // Convering to a stream.
131  $stream = fopen('php://temp', 'r+');
132  fwrite($stream, $input);
133  rewind($stream);
134  $this->input = $stream;
135  } elseif (is_resource($input)) {
136  $this->input = $input;
137  } else {
138  throw new \InvalidArgumentException('This parser can only read from strings or streams.');
139  }
140 
141  }
$stream
PHP stream implementation.
input
Definition: langcheck.php:166
+ Here is the caller graph for this function:

◆ unescapeParam()

Sabre\VObject\Parser\MimeDir::unescapeParam (   $input)
private

Unescapes a parameter value.

vCard 2.1:

  • Does not mention a mechanism for this. In addition, double quotes are never used to wrap values.
  • This means that parameters can simply not contain colons or semi-colons.

vCard 3.0 (rfc2425, rfc2426):

  • Parameters may be surrounded by double quotes.
  • If this is not the case, semi-colon, colon and comma may simply not occur (the comma used for multiple parameter values though).
  • If it is surrounded by double-quotes, it may simply not contain double-quotes.
  • This means that a parameter can in no case encode double-quotes, or newlines.

vCard 4.0 (rfc6350)

  • Behavior seems to be identical to vCard 3.0

iCalendar 2.0 (rfc5545)

  • Behavior seems to be identical to vCard 3.0

Parameter escaping mechanism (rfc6868) :

  • This rfc describes a new way to escape parameter values.
  • New-line is encoded as ^n
  • ^ is encoded as ^^.
  • " is encoded as ^'
Parameters
string$input
Returns
void

Definition at line 629 of file MimeDir.php.

References Sabre\VObject\Parser\MimeDir\$input.

Referenced by Sabre\VObject\Parser\MimeDir\readProperty().

629  {
630 
631  return
632  preg_replace_callback(
633  '#(\^(\^|n|\'))#',
634  function($matches) {
635  switch ($matches[2]) {
636  case 'n' :
637  return "\n";
638  case '^' :
639  return '^';
640  case '\'' :
641  return '"';
642 
643  // @codeCoverageIgnoreStart
644  }
645  // @codeCoverageIgnoreEnd
646  },
647  $input
648  );
649  }
+ Here is the caller graph for this function:

◆ unescapeValue()

static Sabre\VObject\Parser\MimeDir::unescapeValue (   $input,
  $delimiter = ';' 
)
static

Unescapes a property value.

vCard 2.1 says:

  • Semi-colons must be escaped in some property values, specifically ADR, ORG and N.
  • Semi-colons must be escaped in parameter values, because semi-colons are also use to separate values.
  • No mention of escaping backslashes with another backslash.
  • newlines are not escaped either, instead QUOTED-PRINTABLE is used to span values over more than 1 line.

vCard 3.0 says:

  • (rfc2425) Backslashes, newlines (
    or ) and comma's must be escaped, all time time.
  • Comma's are used for delimeters in multiple values
  • (rfc2426) Adds to to this that the semi-colon MUST also be escaped, as in some properties semi-colon is used for separators.
  • Properties using semi-colons: N, ADR, GEO, ORG
  • Both ADR and N's individual parts may be broken up further with a comma.
  • Properties using commas: NICKNAME, CATEGORIES

vCard 4.0 (rfc6350) says:

  • Commas must be escaped.
  • Semi-colons may be escaped, an unescaped semi-colon may be a delimiter, depending on the property.
  • Backslashes must be escaped
  • Newlines must be escaped as either or
    .
  • Some compound properties may contain multiple parts themselves, so a comma within a semi-colon delimited property may also be unescaped to denote multiple parts within the compound property.
  • Text-properties using semi-colons: N, ADR, ORG, CLIENTPIDMAP.
  • Text-properties using commas: NICKNAME, RELATED, CATEGORIES, PID.

Even though the spec says that commas must always be escaped, the example for GEO in Section 6.5.2 seems to violate this.

iCalendar 2.0 (rfc5545) says:

  • Commas or semi-colons may be used as delimiters, depending on the property.
  • Commas, semi-colons, backslashes, newline ( or
    ) are always escaped, unless they are delimiters.
  • Colons shall not be escaped.
  • Commas can be considered the 'default delimiter' and is described as the delimiter in cases where the order of the multiple values is insignificant.
  • Semi-colons are described as the delimiter for 'structured values'. They are specifically used in Semi-colons are used as a delimiter in REQUEST-STATUS, RRULE, GEO and EXRULE. EXRULE is deprecated however.

Now for the parameters

If delimiter is not set (null) this method will just return a string. If it's a comma or a semi-colon the string will be split on those characters, and always return an array.

Parameters
string$input
string$delimiter
Returns
string|string[]

Definition at line 549 of file MimeDir.php.

References $delimiter, Sabre\VObject\Parser\MimeDir\$input, and $result.

Referenced by Sabre\VObject\Property\Text\setRawMimeDirValue().

549  {
550 
551  $regex = '# (?: (\\\\ (?: \\\\ | N | n | ; | , ) )';
552  if ($delimiter) {
553  $regex .= ' | (' . $delimiter . ')';
554  }
555  $regex .= ') #x';
556 
557  $matches = preg_split($regex, $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
558 
559  $resultArray = [];
560  $result = '';
561 
562  foreach ($matches as $match) {
563 
564  switch ($match) {
565  case '\\\\' :
566  $result .= '\\';
567  break;
568  case '\N' :
569  case '\n' :
570  $result .= "\n";
571  break;
572  case '\;' :
573  $result .= ';';
574  break;
575  case '\,' :
576  $result .= ',';
577  break;
578  case $delimiter :
579  $resultArray[] = $result;
580  $result = '';
581  break;
582  default :
583  $result .= $match;
584  break;
585 
586  }
587 
588  }
589 
590  $resultArray[] = $result;
591  return $delimiter ? $resultArray : $result;
592 
593  }
$result
$delimiter
Definition: showstats.php:16
+ Here is the caller graph for this function:

Field Documentation

◆ $charset

Sabre\VObject\Parser\MimeDir::$charset = 'UTF-8'
protected

◆ $input

◆ $lineBuffer

Sabre\VObject\Parser\MimeDir::$lineBuffer
protected

Definition at line 253 of file MimeDir.php.

Referenced by Sabre\VObject\Parser\MimeDir\readLine().

◆ $lineIndex

Sabre\VObject\Parser\MimeDir::$lineIndex = 0
protected

The real current line number.

Definition at line 258 of file MimeDir.php.

Referenced by Sabre\VObject\Parser\MimeDir\readLine().

◆ $rawLine

Sabre\VObject\Parser\MimeDir::$rawLine
protected

◆ $root

Sabre\VObject\Parser\MimeDir::$root
protected

Definition at line 39 of file MimeDir.php.

Referenced by Sabre\VObject\Parser\MimeDir\parse().

◆ $startLine

Sabre\VObject\Parser\MimeDir::$startLine = 0
protected

Definition at line 266 of file MimeDir.php.

◆ $SUPPORTED_CHARSETS

Sabre\VObject\Parser\MimeDir::$SUPPORTED_CHARSETS
staticprotected
Initial value:
= [
'UTF-8',
'ISO-8859-1',
'Windows-1252',
]

The list of character sets we support when decoding.

This would be a const expression but for now we need to support PHP 5.5

Definition at line 60 of file MimeDir.php.


The documentation for this class was generated from the following file: