コード例 #1
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public GlslLayoutLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer) { }
コード例 #2
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public GlslStructLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer, '}') { }
コード例 #3
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public CommandLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer) { }
コード例 #4
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public DefaultLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer) { }
コード例 #5
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
        public BaseLexer(int firstFreeStyle, XmlNode lexerNode, BaseLexer parent)
        {
            parentLexer = parent;
            defaultLexer = GetType().Name == "DefaultLexer" ? null
                : new DefaultLexer(firstFreeStyle, null, this);

            // get style and state ranges
            var stateValues = Enum.GetValues(StateType);
            int styleCount = stateValues.Length;
            int firstState = styleCount > 0 ? ((int[])stateValues).Min() : 0;

            // adjust style ranges if they fall into the Scintilla styles
            firstStyle = firstFreeStyle;
            if (SciStyle.Default <= firstStyle + styleCount && firstStyle <= SciStyle.CallTip)
                firstStyle = SciStyle.CallTip + 1;
            lastStyle = firstStyle + styleCount - 1;
            firstFreeStyle = lastStyle + 1;

            if (StateType.IsEquivalentTo(typeof(BaseState)))
            {
                firstBaseStyle = firstStyle;
                lastBaseStyle = lastStyle;
            }

            // allocate arrays for styles
            styles = Enumerable.Range(firstStyle, styleCount)
                .Select(x => new ScintillaNET.Lexing.Style {
                    id = x, fore = Theme.ForeColor, back = Theme.Workspace
                }).ToArray();
            keywords = new Trie<Keyword>[styleCount];

            // SET TO DEFAULT LEXER
            if (lexerNode == null)
            {
                lexerType = "default";
                lexer = new BaseLexer[0];
                return;
            }

            // get lexer type
            lexerType = lexerNode.GetAttributeValue("type");

            // get style colors
            var styleList = lexerNode.SelectNodes("Style");
            foreach (XmlNode style in styleList)
            {
                if (style.HasAttributeValue("theme") && style.GetAttributeValue("theme").ToLower() != Theme.Name.ToLower())
                    continue;
                var id = (int)Enum.Parse(StateType, style.GetAttributeValue("name"), true);
                var idx = id - firstState;
                if (style.HasAttributeValue("fore"))
                    styles[idx].fore = ColorTranslator.FromHtml(style.GetAttributeValue("fore"));
                if (style.HasAttributeValue("back"))
                    styles[idx].back = ColorTranslator.FromHtml(style.GetAttributeValue("back"));
            }

            // get keyword definitions
            var keywordList = lexerNode.SelectNodes("Keyword");
            foreach (XmlNode keyword in keywordList)
            {
                var id = (int)Enum.Parse(StateType, keyword.GetAttributeValue("style_name"), true);
                var idx = id - firstState;
                var name = keyword.GetAttributeValue("name");
                var hint = keyword.GetAttributeValue("hint");
                if (hint != null && hint.IndexOf('\\') >= 0)
                    hint = regexHint.Replace(hint, "\n");
                if (keywords[idx] == null)
                    keywords[idx] = new Trie<Keyword>();
                keywords[idx].Add(name, new Keyword { word = name, hint = hint });
            }

            // instantiate sub-lexers
            var lexerList = lexerNode.SelectNodes("Lexer");
            lexer = new BaseLexer[lexerList.Count];
            var assembly = typeof(BaseLexer).FullName.Substring(0,
                typeof(BaseLexer).FullName.Length - typeof(BaseLexer).Name.Length);
            for (int i = 0; i < lexerList.Count; i++)
            {
                var type = lexerList[i].GetAttributeValue("lexer");
                var param = new object[] { firstFreeStyle, lexerList[i], this };
                var t = Type.GetType($"{assembly}{type}");
                lexer[i] = (BaseLexer)Activator.CreateInstance(t, param);
                firstFreeStyle = lexer[i].MaxStyle + 1;
            }
        }
コード例 #6
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public TechBodyLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer) { }
コード例 #7
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public GlslFunctionBodyLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer) { }
コード例 #8
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public GlslStructFuncArgLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer, char closingBrace)
     : base(nextStyle, xml, parentLexer)
 {
     this.closingBrace = closingBrace;
 }
コード例 #9
0
ファイル: FXLexer.cs プロジェクト: h3tch/ProtoFX
 public GlslFunctionArgLexer(int nextStyle, XmlNode xml, BaseLexer parentLexer)
     : base(nextStyle, xml, parentLexer, ')') { }