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; }
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 }); }
internal ViewNiconicoWebTextArgs(bool viewFriendly, bool enableFontElementSize, Span rootSpan,Action<object, IReadOnlyNiconicoWebTextSegment> clickAction) { this.ViewFriendly = viewFriendly; this.EnableFontElementSize = enableFontElementSize; this.ClicAction = clickAction; this.RootSpan = rootSpan; }
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); }
private Span CreateSpanWithChildren() { var span = new Span(); foreach (var inline in Children) { this._styleAction?.Invoke(inline); span.Inlines.Add(inline); } return span; }
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)); }
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) }); } }
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; }
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)); }
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; }
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; }
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; } }
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); }
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; }
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()); } }
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; } }
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); } }
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; } }
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()); } }
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)); } }
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); } }
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; }
public virtual void RenderElement(IElement element, ITextContainer parent, RenderContextBase context) { var span = new Span(); parent.Add(span); context.RenderNode(element, new SpanContainer(span)); }
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; }
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 }); } }
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; }
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; }
private static Inline GenerateSpan(HtmlNode node) { Span s = new Span(); AddChildren(s, node); return s; }
private static Inline GenerateSpan(HtmlNode node, string appendText) { Span s = new Span(); AddChildren(s, node, appendText); return s; }
private static Inline GenerateUL(HtmlNode node) { Span s = new Span(); s.Inlines.Add(new LineBreak()); AddChildren(s, node); return s; }
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; }
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()); } }
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; }