mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 22:42:38 +01:00
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@386 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
b821058b74
commit
47cca73209
@ -3,7 +3,7 @@ Subtitle Edit Changelog
|
||||
|
||||
3.2 (net yet released)
|
||||
* NEW:
|
||||
* Subtitle formats: D-Cinema, Cavena890
|
||||
* Subtitle formats: D-Cinema, Cavena890, Timed Text 1.0
|
||||
* Most important shortcuts in Options -> Settings
|
||||
* Command line conversion between subtitle formats (example: subtitleedit /convert *.srt microdvd)
|
||||
* Subtitle preview font size (below video player) is now available in Options -> Settings
|
||||
@ -12,8 +12,9 @@ Subtitle Edit Changelog
|
||||
* Transscript importer...???
|
||||
* Plug-ins...???
|
||||
* IMPROVED:
|
||||
* OCR unknown words highlighting now works better
|
||||
* Merge short lines can now also merge lines ending with ".", "?", or "!" (optional)
|
||||
* Can now read Adobe Encore files starting with line numbers
|
||||
* Merge short lines can now also merge lines ending with ".", "?", or "!"
|
||||
* FIXED:
|
||||
* Adjust all times did not work for MicroDvd
|
||||
* Remove empty white spaces from Google translate
|
||||
|
12
src/Forms/Main.Designer.cs
generated
12
src/Forms/Main.Designer.cs
generated
@ -340,6 +340,7 @@
|
||||
this.contextMenuStripEmpty = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.insertLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.imageListPlayRate = new System.Windows.Forms.ImageList(this.components);
|
||||
this.transcriptImporterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.toolStrip1.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
@ -1336,7 +1337,8 @@
|
||||
this.toolStripMenuItemAdjustAllTimes,
|
||||
this.visualSyncToolStripMenuItem,
|
||||
this.toolStripMenuItemPointSync,
|
||||
this.toolStripMenuItemChangeFrameRate2});
|
||||
this.toolStripMenuItemChangeFrameRate2,
|
||||
this.transcriptImporterToolStripMenuItem});
|
||||
this.toolStripMenuItemSyncronization.Name = "toolStripMenuItemSyncronization";
|
||||
this.toolStripMenuItemSyncronization.Size = new System.Drawing.Size(97, 20);
|
||||
this.toolStripMenuItemSyncronization.Text = "Syncronization";
|
||||
@ -3378,6 +3380,13 @@
|
||||
this.imageListPlayRate.Images.SetKeyName(0, "FastForward.png");
|
||||
this.imageListPlayRate.Images.SetKeyName(1, "FastForwardHighLight.png");
|
||||
//
|
||||
// transcriptImporterToolStripMenuItem
|
||||
//
|
||||
this.transcriptImporterToolStripMenuItem.Name = "transcriptImporterToolStripMenuItem";
|
||||
this.transcriptImporterToolStripMenuItem.Size = new System.Drawing.Size(336, 22);
|
||||
this.transcriptImporterToolStripMenuItem.Text = "Transcript importer...";
|
||||
this.transcriptImporterToolStripMenuItem.Click += new System.EventHandler(this.transcriptImporterToolStripMenuItem_Click);
|
||||
//
|
||||
// Main
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@ -3763,6 +3772,7 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemCopySourceText;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator21;
|
||||
private System.Windows.Forms.ToolStripMenuItem editSelectAllToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem transcriptImporterToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,6 +78,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
NetworkChat _networkChat = null;
|
||||
|
||||
ShowEarlierLater _showEarlierOrLater = null;
|
||||
TranscriptImporter _transcriptImporter = null;
|
||||
|
||||
bool _isVideoControlsUnDocked = false;
|
||||
VideoPlayerUnDocked _videoPlayerUnDocked = null;
|
||||
@ -6483,12 +6484,20 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
if (!string.IsNullOrEmpty(importText.VideoFileName))
|
||||
OpenVideo(importText.VideoFileName);
|
||||
|
||||
var ti = new TranscriptImporter();
|
||||
ti.Initialize(importText.FixedSubtitle, this);
|
||||
ti.Top = this.Top + 100;
|
||||
ti.Left = this.Left + (this.Width / 2) - (ti.Width / 3);
|
||||
|
||||
ti.Show(this);
|
||||
if (_transcriptImporter != null && !_transcriptImporter.IsDisposed)
|
||||
{
|
||||
_transcriptImporter.WindowState = FormWindowState.Normal;
|
||||
_transcriptImporter.Focus();
|
||||
return;
|
||||
}
|
||||
|
||||
_transcriptImporter = new TranscriptImporter();
|
||||
_transcriptImporter.Initialize(importText.FixedSubtitle, this);
|
||||
_transcriptImporter.Top = this.Top + 100;
|
||||
_transcriptImporter.Left = this.Left + (this.Width / 2) - (_transcriptImporter.Width / 3);
|
||||
|
||||
_transcriptImporter.Show(this);
|
||||
|
||||
//SyncPointsSync syncPointSync = new SyncPointsSync();
|
||||
//syncPointSync.Initialize(importText.FixedSubtitle, _fileName, importText.VideoFileName, _videoAudioTrackNumber);
|
||||
@ -9735,5 +9744,22 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
SubtitleListview1.Items[i].Selected = true;
|
||||
}
|
||||
|
||||
private void transcriptImporterToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_transcriptImporter != null && !_transcriptImporter.IsDisposed)
|
||||
{
|
||||
_transcriptImporter.WindowState = FormWindowState.Normal;
|
||||
_transcriptImporter.Focus();
|
||||
return;
|
||||
}
|
||||
|
||||
_transcriptImporter = new TranscriptImporter();
|
||||
_transcriptImporter.Initialize(new Subtitle(), this);
|
||||
_transcriptImporter.Top = this.Top + 100;
|
||||
_transcriptImporter.Left = this.Left + (this.Width / 2) - (_transcriptImporter.Width / 3);
|
||||
|
||||
_transcriptImporter.Show(this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -580,6 +580,9 @@
|
||||
<metadata name="toolStripWaveControls.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>208, 56</value>
|
||||
</metadata>
|
||||
<metadata name="toolStripWaveControls.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>208, 56</value>
|
||||
</metadata>
|
||||
<data name="toolStripButtonWaveFormZoomOut.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
@ -684,7 +687,7 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAATgBBAE4AQQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAUABBAFAAQQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
|
@ -552,7 +552,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
List<string> suggestions = new List<string>();
|
||||
|
||||
if (_currentWord.Length > 4 || !_currentWord.Contains("'")) //TODO: get fixed nhunspell
|
||||
if (_currentWord != "Lt'S" && _currentWord != "Sox's") //TODO: get fixed nhunspell
|
||||
suggestions = _hunspell.Suggest(_currentWord); //TODO: 0.9.6 fails on "Lt'S"
|
||||
|
||||
if (AutoFixNames && _currentWord.Length > 1 && suggestions.Contains(_currentWord.Substring(0, 1).ToUpper() + _currentWord.Substring(1)))
|
||||
|
34
src/Forms/TranscriptImporter.Designer.cs
generated
34
src/Forms/TranscriptImporter.Designer.cs
generated
@ -36,6 +36,7 @@
|
||||
this.buttonStartHalfASecondBack = new System.Windows.Forms.Button();
|
||||
this.buttonPlayPause = new System.Windows.Forms.Button();
|
||||
this.SubtitleListview1 = new Nikse.SubtitleEdit.Controls.SubtitleListView();
|
||||
this.buttonOpenText = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// textBoxListViewText
|
||||
@ -43,7 +44,7 @@
|
||||
this.textBoxListViewText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.textBoxListViewText.Enabled = false;
|
||||
this.textBoxListViewText.HideSelection = false;
|
||||
this.textBoxListViewText.Location = new System.Drawing.Point(12, 294);
|
||||
this.textBoxListViewText.Location = new System.Drawing.Point(12, 296);
|
||||
this.textBoxListViewText.Multiline = true;
|
||||
this.textBoxListViewText.Name = "textBoxListViewText";
|
||||
this.textBoxListViewText.Size = new System.Drawing.Size(373, 56);
|
||||
@ -53,7 +54,7 @@
|
||||
//
|
||||
this.labelText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.labelText.AutoSize = true;
|
||||
this.labelText.Location = new System.Drawing.Point(12, 278);
|
||||
this.labelText.Location = new System.Drawing.Point(12, 280);
|
||||
this.labelText.Name = "labelText";
|
||||
this.labelText.Size = new System.Drawing.Size(28, 13);
|
||||
this.labelText.TabIndex = 8;
|
||||
@ -62,7 +63,7 @@
|
||||
// buttonInsert
|
||||
//
|
||||
this.buttonInsert.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.buttonInsert.Location = new System.Drawing.Point(257, 362);
|
||||
this.buttonInsert.Location = new System.Drawing.Point(257, 370);
|
||||
this.buttonInsert.Name = "buttonInsert";
|
||||
this.buttonInsert.Size = new System.Drawing.Size(189, 21);
|
||||
this.buttonInsert.TabIndex = 9;
|
||||
@ -75,7 +76,7 @@
|
||||
this.labelTranslateTip.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.labelTranslateTip.AutoSize = true;
|
||||
this.labelTranslateTip.ForeColor = System.Drawing.Color.Gray;
|
||||
this.labelTranslateTip.Location = new System.Drawing.Point(452, 370);
|
||||
this.labelTranslateTip.Location = new System.Drawing.Point(257, 355);
|
||||
this.labelTranslateTip.Name = "labelTranslateTip";
|
||||
this.labelTranslateTip.Size = new System.Drawing.Size(161, 13);
|
||||
this.labelTranslateTip.TabIndex = 10;
|
||||
@ -84,7 +85,7 @@
|
||||
// buttonStartThreeSecondsBack
|
||||
//
|
||||
this.buttonStartThreeSecondsBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.buttonStartThreeSecondsBack.Location = new System.Drawing.Point(15, 362);
|
||||
this.buttonStartThreeSecondsBack.Location = new System.Drawing.Point(15, 370);
|
||||
this.buttonStartThreeSecondsBack.Name = "buttonStartThreeSecondsBack";
|
||||
this.buttonStartThreeSecondsBack.Size = new System.Drawing.Size(60, 21);
|
||||
this.buttonStartThreeSecondsBack.TabIndex = 11;
|
||||
@ -95,7 +96,7 @@
|
||||
// buttonStartHalfASecondBack
|
||||
//
|
||||
this.buttonStartHalfASecondBack.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.buttonStartHalfASecondBack.Location = new System.Drawing.Point(81, 362);
|
||||
this.buttonStartHalfASecondBack.Location = new System.Drawing.Point(81, 370);
|
||||
this.buttonStartHalfASecondBack.Name = "buttonStartHalfASecondBack";
|
||||
this.buttonStartHalfASecondBack.Size = new System.Drawing.Size(60, 21);
|
||||
this.buttonStartHalfASecondBack.TabIndex = 12;
|
||||
@ -106,7 +107,7 @@
|
||||
// buttonPlayPause
|
||||
//
|
||||
this.buttonPlayPause.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.buttonPlayPause.Location = new System.Drawing.Point(147, 362);
|
||||
this.buttonPlayPause.Location = new System.Drawing.Point(147, 370);
|
||||
this.buttonPlayPause.Name = "buttonPlayPause";
|
||||
this.buttonPlayPause.Size = new System.Drawing.Size(104, 21);
|
||||
this.buttonPlayPause.TabIndex = 13;
|
||||
@ -125,18 +126,30 @@
|
||||
this.SubtitleListview1.FullRowSelect = true;
|
||||
this.SubtitleListview1.GridLines = true;
|
||||
this.SubtitleListview1.HideSelection = false;
|
||||
this.SubtitleListview1.Location = new System.Drawing.Point(12, 12);
|
||||
this.SubtitleListview1.Location = new System.Drawing.Point(12, 32);
|
||||
this.SubtitleListview1.Name = "SubtitleListview1";
|
||||
this.SubtitleListview1.Size = new System.Drawing.Size(637, 258);
|
||||
this.SubtitleListview1.Size = new System.Drawing.Size(637, 239);
|
||||
this.SubtitleListview1.TabIndex = 6;
|
||||
this.SubtitleListview1.UseCompatibleStateImageBehavior = false;
|
||||
this.SubtitleListview1.View = System.Windows.Forms.View.Details;
|
||||
this.SubtitleListview1.SelectedIndexChanged += new System.EventHandler(this.SubtitleListview1_SelectedIndexChanged);
|
||||
//
|
||||
// buttonOpenText
|
||||
//
|
||||
this.buttonOpenText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonOpenText.Location = new System.Drawing.Point(506, 5);
|
||||
this.buttonOpenText.Name = "buttonOpenText";
|
||||
this.buttonOpenText.Size = new System.Drawing.Size(143, 21);
|
||||
this.buttonOpenText.TabIndex = 14;
|
||||
this.buttonOpenText.Text = "Open transcript...";
|
||||
this.buttonOpenText.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// TranscriptImporter
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(661, 392);
|
||||
this.ClientSize = new System.Drawing.Size(661, 398);
|
||||
this.Controls.Add(this.buttonOpenText);
|
||||
this.Controls.Add(this.buttonPlayPause);
|
||||
this.Controls.Add(this.buttonStartThreeSecondsBack);
|
||||
this.Controls.Add(this.buttonStartHalfASecondBack);
|
||||
@ -165,5 +178,6 @@
|
||||
private System.Windows.Forms.Button buttonStartThreeSecondsBack;
|
||||
private System.Windows.Forms.Button buttonStartHalfASecondBack;
|
||||
private System.Windows.Forms.Button buttonPlayPause;
|
||||
private System.Windows.Forms.Button buttonOpenText;
|
||||
}
|
||||
}
|
@ -76,5 +76,17 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
_main.GoBackSeconds(3.0);
|
||||
}
|
||||
|
||||
private void SubtitleListview1_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
Paragraph p = SubtitleListview1.GetSelectedParagraph(_subtitle);
|
||||
if (p != null)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
Dictionary<string, string> _beginLineReplaceList;
|
||||
Dictionary<string, string> _endLineReplaceList;
|
||||
Dictionary<string, string> _wholeLineReplaceList;
|
||||
Dictionary<string, string> _partialWordReplaceListAlways;
|
||||
Dictionary<string, string> _partialWordReplaceList;
|
||||
string _replaceListXmlFileName;
|
||||
string _userWordListXmlFileName;
|
||||
@ -70,6 +71,7 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
_beginLineReplaceList = new Dictionary<string, string>();
|
||||
_endLineReplaceList = new Dictionary<string, string>();
|
||||
_wholeLineReplaceList = new Dictionary<string, string>();
|
||||
_partialWordReplaceListAlways = new Dictionary<string, string>();
|
||||
_partialWordReplaceList = new Dictionary<string, string>();
|
||||
|
||||
_replaceListXmlFileName = Utilities.DictionaryFolder + languageId + "_OCRFixReplaceList.xml";
|
||||
@ -79,6 +81,7 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
doc.Load(_replaceListXmlFileName);
|
||||
|
||||
_wordReplaceList = LoadReplaceList(doc, "WholeWords");
|
||||
_partialWordReplaceList = LoadReplaceList(doc, "PartialWordsAlways");
|
||||
_partialWordReplaceList = LoadReplaceList(doc, "PartialWords");
|
||||
_partialLineReplaceList = LoadReplaceList(doc, "PartialLines");
|
||||
_beginLineReplaceList = LoadReplaceList(doc, "BeginLines");
|
||||
@ -315,6 +318,10 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
}
|
||||
}
|
||||
|
||||
//always replace list
|
||||
foreach (string letter in _partialWordReplaceListAlways.Keys)
|
||||
word = word.Replace(letter,_partialWordReplaceListAlways[letter]);
|
||||
|
||||
string pre = string.Empty;
|
||||
string post = string.Empty;
|
||||
|
||||
@ -706,15 +713,45 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
|
||||
public string FixUnknownWordsViaGuessOrPrompt(out int wordsNotFound, string line, int index, Bitmap bitmap, bool autoFix, bool promptForFixingErrors, bool log, bool useAutoGuess)
|
||||
{
|
||||
List<string> localIgnoreWords = new List<string>();
|
||||
wordsNotFound = 0;
|
||||
if (_hunspell == null)
|
||||
return line;
|
||||
|
||||
string[] words = line.Split((Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
string tempLine = line;
|
||||
foreach (string name in _namesEtcList)
|
||||
{
|
||||
int start = tempLine.IndexOf(name);
|
||||
if (start >= 0)
|
||||
{
|
||||
if (start == 0 || (Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").Contains(tempLine[start - 1].ToString()))
|
||||
{
|
||||
int end = start + name.Length;
|
||||
if (end >= tempLine.Length || (Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").Contains(tempLine[end].ToString()))
|
||||
tempLine = tempLine.Remove(start, name.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (string name in _namesEtcMultiWordList)
|
||||
{
|
||||
int start = tempLine.IndexOf(name);
|
||||
if (start >= 0)
|
||||
{
|
||||
if (start == 0 || (Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").Contains(tempLine[start - 1].ToString()))
|
||||
{
|
||||
int end = start + name.Length;
|
||||
if (end >= tempLine.Length || (Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").Contains(tempLine[end].ToString()))
|
||||
tempLine = tempLine.Remove(start, name.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string[] words = tempLine.Split((Environment.NewLine + " ,.!?:;()[]{}+-$£\"”“#&%…—").ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
|
||||
for (int i = 0; i < words.Length; i++)
|
||||
{
|
||||
string word = words[i];
|
||||
if (!IsWordKnownOrNumber(word, line))
|
||||
if (!IsWordKnownOrNumber(word, line) && !localIgnoreWords.Contains(word))
|
||||
{
|
||||
bool correct = _hunspell.Spell(word);
|
||||
if (!correct)
|
||||
@ -771,7 +808,7 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
{
|
||||
List<string> suggestions = new List<string>();
|
||||
|
||||
if (word.Length > 4 || !word.Contains("'")) //TODO: get fixed nhunspell
|
||||
if (word != "Lt'S" && word != "Sox's") //TODO: get fixed nhunspell
|
||||
suggestions = _hunspell.Suggest(word); // 0.9.6 fails on "Lt'S"
|
||||
|
||||
SpellcheckOcrTextResult res = SpellcheckOcrText(line, bitmap, words, i, word, suggestions);
|
||||
@ -781,6 +818,7 @@ namespace Nikse.SubtitleEdit.Logic.OCR
|
||||
}
|
||||
if (res.Fixed)
|
||||
{
|
||||
localIgnoreWords.Add(word);
|
||||
line = res.Line;
|
||||
wordsNotFound--;
|
||||
}
|
||||
|
@ -89,246 +89,246 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
" </effect>" + Environment.NewLine +
|
||||
"</generatoritem>";
|
||||
|
||||
string xmlTrackStructure2 =
|
||||
@"<generatoritem id='Subtitle Edit'>
|
||||
<name>edit 'B subtitle</name>
|
||||
<duration>3000</duration>
|
||||
<rate>
|
||||
<ntsc>FALSE</ntsc>
|
||||
<timebase>25</timebase>
|
||||
</rate>
|
||||
<in>1375</in>
|
||||
<out>1383</out>
|
||||
<start>0</start>
|
||||
<end>8</end>
|
||||
<enabled>TRUE</enabled>
|
||||
<anamorphic>TRUE</anamorphic>
|
||||
<alphatype>black</alphatype>
|
||||
<logginginfo>
|
||||
<scene>
|
||||
</scene>
|
||||
<shottake>
|
||||
</shottake>
|
||||
<lognote>
|
||||
</lognote>
|
||||
<good>FALSE</good>
|
||||
</logginginfo>
|
||||
<labels>
|
||||
<label2>
|
||||
</label2>
|
||||
</labels>
|
||||
<comments>
|
||||
<mastercomment1>
|
||||
</mastercomment1>
|
||||
<mastercomment2>
|
||||
</mastercomment2>
|
||||
<mastercomment3>
|
||||
</mastercomment3>
|
||||
<mastercomment4>
|
||||
</mastercomment4>
|
||||
</comments>
|
||||
<effect>
|
||||
<name>edit 'B subtitle</name>
|
||||
<effectid>edit 'B subtitle</effectid>
|
||||
<effectcategory>Text</effectcategory>
|
||||
<effecttype>generator</effecttype>
|
||||
<mediatype>video</mediatype>
|
||||
<parameter>
|
||||
<parameterid>part1</parameterid>
|
||||
<name>Text Settings</name>
|
||||
<value>0</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>str</parameterid>
|
||||
<name>Text</name>
|
||||
<value></value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontname</parameterid>
|
||||
<name>Font</name>
|
||||
<value>Arial Narrow</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontstyle</parameterid>
|
||||
<name>Style</name>
|
||||
<valuemin>1</valuemin>
|
||||
<valuemax>4</valuemax>
|
||||
<valuelist>
|
||||
<valueentry>
|
||||
<name>Plain</name>
|
||||
<value>1</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Bold</name>
|
||||
<value>2</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Italic</name>
|
||||
<value>3</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Bold/Italic</name>
|
||||
<value>4</value>
|
||||
</valueentry>
|
||||
</valuelist>
|
||||
<value>1</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontalign</parameterid>
|
||||
<name>Alignment</name>
|
||||
<valuemin>1</valuemin>
|
||||
<valuemax>3</valuemax>
|
||||
<valuelist>
|
||||
<valueentry>
|
||||
<name>Left</name>
|
||||
<value>1</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Center</name>
|
||||
<value>2</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Right</name>
|
||||
<value>3</value>
|
||||
</valueentry>
|
||||
</valuelist>
|
||||
<value>2</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontsize</parameterid>
|
||||
<name>Size</name>
|
||||
<valuemin>20</valuemin>
|
||||
<valuemax>80</valuemax>
|
||||
<value>28</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>origin</parameterid>
|
||||
<name>Origin</name>
|
||||
<value>
|
||||
<horiz>0</horiz>
|
||||
<vert>0.3056</vert>
|
||||
</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>aspect</parameterid>
|
||||
<name>Aspect</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>2</valuemax>
|
||||
<value>1</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>textopacity</parameterid>
|
||||
<name>Text Opacity</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>100</valuemax>
|
||||
<value>100</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>textcolor</parameterid>
|
||||
<name>Text Color</name>
|
||||
<value>
|
||||
<alpha>255</alpha>
|
||||
<red>255</red>
|
||||
<green>255</green>
|
||||
<blue>255</blue>
|
||||
</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fonttrack</parameterid>
|
||||
<name>Tracking</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>10</valuemax>
|
||||
<value>1</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>leading</parameterid>
|
||||
<name>Leading</name>
|
||||
<valuemin>-40</valuemin>
|
||||
<valuemax>40</valuemax>
|
||||
<value>-13</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>autokern</parameterid>
|
||||
<name>Auto Kerning</name>
|
||||
<value>TRUE</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>part2</parameterid>
|
||||
<name>Outline Settings</name>
|
||||
<value>0</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>linewidth</parameterid>
|
||||
<name>Width</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>50</valuemax>
|
||||
<value>8</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>linesoft</parameterid>
|
||||
<name>Soft</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>100</valuemax>
|
||||
<value>38</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>linecolor</parameterid>
|
||||
<name>Color</name>
|
||||
<value>
|
||||
<alpha>255</alpha>
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>part3</parameterid>
|
||||
<name>Shadow Settings</name>
|
||||
<value>0</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>shadowoffsetx</parameterid>
|
||||
<name>Offset X</name>
|
||||
<valuemin>-20</valuemin>
|
||||
<valuemax>20</valuemax>
|
||||
<value>3</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>shadowoffsety</parameterid>
|
||||
<name>Offset y</name>
|
||||
<valuemin>-20</valuemin>
|
||||
<valuemax>20</valuemax>
|
||||
<value>3</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>shadowopacity</parameterid>
|
||||
<name>Opacity</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>100</valuemax>
|
||||
<value>75</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>shadowsoft</parameterid>
|
||||
<name>Softness</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>100</valuemax>
|
||||
<value>2</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>shadowcolor</parameterid>
|
||||
<name>Color</name>
|
||||
<value>
|
||||
<alpha>255</alpha>
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</value>
|
||||
</parameter>
|
||||
</effect>
|
||||
<sourcetrack>
|
||||
<mediatype>video</mediatype>
|
||||
</sourcetrack>
|
||||
</generatoritem>";
|
||||
// string xmlTrackStructure2 =
|
||||
// @"<generatoritem id='Subtitle Edit'>
|
||||
// <name>edit 'B subtitle</name>
|
||||
// <duration>3000</duration>
|
||||
// <rate>
|
||||
// <ntsc>FALSE</ntsc>
|
||||
// <timebase>25</timebase>
|
||||
// </rate>
|
||||
// <in>1375</in>
|
||||
// <out>1383</out>
|
||||
// <start>0</start>
|
||||
// <end>8</end>
|
||||
// <enabled>TRUE</enabled>
|
||||
// <anamorphic>TRUE</anamorphic>
|
||||
// <alphatype>black</alphatype>
|
||||
// <logginginfo>
|
||||
// <scene>
|
||||
// </scene>
|
||||
// <shottake>
|
||||
// </shottake>
|
||||
// <lognote>
|
||||
// </lognote>
|
||||
// <good>FALSE</good>
|
||||
// </logginginfo>
|
||||
// <labels>
|
||||
// <label2>
|
||||
// </label2>
|
||||
// </labels>
|
||||
// <comments>
|
||||
// <mastercomment1>
|
||||
// </mastercomment1>
|
||||
// <mastercomment2>
|
||||
// </mastercomment2>
|
||||
// <mastercomment3>
|
||||
// </mastercomment3>
|
||||
// <mastercomment4>
|
||||
// </mastercomment4>
|
||||
// </comments>
|
||||
// <effect>
|
||||
// <name>edit 'B subtitle</name>
|
||||
// <effectid>edit 'B subtitle</effectid>
|
||||
// <effectcategory>Text</effectcategory>
|
||||
// <effecttype>generator</effecttype>
|
||||
// <mediatype>video</mediatype>
|
||||
// <parameter>
|
||||
// <parameterid>part1</parameterid>
|
||||
// <name>Text Settings</name>
|
||||
// <value>0</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>str</parameterid>
|
||||
// <name>Text</name>
|
||||
// <value></value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontname</parameterid>
|
||||
// <name>Font</name>
|
||||
// <value>Arial Narrow</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontstyle</parameterid>
|
||||
// <name>Style</name>
|
||||
// <valuemin>1</valuemin>
|
||||
// <valuemax>4</valuemax>
|
||||
// <valuelist>
|
||||
// <valueentry>
|
||||
// <name>Plain</name>
|
||||
// <value>1</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Bold</name>
|
||||
// <value>2</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Italic</name>
|
||||
// <value>3</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Bold/Italic</name>
|
||||
// <value>4</value>
|
||||
// </valueentry>
|
||||
// </valuelist>
|
||||
// <value>1</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontalign</parameterid>
|
||||
// <name>Alignment</name>
|
||||
// <valuemin>1</valuemin>
|
||||
// <valuemax>3</valuemax>
|
||||
// <valuelist>
|
||||
// <valueentry>
|
||||
// <name>Left</name>
|
||||
// <value>1</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Center</name>
|
||||
// <value>2</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Right</name>
|
||||
// <value>3</value>
|
||||
// </valueentry>
|
||||
// </valuelist>
|
||||
// <value>2</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontsize</parameterid>
|
||||
// <name>Size</name>
|
||||
// <valuemin>20</valuemin>
|
||||
// <valuemax>80</valuemax>
|
||||
// <value>28</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>origin</parameterid>
|
||||
// <name>Origin</name>
|
||||
// <value>
|
||||
// <horiz>0</horiz>
|
||||
// <vert>0.3056</vert>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>aspect</parameterid>
|
||||
// <name>Aspect</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>2</valuemax>
|
||||
// <value>1</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>textopacity</parameterid>
|
||||
// <name>Text Opacity</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>100</valuemax>
|
||||
// <value>100</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>textcolor</parameterid>
|
||||
// <name>Text Color</name>
|
||||
// <value>
|
||||
// <alpha>255</alpha>
|
||||
// <red>255</red>
|
||||
// <green>255</green>
|
||||
// <blue>255</blue>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fonttrack</parameterid>
|
||||
// <name>Tracking</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>10</valuemax>
|
||||
// <value>1</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>leading</parameterid>
|
||||
// <name>Leading</name>
|
||||
// <valuemin>-40</valuemin>
|
||||
// <valuemax>40</valuemax>
|
||||
// <value>-13</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>autokern</parameterid>
|
||||
// <name>Auto Kerning</name>
|
||||
// <value>TRUE</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>part2</parameterid>
|
||||
// <name>Outline Settings</name>
|
||||
// <value>0</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>linewidth</parameterid>
|
||||
// <name>Width</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>50</valuemax>
|
||||
// <value>8</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>linesoft</parameterid>
|
||||
// <name>Soft</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>100</valuemax>
|
||||
// <value>38</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>linecolor</parameterid>
|
||||
// <name>Color</name>
|
||||
// <value>
|
||||
// <alpha>255</alpha>
|
||||
// <red>0</red>
|
||||
// <green>0</green>
|
||||
// <blue>0</blue>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>part3</parameterid>
|
||||
// <name>Shadow Settings</name>
|
||||
// <value>0</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>shadowoffsetx</parameterid>
|
||||
// <name>Offset X</name>
|
||||
// <valuemin>-20</valuemin>
|
||||
// <valuemax>20</valuemax>
|
||||
// <value>3</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>shadowoffsety</parameterid>
|
||||
// <name>Offset y</name>
|
||||
// <valuemin>-20</valuemin>
|
||||
// <valuemax>20</valuemax>
|
||||
// <value>3</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>shadowopacity</parameterid>
|
||||
// <name>Opacity</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>100</valuemax>
|
||||
// <value>75</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>shadowsoft</parameterid>
|
||||
// <name>Softness</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>100</valuemax>
|
||||
// <value>2</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>shadowcolor</parameterid>
|
||||
// <name>Color</name>
|
||||
// <value>
|
||||
// <alpha>255</alpha>
|
||||
// <red>0</red>
|
||||
// <green>0</green>
|
||||
// <blue>0</blue>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// </effect>
|
||||
// <sourcetrack>
|
||||
// <mediatype>video</mediatype>
|
||||
// </sourcetrack>
|
||||
// </generatoritem>";
|
||||
|
||||
string xmlTrackStructure3a =
|
||||
@"<generatoritem>
|
||||
|
@ -330,130 +330,130 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
</sourcetrack>
|
||||
</generatoritem>";
|
||||
|
||||
string xmlTrackStructure3a =
|
||||
@"<generatoritem>
|
||||
<name>Text</name>
|
||||
<duration>3600</duration>
|
||||
<rate>
|
||||
<ntsc>TRUE</ntsc>
|
||||
<timebase>30</timebase>
|
||||
</rate>
|
||||
<in>1650</in>
|
||||
<out>1784</out>
|
||||
<start>0</start>
|
||||
<end>134</end>
|
||||
<enabled>TRUE</enabled>
|
||||
<anamorphic>FALSE</anamorphic>
|
||||
<alphatype>black</alphatype>
|
||||
<effect id = 'subtitle'>
|
||||
<name>Text</name>
|
||||
<effectid>Text</effectid>
|
||||
<effectcategory>Text</effectcategory>
|
||||
<effecttype>generator</effecttype>
|
||||
<mediatype>video</mediatype>
|
||||
<parameter>
|
||||
<parameterid>str</parameterid>
|
||||
<name>Text</name>
|
||||
<value>If you look at the Lindy Hop you'll see a couple just moving</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontname</parameterid>
|
||||
<name>Font</name>
|
||||
<value>Futura</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontsize</parameterid>
|
||||
<name>Size</name>
|
||||
<valuemin>0</valuemin>
|
||||
<valuemax>1000</valuemax>
|
||||
<value>36</value></parameter>
|
||||
<parameter>
|
||||
<parameterid>fontstyle</parameterid>
|
||||
<name>Style</name>
|
||||
<valuemin>1</valuemin>
|
||||
<valuemax>4</valuemax>
|
||||
<valuelist>
|
||||
<valueentry>
|
||||
<name>Plain</name>
|
||||
<value>1</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Bold</name>
|
||||
<value>2</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Italic</name>
|
||||
<value>3</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Bold/Italic</name>
|
||||
<value>4</value>
|
||||
</valueentry>
|
||||
</valuelist>
|
||||
<value>3</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontalign</parameterid>
|
||||
<name>Alignment</name>
|
||||
<valuemin>1</valuemin>
|
||||
<valuemax>3</valuemax>
|
||||
<valuelist>
|
||||
<valueentry>
|
||||
<name>Left</name>
|
||||
<value>1</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Center</name>
|
||||
<value>2</value>
|
||||
</valueentry>
|
||||
<valueentry>
|
||||
<name>Right</name>
|
||||
<value>3</value>
|
||||
</valueentry>
|
||||
</valuelist>
|
||||
<value>2</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>fontcolor</parameterid>
|
||||
<name>Font Color</name>
|
||||
<value>
|
||||
<alpha>255</alpha>
|
||||
<red>255</red>
|
||||
<green>255</green>
|
||||
<blue>255</blue>
|
||||
</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<parameterid>origin</parameterid>
|
||||
<name>Origin</name>
|
||||
<value>
|
||||
<horiz>0</horiz>
|
||||
<vert>0.34375</vert>
|
||||
</value>
|
||||
</parameter>
|
||||
</effect>
|
||||
<sourcetrack>
|
||||
<mediatype>video</mediatype>
|
||||
</sourcetrack>
|
||||
</generatoritem>";
|
||||
// string xmlTrackStructure3a =
|
||||
//@"<generatoritem>
|
||||
// <name>Text</name>
|
||||
// <duration>3600</duration>
|
||||
// <rate>
|
||||
// <ntsc>TRUE</ntsc>
|
||||
// <timebase>30</timebase>
|
||||
// </rate>
|
||||
// <in>1650</in>
|
||||
// <out>1784</out>
|
||||
// <start>0</start>
|
||||
// <end>134</end>
|
||||
// <enabled>TRUE</enabled>
|
||||
// <anamorphic>FALSE</anamorphic>
|
||||
// <alphatype>black</alphatype>
|
||||
// <effect id = 'subtitle'>
|
||||
// <name>Text</name>
|
||||
// <effectid>Text</effectid>
|
||||
// <effectcategory>Text</effectcategory>
|
||||
// <effecttype>generator</effecttype>
|
||||
// <mediatype>video</mediatype>
|
||||
// <parameter>
|
||||
// <parameterid>str</parameterid>
|
||||
// <name>Text</name>
|
||||
// <value>If you look at the Lindy Hop you'll see a couple just moving</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontname</parameterid>
|
||||
// <name>Font</name>
|
||||
// <value>Futura</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontsize</parameterid>
|
||||
// <name>Size</name>
|
||||
// <valuemin>0</valuemin>
|
||||
// <valuemax>1000</valuemax>
|
||||
// <value>36</value></parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontstyle</parameterid>
|
||||
// <name>Style</name>
|
||||
// <valuemin>1</valuemin>
|
||||
// <valuemax>4</valuemax>
|
||||
// <valuelist>
|
||||
// <valueentry>
|
||||
// <name>Plain</name>
|
||||
// <value>1</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Bold</name>
|
||||
// <value>2</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Italic</name>
|
||||
// <value>3</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Bold/Italic</name>
|
||||
// <value>4</value>
|
||||
// </valueentry>
|
||||
// </valuelist>
|
||||
// <value>3</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontalign</parameterid>
|
||||
// <name>Alignment</name>
|
||||
// <valuemin>1</valuemin>
|
||||
// <valuemax>3</valuemax>
|
||||
// <valuelist>
|
||||
// <valueentry>
|
||||
// <name>Left</name>
|
||||
// <value>1</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Center</name>
|
||||
// <value>2</value>
|
||||
// </valueentry>
|
||||
// <valueentry>
|
||||
// <name>Right</name>
|
||||
// <value>3</value>
|
||||
// </valueentry>
|
||||
// </valuelist>
|
||||
// <value>2</value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>fontcolor</parameterid>
|
||||
// <name>Font Color</name>
|
||||
// <value>
|
||||
// <alpha>255</alpha>
|
||||
// <red>255</red>
|
||||
// <green>255</green>
|
||||
// <blue>255</blue>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// <parameter>
|
||||
// <parameterid>origin</parameterid>
|
||||
// <name>Origin</name>
|
||||
// <value>
|
||||
// <horiz>0</horiz>
|
||||
// <vert>0.34375</vert>
|
||||
// </value>
|
||||
// </parameter>
|
||||
// </effect>
|
||||
// <sourcetrack>
|
||||
// <mediatype>video</mediatype>
|
||||
// </sourcetrack>
|
||||
//</generatoritem>";
|
||||
|
||||
string xmlTrackStructure3b =
|
||||
@"<generatoritem>
|
||||
<start>135</start>
|
||||
<end>219</end>
|
||||
<effect id='subtitle'>
|
||||
<name>Text</name>
|
||||
<effectid>Text</effectid>
|
||||
<effectcategory>Text</effectcategory>
|
||||
<effecttype>generator</effecttype>
|
||||
<mediatype>video</mediatype>
|
||||
<parameter>
|
||||
<parameterid>str</parameterid>
|
||||
<name>Text</name>
|
||||
<value></value>
|
||||
</parameter>
|
||||
</effect>
|
||||
</generatoritem>";
|
||||
//string xmlTrackStructure3b =
|
||||
//@"<generatoritem>
|
||||
// <start>135</start>
|
||||
// <end>219</end>
|
||||
// <effect id='subtitle'>
|
||||
// <name>Text</name>
|
||||
// <effectid>Text</effectid>
|
||||
// <effectcategory>Text</effectcategory>
|
||||
// <effecttype>generator</effecttype>
|
||||
// <mediatype>video</mediatype>
|
||||
// <parameter>
|
||||
// <parameterid>str</parameterid>
|
||||
// <name>Text</name>
|
||||
// <value></value>
|
||||
// </parameter>
|
||||
// </effect>
|
||||
//</generatoritem>";
|
||||
|
||||
XmlDocument xml = new XmlDocument();
|
||||
xml.LoadXml(xmlStructure);
|
||||
|
@ -40,6 +40,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
new Spruce(),
|
||||
new SubtitleEditorProject(),
|
||||
new TimedText(),
|
||||
new TimedText10(),
|
||||
new TMPlayer(),
|
||||
new YouTubeSbv(),
|
||||
// new Idx(),
|
||||
|
@ -15,7 +15,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Timed Text"; }
|
||||
get { return "Timed Text draft"; }
|
||||
}
|
||||
|
||||
public override bool HasLineNumber
|
||||
|
235
src/Logic/SubtitleFormats/TimedText10.cs
Normal file
235
src/Logic/SubtitleFormats/TimedText10.cs
Normal file
@ -0,0 +1,235 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
|
||||
//http://www.w3.org/TR/ttaf1-dfxp/
|
||||
//Timed Text Markup Language (TTML) 1.0
|
||||
//W3C Recommendation 18 November 2010
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
|
||||
{
|
||||
class TimedText10 : SubtitleFormat
|
||||
{
|
||||
public override string Extension
|
||||
{
|
||||
get { return ".xml"; }
|
||||
}
|
||||
|
||||
public override string Name
|
||||
{
|
||||
get { return "Timed Text 1.0"; }
|
||||
}
|
||||
|
||||
public override bool HasLineNumber
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override bool IsTimeBased
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override bool IsMine(List<string> lines, string fileName)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
lines.ForEach(line => sb.AppendLine(line));
|
||||
string xmlAsString = sb.ToString().Trim();
|
||||
if (xmlAsString.Contains("http://www.w3.org/ns/ttml"))
|
||||
{
|
||||
XmlDocument xml = new XmlDocument();
|
||||
try
|
||||
{
|
||||
xml.LoadXml(xmlAsString);
|
||||
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
|
||||
nsmgr.AddNamespace("ttml", "http://www.w3.org/ns/ttml");
|
||||
var nds = xml.DocumentElement.SelectSingleNode("ttml:body", nsmgr);
|
||||
var paragraphs = nds.SelectNodes("//ttml:p", nsmgr);
|
||||
return paragraphs.Count > 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static string ConvertToTimeString(TimeCode time)
|
||||
{
|
||||
return string.Format("{0:00}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
|
||||
}
|
||||
|
||||
public override string ToText(Subtitle subtitle, string title)
|
||||
{
|
||||
string xmlStructure =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + Environment.NewLine +
|
||||
"<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:ttp=\"http://www.w3.org/ns/ttml#parameter\" ttp:timeBase=\"media\" xmlns:tts=\"http://www.w3.org/ns/ttml#style\" xml:lang=\"en\" xmlns:ttm=\"http://www.w3.org/ns/ttml#metadata\">" + Environment.NewLine +
|
||||
" <head>" + Environment.NewLine +
|
||||
" <metadata>" + Environment.NewLine +
|
||||
" <ttm:title></ttm:title>" + Environment.NewLine +
|
||||
" </metadata>" + Environment.NewLine +
|
||||
" <styling>" + Environment.NewLine +
|
||||
" <style id=\"s0\" tts:backgroundColor=\"black\" tts:fontStyle=\"normal\" tts:fontSize=\"16\" tts:fontFamily=\"sansSerif\" tts:color=\"white\" />" + Environment.NewLine +
|
||||
" </styling>" + Environment.NewLine +
|
||||
" </head>" + Environment.NewLine +
|
||||
" <body style=\"s0\">" + Environment.NewLine +
|
||||
" <div />" + Environment.NewLine +
|
||||
" </body>" + Environment.NewLine +
|
||||
"</tt>";
|
||||
|
||||
XmlDocument xml = new XmlDocument();
|
||||
xml.LoadXml(xmlStructure);
|
||||
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
|
||||
nsmgr.AddNamespace("ttml", "http://www.w3.org/ns/ttml");
|
||||
nsmgr.AddNamespace("ttp", "http://www.w3.org/ns/10/ttml#parameter");
|
||||
nsmgr.AddNamespace("tts", "http://www.w3.org/ns/10/ttml#style");
|
||||
nsmgr.AddNamespace("ttm", "http://www.w3.org/ns/10/ttml#metadata");
|
||||
|
||||
XmlNode titleNode = xml.DocumentElement.SelectSingleNode("//ttml:head", nsmgr).FirstChild.FirstChild;
|
||||
titleNode.InnerText = title;
|
||||
|
||||
XmlNode div = xml.DocumentElement.SelectSingleNode("//ttml:body", nsmgr).FirstChild;
|
||||
int no = 0;
|
||||
foreach (Paragraph p in subtitle.Paragraphs)
|
||||
{
|
||||
XmlNode paragraph = xml.CreateElement("p", "http://www.w3.org/ns/ttml");
|
||||
string text = Utilities.RemoveHtmlTags(p.Text);
|
||||
|
||||
bool first = true;
|
||||
foreach (string line in text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
if (!first)
|
||||
{
|
||||
XmlNode br = xml.CreateElement("br", "http://www.w3.org/ns/ttml");
|
||||
paragraph.AppendChild(br);
|
||||
}
|
||||
XmlNode textNode = xml.CreateTextNode(line);
|
||||
paragraph.AppendChild(textNode);
|
||||
first = false;
|
||||
}
|
||||
|
||||
XmlAttribute start = xml.CreateAttribute("begin");
|
||||
start.InnerText = ConvertToTimeString(p.StartTime);
|
||||
paragraph.Attributes.Append(start);
|
||||
|
||||
XmlAttribute id = xml.CreateAttribute("id");
|
||||
id.InnerText = "p" + no.ToString();
|
||||
paragraph.Attributes.Append(id);
|
||||
|
||||
XmlAttribute end = xml.CreateAttribute("end");
|
||||
end.InnerText = ConvertToTimeString(p.EndTime);
|
||||
paragraph.Attributes.Append(end);
|
||||
|
||||
div.AppendChild(paragraph);
|
||||
no++;
|
||||
}
|
||||
|
||||
MemoryStream ms = new MemoryStream();
|
||||
XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
|
||||
writer.Formatting = Formatting.Indented;
|
||||
xml.Save(writer);
|
||||
return Encoding.UTF8.GetString(ms.ToArray()).Trim();
|
||||
}
|
||||
|
||||
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
|
||||
{
|
||||
_errorCount = 0;
|
||||
double startSeconds = 0;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
lines.ForEach(line => sb.AppendLine(line));
|
||||
XmlDocument xml = new XmlDocument();
|
||||
xml.LoadXml(sb.ToString());
|
||||
|
||||
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
|
||||
nsmgr.AddNamespace("ttml", "http://www.w3.org/ns/ttml");
|
||||
XmlNode body = xml.DocumentElement.SelectSingleNode("ttml:body", nsmgr);
|
||||
foreach (XmlNode node in body.SelectNodes("//ttml:p", nsmgr))
|
||||
{
|
||||
try
|
||||
{
|
||||
StringBuilder pText = new StringBuilder();
|
||||
foreach (XmlNode innerNode in node.ChildNodes)
|
||||
{
|
||||
switch (innerNode.Name.ToString())
|
||||
{
|
||||
case "br":
|
||||
pText.AppendLine();
|
||||
break;
|
||||
default:
|
||||
pText.Append(innerNode.InnerText.Trim());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string start = string.Empty;
|
||||
if (node.Attributes["begin"] != null)
|
||||
{
|
||||
start = node.Attributes["begin"].InnerText;
|
||||
}
|
||||
|
||||
string end = string.Empty;
|
||||
if (node.Attributes["end"] != null)
|
||||
{
|
||||
end = node.Attributes["end"].InnerText;
|
||||
}
|
||||
|
||||
string dur = string.Empty;
|
||||
if (node.Attributes["dur"] != null)
|
||||
{
|
||||
dur = node.Attributes["dur"].InnerText;
|
||||
}
|
||||
|
||||
TimeCode startCode = new TimeCode(TimeSpan.FromSeconds(startSeconds));
|
||||
if (start != string.Empty)
|
||||
{
|
||||
startCode = GetTimeCode(start);
|
||||
}
|
||||
|
||||
TimeCode endCode;
|
||||
if (end != string.Empty)
|
||||
{
|
||||
endCode = GetTimeCode(end);
|
||||
}
|
||||
else if (dur != string.Empty)
|
||||
{
|
||||
endCode = new TimeCode(TimeSpan.FromMilliseconds(GetTimeCode(dur).TotalMilliseconds + startCode.TotalMilliseconds));
|
||||
}
|
||||
else
|
||||
{
|
||||
endCode = new TimeCode(TimeSpan.FromMilliseconds(startCode.TotalMilliseconds + 3000));
|
||||
}
|
||||
|
||||
subtitle.Paragraphs.Add(new Paragraph(startCode, endCode, pText.ToString()));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
string s = ex.Message;
|
||||
_errorCount++;
|
||||
}
|
||||
}
|
||||
subtitle.Renumber(1);
|
||||
}
|
||||
|
||||
private static TimeCode GetTimeCode(string s)
|
||||
{
|
||||
if (s.EndsWith("s"))
|
||||
{
|
||||
s = s.TrimEnd('s');
|
||||
TimeSpan ts = TimeSpan.FromSeconds(double.Parse(s));
|
||||
return new TimeCode(ts);
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] parts = s.Split(new char[] { ':', '.', ',' });
|
||||
TimeSpan ts = new TimeSpan(0, int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]));
|
||||
return new TimeCode(ts);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -532,6 +532,7 @@
|
||||
<Compile Include="Logic\SubtitleFormats\SonyDVDArchitect.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\Spruce.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\SubtitleEditorProject.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\TimedText10.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\UleadSubtitleFormat.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\UnknownSubtitle5.cs" />
|
||||
<Compile Include="Logic\SubtitleFormats\OpenDvt.cs" />
|
||||
@ -873,7 +874,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\bg-BG.xml" />
|
||||
<Content Include="Resources\fa-IR.xml" />
|
||||
<Content Include="Resources\fa-IR.xml">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
<Content Include="Resources\ja-JP.xml" />
|
||||
<Content Include="Resources\zh-CHS.xml" />
|
||||
<None Include="Web References\SeNetworkService\SeService.disco" />
|
||||
|
Loading…
Reference in New Issue
Block a user