3. When a lyx file file.lyx is saved, it is save to tmppath() first.
Embedded files are compressed along with file.lyx and a manifest.txt.
If embedding is disabled, file.lyx is saved in the usual pure-text form.
-(c.f. Buffer::writeFile(), EmbeddedFiles::write())
+(c.f. Buffer::writeFile(), EmbeddedFiles::writeFile())
4. When a lyx file.lyx file is opened, if it is a zip file, it is
decompressed to tmppath(). If manifest.txt and file.lyx exists in
namespace lyx {
class Buffer;
+class Lexer;
+class ErrorList;
class EmbeddedFile : public support::DocFileName
{
public:
+ EmbeddedFile() {};
+
EmbeddedFile(std::string const & file, std::string const & inzip_name,
bool embedded, Inset const * inset);
/// filename in the zip file, usually the relative path
std::string inzipName() const { return inzip_name_; }
+ void setInzipName(std::string name) { inzip_name_ = name; }
/// embedded file, equals to temppath()/inzipName()
std::string embeddedFile(Buffer const * buf) const;
/// embeddedFile() or absFilename() depending on embedding status
bool extract(Buffer const * buf) const;
/// update embedded file from external file, does not change embedding status
bool updateFromExternalFile(Buffer const * buf) const;
+ ///
+ /// After the embedding status is changed, update all insets related
+ /// to this file item.
+ /// Because inset pointers may not be up to date, EmbeddedFiles::update()
+ /// would better be called before this function is called.
+ void updateInsets(Buffer const * buf) const;
private:
/// filename in zip file
typedef std::vector<EmbeddedFile> EmbeddedFileList;
public:
///
- EmbeddedFiles(Buffer * buffer = NULL): file_list_(), buffer_(buffer) {}
+ EmbeddedFiles(Buffer * buffer = 0) : file_list_(), buffer_(buffer) {}
///
~EmbeddedFiles() {}
bool enabled() const;
/// set buffer params embedded flag. Files will be updated or extracted
/// if such an operation fails, enable will fail.
- bool enable(bool flag);
+ void enable(bool flag);
/// add a file item.
/* \param filename filename to add
* \param embed embedding status. For a new file item, this is always true.
* If the file already exists, this parameter is ignored.
- * \param pit paragraph id.
+ * \param inset Inset pointer
+ * \param inzipName suggested inzipname
*/
- void registerFile(std::string const & filename, bool embed = false,
- Inset const * inset = NULL);
+ EmbeddedFile & registerFile(std::string const & filename, bool embed = false,
+ Inset const * inset = 0,
+ std::string const & inzipName = std::string());
/// scan the buffer and get a list of EmbeddedFile
void update();
/// write a zip file
- bool write(support::DocFileName const & filename);
+ bool writeFile(support::DocFileName const & filename);
void clear() { file_list_.clear(); }
/// update all files from external, used when enable embedding
bool updateFromExternalFile() const;
///
- friend std::istream & operator>> (std::istream & is, EmbeddedFiles &);
-
- friend std::ostream & operator<< (std::ostream & os, EmbeddedFiles const &);
+ bool readManifest(Lexer & lex, ErrorList & errorList);
+ void writeManifest(std::ostream & os) const;
+ /// update all insets to use embedded files when embedding status is changed
+ void updateInsets() const;
private:
- /// get a unique inzip name
- std::string const getInzipName(std::string const & name);
+ /// get a unique inzip name, a suggestion can be given.
+ std::string const getInzipName(std::string const & name, std::string const & inzipName);
/// list of embedded files
EmbeddedFileList file_list_;
///
Buffer * buffer_;
};
+} // namespace lyx
-std::istream & operator>> (std::istream & is, EmbeddedFiles &);
-
-std::ostream & operator<< (std::ostream & os, EmbeddedFiles const &);
-
-}
#endif