code: def _really_parse_external_link(self, brackets):
          
          if brackets:
              self._parse_bracketed_uri_scheme()
              invalid = ("\n", " ", "]")
          else:
              self._parse_free_uri_scheme()
              invalid = ("\n", " ", "[", "]")
              punct = tuple(",;\\.:!?)")
          if self._read() is self.END or self._read()[0] in invalid:
              self._fail_route()
          tail = ""
          while True:
              this, next = self._read(), self._read(1)
              if this == "&":
                  if tail:
                      self._emit_text(tail)
                      tail = ""
                  self._parse_entity()
              elif (this == "<" and next == "!" and self._read(2) ==
                    self._read(3) == "-"):
                  if tail:
                      self._emit_text(tail)
                      tail = ""
                  self._parse_comment()
              elif not brackets and self._is_free_link_end(this, next):
                  return self._pop(), tail, -1
              elif this is self.END or this == "\n":
                  self._fail_route()
              elif this == next == "{" and self._can_recurse():
                  if tail:
                      self._emit_text(tail)
                      tail = ""
                  self._parse_template_or_argument()
              elif this == "]":
                  return self._pop(), tail, 0
              elif " " in this:
                  before, after = this.split(" ", 1)
                  if brackets:
                      self._emit_text(before)
                      self._emit(tokens.ExternalLinkSeparator())
                      if after:
                          self._emit_text(after)
                      self._context ^= contexts.EXT_LINK_URI
                      self._context |= contexts.EXT_LINK_TITLE
                      self._head += 1
                      return self._parse(push=False), None, 0
                  punct, tail = self._handle_free_link_text(punct, tail, before)
                  return self._pop(), tail + " " + after, 0
              elif not brackets:
                  punct, tail = self._handle_free_link_text(punct, tail, this)
              else:
                  self._emit_text(this)
              self._head += 1
docs: Really parse an external link.