in src/PartiallyGeneratedCode.hack [140:192]
private function iterateCodeSections(
string $code,
): \Generator<int, (?string, string), void> {
// Regular expression to match the beginning of a manual section
$begin = self::getBeginManualSectionRegex('(.*)');
$valid_begin = self::getBeginManualSectionRegex('([A-Za-z0-9:_]+)');
$seen_ids = keyset[];
$current_id = null;
$chunk = varray[];
$lines = \explode("\n", $code);
foreach ($lines as $line) {
if (\strpos($line, self::$manualEnd) !== false) {
yield tuple($current_id, Str\join($chunk, "\n"));
$chunk = varray[$line];
$current_id = null;
} else if (\preg_match($begin, $line) === 1) {
if ($current_id !== null) {
throw new PartiallyGeneratedCodeException(
'The manual section '.$current_id.' was open before '.
'the previous one was closed',
);
}
if (!\preg_match($valid_begin, $line)) {
throw
new PartiallyGeneratedCodeException('Invalid id specified: '.$line);
}
$chunk[] = $line;
yield tuple(null, Str\join($chunk, "\n"));
$chunk = varray[];
$current_id = \trim(\preg_replace($begin, '\\1', $line));
if (C\contains($seen_ids, $current_id)) {
throw new PartiallyGeneratedCodeException(
'Duplicate manual section id: '.$current_id,
);
}
$seen_ids[] = $current_id;
} else {
$chunk[] = $line;
}
}
if ($current_id !== null) {
throw new PartiallyGeneratedCodeException(
'The manual section '.$current_id.' was not closed at the end of code',
);
}
if ($code !== '') {
yield tuple(null, Str\join($chunk, "\n"));
}
}