mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 14:18:32 +00:00 
			
		
		
		
	
		
			
	
	
		
			90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | // 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; | ||
|  | };*/ |