The plugin for Gulp which allows to resolve C++ preprocessor instructions

Usage no npm install needed!

<script type="module">
  import gulpArmapreprocessor from '';


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.


npm install gulp-armapreprocessor


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

gulp.task('preprocess', () => {
    return gulp.src('description.ext')
      .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


Returns: PreprocessorStream


Required: no

Required: no

Type: PreprocessorStorage


Returns: PreprocessorStorage

PreprocessorStorage API


Add the current stream content into the storage


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>".