mirror of https://gitlab.com/curben/blog
				
				
				
			feat: add smartypants
- replace right arrow with unicode equivalent
This commit is contained in:
		
							parent
							
								
									9b74a5fce3
								
							
						
					
					
						commit
						86cf708fda
					
				|  | @ -0,0 +1,48 @@ | |||
| const { escape } = require('marked/src/helpers'); | ||||
| 
 | ||||
| // https://github.com/markedjs/marked/blob/b6773fca412c339e0cedd56b63f9fa1583cfd372/src/Lexer.js#L8-L24
 | ||||
| // Replace dashes only
 | ||||
| const smartypants = (str) => { | ||||
|   return str | ||||
|     // em-dashes
 | ||||
|     .replace(/---/g, '\u2014') | ||||
|     // en-dashes
 | ||||
|     .replace(/--/g, '\u2013') | ||||
|     // opening singles
 | ||||
|     .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') | ||||
|     // closing singles & apostrophes
 | ||||
|     .replace(/'/g, '\u2019') | ||||
|     // opening doubles
 | ||||
|     .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') | ||||
|     // closing doubles
 | ||||
|     .replace(/"/g, '\u201d') | ||||
|     // ellipses
 | ||||
|     .replace(/\.{3}/g, '\u2026') | ||||
|     // right arrow
 | ||||
|     .replace(/->/g, '\u2192'); | ||||
| }; | ||||
| 
 | ||||
| hexo.extend.filter.register('marked:tokenizer', function(tokenizer) { | ||||
|   const { smartypants: isSmarty } = this.config.marked; | ||||
|   tokenizer.inlineText = function(src, inRawBlock) { | ||||
|     const { rules } = this; | ||||
| 
 | ||||
|     // https://github.com/markedjs/marked/blob/b6773fca412c339e0cedd56b63f9fa1583cfd372/src/Tokenizer.js#L643-L658
 | ||||
|     const cap = rules.inline.text.exec(src); | ||||
|     if (cap) { | ||||
|       let text; | ||||
|       if (inRawBlock) { | ||||
|         text = cap[0]; | ||||
|       } else { | ||||
|         text = escape(isSmarty ? smartypants(cap[0]) : cap[0]); | ||||
|       } | ||||
|       return { | ||||
|         // `type` value is a corresponding renderer method
 | ||||
|         // https://marked.js.org/using_pro#inline-level-renderer-methods
 | ||||
|         type: 'text', | ||||
|         raw: cap[0], | ||||
|         text | ||||
|       }; | ||||
|     } | ||||
|   } | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue