private InlineItemLine[] AddLineNumber(IHighlightRawInfo infor, InlineItemLine[] lines)
        {
            var startLine   = infor.StartLineNumber;
            int i           = 0;
            var offsets     = infor.Offsets ?? lines.Select(n => i++).ToArray();
            var offsetIndex = 0;

            int num = 0, preNum = 0;

            foreach (var line in lines)
            {
                if (offsets.Count() > offsetIndex)
                {
                    num    = startLine + offsets.ElementAt(offsetIndex++);
                    preNum = num;
                }
                else
                {
                    num    = preNum + 1;
                    preNum = num;
                }
                line.AddBeginning(CreateRun("\t", regularWeight));
                line.AddBeginning(CreateLineNumberHyperLink(num));
            }
            return(lines);
        }
        private Span ClearSpan(IHighlightRawInfo inforValue, Span span, IEnumerable <int> emptyLineOffsets)
        {
            var runs = RemoveEmptyLines(inforValue, span.Inlines.Cast <Run>(), emptyLineOffsets).ToArray();

            span.Inlines.Clear();
            span.Inlines.AddRange(runs);
            return(span);
        }
 private IEnumerable <InlineItemLine> AlignIndention(InlineItemLine[] lines, IHighlightRawInfo info)
 {
     if (lines.Any())
     {
         var lastHead  = lines.Last().GetHeadingWhiteSpace();
         var firstHead = lines.First().GetHeadingWhiteSpace();
         if (firstHead.Equals(string.Empty) && !lastHead.Equals(string.Empty))
         {
             lines.First().AddBeginning(CreateRun(lastHead, regularWeight));
         }
     }
     return(lines);
 }
        private IEnumerable <Inline> RemoveEmptyLines(IHighlightRawInfo inforValue, IEnumerable <Run> terms,
                                                      IEnumerable <int> emptyLineOffsets)
        {
            var items = new List <Inline>();

            var lines = BreakToRunLines(terms).Select(l => l.RemoveEmptyRun()).ToArray();

            lines = lines.Where(l => !l.IsEmpty()).ToArray();
            lines = AddEmptyLines(lines.ToList(), emptyLineOffsets).ToArray();

            if (inforValue.IndOption == IndentionOption.NoIndention)
            {
                lines = lines.Select(l => l.RemoveHeadingWhiteSpace()).ToArray();
            }

            lines = AddLineNumber(inforValue, RemoveHeadingAndTrailingEmptyLines(AlignIndention(lines, inforValue)));
            foreach (var line in lines)
            {
                items.AddRange(line.GetItems());
                items.Add(CreateRun(Environment.NewLine, regularWeight));
            }
            return(items);
        }
        private IEnumerable<Inline> RemoveEmptyLines(IHighlightRawInfo inforValue, IEnumerable<Run> terms, 
            IEnumerable<int> emptyLineOffsets)
        {
            var items = new List<Inline>();

            var lines = BreakToRunLines(terms).Select(l => l.RemoveEmptyRun()).ToArray();
            lines = lines.Where(l => !l.IsEmpty()).ToArray();
            lines = AddEmptyLines(lines.ToList(), emptyLineOffsets).ToArray();

            if (inforValue.IndOption == IndentionOption.NoIndention)
            {
                lines = lines.Select(l => l.RemoveHeadingWhiteSpace()).ToArray();
            }

            lines = AddLineNumber(inforValue, RemoveHeadingAndTrailingEmptyLines(AlignIndention(lines, inforValue)));
            foreach (var line in lines)
            {
                items.AddRange(line.GetItems());
                items.Add(CreateRun(Environment.NewLine, regularWeight));
            }
            return items;
        }
 private Span ClearSpan(IHighlightRawInfo inforValue, Span span, IEnumerable<int> emptyLineOffsets)
 {
     var runs = RemoveEmptyLines(inforValue, span.Inlines.Cast<Run>(), emptyLineOffsets).ToArray();
     span.Inlines.Clear();
     span.Inlines.AddRange(runs);
     return span;
 }
 private IEnumerable<InlineItemLine> AlignIndention(InlineItemLine[] lines, IHighlightRawInfo info)
 {
     if (lines.Any())
     {
         var lastHead = lines.Last().GetHeadingWhiteSpace();
         var firstHead = lines.First().GetHeadingWhiteSpace();
         if (firstHead.Equals(string.Empty) && !lastHead.Equals(string.Empty))
         {
             lines.First().AddBeginning(CreateRun(lastHead, regularWeight));
         }
     }
     return lines;
 }
 private void AddLineNumberHyperlinks(IHighlightRawInfo infor, int num, InlineItemLine line)
 {
     foreach (var item in line.GetItems())
      {
          var run = item as Run;
          if (run != null)
              AddLineNumberHyperlink(run, num, infor);
      }
 }
 private void AddLineNumberHyperlink(Run run, int number, IHighlightRawInfo infor)
 {
     run.MouseUp += delegate(object sender, MouseButtonEventArgs e)
     {
         if (e.ClickCount == 1 && e.LeftButton == MouseButtonState.Released)
         {
             FileOpener.OpenFile(infor.FullFilePath, number);
         }
     };
 }
示例#10
0
        private InlineItemLine[] AddLineNumber(IHighlightRawInfo infor, InlineItemLine[] lines)
        {
            var startLine = infor.StartLineNumber;
             int i = 0;
             var offsets = infor.Offsets ?? lines.Select(n => i ++).ToArray();
             var offsetIndex = 0;

             int num = 0, preNum = 0;
             foreach (var line in lines)
             {
                 if (offsets.Count() > offsetIndex)
                 {
                     num = startLine + offsets.ElementAt(offsetIndex++);
                     preNum = num;
                 }
                 else
                 {
                     num = preNum + 1;
                     preNum = num;
                 }
                line.AddBeginning(CreateRun("\t", regularWeight));
                line.AddBeginning(CreateRun(num.ToString(), regularWeight));
                AddLineNumberHyperlinks(infor, num, line);
             }
             return lines;
        }