public void SrtCoordinates()
        {
            var target = new SubRip();
            var subtitle = new Subtitle();
            const string text = @"1
00:00:02,001 --> 00:00:16,001  X1:000 X2:000 Y1:050 Y2:100
Let us have some! Let us have some!";
            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string actual = subtitle.Paragraphs[0].Text;
            const string expected = "Let us have some! Let us have some!";
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 2
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            if (!System.IO.File.Exists(textBoxInputFile.Text))
            {
                return;
            }

            int numberOfCharactersLeaned = 0;
            int numberOfCharactersSkipped = 0;
            var nOcrD = new NOcrDb(textBoxNOcrDb.Text);
            var lines = new List<string>();
            foreach (string line in System.IO.File.ReadAllLines(textBoxInputFile.Text))
                lines.Add(line);
            var format = new SubRip();
            var sub = new Subtitle();
            format.LoadSubtitle(sub, lines, textBoxInputFile.Text);

            var charactersLearned = new List<string>();
            foreach (ListViewItem item in listViewFonts.Items)
            {

                if (item.Checked)
                {
                    _subtitleFontName = item.Text;
                    _subtitleFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
                    charactersLearned = new List<string>();

                    foreach (Paragraph p in sub.Paragraphs)
                    {
                        foreach (char ch in p.Text)
                        {
                            string s = ch.ToString();
                            if (s.Trim().Length > 0)
                            {
                                if (!charactersLearned.Contains(s))
                                {
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, false);
                                    if (checkBoxBold.Checked)
                                        TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, true);
                                }
                            }
                        }
                    }
                }
            }
            nOcrD.Save();
        }
