Web Bookmark
To do it
首先卸载 hexo 默认的 markdown 渲染工具
npm uninstall hexo-renderer-marked --save
安装 markdown-it
npm install hexo-renderer-markdown-it --save
安装 markdown-it-emoji
npm install markdown-it-emoji --save
在站点的 _config.yml 文件里添加以下内容:
# markdown-itmarkdown:render:html: truexhtmlOut: falsebreaks: truelinkify: truetypographer: truequotes: '“”‘’'plugins:- markdown-it-abbr- markdown-it-footnote- markdown-it-ins- markdown-it-sub- markdown-it-sup- markdown-it-emojianchors:level: 2collisionSuffix: 'k'permalink: truepermalinkClass: 'header-anchor'permalinkSymbol: '¶'case: 0separator: '-'
这些配置项说明可以在markdownn-it wiki上查看
Then
由于渲染还是不够完美,有些 emoji 会被解析为 Unicode 字符,所以再安装 twemoji
npm install twemoji --save
安装完之后,需要对 markdown-it-emoji 源码进行编辑,使它使用 twemoji 进行渲染
'use strict';var emojies_defs = require('./lib/data/full.json');var emojies_shortcuts = require('./lib/data/shortcuts');var emoji_html = require('./lib/render');var emoji_replace = require('./lib/replace');var normalize_opts = require('./lib/normalize_opts');var twemoji = require('twemoji') // 引入twemojimodule.exports = function emoji_plugin(md, options) {var defaults = {defs: emojies_defs,shortcuts: emojies_shortcuts,enabled: []};var opts = normalize_opts(md.utils.assign({}, defaults, options || {}));md.renderer.rules.emoji = emoji_html;md.renderer.rules.emoji = function(token, idx) {return twemoji.parse(token[idx].content);}; // 使用 twemoji 进行渲染md.core.ruler.push('emoji', emoji_replace(md, opts.defs, opts.shortcuts, opts.scanRE, opts.replaceRE));};
由于 twemoji 渲染后,emoji 都为图片,所以我们需要对它们的样式进行下设置
img.emoji {height: 1em;width: 1em;margin: 0 .05em 0 .1em !important;box-shadow: none;vertical-align: -0.1em;padding:0px !important;border:none !important;display:inline !important;}
But
我们也可以使用系统支持的原生 Emoji 去解析那些转成了 Unicode 的字符,我们对 markdown-it-emoji 源码再修改下
'use strict';var emojies_defs = require('./lib/data/full.json');var emojies_shortcuts = require('./lib/data/shortcuts');var emoji_html = require('./lib/render');var emoji_replace = require('./lib/replace');var normalize_opts = require('./lib/normalize_opts');module.exports = function emoji_plugin(md, options) {var defaults = {defs: emojies_defs,shortcuts: emojies_shortcuts,enabled: []};var opts = normalize_opts(md.utils.assign({}, defaults, options || {}));md.renderer.rules.emoji = emoji_html;md.renderer.rules.emoji = function(token, idx) {return '<g-emoji>'+ token[idx].content +'</g-emoji>';};// 添加 g-emoji 容器进行包裹md.core.ruler.push('emoji', emoji_replace(md, opts.defs, opts.shortcuts, opts.scanRE, opts.replaceRE));};
添加样式
g-emoji {font-family: Apple Color Emoji,Segoe UI,Segoe UI Emoji,Segoe UI Symbol;font-size: 1.2em;font-style: normal!important;font-weight: 400;line-height: 20px;vertical-align: middle;}
