• Модуль: location
  • Путь к файлу: ~/bitrix/modules/location/lib/entity/address/converter/stringtemplateconverter.php
  • Класс: BitrixLocationEntityAddressConverterStringTemplateConverter
  • Вызов: StringTemplateConverter::parseGroupFieldListStart
private function parseGroupFieldListStart(array $context): array
{
	$fieldListStartPosition = $context['position'];
	$fieldValues = [];
	$matches = null;
	//            [", ", [ADDRESS_LINE_1:N,ADDRESS_LINE_2,"Text",LOCALITY,ADM_LEVEL_2]]
	// Are looking for ^^^
	if (preg_match(
			'/' . self::REGEX_PART_FROM_DELIMITER_TO_FIELD_LIST . '/ms' . BX_UTF_PCRE_MODIFIER,
			$context['template'],
			$matches,
			PREG_OFFSET_CAPTURE,
			$context['position']
		)
		&& $matches[0][1] === $fieldListStartPosition
	)
	{
		$context['position'] = $matches[0][1] + strlen($matches[0][0]);
		$isFieldListEnd = false;
		while (!($context['hasError'] || $isFieldListEnd))
		{
			$context = $this->parseField($context);
			if (!$context['hasError'])
			{
				$isFieldListEnd = (
					isset($context['info']['isFieldListEnd'])
					&& $context['info']['isFieldListEnd']
				);
				if ($context['info']['value'] !== '')
				{
					$fieldValues[] = $context['info']['value'];
				}
				$context = $this->clearContextInfo($context);
			}
		}

		if (!$context['hasError'])
		{
			$context['info'] = ['fieldValues' => $fieldValues];
		}
	}
	else
	{
		$this->addContextError(
			$context,
			self::ERR_PARSE_PART_FROM_DELIMITER_TO_FIELD_LIST,
			$fieldListStartPosition
		);
	}

	if ($context['hasError'])
	{
		$this->addContextError($context, self::ERR_PARSE_GROUP_FIELD_LIST, $fieldListStartPosition);
	}

	return $context;
}