Ejemplo n.º 3
0
        private void buttonConvert_Click(object sender, EventArgs e)
        {
            if (listViewInputFiles.Items.Count == 0)
            {
                MessageBox.Show(Configuration.Settings.Language.BatchConvert.NothingToConvert);
                return;
            }

            if (!checkBoxOverwriteOriginalFiles.Checked)
            {
                if (textBoxOutputFolder.Text.Length < 2)
                {
                    MessageBox.Show(Configuration.Settings.Language.BatchConvert.PleaseChooseOutputFolder);
                    return;
                }
                else if (!Directory.Exists(textBoxOutputFolder.Text))
                {
                    try
                    {
                        Directory.CreateDirectory(textBoxOutputFolder.Text);
                    }
                    catch (Exception exception)
                    {
                        MessageBox.Show(exception.Message);
                        return;
                    }
                }
            }

            _converting = true;
            buttonConvert.Enabled = false;
            buttonCancel.Enabled = false;
            progressBar1.Style = ProgressBarStyle.Blocks;
            progressBar1.Maximum = listViewInputFiles.Items.Count;
            progressBar1.Value = 0;
            progressBar1.Visible = progressBar1.Maximum > 2;
            string toFormat = comboBoxSubtitleFormats.Text;
            groupBoxOutput.Enabled = false;
            groupBoxConvertOptions.Enabled = false;
            buttonInputBrowse.Enabled = false;
            buttonSearchFolder.Enabled = false;
            _count = 0;
            _converted = 0;
            _errors = 0;
            _abort = false;

            BackgroundWorker worker1 = new BackgroundWorker();
            BackgroundWorker worker2 = new BackgroundWorker();
            BackgroundWorker worker3 = new BackgroundWorker();
            worker1.DoWork += DoThreadWork;
            worker1.RunWorkerCompleted += ThreadWorkerCompleted;
            worker2.DoWork += DoThreadWork;
            worker2.RunWorkerCompleted += ThreadWorkerCompleted;
            worker3.DoWork += DoThreadWork;
            worker3.RunWorkerCompleted += ThreadWorkerCompleted;

            listViewInputFiles.BeginUpdate();
            foreach (ListViewItem item in listViewInputFiles.Items)
                item.SubItems[3].Text = "-";
            listViewInputFiles.EndUpdate();
            Refresh();

            int index = 0;
            while (index < listViewInputFiles.Items.Count && _abort == false)
            {
                ListViewItem item = listViewInputFiles.Items[index];
                string fileName = item.Text;

                try
                {
                    SubtitleFormat format = null;
                    Encoding encoding;
                    var sub = new Subtitle();
                    var fi = new FileInfo(fileName);
                    if (fi.Length < 1024 * 1024) // max 1 mb
                    {
                        format = sub.LoadSubtitle(fileName, out encoding, null);

                        if (format == null)
                        {
                            var ebu = new Ebu();
                            if (ebu.IsMine(null, fileName))
                            {
                                ebu.LoadSubtitle(sub, null, fileName);
                                format = ebu;
                            }
                        }
                        if (format == null)
                        {
                            var pac = new Pac();
                            if (pac.IsMine(null, fileName))
                            {
                                pac.LoadSubtitle(sub, null, fileName);
                                format = pac;
                            }
                        }
                        if (format == null)
                        {
                            var cavena890 = new Cavena890();
                            if (cavena890.IsMine(null, fileName))
                            {
                                cavena890.LoadSubtitle(sub, null, fileName);
                                format = cavena890;
                            }
                        }
                        if (format == null)
                        {
                            var spt = new Spt();
                            if (spt.IsMine(null, fileName))
                            {
                                spt.LoadSubtitle(sub, null, fileName);
                                format = spt;
                            }
                        }
                        if (format == null)
                        {
                            var cheetahCaption = new CheetahCaption();
                            if (cheetahCaption.IsMine(null, fileName))
                            {
                                cheetahCaption.LoadSubtitle(sub, null, fileName);
                                format = cheetahCaption;
                            }
                        }
                        if (format == null)
                        {
                            var capMakerPlus = new CapMakerPlus();
                            if (capMakerPlus.IsMine(null, fileName))
                            {
                                capMakerPlus.LoadSubtitle(sub, null, fileName);
                                format = capMakerPlus;
                            }
                        }
                        if (format == null)
                        {
                            var captionate = new Captionate();
                            if (captionate.IsMine(null, fileName))
                            {
                                captionate.LoadSubtitle(sub, null, fileName);
                                format = captionate;
                            }
                        }
                        if (format == null)
                        {
                            var ultech130 = new Ultech130();
                            if (ultech130.IsMine(null, fileName))
                            {
                                ultech130.LoadSubtitle(sub, null, fileName);
                                format = ultech130;
                            }
                        }
                        if (format == null)
                        {
                            var nciCaption = new NciCaption();
                            if (nciCaption.IsMine(null, fileName))
                            {
                                nciCaption.LoadSubtitle(sub, null, fileName);
                                format = nciCaption;
                            }
                        }

                        if (format == null)
                        {
                            var avidStl = new AvidStl();
                            if (avidStl.IsMine(null, fileName))
                            {
                                avidStl.LoadSubtitle(sub, null, fileName);
                                format = avidStl;
                            }
                        }

                        if (format == null)
                        {
                            var elr = new ELRStudioClosedCaption();
                            if (elr.IsMine(null, fileName))
                            {
                                elr.LoadSubtitle(sub, null, fileName);
                                format = elr;
                            }
                        }

                        if (format != null && format.GetType() == typeof(MicroDvd))
                        {
                            if (sub != null && sub.Paragraphs.Count > 0 && sub.Paragraphs[0].Duration.TotalMilliseconds < 1001)
                            {
                                if (sub.Paragraphs[0].Text.StartsWith("29.") || sub.Paragraphs[0].Text.StartsWith("23.") ||
                                    sub.Paragraphs[0].Text.StartsWith("29,") || sub.Paragraphs[0].Text.StartsWith("23,") ||
                                    sub.Paragraphs[0].Text == "24" || sub.Paragraphs[0].Text == "25" ||
                                    sub.Paragraphs[0].Text == "30" || sub.Paragraphs[0].Text == "60")
                                    sub.Paragraphs.RemoveAt(0);
                            }
                        }

                    }

                    var bluRaySubtitles = new List<BluRaySupParser.PcsData>();
                    bool isVobSub = false;
                    bool isMatroska = false;
                    if (format == null && fileName.ToLower().EndsWith(".sup") && Main.IsBluRaySupFile(fileName))
                    {
                        var log = new StringBuilder();
                        bluRaySubtitles = BluRaySupParser.ParseBluRaySup(fileName, log);
                    }
                    else if (format == null && fileName.ToLower().EndsWith(".sub") && Main.HasVobSubHeader(fileName))
                    {
                        isVobSub = true;
                    }
                    else if (format == null && fileName.ToLower().EndsWith(".mkv") && item.SubItems[2].Text.StartsWith("Matroska"))
                    {
                        isMatroska = true;
                    }

                    if (format == null && bluRaySubtitles.Count == 0 && !isVobSub && !isMatroska)
                    {
                        if (progressBar1.Value < progressBar1.Maximum)
                            progressBar1.Value++;
                        labelStatus.Text = progressBar1.Value + " / " + progressBar1.Maximum;
                    }
                    else
                    {
                        if (isMatroska)
                        {
                            if (Path.GetExtension(fileName).ToLower() == ".mkv" || Path.GetExtension(fileName).ToLower() == ".mks")
                            {
                                Matroska mkv = new Matroska();
                                bool isValid = false;
                                bool hasConstantFrameRate = false;
                                double frameRate = 0;
                                int width = 0;
                                int height = 0;
                                double milliseconds = 0;
                                string videoCodec = string.Empty;
                                mkv.GetMatroskaInfo(fileName, ref isValid, ref hasConstantFrameRate, ref frameRate, ref width, ref height, ref milliseconds, ref videoCodec);
                                if (isValid)
                                {
                                    var subtitleList = mkv.GetMatroskaSubtitleTracks(fileName, out isValid);
                                    if (subtitleList.Count > 0)
                                    {
                                        foreach (MatroskaSubtitleInfo x in subtitleList)
                                        {
                                            if (x.CodecId.ToUpper() == "S_VOBSUB")
                                            {
                                                //TODO: convert from VobSub image based format
                                            }
                                            else if (x.CodecId.ToUpper() == "S_HDMV/PGS")
                                            {
                                                //TODO: convert from Blu-ray image based format
                                            }
                                            else if (x.CodecId.ToUpper() == "S_TEXT/UTF8" || x.CodecId.ToUpper() == "S_TEXT/SSA" || x.CodecId.ToUpper() == "S_TEXT/ASS")
                                            {
                                                _matroskaListViewItem = item;
                                                List<SubtitleSequence> mkvSub = mkv.GetMatroskaSubtitle(fileName, (int)x.TrackNumber, out isValid, MatroskaProgress);

                                                bool isSsa = false;
                                                if (x.CodecPrivate.ToLower().Contains("[script info]"))
                                                {
                                                    if (x.CodecPrivate.ToLower().Contains("[V4 Styles]".ToLower()))
                                                        format = new SubStationAlpha();
                                                    else
                                                        format = new AdvancedSubStationAlpha();
                                                    isSsa = true;
                                                }
                                                else
                                                {
                                                    format = new SubRip();
                                                }

                                                if (isSsa)
                                                {
                                                    foreach (Paragraph p in Main.LoadMatroskaSSa(x, fileName, format, mkvSub).Paragraphs)
                                                    {
                                                        sub.Paragraphs.Add(p);
                                                    }
                                                }
                                                else
                                                {
                                                    foreach (SubtitleSequence p in mkvSub)
                                                    {
                                                        sub.Paragraphs.Add(new Paragraph(p.Text, p.StartMilliseconds, p.EndMilliseconds));
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (bluRaySubtitles.Count > 0)
                        {
                            item.SubItems[3].Text = "OCR...";
                            var vobSubOcr = new VobSubOcr();
                            vobSubOcr.FileName = Path.GetFileName(fileName);
                            vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName);
                            sub = vobSubOcr.SubtitleFromOcr;
                        }
                        else if (isVobSub)
                        {
                            item.SubItems[3].Text = "OCR...";
                            var vobSubOcr = new VobSubOcr();
                            vobSubOcr.InitializeBatch(fileName, Configuration.Settings.VobSubOcr, true);
                            sub = vobSubOcr.SubtitleFromOcr;
                        }

                        if (comboBoxSubtitleFormats.Text == new AdvancedSubStationAlpha().Name && _assStyle != null)
                        {
                            sub.Header = _assStyle;
                        }
                        else if (comboBoxSubtitleFormats.Text == new SubStationAlpha().Name && _ssaStyle != null)
                        {
                            sub.Header = _ssaStyle;
                        }

                        int prevIndex = -1;
                        foreach (Paragraph p in sub.Paragraphs)
                        {
                            string prevText = string.Empty;
                            var prev = sub.GetParagraphOrDefault(prevIndex);
                            if (prev != null)
                                prevText = prev.Text;
                            prevIndex++;

                            if (checkBoxRemoveTextForHI.Checked)
                            {
                                p.Text = _removeForHI.RemoveTextFromHearImpaired(p.Text, prevText);
                            }
                            if (checkBoxRemoveFormatting.Checked)
                            {
                                p.Text = Utilities.RemoveHtmlTags(p.Text);
                                if (p.Text.StartsWith("{") && p.Text.Length > 6 && p.Text[5] == '}')
                                    p.Text = p.Text.Remove(0, 6);
                                if (p.Text.StartsWith("{") && p.Text.Length > 6 && p.Text[4] == '}')
                                    p.Text = p.Text.Remove(0, 5);
                            }
                        }
                        if (checkBoxFixCasing.Checked)
                        {
                            _changeCasing.FixCasing(sub, Utilities.AutoDetectGoogleLanguage(sub));
                            _changeCasingNames.Initialize(sub);
                            _changeCasingNames.FixCasing();
                        }

                        double fromFrameRate;
                        double toFrameRate;
                        if (double.TryParse(comboBoxFrameRateFrom.Text, out fromFrameRate) &&
                            double.TryParse(comboBoxFrameRateTo.Text, out toFrameRate))
                        {
                            sub.ChangeFramerate(fromFrameRate, toFrameRate);
                        }

                        if (timeUpDownAdjust.TimeCode.TotalMilliseconds > 0.00001)
                        {
                            var totalMilliseconds = timeUpDownAdjust.TimeCode.TotalMilliseconds;
                            if (radioButtonShowEarlier.Checked)
                                totalMilliseconds *= -1;
                            sub.AddTimeToAllParagraphs(TimeSpan.FromMilliseconds(totalMilliseconds));
                        }

                        while (worker1.IsBusy && worker2.IsBusy && worker3.IsBusy)
                        {
                            Application.DoEvents();
                            System.Threading.Thread.Sleep(100);
                        }

                        ThreadDoWorkParameter parameter = new ThreadDoWorkParameter(checkBoxFixCommonErrors.Checked, checkBoxMultipleReplace.Checked, checkBoxSplitLongLines.Checked, checkBoxAutoBalance.Checked, checkBoxSetMinimumDisplayTimeBetweenSubs.Checked, item, sub, GetCurrentSubtitleFormat(), GetCurrentEncoding(), Configuration.Settings.Tools.BatchConvertLanguage, fileName, toFormat, format);
                        if (!worker1.IsBusy)
                            worker1.RunWorkerAsync(parameter);
                        else if (!worker2.IsBusy)
                            worker2.RunWorkerAsync(parameter);
                        else if (!worker3.IsBusy)
                            worker3.RunWorkerAsync(parameter);
                    }

                }
                catch
                {
                    if (progressBar1.Value < progressBar1.Maximum)
                        progressBar1.Value++;
                    labelStatus.Text = progressBar1.Value + " / " + progressBar1.Maximum;
                }
                index++;
            }
            while (worker1.IsBusy || worker2.IsBusy || worker3.IsBusy)
            {
                try
                {
                    Application.DoEvents();
                }
                catch
                {
                }
                System.Threading.Thread.Sleep(100);
            }
            _converting = false;
            labelStatus.Text = string.Empty;
            progressBar1.Visible = false;
            buttonConvert.Enabled = true;
            buttonCancel.Enabled = true;
            groupBoxOutput.Enabled = true;
            groupBoxConvertOptions.Enabled = true;
            buttonInputBrowse.Enabled = true;
            buttonSearchFolder.Enabled = true;
        }
Ejemplo n.º 4
0
        internal void LoadMatroskaSubtitle(MatroskaSubtitleInfo matroskaSubtitleInfo, string fileName, bool batchMode)
        {
            bool isValid;
            bool isSsa = false;
            var matroska = new Matroska();
            SubtitleFormat format;

            if (matroskaSubtitleInfo.CodecId.ToUpper() == "S_VOBSUB")
            {
                if (batchMode)
                    return;
                LoadVobSubFromMatroska(matroskaSubtitleInfo, fileName);
                return;
            }
            if (matroskaSubtitleInfo.CodecId.ToUpper() == "S_HDMV/PGS")
            {
                if (batchMode)
                    return;
                LoadBluRaySubFromMatroska(matroskaSubtitleInfo, fileName);
                return;
            }

            ShowStatus(_language.ParsingMatroskaFile);
            Refresh();
            Cursor.Current = Cursors.WaitCursor;
            List<SubtitleSequence> sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid, MatroskaProgress);
            Cursor.Current = Cursors.Default;
            if (isValid)
            {
                MakeHistoryForUndo(_language.BeforeImportFromMatroskaFile);
                _subtitleListViewIndex = -1;
                if (!batchMode)
                    ResetSubtitle();
                _subtitle.Paragraphs.Clear();

                if (matroskaSubtitleInfo.CodecPrivate.ToLower().Contains("[script info]"))
                {
                    if (matroskaSubtitleInfo.CodecPrivate.ToLower().Contains("[V4 Styles]".ToLower()))
                        format = new SubStationAlpha();
                    else
                        format = new AdvancedSubStationAlpha();
                    isSsa = true;
                    if (_networkSession == null)
                    {
                        SubtitleListview1.ShowExtraColumn(Configuration.Settings.Language.General.Style);
                        SubtitleListview1.DisplayExtraFromExtra = true;
                    }
                }
                else
                {
                    format = new SubRip();
                    if (_networkSession == null && SubtitleListview1.IsExtraColumnVisible)
                        SubtitleListview1.HideExtraColumn();
                }

                comboBoxSubtitleFormats.SelectedIndexChanged -= ComboBoxSubtitleFormatsSelectedIndexChanged;
                SetCurrentFormat(format);
                comboBoxSubtitleFormats.SelectedIndexChanged += ComboBoxSubtitleFormatsSelectedIndexChanged;

                if (isSsa)
                {
                    foreach (Paragraph p in LoadMatroskaSSa(matroskaSubtitleInfo, fileName, format, sub).Paragraphs)
                    {
                        _subtitle.Paragraphs.Add(p);
                    }

                    if (!string.IsNullOrEmpty(matroskaSubtitleInfo.CodecPrivate))
                    {
                        bool eventsStarted = false;
                        bool fontsStarted = false;
                        bool graphicsStarted = false;
                        var header = new StringBuilder();
                        foreach (string line in matroskaSubtitleInfo.CodecPrivate.Replace(Environment.NewLine, "\n").Split('\n'))
                        {
                            if (!eventsStarted && !fontsStarted && !graphicsStarted)
                            {
                                header.AppendLine(line);
                            }
                            else if (line.Trim().ToLower().StartsWith("dialogue:"))
                            {
                                eventsStarted = true;
                                fontsStarted = false;
                                graphicsStarted = false;
                            }
                            else if (line.Trim().ToLower() == "[events]")
                            {
                                eventsStarted = true;
                                fontsStarted = false;
                                graphicsStarted = false;
                            }
                            else if (line.Trim().ToLower() == "[fonts]")
                            {
                                eventsStarted = false;
                                fontsStarted = true;
                                graphicsStarted = false;
                            }
                            else if (line.Trim().ToLower() == "[graphics]")
                            {
                                eventsStarted = false;
                                fontsStarted = false;
                                graphicsStarted = true;
                            }
                        }
                        _subtitle.Header = header.ToString();
                    }
                }
                else
                {
                    foreach (SubtitleSequence p in sub)
                    {
                        _subtitle.Paragraphs.Add(new Paragraph(p.Text, p.StartMilliseconds, p.EndMilliseconds));
                    }
                }

                SetEncoding(Encoding.UTF8);
                ShowStatus(_language.SubtitleImportedFromMatroskaFile);
                _subtitle.Renumber(1);
                _subtitle.WasLoadedWithFrameNumbers = false;
                if (fileName.ToLower().EndsWith(".mkv") || fileName.ToLower().EndsWith(".mks"))
                {
                    _fileName = fileName.Substring(0, fileName.Length - 4);
                    Text = Title + " - " + _fileName;
                }
                else
                {
                    Text = Title;
                }
                _fileDateTime = new DateTime();

                _converted = true;

                if (batchMode)
                    return;

                SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
                if (_subtitle.Paragraphs.Count > 0)
                    SubtitleListview1.SelectIndexAndEnsureVisible(0);

                ShowSource();
            }
        }
Ejemplo n.º 5
0
        internal Subtitle LoadMatroskaSubtitleForSync(MatroskaSubtitleInfo matroskaSubtitleInfo, string fileName)
        {
            Subtitle subtitle = new Subtitle();
            bool isValid;
            bool isSsa = false;
            var matroska = new Matroska();
            SubtitleFormat format;

            if (matroskaSubtitleInfo.CodecId.ToUpper() == "S_VOBSUB")
            {
                return subtitle;
            }
            if (matroskaSubtitleInfo.CodecId.ToUpper() == "S_HDMV/PGS")
            {
                return subtitle;
            }

            List<SubtitleSequence> sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid, MatroskaProgress);
            if (isValid)
            {
                 if (matroskaSubtitleInfo.CodecPrivate.ToLower().Contains("[script info]"))
                {
                    if (matroskaSubtitleInfo.CodecPrivate.ToLower().Contains("[V4 Styles]".ToLower()))
                        format = new SubStationAlpha();
                    else
                        format = new AdvancedSubStationAlpha();
                    isSsa = true;
                }
                else
                {
                    format = new SubRip();
                }

                if (isSsa)
                {
                    foreach (Paragraph p in LoadMatroskaSSa(matroskaSubtitleInfo, fileName, format, sub).Paragraphs)
                    {
                        subtitle.Paragraphs.Add(p);
                    }
                }
                else
                {
                    foreach (SubtitleSequence p in sub)
                    {
                        subtitle.Paragraphs.Add(new Paragraph(p.Text, p.StartMilliseconds, p.EndMilliseconds));
                    }
                }

            }
            return subtitle;
        }
Ejemplo n.º 6
0
        private void toolStripMenuItemPasteSpecial_Click(object sender, EventArgs e)
        {
            string text = Clipboard.GetText();
            var tmp = new Subtitle();
            var format = new SubRip();
            var list = new List<string>();
            foreach (string line in text.Replace(Environment.NewLine, "|").Split("|".ToCharArray(), StringSplitOptions.None))
                list.Add(line);
            format.LoadSubtitle(tmp, list, null);

            if (SubtitleListview1.SelectedItems.Count == 1 && text.Length > 0)
            {
                var form = new ColumnPaste(SubtitleListview1.IsAlternateTextColumnVisible && _subtitleAlternate != null && Configuration.Settings.General.AllowEditOfOriginalSubtitle, tmp.Paragraphs.Count == 0);
                if (form.ShowDialog(this) == DialogResult.OK)
                {
                    MakeHistoryForUndo(_language.BeforeColumnPaste);

                    if (tmp.Paragraphs.Count == 0)
                    {
                        foreach (string line in text.Replace(Environment.NewLine, "|").Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
                            tmp.Paragraphs.Add(new Paragraph(0, 0, line));
                    }

                    int index = FirstSelectedIndex;

                    if (!form.PasteOverwrite)
                    {
                        for (int i = 0; i < tmp.Paragraphs.Count; i++)
                        {
                            if (form.PasteAll)
                            {
                                for (int k = _subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    _subtitle.Paragraphs[k + 1] =  new Paragraph(_subtitle.Paragraphs[k]);
                                }
                                if (index + i < _subtitle.Paragraphs.Count)
                                    _subtitle.Paragraphs[index + i].Text = string.Empty;
                            }
                            else if (form.PasteTimeCodesOnly)
                            {
                                for (int k = _subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    _subtitle.Paragraphs[k + 1].StartTime.TotalMilliseconds = _subtitle.Paragraphs[k].StartTime.TotalMilliseconds;
                                    _subtitle.Paragraphs[k + 1].EndTime.TotalMilliseconds = _subtitle.Paragraphs[k].EndTime.TotalMilliseconds;
                                    _subtitle.Paragraphs[k + 1].StartFrame = _subtitle.Paragraphs[k].StartFrame;
                                    _subtitle.Paragraphs[k + 1].EndFrame = _subtitle.Paragraphs[k].EndFrame;
                                }
                            }
                            else if (form.PasteTextOnly)
                            {
                                for (int k = _subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    _subtitle.Paragraphs[k + 1].Text = _subtitle.Paragraphs[k].Text;
                                }
                            }
                            else if (form.PasteOriginalTextOnly)
                            {
                                for (int k = _subtitle.Paragraphs.Count - 2; k > index; k--)
                                {

                                    Paragraph original = Utilities.GetOriginalParagraph(index, _subtitle.Paragraphs[k], _subtitleAlternate.Paragraphs);
                                    Paragraph originalNext = Utilities.GetOriginalParagraph(index, _subtitle.Paragraphs[k + 1], _subtitleAlternate.Paragraphs);
                                    if (original != null)
                                    {
                                        originalNext.Text = original.Text;
                                    }
                                }
                                if (index + i < _subtitle.Paragraphs.Count)
                                {
                                    Paragraph original = Utilities.GetOriginalParagraph(index, _subtitle.Paragraphs[index + i], _subtitleAlternate.Paragraphs);
                                    if (original != null)
                                        original.Text = string.Empty;
                                }
                            }
                        }
                    }
                    if (form.PasteOverwrite)
                    {
                        for (int i = 0; i + index < _subtitle.Paragraphs.Count && i < tmp.Paragraphs.Count; i++)
                            _subtitle.Paragraphs[index + i].Text = tmp.Paragraphs[i].Text;
                    }
                    else
                    {
                        for (int i = 0; i + index < _subtitle.Paragraphs.Count && i < tmp.Paragraphs.Count; i++)
                            _subtitle.Paragraphs[index + i + 1].Text = tmp.Paragraphs[i].Text;
                    }

                    SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
                    SubtitleListview1.SelectIndexAndEnsureVisible(index, true);
                    RefreshSelectedParagraph();
                }
            }
        }
Ejemplo n.º 7
0
 private void SubtitleListview1KeyDown(object sender, KeyEventArgs e)
 {
     if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control) //Ctrl+c = Copy to clipboard
     {
         var tmp = new Subtitle();
         foreach (int i in SubtitleListview1.SelectedIndices)
         {
             Paragraph p = _subtitle.GetParagraphOrDefault(i);
             if (p != null)
                 tmp.Paragraphs.Add(new Paragraph(p));
         }
         if (tmp.Paragraphs.Count > 0)
         {
             Clipboard.SetText(tmp.ToText(new SubRip()));
         }
         e.SuppressKeyPress = true;
     }
     else if (e.KeyData == _mainListViewCopyText)
     {
         StringBuilder sb = new StringBuilder();
         foreach (int i in SubtitleListview1.SelectedIndices)
         {
             Paragraph p = _subtitle.GetParagraphOrDefault(i);
             if (p != null)
                 sb.AppendLine(p.Text + Environment.NewLine);
         }
         if (sb.Length > 0)
         {
             Clipboard.SetText(sb.ToString().Trim());
         }
         e.SuppressKeyPress = true;
     }
     else if (e.KeyData == _mainListViewAutoDuration)
     {
         MakeAutoDurationSelectedLines();
     }
     else if (e.KeyData == _mainListViewFocusWaveform)
     {
         if (audioVisualizer.CanFocus)
         {
             audioVisualizer.Focus();
             e.SuppressKeyPress = true;
         }
     }
     else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) //Ctrl+vPaste from clipboard
     {
         if (Clipboard.ContainsText())
         {
             string text = Clipboard.GetText();
             var tmp = new Subtitle();
             var format = new SubRip();
             var list = new List<string>();
             foreach (string line in text.Replace(Environment.NewLine, "|").Split("|".ToCharArray(), StringSplitOptions.None))
                 list.Add(line);
             format.LoadSubtitle(tmp, list, null);
             if (SubtitleListview1.SelectedItems.Count == 1 && tmp.Paragraphs.Count > 0)
             {
                 MakeHistoryForUndo(_language.BeforeInsertLine);
                 _makeHistoryPaused = true;
                 Paragraph lastParagraph = null;
                 Paragraph lastTempParagraph = null;
                 foreach (Paragraph p in tmp.Paragraphs)
                 {
                     InsertAfter();
                     textBoxListViewText.Text = p.Text;
                     if (lastParagraph != null && lastTempParagraph != null)
                     {
                         double millisecondsBetween = p.StartTime.TotalMilliseconds - lastTempParagraph.EndTime.TotalMilliseconds;
                         timeUpDownStartTime.TimeCode = new TimeCode(TimeSpan.FromMilliseconds(lastParagraph.EndTime.TotalMilliseconds + millisecondsBetween));
                     }
                     SetDurationInSeconds(p.Duration.TotalSeconds);
                     lastParagraph = _subtitle.GetParagraphOrDefault(_subtitleListViewIndex);
                     lastTempParagraph = p;
                 }
                 RestartHistory();
             }
             else if (SubtitleListview1.Items.Count == 0 && tmp.Paragraphs.Count > 0)
             { // insert into empty subtitle
                 MakeHistoryForUndo(_language.BeforeInsertLine);
                 foreach (Paragraph p in tmp.Paragraphs)
                 {
                     _subtitle.Paragraphs.Add(p);
                 }
                 SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
                 SubtitleListview1.SelectIndexAndEnsureVisible(0, true);
             }
             else if (list.Count > 1 && list.Count < 2000)
             {
                 MakeHistoryForUndo(_language.BeforeInsertLine);
                 _makeHistoryPaused = true;
                 foreach (string line in list)
                 {
                     if (line.Trim().Length > 0)
                     {
                         InsertAfter();
                         textBoxListViewText.Text = Utilities.AutoBreakLine(line);
                     }
                 }
                 RestartHistory();
             }
         }
         e.SuppressKeyPress = true;
     }
     else if (e.KeyCode == Keys.X && e.Modifiers == Keys.Control) //Ctrl+X = Cut to clipboard
     {
         var tmp = new Subtitle();
         foreach (int i in SubtitleListview1.SelectedIndices)
         {
             Paragraph p = _subtitle.GetParagraphOrDefault(i);
             if (p != null)
                 tmp.Paragraphs.Add(new Paragraph(p));
         }
         e.SuppressKeyPress = true;
         _cutText = tmp.ToText(new SubRip());
         ToolStripMenuItemDeleteClick(null, null);
     }
     else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control) //SelectAll
     {
         foreach (ListViewItem item in SubtitleListview1.Items)
             item.Selected = true;
         e.SuppressKeyPress = true;
     }
     else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control) //SelectFirstSelectedItemOnly
     {
         if (SubtitleListview1.SelectedItems.Count > 0)
         {
             bool skipFirst = true;
             foreach (ListViewItem item in SubtitleListview1.SelectedItems)
             {
                 if (skipFirst)
                     skipFirst = false;
                 else
                     item.Selected = false;
             }
             e.SuppressKeyPress = true;
         }
     }
     else if (e.KeyCode == Keys.Delete && SubtitleListview1.SelectedItems.Count > 0) //Delete
     {
         ToolStripMenuItemDeleteClick(null, null);
     }
     else if (e.KeyData == _mainInsertBefore)
     {
         InsertBefore();
         e.SuppressKeyPress = true;
     }
     else if (e.KeyData == _mainInsertAfter)
     {
         InsertAfter();
         e.SuppressKeyPress = true;
     }
     else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Home)
     {
         SubtitleListview1.FirstVisibleIndex = -1;
         SubtitleListview1.SelectIndexAndEnsureVisible(0, true);
         e.SuppressKeyPress = true;
     }
     else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.End)
     {
         SubtitleListview1.SelectIndexAndEnsureVisible(SubtitleListview1.Items.Count - 1, true);
         e.SuppressKeyPress = true;
     }
     else if (e.Modifiers == Keys.None && e.KeyCode == Keys.Enter)
     {
         SubtitleListview1_MouseDoubleClick(null, null);
     }
 }
Ejemplo n.º 8
0
        private Subtitle LoadMatroskaSubtitleForSync(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska)
        {
            var subtitle = new Subtitle();
            bool isSsa = false;

            if (matroskaSubtitleInfo.CodecId.Equals("S_VOBSUB", StringComparison.OrdinalIgnoreCase))
            {
                return subtitle;
            }

            if (matroskaSubtitleInfo.CodecId.Equals("S_HDMV/PGS", StringComparison.OrdinalIgnoreCase))
            {
                return subtitle;
            }

            SubtitleFormat format;
            if (matroskaSubtitleInfo.CodecPrivate.Contains("[script info]", StringComparison.OrdinalIgnoreCase))
            {
                if (matroskaSubtitleInfo.CodecPrivate.Contains("[V4 Styles]", StringComparison.OrdinalIgnoreCase))
                {
                    format = new SubStationAlpha();
                }
                else
                {
                    format = new AdvancedSubStationAlpha();
                }

                isSsa = true;
            }
            else
            {
                format = new SubRip();
            }

            var sub = matroska.GetSubtitle(matroskaSubtitleInfo.TrackNumber, this.MatroskaProgress);
            TaskbarList.SetProgressState(this.Handle, TaskbarButtonProgressFlags.NoProgress);
            if (isSsa)
            {
                foreach (var p in Utilities.LoadMatroskaSSA(matroskaSubtitleInfo, matroska.Path, format, sub).Paragraphs)
                {
                    subtitle.Paragraphs.Add(p);
                }
            }
            else
            {
                foreach (var p in sub)
                {
                    subtitle.Paragraphs.Add(new Paragraph(p.Text, p.Start, p.End));
                }
            }

            return subtitle;
        }
