Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
 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);
         }
     });
 }