Skip to content

Commit

Permalink
Merge pull request #129 from FracturedShader/feature/skip-UTF-8-BOM
Browse files Browse the repository at this point in the history
Added UTF-8 BOM skipping for partials and pages.
  • Loading branch information
gakimball authored Jul 13, 2017
2 parents 8375d4c + 2a1396c commit 8edca3a
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
4 changes: 2 additions & 2 deletions lib/loadPartials.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
var fs = require('fs');
var path = require('path');
var utils = require('./utils');

Expand All @@ -11,8 +10,9 @@ module.exports = function(dir) {

for (var i in partials) {
var ext = path.extname(partials[i]);
var file = fs.readFileSync(partials[i]);
var file = utils.readWithoutBOM(partials[i]);
var name = path.basename(partials[i], ext);

this.Handlebars.registerPartial(name, file.toString() + '\n');
}
}
3 changes: 2 additions & 1 deletion lib/render.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ var fm = require('front-matter');
var path = require('path');
var through = require('through2');
var processRoot = require('./processRoot');
var utils = require('./utils');

module.exports = function() {
return through.obj(render.bind(this));
Expand All @@ -17,7 +18,7 @@ module.exports = function() {
function render(file, enc, cb) {
try {
// Get the HTML for the current page and layout
var page = fm(file.contents.toString());
var page = fm(utils.readWithoutBOM(file.path).toString());
var pageData;

// Determine which layout to use
Expand Down
22 changes: 21 additions & 1 deletion lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

var glob = require('glob');
var path = require('path');
var fs = require('fs');

/**
* Load a set of files
Expand All @@ -19,4 +20,23 @@ exports.loadFiles = function(dir, pattern) {
}

return files;
}
}

/**
* Skips over the UTF-8 BOM if it exists in the file
* @param {string} path File to load
* @return {Buffer} File contents without BOM
*/
exports.readWithoutBOM = function(path) {
var bomBytes = [0xEF, 0xBB, 0xBF];
var bomSize = bomBytes.length;
var fileData = fs.readFileSync(path);
var dataLength = fileData.length;
var hasBom = true;

for (var i = 0; (i < bomSize) && (i < dataLength) && hasBom; ++i) {
hasBom = fileData[i] === bomBytes[i];
}

return hasBom ? fileData.slice(bomSize) : fileData;
}

0 comments on commit 8edca3a

Please sign in to comment.