Ejemplo n.º 9
0
        private void toolStripMenuItemPasteSpecial_Click(object sender, EventArgs e)
        {
            string text = Clipboard.GetText();
            var tmp = new Subtitle();
            var format = new SubRip();
            var list = new List<string>(text.SplitToLines());
            format.LoadSubtitle(tmp, list, null);

            if (this.SubtitleListview1.SelectedItems.Count == 1 && text.Length > 0)
            {
                var form = new ColumnPaste(this.SubtitleListview1.IsAlternateTextColumnVisible && this._subtitleAlternate != null && Configuration.Settings.General.AllowEditOfOriginalSubtitle, tmp.Paragraphs.Count == 0);
                if (form.ShowDialog(this) == DialogResult.OK)
                {
                    this.MakeHistoryForUndo(this._language.BeforeColumnPaste);

                    if (tmp.Paragraphs.Count == 0)
                    {
                        foreach (var line in text.SplitToLines())
                        {
                            tmp.Paragraphs.Add(new Paragraph(0, 0, line));
                        }
                    }

                    int index = this.FirstSelectedIndex;

                    if (!form.PasteOverwrite)
                    {
                        for (int i = 0; i < tmp.Paragraphs.Count; i++)
                        {
                            if (form.PasteAll)
                            {
                                for (int k = this._subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    this._subtitle.Paragraphs[k + 1] = new Paragraph(this._subtitle.Paragraphs[k]);
                                }

                                if (index + i < this._subtitle.Paragraphs.Count)
                                {
                                    this._subtitle.Paragraphs[index + i].Text = string.Empty;
                                }
                            }
                            else if (form.PasteTimeCodesOnly)
                            {
                                for (int k = this._subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    this._subtitle.Paragraphs[k + 1].StartTime.TotalMilliseconds = this._subtitle.Paragraphs[k].StartTime.TotalMilliseconds;
                                    this._subtitle.Paragraphs[k + 1].EndTime.TotalMilliseconds = this._subtitle.Paragraphs[k].EndTime.TotalMilliseconds;
                                    this._subtitle.Paragraphs[k + 1].StartFrame = this._subtitle.Paragraphs[k].StartFrame;
                                    this._subtitle.Paragraphs[k + 1].EndFrame = this._subtitle.Paragraphs[k].EndFrame;
                                }
                            }
                            else if (form.PasteTextOnly)
                            {
                                for (int k = this._subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    this._subtitle.Paragraphs[k + 1].Text = this._subtitle.Paragraphs[k].Text;
                                }
                            }
                            else if (form.PasteOriginalTextOnly)
                            {
                                for (int k = this._subtitle.Paragraphs.Count - 2; k > index; k--)
                                {
                                    var original = Utilities.GetOriginalParagraph(index, this._subtitle.Paragraphs[k], this._subtitleAlternate.Paragraphs);
                                    var originalNext = Utilities.GetOriginalParagraph(index, this._subtitle.Paragraphs[k + 1], this._subtitleAlternate.Paragraphs);
                                    if (original != null)
                                    {
                                        originalNext.Text = original.Text;
                                    }
                                }

                                if (index + i < this._subtitle.Paragraphs.Count)
                                {
                                    var original = Utilities.GetOriginalParagraph(index, this._subtitle.Paragraphs[index + i], this._subtitleAlternate.Paragraphs);
                                    if (original != null)
                                    {
                                        original.Text = string.Empty;
                                    }
                                }
                            }
                        }
                    }

                    if (form.PasteOverwrite)
                    {
                        for (int i = 0; i + index < this._subtitle.Paragraphs.Count && i < tmp.Paragraphs.Count; i++)
                        {
                            this._subtitle.Paragraphs[index + i].Text = tmp.Paragraphs[i].Text;
                        }
                    }
                    else
                    {
                        for (int i = 0; i + index < this._subtitle.Paragraphs.Count && i < tmp.Paragraphs.Count; i++)
                        {
                            if (index + i + 1 < this._subtitle.Paragraphs.Count)
                            {
                                this._subtitle.Paragraphs[index + i + 1].Text = tmp.Paragraphs[i].Text;
                            }
                        }
                    }

                    this.SubtitleListview1.Fill(this._subtitle, this._subtitleAlternate);
                    this.SubtitleListview1.SelectIndexAndEnsureVisible(index, true);
                    this.RefreshSelectedParagraph();
                }

                form.Dispose();
            }
        }
