/// <summary> /// Colors the XAML. /// </summary> /// <param name="line">The line.</param> /// <returns></returns> public static Paragraph FormatCode(string line) { line = Regex.Replace(line, "[ ]*=[ ]*", "=", RegexOptions.Multiline); XmlTokenizer tokenizer = new XmlTokenizer(); XmlTokenizerMode mode = XmlTokenizerMode.OutsideElement; List <XmlToken> tokens = tokenizer.Tokenize(line, ref mode); List <string> tokenTexts = new List <string>(tokens.Count); List <Color> colors = new List <Color>(tokens.Count); int position = 0; foreach (XmlToken token in tokens) { string tokenText = line.Substring(position, token.Length); tokenTexts.Add(tokenText); Color color = XmlTokenizer.ColorForToken(token, tokenText); colors.Add(color); position += token.Length; } Paragraph p = new Paragraph(); for (int i = 0; i < tokenTexts.Count; i++) { Run r = new Run(tokenTexts[i]) { FontFamily = new FontFamily("Segoe UI"), FontSize = 14 }; r.Foreground = new SolidColorBrush(colors[i]); p.Inlines.Add(r); } return(p); }
/// <summary> /// Tokenizes the specified input. /// </summary> /// <param name="input">The input.</param> /// <returns></returns> public static List <XmlToken> Tokenize(string input) { XmlTokenizerMode mode = XmlTokenizerMode.OutsideElement; XmlTokenizer tokenizer = new XmlTokenizer(); return(tokenizer.Tokenize(input, ref mode)); }
public static FlowDocument ColorizeXAML(string xamlText, FlowDocument targetDoc) { XmlTokenizer tokenizer = new XmlTokenizer(); XmlTokenizerMode mode = XmlTokenizerMode.OutsideElement; List <XmlToken> tokens = tokenizer.Tokenize(xamlText, ref mode); List <string> tokenTexts = new List <string>(tokens.Count); List <Color> colors = new List <Color>(tokens.Count); int position = 0; foreach (XmlToken token in tokens) { string tokenText = xamlText.Substring(position, token.Length); tokenTexts.Add(tokenText); Color color = ColorForToken(token, tokenText); colors.Add(color); position += token.Length; } Paragraph p = new Paragraph(); // Loop through tokens for (int i = 0; i < tokenTexts.Count; i++) { Run r = new Run(tokenTexts[i]); r.Foreground = new SolidColorBrush(colors[i]); p.Inlines.Add(r); } targetDoc.Blocks.Add(p); return(targetDoc); }
public void Highlight(string line) { _paragraph.Inlines.Clear(); XmlTokenizer tokenizer = new XmlTokenizer(); XmlTokenizerMode mode = XmlTokenizerMode.OutsideElement; List <XmlToken> tokens = tokenizer.Tokenize(Xaml, ref mode); List <string> tokenTexts = new List <string>(tokens.Count); List <Color> colors = new List <Color>(tokens.Count); int position = 0; foreach (XmlToken token in tokens) { string tokenText = Xaml.Substring(position, token.Length); tokenTexts.Add(tokenText); Color color = ColorForToken(token, tokenText); colors.Add(color); position += token.Length; } for (int i = 0; i < tokens.Count; i++) { Run run = new Run(); run.Foreground = new SolidColorBrush(colors[i]); run.Text = tokenTexts[i]; _paragraph.Inlines.Add(run); } }
/// <summary> /// Tokenizes the simple. /// </summary> /// <param name="text">The text.</param> /// <param name="kind">The kind.</param> /// <param name="nextMode">The next mode.</param> /// <returns></returns> private XmlToken TokenizeSimple(string text, XmlTokenKind kind, XmlTokenizerMode nextMode) { XmlToken token = new XmlToken(kind, text.Length); position += text.Length; mode = nextMode; return(token); }
public List<XmlToken> Tokenize( string input, ref XmlTokenizerMode _mode ) { this.input = input; this.mode = _mode; this.position = 0; List<XmlToken> result = Tokenize(); _mode = this.mode; return result; }
private XmlToken TokenizeAttributeValue() { Debug.Assert(mode == XmlTokenizerMode.AfterAttributeEquals); int closePosition = input.IndexOf(input[position], position + 1); XmlToken token = new XmlToken(XmlTokenKind.AttributeValue, closePosition + 1 - position); position = closePosition + 1; mode = XmlTokenizerMode.InsideElement; return(token); }
/// <summary> /// Tokenizes the specified input. /// </summary> /// <param name="input">The input.</param> /// <param name="_mode">The _mode.</param> /// <returns></returns> public List <XmlToken> Tokenize(string input, ref XmlTokenizerMode _mode) { this.input = input; this.mode = _mode; this.position = 0; List <XmlToken> result = Tokenize(); _mode = this.mode; return(result); }
private XmlToken TokenizeInsideCData() { Debug.Assert(mode == XmlTokenizerMode.InsideCData); var tokenend = input.IndexOf("]]>", position); if (position == tokenend) { position += "]]>".Length; mode = XmlTokenizerMode.OutsideElement; return(new XmlToken(XmlTokenKind.CDataEnd, "]]>".Length)); } var token = new XmlToken(XmlTokenKind.TextContent, tokenend - position); position = tokenend; return(token); }
private XmlToken TokenizeInsideComment() { Debug.Assert(mode == XmlTokenizerMode.InsideComment); var tokenend = input.IndexOf("-->", position); if (position == tokenend) { position += "-->".Length; mode = XmlTokenizerMode.OutsideElement; return(new XmlToken(XmlTokenKind.CommentEnd, "-->".Length)); } var token = new XmlToken(XmlTokenKind.CommentText, tokenend - position); position = tokenend; return(token); }
private XmlToken TokenizeInsideProcessingInstruction() { Debug.Assert(mode == XmlTokenizerMode.InsideProcessingInstruction); var tokenend = input.IndexOf("?>", position); if (position == tokenend) { position += "?>".Length; mode = XmlTokenizerMode.OutsideElement; return(new XmlToken(XmlTokenKind.CloseProcessingInstruction, "?>".Length)); } var token = new XmlToken(XmlTokenKind.TextContent, tokenend - position); position = tokenend; return(token); }
/// <summary> /// Tokenizes the name. /// </summary> /// <param name="kind">The kind.</param> /// <param name="nextMode">The next mode.</param> /// <returns></returns> private XmlToken TokenizeName(XmlTokenKind kind, XmlTokenizerMode nextMode) { Debug.Assert(mode == XmlTokenizerMode.AfterOpen || mode == XmlTokenizerMode.InsideElement); int i; for (i = position; i < input.Length; i++) { if (!IsNameCharacter(input[i])) { break; } } XmlToken token = new XmlToken(kind, i - position); mode = nextMode; position = i; return(token); }
private XmlToken TokenizeInsideComment() { Debug.Assert( mode == XmlTokenizerMode.InsideComment ); int tokenend = input.IndexOf( "-->", position ); if( position == tokenend ) { position += "-->".Length; mode = XmlTokenizerMode.OutsideElement; return new XmlToken( XmlTokenKind.CommentEnd, "-->".Length ); } else { XmlToken token = new XmlToken( XmlTokenKind.CommentText, tokenend - position ); position = tokenend; return token; } }
private XmlToken TokenizeInsideCData() { Debug.Assert( mode == XmlTokenizerMode.InsideCData ); int tokenend = input.IndexOf( "]]>", position ); if( position == tokenend ) { position += "]]>".Length; mode = XmlTokenizerMode.OutsideElement; return new XmlToken( XmlTokenKind.CDataEnd, "]]>".Length ); } else { XmlToken token = new XmlToken( XmlTokenKind.TextContent, tokenend - position ); position = tokenend; return token; } }
private XmlToken TokenizeInsideProcessingInstruction() { Debug.Assert( mode == XmlTokenizerMode.InsideProcessingInstruction ); int tokenend = input.IndexOf( "?>", position ); if( position == tokenend ) { position += "?>".Length; mode = XmlTokenizerMode.OutsideElement; return new XmlToken( XmlTokenKind.CloseProcessingInstruction, "?>".Length ); } else { XmlToken token = new XmlToken( XmlTokenKind.TextContent, tokenend - position ); position = tokenend; return token; } }
private XmlToken TokenizeAttributeValue() { Debug.Assert( mode == XmlTokenizerMode.AfterAttributeEquals ); int closePosition = input.IndexOf( input[ position ], position + 1 ); XmlToken token = new XmlToken( XmlTokenKind.AttributeValue, closePosition + 1 - position ); position = closePosition + 1; mode = XmlTokenizerMode.InsideElement; return token; }
private XmlToken TokenizeSimple( string text, XmlTokenKind kind, XmlTokenizerMode nextMode ) { XmlToken token = new XmlToken( kind, text.Length ); position += text.Length; mode = nextMode; return token; }
private XmlToken TokenizeName( XmlTokenKind kind, XmlTokenizerMode nextMode ) { Debug.Assert( mode == XmlTokenizerMode.AfterOpen || mode == XmlTokenizerMode.InsideElement ); int i; for( i = position; i < input.Length; i++ ) if( !IsNameCharacter( input[ i ] ) ) break; XmlToken token = new XmlToken( kind, i - position ); mode = nextMode; position = i; return token; }