More Word hacking

git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@248 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
niksedk 2011-01-14 14:35:14 +00:00
parent 0bb4add479
commit 053e360118
4 changed files with 35 additions and 20 deletions

View File

@ -82,6 +82,8 @@ namespace Nikse.SubtitleEdit.Forms
WaveFormUnDocked _waveFormUnDocked = null; WaveFormUnDocked _waveFormUnDocked = null;
VideoControlsUndocked _videoControlsUnDocked = null; VideoControlsUndocked _videoControlsUnDocked = null;
bool _cancelWordSpellCheck = false;
private bool AutoRepeatContinueOn private bool AutoRepeatContinueOn
{ {
get get
@ -2767,7 +2769,7 @@ namespace Nikse.SubtitleEdit.Forms
} }
private void SpellCheckViaWord() private void SpellCheckViaWord()
{ {
if (_subtitle == null | _subtitle.Paragraphs.Count == 0) if (_subtitle == null | _subtitle.Paragraphs.Count == 0)
return; return;
@ -2776,24 +2778,27 @@ namespace Nikse.SubtitleEdit.Forms
try try
{ {
wordSpellChecker = new WordSpellChecker(); wordSpellChecker = new WordSpellChecker();
wordSpellChecker.NewDocument();
} }
catch catch
{ {
MessageBox.Show(_language.UnableToStartWord); MessageBox.Show(_language.UnableToStartWord);
//Configuration.Settings.General.SpellChecker = "hunspell"; ???
return; return;
} }
string version = wordSpellChecker.Version; string version = wordSpellChecker.Version;
int index = 1;
int index = FirstSelectedIndex;
if (index < 0)
index = 0;
_cancelWordSpellCheck = false;
foreach (Paragraph p in _subtitle.Paragraphs) foreach (Paragraph p in _subtitle.Paragraphs)
{ {
int errorsBefore; int errorsBefore;
int errorsAfter; int errorsAfter;
wordSpellChecker.NewDocument();
ShowStatus(string.Format(_language.SpellChekingViaWordXLineYOfX, version, index, _subtitle.Paragraphs.Count.ToString())); ShowStatus(string.Format(_language.SpellChekingViaWordXLineYOfX, version, index, _subtitle.Paragraphs.Count.ToString()));
SubtitleListview1.SelectIndexAndEnsureVisible(index - 1); SubtitleListview1.SelectIndexAndEnsureVisible(index - 1);
string newText = wordSpellChecker.CheckSpelling(p.Text, out errorsBefore, out errorsAfter); string newText = wordSpellChecker.CheckSpelling(p.Text, out errorsBefore, out errorsAfter);
wordSpellChecker.CloseDocument();
if (errorsAfter > 0) if (errorsAfter > 0)
{ {
wordSpellChecker.Quit(); wordSpellChecker.Quit();
@ -2806,9 +2811,14 @@ namespace Nikse.SubtitleEdit.Forms
} }
totalCorrections += (errorsBefore - errorsAfter); totalCorrections += (errorsBefore - errorsAfter);
index++; index++;
if (_cancelWordSpellCheck)
break;
} }
wordSpellChecker.CloseDocument();
wordSpellChecker.Quit(); wordSpellChecker.Quit();
ShowStatus(string.Format(_language.SpellCheckCompletedXCorrections, totalCorrections)); ShowStatus(string.Format(_language.SpellCheckCompletedXCorrections, totalCorrections));
Cursor = Cursors.Default;
} }
private void SpellCheck(bool autoDetect) private void SpellCheck(bool autoDetect)
@ -5126,6 +5136,11 @@ namespace Nikse.SubtitleEdit.Forms
InsertAfter(); InsertAfter();
e.SuppressKeyPress = true; e.SuppressKeyPress = true;
} }
else if (e.KeyCode == Keys.Escape)
{
_cancelWordSpellCheck = true;
}
//else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.D) //else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.D)
//{ //{
// InsertAfter(); // InsertAfter();

View File

@ -181,7 +181,7 @@ namespace Nikse.SubtitleEdit.Forms
labelSubtitleFontSize.Text = language.SubtitleFontSize; labelSubtitleFontSize.Text = language.SubtitleFontSize;
labelSubtitleFontColor.Text = language.SubtitleFontColor; labelSubtitleFontColor.Text = language.SubtitleFontColor;
labelSubtitleFontBackgroundColor.Text = language.SubtitleBackgroundColor; labelSubtitleFontBackgroundColor.Text = language.SubtitleBackgroundColor;
labelSpellChecker.Text = language.SubtitleBackgroundColor; labelSpellChecker.Text = language.SpellChecker;
checkBoxSubtitleFontBold.Text = Configuration.Settings.Language.General.Bold; checkBoxSubtitleFontBold.Text = Configuration.Settings.Language.General.Bold;
checkBoxRememberRecentFiles.Text = language.RememberRecentFiles; checkBoxRememberRecentFiles.Text = language.RememberRecentFiles;
checkBoxReopenLastOpened.Text = language.StartWithLastFileLoaded; checkBoxReopenLastOpened.Text = language.StartWithLastFileLoaded;

View File

