using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{
///
/// http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/SCC_FORMAT.HTML
/// § 15.119 47 CFR Ch. I (10–1–10 Edition) (pdf)
/// Maximum four lines + max 32 characters on each line
///
public class ScenaristClosedCaptions : SubtitleFormat
{
public class SccPositionAndStyle
{
public Color ForeColor { get; set; }
public FontStyle Style { get; set; }
public int X { get; set; }
public int Y { get; set; }
public SccPositionAndStyle(Color color, FontStyle style, int y, int x)
{
ForeColor = color;
Style = style;
X = x;
Y = y;
}
}
//00:01:00:29 9420 9420 94ae 94ae 94d0 94d0 4920 f761 7320 ... semi colon (instead of colon) before frame number is used to indicate drop frame
private const string TimeCodeRegEx = @"^\d+:\d\d:\d\d[:,]\d\d\t";
private static readonly Regex Regex = new Regex(TimeCodeRegEx, RegexOptions.Compiled);
protected virtual Regex RegexTimeCodes => Regex;
protected bool DropFrame = false;
public static List> LetterDictionary = new List>
{
new KeyValuePair("20", " " ),
new KeyValuePair("a1", "!" ),
new KeyValuePair("a2", "\""),
new KeyValuePair("23", "#" ),
new KeyValuePair("a4", "$" ),
new KeyValuePair("25", "%" ),
new KeyValuePair("26", "&" ),
new KeyValuePair("a7", "'" ),
new KeyValuePair("a8", "(" ),
new KeyValuePair("29", ")" ),
new KeyValuePair("2a", "á" ),
new KeyValuePair("ab", "+" ),
new KeyValuePair("2c", "," ),
new KeyValuePair("ad", "-" ),
new KeyValuePair("ae", "." ),
new KeyValuePair("2f", "/" ),
new KeyValuePair("b0", "0" ),
new KeyValuePair("31", "1" ),
new KeyValuePair("32", "2" ),
new KeyValuePair("b3", "3" ),
new KeyValuePair("34", "4" ),
new KeyValuePair("b5", "5" ),
new KeyValuePair("b6", "6" ),
new KeyValuePair("37", "7" ),
new KeyValuePair("38", "8" ),
new KeyValuePair("b9", "9" ),
new KeyValuePair("ba", ":" ),
new KeyValuePair("3b", ";" ),
new KeyValuePair("bc", "<" ),
new KeyValuePair("3d", "=" ),
new KeyValuePair("3e", ">" ),
new KeyValuePair("bf", "?" ),
new KeyValuePair("40", "@" ),
new KeyValuePair("c1", "A" ),
new KeyValuePair("c2", "B" ),
new KeyValuePair("43", "C" ),
new KeyValuePair("c4", "D" ),
new KeyValuePair("45", "E" ),
new KeyValuePair("46", "F" ),
new KeyValuePair("c7", "G" ),
new KeyValuePair("c8", "H" ),
new KeyValuePair("49", "I" ),
new KeyValuePair("4a", "J" ),
new KeyValuePair("cb", "K" ),
new KeyValuePair("4c", "L" ),
new KeyValuePair("cd", "M" ),
new KeyValuePair("ce", "N" ),
new KeyValuePair("4f", "O" ),
new KeyValuePair("d0", "P" ),
new KeyValuePair("51", "Q" ),
new KeyValuePair("52", "R" ),
new KeyValuePair("d3", "S" ),
new KeyValuePair("54", "T" ),
new KeyValuePair("d5", "U" ),
new KeyValuePair("d6", "V" ),
new KeyValuePair("57", "W" ),
new KeyValuePair("58", "X" ),
new KeyValuePair("d9", "Y" ),
new KeyValuePair("da", "Z" ),
new KeyValuePair("5b", "[" ),
new KeyValuePair("dc", "é" ),
new KeyValuePair("5d", "]" ),
new KeyValuePair("5e", "í" ),
new KeyValuePair("df", "ó" ),
new KeyValuePair("e0", "ú" ),
new KeyValuePair("61", "a" ),
new KeyValuePair("62", "b" ),
new KeyValuePair("e3", "c" ),
new KeyValuePair("64", "d" ),
new KeyValuePair("e5", "e" ),
new KeyValuePair("e6", "f" ),
new KeyValuePair("67", "g" ),
new KeyValuePair("68", "h" ),
new KeyValuePair("e9", "i" ),
new KeyValuePair("ea", "j" ),
new KeyValuePair("6b", "k" ),
new KeyValuePair("ec", "l" ),
new KeyValuePair("6d", "m" ),
new KeyValuePair("6e", "n" ),
new KeyValuePair("ef", "o" ),
new KeyValuePair("70", "p" ),
new KeyValuePair("f1", "q" ),
new KeyValuePair("f2", "r" ),
new KeyValuePair("73", "s" ),
new KeyValuePair("f4", "t" ),
new KeyValuePair("75", "u" ),
new KeyValuePair("76", "v" ),
new KeyValuePair("f7", "w" ),
new KeyValuePair("f8", "x" ),
new KeyValuePair("fb", "ç" ),
new KeyValuePair("79", "y" ),
new KeyValuePair("7a", "z" ),
new KeyValuePair("fb", "" ),
new KeyValuePair("7c", "" ),
new KeyValuePair("fd", "Ñ" ),
new KeyValuePair("fe", "ñ" ),
new KeyValuePair("7f", "■" ),
new KeyValuePair("7b", "ç" ),
new KeyValuePair("63", "c" ),
new KeyValuePair("65", "e" ),
new KeyValuePair("66", "f" ),
new KeyValuePair("69", "i" ),
new KeyValuePair("6a", "j" ),
new KeyValuePair("6c", "l" ),
new KeyValuePair("6e", "n" ),
new KeyValuePair("6f", "o" ),
new KeyValuePair("71", "q" ),
new KeyValuePair("72", "r" ),
new KeyValuePair("74", "t" ),
new KeyValuePair("77", "w" ),
new KeyValuePair("78", "x" ),
new KeyValuePair("91b0", "" ),
new KeyValuePair("9131", "°" ),
new KeyValuePair("9132", "½" ),
new KeyValuePair("91b3", "" ),
new KeyValuePair("9134", "" ),
new KeyValuePair("91b5", "" ),
new KeyValuePair("91b6", "£" ),
new KeyValuePair("9137", "♪" ),
new KeyValuePair("9138", "à" ),
new KeyValuePair("91b9", "" ),
new KeyValuePair("91ba", "è" ),
new KeyValuePair("913b", "â" ),
new KeyValuePair("91bc", "ê" ),
new KeyValuePair("913d", "î" ),
new KeyValuePair("913e", "ô" ),
new KeyValuePair("91bf", "û" ),
new KeyValuePair("9220", "Á" ),
new KeyValuePair("92a1", "É" ),
new KeyValuePair("92a2", "Ó" ),
new KeyValuePair("9223", "Ú" ),
new KeyValuePair("92a4", "Ü" ),
new KeyValuePair("9225", "ü" ),
new KeyValuePair("9226", "'" ),
new KeyValuePair("92a7", "i" ),
new KeyValuePair("92a8", "*" ),
new KeyValuePair("9229", "'" ),
new KeyValuePair("922a", "-" ),
new KeyValuePair("92ab", "" ),
new KeyValuePair("922c", "" ),
new KeyValuePair("92ad", "\""),
new KeyValuePair("92ae", "\""),
new KeyValuePair("922f", "" ),
new KeyValuePair("92b0", "À" ),
new KeyValuePair("9231", "Â" ),
new KeyValuePair("9232", "Ç" ),
new KeyValuePair("92b3", "È" ),
new KeyValuePair("9234", "Ê" ),
new KeyValuePair("92b5", "Ë" ),
new KeyValuePair("92b6", "ë" ),
new KeyValuePair("9237", "Î" ),
new KeyValuePair("9238", "Ï" ),
new KeyValuePair("92b9", "ï" ),
new KeyValuePair("92b3", "ô" ),
new KeyValuePair("923b", "Ù" ),
new KeyValuePair("92b3", "ù" ),
new KeyValuePair("923d", "Û" ),
new KeyValuePair("923e", "" ),
new KeyValuePair("92bf", "" ),
new KeyValuePair("1320", "Ã" ),
new KeyValuePair("c1 1320", "Ã" ),
new KeyValuePair("c180 1320", "Ã" ),
new KeyValuePair("13a1", "ã" ),
new KeyValuePair("80 13a1", "ã" ),
new KeyValuePair("6180 13a1", "ã" ),
new KeyValuePair("13a2", "Í" ),
new KeyValuePair("49 13a2", "Í" ),
new KeyValuePair("4980 13a2", "Í" ),
new KeyValuePair("1323", "Ì" ),
new KeyValuePair("49 1323", "Ì" ),
new KeyValuePair("4980 1323", "Ì" ),
new KeyValuePair("13a4", "ì" ),
new KeyValuePair("e9 13a4", "ì" ),
new KeyValuePair("e980 13a4", "ì" ),
new KeyValuePair("1325", "Ò" ),
new KeyValuePair("4f 1325", "Ò" ),
new KeyValuePair("4f80 1325", "Ò" ),
new KeyValuePair("1326", "ò" ),
new KeyValuePair("ef 1326", "ò" ),
new KeyValuePair("ef80 1326", "ò" ),
new KeyValuePair("13a7", "Õ" ),
new KeyValuePair("4f 13a7", "Õ" ),
new KeyValuePair("4f80 13a7", "Õ" ),
new KeyValuePair("13a8", "õ" ),
new KeyValuePair("ef 13a8", "õ" ),
new KeyValuePair("ef80 13a8", "õ" ),
new KeyValuePair("1329", "{" ),
new KeyValuePair("132a", "}" ),
new KeyValuePair("13ab", "\\"),
new KeyValuePair("132c", "^" ),
new KeyValuePair("13ad", "_" ),
new KeyValuePair("13ae", "|" ),
new KeyValuePair("132f", "~" ),
new KeyValuePair("13b0", "Ä" ),
new KeyValuePair("c180 13b0", "Ä" ),
new KeyValuePair("1331", "ä" ),
new KeyValuePair("6180 1331", "ä" ),
new KeyValuePair("1332", "Ö" ),
new KeyValuePair("4f80 1332", "Ö" ),
new KeyValuePair("13b3", "ö" ),
new KeyValuePair("ef80 13b3", "ö" ),
new KeyValuePair("1334", "" ),
new KeyValuePair("13b5", "" ),
new KeyValuePair("13b6", "" ),
new KeyValuePair("1337", "|" ),
new KeyValuePair("1338", "Å" ),
new KeyValuePair("13b9", "å" ),
new KeyValuePair("13b3", "Ø" ),
new KeyValuePair("133b", "ø" ),
new KeyValuePair("13b3", "" ),
new KeyValuePair("133d", "" ),
new KeyValuePair("133e", "" ),
new KeyValuePair("13bf", "" ),
new KeyValuePair("9420", "" ), //9420=RCL, Resume Caption Loadin
new KeyValuePair("94ae", "" ), //94ae=Clear Buffer
new KeyValuePair("942c", "" ), //942c=Clear Caption
new KeyValuePair("8080", "" ), //8080=Wait One Frame
new KeyValuePair("942f", "" ), //942f=Display Caption
new KeyValuePair("9440", "" ), //9440=? first sub?
new KeyValuePair("9452", "" ), //?
new KeyValuePair("9454", "" ), //?
new KeyValuePair("9470", "" ), //9470=?
new KeyValuePair("94d0", "" ), //94d0=?
new KeyValuePair("94d6", "" ), //94d6=?
new KeyValuePair("942f", "" ), //942f=End of Caption
new KeyValuePair("94f2", "" ),
new KeyValuePair("94f4", "" ),
new KeyValuePair("9723", " " ), // ?
new KeyValuePair("97a1", " " ), // ?
new KeyValuePair("97a2", " " ), // ?
new KeyValuePair("1370", "" ), //1370=?
new KeyValuePair("13e0", "" ), //13e0=?
new KeyValuePair("13f2", "" ), //13f2=?
new KeyValuePair("136e", "" ), //136e=?
new KeyValuePair("94ce", "" ), //94ce=?
new KeyValuePair("2c2f", "" ), //?
new KeyValuePair("1130", "®" ),
new KeyValuePair("1131", "°" ),
new KeyValuePair("1132", "½" ),
new KeyValuePair("1133", "¿" ),
new KeyValuePair("1134", "TM"),
new KeyValuePair("1135", "¢" ),
new KeyValuePair("1136", "£" ),
new KeyValuePair("1137", "♪" ),
new KeyValuePair("1138", "à" ),
new KeyValuePair("1138", " " ), // transparent space
new KeyValuePair("113a", "è" ),
new KeyValuePair("113b", "â" ),
new KeyValuePair("113c", "ê" ),
new KeyValuePair("113d", "î" ),
new KeyValuePair("113e", "ô" ),
new KeyValuePair("113f", "û" ),
new KeyValuePair