예제 #1
0
        private void HandleNewFilePatchType()
        {
            foreach (string line in Text.Split('\n'))
            {
                if (line.Length > 0 && line.StartsWith("+"))
                {
                    if (line.Length > 4 && line.StartsWith("+"))
                    {
                        AppendText(line.Substring(4));
                    }
                    else if (line.Length > 1)
                    {
                        FileTextB += line.Substring(1);
                    }

                    FileTextB += "\n";
                }
            }
            if (FileTextB.Length > 0 && FileTextB[FileTextB.Length - 1] == '\n')
            {
                FileTextB = FileTextB.Remove(FileTextB.Length - 1, 1);
            }
            Rate = 100;

            if (System.IO.File.Exists(DirToPatch + FileNameB))
            {
                Rate -= 40;
                Apply = false;
            }
        }
예제 #2
0
        private void HandleChangeFilePatchType(Encoding filesContentEncoding)
        {
            var fileLines = new List <string>();

            foreach (string s in LoadFile(FileNameA, filesContentEncoding).Split('\n'))
            {
                fileLines.Add(s);
            }

            int lineNumber = 0;

            foreach (string line in Text.Split('\n'))
            {
                // Parse first line
                // @@ -1,4 +1,4 @@
                if (line.StartsWith("@@") && line.LastIndexOf("@@") > 0)
                {
                    string   pos      = line.Substring(3, line.LastIndexOf("@@") - 3).Trim();
                    string[] addrem   = pos.Split('+', '-');
                    string[] oldLines = addrem[1].Split(',');

                    lineNumber = Int32.Parse(oldLines[0]) - 1;
                    continue;
                }

                if (line.StartsWith(" "))
                {
                    // Do some extra checks
                    if (line.Length > 0)
                    {
                        if (fileLines.Count > lineNumber && fileLines[lineNumber].CompareTo(line.Substring(1)) != 0)
                        {
                            Rate -= 20;
                        }
                    }
                    else
                    {
                        if (fileLines.Count > lineNumber && fileLines[lineNumber] != "")
                        {
                            Rate -= 20;
                        }
                    }

                    lineNumber++;
                }
                if (line.StartsWith("-"))
                {
                    if (line.Length > 0)
                    {
                        if (fileLines.Count > lineNumber && fileLines[lineNumber].CompareTo(line.Substring(1)) != 0)
                        {
                            Rate -= 20;
                        }
                    }
                    else
                    {
                        if (fileLines.Count > lineNumber && fileLines[lineNumber] != "")
                        {
                            Rate -= 20;
                        }
                    }

                    Bookmarks.Add(lineNumber);

                    if (fileLines.Count > lineNumber)
                    {
                        fileLines.RemoveAt(lineNumber);
                    }
                    else
                    {
                        Rate -= 20;
                    }
                }
                if (line.StartsWith("+"))
                {
                    string insertLine = "";
                    if (line.Length > 1)
                    {
                        insertLine = line.Substring(1);
                    }

                    // Is the patch allready applied?
                    if (fileLines.Count > lineNumber && fileLines[lineNumber].CompareTo(insertLine) == 0)
                    {
                        Rate -= 20;
                    }

                    fileLines.Insert(lineNumber, insertLine);
                    Bookmarks.Add(lineNumber);

                    lineNumber++;
                }
            }
            foreach (string patchedLine in fileLines)
            {
                FileTextB += patchedLine + "\n";
            }
            if (FileTextB.Length > 0 && FileTextB[FileTextB.Length - 1] == '\n')
            {
                FileTextB = FileTextB.Remove(FileTextB.Length - 1, 1);
            }

            if (Rate != 100)
            {
                Apply = false;
            }
        }