Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
            }
        }
Example #5
0
        /// <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);
        }
Example #6
0
 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;
 }
Example #7
0
        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);
        }
Example #8
0
        /// <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);
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        /// <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);
        }
Example #13
0
 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;
   }
 }
Example #14
0
 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;
   }
 }
Example #15
0
 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;
   }
 }
Example #16
0
 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;
 }
Example #17
0
 private XmlToken TokenizeSimple( string text, XmlTokenKind kind, XmlTokenizerMode nextMode )
 {
   XmlToken token = new XmlToken( kind, text.Length );
   position += text.Length;
   mode = nextMode;
   return token;
 }
Example #18
0
 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;
 }