public static void WriteUnifiedDiff(Algorithm.Diff.Diff diff, TextWriter writer, string fromfile, string tofile, int context)
        {
            writer.Write("--- ");
            writer.WriteLine(fromfile);
            writer.Write("+++ ");
            writer.WriteLine(tofile);
            ArrayList hunks = new ArrayList();

            foreach (Algorithm.Diff.Diff.Hunk hunk in diff)
            {
                Algorithm.Diff.Diff.Hunk hunk2 = null;
                if (hunks.Count > 0)
                {
                    hunk2 = (Algorithm.Diff.Diff.Hunk)hunks[hunks.Count - 1];
                }
                if (hunk.Same)
                {
                    if (hunk2 == null)
                    {
                        if (hunk.Left.Count > context)
                        {
                            hunks.Add(hunk.Crop(hunk.Left.Count - context, 0));
                        }
                        else
                        {
                            hunks.Add(hunk);
                        }
                    }
                    else if (hunk.Left.Count <= (context * 2))
                    {
                        hunks.Add(hunk);
                    }
                    else
                    {
                        hunks.Add(hunk.Crop(0, hunk.Left.Count - context));
                        WriteUnifiedDiffSection(writer, hunks);
                        hunks.Clear();
                        if (hunk.Left.Count > context)
                        {
                            hunks.Add(hunk.Crop(hunk.Left.Count - context, 0));
                        }
                        else
                        {
                            hunks.Add(hunk);
                        }
                    }
                    continue;
                }
                hunks.Add(hunk);
            }
            if ((hunks.Count > 0) && ((hunks.Count != 1) || !((Algorithm.Diff.Diff.Hunk)hunks[0]).Same))
            {
                WriteUnifiedDiffSection(writer, hunks);
            }
        }
 private static void WriteUnifiedDiffSection(TextWriter writer, ArrayList hunks)
 {
     Algorithm.Diff.Diff.Hunk hunk  = (Algorithm.Diff.Diff.Hunk)hunks[0];
     Algorithm.Diff.Diff.Hunk hunk2 = (Algorithm.Diff.Diff.Hunk)hunks[hunks.Count - 1];
     writer.Write("@@ -");
     writer.Write((int)(hunk.Left.Start + 1));
     writer.Write(",");
     writer.Write((int)((hunk2.Left.End - hunk.Left.Start) + 1));
     writer.Write(" +");
     writer.Write((int)(hunk.Right.Start + 1));
     writer.Write(",");
     writer.Write((int)((hunk2.Right.End - hunk.Right.Start) + 1));
     writer.WriteLine(" @@");
     foreach (Algorithm.Diff.Diff.Hunk hunk3 in hunks)
     {
         if (hunk3.Same)
         {
             WriteBlock(writer, ' ', hunk3.Left);
             continue;
         }
         WriteBlock(writer, '-', hunk3.Left);
         WriteBlock(writer, '+', hunk3.Right);
     }
 }
Beispiel #3
0
 public override bool Equals(object o)
 {
     Algorithm.Diff.Diff.Hunk hunk = o as Algorithm.Diff.Diff.Hunk;
     return((((this.s1start == hunk.s1start) && (this.s1start == hunk.s1end)) && ((this.s1start == hunk.s2start) && (this.s1start == hunk.s2end))) && (this.same == hunk.same));
 }