| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/usr/bin/env node
- /*
- * Copyright 2011 Twitter, Inc.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- var hogan = require('../lib/hogan.js'),
- path = require('path'),
- fs = require('fs');
- var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'],
- specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'),
- templates;
- // Escape special regexp characters
- function esc(text) {
- return text.replace(specialsRegExp, '\\$1');
- }
- // Check for dirs and correct ext (<3 for windows)
- function extractFiles(args) {
- var usage = 'USAGE: hulk ./templates/*.mustaches\n' +
- 'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too',
- files = [];
- if (!args.length) {
- console.log(usage);
- process.exit(-1);
- }
- args.forEach(function (arg) {
- if (/\*/.test(arg)) {
- arg = arg.split('*');
- return files = files.concat(
- fs.readdirSync(arg[0] || '.')
- .map(function (f) {
- return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f);
- })
- .filter(function (f) {
- return f;
- })
- );
- }
- files.push(arg);
- })
- return files;
- }
- // Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark
- function removeByteOrderMark(text) {
- if (text.charCodeAt(0) === 0xfeff) {
- return text.substring(1);
- }
- return text;
- }
- // Write a template foreach file that matches template extension
- templates = extractFiles(process.argv.slice(2))
- .map(function (file) {
- var openedFile = fs.readFileSync(file, 'utf-8'), name;
- if (!openedFile) return;
- name = file.replace(/\..*$/, '');
- openedFile = removeByteOrderMark(openedFile.trim());
- return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');';
- })
- .filter(function (t) {
- return t;
- });
- // Output templates
- if (!templates.length) return;
- console.log('var templates = {};');
- console.log(templates.join('\n'));
|