mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 14:18:32 +00:00 
			
		
		
		
	
		
			
	
	
		
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | // Process autolinks '<protocol:...>'
 | ||
|  | 
 | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | 
 | ||
|  | /*eslint max-len:0*/ | ||
|  | var EMAIL_RE    = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/; | ||
|  | var AUTOLINK_RE = /^<([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)>/; | ||
|  | 
 | ||
|  | 
 | ||
|  | module.exports = function autolink(state, silent) { | ||
|  |   var tail, linkMatch, emailMatch, url, fullUrl, token, | ||
|  |       pos = state.pos; | ||
|  | 
 | ||
|  |   if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; } | ||
|  | 
 | ||
|  |   tail = state.src.slice(pos); | ||
|  | 
 | ||
|  |   if (tail.indexOf('>') < 0) { return false; } | ||
|  | 
 | ||
|  |   if (AUTOLINK_RE.test(tail)) { | ||
|  |     linkMatch = tail.match(AUTOLINK_RE); | ||
|  | 
 | ||
|  |     url = linkMatch[0].slice(1, -1); | ||
|  |     fullUrl = state.md.normalizeLink(url); | ||
|  |     if (!state.md.validateLink(fullUrl)) { return false; } | ||
|  | 
 | ||
|  |     if (!silent) { | ||
|  |       token         = state.push('link_open', 'a', 1); | ||
|  |       token.attrs   = [ [ 'href', fullUrl ] ]; | ||
|  |       token.markup  = 'autolink'; | ||
|  |       token.info    = 'auto'; | ||
|  | 
 | ||
|  |       token         = state.push('text', '', 0); | ||
|  |       token.content = state.md.normalizeLinkText(url); | ||
|  | 
 | ||
|  |       token         = state.push('link_close', 'a', -1); | ||
|  |       token.markup  = 'autolink'; | ||
|  |       token.info    = 'auto'; | ||
|  |     } | ||
|  | 
 | ||
|  |     state.pos += linkMatch[0].length; | ||
|  |     return true; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (EMAIL_RE.test(tail)) { | ||
|  |     emailMatch = tail.match(EMAIL_RE); | ||
|  | 
 | ||
|  |     url = emailMatch[0].slice(1, -1); | ||
|  |     fullUrl = state.md.normalizeLink('mailto:' + url); | ||
|  |     if (!state.md.validateLink(fullUrl)) { return false; } | ||
|  | 
 | ||
|  |     if (!silent) { | ||
|  |       token         = state.push('link_open', 'a', 1); | ||
|  |       token.attrs   = [ [ 'href', fullUrl ] ]; | ||
|  |       token.markup  = 'autolink'; | ||
|  |       token.info    = 'auto'; | ||
|  | 
 | ||
|  |       token         = state.push('text', '', 0); | ||
|  |       token.content = state.md.normalizeLinkText(url); | ||
|  | 
 | ||
|  |       token         = state.push('link_close', 'a', -1); | ||
|  |       token.markup  = 'autolink'; | ||
|  |       token.info    = 'auto'; | ||
|  |     } | ||
|  | 
 | ||
|  |     state.pos += emailMatch[0].length; | ||
|  |     return true; | ||
|  |   } | ||
|  | 
 | ||
|  |   return false; | ||
|  | }; |