diff --git a/gulpfile.js b/gulpfile.js index b5c71df62..2667d1e78 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -27,6 +27,7 @@ var stream = require('stream'); var exec = require('child_process').exec; var spawn = require('child_process').spawn; var streamqueue = require('streamqueue'); +var merge = require('merge-stream'); var zip = require('gulp-zip'); var BUILD_DIR = 'build/'; @@ -286,6 +287,15 @@ function checkFile(path) { } } +function checkDir(path) { + try { + var stat = fs.lstatSync(path); + return stat.isDirectory(); + } catch (e) { + return false; + } +} + function createTestSource(testsName) { var source = stream.Readable({ objectMode: true }); source._read = function () { @@ -382,6 +392,98 @@ gulp.task('buildnumber', function (done) { }); }); +gulp.task('locale', function () { + var VIEWER_LOCALE_OUTPUT = 'web/locale/'; + var METADATA_OUTPUT = 'extensions/firefox/'; + var EXTENSION_LOCALE_OUTPUT = 'extensions/firefox/locale/'; + + console.log(); + console.log('### Building localization files'); + + rimraf.sync(EXTENSION_LOCALE_OUTPUT); + mkdirp.sync(EXTENSION_LOCALE_OUTPUT); + rimraf.sync(VIEWER_LOCALE_OUTPUT); + mkdirp.sync(VIEWER_LOCALE_OUTPUT); + + var subfolders = fs.readdirSync(L10N_DIR); + subfolders.sort(); + var metadataContent = ''; + var chromeManifestContent = ''; + var viewerOutput = ''; + var locales = []; + for (var i = 0; i < subfolders.length; i++) { + var locale = subfolders[i]; + var path = L10N_DIR + locale; + if (!checkDir(path)) { + continue; + } + if (!/^[a-z][a-z]([a-z])?(-[A-Z][A-Z])?$/.test(locale)) { + console.log('Skipping invalid locale: ' + locale); + continue; + } + + mkdirp.sync(EXTENSION_LOCALE_OUTPUT + '/' + locale); + mkdirp.sync(VIEWER_LOCALE_OUTPUT + '/' + locale); + + locales.push(locale); + + chromeManifestContent += 'locale pdf.js ' + locale + ' locale/' + + locale + '/\n'; + + if (checkFile(path + '/viewer.properties')) { + viewerOutput += '[' + locale + ']\n' + + '@import url(' + locale + '/viewer.properties)\n\n'; + } + + if (checkFile(path + '/metadata.inc')) { + var metadata = fs.readFileSync(path + '/metadata.inc').toString(); + metadataContent += metadata; + } + } + + return merge([ + createStringSource('metadata.inc', metadataContent) + .pipe(gulp.dest(METADATA_OUTPUT)), + createStringSource('chrome.manifest.inc', chromeManifestContent) + .pipe(gulp.dest(METADATA_OUTPUT)), + gulp.src(L10N_DIR + '/{' + locales.join(',') + '}' + + '/{viewer,chrome}.properties', {base: L10N_DIR}) + .pipe(gulp.dest(EXTENSION_LOCALE_OUTPUT)), + + createStringSource('locale.properties', viewerOutput) + .pipe(gulp.dest(VIEWER_LOCALE_OUTPUT)), + gulp.src(L10N_DIR + '/{' + locales.join(',') + '}' + + '/viewer.properties', {base: L10N_DIR}) + .pipe(gulp.dest(VIEWER_LOCALE_OUTPUT)) + ]); +}); + +gulp.task('cmaps', function () { + var CMAP_INPUT = 'external/cmaps'; + var VIEWER_CMAP_OUTPUT = 'external/bcmaps'; + + console.log(); + console.log('### Building cmaps'); + + // Testing a file that usually present. + if (!checkFile(CMAP_INPUT + '/UniJIS-UCS2-H')) { + console.log('./external/cmaps has no cmap files, download them from:'); + console.log(' https://github.com/adobe-type-tools/cmap-resources'); + throw new Error('cmap files were not found'); + } + + // Remove old bcmap files. + fs.readdirSync(VIEWER_CMAP_OUTPUT).forEach(function (file) { + if (/\.bcmap$/i.test(file)) { + fs.unlinkSync(VIEWER_CMAP_OUTPUT + '/' + file); + } + }); + + var compressCmaps = + require('./external/cmapscompress/compress.js').compressCmaps; + compressCmaps(CMAP_INPUT, VIEWER_CMAP_OUTPUT, true); +}); + gulp.task('bundle-firefox', ['buildnumber'], function () { var defines = builder.merge(DEFINES, {FIREFOX: true}); return streamqueue({ objectMode: true }, diff --git a/make.js b/make.js index 2dc4b6660..7b7a09a60 100644 --- a/make.js +++ b/make.js @@ -374,60 +374,7 @@ target.publish = function() { // Creates localized resources for the viewer and extension. // target.locale = function() { - var METADATA_OUTPUT = 'extensions/firefox/metadata.inc'; - var CHROME_MANIFEST_OUTPUT = 'extensions/firefox/chrome.manifest.inc'; - var EXTENSION_LOCALE_OUTPUT = 'extensions/firefox/locale'; - var VIEWER_LOCALE_OUTPUT = 'web/locale/'; - - cd(ROOT_DIR); - echo(); - echo('### Building localization files'); - - rm('-rf', EXTENSION_LOCALE_OUTPUT); - mkdir('-p', EXTENSION_LOCALE_OUTPUT); - rm('-rf', VIEWER_LOCALE_OUTPUT); - mkdir('-p', VIEWER_LOCALE_OUTPUT); - - var subfolders = ls(LOCALE_SRC_DIR); - subfolders.sort(); - var metadataContent = ''; - var chromeManifestContent = ''; - var viewerOutput = ''; - for (var i = 0; i < subfolders.length; i++) { - var locale = subfolders[i]; - var path = LOCALE_SRC_DIR + locale; - if (!test('-d', path)) { - continue; - } - if (!/^[a-z][a-z]([a-z])?(-[A-Z][A-Z])?$/.test(locale)) { - echo('Skipping invalid locale: ' + locale); - continue; - } - - mkdir('-p', EXTENSION_LOCALE_OUTPUT + '/' + locale); - mkdir('-p', VIEWER_LOCALE_OUTPUT + '/' + locale); - chromeManifestContent += 'locale pdf.js ' + locale + ' locale/' + - locale + '/\n'; - - if (test('-f', path + '/viewer.properties')) { - viewerOutput += '[' + locale + ']\n' + - '@import url(' + locale + '/viewer.properties)\n\n'; - cp(path + '/viewer.properties', EXTENSION_LOCALE_OUTPUT + '/' + locale); - cp(path + '/viewer.properties', VIEWER_LOCALE_OUTPUT + '/' + locale); - } - - if (test('-f', path + '/chrome.properties')) { - cp(path + '/chrome.properties', EXTENSION_LOCALE_OUTPUT + '/' + locale); - } - - if (test('-f', path + '/metadata.inc')) { - var metadata = cat(path + '/metadata.inc'); - metadataContent += metadata; - } - } - viewerOutput.to(VIEWER_LOCALE_OUTPUT + 'locale.properties'); - metadataContent.to(METADATA_OUTPUT); - chromeManifestContent.to(CHROME_MANIFEST_OUTPUT); + execGulp('locale'); }; // @@ -436,25 +383,7 @@ target.locale = function() { // ./external/cmaps location. // target.cmaps = function () { - var CMAP_INPUT = 'external/cmaps'; - var VIEWER_CMAP_OUTPUT = 'external/bcmaps'; - - cd(ROOT_DIR); - echo(); - echo('### Building cmaps'); - - // testing a file that usually present - if (!test('-f', CMAP_INPUT + '/UniJIS-UCS2-H')) { - echo('./external/cmaps has no cmap files, please download them from:'); - echo(' https://github.com/adobe-type-tools/cmap-resources'); - exit(1); - } - - rm(VIEWER_CMAP_OUTPUT + '*.bcmap'); - - var compressCmaps = - require('./external/cmapscompress/compress.js').compressCmaps; - compressCmaps(CMAP_INPUT, VIEWER_CMAP_OUTPUT, true); + execGulp('cmaps'); }; // diff --git a/package.json b/package.json index c39f07c8e..78e5b57f0 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "jasmine": "^2.5.2", "jasmine-core": "^2.5.2", "jsdoc": "^3.3.0-alpha9", + "merge-stream": "^1.0.1", "mkdirp": "^0.5.1", "node-ensure": "^0.0.0", "requirejs": "^2.1.22",