Browse Source

Fixed fuckup on minification mangling, related to #89

pull/14/head
Vitaly Puzrin 10 years ago
parent
commit
06fe4b9e53
  1. 4
      lib/linkifier.js
  2. 27
      lib/parser_block.js
  3. 34
      lib/parser_inline.js
  4. 113
      lib/ruler.js
  5. 6
      lib/typographer.js

4
lib/linkifier.js

@ -8,7 +8,7 @@ var Ruler = require('./ruler');
var _rules = [ var _rules = [
require('./rules_text/linkify') [ 'linkify', require('./rules_text/linkify') ]
]; ];
@ -20,7 +20,7 @@ function Linkifier() {
this.ruler = new Ruler(this.rulesUpdate.bind(this)); this.ruler = new Ruler(this.rulesUpdate.bind(this));
for (var i = 0; i < _rules.length; i++) { for (var i = 0; i < _rules.length; i++) {
this.ruler.after(_rules[i]); this.ruler.push(_rules[i][0], _rules[i][1]);
} }
} }

27
lib/parser_block.js

@ -8,19 +8,18 @@ var Ruler = require('./ruler');
var State = require('./rules_block/state_block'); var State = require('./rules_block/state_block');
var _rules = []; var _rules = [
[ 'code', require('./rules_block/code') ],
// `list` should be after `hr`, but before `heading` [ 'fences', require('./rules_block/fences'), [ 'paragraph', 'blockquote', 'list' ] ],
_rules.push([ require('./rules_block/code') ]); [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'blockquote', 'list' ] ],
_rules.push([ require('./rules_block/fences'), 'paragraph', 'blockquote', 'list' ]); [ 'hr', require('./rules_block/hr'), [ 'paragraph', 'blockquote', 'list' ] ],
_rules.push([ require('./rules_block/blockquote'), 'paragraph', 'blockquote', 'list' ]); [ 'list', require('./rules_block/list'), [ 'paragraph', 'blockquote' ] ],
_rules.push([ require('./rules_block/hr'), 'paragraph', 'blockquote', 'list' ]); [ 'heading', require('./rules_block/heading'), [ 'paragraph', 'blockquote' ] ],
_rules.push([ require('./rules_block/list'), 'paragraph', 'blockquote' ]); [ 'lheading', require('./rules_block/lheading') ],
_rules.push([ require('./rules_block/heading'), 'paragraph', 'blockquote' ]); [ 'htmlblock', require('./rules_block/htmlblock'), [ 'paragraph', 'blockquote' ] ],
_rules.push([ require('./rules_block/lheading') ]); [ 'table', require('./rules_block/table'), [ 'paragraph' ] ],
_rules.push([ require('./rules_block/htmlblock'), 'paragraph', 'blockquote' ]); [ 'paragraph', require('./rules_block/paragraph') ]
_rules.push([ require('./rules_block/table'), 'paragraph' ]); ];
_rules.push([ require('./rules_block/paragraph') ]);
// Block Parser class // Block Parser class
@ -34,7 +33,7 @@ function ParserBlock() {
this.ruler = new Ruler(this.rulesUpdate.bind(this)); this.ruler = new Ruler(this.rulesUpdate.bind(this));
for (var i = 0; i < _rules.length; i++) { for (var i = 0; i < _rules.length; i++) {
this.ruler.after(_rules[i][0], _rules[i].slice(1)); this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });
} }
} }

34
lib/parser_inline.js

@ -9,22 +9,22 @@ var StateInline = require('./rules_inline/state_inline');
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Parser rules // Parser rules
var _rules = []; var _rules = [
[ 'text', require('./rules_inline/text') ],
_rules.push(require('./rules_inline/text')); [ 'newline', require('./rules_inline/newline') ],
_rules.push(require('./rules_inline/newline')); [ 'escape', require('./rules_inline/escape') ],
_rules.push(require('./rules_inline/escape')); [ 'backticks', require('./rules_inline/backticks') ],
_rules.push(require('./rules_inline/backticks')); [ 'del', require('./rules_inline/del') ],
_rules.push(require('./rules_inline/del')); [ 'ins', require('./rules_inline/ins') ],
_rules.push(require('./rules_inline/ins')); [ 'mark', require('./rules_inline/mark') ],
_rules.push(require('./rules_inline/mark')); [ 'emphasis', require('./rules_inline/emphasis') ],
_rules.push(require('./rules_inline/emphasis')); [ 'sub', require('./rules_inline/sub') ],
_rules.push(require('./rules_inline/sub')); [ 'sup', require('./rules_inline/sup') ],
_rules.push(require('./rules_inline/sup')); [ 'links', require('./rules_inline/links') ],
_rules.push(require('./rules_inline/links')); [ 'autolink', require('./rules_inline/autolink') ],
_rules.push(require('./rules_inline/autolink')); [ 'htmltag', require('./rules_inline/htmltag') ],
_rules.push(require('./rules_inline/htmltag')); [ 'entity', require('./rules_inline/entity') ]
_rules.push(require('./rules_inline/entity')); ];
var BAD_PROTOCOLS = [ 'vbscript', 'javascript', 'file' ]; var BAD_PROTOCOLS = [ 'vbscript', 'javascript', 'file' ];
@ -60,7 +60,7 @@ function ParserInline() {
this.ruler = new Ruler(this.rulesUpdate.bind(this)); this.ruler = new Ruler(this.rulesUpdate.bind(this));
for (var i = 0; i < _rules.length; i++) { for (var i = 0; i < _rules.length; i++) {
this.ruler.after(_rules[i]); this.ruler.push(_rules[i][0], _rules[i][1]);
} }
} }