@ -18,8 +18,8 @@ namespace Nikse.SubtitleEdit.Logic
{ {
_wordApplicationType = System.Type.GetTypeFromProgID("Word.Application"); _wordApplicationType = System.Type.GetTypeFromProgID("Word.Application");
_wordApplication = Activator.CreateInstance(_wordApplicationType); _wordApplication = Activator.CreateInstance(_wordApplicationType);
_wordApplicationType.InvokeMember("Top", BindingFlags.SetProperty, null, _wordApplication, new object[] { -1000 }); // hide window - it's a hack _wordApplicationType.InvokeMember("WindowState", BindingFlags.SetProperty, null, _wordApplication, new object[] { 0 }); // 0 == ?
_wordApplicationType.InvokeMember("Visible", BindingFlags.SetProperty, null, _wordApplication, new object[] { true }); // set visible to true - otherwise it will appear in the background _wordApplicationType.InvokeMember("Top", BindingFlags.SetProperty, null, _wordApplication, new object[] { -10000 }); // hide window - it's a hack
} }
public void NewDocument() public void NewDocument()
@ -32,7 +32,7 @@ namespace Nikse.SubtitleEdit.Logic
{ {
object saveChanges = false; object saveChanges = false;
object p = Missing.Value; object p = Missing.Value;
_wordDocumentType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, _wordDocument, new object[] { saveChanges, p, p }); _wordDocumentType.InvokeMember("Close", BindingFlags.InvokeMethod, null, _wordDocument, new object[] { saveChanges, p, p });
} }
public string Version public string Version
@ -49,7 +49,7 @@ namespace Nikse.SubtitleEdit.Logic
object saveChanges = false; object saveChanges = false;
object originalFormat = Missing.Value; object originalFormat = Missing.Value;
object routeDocument = Missing.Value; object routeDocument = Missing.Value;
_wordApplicationType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, _wordApplication, new object[] { saveChanges, originalFormat, routeDocument }); _wordApplicationType.InvokeMember("Quit", BindingFlags.InvokeMethod, null, _wordApplication, new object[] { saveChanges, originalFormat, routeDocument });
try try
{ {
System.Runtime.InteropServices.Marshal.ReleaseComObject(_wordDocument); System.Runtime.InteropServices.Marshal.ReleaseComObject(_wordDocument);
@ -74,12 +74,13 @@ namespace Nikse.SubtitleEdit.Logic
object spellingErrorsCount = spellingErrors.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, spellingErrors, null); object spellingErrorsCount = spellingErrors.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, spellingErrors, null);
errorsBefore = int.Parse(spellingErrorsCount.ToString()); errorsBefore = int.Parse(spellingErrorsCount.ToString());
System.Runtime.InteropServices.Marshal.ReleaseComObject(spellingErrors); System.Runtime.InteropServices.Marshal.ReleaseComObject(spellingErrors);
// perform spell check // perform spell check
object p = Missing.Value; object p = Missing.Value;
_wordApplicationType.InvokeMember("Top", BindingFlags.SetProperty, null, _wordApplication, new object[] { -10000 }); // hide window - it's a hack
_wordApplicationType.InvokeMember("Visible", BindingFlags.SetProperty, null, _wordApplication, new object[] { true }); // set visible to true - otherwise it will appear in the background _wordApplicationType.InvokeMember("Visible", BindingFlags.SetProperty, null, _wordApplication, new object[] { true }); // set visible to true - otherwise it will appear in the background
_wordDocumentType.InvokeMember("CheckSpelling", BindingFlags.InvokeMethod, null, _wordDocument, new Object[] { p, p, p, p, p, p, p, p, p, p, p, p }); // 12 parameters _wordDocumentType.InvokeMember("CheckSpelling", BindingFlags.InvokeMethod, null, _wordDocument, new Object[] { p, p, p, p, p, p, p, p, p, p, p, p }); // 12 parameters
// _wordApplicationType.InvokeMember("Top", BindingFlags.SetProperty, null, _wordApplication, new object[] { -1000 }); // hide window - it's a hack
// spell check error count // spell check error count
spellingErrors = _wordDocumentType.InvokeMember("SpellingErrors", BindingFlags.GetProperty, null, _wordDocument, null); spellingErrors = _wordDocumentType.InvokeMember("SpellingErrors", BindingFlags.GetProperty, null, _wordDocument, null);
@ -88,13 +89,12 @@ namespace Nikse.SubtitleEdit.Logic
System.Runtime.InteropServices.Marshal.ReleaseComObject(spellingErrors); System.Runtime.InteropServices.Marshal.ReleaseComObject(spellingErrors);
// Get spellcheck text // Get spellcheck text
object first = 0;
object characters = _wordDocumentType.InvokeMember("Characters", BindingFlags.GetProperty, null, _wordDocument, null);
object charactersCount = characters.GetType().InvokeMember("Count", BindingFlags.GetProperty, null, characters, null);
object last = int.Parse(charactersCount.ToString()) - 1;
System.Runtime.InteropServices.Marshal.ReleaseComObject(characters);
object resultText = range.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, range, null); object resultText = range.GetType().InvokeMember("Text", BindingFlags.GetProperty, null, range, null);
range.GetType().InvokeMember("Delete", BindingFlags.InvokeMethod, null, range, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(words);
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
return resultText.ToString().TrimEnd(); // result needs a trimming at the end return resultText.ToString().TrimEnd(); // result needs a trimming at the end
} }

View File

@ -561,7 +561,7 @@
<Compile Include="Logic\VobSub\VobSubParser.cs" /> <Compile Include="Logic\VobSub\VobSubParser.cs" />
<Compile Include="Logic\VobSub\VobSubMergedPack.cs" /> <Compile Include="Logic\VobSub\VobSubMergedPack.cs" />
<Compile Include="Logic\VobSub\VobSubPack.cs" /> <Compile Include="Logic\VobSub\VobSubPack.cs" />
<Compile Include="Logic\WordLateBound.cs" /> <Compile Include="Logic\WordSpellChecker.cs" />
<Compile Include="Logic\zlib\Adler32.cs" /> <Compile Include="Logic\zlib\Adler32.cs" />
<Compile Include="Logic\zlib\Deflate.cs" /> <Compile Include="Logic\zlib\Deflate.cs" />
<Compile Include="Logic\zlib\InfBlocks.cs" /> <Compile Include="Logic\zlib\InfBlocks.cs" />