function consume_bracketed_link_destination()

in src/_Private/consume_link_destination.php [22:54]


function consume_bracketed_link_destination(string $input): ?(string, int) {
  invariant($input[0] === '<', 'should not be called on unbracketed input');
  $len = Str\length($input);

  $destination = '';
  for ($idx = 1; $idx < $len; ++$idx) {
    $chr = $input[$idx];
    if ($chr === ' ') {
      return null;
    }
    if ($chr === "\n") {
      return null;
    }

    if ($chr === '\\') {
      if ($idx + 1 < $len) {
        $next = $input[$idx + 1];
        if (C\contains_key(ASCII_PUNCTUATION, $next)) {
          $destination .= $next;
          $idx++;
          continue;
        }
      }
    }

    if ($chr === '>') {
      return tuple($destination, $idx + 1);
    }

    $destination .= $chr;
  }
  return null;
}