Inheritance: Inline, ISpan
コード例 #1
0
ファイル: NodeHelper.cs プロジェクト: nmetulev/Modern-Gitter
        public static Inline GenerateCodeBlockForNode(HtmlNode node)
        {
            if (node.Name == "span" && node.ChildNodes.Count > 1)
            {
                var s = new Span();

                foreach (var childNode in node.ChildNodes)
                {
                    var children = GenerateCodeBlockForNode(childNode);
                    s.Inlines.Add(children);
                }

                return s;
            }

            string text = WebUtility.HtmlDecode(node.InnerText);
            var foregroundColor = RetrieveFormattedCodeColor(node, text);

            var content = new Run
            {
                Text = text,
                FontSize = 14,
                Foreground = new SolidColorBrush(foregroundColor)
            };

            return content;
        }
コード例 #2
0
        public GroupBoxContainer(Span span)
        {
            var grid = new Grid();
            grid.RowDefinitions.Add(new RowDefinition
            {
                Height = GridLength.Auto
            });
            grid.RowDefinitions.Add(new RowDefinition());

            _titleBlock = new TextBlock();
            grid.Children.Add(_titleBlock);

            var border = new Border
            {
                BorderBrush = new SolidColorBrush(Colors.Gray),
                BorderThickness = new Thickness(1, 0, 0, 1),
                Margin = new Thickness(5, 0, 0, 5),
                Padding = new Thickness(3, 0, 0, 3)
            };
            Grid.SetRow(border, 1);
            grid.Children.Add(border);

            var richTextBlock = new RichTextBlock()
            {
                IsTextSelectionEnabled = false
            };
            border.Child = richTextBlock;
            _innerContainer = new RichTextBlockContainer(richTextBlock);

            span.Inlines.Add(new InlineUIContainer()
            {
                Child = grid
            });
        }
コード例 #3
0
 internal ViewNiconicoWebTextArgs(bool viewFriendly, bool enableFontElementSize, Span rootSpan,Action<object, IReadOnlyNiconicoWebTextSegment> clickAction)
 {
     this.ViewFriendly = viewFriendly;
     this.EnableFontElementSize = enableFontElementSize;
     this.ClicAction = clickAction;
     this.RootSpan = rootSpan;
 }
コード例 #4
0
        internal static doc.Span RenderSpannableStringStyle(this SpannableStringStyle style)
        {
            doc.Span result;
            switch (style.Type)
            {
            case SpannableStringTypes.B:
            case SpannableStringTypes.Bold:
                result = new doc.Span {
                    FontWeight = FontWeights.Bold
                };
                break;

            case SpannableStringTypes.I:
            case SpannableStringTypes.Italic:
                result = new doc.Span {
                    FontStyle = FontStyle.Italic
                };
                break;

            case SpannableStringTypes.Font:
                var span = new doc.Span();
                foreach (var parameter in style.Parameters)
                {
                    switch (parameter.Key)
                    {
                    case SpannableStringParameterTypes.Size:
                        if (double.TryParse(parameter.Value, out double fontSize))
                        {
                            span.FontSize = fontSize;
                        }
                        break;

                    case SpannableStringParameterTypes.Color:
                        span.Foreground = new media.SolidColorBrush(Color.Parse(parameter.Value).Render());
                        break;

                    case SpannableStringParameterTypes.Face:
                        // TODO implement font faces.
                        break;

                    default: break;
                    }
                }

                result = span;
                break;

            default:
                result = new doc.Span();
                break;
            }

            if (style.InnerText.HasValue())
            {
                result.Inlines.Add(new doc.Run {
                    Text = style.InnerText
                });
            }
            return(result);
        }
コード例 #5
0
ファイル: InlineWrapper.cs プロジェクト: acedened/TheChan
 private Span CreateSpanWithChildren() {
     var span = new Span();
     foreach (var inline in Children) {
         this._styleAction?.Invoke(inline);
         span.Inlines.Add(inline);
     }
     return span;
 }
コード例 #6
0
        public override Inline ConvertToInline()
        {
            var s = new Windows.UI.Xaml.Documents.Span();

            foreach (var n in Nodes)
            {
                s.Inlines.Add(n.ConvertToInline());
            }

            if (Nodes.Count > 0 && Nodes[Nodes.Count - 1].GetType() != typeof(Block))
            {
                s.Inlines.Add(new Run {
                    Text = "\n\n"
                });
            }
            return(ApplyStyles(s));
        }
コード例 #7
0
        private static void AddChildren(Span s, HtmlNode node)
        {
            bool added = false;

            foreach (HtmlNode child in node.ChildNodes)
            {
                Inline i = GenerateBlockForNode(child);
                if (i != null)
                {
                    s.Inlines.Add(i);
                    added = true;
                }
            }
            if (!added)
            {
                s.Inlines.Add(new Run() { Text = CleanText(node.InnerText) });
            }
        }
