コード例 #1
0
 public bool ShowDialogOk()
 {
     using (var saveOptions = new EbuSaveOptions())
     {
         saveOptions.Initialize(_header, _justificationCode, _fileName, _subtitle);
         return saveOptions.ShowDialog() == DialogResult.OK;
     }
 }
コード例 #2
0
 public bool ShowDialogOk()
 {
     using (var saveOptions = new EbuSaveOptions())
     {
         saveOptions.Initialize(_header, _justificationCode, _fileName, _subtitle);
         if (saveOptions.ShowDialog() == DialogResult.OK)
         {
             _justificationCode = saveOptions.JustificationCode;
             return true;
         }
         return false;
     }
 }
コード例 #3
0
ファイル: Main.cs プロジェクト: m1croN/subtitleedit
 private void toolStripMenuItemEbuProperties_Click(object sender, EventArgs e)
 {
     using (var properties = new EbuSaveOptions())
     {
         if (_subtitle != null && _subtitle.Header != null && (_subtitle.Header.Contains("STL2") || _subtitle.Header.Contains("STL3")))
         {
             var header = Ebu.ReadHeader(Encoding.UTF8.GetBytes(_subtitle.Header));
             properties.Initialize(header, 0, null, _subtitle);
         }
         else
         {
             var header = new Ebu.EbuGeneralSubtitleInformation();
             if (!string.IsNullOrEmpty(_fileName) && new Ebu().IsMine(null, _fileName))
                 properties.Initialize(header, 0, _fileName, _subtitle);
             else
                 properties.Initialize(header, 0, null, _subtitle);
         }
         properties.ShowDialog(this);
     }
 }
コード例 #4
0
 private void ShowEbuSettings()
 {
     using (var properties = new EbuSaveOptions())
     {
         properties.Initialize(_ebuGeneralInformation, 0, null, null);
         properties.ShowDialog(this);
     }
 }
コード例 #5
0
        /// <summary>
        /// The save.
        /// </summary>
        /// <param name="fileName">
        /// The file name.
        /// </param>
        /// <param name="subtitle">
        /// The subtitle.
        /// </param>
        /// <param name="batchMode">
        /// The batch mode.
        /// </param>
        public static void Save(string fileName, Subtitle subtitle, bool batchMode)
        {
            EbuGeneralSubtitleInformation header = new EbuGeneralSubtitleInformation();
            using (EbuSaveOptions saveOptions = new EbuSaveOptions())
            {
                if (subtitle.Header != null && subtitle.Header.Length > 1024 && (subtitle.Header.Contains("STL24") || subtitle.Header.Contains("STL25") || subtitle.Header.Contains("STL29") || subtitle.Header.Contains("STL30")))
                {
                    header = ReadHeader(Encoding.UTF8.GetBytes(subtitle.Header));
                    saveOptions.Initialize(header, 0, null, subtitle);
                }
                else
                {
                    saveOptions.Initialize(header, 0, fileName, subtitle);
                }

                if (!batchMode && saveOptions.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
                {
                    header.TotalNumberOfSubtitles = subtitle.Paragraphs.Count.ToString("D5"); // seems to be 1 higher than actual number of subtitles
                    header.TotalNumberOfTextAndTimingInformationBlocks = header.TotalNumberOfSubtitles;

                    string today = string.Format("{0:yyMMdd}", DateTime.Now);
                    if (today.Length == 6)
                    {
                        header.CreationDate = today;
                        header.RevisionDate = today;
                    }

                    Paragraph firstParagraph = subtitle.GetParagraphOrDefault(0);
                    if (firstParagraph != null)
                    {
                        TimeCode tc = firstParagraph.StartTime;
                        string firstTimeCode = string.Format("{0:00}{1:00}{2:00}{3:00}", tc.Hours, tc.Minutes, tc.Seconds, EbuTextTimingInformation.GetFrameFromMilliseconds(tc.Milliseconds, header.FrameRate));
                        if (firstTimeCode.Length == 8)
                        {
                            header.TimeCodeFirstInCue = firstTimeCode;
                        }
                    }

                    byte[] buffer = Encoding.Default.GetBytes(header.ToString());
                    fs.Write(buffer, 0, buffer.Length);

                    int subtitleNumber = 0;
                    foreach (Paragraph p in subtitle.Paragraphs)
                    {
                        EbuTextTimingInformation tti = new EbuTextTimingInformation();

                        int rows;
                        if (!int.TryParse(header.MaximumNumberOfDisplayableRows, out rows))
                        {
                            rows = 23;
                        }

                        if (header.DisplayStandardCode == "1" || header.DisplayStandardCode == "2")
                        {
                            // teletext
                            rows = 23;
                        }
                        else if (header.DisplayStandardCode == "0" && header.MaximumNumberOfDisplayableRows == "02")
                        {
                            // open subtitling
                            rows = 15;
                        }

                        if (p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal))
                        {
                            tti.VerticalPosition = 1; // top (vertical)
                        }
                        else if (p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal))
                        {
                            tti.VerticalPosition = (byte)(rows / 2); // middle (vertical)
                        }
                        else
                        {
                            int startRow = (rows - 1) - Utilities.CountTagInText(p.Text, Environment.NewLine) * 2;
                            if (startRow < 0)
                            {
                                startRow = 0;
                            }

                            tti.VerticalPosition = (byte)startRow; // bottom (vertical)
                        }

                        tti.JustificationCode = saveOptions.JustificationCode;
                        if (p.Text.StartsWith("{\\an1}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an7}", StringComparison.Ordinal))
                        {
                            tti.JustificationCode = 1; // 01h=left-justified text
                        }
                        else if (p.Text.StartsWith("{\\an3}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal))
                        {
                            tti.JustificationCode = 3; // 03h=right-justified
                        }
                        else
                        {
                            // If it's not left- or right-justified, it's centred.
                            tti.JustificationCode = 2; // 02h=centred text
                        }

                        tti.SubtitleNumber = (ushort)subtitleNumber;
                        tti.TextField = p.Text;
                        int startTag = tti.TextField.IndexOf('}');
                        if (tti.TextField.StartsWith("{\\", StringComparison.Ordinal) && startTag > 0 && startTag < 10)
                        {
                            tti.TextField = tti.TextField.Remove(0, startTag + 1);
                        }

                        tti.TimeCodeInHours = p.StartTime.Hours;
                        tti.TimeCodeInMinutes = p.StartTime.Minutes;
                        tti.TimeCodeInSeconds = p.StartTime.Seconds;
                        tti.TimeCodeInMilliseconds = p.StartTime.Milliseconds;
                        tti.TimeCodeOutHours = p.EndTime.Hours;
                        tti.TimeCodeOutMinutes = p.EndTime.Minutes;
                        tti.TimeCodeOutSeconds = p.EndTime.Seconds;
                        tti.TimeCodeOutMilliseconds = p.EndTime.Milliseconds;
                        buffer = tti.GetBytes(header);
                        fs.Write(buffer, 0, buffer.Length);
                        subtitleNumber++;
                    }
                }
            }
        }