113
lib/ruler.js

@ -7,20 +7,6 @@
'use strict'; 'use strict';
////////////////////////////////////////////////////////////////////////////////
// helpers
function _class(obj) { return Object.prototype.toString.call(obj); }
function isFunction(obj) { return _class(obj) === '[object Function]'; }
function functionName(fn) {
var ret = fn.toString();
ret = ret.substr('function '.length);
ret = ret.substr(0, ret.indexOf('('));
return ret;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
function Ruler(compileFn) { function Ruler(compileFn) {
@ -51,89 +37,68 @@ Ruler.prototype.find = function (name) {
}; };
// Replace/delete parser function // Replace rule function
// //
Ruler.prototype.at = function (name, fn, altNames) { Ruler.prototype.at = function (name, fn, options) {
var index = this.find(name); var index = this.find(name);
var opt = options || {};
if (index === -1) { if (index === -1) { throw new Error('Parser rule not found: ' + name); }
throw new Error('Parser rule not found: ' + name);
}
if (isFunction(fn)) {
this.rules[index].fn = fn;
if (altNames) {
this.rules[index].alt = altNames;
}
} else {
this.rules = this.rules.slice(0, index).concat(this.rules.slice(index + 1));
}
this.rules[index].fn = fn;
this.rules[index].alt = opt.alt || [];
this.compile(); this.compile();
}; };
// Add function to parser chain before one with given name. // Add rule to chain before one with given name.
// Or add to start, if name not defined
// //
Ruler.prototype.before = function (name, fn, altNames) { Ruler.prototype.before = function (beforeName, ruleName, fn, options) {
var index, rule; var index = this.find(beforeName);
var opt = options || {};
if (isFunction(name)) { if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }
altNames = fn;
fn = name;
name = '';
}
rule = { this.rules.splice(index, 0, {
name: functionName(fn), name: ruleName,
enabled: true, enabled: true,
fn: fn, fn: fn,
alt: altNames || [] alt: opt.alt || []
}; });
if (!name) {
this.rules.unshift(rule);
} else {
index = this.find(name);
if (index === -1) {
throw new Error('Parser rule not found: ' + name);
}
this.rules.splice(index, 0, rule);
}
this.compile(); this.compile();
}; };
// Add function to parser chain after one with given name. // Add rule to chain after one with given name.
// Or add to end, if name not defined
// //
Ruler.prototype.after = function (name, fn, altNames) { Ruler.prototype.after = function (afterName, ruleName, fn, options) {
var index, rule; var index = this.find(afterName);
var opt = options || {};
if (isFunction(name)) { if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }
altNames = fn;
fn = name;
name = '';
}
rule = { this.rules.splice(index + 1, 0, {
name: functionName(fn), name: ruleName,
enabled: true, enabled: true,
fn: fn, fn: fn,
alt: altNames || [] alt: opt.alt || []
}; });
if (!name) { this.compile();
this.rules.push(rule); };
} else {
index = this.find(name); // Add rule to the end of chain.
if (index === -1) { //
throw new Error('Parser rule not found: ' + name); Ruler.prototype.push = function (ruleName, fn, options) {
} var opt = options || {};
this.rules.splice(index + 1, 0, rule);
} this.rules.push({
name: ruleName,
enabled: true,
fn: fn,
alt: opt.alt || []
});
this.compile(); this.compile();
}; };

6
lib/typographer.js

@ -12,8 +12,8 @@ var Ruler = require('./ruler');
var _rules = [ var _rules = [
require('./rules_text/replace'), [ 'replace', require('./rules_text/replace') ],
require('./rules_text/smartquotes') [ 'smartquotes', require('./rules_text/smartquotes') ]
]; ];
@ -25,7 +25,7 @@ function Typographer() {
this.ruler = new Ruler(this.rulesUpdate.bind(this)); this.ruler = new Ruler(this.rulesUpdate.bind(this));
for (var i = 0; i < _rules.length; i++) { for (var i = 0; i < _rules.length; i++) {
this.ruler.after(_rules[i]); this.ruler.push(_rules[i][0], _rules[i][1]);
} }
} }

Loading…
Cancel
Save