private Inline MakeBig(ParsedChunk arg) { var toReturn = new Span(WrapInRun(arg.InnerText)); toReturn.FontSize = ApplicationSettings.FontSize * 1.5; return(toReturn); }
private Span MakeStrikeThrough(ParsedChunk arg) { return(new Span(WrapInRun(arg.InnerText)) { TextDecorations = TextDecorations.Strikethrough }); }
private Inline MakeSubscript(ParsedChunk arg) { var small = MakeSmall(arg); small.BaselineAlignment = BaselineAlignment.Subscript; return(small); }
private Span MakeColor(ParsedChunk arg) { var colorString = arg.Arguments; if (!ApplicationSettings.AllowColors || colorString == null) { return(MakeNormalText(arg)); } try { var brush = new BrushConverter().ConvertFromString(colorString) as SolidColorBrush; return(brush == null ? new Span() : new Span { Foreground = brush }); } catch (FormatException) { } return(new Span()); }
private Inline MakeBlockWithAlignment(ParsedChunk arg, TextAlignment alignment, Thickness thickness) { if (arg.Children == null || !arg.Children.Any()) { return(MakeNormalText(arg)); } var container = new InlineUIContainer(); var panel = new StackPanel(); var text = new TextBlock { Foreground = Locator.Find <SolidColorBrush>("ForegroundBrush"), Margin = thickness, TextWrapping = TextWrapping.Wrap, TextAlignment = alignment }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); panel.Children.Add(text); panel.Children.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); container.Child = panel; arg.Children.Clear(); return(container); }
private Inline MakeCenterText(ParsedChunk arg) { var padding = ApplicationSettings.AllowIndent ? 15 : 0; return(ApplicationSettings.AllowAlignment ? MakeBlockWithAlignment(arg, TextAlignment.Center, new Thickness(padding, 0, padding, 0)) : MakeNormalText(arg)); }
private Inline MakeHorizontalRule(ParsedChunk arg) { return(new InlineUIContainer(new Line { Stretch = Stretch.Fill, X2 = 1, Margin = new Thickness(0, 5, 0, 5), Stroke = Locator.Find <SolidColorBrush>("HighlightBrush") })); }
private Inline ToInline(ParsedChunk chunk) { var converters = new Dictionary <BbCodeType, Func <ParsedChunk, Inline> > { { BbCodeType.Bold, MakeBold }, { BbCodeType.Italic, MakeItalic }, { BbCodeType.Underline, MakeUnderline }, { BbCodeType.Url, MakeUrl }, { BbCodeType.None, MakeNormalText }, { BbCodeType.Color, MakeColor }, { BbCodeType.Strikethrough, MakeStrikeThrough }, { BbCodeType.Session, MakeSession }, { BbCodeType.Channel, MakeChannel }, { BbCodeType.Big, MakeBig }, { BbCodeType.Small, MakeSmall }, { BbCodeType.Subscript, MakeSubscript }, { BbCodeType.Superscript, MakeSuperscript }, { BbCodeType.User, MakeUser }, { BbCodeType.NoParse, MakeNormalText }, { BbCodeType.Icon, MakeIcon }, { BbCodeType.EIcon, MakeEIcon }, { BbCodeType.Collapse, MakeCollapse }, { BbCodeType.Quote, MakeQuote }, { BbCodeType.HorizontalRule, MakeHorizontalRule }, { BbCodeType.Indent, MakeIndentText }, { BbCodeType.Heading, MakeHeading }, { BbCodeType.Justify, MakeNormalText }, { BbCodeType.Right, MakeRightText }, { BbCodeType.Center, MakeCenterText }, { BbCodeType.Left, MakeBlockText } }; var converter = converters[chunk.Type]; Inline toReturn; try { toReturn = converter(chunk); } catch { toReturn = MakeNormalText(chunk); } var span = toReturn as Span; if (chunk.Children?.Any() ?? false) { span?.Inlines.AddRange(chunk.Children.Select(ToInline)); } return(toReturn); }
private Inline MakeSession(ParsedChunk arg) { if (arg.Children == null || !arg.Children.Any() || string.IsNullOrEmpty(arg.Arguments)) { return(MakeNormalText(arg)); } var channel = MakeChannelLink(ChatModel.FindChannel(arg.Children.First().InnerText, arg.Arguments)); arg.Children.Clear(); return(channel); }
private Inline MakeUser(ParsedChunk arg) { if (arg.Children != null && arg.Children.Any()) { var user = MakeUsernameLink(characters.Find(arg.Children.First().InnerText)); arg.Children.Clear(); return(user); } return(!string.IsNullOrEmpty(arg.Arguments) ? MakeUsernameLink(characters.Find(arg.Arguments)) : MakeNormalText(arg)); }
private Inline MakeChannel(ParsedChunk arg) { if (arg.Children != null && arg.Children.Any()) { var channel = MakeChannelLink(ChatModel.FindChannel(arg.Children.First().InnerText)); arg.Children.Clear(); return(channel); } return(!string.IsNullOrEmpty(arg.Arguments) ? MakeChannelLink(ChatModel.FindChannel(arg.Arguments)) : MakeNormalText(arg)); }
private Inline MakeQuote(ParsedChunk arg) { var container = new InlineUIContainer(); var text = new TextBlock { Foreground = Locator.Find <SolidColorBrush>("ForegroundBrush"), Opacity = 0.8, Margin = new Thickness(50, 5, 0, 5), TextWrapping = TextWrapping.Wrap }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); container.Child = text; arg.Children.Clear(); return(container); }
private Span MakeUrl(ParsedChunk arg) { if (arg.Arguments == null && arg.Children == null) { return(MakeNormalText(arg)); } var url = arg.Arguments; var display = arg.Children != null ? arg.Children.First().InnerText : GetUrlDisplay(arg.Arguments); if (url == null) { url = arg.InnerText; display = arg.Children != null ? GetUrlDisplay(arg.Children.First().InnerText) : string.Empty; } if (url == null && arg.Children != null) { url = arg.Children.First().InnerText; } arg.Children?.Clear(); var contextMenu = new ContextMenu(); var menuItemCopyLink = new MenuItem { CommandParameter = url, Style = Locator.FindStyle("MenuItemCopy") }; contextMenu.Items.Add(menuItemCopyLink); return(new Hyperlink(WrapInRun(display)) { CommandParameter = url, ToolTip = url, ContextMenu = contextMenu, Style = Locator.FindStyle("Hyperlink") }); }
private Span MakeHeading(ParsedChunk arg) { var toReturn = new Span { Foreground = Locator.Find <SolidColorBrush>("ContrastBrush") }; toReturn.FontSize *= 2; SpanHelper.SetInlineSource(toReturn, arg.Children.Select(ToInline).ToList()); toReturn.Inlines.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); arg.Children.Clear(); return(toReturn); }
private Inline MakeEIcon(ParsedChunk arg) { if (!ApplicationSettings.AllowIcons) { return(new Span()); } if (arg.Children != null && arg.Children.Any()) { var target = arg.Children.First().InnerText; var icon = MakeEIcon(target); arg.Children.Clear(); return(icon); } return(!string.IsNullOrEmpty(arg.Arguments) ? MakeIcon(characters.Find(arg.Arguments)) : MakeNormalText(arg)); }
internal static ParsedChunk FromTag(BbTag tag, string context) { var last = tag.ClosingTag?.End ?? tag.End; var toReturn = new ParsedChunk { Start = tag.Start, End = last, Type = tag.Type, Arguments = tag.Arguments }; if (tag.Children != null && tag.Children.Any()) { toReturn.Children = tag.Children.Select(x => FromTag(x, context)).ToList(); } if (tag.Type == BbCodeType.None) { toReturn.InnerText = context.Substring(tag.Start, tag.End - tag.Start); } return(toReturn); }
private Inline MakeCollapse(ParsedChunk arg) { var title = arg.Arguments; var container = new InlineUIContainer(); var panel = new StackPanel(); var expander = new Expander { Header = title, Margin = new Thickness(0), Padding = new Thickness(0) }; var text = new TextBlock { Foreground = Locator.Find <SolidColorBrush>("ForegroundBrush"), TextWrapping = TextWrapping.Wrap, Margin = new Thickness(25, 0, 0, 0) }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); expander.Content = text; panel.Children.Add(expander); panel.Children.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); container.Child = panel; arg.Children.Clear(); return(container); }
private Inline MakeBlockText(ParsedChunk arg) { return MakeBlockWithAlignment(arg, TextAlignment.Left, new Thickness(0)); }
private Inline MakeEIcon(ParsedChunk arg) { if (!ApplicationSettings.AllowIcons) return new Span(); if (arg.Children != null && arg.Children.Any()) { var target = arg.Children.First().InnerText; var icon = MakeEIcon(target); arg.Children.Clear(); return icon; } return !string.IsNullOrEmpty(arg.Arguments) ? MakeIcon(characters.Find(arg.Arguments)) : MakeNormalText(arg); }
private static Span MakeItalic(ParsedChunk arg) { return new Italic(WrapInRun(arg.InnerText)); }
private Inline MakeQuote(ParsedChunk arg) { var container = new InlineUIContainer(); var text = new TextBlock { Foreground = Locator.Find<SolidColorBrush>("ForegroundBrush"), Opacity = 0.8, Margin = new Thickness(50, 5, 0, 5), TextWrapping = TextWrapping.Wrap }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); container.Child = text; arg.Children.Clear(); return container; }
private static Span MakeBold(ParsedChunk arg) { return(new Bold(WrapInRun(arg.InnerText))); }
private Span MakeHeading(ParsedChunk arg) { var toReturn = new Span { Foreground = Locator.Find<SolidColorBrush>("ContrastBrush") }; toReturn.FontSize *= 2; SpanHelper.SetInlineSource(toReturn, arg.Children.Select(ToInline).ToList()); toReturn.Inlines.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); arg.Children.Clear(); return toReturn; }
private static Span MakeNormalText(ParsedChunk arg) { return(new Span(WrapInRun(arg.InnerText))); }
private Span MakeStrikeThrough(ParsedChunk arg) { return new Span(WrapInRun(arg.InnerText)) {TextDecorations = TextDecorations.Strikethrough}; }
internal static ParsedChunk FromTag(BbTag tag, string context) { var last = tag.ClosingTag != null ? tag.ClosingTag.End : tag.End; var toReturn = new ParsedChunk { Start = tag.Start, End = last, Type = tag.Type, Arguments = tag.Arguments }; if (tag.Children != null && tag.Children.Any()) toReturn.Children = tag.Children.Select(x => FromTag(x, context)).ToList(); if (tag.Type == BbCodeType.None) toReturn.InnerText = context.Substring(tag.Start, tag.End - tag.Start); return toReturn; }
private Inline MakeSession(ParsedChunk arg) { var channel = MakeChannelLink(ChatModel.FindChannel(arg.Children.First().InnerText, arg.Arguments)); arg.Children.Clear(); return channel; }
private Inline MakeSmall(ParsedChunk arg) { return new Span(WrapInRun(arg.InnerText)) {FontSize = 9}; }
private Span MakeColor(ParsedChunk arg) { var colorString = arg.Arguments; if (!ApplicationSettings.AllowColors || colorString == null) return MakeNormalText(arg); try { var brush = new BrushConverter().ConvertFromString(colorString) as SolidColorBrush; return brush == null ? new Span() : new Span {Foreground = brush}; } catch (FormatException) { } return new Span(); }
private static Span MakeUnderline(ParsedChunk arg) { return new Underline(WrapInRun(arg.InnerText)); }
private static Span MakeNormalText(ParsedChunk arg) { return new Span(WrapInRun(arg.InnerText)); }
private Span MakeUrl(ParsedChunk arg) { if (arg.Arguments == null && arg.Children == null) return MakeNormalText(arg); var url = arg.Arguments; var display = arg.Children != null ? arg.Children.First().InnerText : GetUrlDisplay(arg.Arguments); if (url == null) { url = arg.InnerText; display = arg.Children != null ? GetUrlDisplay(arg.Children.First().InnerText) : string.Empty; } if (url == null && arg.Children != null) { url = arg.Children.First().InnerText; } arg.Children?.Clear(); var contextMenu = new ContextMenu(); var menuItemCopyLink = new MenuItem { CommandParameter = url, Style = Locator.FindStyle("MenuItemCopy") }; contextMenu.Items.Add(menuItemCopyLink); return new Hyperlink(WrapInRun(display)) { CommandParameter = url, ToolTip = url, ContextMenu = contextMenu, Style = Locator.FindStyle("Hyperlink") }; }
private Inline MakeCenterText(ParsedChunk arg) { var padding = ApplicationSettings.AllowIndent ? 15 : 0; return ApplicationSettings.AllowAlignment ? MakeBlockWithAlignment(arg, TextAlignment.Center, new Thickness(padding, 0, padding, 0)) : MakeNormalText(arg); }
private Inline MakeChannel(ParsedChunk arg) { if (arg.Children != null && arg.Children.Any()) { var channel = MakeChannelLink(ChatModel.FindChannel(arg.Children.First().InnerText)); arg.Children.Clear(); return channel; } return !string.IsNullOrEmpty(arg.Arguments) ? MakeChannelLink(ChatModel.FindChannel(arg.Arguments)) : MakeNormalText(arg); }
private Inline MakeIndentText(ParsedChunk arg) { return(MakeBlockWithAlignment(arg, TextAlignment.Left, new Thickness(ApplicationSettings.AllowIndent ? 15 : 0, 0, 0, 0))); }
private Inline MakeBig(ParsedChunk arg) { var toReturn = new Span(WrapInRun(arg.InnerText)); toReturn.FontSize = ApplicationSettings.FontSize * 1.5; return toReturn; }
private Inline MakeCollapse(ParsedChunk arg) { var title = arg.Arguments; var container = new InlineUIContainer(); var panel = new StackPanel(); var expander = new Expander { Header = title, Margin = new Thickness(0), Padding = new Thickness(0) }; var text = new TextBlock { Foreground = Locator.Find<SolidColorBrush>("ForegroundBrush"), TextWrapping = TextWrapping.Wrap, Margin = new Thickness(25, 0, 0, 0) }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); expander.Content = text; panel.Children.Add(expander); panel.Children.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); container.Child = panel; arg.Children.Clear(); return container; }
private Inline MakeHorizontalRule(ParsedChunk arg) { return new InlineUIContainer(new Line { Stretch = Stretch.Fill, X2 = 1, Margin = new Thickness(0, 5, 0, 5), Stroke = Locator.Find<SolidColorBrush>("HighlightBrush") }); }
private Inline MakeRightText(ParsedChunk arg) { return ApplicationSettings.AllowAlignment ? MakeBlockWithAlignment(arg, TextAlignment.Right, new Thickness(0)) : MakeNormalText(arg); }
private static Span MakeUnderline(ParsedChunk arg) { return(new Underline(WrapInRun(arg.InnerText))); }
private Inline MakeBlockWithAlignment(ParsedChunk arg, TextAlignment alignment, Thickness thickness) { if (arg.Children == null || !arg.Children.Any()) return MakeNormalText(arg); var container = new InlineUIContainer(); var panel = new StackPanel(); var text = new TextBlock { Foreground = Locator.Find<SolidColorBrush>("ForegroundBrush"), Margin = thickness, TextWrapping = TextWrapping.Wrap, TextAlignment = alignment }; TextBlockHelper.SetInlineList(text, arg.Children.Select(ToInline).ToList()); panel.Children.Add(text); panel.Children.Add(new Line { Stretch = Stretch.Fill, X2 = 1, Stroke = new SolidColorBrush(Colors.Transparent) }); container.Child = panel; arg.Children.Clear(); return container; }
private static Span MakeItalic(ParsedChunk arg) { return(new Italic(WrapInRun(arg.InnerText))); }
private Inline MakeIndentText(ParsedChunk arg) { return MakeBlockWithAlignment(arg, TextAlignment.Left, new Thickness(ApplicationSettings.AllowIndent ? 15 : 0, 0, 0, 0)); }
private Inline MakeRightText(ParsedChunk arg) { return(ApplicationSettings.AllowAlignment ? MakeBlockWithAlignment(arg, TextAlignment.Right, new Thickness(0)) : MakeNormalText(arg)); }
private static Span MakeBold(ParsedChunk arg) { return new Bold(WrapInRun(arg.InnerText)); }
private Inline MakeUser(ParsedChunk arg) { if (arg.Children != null && arg.Children.Any()) { var user = MakeUsernameLink(characters.Find(arg.Children.First().InnerText)); arg.Children.Clear(); return user; } return !string.IsNullOrEmpty(arg.Arguments) ? MakeUsernameLink(characters.Find(arg.Arguments)) : MakeNormalText(arg); }
private Inline MakeUser(ParsedChunk arg) { var user = MakeUsernameLink(characterManager.Find(arg.Children.First().InnerText)); arg.Children.Clear(); return user; }
private Inline MakeBlockText(ParsedChunk arg) { return(MakeBlockWithAlignment(arg, TextAlignment.Left, new Thickness(0))); }
private Inline ToInline(ParsedChunk chunk) { var converters = new Dictionary<BbCodeType, Func<ParsedChunk, Inline>> { {BbCodeType.Bold, MakeBold}, {BbCodeType.Italic, MakeItalic}, {BbCodeType.Underline, MakeUnderline}, {BbCodeType.Url, MakeUrl}, {BbCodeType.None, MakeNormalText}, {BbCodeType.Color, MakeColor}, {BbCodeType.Strikethrough, MakeStrikeThrough}, {BbCodeType.Session, MakeSession}, {BbCodeType.Channel, MakeChannel}, {BbCodeType.Big, MakeBig}, {BbCodeType.Small, MakeSmall}, {BbCodeType.Subscript, MakeSubscript}, {BbCodeType.Superscript, MakeSuperscript}, {BbCodeType.User, MakeUser}, {BbCodeType.NoParse, MakeNormalText} }; var converter = converters[chunk.Type]; var toReturn = converter(chunk); var span = toReturn as Span; if (chunk.Children != null && chunk.Children.Any() && span != null) span.Inlines.AddRange(chunk.Children.Select(ToInline)); return toReturn; }
private Inline MakeSuperscript(ParsedChunk arg) { var small = MakeSmall(arg); small.BaselineAlignment = BaselineAlignment.Superscript; return small; }
private Inline MakeSession(ParsedChunk arg) { if (arg.Children == null || !arg.Children.Any() || string.IsNullOrEmpty(arg.Arguments)) return MakeNormalText(arg); var channel = MakeChannelLink(ChatModel.FindChannel(arg.Children.First().InnerText, arg.Arguments)); arg.Children.Clear(); return channel; }
private Span MakeUrl(ParsedChunk arg) { var url = arg.Arguments; var display = arg.Children != null ? arg.Children.First().InnerText : GetUrlDisplay(arg.Arguments); if (url == null) { url = arg.InnerText ?? string.Empty; display = arg.Children != null ? GetUrlDisplay(arg.Children.First().InnerText) : string.Empty; } if (arg.Children != null) arg.Children.Clear(); return new Hyperlink(WrapInRun(display)) { CommandParameter = url, ToolTip = url, Style = Locator.FindStyle("Hyperlink") }; }
private Inline ToInline(ParsedChunk chunk) { var converters = new Dictionary<BbCodeType, Func<ParsedChunk, Inline>> { {BbCodeType.Bold, MakeBold}, {BbCodeType.Italic, MakeItalic}, {BbCodeType.Underline, MakeUnderline}, {BbCodeType.Url, MakeUrl}, {BbCodeType.None, MakeNormalText}, {BbCodeType.Color, MakeColor}, {BbCodeType.Strikethrough, MakeStrikeThrough}, {BbCodeType.Session, MakeSession}, {BbCodeType.Channel, MakeChannel}, {BbCodeType.Big, MakeBig}, {BbCodeType.Small, MakeSmall}, {BbCodeType.Subscript, MakeSubscript}, {BbCodeType.Superscript, MakeSuperscript}, {BbCodeType.User, MakeUser}, {BbCodeType.NoParse, MakeNormalText}, {BbCodeType.Icon, MakeIcon}, {BbCodeType.EIcon, MakeEIcon}, {BbCodeType.Collapse, MakeCollapse}, {BbCodeType.Quote, MakeQuote}, {BbCodeType.HorizontalRule, MakeHorizontalRule}, {BbCodeType.Indent, MakeIndentText}, {BbCodeType.Heading, MakeHeading}, {BbCodeType.Justify, MakeNormalText}, {BbCodeType.Right, MakeRightText}, {BbCodeType.Center, MakeCenterText}, {BbCodeType.Left, MakeBlockText} }; var converter = converters[chunk.Type]; Inline toReturn; try { toReturn = converter(chunk); } catch { toReturn = MakeNormalText(chunk); } var span = toReturn as Span; if (chunk.Children?.Any() ?? false) span?.Inlines.AddRange(chunk.Children.Select(ToInline)); return toReturn; }