@@ -133,42 +133,50 @@ type Writer struct {
133
133
Ctx * markup.RenderContext
134
134
}
135
135
136
- const mailto = "mailto:"
137
-
138
- func (r * Writer ) resolveLink (link string ) string {
136
+ func (r * Writer ) resolveLink (kind string , link string ) string {
139
137
link = strings .TrimPrefix (link , "file:" )
140
- if len (link ) > 0 && ! markup .IsLinkStr (link ) &&
141
- link [0 ] != '#' && ! strings .HasPrefix (link , mailto ) {
142
- link = util .URLJoin (r .Ctx .Links .ResolveMediaLink (r .Ctx .IsWiki ), link )
138
+ if ! strings .HasPrefix (link , "#" ) && // not a URL fragment
139
+ ! markup .IsLinkStr (link ) && // not an absolute URL
140
+ ! strings .HasPrefix (link , "mailto:" ) {
141
+ if kind == "regular" {
142
+ // orgmode reports the link kind as "regular" for "[[ImageLink.svg][The Image Desc]]"
143
+ // so we need to try to guess the link kind again here
144
+ kind = org.RegularLink {URL : link }.Kind ()
145
+ }
146
+ base := r .Ctx .Links .Base
147
+ if kind == "image" || kind == "video" {
148
+ base = r .Ctx .Links .ResolveMediaLink (r .Ctx .IsWiki )
149
+ }
150
+ link = util .URLJoin (base , link )
143
151
}
144
152
return link
145
153
}
146
154
147
155
// WriteRegularLink renders images, links or videos
148
156
func (r * Writer ) WriteRegularLink (l org.RegularLink ) {
149
- link := r .resolveLink (l .URL )
157
+ link := r .resolveLink (l .Kind (), l . URL )
150
158
151
159
// Inspired by https://github.com/niklasfasching/go-org/blob/6eb20dbda93cb88c3503f7508dc78cbbc639378f/org/html_writer.go#L406-L427
152
160
switch l .Kind () {
153
161
case "image" :
154
162
if l .Description == nil {
155
- fmt .Fprintf (r , `<img src="%s" alt="%s" />` , link , link )
163
+ _ , _ = fmt .Fprintf (r , `<img src="%s" alt="%s" />` , link , link )
156
164
} else {
157
- imageSrc := r .resolveLink (org .String (l .Description ... ))
158
- fmt .Fprintf (r , `<a href="%s"><img src="%s" alt="%s" /></a>` , link , imageSrc , imageSrc )
165
+ imageSrc := r .resolveLink (l . Kind (), org .String (l .Description ... ))
166
+ _ , _ = fmt .Fprintf (r , `<a href="%s"><img src="%s" alt="%s" /></a>` , link , imageSrc , imageSrc )
159
167
}
160
168
case "video" :
161
169
if l .Description == nil {
162
- fmt .Fprintf (r , `<video src="%s">%s</video>` , link , link )
170
+ _ , _ = fmt .Fprintf (r , `<video src="%s">%s</video>` , link , link )
163
171
} else {
164
- videoSrc := r .resolveLink (org .String (l .Description ... ))
165
- fmt .Fprintf (r , `<a href="%s"><video src="%s">%s</video></a>` , link , videoSrc , videoSrc )
172
+ videoSrc := r .resolveLink (l . Kind (), org .String (l .Description ... ))
173
+ _ , _ = fmt .Fprintf (r , `<a href="%s"><video src="%s">%s</video></a>` , link , videoSrc , videoSrc )
166
174
}
167
175
default :
168
176
description := link
169
177
if l .Description != nil {
170
178
description = r .WriteNodesAsString (l .Description ... )
171
179
}
172
- fmt .Fprintf (r , `<a href="%s">%s</a>` , link , description )
180
+ _ , _ = fmt .Fprintf (r , `<a href="%s">%s</a>` , link , description )
173
181
}
174
182
}
0 commit comments