mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +01:00
Fixing some stuff in DC Subtitleformat - thx Francisco :)
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@644 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
a71d7c38e7
commit
b3d1380622
@ -8,26 +8,19 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
{
|
{
|
||||||
|
|
||||||
// http://code.google.com/p/subtitleedit/issues/detail?id=18
|
// http://code.google.com/p/subtitleedit/issues/detail?id=18
|
||||||
|
//<?xml version="1.0" encoding="UTF-8"?>
|
||||||
//<DCSubtitle Version="1.0">
|
//<DCSubtitle Version="1.0">
|
||||||
//<!-- *** www.digital-cinema-services.de *** -->
|
// <SubtitleID>4EB245B8-4D3A-4158-9516-95DD20E8322E</SubtitleID>
|
||||||
//<!-- *** ElMariKonverter *** -->
|
// <MovieTitle>Unknown</MovieTitle>
|
||||||
//<Id>urn:uuid:0b8a1af2-2073-493c-aea1-fa6b5601101a</Id>
|
// <ReelNumber>1</ReelNumber>
|
||||||
//<MovieTitle>Im Himmel unter der Erde</MovieTitle>
|
// <Language>Swedish</Language>
|
||||||
//<ContentTitleText>de - Im Himmel unter der Erde</ContentTitleText>
|
// <Font Italic="no">
|
||||||
//<AnnotationText>de - Im Himmel unter der Erde</AnnotationText>
|
// <Subtitle SpotNumber="1" TimeIn="00:00:06:040" TimeOut="00:00:08:040" FadeUpTime="20" FadeDownTime="20">
|
||||||
//<IssueDate>2011-03-25T14:07:00</IssueDate>
|
// <Text Direction="horizontal" HAlign="center" HPosition="0.0" VAlign="bottom" VPosition="6.0">DETTA HAR HÄNT...</Text>
|
||||||
//<StartTime>00:00:00:000</StartTime>
|
// </Subtitle>
|
||||||
//<ReelNumber>1</ReelNumber>
|
// </Font>
|
||||||
//<Language>de</Language>
|
//</DCSubtitle>
|
||||||
//<EditRate>24 1</EditRate>
|
|
||||||
//<TimeCodeRate>24</TimeCodeRate>
|
|
||||||
//<LoadFont Id="Font1" URI="Arial.ttf"/>
|
|
||||||
//<SubtitleList>
|
|
||||||
//<Font Id="Font1" Color="FFFFFFFF" Effect="outline" EffectColor="FF000000" Italic="no" Underlined="no" Script="normal" Size="52">
|
|
||||||
//<Subtitle SpotNumber="1" FadeUpTime="20" FadeDownTime="20" TimeIn="00:50:05:10" TimeOut="00:50:10:01">
|
|
||||||
//<Text Direction="horizontal" HAlign="center" HPosition="0" VAlign="bottom" VPosition="8"><Font Italic="yes">Meine Mutter und meine Schwester,</Font></Text>
|
|
||||||
//</Subtitle>
|
|
||||||
|
|
||||||
class DCSubtitle : SubtitleFormat
|
class DCSubtitle : SubtitleFormat
|
||||||
{
|
{
|
||||||
public override string Extension
|
public override string Extension
|
||||||
@ -55,7 +48,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
lines.ForEach(line => sb.AppendLine(line));
|
lines.ForEach(line => sb.AppendLine(line));
|
||||||
string xmlAsString = sb.ToString().Trim();
|
string xmlAsString = sb.ToString().Trim();
|
||||||
if (xmlAsString.Contains("<DCSubtitle")) // && xmlAsString.Contains("<SubtitleList"))
|
if (xmlAsString.Contains("<DCSubtitle"))
|
||||||
{
|
{
|
||||||
XmlDocument xml = new XmlDocument();
|
XmlDocument xml = new XmlDocument();
|
||||||
try
|
try
|
||||||
@ -79,45 +72,29 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ConvertToTimeString(TimeCode time)
|
|
||||||
{
|
|
||||||
return string.Format("{0:00}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToText(Subtitle subtitle, string title)
|
public override string ToText(Subtitle subtitle, string title)
|
||||||
{
|
{
|
||||||
string xmlStructure = "<DCSubtitle Version=\"1.0\">" +
|
string date = string.Format("{0:0000}:{1:00}:{2:00}T{3:HH:mm:ss}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now); //2011-03-25T14:07:00
|
||||||
@" <Id>urn:uuid:0b8a1af2-2073-493c-aea1-fa6b5601101a</Id>
|
string xmlStructure = "<DCSubtitle Version=\"1.0\">" + Environment.NewLine +
|
||||||
<MovieTitle>[TITLE]</MovieTitle>
|
" <SubtitleID>4EB245B8-4D3A-4158-9516-95DD20E8322E</SubtitleID>" + Environment.NewLine +
|
||||||
<ContentTitleText>[TITLE]</ContentTitleText>
|
" <MovieTitle></MovieTitle>" + Environment.NewLine +
|
||||||
<AnnotationText>[TITLE]</AnnotationText>
|
" <ReelNumber>1</ReelNumber>" + Environment.NewLine +
|
||||||
<IssueDate>[DATE]</IssueDate>
|
" <IssueDate>" + date + "</IssueDate>" + Environment.NewLine +
|
||||||
<StartTime>00:00:00:000</StartTime>
|
" <Language>" + Utilities.AutoDetectGoogleLanguage(subtitle) + "</Language>" + Environment.NewLine +
|
||||||
<ReelNumber>1</ReelNumber>
|
" <SubtitleList>" + Environment.NewLine +
|
||||||
<Language>de</Language>
|
" <Font Color=\"FFFFFFFF\" Effect=\"outline\" EffectColor=\"FF000000\" Italic=\"no\" Underlined=\"no\" Script=\"normal\" Size=\"52\">" + Environment.NewLine +
|
||||||
<EditRate>24 1</EditRate>
|
" </Font>" + Environment.NewLine +
|
||||||
<TimeCodeRate>24</TimeCodeRate>
|
" </SubtitleList>" + Environment.NewLine +
|
||||||
<LoadFont Id=" + "\"Font1\" URI=\"Arial.ttf\"/>" + Environment.NewLine +
|
"</DCSubtitle>";
|
||||||
" <SubtitleList>" + Environment.NewLine +
|
|
||||||
" <Font Id=\"Font1\" Color=\"FFFFFFFF\" Effect=\"outline\" EffectColor=\"FF000000\" Italic=\"no\" Underlined=\"no\" Script=\"normal\" Size=\"52\">" + Environment.NewLine +
|
|
||||||
" </Font>" + Environment.NewLine +
|
|
||||||
" </SubtitleList>" + Environment.NewLine +
|
|
||||||
"</DCSubtitle>";
|
|
||||||
XmlNode t = new XmlDocument().CreateElement("title");
|
|
||||||
t.InnerText = title;
|
|
||||||
xmlStructure = xmlStructure.Replace("[TITLE]", t.InnerXml);
|
|
||||||
xmlStructure = xmlStructure.Replace("[DATE]", string.Format("{0:0000}:{1:00}:{2:00}T{3:HH:mm:ss}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now)); //2011-03-25T14:07:00
|
|
||||||
|
|
||||||
XmlDocument xml = new XmlDocument();
|
XmlDocument xml = new XmlDocument();
|
||||||
xml.LoadXml(xmlStructure);
|
xml.LoadXml(xmlStructure);
|
||||||
|
xml.DocumentElement.SelectSingleNode("MovieTitle").InnerText = title;
|
||||||
|
|
||||||
XmlNode mainListFont = xml.DocumentElement.SelectSingleNode("//SubtitleList/Font");
|
XmlNode mainListFont = xml.DocumentElement.SelectSingleNode("//SubtitleList/Font");
|
||||||
int no = 0;
|
int no = 0;
|
||||||
foreach (Paragraph p in subtitle.Paragraphs)
|
foreach (Paragraph p in subtitle.Paragraphs)
|
||||||
{
|
{
|
||||||
//<Subtitle SpotNumber="1" FadeUpTime="20" FadeDownTime="20" TimeIn="00:50:05:10" TimeOut="00:50:10:01">
|
|
||||||
//<Text Direction="horizontal" HAlign="center" HPosition="0" VAlign="bottom" VPosition="8"><Font Italic="yes">Meine Mutter und meine Schwester,</Font></Text>
|
|
||||||
//</Subtitle>
|
|
||||||
XmlNode subNode = xml.CreateElement("Subtitle");
|
XmlNode subNode = xml.CreateElement("Subtitle");
|
||||||
|
|
||||||
XmlAttribute id = xml.CreateAttribute("SpotNumber");
|
XmlAttribute id = xml.CreateAttribute("SpotNumber");
|
||||||
@ -140,7 +117,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
end.InnerText = ConvertToTimeString(p.EndTime);
|
end.InnerText = ConvertToTimeString(p.EndTime);
|
||||||
subNode.Attributes.Append(end);
|
subNode.Attributes.Append(end);
|
||||||
|
|
||||||
// <Text VPosition="8" VAlign="bottom" HPosition="0" HAlign="center" Direction="horizontal">Er hat uns allen geholfen:</Text>
|
|
||||||
string[] lines = p.Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
string[] lines = p.Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||||
int vPos = 1 + lines.Length * 7;
|
int vPos = 1 + lines.Length * 7;
|
||||||
bool isItalic = false;
|
bool isItalic = false;
|
||||||
@ -240,7 +216,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
|
XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
|
||||||
writer.Formatting = Formatting.Indented;
|
writer.Formatting = Formatting.Indented;
|
||||||
xml.Save(writer);
|
xml.Save(writer);
|
||||||
return Encoding.UTF8.GetString(ms.ToArray()).Trim();
|
return Encoding.UTF8.GetString(ms.ToArray()).Trim().Replace("encoding=\"utf-8\"", "encoding=\"UTF-8\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||||
@ -262,9 +238,6 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
{
|
{
|
||||||
switch (innerNode.Name.ToString())
|
switch (innerNode.Name.ToString())
|
||||||
{
|
{
|
||||||
//case "br":
|
|
||||||
// pText.AppendLine();
|
|
||||||
// break;
|
|
||||||
case "Text":
|
case "Text":
|
||||||
if (innerNode.Attributes["VPosition"] != null)
|
if (innerNode.Attributes["VPosition"] != null)
|
||||||
{
|
{
|
||||||
@ -318,9 +291,20 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
|||||||
private static TimeCode GetTimeCode(string s)
|
private static TimeCode GetTimeCode(string s)
|
||||||
{
|
{
|
||||||
string[] parts = s.Split(new char[] { ':', '.', ',' });
|
string[] parts = s.Split(new char[] { ':', '.', ',' });
|
||||||
TimeSpan ts = new TimeSpan(0, int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]));
|
|
||||||
|
int milliseconds = (int)(int.Parse(parts[3]) / 249.0 * 1000); // 000 to 249
|
||||||
|
if (milliseconds > 999)
|
||||||
|
milliseconds = 999;
|
||||||
|
|
||||||
|
TimeSpan ts = new TimeSpan(0, int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), milliseconds);
|
||||||
return new TimeCode(ts);
|
return new TimeCode(ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string ConvertToTimeString(TimeCode time)
|
||||||
|
{
|
||||||
|
return string.Format("{0:00}:{1:00}:{2:00}.{3:000}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds / 4);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user