Ruins days by replacing characters with a homograph / homoglyph (like substituting semi-colons with the Greek question mark).
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
images
test
.gitignore
.npmignore
.travis.yml
LICENSE.md
README.md
appveyor.yml
homographs.json
index.js
package.json

README.md

olc

NPM version Build Status Windows Build Status Dependency Status


Ruins days by replacing characters in files with a homograph / homoglyph (like substituting semi-colons with the Greek question mark). "Olc" is the Irish word for "bad".

Inspired by Ben Johnson's tweet;

Replace a semicolon (;) with a greek question mark (;) in your friend's JavaScript and watch them pull their hair out over the syntax error.

By default, that's all that plugin does but can replace other homographs as well (for extra frustration) via options. See the test/expected directory for example output.

Installation

npm install olc

Basic usage (without Gulp)

You'll need to pass Vinyl files, with a Buffer / Stream as content.

var olc = require('olc');
var File = require('vinyl');

var file = new File({
    path: 'example/directory/file.js',
    cwd: 'example/',
    base: 'example/directory',
    contents: fs.createReadStream('example/directory/file.js')
    // or contents: new Buffer(fs.readFileSync('example/directory/file.js'))
});
// or instead of creating a new file with the vinyl module,
// just use my glob-to-vinyl module


var stream = olc();
stream.on('data', function(newFile){
    // Tada!
    // newFile now has Greek question marks instead of semi-colons
});

stream
    .write(file)
    .end();

Gulp usage

var gulp = require('gulp');
var olc = require('olc');

gulp.task('default', function() {
    gulp.src('*.js')
        .pipe(olc())
        .pipe(gulp.dest('./output'));
});

Options

Mode

If omitted, this option defaults to greek.

Greek

olc({
    mode: 'greek'
})

This mode only replaces semi-colons with the Greek question mark as the specification tweet says.

One

olc({
    mode: 'one'
})

This mode will chose a target homograph at random and replace it throughout each file. For extra confusion, if the character has multiple possible homographs, then both will used as a substitution (randomly per occurrence).

All

olc({
    mode: 'all'
})

Will replace all instances of the homographs we look for with their counterparts.

charactersToReplace

olc({
    charactersToReplace: ';)('
    // or charactersToReplace: [';', ')', '(']
})

This option (a string or array) of characters which should be replaced with their homographs. Characters which aren't one of the homographs we look for will be ignored.

If this option is given, the mode option is ignored.