コード例 #8
0
 public object Convert(object value, Type targetType, object parameter, string language)
 {
     if (value == null)
     {
         return null;
     }
     var span = new Span();
     string s = (string)value;
     int index = 0;
     while ((index = s.IndexOf("#")) >= 0)
     {
         if (s.Substring(index + 1).IndexOf("#") >= 0)
         {
             if (index != 0)
             {
                 Run r = new Run();
                 r.Text = s.Substring(0, index);
                 span.Inlines.Add(r);
                 s = s.Substring(index);
                 index = 0;
             }
             int index2 = s.Substring(index + 1).IndexOf("#");
             if (index2 > 0)
             {
                 string highlight = s.Substring(index, index2 + index + 2);
                 Run high = new Run();
                 high.Text = highlight;
                 high.Foreground = TagColor;
                 span.Inlines.Add(high);
                 s = s.Substring(index2 + index + 2);
                 index = 0;
             }
         }
         else
         {
             break;
         }
     }
     Run left = new Run();
     left.Text = s;
     span.Inlines.Add(left);
     return span;
 }
コード例 #9
0
        public override Inline ConvertToInline()
        {
            var s = new Windows.UI.Xaml.Documents.Span();

            bool donefirst = false;

            foreach (var n in Nodes)
            {
                if (Pad && donefirst)
                {
                    s.Inlines.Add(new Windows.UI.Xaml.Documents.Run {
                        Text = " "
                    });
                }
                s.Inlines.Add(n.ConvertToInline());
                donefirst = true;
            }

            return(ApplyStyles(s));
        }
コード例 #10
0
 private static Inline GenerateSpanWNewLine(HtmlNode node)
 {
     Span s = new Span();
     AddChildren(s, node);
     if (s.Inlines.Count > 0)
         s.Inlines.Add(new LineBreak());
     return s;
 }
コード例 #11
0
 private static Inline GenerateLI(HtmlNode node)
 {
     Span s = new Span();
     InlineUIContainer iui = new InlineUIContainer();
     Ellipse ellipse = new Ellipse();
     ellipse.Fill = new SolidColorBrush(Colors.Black);
     ellipse.Width = 6;
     ellipse.Height = 6;
     ellipse.Margin = new Thickness(-30, 0, 0, 1);
     iui.Child = ellipse;
     s.Inlines.Add(iui);
     AddChildren(s, node);
     s.Inlines.Add(new LineBreak());
     return s;
 }
コード例 #12
0
 private static Inline GenerateIFrame(HtmlNode node)
 {
     try
     {
         Span s = new Span();
         s.Inlines.Add(new LineBreak());
         InlineUIContainer iui = new InlineUIContainer();
         WebView ww = new WebView() { Source = new Uri(node.Attributes["src"].Value, UriKind.Absolute), Width = Int32.Parse(node.Attributes["width"].Value), Height = Int32.Parse(node.Attributes["height"].Value) };
         iui.Child = ww;
         s.Inlines.Add(iui);
         s.Inlines.Add(new LineBreak());
         return s;
     }
     catch (Exception ex)
     {
         return null;
     }
 }
コード例 #13
0
 private static Span GenerateH3(HtmlNode node)
 {
     Span s = new Span();
     s.Inlines.Add(new LineBreak());
     Bold bold = new Bold();
     Run r = new Run() { Text = CleanText(node.InnerText) };
     bold.Inlines.Add(r);
     s.Inlines.Add(bold);
     s.Inlines.Add(new LineBreak());
     return s;
 }
        private void LogMessage(string format, params object[] args)
        {
            var span = new Span();
            var run = new Run();
            run.Text = string.Format(format, args);
            
            span.Inlines.Add(run);
            span.Inlines.Add(new LineBreak());

            OutputText.Inlines.Insert(0, span);
        }
