mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 06:22:38 +01:00
Fix alignment tags in .stl text formats - thx Shas2509 :)
Work on #2755
This commit is contained in:
parent
7d7b22bcb3
commit
e9e3228b7f
@ -33,35 +33,65 @@ $FadeOut = 0
|
||||
$HorzAlign = Center
|
||||
";
|
||||
|
||||
var lastVerticalAlign = "$VertAlign=Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign=Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var lastVerticalAlign = verticalAlign;
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
string startTime = string.Format(timeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFramesMaxFrameRate(p.StartTime.Milliseconds));
|
||||
string endTime = string.Format(timeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFramesMaxFrameRate(p.EndTime.Milliseconds));
|
||||
|
||||
bool topAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
verticalAlign = topAlign ? "$VertAlign=Top" : "$VertAlign=Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
{
|
||||
sb.AppendLine(verticalAlign);
|
||||
}
|
||||
|
||||
sb = ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendFormat(paragraphWriteFormat, startTime, endTime, EncodeStyles(p.Text));
|
||||
lastVerticalAlign = verticalAlign;
|
||||
}
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
|
||||
internal static StringBuilder ToTextAlignment(Paragraph p, StringBuilder sb, ref string lastVerticalAlign, ref string lastHorizontalAlign)
|
||||
{
|
||||
string verticalAlign;
|
||||
string horizontalAlign;
|
||||
bool verticalTopAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
bool verticalCenterAlign = p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an6}", StringComparison.Ordinal);
|
||||
if (verticalTopAlign)
|
||||
verticalAlign = "$VertAlign=Top";
|
||||
else if (verticalCenterAlign)
|
||||
verticalAlign = "$VertAlign=Center";
|
||||
else
|
||||
verticalAlign = "$VertAlign=Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
sb.AppendLine(verticalAlign);
|
||||
|
||||
bool horizontalLeftAlign = p.Text.StartsWith("{\\an1}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an7}", StringComparison.Ordinal);
|
||||
bool horizontalRightAlign = p.Text.StartsWith("{\\an3}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an6}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
if (horizontalLeftAlign)
|
||||
horizontalAlign = "$HorzAlign=Left";
|
||||
else if (horizontalRightAlign)
|
||||
horizontalAlign = "$HorzAlign=Right";
|
||||
else
|
||||
horizontalAlign = "$HorzAlign=Center";
|
||||
if (lastHorizontalAlign != horizontalAlign)
|
||||
sb.AppendLine(horizontalAlign);
|
||||
|
||||
lastVerticalAlign = verticalAlign;
|
||||
lastHorizontalAlign = horizontalAlign;
|
||||
return sb;
|
||||
}
|
||||
|
||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||
{
|
||||
_errorCount = 0;
|
||||
int number = 0;
|
||||
bool alignTop = false;
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(line) && line[0] != '$')
|
||||
@ -78,8 +108,7 @@ $HorzAlign = Center
|
||||
p.Number = number;
|
||||
p.Text = threePart[2].TrimEnd().Replace(" | ", Environment.NewLine).Replace("|", Environment.NewLine);
|
||||
p.Text = DecodeStyles(p.Text);
|
||||
if (alignTop)
|
||||
p.Text = "{\\an8}" + p.Text;
|
||||
p.Text = GetAlignment(verticalAlign, horizontalAlign) + p.Text;
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
}
|
||||
@ -90,19 +119,42 @@ $HorzAlign = Center
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var s = line.RemoveChar(' ').RemoveChar('\t');
|
||||
if (s.Equals("$VertAlign=Bottom", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = false;
|
||||
}
|
||||
else if (s.Equals("$VertAlign=Top", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = true;
|
||||
}
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static string GetAlignment(string verticalAlign, string horizontalAlign)
|
||||
{
|
||||
if (verticalAlign.Equals("$VertAlign=Top"))
|
||||
{
|
||||
if (horizontalAlign.Equals("$HorzAlign=Left"))
|
||||
return "{\\an7}";
|
||||
if (horizontalAlign.Equals("$HorzAlign=Right"))
|
||||
return "{\\an9}";
|
||||
return "{\\an8}";
|
||||
}
|
||||
|
||||
if (verticalAlign.Equals("$VertAlign=Center"))
|
||||
{
|
||||
if (horizontalAlign.Equals("$HorzAlign=Left"))
|
||||
return "{\\an4}";
|
||||
if (horizontalAlign.Equals("$HorzAlign=Right"))
|
||||
return "{\\an6}";
|
||||
return "{\\an5}";
|
||||
}
|
||||
|
||||
if (horizontalAlign.Equals("$HorzAlign=Left"))
|
||||
return "{\\an1}";
|
||||
if (horizontalAlign.Equals("$HorzAlign=Right"))
|
||||
return "{\\an3}";
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
internal static string DecodeStyles(string text)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
@ -33,26 +33,16 @@ $FadeOut = 0
|
||||
$HorzAlign = Center
|
||||
";
|
||||
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var lastVerticalAlign = verticalAlign;
|
||||
var lastVerticalAlign = "$VertAlign=Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign=Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
string startTime = string.Format(timeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFramesMaxFrameRate(p.StartTime.Milliseconds));
|
||||
string endTime = string.Format(timeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFramesMaxFrameRate(p.EndTime.Milliseconds));
|
||||
|
||||
bool topAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
verticalAlign = topAlign ? "$VertAlign=Top" : "$VertAlign=Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
{
|
||||
sb.AppendLine(verticalAlign);
|
||||
}
|
||||
|
||||
DvdStudioPro.ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendFormat(paragraphWriteFormat, startTime, endTime, DvdStudioPro.EncodeStyles(p.Text));
|
||||
lastVerticalAlign = verticalAlign;
|
||||
}
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
@ -61,7 +51,8 @@ $HorzAlign = Center
|
||||
{
|
||||
_errorCount = 0;
|
||||
int number = 0;
|
||||
bool alignTop = false;
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(line) && line[0] != '$' && !line.StartsWith("//", StringComparison.Ordinal))
|
||||
@ -79,8 +70,7 @@ $HorzAlign = Center
|
||||
string text = line.Substring(27).Trim();
|
||||
p.Text = text.Replace(" | ", Environment.NewLine).Replace("|", Environment.NewLine);
|
||||
p.Text = DvdStudioPro.DecodeStyles(p.Text);
|
||||
if (alignTop)
|
||||
p.Text = "{\\an8}" + p.Text;
|
||||
p.Text = DvdStudioPro.GetAlignment(verticalAlign, horizontalAlign) + p.Text;
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
}
|
||||
@ -91,15 +81,11 @@ $HorzAlign = Center
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var s = line.RemoveChar(' ').RemoveChar('\t');
|
||||
if (s.Equals("$VertAlign=Bottom", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = false;
|
||||
}
|
||||
else if (s.Equals("$VertAlign=Top", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = true;
|
||||
}
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,26 +33,16 @@ $FadeOut = 0
|
||||
$HorzAlign = Center
|
||||
";
|
||||
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var lastVerticalAlign = verticalAlign;
|
||||
var lastVerticalAlign = "$VertAlign=Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign=Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
string startTime = string.Format(timeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFramesMaxFrameRate(p.StartTime.Milliseconds));
|
||||
string endTime = string.Format(timeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFramesMaxFrameRate(p.EndTime.Milliseconds));
|
||||
|
||||
bool topAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
verticalAlign = topAlign ? "$VertAlign=Top" : "$VertAlign=Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
{
|
||||
sb.AppendLine(verticalAlign);
|
||||
}
|
||||
|
||||
DvdStudioPro.ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendFormat(paragraphWriteFormat, startTime, endTime, DvdStudioPro.EncodeStyles(p.Text));
|
||||
lastVerticalAlign = verticalAlign;
|
||||
}
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
@ -66,7 +56,8 @@ $HorzAlign = Center
|
||||
{
|
||||
_errorCount = 0;
|
||||
int number = 0;
|
||||
bool alignTop = false;
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(line) && line[0] != '$' && !line.StartsWith("//", StringComparison.Ordinal))
|
||||
@ -84,8 +75,7 @@ $HorzAlign = Center
|
||||
string text = line.Substring(25).Trim();
|
||||
p.Text = text.Replace(" | ", Environment.NewLine).Replace("|", Environment.NewLine);
|
||||
p.Text = DvdStudioPro.DecodeStyles(p.Text);
|
||||
if (alignTop)
|
||||
p.Text = "{\\an8}" + p.Text;
|
||||
p.Text = DvdStudioPro.GetAlignment(verticalAlign, horizontalAlign) + p.Text;
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
}
|
||||
@ -96,15 +86,11 @@ $HorzAlign = Center
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var s = line.RemoveChar(' ').RemoveChar('\t');
|
||||
if (s.Equals("$VertAlign=Bottom", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = false;
|
||||
}
|
||||
else if (s.Equals("$VertAlign=Top", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = true;
|
||||
}
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line != null && line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,26 +33,16 @@ $FadeOut = 0
|
||||
$HorzAlign = Center
|
||||
";
|
||||
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var lastVerticalAlign = verticalAlign;
|
||||
var lastVerticalAlign = "$VertAlign=Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign=Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
string startTime = string.Format(timeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFramesMaxFrameRate(p.StartTime.Milliseconds));
|
||||
string endTime = string.Format(timeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFramesMaxFrameRate(p.EndTime.Milliseconds));
|
||||
|
||||
bool topAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
verticalAlign = topAlign ? "$VertAlign=Top" : "$VertAlign=Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
{
|
||||
sb.AppendLine(verticalAlign);
|
||||
}
|
||||
|
||||
DvdStudioPro.ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendFormat(paragraphWriteFormat, startTime, endTime, DvdStudioPro.EncodeStyles(p.Text));
|
||||
lastVerticalAlign = verticalAlign;
|
||||
}
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
@ -62,7 +52,8 @@ $HorzAlign = Center
|
||||
_errorCount = 0;
|
||||
int number = 0;
|
||||
bool italicOn = false;
|
||||
bool alignTop = false;
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(line))
|
||||
@ -84,13 +75,8 @@ $HorzAlign = Center
|
||||
p.Text = text.Replace(" | ", Environment.NewLine).Replace("|", Environment.NewLine);
|
||||
p.Text = DvdStudioPro.DecodeStyles(p.Text);
|
||||
if (italicOn && !p.Text.Contains("<i>"))
|
||||
{
|
||||
p.Text = "<i>" + p.Text + "</i>";
|
||||
}
|
||||
if (alignTop)
|
||||
{
|
||||
p.Text = "{\\an8}" + p.Text;
|
||||
}
|
||||
p.Text = DvdStudioPro.GetAlignment(verticalAlign, horizontalAlign) + p.Text;
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
}
|
||||
@ -117,15 +103,11 @@ $HorzAlign = Center
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var s = line.RemoveChar(' ').RemoveChar('\t');
|
||||
if (s.Equals("$VertAlign=Bottom", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = false;
|
||||
}
|
||||
else if (s.Equals("$VertAlign=Top", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
alignTop = true;
|
||||
}
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -57,10 +57,14 @@ $ColorIndex3 = 2
|
||||
$ColorIndex4 = 3
|
||||
|
||||
//Subtitles";
|
||||
|
||||
var lastVerticalAlign = "$VertAlign=Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign=Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
DvdStudioPro.ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendLine($"{EncodeTimeCode(p.StartTime)},{EncodeTimeCode(p.EndTime)},{EncodeText(p.Text)}");
|
||||
}
|
||||
return sb.ToString();
|
||||
@ -76,6 +80,7 @@ $ColorIndex4 = 3
|
||||
text = text.Replace("</i>", Italic);
|
||||
text = text.Replace("<u>", Underline);
|
||||
text = text.Replace("</u>", Underline);
|
||||
text = HtmlUtil.RemoveHtmlTags(text, true);
|
||||
if (allItalic)
|
||||
return text.Replace(Environment.NewLine, "|^I");
|
||||
return text.Replace(Environment.NewLine, "|");
|
||||
@ -99,6 +104,8 @@ $ColorIndex4 = 3
|
||||
if (fileName != null && fileName.EndsWith(".stl", StringComparison.OrdinalIgnoreCase)) // allow empty text if extension is ".stl"...
|
||||
timeCodeRegex = RegexTimeCodes2;
|
||||
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (line.IndexOf(':') == 2 && timeCodeRegex.IsMatch(line))
|
||||
@ -108,7 +115,9 @@ $ColorIndex4 = 3
|
||||
|
||||
try
|
||||
{
|
||||
Paragraph p = new Paragraph(DecodeTimeCode(start), DecodeTimeCode(end), DecodeText(line.Substring(24)));
|
||||
var text = DecodeText(line.Substring(24));
|
||||
text = DvdStudioPro.GetAlignment(verticalAlign, horizontalAlign) + text;
|
||||
Paragraph p = new Paragraph(DecodeTimeCode(start), DecodeTimeCode(end), text);
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
catch
|
||||
@ -116,6 +125,14 @@ $ColorIndex4 = 3
|
||||
_errorCount++;
|
||||
}
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(line) && !line.StartsWith("//", StringComparison.Ordinal) && !line.StartsWith('$'))
|
||||
{
|
||||
_errorCount++;
|
||||
|
@ -43,15 +43,56 @@ $TapeOffset = FALSE
|
||||
\\Colour 6 = Cyan
|
||||
\\Colour 7 = White
|
||||
";
|
||||
|
||||
var lastVerticalAlign = "$VertAlign = Bottom";
|
||||
var lastHorizontalcalAlign = "$HorzAlign = Center";
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine(header);
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
sb.AppendLine($"$HorzAlign = Center\r\n{EncodeTimeCode(p.StartTime)}, {EncodeTimeCode(p.EndTime)}, {EncodeText(p.Text)}");
|
||||
DvdStudioPro.ToTextAlignment(p, sb, ref lastVerticalAlign, ref lastHorizontalcalAlign);
|
||||
sb.AppendLine($"{EncodeTimeCode(p.StartTime)}, {EncodeTimeCode(p.EndTime)}, {EncodeText(p.Text)}");
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static StringBuilder ToTextAlignment(Paragraph p, StringBuilder sb, ref string lastVerticalAlign, ref string lastHorizontalAlign)
|
||||
{
|
||||
string verticalAlign;
|
||||
string horizontalAlign;
|
||||
bool verticalTopAlign = p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
bool verticalCenterAlign = p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an6}", StringComparison.Ordinal);
|
||||
if (verticalTopAlign)
|
||||
verticalAlign = "$VertAlign = Top";
|
||||
else if (verticalCenterAlign)
|
||||
verticalAlign = "$VertAlign = Center";
|
||||
else
|
||||
verticalAlign = "$VertAlign = Bottom";
|
||||
if (lastVerticalAlign != verticalAlign)
|
||||
sb.AppendLine(verticalAlign);
|
||||
|
||||
bool horizontalLeftAlign = p.Text.StartsWith("{\\an1}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an7}", StringComparison.Ordinal);
|
||||
bool horizontalRightAlign = p.Text.StartsWith("{\\an3}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an6}", StringComparison.Ordinal) ||
|
||||
p.Text.StartsWith("{\\an9}", StringComparison.Ordinal);
|
||||
if (horizontalLeftAlign)
|
||||
horizontalAlign = "$HorzAlign = Left";
|
||||
else if (horizontalRightAlign)
|
||||
horizontalAlign = "$HorzAlign = Right";
|
||||
else
|
||||
horizontalAlign = "$HorzAlign = Center";
|
||||
sb.AppendLine(horizontalAlign);
|
||||
|
||||
lastVerticalAlign = verticalAlign;
|
||||
return sb;
|
||||
}
|
||||
|
||||
private static string EncodeText(string text)
|
||||
{
|
||||
text = text.Replace("<b>", "^B");
|
||||
@ -60,6 +101,7 @@ $TapeOffset = FALSE
|
||||
text = text.Replace("</i>", string.Empty);
|
||||
text = text.Replace("<u>", "^U");
|
||||
text = text.Replace("</u>", string.Empty);
|
||||
text = HtmlUtil.RemoveHtmlTags(text, true);
|
||||
return text.Replace(Environment.NewLine, "|");
|
||||
}
|
||||
|
||||
@ -73,6 +115,8 @@ $TapeOffset = FALSE
|
||||
{
|
||||
//00:01:54:19,00:01:56:17,We should be thankful|they accepted our offer.
|
||||
_errorCount = 0;
|
||||
var verticalAlign = "$VertAlign=Bottom";
|
||||
var horizontalAlign = "$HorzAlign=Center";
|
||||
subtitle.Paragraphs.Clear();
|
||||
foreach (string line in lines)
|
||||
{
|
||||
@ -83,9 +127,11 @@ $TapeOffset = FALSE
|
||||
|
||||
try
|
||||
{
|
||||
var text = DecodeText(line.Substring(25).Trim());
|
||||
text = DvdStudioPro.GetAlignment(verticalAlign, horizontalAlign) + text;
|
||||
var startTime = DecodeTimeCodeFramesFourParts(start.Split(SplitCharColon, StringSplitOptions.RemoveEmptyEntries));
|
||||
var endTime = DecodeTimeCodeFramesFourParts(end.Split(SplitCharColon, StringSplitOptions.RemoveEmptyEntries));
|
||||
var p = new Paragraph(startTime, endTime, DecodeText(line.Substring(25).Trim()));
|
||||
var p = new Paragraph(startTime, endTime, text);
|
||||
subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
catch
|
||||
@ -93,6 +139,14 @@ $TapeOffset = FALSE
|
||||
_errorCount++;
|
||||
}
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$VertAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
verticalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (line.TrimStart().StartsWith("$HorzAlign", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
horizontalAlign = line.RemoveChar(' ').RemoveChar('\t');
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(line) && !line.StartsWith("//", StringComparison.Ordinal) && !line.StartsWith('$'))
|
||||
{
|
||||
_errorCount++;
|
||||
|
Loading…
Reference in New Issue
Block a user