1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // Skip text characters for text token, place those to pending buffer
- // and increment current pos
- 'use strict';
- // Rule to skip pure text
- // '{}$%@~+=:' reserved for extentions
- // !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~
- // !!!! Don't confuse with "Markdown ASCII Punctuation" chars
- // http://spec.commonmark.org/0.15/#ascii-punctuation-character
- function isTerminatorChar(ch) {
- switch (ch) {
- case 0x0A/* \n */:
- case 0x21/* ! */:
- case 0x23/* # */:
- case 0x24/* $ */:
- case 0x25/* % */:
- case 0x26/* & */:
- case 0x2A/* * */:
- case 0x2B/* + */:
- case 0x2D/* - */:
- case 0x3A/* : */:
- case 0x3C/* < */:
- case 0x3D/* = */:
- case 0x3E/* > */:
- case 0x40/* @ */:
- case 0x5B/* [ */:
- case 0x5C/* \ */:
- case 0x5D/* ] */:
- case 0x5E/* ^ */:
- case 0x5F/* _ */:
- case 0x60/* ` */:
- case 0x7B/* { */:
- case 0x7D/* } */:
- case 0x7E/* ~ */:
- return true;
- default:
- return false;
- }
- }
- module.exports = function text(state, silent) {
- var pos = state.pos;
- while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {
- pos++;
- }
- if (pos === state.pos) { return false; }
- if (!silent) { state.pending += state.src.slice(state.pos, pos); }
- state.pos = pos;
- return true;
- };
- // Alternative implementation, for memory.
- //
- // It costs 10% of performance, but allows extend terminators list, if place it
- // to `ParcerInline` property. Probably, will switch to it sometime, such
- // flexibility required.
- /*
- var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/;
- module.exports = function text(state, silent) {
- var pos = state.pos,
- idx = state.src.slice(pos).search(TERMINATOR_RE);
- // first char is terminator -> empty text
- if (idx === 0) { return false; }
- // no terminator -> text till end of string
- if (idx < 0) {
- if (!silent) { state.pending += state.src.slice(pos); }
- state.pos = state.src.length;
- return true;
- }
- if (!silent) { state.pending += state.src.slice(pos, pos + idx); }
- state.pos += idx;
- return true;
- };*/
|