コード例 #15
0
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            if (value == null)
            {
                return null;
            }

            var span = new Span();
            string s = (string)value;
            int index = 0;
            while ((index = s.IndexOf("#")) >= 0)
            {
                if (s.Substring(index + 1).IndexOf("#") >= 0)
                {
                    if (index != 0)
                    {
                        Run r = new Run();
                        r.Text = s.Substring(0, index);
                        span.Inlines.Add(r);
                        s = s.Substring(index);
                        index = 0;
                    }
                    int index2 = s.Substring(index + 1).IndexOf("#");
                    if (index2 > 0)
                    {
                        string highlight = s.Substring(index, index2 + index + 2);
                        Run high = new Run();
                        high.Text = highlight;
                        high.Foreground = new SolidColorBrush(Color.FromArgb(255, 80, 125, 175));
                        span.Inlines.Add(high);
                        s = s.Substring(index2 + index + 2);
                        index = 0;
                    }

                }
                else
                {
                    break;
                }

                //string s = (string)value;
                //StackPanel sp = new StackPanel();
                //sp.Orientation = Orientation.Horizontal;
                //int index = 0;
                //while ((index = s.IndexOf("#")) >= 0)
                //{
                //    if (s.Substring(index + 1).IndexOf("#") >= 0)
                //    {
                //        if (index != 0)
                //        {
                //            TextBlock tb0 = new TextBlock();
                //            tb0.Text = s.Substring(0, index);
                //            sp.Children.Add(tb0);
                //            s = s.Substring(index);
                //            index = 0;
                //        }
                //        int index2 = s.Substring(index + 1).IndexOf("#");
                //        string highlight = s.Substring(index, index2 + index + 2);
                //        TextBlock tb1 = new TextBlock();
                //        tb1.Text = highlight;
                //        tb1.Foreground = new SolidColorBrush(Color.FromArgb(255, 80, 125, 175));
                //        sp.Children.Add(tb1);
                //        s = s.Substring(index2 + index + 2);
                //        index = 0;
                //    }
                //}
                //TextBlock tb = new TextBlock();
                //tb.Text = s;
                //sp.Children.Add(tb);
                //tb = new TextBlock();
                //tb.Foreground = new SolidColorBrush(Color.FromArgb(255, 24, 56, 99));
                //sp.Children.Add(tb);
                //return sp;
            }
            Run left = new Run();
            left.Text = s;
            span.Inlines.Add(left);
            return span;
        }
        /// <summary>
        /// Clears and populates the provided table with rows that have the following syntax:
        /// [row #]    [state of new value]
        ///
        /// If the state of a value has changed, the value will be bolded.
        /// </summary>
        /// <param name="table">Table will be cleared and new rows will populate this table.</param>
        /// <param name="newValues">The new boolean values</param>
        /// <param name="oldValues">The boolean values that the new ones are being compared to</param>
        /// <param name="trueValue">Text if the new value is TRUE</param>
        /// <param name="falseValue">Text if the new vlaue is FALSE</param>
        public static Boolean CreateBooleanChartInTable(
            InlineCollection table,
            List<Boolean> newValues,
            List<Boolean> oldValues,
            String trueValue,
            String falseValue)
        {
            Boolean isBooleanChartCreated = false;

            // Make sure there are at least newValues to check or that there are the same number of old values as new values
            if ((newValues != null) && ((oldValues == null) || (newValues.Count == oldValues.Count)))
            {
                table.Clear();

                // Each new value has it's own row
                for (int i = 0; i < (int)newValues.Count; i += 1)
                {
                    var line = new Span();

                    // Row #
                    var block = new Run();
                    block.Text = (i + 1).ToString("D", NumberFormatInfo.InvariantInfo);
                    line.Inlines.Add(block);

                    // Space between row # and the value (simulates a column)
                    block = new Run();
                    block.Text = "    ";
                    line.Inlines.Add(block);

                    // Print the textual form of TRUE/FALSE values
                    block = new Run();
                    block.Text = newValues[i] ? trueValue : falseValue;

                    // Bold values that have changed
                    if ((oldValues != null) && (oldValues[i] != newValues[i]))
                    {
                        var bold = new Bold();
                        bold.Inlines.Add(block);
                        line.Inlines.Add(bold);
                    }
                    else
                    {
                        line.Inlines.Add(block);
                    }

                    line.Inlines.Add(new LineBreak());

                    table.Add(line);
                }

                isBooleanChartCreated = true;
            }

            return isBooleanChartCreated;
        }
