public static List<DiffResultSpan> CompareStrings(string source, string destination, DiffEngineLevel level)
 {
     var inst = new DiffEngine();
     inst._level = level;
     var src = new DiffList_String(source);
     var dst = new DiffList_String(destination);
     inst.ProcessDiff(src, dst);
     return inst.DiffReport();
 }
 public void Process(string[] pages, string[,] replaces, WikiProcessor[] procs, WikiErrorCheck[] checks, bool preview, bool save, WikiMedia.ExportNotify notify)
 {
     Regex[] re = CalcRegex(replaces);
     foreach (string pageName in pages)
     {
         if (!String.IsNullOrEmpty(pageName))
         {
             Page page = new Page(site, pageName);
             page.Load();
             if (!String.IsNullOrEmpty(page.text))
             {
                 string text = page.text.Trim();
                 page.text = text;
                 text      = DoRegex(page.text, re, replaces);
                 WikiDocument doc = new WikiDocument(pageName, text);
                 foreach (WikiProcessor p in procs)
                 {
                     p.Process(doc);
                 }
                 foreach (WikiErrorCheck check in checks)
                 {
                     check.Process(doc, notify);
                 }
                 text = doc.ToString().Trim();
                 if (!text.Equals(page.text))
                 {
                     notify("W\t" + pageName + "\tchanged \n");
                     if (preview)
                     {
                         char[]     sep     = { '\n' };
                         IDiffList  oldText = new DiffList_String(page.text, sep);
                         IDiffList  newText = new DiffList_String(text, sep);
                         double     time    = 0;
                         DiffEngine de      = new DiffEngine();
                         time = de.ProcessDiff(oldText, newText);
                         ArrayList rep = de.DiffReport();
                         Results   dlg = new Results(oldText, newText, rep, time);
                         dlg.Size          = new Size(1000, 700);
                         dlg.ShowInTaskbar = false;
                         dlg.StartPosition = FormStartPosition.Manual;
                         dlg.ShowDialog();
                         dlg.Dispose();
                     }
                     if (save)
                     {
                         try {
                             page.text = text;
                             page.Save();
                         }
                         catch (Exception e) {
                             notify("E\t" + pageName + "\t" + e.Message + "\n");
                         }
                     }
                 }
                 else
                 {
                     notify("N\t" + pageName + "\t\n");
                 }
             }
             else
             {
                 notify("I\t" + pageName + "\t\n");
             }
         }
     }
 }
Beispiel #3
0
        private void cmdCompare2_Click(object sender, RoutedEventArgs e)
        {
            txtResult.TextArea.TextView.LineTransformers.Clear();


            var cp1 = new DiffList_String(textEditorA.Text);
            var cp2 = new DiffList_String(textEditorB.Text);
            var df  = new DiffEngine();

            df.ProcessDiff(cp1, cp2, DiffEngineLevel.SlowPerfect);
            var result = df.DiffReport();

            var txt = "";

            //diff_match_patch comparer=new diff_match_patch();
            //var result = comparer.diff_main(textEditorA.Text, textEditorB.Text);

            txtResult.Document.Text = "";
            foreach (var diff in result)
            {
                if (diff.Status == DiffResultSpanStatus.AddDestination)
                {
                    var st = txt.Length;
                    for (int i = diff.DestIndex; i < diff.DestIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp2.GetByIndex(i)).Line + Environment.NewLine;;
                    }
                    var stp = txt.Length;

                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Green));
                }
                else if (diff.Status == DiffResultSpanStatus.DeleteSource)
                {
                    var st = txt.Length;
                    for (int i = diff.SourceIndex; i < diff.SourceIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp1.GetByIndex(i)).Line + Environment.NewLine;;
                    }
                    var stp = txt.Length;
                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Red));
                }
                else if (diff.Status == DiffResultSpanStatus.Replace)
                {
                    var st = txt.Length;
                    for (int i = diff.DestIndex; i < diff.DestIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp2.GetByIndex(i)).Line + Environment.NewLine;
                    }
                    var stp = txt.Length;
                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Orange));
                }
                else
                {
                    for (int i = diff.SourceIndex; i < diff.Length; i++)
                    {
                        txt += ((TextLine)cp1.GetByIndex(i)).Line + Environment.NewLine;;
                    }
                }
            }
            txtResult.Document.Text = txt;
        }
        private void cmdCompare2_Click(object sender, RoutedEventArgs e)
        {
            txtResult.TextArea.TextView.LineTransformers.Clear();


            var cp1 = new DiffList_String(textEditorA.Text);
            var cp2 = new DiffList_String(textEditorB.Text);
            var df = new DiffEngine();
            df.ProcessDiff(cp1, cp2, DiffEngineLevel.SlowPerfect);
            var result = df.DiffReport();

            var txt = "";
            //diff_match_patch comparer=new diff_match_patch();
            //var result = comparer.diff_main(textEditorA.Text, textEditorB.Text);
            
            txtResult.Document.Text = "";
            foreach (var diff in result)
            {
                if (diff.Status == DiffResultSpanStatus.AddDestination)
                {
                    var st = txt.Length;
                    for (int i = diff.DestIndex; i < diff.DestIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp2.GetByIndex(i)).Line + Environment.NewLine; ;
                    }
                    var stp = txt.Length;

                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Green));
                }
                else if (diff.Status == DiffResultSpanStatus.DeleteSource)
                {
                    var st = txt.Length;
                    for (int i = diff.SourceIndex; i < diff.SourceIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp1.GetByIndex(i)).Line + Environment.NewLine; ;
                    }
                    var stp = txt.Length;
                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Red));
                }
                else if (diff.Status == DiffResultSpanStatus.Replace)
                {
                    var st = txt.Length;
                    for (int i = diff.DestIndex; i < diff.DestIndex + diff.Length; i++)
                    {
                        txt += ((TextLine)cp2.GetByIndex(i)).Line + Environment.NewLine;
                    }
                    var stp = txt.Length;
                    txtResult.TextArea.TextView.LineTransformers.Add(new TextColorizer(st, stp, Brushes.Orange));
                }
                else
                {
                    for (int i = diff.SourceIndex; i < diff.Length; i++)
                    {
                        txt += ((TextLine)cp1.GetByIndex(i)).Line + Environment.NewLine; ;
                    }  
                }
                
            }
            txtResult.Document.Text = txt;

        }