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("13a1", "ã" ),
new KeyValuePair("13a2", "Í" ),
new KeyValuePair("1323", "Ì" ),
new KeyValuePair("13a4", "ì" ),
new KeyValuePair("1325", "Ò" ),
new KeyValuePair("1326", "ò" ),
new KeyValuePair("13a7", "Õ" ),
new KeyValuePair("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("1331", "ä" ),
new KeyValuePair("1332", "Ö" ),
new KeyValuePair("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("9130", "®" ),
new KeyValuePair("9131", "°" ),
new KeyValuePair("9132", "½" ),
new KeyValuePair("9133", "¿" ),
new KeyValuePair("9134", "TM"),
new KeyValuePair("9135", "¢" ),
new KeyValuePair("9136", "£" ),
new KeyValuePair("9137", "♪" ),
new KeyValuePair("9138", "à" ),
new KeyValuePair("9138", " " ), // transparent space
new KeyValuePair("913a", "è" ),
new KeyValuePair("913b", "â" ),
new KeyValuePair("913c", "ê" ),
new KeyValuePair("913d", "î" ),
new KeyValuePair("913e", "ô" ),
new KeyValuePair("913f", "û" ),
new KeyValuePair("a180 92a7 92a7", "¡" ),
new KeyValuePair("92a7 92a7", "¡" ),
new KeyValuePair("91b3 91b3", "¿" ),
new KeyValuePair("6180 9138 9138", "à"), //61=a
new KeyValuePair("9138 9138", "à"),
new KeyValuePair("6180 913b 913b", "â"),
new KeyValuePair