コード例 #17
0
        private static void ParseText(XElement element, InlineCollection inlines, HtmlLabel label)
        {
            if (element == null)
            {
                return;
            }

            InlineCollection currentInlines = inlines;
            var elementName = element.Name.ToString().ToUpperInvariant();

            switch (elementName)
            {
            case _elementA:
                var        link         = new Hyperlink();
                XAttribute href         = element.Attribute("href");
                var        unescapedUri = Uri.UnescapeDataString(href?.Value);
                if (href != null)
                {
                    try
                    {
                        link.NavigateUri = new Uri(unescapedUri);
                    }
                    catch (FormatException) { /* href is not valid */ }
                }
                link.Click += (sender, e) =>
                {
                    sender.NavigateUri = null;
                    RendererHelper.HandleUriClick(label, unescapedUri);
                };
                if (!label.LinkColor.IsDefault)
                {
                    link.Foreground = label.LinkColor.ToBrush();
                }
                if (!label.UnderlineText)
                {
                    link.UnderlineStyle = UnderlineStyle.None;
                }
                inlines.Add(link);
                currentInlines = link.Inlines;
                break;

            case _elementB:
            case _elementStrong:
                var bold = new Bold();
                inlines.Add(bold);
                currentInlines = bold.Inlines;
                break;

            case _elementI:
            case _elementEm:
                var italic = new Italic();
                inlines.Add(italic);
                currentInlines = italic.Inlines;
                break;

            case _elementU:
                var underline = new Underline();
                inlines.Add(underline);
                currentInlines = underline.Inlines;
                break;

            case _elementBr:
                inlines.Add(new LineBreak());
                break;

            case _elementP:
                // Add two line breaks, one for the current text and the second for the gap.
                if (AddLineBreakIfNeeded(inlines))
                {
                    inlines.Add(new LineBreak());
                }

                var paragraphSpan = new Span();
                inlines.Add(paragraphSpan);
                currentInlines = paragraphSpan.Inlines;
                break;

            case _elementLi:
                inlines.Add(new LineBreak());
                inlines.Add(new Run {
                    Text = " • "
                });
                break;

            case _elementUl:
            case _elementDiv:
                _ = AddLineBreakIfNeeded(inlines);
                var divSpan = new Span();
                inlines.Add(divSpan);
                currentInlines = divSpan.Inlines;
                break;
            }
            foreach (XNode node in element.Nodes())
            {
                if (node is XText textElement)
                {
                    currentInlines.Add(new Run {
                        Text = textElement.Value
                    });
                }
                else
                {
                    ParseText(node as XElement, currentInlines, label);
                }
            }

            // Add newlines for paragraph tags
            if (elementName == "ElementP")
            {
                currentInlines.Add(new LineBreak());
            }
        }
コード例 #18
0
        private static void CreateElement(InlineCollection parent, Node node, RichTextBlockStatus status)
        {
            switch (node)
            {
                case Element element:
                    switch (element.TagName.ToLower())
                    {
                        case "a":
                            {
                                // We want to change BaseUri easily, so we use `GetAttribute("href")` instead of `HtmlAnchorElement.Href`
                                var href = element.GetAttribute("href");

                                if (!status.TryCreateUri(href, out var uri))
                                    break;

                                parent.Add(new Run() { Text = " " });

                                var hyperlink = new Hyperlink()
                                {
                                    NavigateUri = uri,
                                    Foreground = status.Foreground
                                };

                                foreach (var child in element.ChildNodes)
                                {
                                    switch (child)
                                    {
                                        case HtmlImageElement childElement:
                                            if (CreateImage(element, status) is Image image)
                                            {
                                                if (hyperlink.Inlines.Count != 0)
                                                {
                                                    hyperlink.SetUri(href);
                                                    status.Hyperlinks.Add(hyperlink);
                                                    parent.Add(hyperlink);
                                                }

                                                var button = new HyperlinkButton()
                                                {
                                                    NavigateUri = uri,
                                                    Content = image,
                                                    RequestedTheme = status.RequestedTheme
                                                };
                                                button.SetUri(href);
                                                status.HyperlinkButtons.Add(button);
                                                parent.Add(new InlineUIContainer() { Child = button });

                                                hyperlink = new Hyperlink()
                                                {
                                                    NavigateUri = uri,
                                                    Foreground = status.Foreground
                                                };
                                            }
                                            break;
                                        default:
                                            CreateElement(hyperlink.Inlines, child, status);
                                            break;
                                    }
                                    break;
                                }

                                if (hyperlink.Inlines.Count != 0)
                                {
                                    hyperlink.SetUri(href);
                                    status.Hyperlinks.Add(hyperlink);
                                    parent.Add(hyperlink);
                                }

                                parent.Add(new Run() { Text = " " });
                            }
                            break;
                        case "img":
                            {
                                if (CreateImage(element, status) is Image image)
                                    parent.Add(new InlineUIContainer() { Child = image });
                            }
                            break;
                        case "strong":
                        case "b":
                            {
                                var span = new Span() { FontWeight = FontWeights.Bold };
                                CreateChildren(span.Inlines, element, status);
                                parent.Add(span);
                            }
                            break;
                        case "div":
                        case "font":
                        case "p":
                        case "span":
                            {
                                var span = new Span();
                                foreach (var s in ParseStyle(element.GetAttribute("style")))
                                    switch (s.Key)
                                    {
                                        case "font-size":
                                            {
                                                var value = s.Value;

                                                double fontSize;
                                                if (value.EndsWith("px"))
                                                    fontSize = double.Parse(value.Remove(value.Length - 2));
                                                else if (value.EndsWith("%"))
                                                    fontSize = 14 * double.Parse(value.Remove(value.Length - 1)) / 100;
                                                else
                                                    fontSize = 14 * double.Parse(value);

                                                span.FontSize = fontSize;
                                            }
                                            break;
                                        case "font-weight":
                                            switch (s.Value)
                                            {
                                                case "bold":
                                                    span.FontWeight = FontWeights.Bold;
                                                    break;
                                            }
                                            break;
                                    }

                                CreateChildren(span.Inlines, element, status);
                                parent.Add(span);
                            }
                            break;
                        case "br":
                            if (element.NextSibling is Text nextText &&
                                nextText.Data.StartsWith("\n"))
                                break;

                            parent.Add(new LineBreak());
                            break;
                        case "hr":
                            parent.Add(new LineBreak());

                            var line = new Border()
                            {
                                BorderThickness = new Thickness(0, 1, 0, 0),
                                BorderBrush = status.Foreground,
                                Margin = new Thickness(8, 0, 8, 0),
                                Height = 1,
                            };

                            if (status.ActualWidth > 16)
                                line.Width = status.ActualWidth - 16;

                            status.Lines.Add(line);
                            parent.Add(new InlineUIContainer() { Child = line });

                            parent.Add(new LineBreak());
                            break;
                        case "iframe": // Ignore
                        case "script":
                        case "noscript":
                            break;
#if DEBUG
                        default:
                            Debug.WriteLine($"Ignore unknown tag {element.TagName}");
                            break;
#endif

                    }
                    break;
                case Text text:
                    parent.Add(new Run() { Text = text.Data });
                    break;
            }
        }
