summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown/lib/annotate_engine.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook-markdown/lib/annotate_engine.js')
-rw-r--r--packages/gitbook-markdown/lib/annotate_engine.js43
1 files changed, 43 insertions, 0 deletions
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;