private TextRenderer PrepareRenderer() { if (renderer != null) { return(renderer); } ParseText(); renderer = new TextRenderer(OverflowMode, WordSplitAllowed); // Setup default style(take first one from node list or TextStyle.Default). TextStyle defaultStyle = null; if (Nodes.Count > 0) { defaultStyle = Nodes[0] as TextStyle; } renderer.AddStyle(defaultStyle ?? TextStyle.Default); // Fill up style list. foreach (var styleName in parser.Styles) { var style = Nodes.TryFind(styleName) as TextStyle; renderer.AddStyle(style ?? TextStyle.Default); } // Add text fragments. foreach (var frag in parser.Fragments) { // Warning! Using style + 1, because -1 is a default style. renderer.AddFragment(frag.Text, frag.Style + 1, frag.IsNbsp); } return(renderer); }