Exemplo n.º 1
0
        public void Visit(TokenWord tok)
        {
            SciStyleId style = SciStyleId.Default;

            if (_includeDepth > 0)
            {
                style = SciStyleId.Include;
            }
            else
            {
                var existingKeywords = Keywords.Instance.GetKeywordsByName(tok.Value);
                if (existingKeywords != null && existingKeywords.Count > 0)
                {
                    style = existingKeywords.First().KeywordSyntaxStyle;
                }

                // normed variables
                if (style == SciStyleId.Default)
                {
                    var pos = tok.Value.IndexOf("_", StringComparison.CurrentCultureIgnoreCase);
                    if (pos > 0 && tok.Value.Length >= pos + 1)
                    {
                        var prefix = tok.Value.Substring(0, pos + 1);
                        if (NormedVariablesPrefixes.Contains(prefix))
                        {
                            style = SciStyleId.NormedVariables;
                        }
                    }
                }
            }
            SetStyling(tok.EndPosition - tok.StartPosition, style);
        }
Exemplo n.º 2
0
 public void Visit(TokenWord tok)
 {
     if (tok.Line < FromLine || tok.Line > ToLine)
     {
         return;
     }
     //Npp.StyleText((int)TextStyle.Default, tok.StartPosition, tok.EndPosition);
 }
Exemplo n.º 3
0
        private static ShaderDataType _parseShaderType(TokenWord word)
        {
            if (_shaderTypeMap.TryGetValue(word.Word, out var ret))
            {
                return(ret);
            }

            throw new ShaderParseException("Expected <type>", word.Position);
        }
        /// <summary>
        /// Merge the values of two tokens of the same type (return true if it does)
        /// The merge is done at the givent @position and using the given @token value
        /// </summary>
        private bool MergeTokenAtPosition <T>(int position, T token, bool appendTokenValue) where T : Token
        {
            var tokenAtPos = PeekAt(position);

            if (token != null && tokenAtPos is T)
            {
                // append previous word with the first word of the value tokens
                Token newToken;
                if (typeof(T) == typeof(TokenWord))
                {
                    newToken = new TokenWord(appendTokenValue ? tokenAtPos.Value + token.Value : token.Value + tokenAtPos.Value, tokenAtPos.Line, tokenAtPos.Column, tokenAtPos.StartPosition, tokenAtPos.EndPosition);
                }
                else
                {
                    newToken = new TokenString(appendTokenValue ? tokenAtPos.Value + token.Value : token.Value + tokenAtPos.Value, tokenAtPos.Line, tokenAtPos.Column, tokenAtPos.StartPosition, tokenAtPos.EndPosition);
                }
                ReplaceToken(position, newToken);
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
 public void Visit(TokenWord tok)
 {
     AppendEverything(tok);
     NbItems++;
 }
Exemplo n.º 6
0
        private void _parseFunction()
        {
            var token = _takeToken();

            if (!(token is TokenWord typeToken))
            {
                throw new ShaderParseException("Expected type.", token.Position);
            }

            var retType = _parseShaderType(typeToken);

            token = _takeToken();
            if (!(token is TokenWord nameToken))
            {
                throw new ShaderParseException("Expected function name.", token.Position);
            }

            var name = nameToken.Word;

            token = _takeToken();
            if (!(token is TokenSymbol parenthesesOpenToken) || parenthesesOpenToken.Symbol != Symbols.ParenOpen)
            {
                throw new ShaderParseException("Expected '('.", token.Position);
            }

            var paramsParsed = new List <ShaderFunctionParameter>();

            token = _takeToken();
            if (token is TokenSymbol endParenTokenMaybe)
            {
                if (endParenTokenMaybe.Symbol != Symbols.ParenClosed)
                {
                    throw new ShaderParseException("Expected ')' or type.", token.Position);
                }
            }
            else
            {
                // Parse parameters.
                while (true)
                {
                    token = _takeToken();
                    if (!(token is TokenWord paramTypeOrQualifierToken))
                    {
                        throw new ShaderParseException("Expected type, 'in', 'out' or 'inout'.", token.Position);
                    }

                    var qualifier = ShaderParameterQualifiers.None;

                    TokenWord paramTypeToken = null;
                    if (paramTypeOrQualifierToken.Word == "in")
                    {
                        qualifier = ShaderParameterQualifiers.In;
                    }
                    else if (paramTypeOrQualifierToken.Word == "out")
                    {
                        qualifier = ShaderParameterQualifiers.Out;
                    }
                    else if (paramTypeOrQualifierToken.Word == "inout")
                    {
                        qualifier = ShaderParameterQualifiers.Inout;
                    }
                    else
                    {
                        paramTypeToken = paramTypeOrQualifierToken;
                    }

                    if (paramTypeToken == null)
                    {
                        token = _takeToken();
                        if (!(token is TokenWord paramTypeTokenForReal))
                        {
                            throw new ShaderParseException("Expected type ')'.", token.Position);
                        }

                        paramTypeToken = paramTypeTokenForReal;
                    }

                    var paramType = _parseShaderType(paramTypeToken);

                    token = _takeToken();
                    if (!(token is TokenWord paramNameToken))
                    {
                        throw new ShaderParseException("Expected parameter name.", token.Position);
                    }

                    var paramName = paramNameToken.Word;

                    paramsParsed.Add(new ShaderFunctionParameter(paramName, paramType, qualifier));

                    token = _takeToken();
                    if (token is TokenSymbol commaOrCloseParenToken)
                    {
                        if (commaOrCloseParenToken.Symbol == Symbols.Comma)
                        {
                            continue;
                        }

                        if (commaOrCloseParenToken.Symbol == Symbols.ParenClosed)
                        {
                            break;
                        }
                    }

                    throw new ShaderParseException("Expected ')' or ','", token.Position);
                }
            }

            token = _takeToken();

            if (!(token is TokenSymbol braceOpenToken) || braceOpenToken.Symbol != Symbols.BraceOpen)
            {
                throw new ShaderParseException("Expected '{'", token.Position);
            }

            var tokens     = new List <Token>(10);
            var braceDepth = 1;

            while (true)
            {
                // Take entire function body. We assume it's valid.
                token = _takeToken();
                if (token == null)
                {
                    throw new ShaderParseException("Hit EOF while parsing function body");
                }

                if (token is TokenSymbol braceToken)
                {
                    if (braceToken.Symbol == Symbols.BraceOpen)
                    {
                        braceDepth += 1;
                    }

                    if (braceToken.Symbol == Symbols.BraceClosed)
                    {
                        braceDepth -= 1;
                        if (braceDepth == 0)
                        {
                            break;
                        }
                    }
                }

                tokens.Add(token);
            }

            var body = _tokensToString(tokens);

            _functionsParsing.Add(new ShaderFunctionDefinition(name, retType, paramsParsed, body));
        }