UNPKG

@shaderfrog/glsl-parser

Version:

A GLSL ES 1.0 and 3.0 parser and preprocessor that can preserve whitespace and comments

110 lines (109 loc) 3.87 kB
import { makeGenerator } from '../ast/index.js'; /** * Stringify an AST */ // @ts-ignore var makeGeneratorPreprocessor = makeGenerator; var generators = { program: function (node) { return generate(node.program) + generate(node.wsEnd); }, segment: function (node) { return generate(node.blocks); }, text: function (node) { return generate(node.text); }, literal: function (node) { return generate(node.wsStart) + generate(node.literal) + generate(node.wsEnd); }, identifier: function (node) { return generate(node.identifier) + generate(node.wsEnd); }, binary: function (node) { return generate(node.left) + generate(node.operator) + generate(node.right); }, group: function (node) { return generate(node.lp) + generate(node.expression) + generate(node.rp); }, unary: function (node) { return generate(node.operator) + generate(node.expression); }, unary_defined: function (node) { return generate(node.operator) + generate(node.lp) + generate(node.identifier) + generate(node.rp); }, int_constant: function (node) { return generate(node.token) + generate(node.wsEnd); }, elseif: function (node) { return generate(node.token) + generate(node.expression) + generate(node.wsEnd) + generate(node.body); }, if: function (node) { return generate(node.token) + generate(node.expression) + generate(node.wsEnd) + generate(node.body); }, ifdef: function (node) { return generate(node.token) + generate(node.identifier) + generate(node.wsEnd) + generate(node.body); }, ifndef: function (node) { return generate(node.token) + generate(node.identifier) + generate(node.wsEnd) + generate(node.body); }, else: function (node) { return generate(node.token) + generate(node.wsEnd) + generate(node.body); }, error: function (node) { return generate(node.error) + generate(node.message) + generate(node.wsEnd); }, undef: function (node) { return generate(node.undef) + generate(node.identifier) + generate(node.wsEnd); }, define: function (node) { return generate(node.wsStart) + generate(node.define) + generate(node.identifier) + generate(node.body) + generate(node.wsEnd); }, define_arguments: function (node) { return generate(node.wsStart) + generate(node.define) + generate(node.identifier) + generate(node.lp) + generate(node.args) + generate(node.rp) + generate(node.body) + generate(node.wsEnd); }, conditional: function (node) { return generate(node.wsStart) + generate(node.ifPart) + // generate(node.body) + generate(node.elseIfParts) + generate(node.elsePart) + generate(node.endif) + generate(node.wsEnd); }, version: function (node) { return generate(node.version) + generate(node.value) + generate(node.profile) + generate(node.wsEnd); }, pragma: function (node) { return generate(node.pragma) + generate(node.body) + generate(node.wsEnd); }, line: function (node) { return generate(node.line) + generate(node.value) + generate(node.wsEnd); }, extension: function (node) { return generate(node.extension) + generate(node.name) + generate(node.colon) + generate(node.behavior) + generate(node.wsEnd); }, }; var generate = makeGeneratorPreprocessor(generators); export default generate;