Вход Регистрация
Файл: error-kitty/node_modules/mocha/node_modules/jade/lib/jade.js
Строк: 221
<?php
/*!
 * Jade
 * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var Parser = require('./parser')
  , 
Lexer = require('./lexer')
  , 
Compiler = require('./compiler')
  , 
runtime = require('./runtime')
// if node
  
fs = require('fs');
// end

/**
 * Library version.
 */

exports.version '0.26.3';

/**
 * Expose self closing tags.
 */

exports.selfClosing = require('./self-closing');

/**
 * Default supported doctypes.
 */

exports.doctypes = require('./doctypes');

/**
 * Text filters.
 */

exports.filters = require('./filters');

/**
 * Utilities.
 */

exports.utils = require('./utils');

/**
 * Expose `Compiler`.
 */

exports.Compiler Compiler;

/**
 * Expose `Parser`.
 */

exports.Parser Parser;

/**
 * Expose `Lexer`.
 */

exports.Lexer Lexer;

/**
 * Nodes.
 */

exports.nodes = require('./nodes');

/**
 * Jade runtime helpers.
 */

exports.runtime runtime;

/**
 * Template function cache.
 */

exports.cache = {};

/**
 * Parse the given `str` of jade and return a function body.
 *
 * @param {String} str
 * @param {Object} options
 * @return {String}
 * @api private
 */

function parse(stroptions){
  try {
    
// Parse
    
var parser = new Parser(stroptions.filenameoptions);

    
// Compile
    
var compiler = new (options.compiler || Compiler)(parser.parse(), options)
      , 
js compiler.compile();

    
// Debug compiler
    
if (options.debug) {
      
console.error('nCompiled Function:nn33[90m%s33[0m'js.replace(/^/gm'  '));
    }

    return 
''
      
'var buf = [];n'
      
+ (options.self
        
'var self = locals || {};n' js
        
'with (locals || {}) {n' js 'n}n')
      + 
'return buf.join("");';
  } catch (
err) {
    
parser parser.context();
    
runtime.rethrow(errparser.filenameparser.lexer.lineno);
  }
}

/**
 * Compile a `Function` representation of the given jade `str`.
 *
 * Options:
 *
 *   - `compileDebug` when `false` debugging code is stripped from the compiled template
 *   - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()`
 *      for use with the Jade client-side runtime.js
 *
 * @param {String} str
 * @param {Options} options
 * @return {Function}
 * @api public
 */

exports.compile = function(stroptions){
  var 
options options || {}
    , 
client options.client
    
filename options.filename
      
JSON.stringify(options.filename)
      : 
'undefined'
    
fn;

  if (
options.compileDebug !== false) {
    
fn = [
        
'var __jade = [{ lineno: 1, filename: ' filename ' }];'
      
'try {'
      
parse(String(str), options)
      , 
'} catch (err) {'
      
'  rethrow(err, __jade[0].filename, __jade[0].lineno);'
      
'}'
    
].join('n');
  } else {
    
fn parse(String(str), options);
  }

  if (
client) {
    
fn 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;n' fn;
  }

  
fn = new Function('locals, attrs, escape, rethrow, merge'fn);

  if (
client) return fn;

  return function(
locals){
    return 
fn(localsruntime.attrsruntime.escaperuntime.rethrowruntime.merge);
  };
};

/**
 * Render the given `str` of jade and invoke
 * the callback `fn(err, str)`.
 *
 * Options:
 *
 *   - `cache` enable template caching
 *   - `filename` filename required for `include` / `extends` and caching
 *
 * @param {String} str
 * @param {Object|Function} options or fn
 * @param {Function} fn
 * @api public
 */

exports.render = function(stroptionsfn){
  
// swap args
  
if ('function' == typeof options) {
    
fn optionsoptions = {};
  }

  
// cache requires .filename
  
if (options.cache && !options.filename) {
    return 
fn(new Error('the "filename" option is required for caching'));
  }

  try {
    var 
path options.filename;
    var 
tmpl options.cache
      
exports.cache[path] || (exports.cache[path] = exports.compile(stroptions))
      : 
exports.compile(stroptions);
    
fn(nulltmpl(options));
  } catch (
err) {
    
fn(err);
  }
};

/**
 * Render a Jade file at the given `path` and callback `fn(err, str)`.
 *
 * @param {String} path
 * @param {Object|Function} options or callback
 * @param {Function} fn
 * @api public
 */

exports.renderFile = function(pathoptionsfn){
  var 
key path ':string';

  if (
'function' == typeof options) {
    
fn optionsoptions = {};
  }

  try {
    
options.filename path;
    var 
str options.cache
      
exports.cache[key] || (exports.cache[key] = fs.readFileSync(path'utf8'))
      : 
fs.readFileSync(path'utf8');
    
exports.render(stroptionsfn);
  } catch (
err) {
    
fn(err);
  }
};

/**
 * Express support.
 */

exports.__express exports.renderFile;
?>
Онлайн: 0
Реклама