SubtitleEdit/libse/SsaStyle.cs
2019-10-20 13:30:34 +02:00

304 lines
10 KiB
C#

using Nikse.SubtitleEdit.Core.SubtitleFormats;
using System;
using System.Drawing;
using System.Globalization;
using System.Text;
namespace Nikse.SubtitleEdit.Core
{
public class SsaStyle
{
public string Name { get; set; }
public string FontName { get; set; }
public float FontSize { get; set; }
public bool Italic { get; set; }
public bool Bold { get; set; }
public bool Underline { get; set; }
public Color Primary { get; set; }
public Color Secondary { get; set; }
public Color Tertiary { get; set; }
public Color Outline { get; set; }
public Color Background { get; set; }
public decimal ShadowWidth { get; set; }
public decimal OutlineWidth { get; set; }
public string Alignment { get; set; }
public int MarginLeft { get; set; }
public int MarginRight { get; set; }
public int MarginVertical { get; set; }
public string BorderStyle { get; set; }
public string RawLine { get; set; }
public bool LoadedFromHeader { get; set; }
public SsaStyle()
{
FontName = Configuration.Settings.SubtitleSettings.SsaFontName;
FontSize = (float)Configuration.Settings.SubtitleSettings.SsaFontSize;
Primary = Color.FromArgb(Configuration.Settings.SubtitleSettings.SsaFontColorArgb);
Secondary = Color.Yellow;
Outline = Color.Black;
Background = Color.Black;
Alignment = "2";
OutlineWidth = Configuration.Settings.SubtitleSettings.SsaOutline;
ShadowWidth = Configuration.Settings.SubtitleSettings.SsaShadow;
MarginLeft = 10;
MarginRight = 10;
MarginVertical = 10;
BorderStyle = "1";
if (Configuration.Settings.SubtitleSettings.SsaOpaqueBox)
{
BorderStyle = "3";
}
RawLine = string.Empty;
LoadedFromHeader = false;
}
public SsaStyle(SsaStyle ssaStyle)
{
Name = ssaStyle.Name;
FontName = ssaStyle.FontName;
FontSize = ssaStyle.FontSize;
Italic = ssaStyle.Italic;
Bold = ssaStyle.Bold;
Underline = ssaStyle.Underline;
Primary = ssaStyle.Primary;
Secondary = ssaStyle.Secondary;
Tertiary = ssaStyle.Tertiary;
Outline = ssaStyle.Outline;
Background = ssaStyle.Background;
ShadowWidth = ssaStyle.ShadowWidth;
OutlineWidth = ssaStyle.OutlineWidth;
Alignment = ssaStyle.Alignment;
MarginLeft = ssaStyle.MarginLeft;
MarginRight = ssaStyle.MarginRight;
MarginVertical = ssaStyle.MarginVertical;
BorderStyle = ssaStyle.BorderStyle;
RawLine = ssaStyle.RawLine;
LoadedFromHeader = ssaStyle.LoadedFromHeader;
}
public string ToRawSsa(string styleFormat)
{
var sb = new StringBuilder();
sb.Append("Style: ");
var format = styleFormat.ToLowerInvariant().Substring(8).Split(',');
for (int i = 0; i < format.Length; i++)
{
string f = format[i].Trim();
if (f == "name")
{
sb.Append(Name);
}
else if (f == "fontname")
{
sb.Append(FontName);
}
else if (f == "fontsize")
{
sb.Append(FontSize.ToString(CultureInfo.InvariantCulture));
}
else if (f == "primarycolour")
{
sb.Append(ColorTranslator.ToWin32(Primary));
}
else if (f == "secondarycolour")
{
sb.Append(ColorTranslator.ToWin32(Secondary));
}
else if (f == "tertiarycolour")
{
sb.Append(ColorTranslator.ToWin32(Tertiary));
}
else if (f == "outlinecolour")
{
sb.Append(ColorTranslator.ToWin32(Outline));
}
else if (f == "backcolour")
{
sb.Append(ColorTranslator.ToWin32(Background));
}
else if (f == "bold")
{
sb.Append(Convert.ToInt32(Bold));
}
else if (f == "italic")
{
sb.Append(Convert.ToInt32(Italic));
}
else if (f == "underline")
{
sb.Append(Convert.ToInt32(Underline));
}
else if (f == "outline")
{
sb.Append(Outline);
}
else if (f == "shadow")
{
sb.Append(OutlineWidth);
}
else if (f == "marginl")
{
sb.Append(MarginLeft);
}
else if (f == "marginr")
{
sb.Append(MarginRight);
}
else if (f == "marginv")
{
sb.Append(MarginVertical);
}
else if (f == "borderstyle")
{
sb.Append(BorderStyle);
}
else if (f == "encoding")
{
sb.Append('1');
}
else if (f == "strikeout")
{
sb.Append('0');
}
else if (f == "scalex")
{
sb.Append("100");
}
else if (f == "scaley")
{
sb.Append("100");
}
else if (f == "spacing")
{
sb.Append('0');
}
else if (f == "angle")
{
sb.Append('0');
}
sb.Append(',');
}
string s = sb.ToString().Trim();
return s.Substring(0, s.Length - 1);
}
public string ToRawAss(string styleFormat)
{
var sb = new StringBuilder();
sb.Append("Style: ");
var format = styleFormat.ToLowerInvariant().Substring(8).Split(',');
for (int i = 0; i < format.Length; i++)
{
string f = format[i].Trim();
if (f == "name")
{
sb.Append(Name);
}
else if (f == "fontname")
{
sb.Append(FontName);
}
else if (f == "fontsize")
{
sb.Append(FontSize.ToString(CultureInfo.InvariantCulture));
}
else if (f == "primarycolour")
{
sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Primary));
}
else if (f == "secondarycolour")
{
sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Secondary));
}
else if (f == "tertiarycolour")
{
sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Tertiary));
}
else if (f == "outlinecolour")
{
sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Outline));
}
else if (f == "backcolour")
{
sb.Append(AdvancedSubStationAlpha.GetSsaColorString(Background));
}
else if (f == "bold")
{
sb.Append(Convert.ToInt32(Bold));
}
else if (f == "italic")
{
sb.Append(Convert.ToInt32(Italic));
}
else if (f == "underline")
{
sb.Append(Convert.ToInt32(Underline));
}
else if (f == "outline")
{
sb.Append(OutlineWidth);
}
else if (f == "shadow")
{
sb.Append(ShadowWidth);
}
else if (f == "alignment")
{
sb.Append(Alignment);
}
else if (f == "marginl")
{
sb.Append(MarginLeft);
}
else if (f == "marginr")
{
sb.Append(MarginRight);
}
else if (f == "marginv")
{
sb.Append(MarginVertical);
}
else if (f == "borderstyle")
{
sb.Append(BorderStyle);
}
else if (f == "encoding")
{
sb.Append('1');
}
else if (f == "strikeout")
{
sb.Append('0');
}
else if (f == "scalex")
{
sb.Append("100");
}
else if (f == "scaley")
{
sb.Append("100");
}
else if (f == "spacing")
{
sb.Append('0');
}
else if (f == "angle")
{
sb.Append('0');
}
sb.Append(',');
}
string s = sb.ToString().Trim();
return s.Substring(0, s.Length - 1);
}
}
}