Socket
Book a DemoInstallSign in
Socket

glsl-token-functions

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

glsl-token-functions

Extract function definitions from an array of GLSL tokens.

latest
Source
npmnpm
Version
1.0.1
Version published
Maintainers
1
Created
Source

glsl-token-functions

stable

Extract function definitions from an array of GLSL tokens from glsl-tokenizer.

You can use this to grab all of the functions in a shader, along with their arguments, return value and name.

Usage

NPM

functions = tokenFunctions(tokens)

Given an array of tokens produced by glsl-tokenizer, return an array of function data in the following format:

{
  name: 'functionName',
  type: 'vec4'
  body: [100, 110],
  args: [98, 99],
  outer: [80, 111]
}

fn.name

The function name. For example, the following function would be main:

void main();

fn.type

The function return type. For example, the following function would be vec2:

vec2 getModel(vec3 p);

Note that this supports structs too! The following function's type would be Ray:

struct Ray {
  vec3 ro;
  vec3 rd;
}

Ray getCamera(vec3 origin);

fn.body

The start and end index in the original tokens array of the function body, i.e. the part between the curly braces. If the function doesn't have a body, this will be false.

For example:

const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void main() { gl_FragColor = vec4(1); }
`

const tokens = tokenize(src)
const functions = tokenFunctions(tokens)

console.log(getBody(functions[0])) // false
console.log(getBody(functions[1])) // " gl_FragColor = vec4(1); "

function getBody () {
  return toString(tokens.slice(fn.body[0], fn.body[1]))
}

fn.args

The start and end index in the original tokens array of the function arguments, i.e. the part including the parenthesis in the function definition.

For example:

const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void drawImage(vec3 ro, vec3 rd);
`

const tokens = tokenize(src)
const functions = tokenFunctions(tokens)

console.log(getArgs(functions[0])) // "()"
console.log(getArgs(functions[1])) // "(vec3 ro, vec3 rd)"

function getArgs () {
  return toString(tokens.slice(fn.args[0], fn.args[1]))
}

fn.outer

The start and end index in the original tokens array of the entire function.

For example:

const tokenFunctions = require('glsl-token-functions')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
void main();
void main() { gl_FragColor = vec4(1); }
`

const tokens = tokenize(src)
const functions = tokenFunctions(tokens)

console.log(getOuter(functions[0])) // "void main();"
console.log(getOuter(functions[1])) // "void main() { gl_FragColor = vec4(1); }"

function getOuter () {
  return toString(tokens.slice(fn.outer[0], fn.outer[1]))
}

Contributing

See stackgl/contributing for details.

License

MIT. See LICENSE.md for details.

Keywords

ecosystem:stackgl

FAQs

Package last updated on 18 Oct 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts