MCPcopy Create free account
hub / github.com/TruthHun/BookStack / RegexTokeniser

Function RegexTokeniser

static/word2md/mammoth.browser.js:15292–15354  ·  view source on GitHub ↗
(rules)

Source from the content-addressed store, hash-verified

15290exports.RegexTokeniser = RegexTokeniser;
15291
15292function RegexTokeniser(rules) {
15293 rules = rules.map(function(rule) {
15294 return {
15295 name: rule.name,
15296 regex: new RegExp(rule.regex.source, "g")
15297 };
15298 });
15299
15300 function tokenise(input, description) {
15301 var source = new StringSource(input, description);
15302 var index = 0;
15303 var tokens = [];
15304
15305 while (index < input.length) {
15306 var result = readNextToken(input, index, source);
15307 index = result.endIndex;
15308 tokens.push(result.token);
15309 }
15310
15311 tokens.push(endToken(input, source));
15312 return tokens;
15313 }
15314
15315 function readNextToken(string, startIndex, source) {
15316 for (var i = 0; i < rules.length; i++) {
15317 var regex = rules[i].regex;
15318 regex.lastIndex = startIndex;
15319 var result = regex.exec(string);
15320
15321 if (result) {
15322 var endIndex = startIndex + result[0].length;
15323 if (result.index === startIndex && endIndex > startIndex) {
15324 var value = result[1];
15325 var token = new Token(
15326 rules[i].name,
15327 value,
15328 source.range(startIndex, endIndex)
15329 );
15330 return {token: token, endIndex: endIndex};
15331 }
15332 }
15333 }
15334 var endIndex = startIndex + 1;
15335 var token = new Token(
15336 "unrecognisedCharacter",
15337 string.substring(startIndex, endIndex),
15338 source.range(startIndex, endIndex)
15339 );
15340 return {token: token, endIndex: endIndex};
15341 }
15342
15343 function endToken(input, source) {
15344 return new Token(
15345 "end",
15346 null,
15347 source.range(input.length, input.length)
15348 );
15349 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected