forked from mia/Aegisub
Improved detection of ASS-family formats.
Originally committed to SVN as r2474.
This commit is contained in:
parent
2a0f9b7447
commit
56e0bea8d9
2 changed files with 47 additions and 3 deletions
|
@ -96,10 +96,48 @@ StringArray FormatASS2::GetWriteExtensions() const
|
||||||
float FormatASSFamily::CanReadFile(Reader &reader) const
|
float FormatASSFamily::CanReadFile(Reader &reader) const
|
||||||
{
|
{
|
||||||
shared_ptr<TextReader> file = reader.GetTextReader();
|
shared_ptr<TextReader> file = reader.GetTextReader();
|
||||||
if (!file->HasMoreLines()) return 0;
|
|
||||||
|
// Check header
|
||||||
|
if (!file->HasMoreLines()) return 0.0f;
|
||||||
String line = file->ReadLineFromFile();
|
String line = file->ReadLineFromFile();
|
||||||
if (line == "[Script Info]") return 1;
|
line.AsciiMakeLower();
|
||||||
return 0;
|
if (line != "[script info]") return 0.0f;
|
||||||
|
|
||||||
|
float version = 0.0f;
|
||||||
|
float sections = 0.25f;
|
||||||
|
String section = line;
|
||||||
|
while (file->HasMoreLines()) {
|
||||||
|
// Get line
|
||||||
|
line = file->ReadLineFromFile();
|
||||||
|
line.AsciiMakeLower();
|
||||||
|
|
||||||
|
// Set section
|
||||||
|
if (line[0] == '[' && line[line.Length()-1] == ']') section = line;
|
||||||
|
|
||||||
|
// Check version
|
||||||
|
if (section == "[script info]") {
|
||||||
|
if (line.StartsWith("ScriptType")) {
|
||||||
|
int formatVersion = GetVersion();
|
||||||
|
String expected = "";
|
||||||
|
switch (formatVersion) {
|
||||||
|
case 0: expected = "v4.00"; break;
|
||||||
|
case 1: expected = "v4.00+"; break;
|
||||||
|
case 2: expected = "v4.00++"; break;
|
||||||
|
}
|
||||||
|
if (line.EndsWith(expected)) version = 0.5f;
|
||||||
|
else version = 0.25f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Done when events begin
|
||||||
|
if (section == "[events]") {
|
||||||
|
sections += 0.25f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OK
|
||||||
|
return sections+version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,9 @@ namespace Athenasub {
|
||||||
|
|
||||||
// Advanced Substation Alpha format base class
|
// Advanced Substation Alpha format base class
|
||||||
class FormatASSFamily : public IFormat {
|
class FormatASSFamily : public IFormat {
|
||||||
|
protected:
|
||||||
|
virtual int GetVersion() const = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~FormatASSFamily() {}
|
virtual ~FormatASSFamily() {}
|
||||||
|
|
||||||
|
@ -98,6 +101,7 @@ namespace Athenasub {
|
||||||
String GetName() const { return "Substation Alpha"; }
|
String GetName() const { return "Substation Alpha"; }
|
||||||
StringArray GetReadExtensions() const;
|
StringArray GetReadExtensions() const;
|
||||||
StringArray GetWriteExtensions() const;
|
StringArray GetWriteExtensions() const;
|
||||||
|
int GetVersion() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Advanced Substation Alpha
|
// Advanced Substation Alpha
|
||||||
|
@ -107,6 +111,7 @@ namespace Athenasub {
|
||||||
String GetName() const { return "Advanced Substation Alpha"; }
|
String GetName() const { return "Advanced Substation Alpha"; }
|
||||||
StringArray GetReadExtensions() const;
|
StringArray GetReadExtensions() const;
|
||||||
StringArray GetWriteExtensions() const;
|
StringArray GetWriteExtensions() const;
|
||||||
|
int GetVersion() const { return 1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Advanced Substation Alpha 2
|
// Advanced Substation Alpha 2
|
||||||
|
@ -116,6 +121,7 @@ namespace Athenasub {
|
||||||
String GetName() const { return "Advanced Substation Alpha 2"; }
|
String GetName() const { return "Advanced Substation Alpha 2"; }
|
||||||
StringArray GetReadExtensions() const;
|
StringArray GetReadExtensions() const;
|
||||||
StringArray GetWriteExtensions() const;
|
StringArray GetWriteExtensions() const;
|
||||||
|
int GetVersion() const { return 2; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue