diff --git a/org/document.go b/org/document.go index f7efb14..9c464e1 100644 --- a/org/document.go +++ b/org/document.go @@ -36,6 +36,7 @@ type Document struct { Path string // Path of the file containing the parse input - used to resolve relative paths during parsing (e.g. INCLUDE). tokens []token baseLvl int + Links map[string]string Nodes []Node NamedNodes map[string]Node Outline Outline // Outline is a Table Of Contents for the document and contains all sections (headline + content). @@ -121,6 +122,7 @@ func (c *Configuration) Parse(input io.Reader, path string) (d *Document) { Outline: Outline{outlineSection, outlineSection, 0}, BufferSettings: map[string]string{}, NamedNodes: map[string]Node{}, + Links: map[string]string{}, Path: path, } defer func() { diff --git a/org/html_writer.go b/org/html_writer.go index 8d35805..6d77b7c 100644 --- a/org/html_writer.go +++ b/org/html_writer.go @@ -338,6 +338,9 @@ func (w *HTMLWriter) WriteRegularLink(l RegularLink) { if l.Protocol == "file" { url = url[len("file:"):] } + if prefix := w.document.Links[l.Protocol]; prefix != "" { + url = html.EscapeString(prefix) + url[len(l.Protocol)+1:] + } description := url if l.Description != nil { description = w.WriteNodesAsString(l.Description...) diff --git a/org/keyword.go b/org/keyword.go index aa96caa..774e9c0 100644 --- a/org/keyword.go +++ b/org/keyword.go @@ -62,6 +62,11 @@ func (d *Document) parseKeyword(i int, stop stopFn) (int, Node) { return d.loadSetupFile(k) case "INCLUDE": return d.parseInclude(k) + case "LINK": + if parts := strings.Split(k.Value, " "); len(parts) >= 2 { + d.Links[parts[0]] = parts[1] + } + return 1, k case "CAPTION", "ATTR_HTML": consumed, node := d.parseAffiliated(i, stop) if consumed != 0 { diff --git a/org/testdata/inline.html b/org/testdata/inline.html index 399022e..89afa2f 100644 --- a/org/testdata/inline.html +++ b/org/testdata/inline.html @@ -165,4 +165,9 @@ +
  • +

    +#+LINK based links: https://www.example.com/foobar +

    +
  • diff --git a/org/testdata/inline.org b/org/testdata/inline.org index 488d037..e2a075f 100644 --- a/org/testdata/inline.org +++ b/org/testdata/inline.org @@ -37,3 +37,5 @@ - <2019-01-06 Sun 18:00 +1w> - <2019-01-06 18:00> - <2019-01-06 18:00 +1w> +- =#+LINK= based links: [[example:foobar]] + #+LINK: example https://www.example.com/ diff --git a/org/testdata/inline.pretty_org b/org/testdata/inline.pretty_org index b11677c..695c39a 100644 --- a/org/testdata/inline.pretty_org +++ b/org/testdata/inline.pretty_org @@ -37,3 +37,5 @@ - <2019-01-06 Sun 18:00 +1w> - <2019-01-06 Sun 18:00> - <2019-01-06 Sun 18:00 +1w> +- =#+LINK= based links: [[example:foobar]] + #+LINK: example https://www.example.com/