From 87cea592280d4ac9cac2eb8d6c5f176d1c327c1d Mon Sep 17 00:00:00 2001 From: Fred Chasen Date: Thu, 9 Jul 2015 10:30:04 -0400 Subject: [PATCH 1/3] autoIds option to disable generating ids, include space in regex --- lib/kramed.js | 1 + lib/renderer.js | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/kramed.js b/lib/kramed.js index 5319d79..fc458d9 100644 --- a/lib/kramed.js +++ b/lib/kramed.js @@ -134,6 +134,7 @@ kramed.defaults = { langPrefix: 'lang-', smartypants: false, headerPrefix: '', + autoIds: true, xhtml: false, // Default rendrer passed to Parser diff --git a/lib/renderer.js b/lib/renderer.js index 89f2db2..92e54a6 100644 --- a/lib/renderer.js +++ b/lib/renderer.js @@ -10,6 +10,7 @@ var defaultOptions = { langPrefix: 'lang-', smartypants: false, headerPrefix: '', + autoIds: true, xhtml: false, }; @@ -60,14 +61,20 @@ Renderer.prototype._createId = function(str) { }; Renderer.prototype.heading = function(text, level, raw) { - var id = /({#)(.+)(})/g.exec(raw); + var hash = /\s({#)(.+)(})/g.exec(raw); + var id = ''; + + if (id) { + id = ' id="' + hash[2] + '"'; + } else if(this.options.autoIds) { + id = ' id="' + this.options.headerPrefix + this._createId(raw) + '"'; + } + return '' - + text.replace(/{#.+}/g, '') + + id + + '>' + + text.replace(/\s{#.+}/g, '') + '\n'; From 56671ca8a4d49205dcca9a09751a17d3a2b77bd7 Mon Sep 17 00:00:00 2001 From: Fred Chasen Date: Thu, 9 Jul 2015 11:00:38 -0400 Subject: [PATCH 2/3] Added test, fixed regex spacing, ignore DS_store --- .gitignore | 2 ++ lib/renderer.js | 4 ++-- test/tests/header_id.html | 2 ++ test/tests/header_id.txt | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d1d5c6d..ca1d708 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ build/Release # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- node_modules + +.DS_Store diff --git a/lib/renderer.js b/lib/renderer.js index 92e54a6..415f62f 100644 --- a/lib/renderer.js +++ b/lib/renderer.js @@ -61,10 +61,10 @@ Renderer.prototype._createId = function(str) { }; Renderer.prototype.heading = function(text, level, raw) { - var hash = /\s({#)(.+)(})/g.exec(raw); + var hash = /(\s{#)(.+)(})/g.exec(raw); var id = ''; - if (id) { + if (hash) { id = ' id="' + hash[2] + '"'; } else if(this.options.autoIds) { id = ' id="' + this.options.headerPrefix + this._createId(raw) + '"'; diff --git a/test/tests/header_id.html b/test/tests/header_id.html index 50cbf08..1025d4d 100644 --- a/test/tests/header_id.html +++ b/test/tests/header_id.html @@ -5,3 +5,5 @@

Hello World.

no ascii 中文

special characters � '`"|,.\/

+ +

Heading with ID

diff --git a/test/tests/header_id.txt b/test/tests/header_id.txt index d239815..8a3702d 100644 --- a/test/tests/header_id.txt +++ b/test/tests/header_id.txt @@ -5,3 +5,5 @@ ## no ascii 中文 ### special characters � '`"|,.\/ + +# Heading with ID {#myid} From 46d372e72f24c0e3e222d89fe77898e21b790935 Mon Sep 17 00:00:00 2001 From: Fred Chasen Date: Thu, 9 Jul 2015 12:35:52 -0400 Subject: [PATCH 3/3] Updated options passing --- lib/kramed.js | 2 +- lib/renderer.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/kramed.js b/lib/kramed.js index fc458d9..b10a8f1 100644 --- a/lib/kramed.js +++ b/lib/kramed.js @@ -93,7 +93,7 @@ function kramed(src, opt, callback) { return; } try { - if (opt) opt = merge({}, kramed.defaults, opt); + opt = merge({}, kramed.defaults, opt || {}); return Parser.parse(Lexer.lex(src, opt), opt); } catch (e) { e.message += '\nPlease report this to https://github.com/GitbookIO/kramed.'; diff --git a/lib/renderer.js b/lib/renderer.js index 415f62f..243f761 100644 --- a/lib/renderer.js +++ b/lib/renderer.js @@ -1,6 +1,7 @@ var _utils = require('./utils'); var escape = _utils.escape; var unescape = _utils.unescape; +var merge = _utils.merge; /** * Renderer @@ -15,7 +16,7 @@ var defaultOptions = { }; function Renderer(options) { - this.options = options || defaultOptions; + this.options = merge(defaultOptions, options || {}); } Renderer.prototype.code = function(code, lang, escaped) {