Skip to content

Instantly share code, notes, and snippets.

@brianpeiris
Created July 21, 2014 14:22
Show Gist options
  • Save brianpeiris/3c2cc4bef80be77186d7 to your computer and use it in GitHub Desktop.
Save brianpeiris/3c2cc4bef80be77186d7 to your computer and use it in GitHub Desktop.
// Converts double quotes to single quotes using a JavsScript language parser.
// Single quotes and escaped doubled quotes inside strings are converted to
// double quotes.
//
// Adapted from
// http://ariya.ofilabs.com/2012/02/from-double-quotes-to-single-quotes.html
//
// Usage:
// $ node singlequote.js <input> [output]
// If an output file is not given, the script modified the input file itself.
//
/* global process */
(function () {
'use strict';
var fs = require('fs'),
esprima = require('esprima'),
input = process.argv[2],
output = process.argv[3] || input,
offset = 0,
content = fs.readFileSync(input, 'utf-8'),
tokens = esprima.parse(content, { tokens: true, range: true }).tokens;
function convert(literal) {
var result = literal.substring(1, literal.length - 1);
result = result.replace(/'/g, '"');
result = result.replace(/\\"/g, '"');
return '\'' + result + '\'';
}
tokens.forEach(function (token) {
var str;
if (token.type === 'String' && token.value[0] !== '\'') {
str = convert(token.value);
content = (
content.substring(0, offset + token.range[0]) + str +
content.substring(offset + token.range[1], content.length));
offset += (str.length - token.value.length);
}
});
fs.writeFileSync(output, content);
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment