diff --git a/src/core/render/utils.js b/src/core/render/utils.js index 42fbfa078..347614ca7 100644 --- a/src/core/render/utils.js +++ b/src/core/render/utils.js @@ -23,8 +23,8 @@ export function getAndRemoveConfig(str = '') { if (str) { str = str - .replace(/^('|")/, '') - .replace(/('|")$/, '') + .replace(/^"(.*)"$/, '$1') + .replace(/^'(.*)'$/, '$1') .replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g, (m, key, value) => { if (key.indexOf(':') === -1) { config[key] = (value && value.replace(/"/g, '')) || true; diff --git a/test/unit/render-util.test.js b/test/unit/render-util.test.js index 23f6f5938..6ec34d1b7 100644 --- a/test/unit/render-util.test.js +++ b/test/unit/render-util.test.js @@ -58,6 +58,37 @@ describe('core/render/utils', () => { str: `[filename](_media/example.md ":include")`, }); }); + + test('parse quotes without first colon', () => { + const result = getAndRemoveConfig( + `[filename](_media/example.md 'include :foo=bar')` + ); + + expect(result).toMatchObject({ + config: { foo: 'bar' }, + str: `[filename](_media/example.md 'include')`, + }); + }); + + test('dont parse with different quotes', () => { + const result = getAndRemoveConfig( + `[filename](_media/example.md ":include')` + ); + + expect(result).toMatchObject({ + config: {}, + str: `[filename](_media/example.md ":include')`, + }); + }); + + test('parse headings without quotes', () => { + const result = getAndRemoveConfig('### Hello, world! :id=hello-world'); + + expect(result).toMatchObject({ + config: { id: 'hello-world' }, + str: '### Hello, world!', + }); + }); }); });