summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/lib/blocks.js3
-rw-r--r--js/lib/common.js30
-rw-r--r--js/lib/inlines.js25
3 files changed, 32 insertions, 26 deletions
diff --git a/js/lib/blocks.js b/js/lib/blocks.js
index 9f46a3c..d184b51 100644
--- a/js/lib/blocks.js
+++ b/js/lib/blocks.js
@@ -1,4 +1,5 @@
var Node = require('./node');
+var unescapeString = require('./common').unescapeString;
var C_GREATERTHAN = 62;
var C_NEWLINE = 10;
@@ -7,8 +8,6 @@ var C_OPEN_BRACKET = 91;
var InlineParser = require('./inlines');
-var unescapeString = new InlineParser().unescapeString;
-
var BLOCKTAGNAME = '(?:article|header|aside|hgroup|iframe|blockquote|hr|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)';
var HTMLBLOCKOPEN = "<(?:" + BLOCKTAGNAME + "[\\s/>]" + "|" +
diff --git a/js/lib/common.js b/js/lib/common.js
new file mode 100644
index 0000000..e7cc13b
--- /dev/null
+++ b/js/lib/common.js
@@ -0,0 +1,30 @@
+var entityToChar = require('./html5-entities.js').entityToChar;
+
+var ENTITY = "&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});";
+
+var reBackslashOrAmp = /[\\&]/;
+
+var ESCAPABLE = '[!"#$%&\'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]';
+
+var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi');
+
+var unescapeChar = function(s) {
+ "use strict";
+ if (s[0] === '\\') {
+ return s[1];
+ } else {
+ return entityToChar(s);
+ }
+};
+
+// Replace entities and backslash escapes with literal characters.
+var unescapeString = function(s) {
+ "use strict";
+ if (reBackslashOrAmp.test(s)) {
+ return s.replace(reEntityOrEscapedChar, unescapeChar);
+ } else {
+ return s;
+ }
+};
+
+module.exports = { unescapeString: unescapeString };
diff --git a/js/lib/inlines.js b/js/lib/inlines.js
index bcb9ee8..5e87074 100644
--- a/js/lib/inlines.js
+++ b/js/lib/inlines.js
@@ -1,4 +1,5 @@
var Node = require('./node');
+var unescapeString = require('./common').unescapeString;
var fromCodePoint = require('./from-code-point.js');
var entityToChar = require('./html5-entities.js').entityToChar;
@@ -63,10 +64,6 @@ var reEscapable = new RegExp(ESCAPABLE);
var reEntityHere = new RegExp('^' + ENTITY, 'i');
-var reEntityOrEscapedChar = new RegExp('\\\\' + ESCAPABLE + '|' + ENTITY, 'gi');
-
-var reBackslashOrAmp = /[\\&]/;
-
var reTicks = new RegExp('`+');
var reTicksHere = new RegExp('^`+');
@@ -92,25 +89,6 @@ var reLinkLabel = /^\[(?:[^\\\[\]]|\\[\[\]]){0,1000}\]/;
// Matches a string of non-special characters.
var reMain = /^[^\n`\[\]\\!<&*_]+/m;
-var unescapeChar = function(s) {
- "use strict";
- if (s[0] === '\\') {
- return s[1];
- } else {
- return entityToChar(s);
- }
-};
-
-// Replace entities and backslash escapes with literal characters.
-var unescapeString = function(s) {
- "use strict";
- if (reBackslashOrAmp.test(s)) {
- return s.replace(reEntityOrEscapedChar, unescapeChar);
- } else {
- return s;
- }
-};
-
// Normalize reference label: collapse internal whitespace
// to single space, remove leading/trailing whitespace, case fold.
var normalizeReference = function(s) {
@@ -859,7 +837,6 @@ function InlineParser(){
match: match,
peek: peek,
spnl: spnl,
- unescapeString: unescapeString,
parseBackticks: parseBackticks,
parseBackslash: parseBackslash,
parseAutolink: parseAutolink,