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).";
            }
        }
예제 #2
0
    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.";
            }
        }