Implement #+LINK

This commit is contained in:
Niklas Fasching 2020-04-17 15:59:03 +02:00
parent 47a3653d61
commit 1e36b3b46b
6 changed files with 19 additions and 0 deletions

View file

@ -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() {

View file

@ -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...)

View file

@ -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 {

View file

@ -165,4 +165,9 @@ timestamps
</li>
</ul>
</li>
<li>
<p>
<code class="verbatim">#+LINK</code> based links: <a href="https://www.example.com/foobar">https://www.example.com/foobar</a>
</p>
</li>
</ul>

View file

@ -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/

View file

@ -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/