diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2015-03-12 19:33:49 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-12-22 15:00:39 +0100 |
commit | 2196afddd60f6a9e050cad7baf4bf6d6935f6769 (patch) | |
tree | c434bf9bb0b5d0e2e80f490e13743ba03bc8af17 | |
parent | 46fd9f8a53a680a3d1ce156c71d061d057ea4e67 (diff) | |
download | gitbook-2196afddd60f6a9e050cad7baf4bf6d6935f6769.zip gitbook-2196afddd60f6a9e050cad7baf4bf6d6935f6769.tar.gz gitbook-2196afddd60f6a9e050cad7baf4bf6d6935f6769.tar.bz2 |
Add lib/annotate_engine.js
Decouple rules and annotation execution
-rw-r--r-- | packages/gitbook-markdown/lib/annotate.js | 42 | ||||
-rw-r--r-- | packages/gitbook-markdown/lib/annotate_engine.js | 43 |
2 files changed, 46 insertions, 39 deletions
diff --git a/packages/gitbook-markdown/lib/annotate.js b/packages/gitbook-markdown/lib/annotate.js index dab3d0e..34e5d90 100644 --- a/packages/gitbook-markdown/lib/annotate.js +++ b/packages/gitbook-markdown/lib/annotate.js @@ -1,3 +1,5 @@ +var engine = require('./annotate_engine'); + // Pulled from "kramed.Lexer.rules.tables" var rules = { newline: /^\n+/, code: /^( {4}[^\n]+\n*)+/, @@ -36,45 +38,7 @@ var ruleMap = { } function annotate(src) { - var tokens = []; - - while(src) { - // Pick rule - var rule = ruleTypes.filter(function(ruleName, idx) { - var regex = rules[ruleName]; - return regex.exec(src); - })[0]; - - // No matching rules - if(!rule) { - throw new Error('No rule found for: ' + src); - } - - // Use rule to extract block - var ruleRegex = rules[rule]; - var block = ruleRegex.exec(src); - - // Get rule type - var type = ruleMap[rule] || rule; - - // Get raw text - var raw = block[0]; - - // Break out here to avoid infinite loops - if(raw.length === 0) { - break; - } - - tokens.push({ - type: ruleMap[rule] || rule, - raw: raw, - }); - - // Update source - src = src.substring(raw.length); - } - - return tokens + return engine(src, rules, ruleTypes, ruleMap); } module.exports = annotate; diff --git a/packages/gitbook-markdown/lib/annotate_engine.js b/packages/gitbook-markdown/lib/annotate_engine.js new file mode 100644 index 0000000..1feea47 --- /dev/null +++ b/packages/gitbook-markdown/lib/annotate_engine.js @@ -0,0 +1,43 @@ +function annotateEngine(src, rules, ruleTypes, ruleMap) { + var tokens = []; + + while(src) { + // Pick rule + var rule = ruleTypes.filter(function(ruleName, idx) { + var regex = rules[ruleName]; + return regex.exec(src); + })[0]; + + // No matching rules + if(!rule) { + throw new Error('No rule found for: ' + src); + } + + // Use rule to extract block + var ruleRegex = rules[rule]; + var block = ruleRegex.exec(src); + + // Get rule type + var type = ruleMap[rule] || rule; + + // Get raw text + var raw = block[0]; + + // Break out here to avoid infinite loops + if(raw.length === 0) { + break; + } + + tokens.push({ + type: ruleMap[rule] || rule, + raw: raw, + }); + + // Update source + src = src.substring(raw.length); + } + + return tokens +} + +module.exports = annotateEngine; |