Sergiu Carpov wrote:
rgheck <rgh...@...> writes:
Sergiu Carpov wrote:
Hi,
I am trying to fix this bug. And I have observed an incoherences in the
source code.
I'm examining the static function "updateExternal" from "external"
namespace, see this page
http://wiki.lyx.org/sourcedoc/svn/namespacelyx_1_1external.html#940e34e099754314ff8a1ca2ac1b9b65
There it is used the class Template::Format, this class has "updateResult"
and "referencedFiles" fields. Which are both used in "updateExternal"
function. And now my question are:
1. What are the differences between this two fields?
These are explained in section 6.2.2 of the Customization manual. They
hold the contents of the corresponding tags from the template
specification. Here's what it says:
ReferencedFile <format> <filename> This command denotes files that are
created by the conversion process and are needed for a particular export
format. If the filename is relative, it is interpreted relative to the
master document. This command may be given zero or more times.
So these files are generated by the conversion and need to be exported.
There may be more than one, or it may depend upon the precise export format.
UpdateResult <filename> The file name of the converted file. The file
name must be absolute. This command must occur exactly once.
This is the name to which we will do the conversion. It probably will
itself be exported, too. Have a look at the lib/external_templates file
to see how these are used.
2. Why in the "updateExternal" function, lines 272-302 we add to the
exported files all the "referencedFiles"?
I think the above should answer this: They're needed, for whatever
reason, by the format for which they are defined.
And in other lines, below and
above, we work (copy to the temp dir and perform conversion) only with
"updateResult" file? It seems to me that something is not right there, I
can't understant why we convert only one file ("updateResult" field) and
export several files ("referencedFiles").
The converter itself may produce extra files, or the one we need may
depend upon the format. See the XFig template, for example. But you will
note that they are normally the same.
Richard
I propose the following fix for this bug:
Index: src/insets/ExternalSupport.cpp
===================================================================
--- src/insets/ExternalSupport.cpp (revision 30336)
+++ src/insets/ExternalSupport.cpp (working copy)
@@ -296,7 +296,8 @@
ALL_BUT_PATHS);
// if file is a relative name, it is interpreted
// relative to the master document.
- exportdata.addExternalFile(rit->first, source,
file);
+ if (file != params.filename.absFilename())
+ exportdata.addExternalFile(rit->first,
source, file);
}
}
}
I suppose that the included and exported files are the same if their absolute
paths are equal. In this case the included file should not be exported.
Maybe better would be something like this:
Index: src/insets/ExternalSupport.cpp
===================================================================
--- src/insets/ExternalSupport.cpp (revision 30403)
+++ src/insets/ExternalSupport.cpp (working copy)
@@ -296,7 +296,9 @@
ALL_BUT_PATHS);
// if file is a relative name, it is interpreted
// relative to the master document.
- exportdata.addExternalFile(rit->first, source, file);
+ DocFileName expfile(file);
+ if (expfile == params.filename)
+ exportdata.addExternalFile(rit->first, source, file);
}
}
}
The only advantage here is that we let DocFileName decide equality,
however it does so. (In fact, it does so by comparing absolute paths.
But that could change.)
Anyone have any comment on this? Sergiu, you've verified it works?
rh