public DiffLogResult GetOperationDiffLog(string id, bool simplify) { var operationLog = Database.Retrieve <OperationLogEntity>(PrimaryKey.Parse(id, typeof(OperationLogEntity))); var logs = DiffLogLogic.OperationLogNextPrev(operationLog); StringDistance sd = new StringDistance(); var prevFinal = DiffLogLogic.SimplifyDump(logs.Min?.Mixin <DiffLogMixin>().FinalState.Text, simplify); string?nextInitial = logs.Max != null?DiffLogLogic.SimplifyDump(logs.Max.Mixin <DiffLogMixin>().InitialState.Text, simplify) : operationLog.Target !.Exists() ? GetDump(operationLog.Target !) : null; string?initial = DiffLogLogic.SimplifyDump(operationLog.Mixin <DiffLogMixin>().InitialState.Text, simplify); string?final = DiffLogLogic.SimplifyDump(operationLog.Mixin <DiffLogMixin>().FinalState.Text, simplify); return(new DiffLogResult { prev = logs.Min?.ToLite(), diffPrev = prevFinal == null || initial == null ? null : sd.DiffText(prevFinal, initial), initial = initial, diff = sd.DiffText(initial, final), final = final, diffNext = final == null || nextInitial == null ? null : sd.DiffText(final, nextInitial), next = logs.Max?.ToLite(), }); }
public void DiffText() { var text1 = @" Hola Pedro Que tal Bien Adios Juan"; var text2 = @" Hola Pedri Que til Adios Juani"; var result = d.DiffText(text1, text2); var str = result.ToString(l => (l.Action == StringDistance.DiffAction.Added ? "[+]" : l.Action == StringDistance.DiffAction.Removed ? "[-]" : "[=]") + l.Value.ToString(""), "\n"); Assert.Equal( @"[=] Hola -Pedro+Pedri [-]-Que tal [-]-Bien [=] [+]+Que til [=]Adios -Juan+Juani", str); }
public void DiffText() { const string text1 = @" Hola Pedro Que tal Bien Adios Juan"; const string text2 = @" Hola Pedri Que til Adios Juani"; var result = _stringDistance.DiffText(text1, text2); var str = result.ToString(l => (l.Action == DiffAction.Added ? "[+]" : l.Action == DiffAction.Removed ? "[-]" : "[=]") + l.Value.ToString(string.Empty), "\n"); _output.WriteLine(str); Assert.True( @"[=] Hola -Pedro+Pedri [-]-Que tal [-]-Bien [=] [+]+Que til [=]Adios -Juan+Juani" == str); }
public TranslatedInstanceViewTypeTS View(string type, string?culture, string filter) { Type t = TypeLogic.GetType(type); var c = culture == null ? null : CultureInfo.GetCultureInfo(culture); var master = TranslatedInstanceLogic.FromEntities(t); var support = TranslatedInstanceLogic.TranslationsForType(t, culture: c); var all = string.IsNullOrEmpty(filter); var cultures = TranslationLogic.CurrentCultureInfos(TranslatedInstanceLogic.DefaultCulture); Func <LocalizedInstanceKey, bool> filtered = li => all || li.RowId.ToString() == filter || li.Instance.Id.ToString() == filter || li.Route.PropertyString().Contains(filter, StringComparison.InvariantCultureIgnoreCase) || master.GetOrThrow(li).Contains(filter, StringComparison.InvariantCultureIgnoreCase) || cultures.Any(ci => (support.TryGetC(ci)?.TryGetC(li)?.TranslatedText ?? "").Contains(filter, StringComparison.InvariantCultureIgnoreCase)); var sd = new StringDistance(); var supportByInstance = (from kvpCult in support from kvpLocIns in kvpCult.Value where filtered(kvpLocIns.Key) let newText = master.GetOrThrow(kvpLocIns.Key) group(lockIns: kvpLocIns.Key, translatedInstance: kvpLocIns.Value, culture: kvpCult.Key, newText: newText) by kvpLocIns.Key.Instance into gInstance select KeyValuePair.Create(gInstance.Key, gInstance.AgGroupToDictionary(a => a.lockIns.RouteAndRowId(), gr => gr.ToDictionary(a => a.culture.Name, a => new TranslatedPairViewTS { OriginalText = a.translatedInstance.OriginalText, Diff = a.translatedInstance.OriginalText.Equals(a.newText) ? null : sd.DiffText(a.translatedInstance.OriginalText, a.newText), TranslatedText = a.translatedInstance.TranslatedText }) ))).ToDictionary(); return(new TranslatedInstanceViewTypeTS { TypeName = type, Routes = TranslatedInstanceLogic.TranslateableRoutes.GetOrThrow(t).ToDictionary(a => a.Key.PropertyString(), a => a.Value), MasterCulture = TranslatedInstanceLogic.DefaultCulture.Name, Instances = master.Where(kvp => filtered(kvp.Key)).GroupBy(a => a.Key.Instance).Select(gr => new TranslatedInstanceViewTS { Lite = gr.Key, Master = gr.ToDictionary( a => a.Key.RouteAndRowId(), a => a.Value ), Translations = supportByInstance.TryGetC(gr.Key) ?? new Dictionary <string, Dictionary <string, TranslatedPairViewTS> >() }).ToList() }); }
public static RestDiffResult RestDiffLog(RestDiffResult result) { StringDistance sd = new StringDistance(); long? size = (long?)result.current?.Length * result.previous?.Length; if (size != null && size <= int.MaxValue) { var diff = sd.DiffText(result.previous, result.current); result.diff = diff; } return(result); }
public List <StringDistance.DiffPair <List <StringDistance.DiffPair <string> > > > DiffVersiones(string typeName, string id, DateTime from, DateTime to) { var type = TypeLogic.GetType(typeName); var pk = PrimaryKey.Parse(id, type); var f = SystemTime.Override(from.AddMilliseconds(1)).Using(_ => Database.Retrieve(type, pk)); var t = SystemTime.Override(to.AddMilliseconds(1)).Using(_ => Database.Retrieve(type, pk)); var fDump = GetDump(f); var tDump = GetDump(t); StringDistance sd = new StringDistance(); return(sd.DiffText(fDump, tDump)); }
public static MvcHtmlString Diff(string oldStr, string newStr) { StringDistance sd = new StringDistance(); var dif = sd.DiffText(oldStr, newStr); HtmlStringBuilder sb = new HtmlStringBuilder(); foreach (var line in dif) { if (line.Action == StringDistance.DiffAction.Removed) { using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#FFD1D1"))) DiffLine(sb, line.Value); } if (line.Action == StringDistance.DiffAction.Added) { using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#CEF3CE"))) DiffLine(sb, line.Value); } else if (line.Action == StringDistance.DiffAction.Equal) { if (line.Value.Count == 1) { using (sb.Surround(new HtmlTag("span"))) DiffLine(sb, line.Value); } else { using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#FFD1D1"))) DiffLine(sb, line.Value.Where(a => a.Action == StringDistance.DiffAction.Removed || a.Action == StringDistance.DiffAction.Equal)); using (sb.Surround(new HtmlTag("span").Attr("style", "background-color:#CEF3CE"))) DiffLine(sb, line.Value.Where(a => a.Action == StringDistance.DiffAction.Added || a.Action == StringDistance.DiffAction.Equal)); } } } return(sb.ToHtml()); }
public DiffLogResult GetOperationDiffLog(string id) { var operationLog = Database.Retrieve <OperationLogEntity>(PrimaryKey.Parse(id, typeof(OperationLogEntity))); var logs = DiffLogLogic.OperationLogNextPrev(operationLog); StringDistance sd = new StringDistance(); var prevFinal = logs.Min?.Mixin <DiffLogMixin>().FinalState; string?nextInitial = logs.Max != null?logs.Max.Mixin <DiffLogMixin>().InitialState: operationLog.Target !.Exists() ? GetDump(operationLog.Target !) : null; return(new DiffLogResult { prev = logs.Min?.ToLite(), diffPrev = prevFinal == null || operationLog.Mixin <DiffLogMixin>().InitialState == null ? null : sd.DiffText(prevFinal, operationLog.Mixin <DiffLogMixin>().InitialState), diff = sd.DiffText(operationLog.Mixin <DiffLogMixin>().InitialState, operationLog.Mixin <DiffLogMixin>().FinalState), diffNext = operationLog.Mixin <DiffLogMixin>().FinalState == null || nextInitial == null ? null : sd.DiffText(operationLog.Mixin <DiffLogMixin>().FinalState, nextInitial), next = logs.Max?.ToLite(), }); }
public static TextBlock Diff(string oldStr, string newStr) { StringDistance sd = new StringDistance(); var dif = sd.DiffText(oldStr, newStr); TextBlock tb = new TextBlock { FontFamily = font }; foreach (var line in dif) { if (line.Action == StringDistance.DiffAction.Removed) { tb.Inlines.Add(DiffLine(line.Value, lightRed)); } if (line.Action == StringDistance.DiffAction.Added) { tb.Inlines.Add(DiffLine(line.Value, lightGreen)); } else if (line.Action == StringDistance.DiffAction.Equal) { if (line.Value.Count == 1) { tb.Inlines.Add(DiffLine(line.Value, null)); } else { tb.Inlines.Add(DiffLine(line.Value.Where(a => a.Action == StringDistance.DiffAction.Removed || a.Action == StringDistance.DiffAction.Equal), lightRed)); tb.Inlines.Add(DiffLine(line.Value.Where(a => a.Action == StringDistance.DiffAction.Added || a.Action == StringDistance.DiffAction.Equal), lightGreen)); } } } return(tb); }
public TypeInstancesChangesTS Sync(string type, string culture) { Type t = TypeLogic.GetType(type); var c = CultureInfo.GetCultureInfo(culture); int totalInstances; var changes = TranslatedInstanceSynchronizer.GetTypeInstanceChangesTranslated(TranslationServer.Translator, t, c, out totalInstances); var sd = new StringDistance(); return(new TypeInstancesChangesTS { MasterCulture = TranslatedInstanceLogic.DefaultCulture.Name, Routes = TranslatedInstanceLogic.TranslateableRoutes.GetOrThrow(t).ToDictionary(a => a.Key.PropertyString(), a => a.Value), TotalInstances = totalInstances, TypeName = t.Name, Instances = changes.Instances.Select(a => new InstanceChangesTS { Instance = a.Instance, RouteConflicts = a.RouteConflicts.ToDictionaryEx( ipr => ipr.Key.RouteRowId(), ipr => new PropertyChangeTS { Support = ipr.Value.ToDictionaryEx(c => c.Key.Name, c => new PropertyRouteConflictTS { Original = c.Value.Original, OldOriginal = c.Value.OldOriginal, OldTranslation = c.Value.OldTranslation, Diff = c.Value.OldOriginal == null || c.Value.Original == null || c.Value.OldOriginal.Equals(c.Value.Original) ? null : sd.DiffText(c.Value.OldOriginal, c.Value.Original), AutomaticTranslation = c.Value.AutomaticTranslation, }) } ) }).ToList() }); }