From 9e478506d2c996ce0c143c077e8e8e5b1cd90a20 Mon Sep 17 00:00:00 2001
From: Thomas Goyne <plorkyeran@aegisub.org>
Date: Fri, 19 Sep 2014 11:47:34 -0700
Subject: [PATCH] Skip the [Aegisub Project Garbage] and [Aegisub Extradata]
 sections when exporting to ASS

---
 src/ass_exporter.cpp        | 2 +-
 src/subtitle_format.h       | 9 +++++++++
 src/subtitle_format_ass.cpp | 8 ++++++++
 src/subtitle_format_ass.h   | 3 +++
 4 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/ass_exporter.cpp b/src/ass_exporter.cpp
index 777f967eb..123bcd076 100644
--- a/src/ass_exporter.cpp
+++ b/src/ass_exporter.cpp
@@ -91,7 +91,7 @@ void AssExporter::Export(agi::fs::path const& filename, std::string const& chars
 	if (!writer)
 		throw agi::InvalidInputException("Unknown file type.");
 
-	writer->WriteFile(&subs, filename, c->project->Timecodes(), charset);
+	writer->ExportFile(&subs, filename, c->project->Timecodes(), charset);
 }
 
 wxSizer *AssExporter::GetSettingsSizer(std::string const& name) {
diff --git a/src/subtitle_format.h b/src/subtitle_format.h
index bb2878942..c02e90af0 100644
--- a/src/subtitle_format.h
+++ b/src/subtitle_format.h
@@ -106,6 +106,15 @@ public:
 	/// @param forceEncoding Encoding to use or empty string for default
 	virtual void WriteFile(const AssFile *src, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& encoding="") const { }
 
+	/// Export a subtitle file
+	///
+	/// This is used when saving via Export As..., for subtitle formats which
+	/// want to distinguish between exporting a final version of a script and
+	/// saving a project.
+	virtual void ExportFile(const AssFile *src, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& encoding="") const {
+		WriteFile(src, filename, fps, encoding);
+	}
+
 	/// Get the wildcards for a save or load dialog
 	/// @param mode 0: load 1: save
 	static std::string GetWildcards(int mode);
diff --git a/src/subtitle_format_ass.cpp b/src/subtitle_format_ass.cpp
index be4c31356..a2a134ef7 100644
--- a/src/subtitle_format_ass.cpp
+++ b/src/subtitle_format_ass.cpp
@@ -160,3 +160,11 @@ void AssSubtitleFormat::WriteFile(const AssFile *src, agi::fs::path const& filen
 	writer.Write(src->Events);
 	writer.WriteExtradata(src->Extradata);
 }
+
+void AssSubtitleFormat::ExportFile(const AssFile *src, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& encoding) const {
+	Writer writer(filename, encoding);
+	writer.Write(src->Info);
+	writer.Write(src->Styles);
+	writer.Write(src->Attachments);
+	writer.Write(src->Events);
+}
diff --git a/src/subtitle_format_ass.h b/src/subtitle_format_ass.h
index 61dfab131..42691e6f7 100644
--- a/src/subtitle_format_ass.h
+++ b/src/subtitle_format_ass.h
@@ -28,4 +28,7 @@ public:
 
 	void ReadFile(AssFile *target, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& forceEncoding) const override;
 	void WriteFile(const AssFile *src, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& encoding) const override;
+
+	// Does not write [Aegisub Project Garbage] and [Aegisub Extradata] sections when exporting
+	void ExportFile(const AssFile *src, agi::fs::path const& filename, agi::vfr::Framerate const& fps, std::string const& encoding) const override;
 };
-- 
GitLab