mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-23 03:33:18 +01:00
Add first support for WebVTT colors
This commit is contained in:
parent
344e05ecf5
commit
98dadfcf99
@ -374,5 +374,33 @@ namespace Test.Logic
|
|||||||
|
|
||||||
Assert.AreEqual("{\\an8}That was really delicious." + Environment.NewLine + "-I know.", result);
|
Assert.AreEqual("{\\an8}That was really delicious." + Environment.NewLine + "-I know.", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void TestVttDialog1()
|
||||||
|
{
|
||||||
|
Configuration.Settings.General.DialogStyle = Nikse.SubtitleEdit.Core.Enums.DialogType.DashBothLinesWithSpace;
|
||||||
|
|
||||||
|
var subtitle = new Subtitle(new List<Paragraph>() { new Paragraph("<c.cyan>That was really delicious.</c>" + Environment.NewLine +
|
||||||
|
"I know.", 0, 2000) });
|
||||||
|
|
||||||
|
ConvertColorsToDialogUtils.ConvertColorsToDialogInSubtitle(subtitle, true, false, false);
|
||||||
|
var result = subtitle.Paragraphs.First().Text;
|
||||||
|
|
||||||
|
Assert.AreEqual("- That was really delicious." + Environment.NewLine + "- I know.", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void TestVttDialog2()
|
||||||
|
{
|
||||||
|
Configuration.Settings.General.DialogStyle = Nikse.SubtitleEdit.Core.Enums.DialogType.DashBothLinesWithSpace;
|
||||||
|
|
||||||
|
var subtitle = new Subtitle(new List<Paragraph>() { new Paragraph("That's it!" + Environment.NewLine +
|
||||||
|
"<c.cyan>..sped to victory.</c>", 0, 2000) });
|
||||||
|
|
||||||
|
ConvertColorsToDialogUtils.ConvertColorsToDialogInSubtitle(subtitle, true, false, false);
|
||||||
|
var result = subtitle.Paragraphs.First().Text;
|
||||||
|
|
||||||
|
Assert.AreEqual("- That's it!" + Environment.NewLine + "- ..sped to victory.", result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace Nikse.SubtitleEdit.Core.Common
|
namespace Nikse.SubtitleEdit.Core.Common
|
||||||
{
|
{
|
||||||
@ -29,10 +30,20 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
|
|
||||||
while (index < p.Text.Length)
|
while (index < p.Text.Length)
|
||||||
{
|
{
|
||||||
if (index + "<font color".Length <= p.Text.Length && p.Text.SafeSubstring(index, "<font color".Length).ToLowerInvariant() == "<font color")
|
bool isHtmlColor = index + "<font color".Length <= p.Text.Length && p.Text.SafeSubstring(index, "<font color".Length).ToLowerInvariant() == "<font color";
|
||||||
|
bool isVttColor = index + "<c.".Length <= p.Text.Length && p.Text.SafeSubstring(index, "<c.".Length).ToLowerInvariant() == "<c.";
|
||||||
|
|
||||||
|
if (isHtmlColor || isVttColor)
|
||||||
{
|
{
|
||||||
// New color
|
// New color
|
||||||
newColor = p.Text.SafeSubstring(p.Text.IndexOf("=", index) + 1, p.Text.IndexOf(">", index) - p.Text.IndexOf("=", index) - 1).Replace("\"", "");
|
if (isVttColor)
|
||||||
|
{
|
||||||
|
newColor = p.Text.SafeSubstring(p.Text.IndexOf(".", index) + 1, p.Text.IndexOf(">", index) - p.Text.IndexOf(".", index) - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newColor = p.Text.SafeSubstring(p.Text.IndexOf("=", index) + 1, p.Text.IndexOf(">", index) - p.Text.IndexOf("=", index) - 1).Replace("\"", "");
|
||||||
|
}
|
||||||
|
|
||||||
if (currentColor == null)
|
if (currentColor == null)
|
||||||
{
|
{
|
||||||
@ -85,11 +96,18 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
}
|
}
|
||||||
else if (index + "</font>".Length <= p.Text.Length && p.Text.SafeSubstring(index, "</font>".Length).ToLowerInvariant() == "</font>")
|
else if (index + "</font>".Length <= p.Text.Length && p.Text.SafeSubstring(index, "</font>".Length).ToLowerInvariant() == "</font>")
|
||||||
{
|
{
|
||||||
// End of color
|
// End of HTML color
|
||||||
endOfColor = true;
|
endOfColor = true;
|
||||||
|
|
||||||
index += "</font>".Length;
|
index += "</font>".Length;
|
||||||
}
|
}
|
||||||
|
else if (index + "</c>".Length <= p.Text.Length && p.Text.SafeSubstring(index, "</c>".Length).ToLowerInvariant() == "</c>")
|
||||||
|
{
|
||||||
|
// End of VTT color
|
||||||
|
endOfColor = true;
|
||||||
|
|
||||||
|
index += "</c>".Length;
|
||||||
|
}
|
||||||
else if (index + "{".Length <= p.Text.Length && p.Text.SafeSubstring(index, "{".Length) == "{")
|
else if (index + "{".Length <= p.Text.Length && p.Text.SafeSubstring(index, "{".Length) == "{")
|
||||||
{
|
{
|
||||||
// ASS tag, jump over
|
// ASS tag, jump over
|
||||||
@ -164,11 +182,18 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
if (removeColorTags)
|
if (removeColorTags)
|
||||||
{
|
{
|
||||||
p.Text = HtmlUtil.RemoveColorTags(p.Text);
|
p.Text = HtmlUtil.RemoveColorTags(p.Text);
|
||||||
|
|
||||||
|
if (p.Text.Contains("<c."))
|
||||||
|
{
|
||||||
|
p.Text = Regex.Replace(p.Text, @"<c(\.[\w\d]+)?>(.*?)</c>", "$2");
|
||||||
|
}
|
||||||
|
|
||||||
p.Text = p.Text.Replace(" ", " ").Replace(" " + Environment.NewLine, Environment.NewLine);
|
p.Text = p.Text.Replace(" ", " ").Replace(" " + Environment.NewLine, Environment.NewLine);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p.Text = p.Text.Replace(" </font> ", "</font> ").Replace(" </font>" + Environment.NewLine, "</font>" + Environment.NewLine);
|
p.Text = p.Text.Replace(" </font> ", "</font> ").Replace(" </font>" + Environment.NewLine, "</font>" + Environment.NewLine);
|
||||||
|
p.Text = p.Text.Replace(" </c> ", "</c> ").Replace(" </c>" + Environment.NewLine, "</c>" + Environment.NewLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Text = p.Text.Trim();
|
p.Text = p.Text.Trim();
|
||||||
|
@ -29674,7 +29674,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
var formatType = f.GetType();
|
var formatType = f.GetType();
|
||||||
actorToolStripMenuItem.Visible = formatType == typeof(AdvancedSubStationAlpha) || formatType == typeof(SubStationAlpha);
|
actorToolStripMenuItem.Visible = formatType == typeof(AdvancedSubStationAlpha) || formatType == typeof(SubStationAlpha);
|
||||||
|
|
||||||
convertColorsToDialogToolStripMenuItem.Visible = _subtitle.Paragraphs.Any(p => p.Text.Contains("<font color"));
|
convertColorsToDialogToolStripMenuItem.Visible = _subtitle.Paragraphs.Any(p => p.Text.Contains("<font color") || p.Text.Contains("<c."));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ContextMenuStripWaveformOpening(object sender, CancelEventArgs e)
|
private void ContextMenuStripWaveformOpening(object sender, CancelEventArgs e)
|
||||||
|
Loading…
Reference in New Issue
Block a user