    ﻿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
    {

        /// <summary>
        /// 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
        /// </summary>
        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<KeyValuePair<string, string>> LetterDictionary = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string,string>("20",                  " " ),
                new KeyValuePair<string,string>("a1",                  "!" ),
                new KeyValuePair<string,string>("a2",                  "\""),
                new KeyValuePair<string,string>("23",                  "#" ),
                new KeyValuePair<string,string>("a4",                  "$" ),
                new KeyValuePair<string,string>("25",                  "%" ),
                new KeyValuePair<string,string>("26",                  "&" ),
                new KeyValuePair<string,string>("a7",                  "'" ),
                new KeyValuePair<string,string>("a8",                  "(" ),
                new KeyValuePair<string,string>("29",                  ")" ),
                new KeyValuePair<string,string>("2a",                  "á" ),
                new KeyValuePair<string,string>("ab",                  "+" ),
                new KeyValuePair<string,string>("2c",                  "," ),
                new KeyValuePair<string,string>("ad",                  "-" ),
                new KeyValuePair<string,string>("ae",                  "." ),
                new KeyValuePair<string,string>("2f",                  "/" ),
                new KeyValuePair<string,string>("b0",                  "0" ),
                new KeyValuePair<string,string>("31",                  "1" ),
                new KeyValuePair<string,string>("32",                  "2" ),
                new KeyValuePair<string,string>("b3",                  "3" ),
                new KeyValuePair<string,string>("34",                  "4" ),
                new KeyValuePair<string,string>("b5",                  "5" ),
                new KeyValuePair<string,string>("b6",                  "6" ),
                new KeyValuePair<string,string>("37",                  "7" ),
                new KeyValuePair<string,string>("38",                  "8" ),
                new KeyValuePair<string,string>("b9",                  "9" ),
                new KeyValuePair<string,string>("ba",                  ":" ),
                new KeyValuePair<string,string>("3b",                  ";" ),
                new KeyValuePair<string,string>("bc",                  "<" ),
                new KeyValuePair<string,string>("3d",                  "=" ),
                new KeyValuePair<string,string>("3e",                  ">" ),
                new KeyValuePair<string,string>("bf",                  "?" ),
                new KeyValuePair<string,string>("40",                  "@" ),
                new KeyValuePair<string,string>("c1",                  "A" ),
                new KeyValuePair<string,string>("c2",                  "B" ),
                new KeyValuePair<string,string>("43",                  "C" ),
                new KeyValuePair<string,string>("c4",                  "D" ),
                new KeyValuePair<string,string>("45",                  "E" ),
                new KeyValuePair<string,string>("46",                  "F" ),
                new KeyValuePair<string,string>("c7",                  "G" ),
                new KeyValuePair<string,string>("c8",                  "H" ),
                new KeyValuePair<string,string>("49",                  "I" ),
                new KeyValuePair<string,string>("4a",                  "J" ),
                new KeyValuePair<string,string>("cb",                  "K" ),
                new KeyValuePair<string,string>("4c",                  "L" ),
                new KeyValuePair<string,string>("cd",                  "M" ),
                new KeyValuePair<string,string>("ce",                  "N" ),
                new KeyValuePair<string,string>("4f",                  "O" ),
                new KeyValuePair<string,string>("d0",                  "P" ),
                new KeyValuePair<string,string>("51",                  "Q" ),
                new KeyValuePair<string,string>("52",                  "R" ),
                new KeyValuePair<string,string>("d3",                  "S" ),
                new KeyValuePair<string,string>("54",                  "T" ),
                new KeyValuePair<string,string>("d5",                  "U" ),
                new KeyValuePair<string,string>("d6",                  "V" ),
                new KeyValuePair<string,string>("57",                  "W" ),
                new KeyValuePair<string,string>("58",                  "X" ),
                new KeyValuePair<string,string>("d9",                  "Y" ),
                new KeyValuePair<string,string>("da",                  "Z" ),
                new KeyValuePair<string,string>("5b",                  "[" ),
                new KeyValuePair<string,string>("dc",                  "é" ),
                new KeyValuePair<string,string>("5d",                  "]" ),
                new KeyValuePair<string,string>("5e",                  "í" ),
                new KeyValuePair<string,string>("df",                  "ó" ),
                new KeyValuePair<string,string>("e0",                  "ú" ),
                new KeyValuePair<string,string>("61",                  "a" ),
                new KeyValuePair<string,string>("62",                  "b" ),
                new KeyValuePair<string,string>("e3",                  "c" ),
                new KeyValuePair<string,string>("64",                  "d" ),
                new KeyValuePair<string,string>("e5",                  "e" ),
                new KeyValuePair<string,string>("e6",                  "f" ),
                new KeyValuePair<string,string>("67",                  "g" ),
                new KeyValuePair<string,string>("68",                  "h" ),
                new KeyValuePair<string,string>("e9",                  "i" ),
                new KeyValuePair<string,string>("ea",                  "j" ),
                new KeyValuePair<string,string>("6b",                  "k" ),
                new KeyValuePair<string,string>("ec",                  "l" ),
                new KeyValuePair<string,string>("6d",                  "m" ),
                new KeyValuePair<string,string>("6e",                  "n" ),
                new KeyValuePair<string,string>("ef",                  "o" ),
                new KeyValuePair<string,string>("70",                  "p" ),
                new KeyValuePair<string,string>("f1",                  "q" ),
                new KeyValuePair<string,string>("f2",                  "r" ),
                new KeyValuePair<string,string>("73",                  "s" ),
                new KeyValuePair<string,string>("f4",                  "t" ),
                new KeyValuePair<string,string>("75",                  "u" ),
                new KeyValuePair<string,string>("76",                  "v" ),
                new KeyValuePair<string,string>("f7",                  "w" ),
                new KeyValuePair<string,string>("f8",                  "x" ),
                new KeyValuePair<string,string>("fb",                  "ç" ),
                new KeyValuePair<string,string>("79",                  "y" ),
                new KeyValuePair<string,string>("7a",                  "z" ),
                new KeyValuePair<string,string>("fb",                  ""  ),
                new KeyValuePair<string,string>("7c",                  ""  ),
                new KeyValuePair<string,string>("fd",                  "Ñ" ),
                new KeyValuePair<string,string>("fe",                  "ñ" ),
                new KeyValuePair<string,string>("7f",                  "■" ),
                new KeyValuePair<string,string>("7b",                  "ç" ),
                new KeyValuePair<string,string>("63",                  "c" ),
                new KeyValuePair<string,string>("65",                  "e" ),
                new KeyValuePair<string,string>("66",                  "f" ),
                new KeyValuePair<string,string>("69",                  "i" ),
                new KeyValuePair<string,string>("6a",                  "j" ),
                new KeyValuePair<string,string>("6c",                  "l" ),
                new KeyValuePair<string,string>("6e",                  "n" ),
                new KeyValuePair<string,string>("6f",                  "o" ),
                new KeyValuePair<string,string>("71",                  "q" ),
                new KeyValuePair<string,string>("72",                  "r" ),
                new KeyValuePair<string,string>("74",                  "t" ),
                new KeyValuePair<string,string>("77",                  "w" ),
                new KeyValuePair<string,string>("78",                  "x" ),
                new KeyValuePair<string,string>("91b0",                ""  ),
                new KeyValuePair<string,string>("9131",                "°" ),
                new KeyValuePair<string,string>("9132",                "½" ),
                new KeyValuePair<string,string>("91b3",                ""  ),
                new KeyValuePair<string,string>("9134",                ""  ),
                new KeyValuePair<string,string>("91b5",                ""  ),
                new KeyValuePair<string,string>("91b6",                "£" ),
                new KeyValuePair<string,string>("9137",                "♪" ),
                new KeyValuePair<string,string>("9138",                "à" ),
                new KeyValuePair<string,string>("91b9",                ""  ),
                new KeyValuePair<string,string>("91ba",                "è" ),
                new KeyValuePair<string,string>("913b",                "â" ),
                new KeyValuePair<string,string>("91bc",                "ê" ),
                new KeyValuePair<string,string>("913d",                "î" ),
                new KeyValuePair<string,string>("913e",                "ô" ),
                new KeyValuePair<string,string>("91bf",                "û" ),
                new KeyValuePair<string,string>("9220",                "Á" ),
                new KeyValuePair<string,string>("92a1",                "É" ),
                new KeyValuePair<string,string>("92a2",                "Ó" ),
                new KeyValuePair<string,string>("9223",                "Ú" ),
                new KeyValuePair<string,string>("92a4",                "Ü" ),
                new KeyValuePair<string,string>("9225",                "ü" ),
                new KeyValuePair<string,string>("9226",                "'" ),
                new KeyValuePair<string,string>("92a7",                "i" ),
                new KeyValuePair<string,string>("92a8",                "*" ),
                new KeyValuePair<string,string>("9229",                "'" ),
                new KeyValuePair<string,string>("922a",                "-" ),
                new KeyValuePair<string,string>("92ab",                ""  ),
                new KeyValuePair<string,string>("922c",                ""  ),
                new KeyValuePair<string,string>("92ad",                "\""),
                new KeyValuePair<string,string>("92ae",                "\""),
                new KeyValuePair<string,string>("922f",                ""  ),
                new KeyValuePair<string,string>("92b0",                "À" ),
                new KeyValuePair<string,string>("9231",                "Â" ),
                new KeyValuePair<string,string>("9232",                ""  ),
                new KeyValuePair<string,string>("92b3",                "È" ),
                new KeyValuePair<string,string>("9234",                "Ê" ),
                new KeyValuePair<string,string>("92b5",                "Ë" ),
                new KeyValuePair<string,string>("92b6",                "ë" ),
                new KeyValuePair<string,string>("9237",                "Î" ),
                new KeyValuePair<string,string>("9238",                "Ï" ),
                new KeyValuePair<string,string>("92b9",                "ï" ),
                new KeyValuePair<string,string>("92b3",                "ô" ),
                new KeyValuePair<string,string>("923b",                "Ù" ),
                new KeyValuePair<string,string>("92b3",                "ù" ),
                new KeyValuePair<string,string>("923d",                "Û" ),
                new KeyValuePair<string,string>("923e",                ""  ),
                new KeyValuePair<string,string>("92bf",                ""  ),
                new KeyValuePair<string,string>("1320",                "Ã" ),
                new KeyValuePair<string,string>("c1 1320",             "Ã" ),
                new KeyValuePair<string,string>("c180 1320",           "Ã" ),
                new KeyValuePair<string,string>("13a1",                "ã" ),
                new KeyValuePair<string,string>("80 13a1",             "ã" ),
                new KeyValuePair<string,string>("6180 13a1",           "ã" ),
                new KeyValuePair<string,string>("13a2",                "Í" ),
                new KeyValuePair<string,string>("49 13a2",             "Í" ),
                new KeyValuePair<string,string>("4980 13a2",           "Í" ),
                new KeyValuePair<string,string>("1323",                "Ì" ),
                new KeyValuePair<string,string>("49 1323",             "Ì" ),
                new KeyValuePair<string,string>("4980 1323",           "Ì" ),
                new KeyValuePair<string,string>("13a4",                "ì" ),
                new KeyValuePair<string,string>("e9 13a4",             "ì" ),
                new KeyValuePair<string,string>("e980 13a4",           "ì" ),
                new KeyValuePair<string,string>("1325",                "Ò" ),
                new KeyValuePair<string,string>("4f 1325",             "Ò" ),
                new KeyValuePair<string,string>("4f80 1325",           "Ò" ),
                new KeyValuePair<string,string>("1326",                "ò" ),
                new KeyValuePair<string,string>("ef 1326",             "ò" ),
                new KeyValuePair<string,string>("ef80 1326",           "ò" ),
                new KeyValuePair<string,string>("13a7",                "Õ" ),
                new KeyValuePair<string,string>("4f 13a7",             "Õ" ),
                new KeyValuePair<string,string>("4f80 13a7",           "Õ" ),
                new KeyValuePair<string,string>("13a8",                "õ" ),
                new KeyValuePair<string,string>("ef 13a8",             "õ" ),
                new KeyValuePair<string,string>("ef80 13a8",           "õ" ),
                new KeyValuePair<string,string>("1329",                "{" ),
                new KeyValuePair<string,string>("132a",                "}" ),
                new KeyValuePair<string,string>("13ab",                "\\"),
                new KeyValuePair<string,string>("132c",                "^" ),
                new KeyValuePair<string,string>("13ad",                "_" ),
                new KeyValuePair<string,string>("13ae",                "|" ),
                new KeyValuePair<string,string>("132f",                "~" ),
                new KeyValuePair<string,string>("13b0",                "Ä" ),
                new KeyValuePair<string,string>("c180 13b0",           "Ä" ),
                new KeyValuePair<string,string>("1331",                "ä" ),
                new KeyValuePair<string,string>("6180 1331",           "ä" ),
                new KeyValuePair<string,string>("1332",                "Ö" ),
                new KeyValuePair<string,string>("4f80 1332",           "Ö" ),
                new KeyValuePair<string,string>("13b3",                "ö" ),
                new KeyValuePair<string,string>("ef80 13b3",           "ö" ),
                new KeyValuePair<string,string>("1334",                ""  ),
                new KeyValuePair<string,string>("13b5",                ""  ),
                new KeyValuePair<string,string>("13b6",                ""  ),
                new KeyValuePair<string,string>("1337",                "|" ),
                new KeyValuePair<string,string>("1338",                "Å" ),
                new KeyValuePair<string,string>("13b9",                "å" ),
                new KeyValuePair<string,string>("13b3",                "Ø" ),
                new KeyValuePair<string,string>("133b",                "ø" ),
                new KeyValuePair<string,string>("13b3",                ""  ),
                new KeyValuePair<string,string>("133d",                ""  ),
                new KeyValuePair<string,string>("133e",                ""  ),
                new KeyValuePair<string,string>("13bf",                ""  ),
                new KeyValuePair<string,string>("9420",                ""  ), //9420=RCL, Resume Caption Loadin
                new KeyValuePair<string,string>("94ae",                ""  ), //94ae=Clear Buffer
                new KeyValuePair<string,string>("942c",                ""  ), //942c=Clear Caption
                new KeyValuePair<string,string>("8080",                ""  ), //8080=Wait One Frame
                new KeyValuePair<string,string>("942f",                ""  ), //942f=Display Caption
                new KeyValuePair<string,string>("9440",                ""  ), //9440=? first sub?
                new KeyValuePair<string,string>("9452",                ""  ), //?
                new KeyValuePair<string,string>("9454",                ""  ), //?
                new KeyValuePair<string,string>("9470",                ""  ), //9470=?
                new KeyValuePair<string,string>("94d0",                ""  ), //94d0=?
                new KeyValuePair<string,string>("94d6",                ""  ), //94d6=?
                new KeyValuePair<string,string>("942f",                ""  ), //942f=End of Caption
                new KeyValuePair<string,string>("94f2",                ""  ),
                new KeyValuePair<string,string>("94f4",                ""  ),
                new KeyValuePair<string,string>("9723",                " " ), // ?
                new KeyValuePair<string,string>("97a1",                " " ), // ?
                new KeyValuePair<string,string>("97a2",                " " ), // ?
                new KeyValuePair<string,string>("1370",                ""  ), //1370=?
                new KeyValuePair<string,string>("13e0",                ""  ), //13e0=?
                new KeyValuePair<string,string>("13f2",                ""  ), //13f2=?
                new KeyValuePair<string,string>("136e",                ""  ), //136e=?
                new KeyValuePair<string,string>("94ce",                ""  ), //94ce=?
                new KeyValuePair<string,string>("2c2f",                ""  ), //?
                new KeyValuePair<string,string>("1130",                "®" ),
                new KeyValuePair<string,string>("1131",                "°" ),
                new KeyValuePair<string,string>("1132",                "½" ),
                new KeyValuePair<string,string>("1133",                "¿" ),
                new KeyValuePair<string,string>("1134",                "TM"),
                new KeyValuePair<string,string>("1135",                "¢" ),
                new KeyValuePair<string,string>("1136",                "£" ),
                new KeyValuePair<string,string>("1137",                "♪" ),
                new KeyValuePair<string,string>("1138",                "à" ),
                new KeyValuePair<string,string>("1138",                " " ), // transparent space
                new KeyValuePair<string,string>("113a",                "è" ),
                new KeyValuePair<string,string>("113b",                "â" ),
                new KeyValuePair<string,string>("113c",                "ê" ),
                new KeyValuePair<string,string>("113d",                "î" ),
                new KeyValuePair<string,string>("113e",                "ô" ),
                new KeyValuePair<string,string>("113f",                "û" ),
                new KeyValuePair<string,string>("9130",                "®" ),
                new KeyValuePair<string,string>("9131",                "°" ),
                new KeyValuePair<string,string>("9132",                "½" ),
                new KeyValuePair<string,string>("9133",                "¿" ),
                new KeyValuePair<string,string>("9134",                "TM"),
                new KeyValuePair<string,string>("9135",                "¢" ),
                new KeyValuePair<string,string>("9136",                "£" ),
                new KeyValuePair<string,string>("9137",                "♪" ),
                new KeyValuePair<string,string>("9138",                "à" ),
                new KeyValuePair<string,string>("9138",                " " ), // transparent space
                new KeyValuePair<string,string>("913a",                "è" ),
                new KeyValuePair<string,string>("913b",                "â" ),
                new KeyValuePair<string,string>("913c",                "ê" ),
                new KeyValuePair<string,string>("913d",                "î" ),
                new KeyValuePair<string,string>("913e",                "ô" ),
                new KeyValuePair<string,string>("913f",                "û" ),
                new KeyValuePair<string,string>("a180 92a7 92a7",      "¡" ),
                new KeyValuePair<string,string>("92a7 92a7",           "¡" ),
                new KeyValuePair<string,string>("91b3 91b3",           "¿" ),

                new KeyValuePair<string,string>("6180 9138 9138",      "à"), //61=a
                new KeyValuePair<string,string>("9138 9138",           "à"),

                new KeyValuePair<string,string>("6180 913b 913b",      "â"),
                new KeyValuePair<string,string>("913b 913b",           "â"),

                new KeyValuePair<string,string>("6180 1331 1331",      "ä"),
                new KeyValuePair<string,string>("1331 1331",           "ä"),

                new KeyValuePair<string,string>("e580 91ba 91ba",      "è"),
                new KeyValuePair<string,string>("6180 91ba 91ba",      "è"),
                new KeyValuePair<string,string>("91ba 91ba",           "è"),

                new KeyValuePair<string,string>("e580 91bc 91bc",      "ê"),
                new KeyValuePair<string,string>("6180 91bc 91bc",      "ê"),
                new KeyValuePair<string,string>("91bc 91bc",           "ê"),

                new KeyValuePair<string,string>("e580 92b6 92b6",      "ë"), //e5=e (+65?)
                new KeyValuePair<string,string>("6580 92b6 92b6",      "ë"),
                new KeyValuePair<string,string>("92b6 92b6",           "ë"),

                new KeyValuePair<string,string>("e980 13a4 13a4",      "ì"), //e9 = i
                new KeyValuePair<string,string>("13a4 13a4",           "ì"),

                new KeyValuePair<string,string>("e980 913d 913d",      "î"),
                new KeyValuePair<string,string>("913d 913d",           "î"),

                new KeyValuePair<string,string>("e980 92b9 92b9",      "ï"),
                new KeyValuePair<string,string>("92b9 92b9",           "ï"),

                new KeyValuePair<string,string>("1326 1326",           "ò"), //o=ef or 6f
                new KeyValuePair<string,string>("ef80 1326 1326",      "ò"),
                new KeyValuePair<string,string>("6f80 1326 1326",      "ò"),

                new KeyValuePair<string,string>("913e 913e",           "ô"),
                new KeyValuePair<string,string>("ef80 913e 913e",      "ô"),
                new KeyValuePair<string,string>("6f80 913e 913e",      "ô"),

                new KeyValuePair<string,string>("13b3 13b3",           "ö"),
                new KeyValuePair<string,string>("ef80 13b3 13b3",      "ö"),
                new KeyValuePair<string,string>("6f80 13b3 13b3",      "ö"),

                new KeyValuePair<string,string>("7580 13b3 13b3",      "ù"), //u=75
                new KeyValuePair<string,string>("13b3 13b3",           "ù"),

                new KeyValuePair<string,string>("7580 92bc 92bc",      "ù"),
                new KeyValuePair<string,string>("92bc 92bc",           "ù"),

                new KeyValuePair<string,string>("7580 91bf 91bf",      "û"),
                new KeyValuePair<string,string>("91bf 91bf",           "û"),

                new KeyValuePair<string,string>("7580 9225 9225",      "ü"),
                new KeyValuePair<string,string>("9225 9225",           "ü"),

                new KeyValuePair<string,string>("4380 9232 9232",      "Ç"), //43=C
                new KeyValuePair<string,string>("9232 9232",           "Ç"),

                new KeyValuePair<string,string>("c180 1338 1338",      "Å"), //c1=A
                new KeyValuePair<string,string>("1338 1338",           "Å"),

                new KeyValuePair<string,string>("c180 1338 1338",      "Å"),
                new KeyValuePair<string,string>("1338 1338",           "Å"),

                new KeyValuePair<string,string>("c180 92b0 92b0",      "À"),
                new KeyValuePair<string,string>("92b0 92b0",           "À"),

                new KeyValuePair<string,string>("c180 9220 9220",      "Á"),
                new KeyValuePair<string,string>("9220 9220",           "Á"),

                new KeyValuePair<string,string>("c180 9231 9231",      "Â"),
                new KeyValuePair<string,string>("9231 9231",           "Â"),

                new KeyValuePair<string,string>("c180 1320 1320",      "Ã"),
                new KeyValuePair<string,string>("1320 1320",           "Ã"),

                new KeyValuePair<string,string>("c180 13b0 13b0",      "Ä"),
                new KeyValuePair<string,string>("13b0 13b0",           "Ä"),

                new KeyValuePair<string,string>("c180 1320 1320",      "Ã"),
                new KeyValuePair<string,string>("1320 1320",           "Ã"),

                new KeyValuePair<string,string>("c180 13b0 13b0",      "Ä"),
                new KeyValuePair<string,string>("13b0 13b0",           "Ä"),

                new KeyValuePair<string,string>("4580 92b3 92b3",      "È"),
                new KeyValuePair<string,string>("92b3 92b3",           "È"),

                new KeyValuePair<string,string>("4580 92a1 92a1",      "É"),
                new KeyValuePair<string,string>("92a1 92a1",           "É"),

                new KeyValuePair<string,string>("4580 9234 9234",      "Ê"),
                new KeyValuePair<string,string>("9234 9234",           "Ê"),

                new KeyValuePair<string,string>("4580 92b5 92b5",      "Ë"),
                new KeyValuePair<string,string>("92b5 92b5",           "Ë"),

                new KeyValuePair<string,string>("4980 1323 1323",      "Ì"),
                new KeyValuePair<string,string>("1323 1323",           "Ì"),

                new KeyValuePair<string,string>("4980 13a2 13a2",      "Í"),
                new KeyValuePair<string,string>("13a2 13a2",           "Í"),

                new KeyValuePair<string,string>("4980 9237 9237",      "Î"),
                new KeyValuePair<string,string>("9237 9237",           "Î"),

                new KeyValuePair<string,string>("4980 9238 9238",      "Ï"),
                new KeyValuePair<string,string>("9238 9238",           "Ï"),

                new KeyValuePair<string,string>("4f80 92a2 92a2",      "Ó"), //4f=O
                new KeyValuePair<string,string>("92a2 92a2",           "Ó"),

                new KeyValuePair<string,string>("4f80 1325 1325",      "Ò"),
                new KeyValuePair<string,string>("1325 1325",           "Ò"),

                new KeyValuePair<string,string>("4f80 92ba 92ba",      "Ô"),
                new KeyValuePair<string,string>("92ba 92ba",           "Ô"),

                new KeyValuePair<string,string>("4f80 13a7 13a7",      "Õ"),
                new KeyValuePair<string,string>("13a7 13a7",           "Õ"),

                new KeyValuePair<string,string>("4f80 1332 1332",      "Ö"),
                new KeyValuePair<string,string>("1332 1332",           "Ö"),

                new KeyValuePair<string,string>("d580 923b 923b",      "Ù"), //d5=U
                new KeyValuePair<string,string>("923b 923b",           "Ù"),

                new KeyValuePair<string,string>("d580 9223 9223",      "Ú"),
                new KeyValuePair<string,string>("923d 923d",           "Û"),

                new KeyValuePair<string,string>("d580 923b 923b",      "Ù"),
                new KeyValuePair<string,string>("9223 9223",           "Ú"),

                new KeyValuePair<string,string>("d580 92a4 92a4",      "Ü"),
                new KeyValuePair<string,string>("92a4 92a4",           "Ü"),

                new KeyValuePair<string,string>("d580 923d 923d",      "Û"),
                new KeyValuePair<string,string>("923d 923d",           "Û"),
            };

            public override string Extension => ".scc";

            public override string Name => "Scenarist Closed Captions";

            private static string FixMax4LinesAndMax32CharsPerLine(string text, string language)
            {
                // fix attempt 1
                var lines = text.Trim().SplitToLines();
                if (IsAllOkay(lines))
                    return text;

                // fix attempt 2
                text = Utilities.AutoBreakLine(text, 1, 4, language);
                lines = text.Trim().SplitToLines();
                if (IsAllOkay(lines))
                    return text;

                // fix attempt 3
                text = AutoBreakLineMax4Lines(text, 32);
                lines = text.Trim().SplitToLines();
                if (IsAllOkay(lines))
                    return text;

                var sb = new StringBuilder();
                int count = 0;
                foreach (string line in lines)
                {
                    if (count < 4)
                    {
                        if (line.Length > 32)
                            sb.AppendLine(line.Substring(0, 32));
                        else
                            sb.AppendLine(line);
                    }
                    count++;
                }
                return sb.ToString().Trim();
            }

            private static bool IsAllOkay(List<string> lines)
            {
                if (lines.Count > 4)
                    return false;
                for (int i = 0; i < lines.Count; i++)
                {
                    if (lines[i].Length > 32)
                        return false;
                }
                return true;
            }

            private static int GetLastIndexOfSpace(string s, int endCount)
            {
                var end = Math.Min(endCount, s.Length - 1);
                while (end > 0)
                {
                    if (s[end] == ' ')
                        return end;
                    end--;
                }
                return -1;
            }

            private static string AutoBreakLineMax4Lines(string text, int maxLength)
            {
                string s = text.Replace(Environment.NewLine, " ");
                s = s.Replace("  ", " ");
                var sb = new StringBuilder();
                int i = GetLastIndexOfSpace(s, maxLength);
                if (i > 0)
                {
                    sb.AppendLine(s.Substring(0, i));
                    s = s.Remove(0, i).Trim();
                    if (s.Length <= maxLength)
                        i = s.Length;
                    else
                        i = GetLastIndexOfSpace(s, maxLength);
                    if (i > 0)
                    {
                        sb.AppendLine(s.Substring(0, i));
                        s = s.Remove(0, i).Trim();
                        if (s.Length <= maxLength)
                            i = s.Length;
                        else
                            i = GetLastIndexOfSpace(s, maxLength);
                        if (i > 0)
                        {
                            sb.AppendLine(s.Substring(0, i));
                            s = s.Remove(0, i).Trim();
                            if (s.Length <= maxLength)
                                i = s.Length;
                            else
                                i = GetLastIndexOfSpace(s, maxLength);
                            if (i > 0)
                            {
                                sb.AppendLine(s.Substring(0, i));
                            }
                            else
                            {
                                sb.Append(s);
                            }
                        }
                        else
                        {
                            sb.Append(s);
                        }
                    }
                    return sb.ToString().Trim();
                }
                return text;
            }

            public override string ToText(Subtitle subtitle, string title)
            {
                var sb = new StringBuilder();
                sb.AppendLine("Scenarist_SCC V1.0");
                sb.AppendLine();
                string language = LanguageAutoDetect.AutoDetectGoogleLanguage(subtitle);
                for (int i = 0; i < subtitle.Paragraphs.Count; i++)
                {
                    Paragraph p = subtitle.Paragraphs[i];
                    sb.AppendLine(string.Format("{0}\t94ae 94ae 9420 9420 {1} 942f 942f", ToTimeCode(p.StartTime.TotalMilliseconds), ToSccText(p.Text, language)));
                    sb.AppendLine();

                    Paragraph next = subtitle.GetParagraphOrDefault(i + 1);
                    if (next == null || Math.Abs(next.StartTime.TotalMilliseconds - p.EndTime.TotalMilliseconds) > 100)
                    {
                        sb.AppendLine(string.Format("{0}\t942c 942c", ToTimeCode(p.EndTime.TotalMilliseconds)));
                        sb.AppendLine();
                    }
                }
                return sb.ToString();
            }

            private static string ToSccText(string text, string language)
            {
                text = FixMax4LinesAndMax32CharsPerLine(text, language);
                var lines = text.Trim().SplitToLines();
                int italic = 0;
                var sb = new StringBuilder();
                int count = 1;
                foreach (string line in lines)
                {
                    text = line.Trim();
                    if (count > 0)
                        sb.Append(' ');
                    sb.Append(GetCenterCodes(text, count, lines.Count));
                    count++;
                    int i = 0;
                    string code = string.Empty;
                    if (italic > 0)
                    {
                        sb.Append("91ae 91ae "); // italic
                    }
                    while (i < text.Length)
                    {
                        string s = text.Substring(i, 1);
                        string codeFromLetter = GetCodeFromLetter(s);
                        string newCode;
                        if (text.Substring(i).StartsWith("<i>", StringComparison.Ordinal))
                        {
                            newCode = "91ae";
                            i += 2;
                            italic++;
                        }
                        else if (text.Substring(i).StartsWith("</i>", StringComparison.Ordinal) && italic > 0)
                        {
                            newCode = "9120";
                            i += 3;
                            italic--;
                        }
                        else if (text[i] == '’')
                        {
                            if (code.Length == 4)
                            {
                                sb.Append(code + " ");
                                code = string.Empty;
                            }
                            if (code.Length == 0)
                            {
                                code = "80";
                            }
                            if (code.Length == 2)
                            {
                                code += "a7";
                                sb.Append(code + " ");
                            }
                            code = "9229";
                            newCode = "";
                        }
                        else if (codeFromLetter == null)
                            newCode = GetCodeFromLetter(" ");
                        else
                            newCode = codeFromLetter;

                        if (code.Length == 2 && newCode.Length == 4)
                        {
                            code += "80";
                        }

                        if (code.Length == 4)
                        {
                            sb.Append(code + " ");
                            if (code.StartsWith('9') || code.StartsWith('8')) // control codes must be double
                                sb.Append(code + " ");
                            code = string.Empty;
                        }

                        if (code.Length == 2 && newCode.Length == 2)
                        {
                            code += newCode;
                            newCode = string.Empty;
                        }

                        if (newCode.Length == 4 && code.Length == 0)
                        {
                            code = newCode;
                        }
                        else if (newCode.Length == 2 && code.Length == 0)
                        {
                            code = newCode;
                        }
                        else if (newCode.Length > 4)
                        {
                            if (code.Length == 2)
                            {
                                code += "80";
                                sb.Append(code + " ");
                                if (code.StartsWith('9') || code.StartsWith('8')) // control codes must be double
                                    sb.Append(code + " ");
                                code = string.Empty;
                            }
                            else if (code.Length == 4)
                            {
                                sb.Append(code + " ");
                                if (code.StartsWith('9') || code.StartsWith('8')) // control codes must be double
                                    sb.Append(code + " ");
                                code = string.Empty;
                            }
                            sb.Append(newCode.TrimEnd() + " ");
                        }

                        i++;
                    }
                    if (code.Length == 2)
                        code += "80";
                    if (code.Length == 4)
                        sb.Append(code);
                }

                return sb.ToString().Trim();
            }

            private static string GetCodeFromLetter(string letter)
            {
                var code = LetterDictionary.FirstOrDefault(x => x.Value == letter);
                if (code.Equals(new KeyValuePair<string, string>()))
                    return null;
                return code.Key;
            }

            private static string GetLetterFromCode(string hexCode)
            {
                var letter = LetterDictionary.FirstOrDefault(x => x.Key == hexCode.ToLowerInvariant());
                if (letter.Equals(new KeyValuePair<string, string>()))
                    return null;
                return letter.Value;
            }

            public static string GetCenterCodes(string text, int lineNumber, int totalLines)
            {
                int row = 14 - (totalLines - lineNumber);

                var rowCodes = new List<string> { "91", "91", "92", "92", "15", "15", "16", "16", "97", "97", "10", "13", "13", "94", "94" };
                string rowCode = rowCodes[row];

                int left = (32 - text.Length) / 2;
                int columnRest = left % 4;
                int column = left - columnRest;

                List<string> columnCodes;
                switch (column)
                {
                    case 0:
                        columnCodes = new List<string> { "d0", "70", "d0", "70", "d0", "70", "d0", "70", "d0", "70", "d0", "d0", "70", "d0", "70" };
                        break;
                    case 4:
                        columnCodes = new List<string> { "52", "f2", "52", "f2", "52", "f2", "52", "f2", "52", "f2", "52", "52", "f2", "52", "f2" };
                        break;
                    case 8:
                        columnCodes = new List<string> { "54", "f4", "54", "f4", "54", "f4", "54", "f4", "54", "f4", "54", "54", "f4", "54", "f4" };
                        break;
                    case 12:
                        columnCodes = new List<string> { "d6", "76", "d6", "76", "d6", "76", "d6", "76", "d6", "76", "d6", "d6", "76", "d6", "76" };
                        break;
                    case 16:
                        columnCodes = new List<string> { "58", "f8", "58", "f8", "58", "f8", "58", "f8", "58", "f8", "58", "58", "f8", "58", "f8" };
                        break;
                    case 20:
                        columnCodes = new List<string> { "da", "7a", "da", "7a", "da", "7a", "da", "7a", "da", "7a", "da", "da", "7a", "da", "7a" };
                        break;
                    case 24:
                        columnCodes = new List<string> { "dc", "7c", "dc", "7c", "dc", "7c", "dc", "7c", "dc", "7c", "dc", "dc", "7c", "dc", "7c" };
                        break;
                    default: // 28
                        columnCodes = new List<string> { "5e", "fe", "5e", "fe", "5e", "fe", "5e", "fe", "5e", "fe", "5e", "5e", "fe", "5e", "fe" };
                        break;
                }
                string code = rowCode + columnCodes[row];

                if (columnRest == 1)
                    return code + " " + code + " 97a1 97a1 ";
                if (columnRest == 2)
                    return code + " " + code + " 97a2 97a2 ";
                if (columnRest == 3)
                    return code + " " + code + " 9723 9723 ";
                return code + " " + code + " ";
            }

            private string ToTimeCode(double totalMilliseconds)
            {
                TimeSpan ts = TimeSpan.FromMilliseconds(totalMilliseconds);
                if (DropFrame)
                    return string.Format("{0:00}:{1:00}:{2:00};{3:00}", ts.Hours, ts.Minutes, ts.Seconds, MillisecondsToFramesMaxFrameRate(ts.Milliseconds));
                return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, MillisecondsToFramesMaxFrameRate(ts.Milliseconds));
            }

            public static SccPositionAndStyle GetColorAndPosition(string code)
            {
                switch (code.ToLower(CultureInfo.InvariantCulture))
                {
                    //NO x-coordinate?
                    case "1140": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 1, 0);
                    case "1160": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 2, 0);
                    case "1240": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 3, 0);
                    case "1260": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 4, 0);
                    case "1540": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 5, 0);
                    case "1560": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 6, 0);
                    case "1640": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 7, 0);
                    case "1660": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 8, 0);
                    case "1740": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 9, 0);
                    case "1760": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 10, 0);
                    case "1040": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 11, 0);
                    case "1340": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 12, 0);
                    case "1360": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 13, 0);
                    case "1440": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 14, 0);
                    case "1460": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 15, 0);

                    case "1141": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 1, 0);
                    case "1161": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 2, 0);
                    case "1241": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 3, 0);
                    case "1261": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 4, 0);
                    case "1541": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 5, 0);
                    case "1561": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 6, 0);
                    case "1641": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 7, 0);
                    case "1661": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 8, 0);
                    case "1741": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 9, 0);
                    case "1761": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 10, 0);
                    case "1041": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 11, 0);
                    case "1341": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 12, 0);
                    case "1361": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 13, 0);
                    case "1441": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 14, 0);
                    case "1461": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 15, 0);

                    case "1142": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 1, 0);
                    case "1162": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 2, 0);
                    case "1242": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 3, 0);
                    case "1262": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 4, 0);
                    case "1542": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 5, 0);
                    case "1562": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 6, 0);
                    case "1642": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 7, 0);
                    case "1662": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 8, 0);
                    case "1742": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 9, 0);
                    case "1762": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 10, 0);
                    case "1042": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 11, 0);
                    case "1342": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 12, 0);
                    case "1362": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 13, 0);
                    case "1442": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 14, 0);
                    case "1462": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 15, 0);

                    case "1143": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 1, 0);
                    case "1163": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 2, 0);
                    case "1243": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 3, 0);
                    case "1263": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 4, 0);
                    case "1543": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 5, 0);
                    case "1563": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 6, 0);
                    case "1643": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 7, 0);
                    case "1663": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 8, 0);
                    case "1743": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 9, 0);
                    case "1763": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 10, 0);
                    case "1043": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 11, 0);
                    case "1343": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 12, 0);
                    case "1363": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 13, 0);
                    case "1443": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 14, 0);
                    case "1463": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 15, 0);

                    case "1144": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 1, 0);
                    case "1164": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 2, 0);
                    case "1244": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 3, 0);
                    case "1264": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 4, 0);
                    case "1544": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 5, 0);
                    case "1564": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 6, 0);
                    case "1644": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 7, 0);
                    case "1664": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 8, 0);
                    case "1744": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 9, 0);
                    case "1764": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 10, 0);
                    case "1044": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 11, 0);
                    case "1344": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 12, 0);
                    case "1364": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 13, 0);
                    case "1444": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 14, 0);
                    case "1464": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 15, 0);

                    case "1145": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 1, 0);
                    case "1165": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 2, 0);
                    case "1245": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 3, 0);
                    case "1265": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 4, 0);
                    case "1545": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 5, 0);
                    case "1565": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 6, 0);
                    case "1645": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 7, 0);
                    case "1665": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 8, 0);
                    case "1745": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 9, 0);
                    case "1765": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 10, 0);
                    case "1045": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 11, 0);
                    case "1345": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 12, 0);
                    case "1365": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 13, 0);
                    case "1445": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 14, 0);
                    case "1465": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 15, 0);

                    case "1146": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 1, 0);
                    case "1166": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 2, 0);
                    case "1246": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 3, 0);
                    case "1266": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 4, 0);
                    case "1546": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 5, 0);
                    case "1566": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 6, 0);
                    case "1646": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 7, 0);
                    case "1666": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 8, 0);
                    case "1746": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 9, 0);
                    case "1766": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 10, 0);
                    case "1046": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 11, 0);
                    case "1346": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 12, 0);
                    case "1366": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 13, 0);
                    case "1446": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 14, 0);
                    case "1466": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 15, 0);

                    case "1147": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 1, 0);
                    case "1167": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 2, 0);
                    case "1247": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 3, 0);
                    case "1267": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 4, 0);
                    case "1547": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 5, 0);
                    case "1567": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 6, 0);
                    case "1647": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 7, 0);
                    case "1667": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 8, 0);
                    case "1747": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 9, 0);
                    case "1767": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 10, 0);
                    case "1047": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 11, 0);
                    case "1347": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 12, 0);
                    case "1367": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 13, 0);
                    case "1447": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 14, 0);
                    case "1467": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 15, 0);

                    case "1148": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 1, 0);
                    case "1168": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 2, 0);
                    case "1248": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 3, 0);
                    case "1268": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 4, 0);
                    case "1548": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 5, 0);
                    case "1568": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 6, 0);
                    case "1648": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 7, 0);
                    case "1668": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 8, 0);
                    case "1748": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 9, 0);
                    case "1768": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 10, 0);
                    case "1048": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 11, 0);
                    case "1348": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 12, 0);
                    case "1368": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 13, 0);
                    case "1448": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 14, 0);
                    case "1468": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 15, 0);

                    case "1149": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 1, 0);
                    case "1169": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 2, 0);
                    case "1249": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 3, 0);
                    case "1269": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 4, 0);
                    case "1549": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 5, 0);
                    case "1569": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 6, 0);
                    case "1649": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 7, 0);
                    case "1669": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 8, 0);
                    case "1749": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 9, 0);
                    case "1769": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 10, 0);
                    case "1049": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 11, 0);
                    case "1349": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 12, 0);
                    case "1369": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 13, 0);
                    case "1449": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 14, 0);
                    case "1469": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 15, 0);

                    case "114a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 1, 0);
                    case "116a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 2, 0);
                    case "124a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 3, 0);
                    case "126a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 4, 0);
                    case "154a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 5, 0);
                    case "156a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 6, 0);
                    case "164a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 7, 0);
                    case "166a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 8, 0);
                    case "174a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 9, 0);
                    case "176a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 10, 0);
                    case "104a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 11, 0);
                    case "134a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 12, 0);
                    case "136a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 13, 0);
                    case "144a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 14, 0);
                    case "146a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 15, 0);

                    case "114b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 1, 0);
                    case "116b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 2, 0);
                    case "124b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 3, 0);
                    case "126b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 4, 0);
                    case "154b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 5, 0);
                    case "156b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 6, 0);
                    case "164b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 7, 0);
                    case "166b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 8, 0);
                    case "174b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 9, 0);
                    case "176b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 10, 0);
                    case "104b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 11, 0);
                    case "134b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 12, 0);
                    case "136b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 13, 0);
                    case "144b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 14, 0);
                    case "146b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 15, 0);

                    case "114c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 1, 0);
                    case "116c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 2, 0);
                    case "124c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 3, 0);
                    case "126c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 4, 0);
                    case "154c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 5, 0);
                    case "156c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 6, 0);
                    case "164c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 7, 0);
                    case "166c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 8, 0);
                    case "174c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 9, 0);
                    case "176c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 10, 0);
                    case "104c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 11, 0);
                    case "134c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 12, 0);
                    case "136c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 13, 0);
                    case "144c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 14, 0);
                    case "146c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 15, 0);

                    case "114d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 1, 0);
                    case "116d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 2, 0);
                    case "124d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 3, 0);
                    case "126d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 4, 0);
                    case "154d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 5, 0);
                    case "156d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 6, 0);
                    case "164d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 7, 0);
                    case "166d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 8, 0);
                    case "174d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 9, 0);
                    case "176d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 10, 0);
                    case "104d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 11, 0);
                    case "134d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 12, 0);
                    case "136d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 13, 0);
                    case "144d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 14, 0);
                    case "146d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 15, 0);

                    case "114e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 1, 0);
                    case "116e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 2, 0);
                    case "124e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 3, 0);
                    case "126e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 4, 0);
                    case "154e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 5, 0);
                    case "156e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 6, 0);
                    case "164e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 7, 0);
                    case "166e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 8, 0);
                    case "174e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 9, 0);
                    case "176e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 10, 0);
                    case "104e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 11, 0);
                    case "134e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 12, 0);
                    case "136e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 13, 0);
                    case "144e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 14, 0);
                    case "146e": return new SccPositionAndStyle(Color.White, FontStyle.Italic, 15, 0);

                    case "114f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 1, 0);
                    case "116f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 2, 0);
                    case "124f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 3, 0);
                    case "126f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 4, 0);
                    case "154f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 5, 0);
                    case "156f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 6, 0);
                    case "164f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 7, 0);
                    case "166f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 8, 0);
                    case "174f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 9, 0);
                    case "176f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 10, 0);
                    case "104f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 11, 0);
                    case "134f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 12, 0);
                    case "136f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 13, 0);
                    case "144f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 14, 0);
                    case "146f": return new SccPositionAndStyle(Color.White, FontStyle.Underline | FontStyle.Italic, 15, 0);

                    case "91d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 1, 0);
                    case "9151": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 1, 0);
                    case "91c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 1, 0);
                    case "9143": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 1, 0);
                    case "91c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 1, 0);
                    case "9145": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 1, 0);
                    case "9146": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 1, 0);
                    case "91c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 1, 0);
                    case "91c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 1, 0);
                    case "9149": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 1, 0);
                    case "914a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 1, 0);
                    case "91cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 1, 0);
                    case "914c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 1, 0);
                    case "91cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 1, 0);

                    case "9170": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 2, 0);
                    case "91f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 2, 0);
                    case "9162": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 2, 0);
                    case "91e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 2, 0);
                    case "9164": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 2, 0);
                    case "91e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 2, 0);
                    case "91e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 2, 0);
                    case "9167": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 2, 0);
                    case "9168": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 2, 0);
                    case "91e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 2, 0);
                    case "91ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 2, 0);
                    case "916b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 2, 0);
                    case "91ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 2, 0);
                    case "916d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 2, 0);

                    case "92d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 3, 0);
                    case "9251": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 3, 0);
                    case "92c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 3, 0);
                    case "9243": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 3, 0);
                    case "92c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 3, 0);
                    case "9245": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 3, 0);
                    case "9246": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 3, 0);
                    case "92c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 3, 0);
                    case "92c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 3, 0);
                    case "9249": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 3, 0);
                    case "924a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 3, 0);
                    case "92cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 3, 0);
                    case "924c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 3, 0);
                    case "92cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 3, 0);

                    case "9270": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 4, 0);
                    case "92f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 4, 0);
                    case "9262": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 4, 0);
                    case "92e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 4, 0);
                    case "9264": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 4, 0);
                    case "92e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 4, 0);
                    case "92e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 4, 0);
                    case "9267": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 4, 0);
                    case "9268": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 4, 0);
                    case "92e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 4, 0);
                    case "92ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 4, 0);
                    case "926b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 4, 0);
                    case "92ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 4, 0);
                    case "926d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 4, 0);

                    case "15d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 5, 0);
                    case "1551": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 5, 0);
                    case "15c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 5, 0);
                    //                case "1543": return new SCCPositionAndStyle(Color.Green, FontStyle.Underline, 5, 0);
                    case "15c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 5, 0);
                    //                case "1545": return new SCCPositionAndStyle(Color.Blue, FontStyle.Underline, 5, 0);
                    //                case "1546": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Regular, 5, 0);
                    case "15c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 5, 0);
                    case "15c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 5, 0);
                    //case "1549": return new SCCPositionAndStyle(Color.Red, FontStyle.Underline, 5, 0);
                    //case "154a": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Regular, 5, 0);
                    case "15cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 5, 0);
                    //case "154c": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Regular, 5, 0);
                    case "15cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 5, 0);

                    case "1570": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 6, 0);
                    case "15f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 6, 0);
                    //case "1562": return new SCCPositionAndStyle(Color.Green, FontStyle.Regular, 6, 0);
                    //case "15e3": return new SCCPositionAndStyle(Color.Green, FontStyle.Underline, 6, 0);
                    //case "1564": return new SCCPositionAndStyle(Color.Blue, FontStyle.Regular, 6, 0);
                    case "15e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 6, 0);
                    case "15e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 6, 0);
                    //case "1567": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Underline, 6, 0);
                    //case "1568": return new SCCPositionAndStyle(Color.Red, FontStyle.Regular, 6, 0);
                    case "15e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 6, 0);
                    case "15ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 6, 0);
                    //case "156b": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Underline, 6, 0);
                    case "15ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 6, 0);
                    //case "156d": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Underline, 6, 0);

                    case "16d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 7, 0);
                    case "1651": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 7, 0);
                    case "16c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 7, 0);
                    //case "1643": return new SCCPositionAndStyle(Color.Green, FontStyle.Underline, 7, 0);
                    case "16c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 7, 0);
                    //case "1645": return new SCCPositionAndStyle(Color.Blue, FontStyle.Underline, 7, 0);
                    //case "1646": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Regular, 7, 0);
                    case "16c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 7, 0);
                    case "16c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 7, 0);
                    //case "1649": return new SCCPositionAndStyle(Color.Red, FontStyle.Underline, 7, 0);
                    //case "164a": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Regular, 7, 0);
                    case "16cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 7, 0);
                    //case "164c": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Regular, 7, 0);
                    case "16cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 7, 0);

                    case "1670": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 8, 0);
                    case "16f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 8, 0);
                    //case "1662": return new SCCPositionAndStyle(Color.Green, FontStyle.Regular, 8, 0);
                    case "16e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 8, 0);
                    //case "1664": return new SCCPositionAndStyle(Color.Blue, FontStyle.Regular, 8, 0);
                    case "16e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 8, 0);
                    case "16e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 8, 0);
                    //case "1667": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Underline, 8, 0);
                    //case "1668": return new SCCPositionAndStyle(Color.Red, FontStyle.Regular, 8, 0);
                    case "16e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 8, 0);
                    case "16ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 8, 0);
                    //case "166b": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Underline, 8, 0);
                    case "16ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 8, 0);
                    //case "166d": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Underline, 8, 0);

                    case "97d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 9, 0);
                    case "9751": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 9, 0);
                    case "97c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 9, 0);
                    case "9743": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 9, 0);
                    case "97c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 9, 0);
                    case "9745": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 9, 0);
                    case "9746": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 9, 0);
                    case "97c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 9, 0);
                    case "97c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 9, 0);
                    case "9749": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 9, 0);
                    case "974a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 9, 0);
                    case "97cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 9, 0);
                    case "974c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 9, 0);
                    case "97cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 9, 0);

                    case "9770": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 10, 0);
                    case "97f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 10, 0);
                    case "9762": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 10, 0);
                    case "97e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 10, 0);
                    case "9764": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 10, 0);
                    case "97e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 10, 0);
                    case "97e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 10, 0);
                    case "9767": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 10, 0);
                    case "9768": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 10, 0);
                    case "97e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 10, 0);
                    case "97ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 10, 0);
                    case "976b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 10, 0);
                    case "97ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 10, 0);
                    case "976d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 10, 0);

                    case "10d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 11, 0);
                    case "1051": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 11, 0);
                    case "10c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 11, 0);
                    //case "1043": return new SCCPositionAndStyle(Color.Green, FontStyle.Underline, 11, 0);
                    case "10c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 11, 0);
                    //case "1045": return new SCCPositionAndStyle(Color.Blue, FontStyle.Underline, 11, 0);
                    //case "1046": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Regular, 11, 0);
                    case "10c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 11, 0);
                    case "10c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 11, 0);
                    //case "1049": return new SCCPositionAndStyle(Color.Red, FontStyle.Underline, 11, 0);
                    //case "104a": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Regular, 11, 0);
                    case "10cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 11, 0);
                    //case "104c": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Regular, 11, 0);
                    case "10cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 11, 0);

                    case "13d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 12, 0);
                    case "1351": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 12, 0);
                    case "13c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 12, 0);
                    //case "1343": return new SCCPositionAndStyle(Color.Green, FontStyle.Underline, 12, 0);
                    case "13c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 12, 0);
                    //case "1345": return new SCCPositionAndStyle(Color.Blue, FontStyle.Underline, 12, 0);
                    //case "1346": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Regular, 12, 0);
                    case "13c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 12, 0);
                    case "13c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 12, 0);
                    //case "1349": return new SCCPositionAndStyle(Color.Red, FontStyle.Underline, 12, 0);
                    //case "134a": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Regular, 12, 0);
                    case "13cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 12, 0);
                    //case "134c": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Regular, 12, 0);
                    case "13cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 12, 0);

                    case "1370": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 13, 0);
                    case "13f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 13, 0);
                    //case "1362": return new SCCPositionAndStyle(Color.Green, FontStyle.Regular, 13, 0);
                    case "13e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 13, 0);
                    //case "1364": return new SCCPositionAndStyle(Color.Blue, FontStyle.Regular, 13, 0);
                    case "13e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 13, 0);
                    case "13e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 13, 0);
                    //case "1367": return new SCCPositionAndStyle(Color.Cyan, FontStyle.Underline, 13, 0);
                    //case "1368": return new SCCPositionAndStyle(Color.Red, FontStyle.Regular, 13, 0);
                    case "13e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 13, 0);
                    case "13ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 13, 0);
                    //case "136b": return new SCCPositionAndStyle(Color.Yellow, FontStyle.Underline, 13, 0);
                    case "13ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 13, 0);
                    //case "136d": return new SCCPositionAndStyle(Color.Magenta, FontStyle.Underline, 13, 0);

                    case "94d0": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 14, 0);
                    case "9451": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 14, 0);
                    case "94c2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 14, 0);
                    case "9443": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 14, 0);
                    case "94c4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 14, 0);
                    case "9445": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 14, 0);
                    case "9446": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 14, 0);
                    case "94c7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 14, 0);
                    case "94c8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 14, 0);
                    case "9449": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 14, 0);
                    case "944a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 14, 0);
                    case "94cb": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 14, 0);
                    case "944c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 14, 0);
                    case "94cd": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 14, 0);

                    case "9470": return new SccPositionAndStyle(Color.White, FontStyle.Regular, 15, 0);
                    case "94f1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, 15, 0);
                    case "9462": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, 15, 0);
                    case "94e3": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, 15, 0);
                    case "9464": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, 15, 0);
                    case "94e5": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, 15, 0);
                    case "94e6": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, 15, 0);
                    case "9467": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, 15, 0);
                    case "9468": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, 15, 0);
                    case "94e9": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, 15, 0);
                    case "94ea": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, 15, 0);
                    case "946b": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, 15, 0);
                    case "94ec": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, 15, 0);
                    case "946d": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, 15, 0);

                    //Columns 4-28

                    case "9152": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 4);
                    case "91d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 4);
                    case "9154": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 8);
                    case "91d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 8);
                    case "91d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 12);
                    case "9157": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 12);
                    case "9158": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 16);
                    case "91d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 16);
                    case "91da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 20);
                    case "915b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 20);
                    case "91dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 24);
                    case "915d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 24);
                    case "915e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 1, 28);
                    case "91df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 1, 28);

                    case "91f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 4);
                    case "9173": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 4);
                    case "91f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 8);
                    case "9175": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 8);
                    case "9176": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 12);
                    case "91f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 12);
                    case "91f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 16);
                    case "9179": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 16);
                    case "917a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 20);
                    case "91fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 20);
                    case "917c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 24);
                    case "91fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 24);
                    case "91fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 2, 28);
                    case "917f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 2, 28);

                    case "9252": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 4);
                    case "92d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 4);
                    case "9254": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 8);
                    case "92d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 8);
                    case "92d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 12);
                    case "9257": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 12);
                    case "9258": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 16);
                    case "92d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 16);
                    case "92da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 20);
                    case "925b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 20);
                    case "92dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 24);
                    case "925d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 24);
                    case "925e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 3, 28);
                    case "92df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 3, 28);

                    case "92f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 4);
                    case "9273": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 4);
                    case "92f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 8);
                    case "9275": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 8);
                    case "9276": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 12);
                    case "92f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 12);
                    case "92f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 16);
                    case "9279": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 16);
                    case "927a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 20);
                    case "92fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 20);
                    case "927c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 24);
                    case "92fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 24);
                    case "92fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 4, 28);
                    case "927f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 4, 28);

                    case "1552": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 4);
                    case "15d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 4);
                    case "1554": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 8);
                    case "15d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 8);
                    case "15d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 12);
                    case "1557": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 12);
                    case "1558": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 16);
                    case "15d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 16);
                    case "15da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 20);
                    case "155b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 20);
                    case "15dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 24);
                    case "155d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 24);
                    case "155e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 5, 28);
                    case "15df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 5, 28);

                    case "15f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 4);
                    case "1573": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 4);
                    case "15f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 8);
                    case "1575": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 8);
                    case "1576": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 12);
                    case "15f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 12);
                    case "15f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 16);
                    case "1579": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 16);
                    case "157a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 20);
                    case "15fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 20);
                    case "157c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 24);
                    case "15fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 24);
                    case "15fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 6, 28);
                    case "157f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 6, 28);

                    case "1652": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 4);
                    case "16d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 4);
                    case "1654": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 8);
                    case "16d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 8);
                    case "16d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 12);
                    case "1657": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 12);
                    case "1658": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 16);
                    case "16d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 16);
                    case "16da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 20);
                    case "165b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 20);
                    case "16dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 24);
                    case "165d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 24);
                    case "165e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 7, 28);
                    case "16df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 7, 28);

                    case "16f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 4);
                    case "1673": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 4);
                    case "16f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 8);
                    case "1675": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 8);
                    case "1676": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 12);
                    case "16f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 12);
                    case "16f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 16);
                    case "1679": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 16);
                    case "167a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 20);
                    case "16fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 20);
                    case "167c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 24);
                    case "16fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 24);
                    case "16fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 8, 28);
                    case "167f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 8, 28);

                    case "9752": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 4);
                    case "97d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 4);
                    case "9754": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 8);
                    case "97d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 8);
                    case "97d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 12);
                    case "9757": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 12);
                    case "9758": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 16);
                    case "97d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 16);
                    case "97da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 20);
                    case "975b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 20);
                    case "97dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 24);
                    case "975d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 24);
                    case "975e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 9, 28);
                    case "97df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 9, 28);

                    case "97f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 4);
                    case "9773": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 4);
                    case "97f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 8);
                    case "9775": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 8);
                    case "9776": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 12);
                    case "97f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 12);
                    case "97f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 16);
                    case "9779": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 16);
                    case "977a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 20);
                    case "97fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 20);
                    case "977c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 24);
                    case "97fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 24);
                    case "97fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 10, 28);
                    case "977f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 10, 28);

                    case "1052": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 4);
                    case "10d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 4);
                    case "1054": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 8);
                    case "10d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 8);
                    case "10d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 12);
                    case "1057": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 12);
                    case "1058": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 16);
                    case "10d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 16);
                    case "10da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 20);
                    case "105b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 20);
                    case "10dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 24);
                    case "105d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 24);
                    case "105e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 11, 28);
                    case "10df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 11, 28);

                    case "1352": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 4);
                    case "13d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 4);
                    case "1354": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 8);
                    case "13d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 8);
                    case "13d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 12);
                    case "1357": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 12);
                    case "1358": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 16);
                    case "13d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 16);
                    case "13da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 20);
                    case "135b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 20);
                    case "13dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 24);
                    case "135d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 24);
                    case "135e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 12, 28);
                    case "13df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 12, 28);

                    case "13f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 4);
                    case "1373": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 4);
                    case "13f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 8);
                    case "1375": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 8);
                    case "1376": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 12);
                    case "13f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 12);
                    case "13f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 16);
                    case "1379": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 16);
                    case "137a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 20);
                    case "13fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 20);
                    case "137c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 24);
                    case "13fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 24);
                    case "13fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 13, 28);
                    case "137f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 13, 28);

                    case "9452": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 4);
                    case "94d3": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 4);
                    case "9454": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 8);
                    case "94d5": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 8);
                    case "94d6": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 12);
                    case "9457": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 12);
                    case "9458": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 16);
                    case "94d9": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 16);
                    case "94da": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 20);
                    case "945b": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 20);
                    case "94dc": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 24);
                    case "945d": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 24);
                    case "945e": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 14, 28);
                    case "94df": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 14, 28);

                    case "94f2": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 4);
                    case "9473": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 4);
                    case "94f4": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 8);
                    case "9475": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 8);
                    case "9476": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 12);
                    case "94f7": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 12);
                    case "94f8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 16);
                    case "9479": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 16);
                    case "947a": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 20);
                    case "94fb": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 20);
                    case "947c": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 24);
                    case "94fd": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 24);
                    case "94fe": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, 15, 28);
                    case "947f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Underline, 15, 28);

                    // mid-row commands
                    case "9120": return new SccPositionAndStyle(Color.White, FontStyle.Regular, -1, -1);
                    case "91a1": return new SccPositionAndStyle(Color.White, FontStyle.Underline, -1, -1);
                    case "91a2": return new SccPositionAndStyle(Color.Green, FontStyle.Regular, -1, -1);
                    case "9123": return new SccPositionAndStyle(Color.Green, FontStyle.Underline, -1, -1);
                    case "91a4": return new SccPositionAndStyle(Color.Blue, FontStyle.Regular, -1, -1);
                    case "9125": return new SccPositionAndStyle(Color.Blue, FontStyle.Underline, -1, -1);
                    case "9126": return new SccPositionAndStyle(Color.Cyan, FontStyle.Regular, -1, -1);
                    case "91a7": return new SccPositionAndStyle(Color.Cyan, FontStyle.Underline, -1, -1);
                    case "91a8": return new SccPositionAndStyle(Color.Red, FontStyle.Regular, -1, -1);
                    case "9129": return new SccPositionAndStyle(Color.Red, FontStyle.Underline, -1, -1);
                    case "912a": return new SccPositionAndStyle(Color.Yellow, FontStyle.Regular, -1, -1);
                    case "91ab": return new SccPositionAndStyle(Color.Yellow, FontStyle.Underline, -1, -1);
                    case "912c": return new SccPositionAndStyle(Color.Magenta, FontStyle.Regular, -1, -1);
                    case "91ad": return new SccPositionAndStyle(Color.Magenta, FontStyle.Underline, -1, -1);

                    case "91ae": return new SccPositionAndStyle(Color.Transparent, FontStyle.Italic, -1, -1);
                    case "912f": return new SccPositionAndStyle(Color.Transparent, FontStyle.Italic | FontStyle.Underline, -1, -1);

                    case "94a8": return new SccPositionAndStyle(Color.Transparent, FontStyle.Regular, -1, -1); // turn flash on
                }
                return null;
            }

            public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
            {
                _errorCount = 0;
                Paragraph p = null;
                foreach (string line in lines)
                {
                    string s = line.Trim();
                    var match = RegexTimeCodes.Match(s);
                    if (match.Success)
                    {
                        TimeCode startTime = ParseTimeCode(s.Substring(0, match.Length - 1));
                        string text = GetSccText(s.Substring(match.Index), ref _errorCount);

                        if (text == "942c 942c" || text == "942c")
                        {
                            if (p != null)
                            {
                                p.EndTime = new TimeCode(startTime.TotalMilliseconds);
                            }
                        }
                        else
                        {
                            p = new Paragraph(startTime, new TimeCode(startTime.TotalMilliseconds), text);
                            subtitle.Paragraphs.Add(p);
                        }
                    }
                }
                for (int i = subtitle.Paragraphs.Count - 2; i >= 0; i--)
                {
                    p = subtitle.GetParagraphOrDefault(i);
                    Paragraph next = subtitle.GetParagraphOrDefault(i + 1);
                    if (p != null && next != null && Math.Abs(p.EndTime.TotalMilliseconds - p.StartTime.TotalMilliseconds) < 0.001)
                        p.EndTime = new TimeCode(next.StartTime.TotalMilliseconds);
                    if (next != null && string.IsNullOrEmpty(next.Text))
                        subtitle.Paragraphs.Remove(next);
                }
                p = subtitle.GetParagraphOrDefault(0);
                if (p != null && string.IsNullOrEmpty(p.Text))
                    subtitle.Paragraphs.Remove(p);

                subtitle.Renumber();
            }

            public static string GetSccText(string s, ref int errorCount)
            {
                int y = 0;
                string[] parts = s.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                var sb = new StringBuilder();
                bool first = true;
                bool italicOn = false;
                int k = 0;
                while (k < parts.Length)
                {
                    string part = parts[k];
                    if (part.Length == 4)
                    {
                        if (part != "94ae" && part != "9420" && part != "94ad" && part != "9426" && part != "946e" && part != "91ce" && part != "13ce" && part != "9425" && part != "9429")
                        {

                            // skewed apos "’"
                            if (part == "9229" && k < parts.Length - 1 && parts[k + 1] == "9229" && sb.EndsWith('\''))
                            {
                                sb.Remove(sb.Length - 1, 1);
                                sb.Append("’");
                                k += 2;
                                continue;
                            }

                            // 3 codes
                            if (k < parts.Length - 2)
                            {
                                var letter = GetLetterFromCode(part + " " + parts[k + 1] + " " + parts[k + 2]);
                                if (letter != null)
                                {
                                    sb.Append(letter);
                                    k += 3;
                                    continue;
                                }
                            }

                            // two codes
                            if (k < parts.Length - 1)
                            {
                                var letter = GetLetterFromCode(part + " " + parts[k + 1]);
                                if (letter != null)
                                {
                                    sb.Append(letter);
                                    k += 2;
                                    continue;
                                }
                            }

                            if (part[0] == '9' || part[0] == '8')
                            {
                                if (k + 1 < parts.Length && parts[k + 1] == part)
                                    k++;
                            }

                            var cp = GetColorAndPosition(part);
                            if (cp != null)
                            {
                                if (cp.Y > 0 && y >= 0 && cp.Y > y && !sb.ToString().EndsWith(Environment.NewLine, StringComparison.Ordinal) && !string.IsNullOrWhiteSpace(sb.ToString()))
                                    sb.AppendLine();
                                if (cp.Y > 0)
                                    y = cp.Y;
                                if ((cp.Style & FontStyle.Italic) == FontStyle.Italic && !italicOn)
                                {
                                    sb.Append("<i>");
                                    italicOn = true;
                                }
                                else if (cp.Style == FontStyle.Regular && italicOn)
                                {
                                    sb.Append("</i>");
                                    italicOn = false;
                                }
                            }
                            else
                            {
                                switch (part)
                                {
                                    case "9440":
                                    case "94e0":
                                        if (!sb.ToString().EndsWith(Environment.NewLine, StringComparison.Ordinal))
                                            sb.AppendLine();
                                        break;
                                    case "2c75":
                                    case "2cf2":
                                    case "2c6f":
                                    case "2c6e":
                                    case "2c6d":
                                    case "2c6c":
                                    case "2c6b":
                                    case "2c6a":
                                    case "2c69":
                                    case "2c68":
                                    case "2c67":
                                    case "2c66":
                                    case "2c65":
                                    case "2c64":
                                    case "2c63":
                                    case "2c62":
                                    case "2c61":
                                        sb.Append(GetLetterFromCode(part.Substring(2, 2)));
                                        break;
                                    case "2c52":
                                    case "2c94":
                                        break;
                                    default:
                                        var result = GetLetterFromCode(part);
                                        if (result == null)
                                        {
                                            sb.Append(GetLetterFromCode(part.Substring(0, 2)));
                                            var secondPart = part.Substring(2, 2) + "80";
                                            var foundSecondPart = false;

                                            // 3 codes
                                            if (k < parts.Length - 2)
                                            {
                                                var letter = GetLetterFromCode(secondPart + " " + parts[k + 1] + " " + parts[k + 2]);
                                                if (letter != null)
                                                {
                                                    sb.Append(letter);
                                                    k += 3;
                                                    continue;
                                                }
                                            }

                                            // two codes
                                            if (k < parts.Length - 1 && !foundSecondPart)
                                            {
                                                var letter = GetLetterFromCode(secondPart + " " + parts[k + 1]);
                                                if (letter != null)
                                                {
                                                    sb.Append(letter);
                                                    k += 2;
                                                    continue;
                                                }
                                            }

                                            sb.Append(GetLetterFromCode(part.Substring(2, 2)));
                                        }
                                        else
                                        {
                                            sb.Append(result);
                                        }
                                        break;
                                }
                            }
                        }
                    }
                    else if (part.Length > 0)
                    {
                        if (!first)
                            errorCount++;
                    }
                    first = false;
                    k++;
                }
                string res = sb.ToString().Replace("<i></i>", string.Empty).Replace("</i><i>", string.Empty);
                res = res.Replace("  ", " ").Replace("  ", " ").Replace(Environment.NewLine + " ", Environment.NewLine).Trim();
                if (res.Contains("<i>") && !res.Contains("</i>"))
                    res += "</i>";
                return HtmlUtil.FixInvalidItalicTags(res);
            }

            private static TimeCode ParseTimeCode(string start)
            {
                string[] arr = start.Split(new[] { ':', ';', ',' }, StringSplitOptions.RemoveEmptyEntries);
                return new TimeCode(int.Parse(arr[0]), int.Parse(arr[1]), int.Parse(arr[2]), FramesToMillisecondsMax999(int.Parse(arr[3])));
            }

        }
    }

↑ V3027 The variable 'sb.ToString()' was utilized in the logical expression before it was verified against null in the same logical expression.

↑ V3063 A part of conditional expression is always true if it is evaluated: !foundSecondPart.