#+name: elisp-2025-06-20-20-32
#+begin_src emacs-lisp :eval no
(lambda (url)
(let* ((full nil) (abbr nil)
(abbr-map (get 'org-noweb-expand-link
'http-abbr)))
(save-match-data
(when (string-match "http[s]://\\(/[^/]+/\\)"
url)
(setq abbr (substring (match-string 1 url)
1 -1))
(setq full (alist-get abbr abbr-map
nil nil #'string=))
(unless full (error "Invalid abbr: %s" abbr))
(setq url (replace-match full nil t url 1)))))
(let* ((parsed-url `(:origin-url ,url))
(url (string-split url "::"))
(option (if (length> url 1)
(car (last url))))
(url (if (null option)
(car url)
(string-join (nbutlast url) "::")))
(full nil) (abbr nil)
(abbr-map (get 'org-noweb-expand-link
'http-abbr)))
(plist-put parsed-url :url url)
(plist-put parsed-url :search-option option)
parsed-url))
#+end_src