/gulp-armapreprocessor-plugin

Plugin for Gulp which allows to resolve C++ preprocessor instructions

Primary LanguageTypeScriptMIT LicenseMIT

node npm Travis branch Coveralls branch Dependencies

Gulp Arma Preprocessor plugin

The plugin's goal is to resolve preprocessor instructions of Arma2/Arma3 missions and addons source files using Gulp.

Installation

npm install gulp-armapreprocessor

Usage

const gulp = require 'gulp';
const preprocessor = require 'gulp-armapreprocessor';

gulp.task('preprocess', () => {
	return gulp.src('description.ext')
	  .pipe(preprocessor())
	  .pipe(/*further processing*/);
});

Unsupported instructions

Include resolution

The plugin will try to resolve #include statements, fetching the required files from the fyle system, relatively to the current file being processed. I.e. if you process a file ${cwd}\src\description.ext and there a line #include "config\defines.hpp" in it, the resulting file ${cwd}\src\config\defines.hpp will be fetched.

Using preprocessor cache

In some situations you may need to substitute #include's content, say if the #include'd file has been preprocessed by another stream and has not been persisted on disk. In that case the following snippet may become handy.

const gulp = require 'gulp';
const preprocessor = require 'gulp-armapreprocessor';

const storage = preprocessor.createStorage();

gulp.task('preprocess', () => {
    const defines = gulp.src('defines.hpp')
        .pipe(/*some processing goes here*/)
        .pipe(storage.add());//save the preprocessed version into a storage

    const description = gulp.src('description.ext')//contains a line: #include "defines.hpp"
        .pipe(preprocessor({ storage: storage }))//all the #include's will be resolved against the storage first
        .pipe(/*further processing*/);

    /*some further actions on streams*/
});

Plugin API

preprocessor([options])

Returns: PreprocessorStream

options

Required: no

options.storage

Required: no

Type: PreprocessorStorage

preprocessor.createStorage()

Returns: PreprocessorStorage

PreprocessorStorage API

storage.add()

Add the current stream content into the storage

storage.clear()

Clean out the storage

Known issues

The #define's containing both # and single-quote symbols inside their values (e.g. #define STRUCT_TEXT "<t color='#aaffaa'>%1</t>") get corrupted while processing. To avoid, replace single-quote symbols with 2x double-quote, e.g. #define STRUCT_TEXT "<t color=""#aaffaa"">%1</t>".