コード例 #19
0
        public static void CreateBooleanTable(
            InlineCollection Table,
            bool[] NewValues,
            bool[] OldValues,
            string IndexTitle,
            string ValueTitle,
            string TrueValue,
            string FalseValue
            )
        {
            Table.Clear();

            for (var i = 0; i < NewValues.Length; i += 1)
            {
                var line = new Span();
                var block = new Run();
                block.Text = (i + 1).ToString("###");
                line.Inlines.Add(block);

                block = new Run();
                block.Text = "    ";
                line.Inlines.Add(block);

                block = new Run();
                block.Text = NewValues[i] ? TrueValue : FalseValue;

                if ((OldValues != null) && (OldValues[i] != NewValues[i]))
                {
                    var bold = new Bold();
                    bold.Inlines.Add(block);
                    line.Inlines.Add(bold);
                }
                else
                {
                    line.Inlines.Add(block);
                }

                line.Inlines.Add(new LineBreak());

                Table.Add(line);
            }
        }
コード例 #20
0
        private IEnumerable<Inline> ParseMessage(string message) {
            var first = true;
            foreach (var line in message.Split('\n').Select(rawline => ExtraSpacesRegex.Replace(rawline, " "))) {
                if (first && PrefixInline != null) {
                    yield return PrefixInline;
                }
                if (!first && LinebreakHandling == LinebreakHandling.Mimic) {
                    yield return new LineBreak();
                }

                var span = new Span {
                    Foreground = new SolidColorBrush(
                        GreentextRegex.IsMatch(line)
                            ? Colors.MediumSeaGreen
                            : Colors.Black)
                };
                foreach (var inline in BuildLine(line)) {
                    span.Inlines.Add(inline);
                }
                yield return span;

                first = false;
            }
        }
コード例 #21
0
 public SpanContainer(Span span)
 {
     _span = span;
 }
        public static void ParseText(XElement element, InlineCollection inlines, Label label)
        {
            if (element == null)
            {
                return;
            }

            var currentInlines = inlines;
            var elementName    = element.Name.ToString().ToUpper();

            switch (elementName)
            {
            case ElementB:
            case ElementStrong:
                var bold = new Bold();
                inlines.Add(bold);
                currentInlines = bold.Inlines;
                break;

            case ElementI:
            case ElementEm:
                var italic = new Italic();
                inlines.Add(italic);
                currentInlines = italic.Inlines;
                break;

            case ElementU:
                var underline = new Underline();
                inlines.Add(underline);
                currentInlines = underline.Inlines;
                break;

            case ElementBr:
                inlines.Add(new LineBreak());
                break;

            case ElementP:
                // Add two line breaks, one for the current text and the second for the gap.
                if (AddLineBreakIfNeeded(inlines))
                {
                    inlines.Add(new LineBreak());
                }

                var paragraphSpan = new Windows.UI.Xaml.Documents.Span();
                inlines.Add(paragraphSpan);
                currentInlines = paragraphSpan.Inlines;
                break;

            case ElementLi:
                inlines.Add(new LineBreak());
                inlines.Add(new Run {
                    Text = " • "
                });
                break;

            case ElementUl:
            case ElementDiv:
                AddLineBreakIfNeeded(inlines);
                var divSpan = new Windows.UI.Xaml.Documents.Span();
                inlines.Add(divSpan);
                currentInlines = divSpan.Inlines;
                break;
            }
            foreach (var node in element.Nodes())
            {
                if (node is XText textElement)
                {
                    currentInlines.Add(new Run {
                        Text = textElement.Value
                    });
                }
                else
                {
                    ParseText(node as XElement, currentInlines, label);
                }
            }
            // Add newlines for paragraph tags
            if (elementName == "ElementP")
            {
                currentInlines.Add(new LineBreak());
            }
        }
コード例 #23
0
        public virtual void RenderElement(IElement element, ITextContainer parent, RenderContextBase context)
        {
            var parentContainer = (parent as RichTextBlockContainer).Get();

            Span span = new Span();
            Underline underline = null;

            var textDecoration = element.Style("text-decoration");
            if (!string.IsNullOrEmpty(textDecoration))
            {
                if (textDecoration == "underline")
                {
                    underline = new Underline();
                    underline.Inlines.Add(span);
                }
            }

            var color = element.Style("color");
            if (string.IsNullOrEmpty(color) == false)
            {
                color = color.Trim().TrimStart('#');
                if (color.Length == 6)
                {
                    var sR = color.Substring(0, 2);
                    var sG = color.Substring(2, 2);
                    var sB = color.Substring(4, 2);
                    byte r, g, b;
                    if (byte.TryParse(sR, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out r)
                        && byte.TryParse(sG, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out g)
                        && byte.TryParse(sB, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out b))
                    {
                        var value = Color.FromArgb(255, r, g, b);
                        if (value != Colors.White && value != Colors.Black)
                        {
                            if (underline != null)
                            {
                                underline.Foreground = new SolidColorBrush(value);
                            }
                            else
                            {
                                span.Foreground = new SolidColorBrush(value);
                            }
                        }
                    }
                }
            }

            var fontSize = element.Style("font-size");
            if (!string.IsNullOrEmpty(fontSize))
            {
                fontSize = fontSize.Replace("px", "");
                if (underline != null)
                {
                    underline.FontSize = double.Parse(fontSize);
                }
                else
                {
                    span.FontSize = double.Parse(fontSize);
                }
            }

            var fontWeight = element.Style("font-weight");
            if (!string.IsNullOrEmpty(fontWeight))
            {
                if (underline != null)
                {
                    underline.FontWeight = FontWeights.Bold;
                }
                else
                {
                    span.FontWeight = FontWeights.Bold;
                }
            }


            var textAlign = element.Style("text-align");
            if (!string.IsNullOrEmpty(textAlign))
            {
                if (textAlign == "left")
                {
                    parentContainer.TextAlignment = Windows.UI.Xaml.TextAlignment.Left;
                }
                else if (textAlign == "right")
                {
                    parentContainer.TextAlignment = Windows.UI.Xaml.TextAlignment.Right;
                }
                else
                {
                    parentContainer.TextAlignment = Windows.UI.Xaml.TextAlignment.Center;
                }
            }

            var textStyle = element.Style("text-style");
            if (!string.IsNullOrEmpty(textStyle))
            {
                if (textStyle == "italic")
                {
                    if (underline != null)
                    {
                        underline.FontStyle = FontStyle.Italic;
                    }
                    else
                    {
                        span.FontStyle = FontStyle.Italic;
                    }
                }
            }

            if (underline != null)
            {
                parent.Add(underline);
                context.RenderNode(element, new SpanContainer(underline));
            }
            else
            {
                parent.Add(span);
                context.RenderNode(element, new SpanContainer(span));
            }
        }
コード例 #24
0
ファイル: MainPage.xaml.cs プロジェクト: HanxEvo/JMex_win10
 private async Task getMessages()
 {
     while (true)
     {
         if (currentfileName != "") {
             
             String lastname = "";
             HttpWebRequest req = WebRequest.CreateHttp("http://jmex.altervista.org/" + currentfileName);
             req.Method = "GET";
             HttpWebResponse resp = (HttpWebResponse)await req.GetResponseAsync();
             String x = new StreamReader(resp.GetResponseStream()).ReadToEnd();
             JsonObject array = JsonObject.Parse(x);
             JsonArray msgArray = array["messages"].GetArray();
             if (msgArray.Count != lastMsgNumb || currentfileName != lastFileName)
             {
                 messagesPanel.Children.Clear();
                 lastMsgNumb = msgArray.Count;
                 lastFileName = currentfileName;
                 for (uint i = 0; i < msgArray.Count; i++)
                 {
                     TextBlock txtB = new TextBlock();
                     txtB.HorizontalAlignment = HorizontalAlignment.Stretch;
                     JsonObject obj = msgArray.GetObjectAt(i);
                     String user = obj["user"].GetString();
                     String msg = obj["text"].GetString();
                     Span msgContainer = new Span();
                     txtB.Margin = new Thickness(0);
                     if (user != lastname)
                     {
                         
                         Run name = new Run();
                         
                         name.Text =user + Environment.NewLine;
                         name.Foreground = (SolidColorBrush)Application.Current.Resources["SystemControlBackgroundAccentBrush"];
                         if(user == this.user)
                         {
                             FontWeight wh = new FontWeight();
                             wh.Weight = 800;
                             name.FontWeight = wh;
                             
                         }
                         txtB.Margin = new Thickness(0, 8, 0, 0);
                         txtB.Inlines.Add(name);
                         lastname = user;
                     }
                     Run text = new Run();
                     text.Text = msg;
                     txtB.Inlines.Add(text );
                    
                     if(user == this.user)
                     {
                         txtB.TextAlignment = TextAlignment.Right;
                         
                     }
                     messagesPanel.Children.Add(txtB);
                 }
             }
         }
         await Task.Delay(100);
     }
     
 }
