// <TYPE> <LANG> : <SOURCE> private void readShaderStatement(String statement) throws IOException { String[] split = statement.split(":"); if (split.length != 2) { throw new IOException("Shader statement syntax incorrect" + statement); } String[] typeAndLang = split[0].split(whitespacePattern); for (Shader.ShaderType shaderType : Shader.ShaderType.values()) { if (typeAndLang[0].equals(shaderType.toString() + "Shader")) { readShaderDefinition( shaderType, split[1].trim(), Arrays.copyOfRange(typeAndLang, 1, typeAndLang.length)); } } }
/** * effectiveliy reads the ShaderNodesDefinitions block * * @param statements the list of statements to parse * @param key the ShaderNodeDefinitionKey * @throws IOException */ protected void readShaderNodeDefinition(List<Statement> statements, ShaderNodeDefinitionKey key) throws IOException { boolean isLoadDoc = key instanceof ShaderNodeDefinitionKey && ((ShaderNodeDefinitionKey) key).isLoadDocumentation(); for (Statement statement : statements) { String[] split = statement.getLine().split("[ \\{]"); String line = statement.getLine(); if (line.startsWith("Type")) { String type = line.substring(line.lastIndexOf(':') + 1).trim(); shaderNodeDefinition.setType(Shader.ShaderType.valueOf(type)); } else if (line.startsWith("Shader ")) { readShaderStatement(statement); shaderNodeDefinition.getShadersLanguage().add(shaderLanguage); shaderNodeDefinition.getShadersPath().add(shaderName); } else if (line.startsWith("Documentation")) { if (isLoadDoc) { String doc = ""; for (Statement statement1 : statement.getContents()) { doc += "\n" + statement1.getLine(); } shaderNodeDefinition.setDocumentation(doc); } } else if (line.startsWith("Input")) { varNames = ""; for (Statement statement1 : statement.getContents()) { shaderNodeDefinition.getInputs().add(readVariable(statement1)); } } else if (line.startsWith("Output")) { varNames = ""; for (Statement statement1 : statement.getContents()) { if (statement1.getLine().trim().equals("None")) { shaderNodeDefinition.setNoOutput(true); } else { shaderNodeDefinition.getOutputs().add(readVariable(statement1)); } } } else { throw new MatParseException( "one of Type, Shader, Documentation, Input, Output", split[0], statement); } } }