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); }
public void Visit(TokenWord tok) { if (tok.Line < FromLine || tok.Line > ToLine) { return; } //Npp.StyleText((int)TextStyle.Default, tok.StartPosition, tok.EndPosition); }
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); }
public void Visit(TokenWord tok) { AppendEverything(tok); NbItems++; }
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)); }