+(defun elpher-make-node-from-matched-url (parent &optional string)
+ "Convert most recent `elpher-url-regex' match to a node.
+
+PARENT defines the node to set as the parent to the new node.
+
+If STRING is non-nil, this is given as an argument to all `match-string'
+calls, as is necessary if the match is performed by `string-match'."
+ (let ((url (match-string 0 string))
+ (protocol (downcase (match-string 1 string))))
+ (if (string= protocol "gopher")
+ (let* ((host (match-string 2 string))
+ (port (if (> (length (match-string 3 string)) 1)
+ (string-to-number (substring (match-string 3 string) 1))
+ 70))
+ (type-and-selector (match-string 4 string))
+ (type (if (> (length type-and-selector) 1)
+ (elt type-and-selector 1)
+ ?1))
+ (selector (if (> (length type-and-selector) 1)
+ (substring type-and-selector 2)
+ ""))
+ (address (elpher-make-address selector host port))
+ (getter (car (alist-get type elpher-type-map))))
+ (elpher-make-node elpher-current-node address getter))
+ (let* ((host (match-string 2 string))
+ (port (if (> (length (match-string 3 string)) 1)
+ (string-to-number (substring (match-string 3 string) 1))
+ 70))
+ (selector (concat "URL:" url))
+ (address (elpher-make-address selector host port))
+ (getter (car (alist-get ?h elpher-type-map))))
+ (elpher-make-node elpher-current-node address getter)))))
+
+