コード例 #25
0
 private static Inline GenerateH2(HtmlNode node)
 {
     Span s = new Span() { FontSize = 24 };
     s.Inlines.Add(new LineBreak());
     Run r = new Run() { Text = CleanText(node.InnerText) };
     s.Inlines.Add(r);
     s.Inlines.Add(new LineBreak());
     return s;
 }
コード例 #26
0
 public virtual void RenderElement(IElement element, ITextContainer parent, RenderContextBase context)
 {
     var span = new Span();
     parent.Add(span);
     context.RenderNode(element, new SpanContainer(span));
 }
コード例 #27
0
        private static Inline GenerateHyperLink(HtmlNode node)
        {
            Span s = new Span();
            InlineUIContainer iui = new InlineUIContainer();
            HyperlinkButton hb = new HyperlinkButton() { NavigateUri = new Uri(node.Attributes["href"].Value, UriKind.Absolute), Content = CleanText(node.InnerText) };

            if (node.ParentNode != null && (node.ParentNode.Name == "li" || node.ParentNode.Name == "LI"))
                hb.Style = (Style)Application.Current.Resources["RTLinkLI"];
            else if ((node.NextSibling == null || string.IsNullOrWhiteSpace(node.NextSibling.InnerText)) && (node.PreviousSibling == null || string.IsNullOrWhiteSpace(node.PreviousSibling.InnerText)))
                hb.Style = (Style)Application.Current.Resources["RTLinkOnly"];
            else
                hb.Style = (Style)Application.Current.Resources["RTLink"];

            iui.Child = hb;
            s.Inlines.Add(iui);
            return s;
        }
コード例 #28
0
        private static void AddChildren(Span s, HtmlNode node, string appendString = "")
        {
            bool added = false;

            foreach (HtmlNode child in node.ChildNodes)
            {
                Inline i = GenerateBlockForNode(child);
                if (i != null)
                {
                    s.Inlines.Add(i);
                    added = true;
                }
            }
            if (!added)
            {
                s.Inlines.Add(new Run() { Text = CleanText(node.InnerText)  });
                
            }
            if (!string.IsNullOrEmpty(appendString))
            {
                s.Inlines.Add(new Run() { Text =  appendString });
            }
        }
コード例 #29
0
 private static Inline GenerateImage(HtmlNode node)
 {
     Span s = new Span();
     try
     {
         InlineUIContainer iui = new InlineUIContainer();
         var sourceUri = System.Net.WebUtility.HtmlDecode(node.Attributes["src"].Value);
         Image img = new Image() { Source = new BitmapImage(new Uri(sourceUri, UriKind.Absolute)) };
         img.Stretch = Stretch.Uniform;
         img.VerticalAlignment = VerticalAlignment.Top;
         img.HorizontalAlignment = HorizontalAlignment.Left;
         img.ImageOpened += img_ImageOpened;
         img.ImageFailed += img_ImageFailed;
         iui.Child = img;
         s.Inlines.Add(iui);
         s.Inlines.Add(new LineBreak());
     }
     catch (Exception ex)
     {
     }
     return s;
 }
コード例 #30
0
        private static Inline GenerateHyperLink(HtmlNode node)
        {
            Span s = new Span();
            InlineUIContainer iui = new InlineUIContainer();

            Debug.WriteLine(node.Attributes["href"].Value);
            Hyperlink hb;
            string lk = node.Attributes["href"].Value;
            if (!lk.Contains("http"))
            {
                lk = string.Format("http://ifixit.com/{0}", lk);
            }
            hb = new Hyperlink() { NavigateUri = new Uri(lk, UriKind.RelativeOrAbsolute) };

          
            hb.Inlines.Add(GenerateSpan(node," "));

            //if (node.ParentNode != null && (node.ParentNode.Name == "li" || node.ParentNode.Name == "LI"))
            //    hb.Style = (Style)Application.Current.Resources["RTLinkLI"];
            //else if ((node.NextSibling == null || string.IsNullOrWhiteSpace(node.NextSibling.InnerText)) && (node.PreviousSibling == null || string.IsNullOrWhiteSpace(node.PreviousSibling.InnerText)))
            //    hb.Style = (Style)Application.Current.Resources["RTLinkOnly"];
            //else
            //    hb.Style = (Style)Application.Current.Resources["RTLink"];

            //  iui.Child = hb;

            s.Inlines.Add(hb);
           
            return s;
        }
