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

Reply via email to