Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 17a18
- > escapeXml_regexp : /[&<>"]/g,
- 20c21
- < return typeof(s) != 'string' ? s : s.replace(/[&<>"]/g, Shotenjin._escape_func); //"
- ---
- > return typeof(s) != 'string' ? s : s.replace(Shotenjin.escapeXml_regexp, Shotenjin._escape_func); //"
- 44c45,47
- <
- ---
- >
- > extension : {}, // extension functions (ex. !{extension_name param} -> extension_name.call(window, 'param'); )
- >
- 92a96
- > _parseExpressions_regexp : /([$#!])\{(.*?)\}/g,
- 96c100
- < var regexp = /([$#])\{(.*?)\}/g;
- ---
- > var regexp = this._parseExpressions_regexp;
- 107c111
- < if (indicator == "$")
- ---
- > if (indicator == "$") {
- 109c113,119
- < else
- ---
- > } else if (indicator == "!") {
- > var extension = expr.split(' ');
- > var func = Shotenjin.extension[extension.shift()];
- > if (func) {
- > buf.push(func(extension.join(' ')));
- > };
- > } else {
- 110a121
- > };
- 118a130,131
- > addText_regexp1 : /[\'\\]/g,
- > addText_regexp2 : /\n/g,
- 121c134
- < var s = text.replace(/[\'\\]/g, '\\$&').replace(/\n/g, '\\n\\\n');
- ---
- > var s = text.replace(this.addText_regexp1, '\\$&').replace(this.addText_regexp2, '\\n\\\n');
- /*
- * $Rev: 39 $
- * $Release: 0.0.3 $
- * Copyright(c) 2007-2008 kuwata-lab.com all rights reserved
- * License: MIT License
- */
- /**
- * namespace
- */
- var Shotenjin = {
- _escape_table: { '&': '&', '<': '<', '>': '>', '"': '"' },
- _escape_func: function(m) { return Shotenjin._escape_table[m] },
- escapeXml_regexp : /[&<>"]/g,
- escapeXml: function(s) {
- //if (s == null) return '';
- return typeof(s) != 'string' ? s : s.replace(Shotenjin.escapeXml_regexp, Shotenjin._escape_func); //"
- //return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); //"
- },
- escapeXml2: function(s) {
- if (s == null) return '';
- return String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); //"
- },
- strip: function(s) {
- if (! s) return s;
- //return s.replace(/^\s+|\s+$/g, '');
- return s.replace(/^\s+/, '').replace(/\s+$/, '');
- },
- // ex. {x: 10, y: 'foo'}
- // => "var x = _context['x'];\nvar y = _conntext['y'];\n"
- _setlocalvarscode: function(obj) {
- var buf = [];
- for (var p in obj) {
- buf.push("var ", p, " = _context['", p, "'];\n");
- }
- return buf.join('');
- },
- extension : {}, // extension functions (ex. !{extension_name param} -> extension_name.call(window, 'param'); )
- _end: undefined // dummy property to escape strict warning (not legal in ECMA-262)
- };
- delete(Shotenjin._end);
- var escapeXml = Shotenjin.escapeXml;
- /**
- * Template class
- */
- Shotenjin.Template = function(properties) {
- if (properties) {
- var p = properties;
- if (p['escaefunc']) this.escapefunc = p['escapefunc'];
- }
- };
- Shotenjin.Template.prototype = {
- escapefunc: 'escapeXml',
- program: null,
- convert: function(input) {
- var buf = [];
- buf.push("var _buf = []; ");
- this.parseStatements(buf, input);
- buf.push("_buf.join('')\n");
- return this.program = buf.join('');
- },
- parseStatements: function(buf, input) {
- var regexp = /<\?js(\s(.|\n)*?) ?\?>/mg;
- var pos = 0;
- var m;
- while ((m = regexp.exec(input)) != null) {
- var stmt = m[1];
- var text = input.substring(pos, m.index);
- pos = m.index + m[0].length;
- //
- if (text) this.parseExpressions(buf, text);
- if (stmt) buf.push(stmt);
- }
- var rest = pos == 0 ? input : input.substring(pos);
- this.parseExpressions(buf, rest);
- },
- _parseExpressions_regexp : /([$#!])\{(.*?)\}/g,
- parseExpressions: function(buf, input) {
- if (! input) return;
- buf.push(" _buf.push(");
- var regexp = this._parseExpressions_regexp;
- var pos = 0;
- var m;
- while ((m = regexp.exec(input)) != null) {
- var text = input.substring(pos, m.index);
- var s = m[0];
- pos = m.index + s.length;
- this.addText(buf, text);
- buf.push(", ");
- var indicator = m[1];
- var expr = m[2];
- if (indicator == "$") {
- buf.push(this.escapefunc, "(", expr, "), ");
- } else if (indicator == "!") {
- var extension = expr.split(' ');
- var func = Shotenjin.extension[extension.shift()];
- if (func) {
- buf.push(func(extension.join(' ')));
- };
- } else {
- buf.push(expr, ", ");
- };
- }
- var rest = pos == 0 ? input : input.substring(pos);
- rest ? this.addText(buf, rest, true) : buf.push('""');
- buf.push(");");
- if (input.charAt(input.length-1) == "\n")
- buf.push("\n");
- },
- addText_regexp1 : /[\'\\]/g,
- addText_regexp2 : /\n/g,
- addText: function(buf, text, encode_newline) {
- if (! text) return;
- var s = text.replace(this.addText_regexp1, '\\$&').replace(this.addText_regexp2, '\\n\\\n');
- buf.push("'", s, "'");
- },
- render: function(_context) {
- if (_context) {
- eval(Shotenjin._setlocalvarscode(_context));
- }
- else {
- _context = {};
- }
- return eval(this.program);
- },
- _end: undefined // dummy property to escape strict warning (not legal in ECMA-262)
- };
- delete(Shotenjin.Template.prototype._end);
- /*
- * convenient function
- */
- Shotenjin.render = function(template_str, context) {
- var template = new Shotenjin.Template();
- template.convert(template_str);
- var output = template.render(context);
- return output;
- };
Add Comment
Please, Sign In to add comment