private void renderDiff(TextEditor textEditor, IEnumerable <DiffPiece> diff, MarkBackgroundRenderer marker) { foreach (var line in diff) { if (line.Position == null) { continue; } int offset = textEditor.Document.GetOffset((int)line.Position, 1); switch (line.Type) { case ChangeType.Deleted: { marker.AddOffsetToMark(new MarkBackgroundRenderer.Mark { Offset = offset, Length = line.Text.Length, Brush = new SolidColorBrush(Color.FromArgb(255, 255, 200, 100)) }); break; } case ChangeType.Inserted: { marker.AddOffsetToMark(new MarkBackgroundRenderer.Mark { Offset = offset, Length = line.Text.Length, Brush = new SolidColorBrush(Color.FromArgb(255, 255, 255, 0)) }); break; } case ChangeType.Unchanged: { continue; } case ChangeType.Modified: { marker.AddOffsetToMark(new MarkBackgroundRenderer.Mark { Offset = offset, Length = line.Text.Length, Brush = new SolidColorBrush(Color.FromArgb(255, 220, 220, 128)) }); break; //foreach (DiffPiece piece in line.SubPieces) //{ // Console.WriteLine(); //} } case ChangeType.Imaginary: { //deleted, shown as deleted in other pane //could insert imaginary line, but that's work... break; } } } }
void validationUpdateTimer_Tick(object sender, EventArgs e) { Debug.Assert(_editor != null); _lstErrors.Items.Clear(); _errorMarker.ClearMarks(); try { if (_validationData.DoNotValidate) { var i1 = new ValidationIssue(ValidationIssue.Type.Information, 0, 0, "Validation is turned off.\nTo activate, click in ribbon on 'Validation' tab and select 'Check wellformedness' or 'Validate against schema'."); _lstErrors.Items.Add(i1); } else if (_validationData.CheckWellformedness) { try { XmlDocument xmlDoc = _editor.XmlEditor.Text.ToXmlDocument(); //TODO make async var i = new ValidationIssue(ValidationIssue.Type.Information, 0, 0, "XML is wellformed"); _lstErrors.Items.Add(i); } catch (XmlException ex) { var i = new ValidationIssue(ValidationIssue.Type.Error, ex.LineNumber, ex.LinePosition, ex.Message); _lstErrors.Items.Add(i); } } else if (_validationData.CheckXsd) { string xsdFile = _validationData.Xsd; if (!FileHelper.FileExists(xsdFile)) { var i = new ValidationIssue(ValidationIssue.Type.Warning, 0, 0, $"The file '{xsdFile}' does not exist, or the path is invalid"); _lstErrors.Items.Add(i); return; } XsdValidationResult result = XsdValidationHelper.Instance.ValidateInstance( xsdFile, _editor.XmlEditor.Text); if (result.Results.Count == 0) { var i = new ValidationIssue(ValidationIssue.Type.Information, 0, 0, "XML is valid"); _lstErrors.Items.Add(i); } else { foreach (var x in result.Results) { _lstErrors.Items.Add(x); } } } } catch (Exception ex) { var i = new ValidationIssue(ValidationIssue.Type.Error, 0, 0, "Error while validating file: " + ex.Message); _lstErrors.Items.Add(i); } foreach (var item in _lstErrors.Items) { var error = item as ValidationIssue; if (error != null) { if (error.IssueType != ValidationIssue.Type.Information) { int offset = error.Line == 0 ? 0 : _editor.XmlEditor.Document.GetOffset(error.Line, error.Column); _errorMarker.AddOffsetToMark(new MarkBackgroundRenderer.Mark { Offset = offset, Length = 1, Brush = new SolidColorBrush(Color.FromArgb(0x40, 0xFF, 0, 0)) }); } } } }