Example #1
0
        private static void AssertDifferences <T>(DiffEngine <T> diffEngine,
                                                  PatchOperation[] expectedPatchOperations)
        {
            PatchOperationCollection patchOperations = diffEngine.GetPatchOperations();

            Assert.AreEqual(expectedPatchOperations.GetLength(0), patchOperations.Count);

            for (int index = 0; index < patchOperations.Count; ++index)
            {
                Assert.AreEqual(expectedPatchOperations[index], patchOperations[index],
                                string.Format("Collections differ at index {0}", index));
            }
        }
        static void Main()
        {
            /*string w = "p{font-family:Tahoma}. После того, как вам был открыт (C) *доступ*, войти в _систему_ можно войти следующим образом. В верхней части \"главной страницы\":http://www.bronni.ru в области под названием \"Вход для клиентов\" находятся два текстовых поля, куда необходимо ввести логин и пароль. После этого нажмите на ссылку \"Войти\".\r\n\r\n" +
             *  "Если все прошло удачно \\-\\- то %{background:#FFEA77}название ??области?? *должно (C) ^поменяться^ на* \"Вход выполнен\"%. Если такого не происходит, то обратите внимание на область, расположенную немного левее \\- там выводятся системные сообщения. Если вам сообщается о том, что вы ввели неверный логин или пароль, то вы можете воспользваться формой \"напоминания пароля(Напоминания пароля)\":http://www.bronni.ru/default.aspx?page=passwordreminderpage.ascx. Если же вам сообщается, что \"Пользователь с таким именем уже работает с базой данных\", то поставьте галочку на пункте \"Войти принудительно\", еще раз введите пароль и нажмите \"Войти\".\r\n\r\n" +
             *  "Ну и если ничего не помогает, то \"свяжитесь с нами\":http://www.bronni.ru/default.aspx?page=contactspage.ascx\r\n\r\n" +
             *  "После того, как вам был открыт (C) *доступ*, войти в _систему_ можно войти следующим образом. В верхней части \"главной страницы\":http://www.bronni.ru в области под названием \"Вход для клиентов\" находятся два текстовых поля, куда необходимо ввести логин и пароль. После этого нажмите на ссылку \"Войти\".\r\n\r\n" +
             *  "Если все прошло удачно \\-\\- то %{background:#FFEA77}название ??области?? *должно (C) ^поменяться^ на* \"Вход выполнен\"%. Если такого не происходит, то обратите внимание на область, расположенную немного левее \\- там выводятся системные сообщения. Если вам сообщается о том, что вы ввели неверный логин или пароль, то вы можете воспользваться формой \"напоминания пароля(Напоминания пароля)\":http://www.bronni.ru/default.aspx?page=passwordreminderpage.ascx. Если же вам сообщается, что \"Пользователь с таким именем уже работает с базой данных\", то поставьте галочку на пункте \"Войти принудительно\", еще раз введите пароль и нажмите \"Войти\".\r\n\r\n" +
             *  "Ну и если ничего не помогает, то \"свяжитесь с нами\":http://www.bronni.ru/default.aspx?page=contactspage.ascx\r\n\r\n" +
             *  "После того, как вам был открыт (C) *доступ*, войти в _систему_ можно войти следующим образом. В верхней части \"главной страницы\":http://www.bronni.ru в области под названием \"Вход для клиентов\" находятся два текстовых поля, куда необходимо ввести логин и пароль. После этого нажмите на ссылку \"Войти\".\r\n\r\n" +
             *  "Если все прошло удачно \\-\\- то %{background:#FFEA77}название ??области?? *должно (C) ^поменяться^ на* \"Вход выполнен\"%. Если такого не происходит, то обратите внимание на область, расположенную немного левее \\- там выводятся системные сообщения. Если вам сообщается о том, что вы ввели неверный логин или пароль, то вы можете воспользваться формой \"напоминания пароля(Напоминания пароля)\":http://www.bronni.ru/default.aspx?page=passwordreminderpage.ascx. Если же вам сообщается, что \"Пользователь с таким именем уже работает с базой данных\", то поставьте галочку на пункте \"Войти принудительно\", еще раз введите пароль и нажмите \"Войти\".\r\n\r\n" +
             *  "Ну и если ничего не помогает, то \"свяжитесь с нами\":http://www.bronni.ru/default.aspx?page=contactspage.ascx\r\n\r\n" +
             *  "После того, как вам был открыт (C) *доступ*, войти в _систему_ можно войти следующим образом. В верхней части \"главной страницы\":http://www.bronni.ru в области под названием \"Вход для клиентов\" находятся два текстовых поля, куда необходимо ввести логин и пароль. После этого нажмите на ссылку \"Войти\".\r\n\r\n" +
             *  "Если все прошло удачно \\-\\- то %{background:#FFEA77}название ??области?? *должно (C) ^поменяться^ на* \"Вход выполнен\"%. Если такого не происходит, то обратите внимание на область, расположенную немного левее \\- там выводятся системные сообщения. Если вам сообщается о том, что вы ввели неверный логин или пароль, то вы можете воспользваться формой \"напоминания пароля(Напоминания пароля)\":http://www.bronni.ru/default.aspx?page=passwordreminderpage.ascx. Если же вам сообщается, что \"Пользователь с таким именем уже работает с базой данных\", то поставьте галочку на пункте \"Войти принудительно\", еще раз введите пароль и нажмите \"Войти\".\r\n\r\n" +
             *  "Ну и если ничего не помогает, то \"свяжитесь с нами\":http://www.bronni.ru/default.aspx?page=contactspage.ascx\r\n\r\n";
             *
             * TextileAuthoringEngine textileAuthoringEngine = new TextileAuthoringEngine();
             * string h = textileAuthoringEngine.Author(w);*/

            /*StringBuilder wiki = new StringBuilder();
             * for(int i = 0; i < 1; ++i)
             *  wiki.Append(WikiMarkup);
             *
             * IAuthoringEngine authoringEngine = new TextileAuthoringEngine();
             *
             * Stopwatch stopwatch = Stopwatch.StartNew();
             * DomDocument document = authoringEngine.Parse(wiki.ToString());
             * stopwatch.Stop();
             * Console.WriteLine("{0} bytes in {1} sec.", wiki.ToString().Length,
             *  stopwatch.ElapsedMilliseconds / 1000.0);
             *
             * HtmlAuthoringDomElementVisitor htmlAuthoringDomElementVisitor = new HtmlAuthoringDomElementVisitor();
             * document.Accept(htmlAuthoringDomElementVisitor);*/
            const string     source             = "The metrics for clarity are more-well understood. Do you have a game PLAN to become peerlessly synergetic across all platforms ? Think interactive";
            const string     target             = "The metrics for obfuscation are more-well understood. Do you have a game plan to become cross-media ? Think interactive";
            WordDataProvider sourceDataProvider = new WordDataProvider(source);
            WordDataProvider targetDataProvider = new WordDataProvider(target);

            DiffEngine <string> diffEngine = new DiffEngine <string>(
                sourceDataProvider, targetDataProvider);

            PatchOperationCollection differences = diffEngine.GetPatchOperations();

            foreach (PatchOperation difference in differences)
            {
                switch (difference.Type)
                {
                case PatchOperationType.Deletion:
                    Range <int> deletionRange = GetRange(difference, sourceDataProvider);
                    Console.ForegroundColor = ConsoleColor.Red;

                    Console.Write("-");
                    Console.Write(source.Substring(deletionRange.Start,
                                                   deletionRange.End - deletionRange.Start));
                    Console.Write("-");
                    break;

                case PatchOperationType.Addition:
                    Range <int> additionRange = GetRange(difference, targetDataProvider);
                    Console.ForegroundColor = ConsoleColor.Green;

                    Console.Write("+");
                    Console.Write(target.Substring(additionRange.Start,
                                                   additionRange.End - additionRange.Start));
                    Console.Write("+");
                    break;

                case PatchOperationType.Copy:
                    Range <int> copyRange = GetRange(difference, sourceDataProvider);
                    Console.ForegroundColor = ConsoleColor.White;

                    Console.Write(source.Substring(copyRange.Start,
                                                   copyRange.End - copyRange.Start));
                    break;
                } // swich
            }     // foreach

            StringBuilder text = new StringBuilder();

            foreach (PatchOperation difference in differences)
            {
                switch (difference.Type)
                {
                case PatchOperationType.Deletion:
                    Range <int> deletionRange = difference.Range;     // GetRange(difference, sourceDataProvider);
                    text.AppendFormat("-{{color:red;}}{0}-", target.Substring(deletionRange.Start,



                                                                              deletionRange.End - deletionRange.Start));

                    break;

                case PatchOperationType.Addition:
                    Range <int> additionRange = difference.Range;   // = GetRange(difference, targetDataProvider);
                    text.AppendFormat("+{{color:green;}}{0}+", source.Substring(additionRange.Start,



                                                                                additionRange.End - additionRange.Start));

                    break;

                case PatchOperationType.Copy:
                    Range <int> copyRange = difference.Range;    // GetRange(difference, sourceDataProvider);
                    text.Append(target.Substring(copyRange.Start,


                                                 copyRange.End - copyRange.Start));
                    break;
                } // swich
            }     // foreach

            Console.WriteLine(text.ToString());
        }