Skip to content
/ olc Public

Ruins days by replacing characters with a homograph / homoglyph (like substituting semi-colons with the Greek question mark).

License

Notifications You must be signed in to change notification settings

adam-lynch/olc

Repository files navigation

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.

About

Ruins days by replacing characters with a homograph / homoglyph (like substituting semi-colons with the Greek question mark).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published