[gnome-subtitles] Added initial support for the FAB Subtitler subtitle format (#634230)
- From: Pedro Daniel da Rocha Melo e Castro <pcastro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-subtitles] Added initial support for the FAB Subtitler subtitle format (#634230)
- Date: Sun, 21 Nov 2010 16:55:33 +0000 (UTC)
commit 5d035a893173fafd19f6f119da095ff9e387bb9c
Author: Pedro Castro <mail pedrocastro org>
Date: Wed Nov 17 21:33:42 2010 +0000
Added initial support for the FAB Subtitler subtitle format (#634230)
gnome-subtitles.mdp | 2 +-
src/Glade/MainWindow.glade | 20 +++---
src/SubLib/Core/Domain/Enumerations.cs | 5 +-
.../IO/SubtitleFormats/BuiltInSubtitleFormats.cs | 5 +-
.../SubtitleFormats/SubtitleFormatFABSubtitler.cs | 64 ++++++++++++++++++++
5 files changed, 82 insertions(+), 14 deletions(-)
---
diff --git a/gnome-subtitles.mdp b/gnome-subtitles.mdp
index f05c2ff..cbade67 100644
--- a/gnome-subtitles.mdp
+++ b/gnome-subtitles.mdp
@@ -250,7 +250,7 @@
<File subtype="Code" buildaction="Compile" name="src/GnomeSubtitles/Ui/Component/NewlineTypeComboBox.cs" />
<File subtype="Code" buildaction="Compile" name="src/GnomeSubtitles/Ui/VideoPreview/SubtitleTracker.cs" />
<File subtype="Code" buildaction="Compile" name="src/GnomeSubtitles/Core/Backup.cs" />
- <File subtype="Code" buildaction="Compile" name="src/SubLib/IO/SubtitleFormats/SubtitleFormatFADSubtitler.cs" />
+ <File subtype="Code" buildaction="Compile" name="src/SubLib/IO/SubtitleFormats/SubtitleFormatFABSubtitler.cs" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
diff --git a/src/Glade/MainWindow.glade b/src/Glade/MainWindow.glade
index 0484fa8..9bffa7a 100644
--- a/src/Glade/MainWindow.glade
+++ b/src/Glade/MainWindow.glade
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy toplevel-contextual -->
@@ -248,8 +248,8 @@
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="OnEditRedo"/>
- <accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<accelerator key="Z" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
+ <accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</widget>
</child>
<child>
@@ -532,8 +532,8 @@
<property name="label" translatable="yes">Find Ne_xt</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnSearchFindNext"/>
- <accelerator key="F3" signal="activate"/>
<accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="F3" signal="activate"/>
</widget>
</child>
<child>
@@ -543,8 +543,8 @@
<property name="label" translatable="yes">Find Pre_vious</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnSearchFindPrevious"/>
- <accelerator key="F3" signal="activate" modifiers="GDK_SHIFT_MASK"/>
<accelerator key="g" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
+ <accelerator key="F3" signal="activate" modifiers="GDK_SHIFT_MASK"/>
</widget>
</child>
<child>
@@ -803,8 +803,8 @@
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="OnVideoPlayPause"/>
- <accelerator key="F5" signal="activate"/>
<accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="F5" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="videoPlayPauseImage">
<property name="visible">True</property>
@@ -831,8 +831,8 @@
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="OnVideoRewind"/>
- <accelerator key="F6" signal="activate"/>
<accelerator key="k" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="F6" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="videoRewindImage">
<property name="visible">True</property>
@@ -850,8 +850,8 @@
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="OnVideoForward"/>
- <accelerator key="F7" signal="activate"/>
<accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="F7" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="videoForwardImage">
<property name="visible">True</property>
@@ -891,8 +891,8 @@
<property name="label" translatable="yes">Seek _to Selection</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnVideoSeekToSelection"/>
- <accelerator key="F4" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
<accelerator key="r" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
+ <accelerator key="F4" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</widget>
</child>
<child>
@@ -902,8 +902,8 @@
<property name="label" translatable="yes">Select Nearest Subtitle</property>
<property name="use_underline">True</property>
<signal name="activate" handler="OnVideoSelectNearestSubtitle"/>
- <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<accelerator key="F4" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</widget>
</child>
<child>
@@ -912,8 +912,8 @@
<property name="label" translatable="yes">Auto Select Subtitle</property>
<property name="use_underline">True</property>
<signal name="toggled" handler="OnVideoAutoSelectSubtitles"/>
- <accelerator key="j" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<accelerator key="F3" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <accelerator key="j" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</widget>
</child>
<child>
diff --git a/src/SubLib/Core/Domain/Enumerations.cs b/src/SubLib/Core/Domain/Enumerations.cs
index 751c158..74bb0a2 100644
--- a/src/SubLib/Core/Domain/Enumerations.cs
+++ b/src/SubLib/Core/Domain/Enumerations.cs
@@ -98,7 +98,10 @@ public enum SubtitleType {
KaraokeLyricsLRC,
/// <summary>Adobe Encore DVD subtitle type.</summary>
- AdobeEncoreDVD
+ AdobeEncoreDVD,
+
+ /// <summary>FAB Subtitler subtitle type.</summary>
+ FABSubtitler
};
/// <summary>
diff --git a/src/SubLib/IO/SubtitleFormats/BuiltInSubtitleFormats.cs b/src/SubLib/IO/SubtitleFormats/BuiltInSubtitleFormats.cs
index 7c0e140..1541a36 100644
--- a/src/SubLib/IO/SubtitleFormats/BuiltInSubtitleFormats.cs
+++ b/src/SubLib/IO/SubtitleFormats/BuiltInSubtitleFormats.cs
@@ -1,6 +1,6 @@
/*
* This file is part of SubLib.
- * Copyright (C) 2005-2008 Pedro Castro
+ * Copyright (C) 2005-2010 Pedro Castro
*
* SubLib is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -49,7 +49,8 @@ internal static class BuiltInSubtitleFormats {
new SubtitleFormatPowerDivX(),
new SubtitleFormatKaraokeLyricsVKT(),
new SubtitleFormatKaraokeLyricsLRC(),
- new SubtitleFormatAdobeEncoreDVD()
+ new SubtitleFormatAdobeEncoreDVD(),
+ new SubtitleFormatFABSubtitler()
};
internal static SubtitleFormat[] SubtitleFormats {
diff --git a/src/SubLib/IO/SubtitleFormats/SubtitleFormatFABSubtitler.cs b/src/SubLib/IO/SubtitleFormats/SubtitleFormatFABSubtitler.cs
new file mode 100644
index 0000000..938b4c9
--- /dev/null
+++ b/src/SubLib/IO/SubtitleFormats/SubtitleFormatFABSubtitler.cs
@@ -0,0 +1,64 @@
+/*
+ * This file is part of SubLib.
+ * Copyright (C) 2010 Pedro Castro
+ *
+ * SubLib is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * SubLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+using SubLib.Core.Domain;
+using SubLib.IO.Input;
+using System;
+using System.Text.RegularExpressions;
+
+namespace SubLib.IO.SubtitleFormats {
+
+internal class SubtitleFormatFABSubtitler : SubtitleFormat {
+
+ internal SubtitleFormatFABSubtitler () {
+ name = "FAB Subtitler";
+ type = SubtitleType.FABSubtitler;
+ mode = SubtitleMode.Times;
+ extensions = new string[] { "txt" };
+ lineBreak = "\n";
+
+ format = @"\d\d:\d\d:\d\d:\d\d\s+\d\d:\d\d:\d\d:\d\d";
+
+ subtitleIn = @"(?<StartHours>\d+)\s*:\s*(?<StartMinutes>\d+)\s*:\s*(?<StartSeconds>\d+)\s*:\s*(?<StartMillisecondsAsFrames>\d+)\s+(?<EndHours>\d+)\s*:\s*(?<EndMinutes>\d+)\s*:\s*(?<EndSeconds>\d+)\s*:\s*(?<EndMillisecondsAsFrames>\d+).*(\n(?<Text>(.*(?!\n\d+(\s*:\s*\d+){2})\n?)*.))?";
+
+ subtitleOut = null;
+ }
+
+ internal override void GlobalInputGetProperties (string text, ParsingProperties properties) {
+ properties.OriginalFrameRate = 25; //Framerate has to be PAL or NTSC, defaulting to PAL
+ }
+
+ internal override string GetDynamicSubtitleOut (SubtitleProperties properties) {
+ bool isFrameRatePAL = IsFrameRatePAL(properties.CurrentFrameRate);
+ string suf = GetFrameRateSuffix(isFrameRatePAL);
+ return "<<StartHours>>:<<StartMinutes>>:<<StartSeconds>>:<<StartMillisecondsAsFrames" + suf + ">> <<EndHours>>:<<EndMinutes>>:<<EndSeconds>>:<<EndMillisecondsAsFrames" + suf + ">>\n<<Text>>\n";
+ }
+
+ /// <summary>Returns whether the frame rate is closer to PAL (25) or to NTSC (29.97).</summary>
+ private bool IsFrameRatePAL (float frameRate) {
+ return (Math.Abs(frameRate - 25) <= Math.Abs(frameRate - 29.97));
+ }
+
+ private string GetFrameRateSuffix (bool isFrameRatePAL) {
+ return (isFrameRatePAL ? "PAL" : "NTSC");
+ }
+
+}
+
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]