glsl-token-macros

1.0.0 • Public • Published

glsl-token-macros

stable

Extract macro preprocessor statements from an array of GLSL tokens from glsl-tokenizer.

Parses out the macro name, arguments (if present) and contents.

Usage

NPM

macros = tokenMacros(tokens)

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

{
  name: 'MACRO_NAME',
  args: ['a', 'b'],
  value: '(a * 0.5 + 0.5)',
  index: 2,
  token: {
    type: 'preprocessor',
    data: '#define MACRO_NAME(a, b) (a * 0.5 + 0.5)'
  }
}

macro.name

The macro name. For example, #define HELLO_WORLD would result in HELLO_WORLD.

macro.args

The arguments supplied to the macro. If the macro has no arguments, this will be false. Note that 0 arguments will result in an empty array. For example:

const tokenMacros = require('glsl-token-macros')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
#define HELLO_WORLD a
#define LOREM_IPSUM() a
#define BOGAN_IPSUM(a) (a * 0.5 + 0.5)
#define SOME_OTHERS(a, b) (a * 0.5 + b)
`
 
const tokens = tokenize(src)
const macros = tokenMacros(tokens)
 
console.log(macros[0].args) // false
console.log(macros[1].args) // []
console.log(macros[2].args) // ["a"]
console.log(macros[3].args) // ["a", "b"]

macro.value

The macro value. If no value is supplied, this will be an empty string. For example:

const tokenMacros = require('glsl-token-macros')
const toString = require('glsl-token-string')
const tokenize = require('glsl-tokenizer')
const src = `
#define HELLO_WORLD
#define LOREM_IPSUM() a
#define BOGAN_IPSUM(a)    (a * 0.5 + 0.5)
#define SOME_OTHERS(a, b) (a * 0.5 + b)
`
 
const tokens = tokenize(src)
const macros = tokenMacros(tokens)
 
console.log(macros[0].value) // ""
console.log(macros[1].value) // "a"
console.log(macros[2].value) // "(a * 0.5 + 0.5)"
console.log(macros[3].value) // "(a * 0.5 + b)"

macro.token

The original preprocessor token object from the token list.

macro.index

The index of the original preprocessor token object within the token list.

Contributing

See stackgl/contributing for details.

License

MIT. See LICENSE.md for details.

/glsl-token-macros/

    Package Sidebar

    Install

    npm i glsl-token-macros

    Weekly Downloads

    2

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • dy
    • archmoj
    • hughsk
    • mikolalysenko
    • substack
    • mattdesl
    • chrisdickinson
    • yoshuawuyts
    • mikkoh
    • rezaali
    • tatumcreative
    • wwwtyro
    • thibauts
    • bpostlethwaite
    • dfcreative
    • erkaman
    • gre
    • rreusser
    • vorg