Fix font compositing (close #32)

This commit is contained in:
Petr Sloup
2016-07-26 18:56:32 +07:00
parent ed0af943da
commit a0fbf7fb79
5 changed files with 54 additions and 36 deletions
+4 -34
View File
@@ -1,12 +1,9 @@
'use strict';
var async = require('async'),
path = require('path'),
fs = require('fs');
var clone = require('clone'),
express = require('express');
var utils = require('./utils');
module.exports = function(options, allowedFonts) {
var app = express().disable('x-powered-by');
@@ -15,41 +12,14 @@ module.exports = function(options, allowedFonts) {
var fontPath = options.paths.fonts;
var getFontPbf = function(name, range, callback) {
// if some of the files failed to load (does not exist or not allowed),
// return empty buffer so the other fonts can still work
if (allowedFonts[name]) {
var filename = path.join(fontPath, name, range + '.pbf');
return fs.readFile(filename, function(err, data) {
if (err) {
console.log('Font load error:', filename);
return callback(null, new Buffer([]));
} else {
return callback(null, data);
}
});
} else {
return callback(null, new Buffer([]));
}
};
app.get('/:fontstack/:range([\\d]+-[\\d]+).pbf',
function(req, res, next) {
var fontstack = decodeURI(req.params.fontstack);
var range = req.params.range;
var fonts = fontstack.split(',');
var queue = [];
fonts.forEach(function(font) {
queue.push(function(callback) {
getFontPbf(font, range, callback);
});
});
return async.parallel(queue, function(err, results) {
var concated = Buffer.concat(results);
if (err || concated.length == 0) {
return utils.getFontsPbf(allowedFonts, fontPath, fontstack, range,
function(err, concated) {
if (err || concated.length === 0) {
return res.status(400).send('');
} else {
res.header('Content-type', 'application/x-protobuf');