• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/ical/parser/parser.php
  • Класс: BitrixCalendarICalParserParser
  • Вызов: Parser::handle
private function handle(): ?ParserComponent
{
	$componentName = '';
	$properties = [];
	$componentsCollection = new ComponentsCollection();

	while ($str = $this->linesGenerator->current())
	{
		$line = Line::createInstance($str);
		$line->parse();

		if ($line->isBegin())
		{
			if ($componentName)
			{
				$componentsCollection->add($this->handle());
			}
			else
			{
				$componentName = mb_strtolower($line->getValue());
			}
		}
		elseif ($line->isEnd())
		{
			return FactoryComponents::createInstance($componentName)
				->createComponent($properties, $componentsCollection)
				->getComponent();
		}
		elseif (in_array($line->getName(), ['attendee', 'attach']))
		{
			$properties[$line->getName()][] = ParserPropertyType::createInstance($line->getName())
				->addParameters($line->getParams())
				->setValue($line->getValue());
		}
		else
		{
			$properties[$line->getName()] = ParserPropertyType::createInstance($line->getName())
				->addParameters($line->getParams())
				->setValue($line->getValue());
		}

		$this->linesGenerator->next();
	}

	return null;
}