mirror of
				https://github.com/twbs/bootstrap.git
				synced 2025-10-30 00:05:32 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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')); |