/// <summary> /// Convert File Stream to Range Object /// </summary> /// <param name="stream"></param> /// <returns></returns> public static ICollection <Range> ConvertStreamToRange(Stream stream) { using (var wordDoc = WordprocessingDocument.Open(stream, true)) { MainDocumentPart mainPart = wordDoc.MainDocumentPart; var document = mainPart.Document; var comments = mainPart.WordprocessingCommentsPart.Comments.ChildElements; foreach (Comment comment in comments) { CommentRange commentRange = new CommentRange(); commentRange.Id = int.Parse(comment.Id); commentRange.Initials = comment.Initials; commentRange.Date = comment.Date; commentRange.Author = comment.Author; commentRange.Text = comment.InnerText; OpenXmlElement rangeStart = document.Descendants <CommentRangeStart>().Where(c => c.Id.Value == comment.Id.Value).FirstOrDefault(); List <OpenXmlElement> referenced = new List <OpenXmlElement>(); List <Range> ranges = new List <Range>(); rangeStart = rangeStart.NextSibling(); while (!(rangeStart is CommentRangeEnd)) { referenced.Add(rangeStart); rangeStart = rangeStart.NextSibling(); ranges.Add(new Range { Text = rangeStart.InnerText }); } } return(null); } }
/// <summary> /// Convert Stream to CommentRange /// </summary> /// <param name="stream"></param> /// <returns></returns> public static ICollection <CommentRange> ConvertStreamToCommentRange(Stream stream) { List <CommentRange> commentRanges = new List <CommentRange>(); using (var wordDoc = WordprocessingDocument.Open(stream, true)) { MainDocumentPart mainPart = wordDoc.MainDocumentPart; var document = mainPart.Document; if (mainPart.WordprocessingCommentsPart == null) { return(commentRanges); } var comments = mainPart.WordprocessingCommentsPart.Comments.ChildElements; foreach (Comment comment in comments) { CommentRange commentRange = new CommentRange(); commentRange.Id = int.Parse(comment.Id); //comment id is started from 0 commentRange.Initials = comment.Initials; commentRange.Date = comment.Date; commentRange.Author = comment.Author; commentRange.Text = comment.InnerText; OpenXmlElement rangeStart = document.Descendants <CommentRangeStart>().Where(c => c.Id.Value == comment.Id.Value).FirstOrDefault(); rangeStart = rangeStart.NextSibling(); List <OpenXmlElement> referenced = new List <OpenXmlElement>(); //append range text until the commentRangeEnd with the same comment id while (!(rangeStart is CommentRangeEnd && ((CommentRangeEnd)rangeStart).Id.Value == comment.Id.Value)) { referenced.Add(rangeStart); rangeStart = rangeStart.NextSibling(); } foreach (var ele in referenced) { if (!string.IsNullOrWhiteSpace(ele.InnerText)) { commentRange.CommentedText += ele.InnerText; } } commentRanges.Add(commentRange); } return(commentRanges); } }
public void ShiftLineNumber(int amount) { LineNumber += amount; Range?.ShiftLineNumber(amount); CommentRange?.ShiftLineNumber(amount); ContentRange?.ShiftLineNumber(amount); IndentationRange?.ShiftLineNumber(amount); MatchedSyntax?.Result?.Matches?.ForEach(m => { var expression = (m as ExpressionParseMatch)?.Expression; if (expression != null) { expression.GetAllExpressions().ForEach(expr => expr.Range.ShiftLineNumber(amount)); } else { m.Range.ShiftLineNumber(amount); } }); }