diff --git a/lib/renderer.js b/lib/renderer.js
index 78b2b92..69ac0f1 100644
--- a/lib/renderer.js
+++ b/lib/renderer.js
@@ -132,7 +132,11 @@ module.exports = function(data, options) {
}
});
+ // exec filter to extend renderer.
+ const renderer = new Renderer();
+ this.execFilterSync('marked:renderer', renderer, {context: this});
+
return marked(data.text, Object.assign({
- renderer: new Renderer()
+ renderer
}, this.config.marked, options, siteCfg));
};
diff --git a/package.json b/package.json
index 54243be..e5d25f6 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
"chai": "^4.2.0",
"eslint": "^6.0.1",
"eslint-config-hexo": "^4.0.0",
+ "hexo": "^4.2.0",
"mocha": "^6.1.4",
"nyc": "^14.1.1"
},
diff --git a/test/index.js b/test/index.js
index 5095593..50a287e 100644
--- a/test/index.js
+++ b/test/index.js
@@ -2,15 +2,17 @@
require('chai').should();
const { highlight, encodeURL } = require('hexo-util');
+const Hexo = require('hexo');
describe('Marked renderer', () => {
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {}
}
- };
+ });
- const r = require('../lib/renderer').bind(ctx);
+ const r = require('../lib/renderer').bind(hexo);
it('default', () => {
const code = 'console.log("Hello world");';
@@ -140,13 +142,14 @@ describe('Marked renderer', () => {
});
describe('autolink option tests', () => {
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
autolink: true
}
}
- };
+ });
const renderer = require('../lib/renderer');
@@ -192,13 +195,14 @@ describe('Marked renderer', () => {
});
describe('sanitizeUrl option tests', () => {
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
sanitizeUrl: true
}
}
- };
+ });
const renderer = require('../lib/renderer');
@@ -239,13 +243,14 @@ describe('Marked renderer', () => {
const renderer = require('../lib/renderer');
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
modifyAnchors: ''
}
}
- };
+ });
it('should not modify anchors with default options', () => {
const r = renderer.bind(ctx);
@@ -294,7 +299,8 @@ describe('Marked renderer', () => {
const renderer = require('../lib/renderer');
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
prependRoot: false
@@ -303,7 +309,7 @@ describe('Marked renderer', () => {
root: '/blog/',
relative_link: false
}
- };
+ });
it('should not modify image path with default option', () => {
const r = renderer.bind(ctx);
@@ -344,7 +350,8 @@ describe('Marked renderer', () => {
describe('external_link', () => {
const renderer = require('../lib/renderer');
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
external_link: {
@@ -353,7 +360,7 @@ describe('Marked renderer', () => {
},
url: 'http://example.com'
}
- };
+ });
it('disable', () => {
const body = '[foo](http://bar.com/)';
@@ -422,7 +429,8 @@ describe('Marked renderer', () => {
describe('nofollow', () => {
const renderer = require('../lib/renderer');
- const ctx = {
+ const hexo = new Hexo(__dirname, {silent: true});
+ const ctx = Object.assign(hexo, {
config: {
marked: {
external_link: {
@@ -433,7 +441,7 @@ describe('Marked renderer', () => {
},
url: 'http://example.com'
}
- };
+ });
const body = [
'[foo](http://foo.com/)',
@@ -560,4 +568,33 @@ describe('Marked renderer', () => {
'
`,
+ `