Serve fonts

This commit is contained in:
Petr Sloup 2016-03-11 09:48:35 +01:00
parent b98b7244f6
commit d742672238
3 changed files with 68 additions and 3 deletions

42
src/serve_font.js Normal file
View file

@ -0,0 +1,42 @@
'use strict';
var path = require('path'),
fs = require('fs');
var clone = require('clone'),
express = require('express');
module.exports = function(fontPath, allowedFonts) {
var app = express().disable('x-powered-by');
var rootPath = path.join(process.cwd(), fontPath || '');
app.get('/fonts/:fontstack/:range([\\d]+-[\\d]+).pbf',
function(req, res, next) {
var fontstack = decodeURI(req.params.fontstack);
var range = req.params.range;
var fonts = fontstack.split(',');
if (fonts.length == 1) {
if (allowedFonts[fonts[0]]) {
var filename = rootPath + '/' + fonts[0] + '/' + range + '.pbf';
return fs.readFile(filename, function(err, data) {
if (err) {
console.log('Font load error:', filename);
return res.status(404).send('File not found');
} else {
res.header('Content-type', 'application/x-protobuf');
return res.send(data);
}
});
} else {
return res.status(403).send('Forbidden');
}
} else {
return res.status(501).send('Not Yet Implemented');
}
});
return app;
};

View file

@ -7,7 +7,7 @@ var clone = require('clone'),
express = require('express');
module.exports = function(repo, options, id, reportVector) {
module.exports = function(repo, options, id, reportVector, reportFont) {
var app = express().disable('x-powered-by');
var rootPath = path.join(process.cwd(), options.root || '');
@ -25,6 +25,20 @@ module.exports = function(repo, options, id, reportVector) {
}
});
var findFontReferences = function(obj) {
Object.keys(obj).forEach(function(key) {
var value = obj[key];
if (key == 'text-font') {
if (value && value.length > 0) {
value.forEach(reportFont);
}
} else if (value && typeof value == 'object') {
findFontReferences(value);
}
});
};
styleJSON.layers.forEach(findFontReferences);
var spritePath = path.join(rootPath, styleJSON.sprite);
styleJSON.sprite = 'local://styles/' + id + '/sprite';

View file

@ -12,7 +12,8 @@ var clone = require('clone'),
express = require('express'),
morgan = require('morgan');
var serve_raster = require('./serve_raster'),
var serve_font = require('./serve_font'),
serve_raster = require('./serve_raster'),
serve_style = require('./serve_style'),
serve_vector = require('./serve_vector'),
utils = require('./utils');
@ -22,7 +23,11 @@ module.exports = function(opts, callback) {
serving = {
styles: {},
raster: {},
vector: {}
vector: {},
fonts: { // default fonts, always expose these (if they exist)
'Open Sans Regular': true,
'Arial Unicode MS Regular': true
}
};
app.enable('trust proxy');
@ -65,6 +70,8 @@ module.exports = function(opts, callback) {
};
return id;
}
}, function(font) {
serving.fonts[font] = true;
}));
}
if (item.raster !== false) {
@ -72,6 +79,8 @@ module.exports = function(opts, callback) {
}
});
app.use('/', serve_font('glyphs', serving.fonts));
//TODO: cors
Object.keys(vector).forEach(function(id) {