Ejemplo n.º 10
0
        private void SubtitleListview1KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
            {
                // Ctrl+c = Copy to clipboard
                var tmp = new Subtitle();
                foreach (int i in this.SubtitleListview1.SelectedIndices)
                {
                    var p = this._subtitle.GetParagraphOrDefault(i);
                    if (p != null)
                    {
                        tmp.Paragraphs.Add(new Paragraph(p));
                    }
                }

                if (tmp.Paragraphs.Count > 0)
                {
                    Clipboard.SetText(tmp.ToText(new SubRip()));
                }

                e.SuppressKeyPress = true;
            }
            else if (e.KeyData == this._mainListViewCopyText)
            {
                var sb = new StringBuilder();
                foreach (int i in this.SubtitleListview1.SelectedIndices)
                {
                    var p = this._subtitle.GetParagraphOrDefault(i);
                    if (p != null)
                    {
                        sb.AppendLine(p.Text + Environment.NewLine);
                    }
                }

                if (sb.Length > 0)
                {
                    Clipboard.SetText(sb.ToString().Trim());
                }

                e.SuppressKeyPress = true;
            }
            else if (e.KeyData == this._mainListViewAutoDuration)
            {
                this.MakeAutoDurationSelectedLines();
            }
            else if (e.KeyData == this._mainListViewFocusWaveform)
            {
                if (this.audioVisualizer.CanFocus)
                {
                    this.audioVisualizer.Focus();
                    e.SuppressKeyPress = true;
                }
            }
            else if (e.KeyData == this._mainListViewGoToNextError)
            {
                this.GoToNextSynaxError();
                e.SuppressKeyPress = true;
            }
            else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
            {
                // Ctrl+vPaste from clipboard
                if (Clipboard.ContainsText())
                {
                    var text = Clipboard.GetText();
                    var tmp = new Subtitle();
                    var format = new SubRip();
                    var list = new List<string>(text.SplitToLines());
                    format.LoadSubtitle(tmp, list, null);
                    if (this.SubtitleListview1.SelectedItems.Count == 1 && tmp.Paragraphs.Count > 0)
                    {
                        this.MakeHistoryForUndo(this._language.BeforeInsertLine);
                        this._makeHistoryPaused = true;
                        Paragraph lastParagraph = null;
                        Paragraph lastTempParagraph = null;
                        foreach (var p in tmp.Paragraphs)
                        {
                            this.InsertAfter();
                            this.textBoxListViewText.Text = p.Text;
                            if (lastParagraph != null)
                            {
                                double millisecondsBetween = p.StartTime.TotalMilliseconds - lastTempParagraph.EndTime.TotalMilliseconds;
                                this.timeUpDownStartTime.TimeCode = new TimeCode(lastParagraph.EndTime.TotalMilliseconds + millisecondsBetween);
                            }

                            this.SetDurationInSeconds(p.Duration.TotalSeconds);
                            lastParagraph = this._subtitle.GetParagraphOrDefault(this._subtitleListViewIndex);
                            lastTempParagraph = p;
                        }

                        this.RestartHistory();
                    }
                    else if (this.SubtitleListview1.Items.Count == 0 && tmp.Paragraphs.Count > 0)
                    { // insert into empty subtitle
                        this.MakeHistoryForUndo(this._language.BeforeInsertLine);
                        foreach (var p in tmp.Paragraphs)
                        {
                            this._subtitle.Paragraphs.Add(p);
                        }

                        this.SubtitleListview1.Fill(this._subtitle, this._subtitleAlternate);
                        this.SubtitleListview1.SelectIndexAndEnsureVisible(0, true);
                    }
                    else if (this.SubtitleListview1.Items.Count > 1 && tmp.Paragraphs.Count > 0)
                    {
                        // multiple lines selected - first delete, then insert
                        int firstIndex = this.FirstSelectedIndex;
                        if (firstIndex >= 0)
                        {
                            this.MakeHistoryForUndo(this._language.BeforeInsertLine);
                            this._makeHistoryPaused = true;

                            this.DeleteSelectedLines();
                            foreach (var p in tmp.Paragraphs)
                            {
                                this._subtitle.Paragraphs.Insert(firstIndex, p);
                                firstIndex++;
                            }

                            this.SubtitleListview1.Fill(this._subtitle, this._subtitleAlternate);
                            this.SubtitleListview1.SelectIndexAndEnsureVisible(0, true);

                            this.RestartHistory();
                        }
                    }
                    else if (list.Count >= 1 && list.Count < 4)
                    {
                        // less than 4 lines of text, just insert into first selected
                        this.textBoxListViewText.Text = text.Trim();
                    }
                    else if (list.Count > 1 && list.Count < 2000)
                    {
                        this.MakeHistoryForUndo(this._language.BeforeInsertLine);
                        this._makeHistoryPaused = true;
                        foreach (var line in list)
                        {
                            if (!string.IsNullOrWhiteSpace(line))
                            {
                                this.InsertAfter();
                                this.textBoxListViewText.Text = Utilities.AutoBreakLine(line);
                            }
                        }

                        this.RestartHistory();
                    }
                }

                e.SuppressKeyPress = true;
            }
            else if (e.KeyCode == Keys.X && e.Modifiers == Keys.Control)
            {
                // Ctrl+X = Cut to clipboard
                var tmp = new Subtitle();
                foreach (int i in this.SubtitleListview1.SelectedIndices)
                {
                    var p = this._subtitle.GetParagraphOrDefault(i);
                    if (p != null)
                    {
                        tmp.Paragraphs.Add(new Paragraph(p));
                    }
                }

                e.SuppressKeyPress = true;
                this._cutText = tmp.ToText(new SubRip());
                this.ToolStripMenuItemDeleteClick(null, null);
            }
            else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
            {
                // SelectAll
                foreach (ListViewItem item in this.SubtitleListview1.Items)
                {
                    item.Selected = true;
                }

                e.SuppressKeyPress = true;
            }
            else if (e.KeyCode == Keys.D && e.Modifiers == Keys.Control)
            {
                // SelectFirstSelectedItemOnly
                if (this.SubtitleListview1.SelectedItems.Count > 0)
                {
                    bool skipFirst = true;
                    foreach (ListViewItem item in this.SubtitleListview1.SelectedItems)
                    {
                        if (skipFirst)
                        {
                            skipFirst = false;
                        }
                        else
                        {
                            item.Selected = false;
                        }
                    }

                    e.SuppressKeyPress = true;
                }
            }
            else if (e.KeyCode == Keys.Delete && this.SubtitleListview1.SelectedItems.Count > 0)
            {
                // Delete
                this.ToolStripMenuItemDeleteClick(null, null);
            }
            else if (e.KeyData == this._mainInsertBefore)
            {
                this.InsertBefore();
                e.SuppressKeyPress = true;
            }
            else if (e.KeyData == this._mainInsertAfter)
            {
                this.InsertAfter();
                e.SuppressKeyPress = true;
            }
            else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Home)
            {
                this.SubtitleListview1.FirstVisibleIndex = -1;
                this.SubtitleListview1.SelectIndexAndEnsureVisible(0, true);
                e.SuppressKeyPress = true;
            }
            else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.End)
            {
                this.SubtitleListview1.SelectIndexAndEnsureVisible(this.SubtitleListview1.Items.Count - 1, true);
                e.SuppressKeyPress = true;
            }
            else if (e.Modifiers == Keys.None && e.KeyCode == Keys.Enter)
            {
                this.SubtitleListview1_MouseDoubleClick(null, null);
            }
        }
        /// <summary>
        /// The sort and load.
        /// </summary>
        private void SortAndLoad()
        {
            this.JoinedFormat = new SubRip(); // default subtitle format
            string header = null;
            SubtitleFormat lastFormat = null;
            var subtitles = new List<Subtitle>();
            for (int k = 0; k < this._fileNamesToJoin.Count; k++)
            {
                string fileName = this._fileNamesToJoin[k];
                try
                {
                    var sub = new Subtitle();
                    Encoding encoding;
                    var format = sub.LoadSubtitle(fileName, out encoding, null);
                    if (format == null)
                    {
                        for (int j = k; j < this._fileNamesToJoin.Count; j++)
                        {
                            this._fileNamesToJoin.RemoveAt(j);
                        }

                        MessageBox.Show("Unkown subtitle format: " + fileName);
                        return;
                    }

                    if (sub.Header != null)
                    {
                        header = sub.Header;
                    }

                    if (lastFormat == null || lastFormat.FriendlyName == format.FriendlyName)
                    {
                        lastFormat = format;
                    }
                    else
                    {
                        lastFormat = new SubRip(); // default subtitle format
                    }

                    subtitles.Add(sub);
                }
                catch (Exception exception)
                {
                    for (int j = k; j < this._fileNamesToJoin.Count; j++)
                    {
                        this._fileNamesToJoin.RemoveAt(j);
                    }

                    MessageBox.Show(exception.Message);
                    return;
                }
            }

            this.JoinedFormat = lastFormat;

            for (int outer = 0; outer < subtitles.Count; outer++)
            {
                for (int inner = 1; inner < subtitles.Count; inner++)
                {
                    var a = subtitles[inner - 1];
                    var b = subtitles[inner];
                    if (a.Paragraphs.Count > 0 && b.Paragraphs.Count > 0 && a.Paragraphs[0].StartTime.TotalMilliseconds > b.Paragraphs[0].StartTime.TotalMilliseconds)
                    {
                        string t1 = this._fileNamesToJoin[inner - 1];
                        this._fileNamesToJoin[inner - 1] = this._fileNamesToJoin[inner];
                        this._fileNamesToJoin[inner] = t1;

                        var t2 = subtitles[inner - 1];
                        subtitles[inner - 1] = subtitles[inner];
                        subtitles[inner] = t2;
                    }
                }
            }

            this.listViewParts.BeginUpdate();
            this.listViewParts.Items.Clear();
            int i = 0;
            foreach (string fileName in this._fileNamesToJoin)
            {
                Subtitle sub = subtitles[i];
                var lvi = new ListViewItem(string.Format("{0:#,###,###}", sub.Paragraphs.Count));
                if (sub.Paragraphs.Count > 0)
                {
                    lvi.SubItems.Add(sub.Paragraphs[0].StartTime.ToString());
                    lvi.SubItems.Add(sub.Paragraphs[sub.Paragraphs.Count - 1].StartTime.ToString());
                }
                else
                {
                    lvi.SubItems.Add("-");
                    lvi.SubItems.Add("-");
                }

                lvi.SubItems.Add(fileName);
                this.listViewParts.Items.Add(lvi);
                i++;
            }

            this.listViewParts.EndUpdate();

            this.JoinedSubtitle = new Subtitle();
            if (this.JoinedFormat.FriendlyName != SubRip.NameOfFormat)
            {
                this.JoinedSubtitle.Header = header;
            }

            foreach (Subtitle sub in subtitles)
            {
                foreach (Paragraph p in sub.Paragraphs)
                {
                    this.JoinedSubtitle.Paragraphs.Add(p);
                }
            }

            this.JoinedSubtitle.Renumber();
            this.labelTotalLines.Text = string.Format(Configuration.Settings.Language.JoinSubtitles.TotalNumberOfLinesX, this.JoinedSubtitle.Paragraphs.Count);
        }
        public void SrtNoLineNumbers()
        {
            var target = new SubRip();
            var subtitle = new Subtitle();
            const string text = @"00:00:03,000 --> 00:00:08,000
Line1.

00:00:08,000 --> 00:00:09,920
Line 2.";
            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string actual = subtitle.Paragraphs.Count.ToString(CultureInfo.InvariantCulture);
            const string expected = "2";
            Assert.AreEqual(expected, actual);
        }
        public void SrtThreeLiner()
        {
            var target = new SubRip();
            var subtitle = new Subtitle();
            const string text = @"2
00:00:04.501 --> 00:00:08.500
Line 1
Line 2
Line 3";
            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string actual = subtitle.Paragraphs[0].Text;
            string expected = "Line 1" + Environment.NewLine + "Line 2" + Environment.NewLine + "Line 3";
            Assert.AreEqual(expected, actual);
        }
        public void SrtDotsInsteadOfCommas()
        {
            var target = new SubRip();
            var subtitle = new Subtitle();
            const string text = @"2
00:00:04.501 --> 00:00:08.500
Dots instead of commas";
            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string actual = subtitle.Paragraphs[0].Text;
            const string expected = "Dots instead of commas";
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 15
0
        internal static SubtitleFormat LoadMatroskaTextSubtitle(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska, List<MatroskaSubtitle> sub, Subtitle subtitle)
        {
            if (subtitle == null)
                throw new ArgumentNullException("subtitle");
            subtitle.Paragraphs.Clear();

            var isSsa = false;
            SubtitleFormat format = new SubRip();
            if (matroskaSubtitleInfo.CodecPrivate.Contains("[script info]", StringComparison.OrdinalIgnoreCase))
            {
                if (matroskaSubtitleInfo.CodecPrivate.Contains("[V4 Styles]", StringComparison.OrdinalIgnoreCase))
                    format = new SubStationAlpha();
                else
                    format = new AdvancedSubStationAlpha();
                isSsa = true;
            }

            if (isSsa)
            {
                foreach (var p in LoadMatroskaSSA(matroskaSubtitleInfo, matroska.Path, format, sub).Paragraphs)
                {
                    subtitle.Paragraphs.Add(p);
                }

                if (!string.IsNullOrEmpty(matroskaSubtitleInfo.CodecPrivate))
                {
                    bool eventsStarted = false;
                    bool fontsStarted = false;
                    bool graphicsStarted = false;
                    var header = new StringBuilder();
                    foreach (string line in matroskaSubtitleInfo.CodecPrivate.Replace(Environment.NewLine, "\n").Split('\n'))
                    {
                        if (!eventsStarted && !fontsStarted && !graphicsStarted)
                        {
                            header.AppendLine(line);
                        }

                        if (line.TrimStart().StartsWith("dialog:", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = true;
                            fontsStarted = false;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[events]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = true;
                            fontsStarted = false;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[fonts]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = false;
                            fontsStarted = true;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[graphics]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = false;
                            fontsStarted = false;
                            graphicsStarted = true;
                        }
                    }
                    subtitle.Header = header.ToString().TrimEnd();
                    if (!subtitle.Header.Contains("[events]", StringComparison.OrdinalIgnoreCase))
                    {
                        subtitle.Header += Environment.NewLine + Environment.NewLine + "[Events]" + Environment.NewLine;
                    }
                }
            }
            else
            {
                foreach (var p in sub)
                {
                    subtitle.Paragraphs.Add(new Paragraph(p.Text, p.Start, p.End));
                }
            }
            subtitle.Renumber();
            return format;
        }
Ejemplo n.º 16
0
        public void SrtKeepBlankLines()
        {
            var target = new SubRip();
            var subtitle = new Subtitle();
            string subText = "Now go on!" + Environment.NewLine + Environment.NewLine + "Now go on!";
            subtitle.Paragraphs.Add(new Paragraph(subText, 0, 999));
            var text = target.ToText(subtitle, "title");

            var outSubtitle = new Subtitle();
            target.LoadSubtitle(outSubtitle, text.SplitToLines().ToList(), null);
            Assert.IsTrue(outSubtitle.Paragraphs[0].Text == subText);
        }