diff --git a/src/showdown.js b/src/showdown.js index ebbd8a7..24835e0 100644 --- a/src/showdown.js +++ b/src/showdown.js @@ -767,6 +767,26 @@ Showdown.converter = function(converter_options) { var _DoHeaders = function(text) { + // Keep track of ids used for headers for hash-linking. If any duplicates + // are used, append a unique string based on the count of identical ids. + // This prevents the result of having duplicate ids if a user creates + // similar headers. + var hashLinkCounts = {}; + function headerId(m) { + var title, + escapedId = m.replace(/[^\w]/g, '').toLowerCase(); + + if (hashLinkCounts[escapedId]) { + title = escapedId + "-" + (hashLinkCounts[escapedId]++); + } else { + title = escapedId; + hashLinkCounts[escapedId] = 1; + } + + // Prefix id to prevent causing inadverntent pre-existing style matches. + return "section-" + title; + } + // Setext-style headers: // Header 1 // ======== @@ -774,11 +794,13 @@ Showdown.converter = function(converter_options) { // Header 2 // -------- // - text = text.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm, - function(wholeMatch,m1){return hashBlock('
This is an example reference-style link. This is another reference-style link. This is a third reference-style link. -This is a fourth reference-style link.
\ No newline at end of file +This is a fourth reference-style link. diff --git a/test/cases/blockquote-nested-markdown.html b/test/cases/blockquote-nested-markdown.html index 25800d7..afae8f8 100644 --- a/test/cases/blockquote-nested-markdown.html +++ b/test/cases/blockquote-nested-markdown.html @@ -1,5 +1,5 @@-This is a header.
+This is a header.
- This is the first list item.
diff --git a/test/cases/h1-with-double-hash.html b/test/cases/h1-with-double-hash.html index 2cecc38..749011b 100644 --- a/test/cases/h1-with-double-hash.html +++ b/test/cases/h1-with-double-hash.html @@ -1 +1 @@ -This is an H1
\ No newline at end of file +This is an H1
diff --git a/test/cases/h1-with-equals.html b/test/cases/h1-with-equals.html index 2cecc38..749011b 100644 --- a/test/cases/h1-with-equals.html +++ b/test/cases/h1-with-equals.html @@ -1 +1 @@ -This is an H1
\ No newline at end of file +This is an H1
diff --git a/test/cases/h1-with-single-hash.html b/test/cases/h1-with-single-hash.html index 2cecc38..749011b 100644 --- a/test/cases/h1-with-single-hash.html +++ b/test/cases/h1-with-single-hash.html @@ -1 +1 @@ -This is an H1
\ No newline at end of file +This is an H1
diff --git a/test/cases/h2-with-dashes.html b/test/cases/h2-with-dashes.html index d040d75..2fc6b0b 100644 --- a/test/cases/h2-with-dashes.html +++ b/test/cases/h2-with-dashes.html @@ -1 +1 @@ -This is an H2
\ No newline at end of file +This is an H2
diff --git a/test/cases/h2-with-double-hash.html b/test/cases/h2-with-double-hash.html index d040d75..2fc6b0b 100644 --- a/test/cases/h2-with-double-hash.html +++ b/test/cases/h2-with-double-hash.html @@ -1 +1 @@ -This is an H2
\ No newline at end of file +This is an H2
diff --git a/test/cases/h2-with-single-hash.html b/test/cases/h2-with-single-hash.html index d040d75..2fc6b0b 100644 --- a/test/cases/h2-with-single-hash.html +++ b/test/cases/h2-with-single-hash.html @@ -1 +1 @@ -This is an H2
\ No newline at end of file +This is an H2
diff --git a/test/cases/h3-with-double-hash.html b/test/cases/h3-with-double-hash.html index 082318e..92a7399 100644 --- a/test/cases/h3-with-double-hash.html +++ b/test/cases/h3-with-double-hash.html @@ -1 +1 @@ -This is an H3
\ No newline at end of file +This is an H3
diff --git a/test/cases/h3-with-single-hash.html b/test/cases/h3-with-single-hash.html index 082318e..92a7399 100644 --- a/test/cases/h3-with-single-hash.html +++ b/test/cases/h3-with-single-hash.html @@ -1 +1 @@ -This is an H3
\ No newline at end of file +This is an H3
diff --git a/test/cases/h4-with-single-hash.html b/test/cases/h4-with-single-hash.html index cc32aa1..605e93a 100644 --- a/test/cases/h4-with-single-hash.html +++ b/test/cases/h4-with-single-hash.html @@ -1 +1 @@ -This is an H4
\ No newline at end of file +This is an H4
diff --git a/test/cases/h5-with-single-hash.html b/test/cases/h5-with-single-hash.html index 96dca78..ae3a75d 100644 --- a/test/cases/h5-with-single-hash.html +++ b/test/cases/h5-with-single-hash.html @@ -1 +1 @@ -This is an H5
\ No newline at end of file +This is an H5
diff --git a/test/cases/h6-with-single-hash.html b/test/cases/h6-with-single-hash.html index 10de690..a93ba51 100644 --- a/test/cases/h6-with-single-hash.html +++ b/test/cases/h6-with-single-hash.html @@ -1 +1 @@ -This is an H6
\ No newline at end of file +This is an H6