コード例 #31
0
 private static Inline GenerateSpan(HtmlNode node)
 {
     Span s = new Span();
     AddChildren(s, node);
     return s;
 }
コード例 #32
0
 private static Inline GenerateSpan(HtmlNode node, string appendText)
 {
     Span s = new Span();
     AddChildren(s, node, appendText);
     return s;
 }
コード例 #33
0
 private static Inline GenerateUL(HtmlNode node)
 {
     Span s = new Span();
     s.Inlines.Add(new LineBreak());
     AddChildren(s, node);
     return s;
 }
コード例 #34
0
 private static Span GenerateH3(HtmlNode node)
 {
     Span s = new Span() { FontSize = (double)Application.Current.Resources["H3"] };
     s.Inlines.Add(new LineBreak());
     Bold bold = new Bold();
     Run r = new Run() { Text = CleanText(node.InnerText) };
     bold.Inlines.Add(r);
     s.Inlines.Add(bold);
     s.Inlines.Add(new LineBreak());
     return s;
 }
コード例 #35
0
        private static void ParseText(XElement element, InlineCollection inlines, HtmlLabel label)
        {
            if (element == null)
            {
                return;
            }

            InlineCollection currentInlines = inlines;
            var elementName = element.Name.ToString().ToUpperInvariant();

            switch (elementName)
            {
            case _elementA:
                var        link = new Hyperlink();
                XAttribute href = element.Attribute("href");
                if (href != null)
                {
                    try
                    {
                        link.NavigateUri = new Uri(href.Value);
                    }
                    catch (FormatException) { /* href is not valid */ }
                }
                link.Click += (sender, e) =>
                {
                    sender.NavigateUri = null;
                    if (href == null)
                    {
                        return;
                    }

                    var args = new WebNavigatingEventArgs(WebNavigationEvent.NewPage, new UrlWebViewSource {
                        Url = href.Value
                    }, href.Value);
                    label.SendNavigating(args);

                    if (args.Cancel)
                    {
                        return;
                    }

                    Device.OpenUri(new Uri(href.Value));
                    label.SendNavigated(args);
                };
                inlines.Add(link);
                currentInlines = link.Inlines;
                break;

            case _elementB:
            case _elementStrong:
                var bold = new Bold();
                inlines.Add(bold);
                currentInlines = bold.Inlines;
                break;

            case _elementI:
            case _elementEm:
                var italic = new Italic();
                inlines.Add(italic);
                currentInlines = italic.Inlines;
                break;

            case _elementU:
                var underline = new Underline();
                inlines.Add(underline);
                currentInlines = underline.Inlines;
                break;

            case _elementBr:
                inlines.Add(new LineBreak());
                break;

            case _elementP:
                // Add two line breaks, one for the current text and the second for the gap.
                if (AddLineBreakIfNeeded(inlines))
                {
                    inlines.Add(new LineBreak());
                }

                var paragraphSpan = new Span();
                inlines.Add(paragraphSpan);
                currentInlines = paragraphSpan.Inlines;
                break;

            case _elementLi:
                inlines.Add(new LineBreak());
                inlines.Add(new Run {
                    Text = " • "
                });
                break;

            case _elementUl:
            case _elementDiv:
                _ = AddLineBreakIfNeeded(inlines);
                var divSpan = new Span();
                inlines.Add(divSpan);
                currentInlines = divSpan.Inlines;
                break;
            }
            foreach (XNode node in element.Nodes())
            {
                if (node is XText textElement)
                {
                    currentInlines.Add(new Run {
                        Text = textElement.Value
                    });
                }
                else
                {
                    ParseText(node as XElement, currentInlines, label);
                }
            }
            // Add newlines for paragraph tags
            if (elementName == "ElementP")
            {
                currentInlines.Add(new LineBreak());
            }
        }
コード例 #36
0
 private static Inline GenerateH1(HtmlNode node)
 {
     //(Style)Application.Current.Resources["RTLinkLI"]
     Span s = new Span() { FontSize = (double)Application.Current.Resources["H1"] };
     s.Inlines.Add(new LineBreak());
     Run r = new Run() { Text = CleanText(node.InnerText) };
     s.Inlines.Add(r);
     s.Inlines.Add(new LineBreak());
     return s;
 }