public override void Fix(Word.Document doc, int hwnd, out MsoDocInspectorStatus status, out string result) { Word.Range range = doc.Content; Word.Find find = range.Find; int replacedLinks = 0; foreach (KeyValuePair <int, string> item in InspectResult) { string uri = TryGetBitlyRedirectUrl(item.Value); if (!String.IsNullOrWhiteSpace(uri)) { if (find.Execute(item.Value, null, null, null, null, null, null, null, null, uri)) { replacedLinks++; } } } if (replacedLinks == InspectResult.Count) { status = MsoDocInspectorStatus.msoDocInspectorStatusDocOk; result = "All links have been replaced."; } else { status = MsoDocInspectorStatus.msoDocInspectorStatusError; result = "Unable to replace one or more link(s)."; } }
private Boolean ExecuteFind( Word.Find find, Object wrapFind, Object forwardFind) { // Simple wrapper around Find.Execute: Object findText = Type.Missing; Object matchCase = Type.Missing; Object matchWholeWord = Type.Missing; Object matchWildcards = Type.Missing; Object matchSoundsLike = Type.Missing; Object matchAllWordForms = Type.Missing; Object forward = forwardFind; Object wrap = wrapFind; Object format = Type.Missing; Object replaceWith = Type.Missing; Object replace = Type.Missing; Object matchKashida = Type.Missing; Object matchDiacritics = Type.Missing; Object matchAlefHamza = Type.Missing; Object matchControl = Type.Missing; return(find.Execute(findText, matchCase, matchWholeWord, matchWildcards, matchSoundsLike, matchAllWordForms, forward, wrap, format, replaceWith, replace, matchKashida, matchDiacritics, matchAlefHamza, matchControl)); }
public override void Inspect(Word.Document doc, out MsoDocInspectorStatus status, out string result, out string action) { InspectResult.Clear(); Cache.Clear(); Word.Range range = doc.Content; Word.Find find = range.Find; find.Forward = true; find.Text = "http*"; find.MatchWildcards = true; if (find.Execute()) { int start = range.Start; while (start > 0) { string text = String.Empty; Word.Range character = range.Characters[1]; while (null != character) { string characterText = character.Text; bool isEndLink = false; foreach (string item in _linkEnds) { if (characterText == item) { isEndLink = true; break; } } if (!isEndLink) { text += character.Text; character = character.Next(); } else { break; } } foreach (string item in _bitly) { if (text.StartsWith(item)) { InspectResult.Add(start, text); break; } } if (!find.Execute()) { break; } start = range.Start; } } if (InspectResult.Count > 0) { status = MsoDocInspectorStatus.msoDocInspectorStatusIssueFound; result = String.Format("{0} link(s) found.", InspectResult.Count); action = "Deobfuscate Links."; } else { status = MsoDocInspectorStatus.msoDocInspectorStatusDocOk; result = "No links found."; action = "No links to change."; } }