コード例 #1
0
ファイル: JsonParser.cs プロジェクト: billharris/Profiler
        private void ParseJsonPropertyName(ICollection<CodeLexem> res, ref SourcePart text)
        {
            var index = text.IndexOf("\":");
            if (index <= 0)
                return;

            res.Add(new CodeLexem(LexemType.Property, CutString(ref text, index)));
        }
コード例 #2
0
ファイル: BaseParser.cs プロジェクト: 4lx/Profiler
        protected void TryExtractTo(List <CodeLexem> res, ref SourcePart text, string lex, LexemType type, string except = null)
        {
            var index = text.IndexOf(lex);

            if (except != null)
            {
                while (index >= 0 && text.Substring(0, index + 1).EndsWith(except))
                {
                    index = text.IndexOf(lex, index + 1);
                }
            }

            if (index < 0)
            {
                return;
            }

            LineBreaks(res, ref text, index + lex.Length, type);
        }
コード例 #3
0
ファイル: JsonParser.cs プロジェクト: 4lx/Profiler
        private void ParseJsonPropertyName(ICollection <CodeLexem> res, ref SourcePart text)
        {
            var index = text.IndexOf("\":");

            if (index <= 0)
            {
                return;
            }

            res.Add(new CodeLexem(LexemType.Property, CutString(ref text, index)));
        }
コード例 #4
0
        protected void ParseValue(List <CodeLexem> res, ref SourcePart text)
        {
            const string lex   = "\"";
            var          index = text.IndexOf(lex);

            if (index < 0)
            {
                return;
            }

            LineBreaks(res, ref text, index + lex.Length - 1, LexemType.Value);
        }
コード例 #5
0
        private void ParseXmlKeyWord(ICollection <CodeLexem> res, ref SourcePart text, LexemType type)
        {
            var index = text.IndexOfAny(XmlEndOfTerm);

            if (index <= 0)
            {
                return;
            }

            var delimiterIndex = text.IndexOf(XmlNamespaceDelimeter);

            if (delimiterIndex > 0 && delimiterIndex < index)
            {
                res.Add(new CodeLexem(type, CutString(ref text, delimiterIndex)));
                res.Add(new CodeLexem(LexemType.Symbol, CutString(ref text, 1)));
                res.Add(new CodeLexem(type, CutString(ref text, index - delimiterIndex - 1)));
                return;
            }
            res.Add(new CodeLexem(type, CutString(ref text, index)));
        }
コード例 #6
0
ファイル: BaseParser.cs プロジェクト: 4lx/Profiler
        protected void LineBreaks(List<CodeLexem> res, ref SourcePart text, int to, LexemType type)
        {
            while (text.Length > 0 && to > 0)
            {
                var index = text.IndexOf("\n");
                if (index >= to)
                {
                    res.Add(new CodeLexem(type, CutString(ref text, to)));
                    return;
                }

                if (index != 0)
                {
                    res.Add(new CodeLexem(type, CutString(ref text, index)));
                }

                res.Add(new CodeLexem(LexemType.LineBreak, CutString(ref text, 1)));
                to -= index + 1;
            }
        }
コード例 #7
0
ファイル: BaseParser.cs プロジェクト: 4lx/Profiler
        protected void LineBreaks(List <CodeLexem> res, ref SourcePart text, int to, LexemType type)
        {
            while (text.Length > 0 && to > 0)
            {
                var index = text.IndexOf("\n");
                if (index >= to)
                {
                    res.Add(new CodeLexem(type, CutString(ref text, to)));
                    return;
                }

                if (index != 0)
                {
                    res.Add(new CodeLexem(type, CutString(ref text, index)));
                }

                res.Add(new CodeLexem(LexemType.LineBreak, CutString(ref text, 1)));
                to -= index + 1;
            }
        }
コード例 #8
0
ファイル: BaseParser.cs プロジェクト: 4lx/Profiler
        protected void TryExtractTo(List<CodeLexem> res, ref SourcePart text, string lex, LexemType type, string except = null)
        {
            var index = text.IndexOf(lex);
            if (except != null)
            {
                while (index >= 0 && text.Substring(0, index + 1).EndsWith(except))
                {
                    index = text.IndexOf(lex, index + 1);
                }
            }

            if (index < 0)
                return;

            LineBreaks(res, ref text, index + lex.Length, type);
        }
コード例 #9
0
ファイル: JsonParser.cs プロジェクト: billharris/Profiler
 private void TryExtractValue(List<CodeLexem> res, ref SourcePart text)
 {
     if (text[0] == '{')
     {
         res.Add(new CodeLexem(LexemType.Symbol, CutString(ref text, 1)));
     }
     else if (text[0] == '[')
     {
         res.Add(new CodeLexem(LexemType.Symbol, CutString(ref text, 1)));
     }
     else if (text[0] == '"')
     {
         res.Add(new CodeLexem(LexemType.Quotes, CutString(ref text, 1)));
         var end = text.IndexOf('"');
         res.Add(new CodeLexem(LexemType.Value, CutString(ref text, end)));
         res.Add(new CodeLexem(LexemType.Quotes, CutString(ref text, 1)));
     }
     else
     {
         var end = text.IndexOfAny(new[] { ',', '}' });
         res.Add(new CodeLexem(LexemType.Value, CutString(ref text, end)));
         res.Add(new CodeLexem(LexemType.Symbol, CutString(ref text, 1)));
     }
 }
コード例 #10
0
ファイル: XmlParser.cs プロジェクト: 4lx/Profiler
        protected void ParseValue(List<CodeLexem> res, ref SourcePart text)
        {
            const string lex = "\"";
            var index = text.IndexOf(lex);

            if (index < 0)
                return;

            LineBreaks(res, ref text, index + lex.Length - 1, LexemType.Value);
        }
コード例 #11
0
ファイル: XmlParser.cs プロジェクト: 4lx/Profiler
        private void ParseXmlKeyWord(ICollection<CodeLexem> res, ref SourcePart text, LexemType type)
        {
            var index = text.IndexOfAny(XmlEndOfTerm);
            if (index <= 0)
                return;

            var delimiterIndex = text.IndexOf(XmlNamespaceDelimeter);
            if (delimiterIndex > 0 && delimiterIndex < index)
            {
                res.Add(new CodeLexem(type, CutString(ref text, delimiterIndex)));
                res.Add(new CodeLexem(LexemType.Symbol, CutString(ref text, 1)));
                res.Add(new CodeLexem(type, CutString(ref text, index - delimiterIndex - 1)));
                return;
            }
            res.Add(new CodeLexem(type, CutString(ref text, index)));
        }