summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron O'Mullan <aaron.omullan@gmail.com>2015-03-12 19:33:49 +0100
committerSamy Pessé <samypesse@gmail.com>2016-12-22 15:00:39 +0100
commit2196afddd60f6a9e050cad7baf4bf6d6935f6769 (patch)
treec434bf9bb0b5d0e2e80f490e13743ba03bc8af17
parent46fd9f8a53a680a3d1ce156c71d061d057ea4e67 (diff)
downloadgitbook-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.js42
-rw-r--r--packages/gitbook-markdown/lib/annotate_engine.js43
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;