I have URLs in a cell of LibreOffice that I want to output as Markdown links.
In LibreOffice, I have several links in a cell. The links are separated by a new line (Ctrl-Enter or chr(10)).
http://www.breitbart.com/tech/2015/12/30/software-pioneer-ian-murdock-dead-after-extraordinary-police-brutality-claims/ http://arstechnica.com/information-technology/2015/12/ian-murdock-father-of-debian-dead-at-42/ http://www.linux-magazin.de/NEWS/Debian-Gruender-Ian-Murdock-ist-tot
[breitbart.com](http://www.breitbart.com/tech/2015/12/30/software-pioneer-ian-murdock-dead-after-extraordinary-police-brutality-claims/) [arstechnica.com](http://arstechnica.com/information-technology/2015/12/ian-murdock-father-of-debian-dead-at-42/) [linux-magazin.de](http://www.linux-magazin.de/NEWS/Debian-Gruender-Ian-Murdock-ist-tot)
The link text should consist of the domain name and it should point to the given URL.
Sadly, LibreOffice Basic does not have any regex support. The pattern matching and string substitution must be achieved by existing Basic string functions.
Function FormatURLsToMD(str as String) as String Dim md, url, domain as String Dim urls(), subdomains() as String Dim nUrl, pos as Integer nUrl = 0 md = "" urls = split(str, chr(10)) For Each url in urls domain = trim(url) if len(domain) > 4 then domain = replace(domain, "http://", "") domain = replace(domain, "https://", "") pos = inStr(domain, "/") IF pos > 0 THEN domain = Left(domain, pos - 1) END If subdomains = split(domain, ".") if ubound(subdomains) > 0 then Rem last 2 domains domain = subdomains(ubound(subdomains) - 1) & "." & subdomains(ubound(subdomains)) else domain = "" endif md = md + " [" & domain & "](" & url & ")" else md = md + "" end if Next url FormatURLsToMD = md End Function Function replace(source as String, searchStr as String, replaceStr as String) as String replace = join(split(source, searchStr), replaceStr) End Function
This function can be called in a cell by
A1 is a cell reference or
I am not an LibreOffice Basic expert. This is my solution to my problem. If you know a more elegant solution, please let me know.