On 31/12/12 14:58, Stuart Rackham wrote:
> 
> 
> On 10/10/12 11:49, Lex Trotman wrote:
>>
>>
>> On 10 October 2012 04:34, Jens Getreu <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>     I observed the following behavior:
>>
>>      1. Without :data-uri: directive: Paths in subdocuments to images
>>         are relative to the location of the main document.
>>      2. With :data-uri: Paths in subdocuments to images are relative to
>>         the location of the subdocument.
>>
>>     I usually use the 2. because my subdocuments are independent
>>     projects with separate resources. Unfortunately not all backends
>>     implement the 2. correctly yet.
>>     For example the html4 and odt backends do not therefore my projects
>>     do not compile with these backends.
>>
>>
>> The ODT backend is a separate project, please file an issue on its site. 
>>
>> Data-uri is not supported by HTML, only xhtml and html5.
>>
>> They should all follow type two, but there is a bug(s).
>>
>> @Stuart, documentation says images are relative to the referring
>> document.  Data-uri correctly uses {indir}/{imagesdir}/{target} but non
>> data-uri uses {imagesdir}/{target} which makes them relative to the
>> *working* directory (if {imagesdir} is not absolute), not the document
>> directory. It is therefore wrong if for example the document is an
>> included document from another directory, or asciidoc wasn't run in the
>> document directory.
>>
>> Documentation doesn't mention absolute being accepted, but I'll bet
>> there are lots of documents that depend on that :( so it isn't just as
>> simple as sticking an {indir={outdir}} on the front for non-datauri I
>> don't think.
> 
> This would probably work:
> 
> {eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}
> 
> because if {imagesdir=} is absolute os.path.join() will override the
> preceding {indir={outdir}}
> 
> But is will break documents out there that rely on this undocumented quirk?
> 
> Cheers, Stuart
> 
> 

My suggestion will not work, you shouldn't use absolute paths in links
-- they won't be served by a Web server.

The problem comes down to the fact that the link is relative to the root
document and not the included file. There's no relative version of
{indir} (relative to {docdir}) so the only way I can see would be to
synthesize a relative path.

Instead of:

{imagesdir=}{imagesdir?/}{target}

use:

{imagesdir=}{imagesdir?/}{eval:os.path.relpath(r"{docdir={outdir}}",r"{indir={outdir}}")}/{target}

But it's not the complete answer because the relative path can only be
calculated if the the two locations lie on a common path.

I think the best solution would be to leave the current (incorrectly
documented and sub-optimal) behavior as it is and change the
documentation to reflect it.


Cheers, Stuart


>>
>> Cheers
>> Lex
>>  
>>
>>
>>     The :data-uri: directive is meant to embed media HTML5. So the
>>     described behavior is just a side effect? Is it possible to control
>>     how paths are interpreted by other means then :data-uri: ?
>>
>>     If not, there should be a directive doing so.
>>
>>     -- 
>>     You received this message because you are subscribed to the Google
>>     Groups "asciidoc" group.
>>     To view this discussion on the web visit
>>     https://groups.google.com/d/msg/asciidoc/-/uIpKdckPkwYJ.
>>     To post to this group, send email to [email protected]
>>     <mailto:[email protected]>.
>>     To unsubscribe from this group, send email to
>>     [email protected]
>>     <mailto:asciidoc%[email protected]>.
>>     For more options, visit this group at
>>     http://groups.google.com/group/asciidoc?hl=en.
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "asciidoc" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/asciidoc?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"asciidoc" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/asciidoc?hl=en.

Reply via email to