From 8ed1f63520bbfb20540004242353e87dd143824b Mon Sep 17 00:00:00 2001 From: James Thompson Date: Sat, 13 Dec 2025 22:48:01 +1100 Subject: [PATCH 1/7] add in special character tests --- .../readme-with-special-characters.md | 59 +++++++++++++++++++ test/transform-weird-headers.js | 34 +++++++++++ test/transform.js | 2 +- 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/readme-with-special-characters.md diff --git a/test/fixtures/readme-with-special-characters.md b/test/fixtures/readme-with-special-characters.md new file mode 100644 index 00000000..03ff1428 --- /dev/null +++ b/test/fixtures/readme-with-special-characters.md @@ -0,0 +1,59 @@ +## Title with backslash `\` +test + +## 4 § Toimielimet +Special char + +## Урок 8. Кроссплатформенность и виртуализация +text + +## Interface: SOME\_NAME<\> +method + +## Version 1.10.5 +bugs + +## Version 1.10.6 +features + +## `TEXT 1` + +- item 1 + +## `TEXT 2 ...` + +TEXT 2.1 ... + +## MikroTik hAP ac² + +The [hAP ac²](https://mikrotik.com/product/hap_ac2) is + +## acclk dac %d:[0,acclk_dac_max):dac +description + +## Övningsuppgifter +swedish + +## Sections +This readme causes an error `

` text `

` more text (`

`) + +## Тест +cyrillic + +## There's an error here +bad + +## Replace .gitlab-ci.yml +file name + +## `this identifier` +text + +## Header & noise +ampersand + +## CJK。 +CJK Symbols + +## ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1 +Latin 1 diff --git a/test/transform-weird-headers.js b/test/transform-weird-headers.js index 51544297..c7511f17 100644 --- a/test/transform-weird-headers.js +++ b/test/transform-weird-headers.js @@ -80,3 +80,37 @@ test('\nformatted headers', function (t) { t.end() }) + +test('\nrandom md characters', function (t) { + var content = require('fs').readFileSync(__dirname + '/fixtures/readme-with-special-characters.md', 'utf8'); + var headers = transform(content); + + t.deepEqual( + headers.toc.split('\n') + , [ '**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*', + '', + '- [Title with backslash `\\`](#title-with-backslash-)', + '- [4 § Toimielimet](#4-%C2%A7-toimielimet)', + '- [Урок 8. Кроссплатформенность и виртуализация](#%D1%83%D1%80%D0%BE%D0%BA-8-%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%B8-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)', + '- [Interface: SOME\\_NAME<\\>](#interface-some_name)', + '- [Version 1.10.5](#version-1105)', + '- [Version 1.10.6](#version-1106)', + '- [`TEXT 1`](#text-1)', + '- [`TEXT 2 ...`](#text-2-)', + '- [MikroTik hAP ac²](#mikrotik-hap-ac)', + '- [acclk dac %d:[0,acclk_dac_max):dac](#acclk-dac-d0acclk_dac_maxdac)', + '- [Övningsuppgifter](#%C3%B6vningsuppgifter)', + '- [Sections](#sections)', + '- [Тест](#%D1%82%D0%B5%D1%81%D1%82)', + '- [There\'s an error here](#theres-an-error-here)', + '- [Replace .gitlab-ci.yml](#replace-gitlab-ciyml)', + '- [`this identifier`](#this-identifier)', + '- [Header & noise](#header--noise)', + '- [CJK。](#cjk)', + '- [¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1](#%C2%AA%C2%B5%C2%BAlatin-1)', + '' ] + , 'generates a correct toc when readme has nameless table headers' + ) + + t.end() +}) diff --git a/test/transform.js b/test/transform.js index ef591f2f..7996d4e0 100644 --- a/test/transform.js +++ b/test/transform.js @@ -69,7 +69,7 @@ check( , 'some main usage here' ].join('\r\n') , [ '**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n' - , '- [My Module using \\r\\n line endings](#my-module-using-%5Cr%5Cn-line-endings)\n' + , '- [My Module using \\r\\n line endings](#my-module-using-rn-line-endings)\n' , ' - [API](#api)\n' , ' - [Method One](#method-one)\n' , ' - [Method Two](#method-two)\n' From a6549cd94e64d410d64125a06b004ac261fd9bca Mon Sep 17 00:00:00 2001 From: James Thompson Date: Fri, 19 Dec 2025 13:19:10 +1100 Subject: [PATCH 2/7] Header with link --- test/fixtures/readme-with-special-characters.md | 3 +++ test/transform-weird-headers.js | 1 + 2 files changed, 4 insertions(+) diff --git a/test/fixtures/readme-with-special-characters.md b/test/fixtures/readme-with-special-characters.md index 03ff1428..19c7f1d0 100644 --- a/test/fixtures/readme-with-special-characters.md +++ b/test/fixtures/readme-with-special-characters.md @@ -57,3 +57,6 @@ CJK Symbols ## ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1 Latin 1 + +## Instance properties inherited from [`EventEmitter`](http://nodejs.org/api/events.html) +Text \ No newline at end of file diff --git a/test/transform-weird-headers.js b/test/transform-weird-headers.js index c7511f17..28f8563c 100644 --- a/test/transform-weird-headers.js +++ b/test/transform-weird-headers.js @@ -108,6 +108,7 @@ test('\nrandom md characters', function (t) { '- [Header & noise](#header--noise)', '- [CJK。](#cjk)', '- [¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1](#%C2%AA%C2%B5%C2%BAlatin-1)', + '- [Instance properties inherited from `EventEmitter`](#instance-properties-inherited-from-eventemitter)', '' ] , 'generates a correct toc when readme has nameless table headers' ) From de0220f5ae8a908c4a29bf4e80a791b2eda89832 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Sun, 1 Feb 2026 20:44:11 +1100 Subject: [PATCH 3/7] Update transform-weird-headers.js --- test/transform-weird-headers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/transform-weird-headers.js b/test/transform-weird-headers.js index 28f8563c..78182524 100644 --- a/test/transform-weird-headers.js +++ b/test/transform-weird-headers.js @@ -110,7 +110,7 @@ test('\nrandom md characters', function (t) { '- [¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1](#%C2%AA%C2%B5%C2%BAlatin-1)', '- [Instance properties inherited from `EventEmitter`](#instance-properties-inherited-from-eventemitter)', '' ] - , 'generates a correct toc when readme has nameless table headers' + , 'generates a correct toc when readme has special characters in table headers' ) t.end() From a3b2196744ea5e70df7bd861bd94edd4537d952b Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 5 Feb 2026 23:33:30 +1100 Subject: [PATCH 4/7] Update anchor-markdown-header dependency version --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 68448f91..d69ba43c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,11 +5,12 @@ "requires": true, "packages": { "": { + "name": "doctoc", "version": "0.0.0-development", "license": "MIT", "dependencies": { "@textlint/markdown-to-ast": "^12.1.1", - "anchor-markdown-header": "^0.7.0", + "anchor-markdown-header": "^0.8.1", "htmlparser2": "^7.2.0", "minimist": "^1.2.6", "underscore": "^1.13.2", @@ -60,7 +61,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "dev": true, - "peer": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -676,12 +676,13 @@ } }, "node_modules/anchor-markdown-header": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.7.0.tgz", - "integrity": "sha512-OYUgo5tYN+WipGB2R3sZUvXLpTzqSnm0b3AXRqN9Rhi2Z+uCQsFSguDDgpoSdhDrnu/aCYHFGHosdL9hbaWSHA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.8.1.tgz", + "integrity": "sha512-x4BeGLWZLC+HZZ5edpmIEg96L/gIcBDtNlNSotCKpLE3Ky5eXgQ6G7iUmEoYSeTI0Y4fDq6IGOQ9u0Ue/N/H9w==", + "license": "MIT", "dependencies": { - "emoji-regex": "~10.1.0", - "remove-markdown": "^0.5.0" + "emoji-regex": "~10.6.0", + "remove-markdown": "^0.6.2" } }, "node_modules/ansi-regex": { @@ -1211,9 +1212,10 @@ "dev": true }, "node_modules/emoji-regex": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.1.0.tgz", - "integrity": "sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==" + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" }, "node_modules/entities": { "version": "3.0.1", @@ -2622,9 +2624,10 @@ } }, "node_modules/remove-markdown": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.5.0.tgz", - "integrity": "sha512-x917M80K97K5IN1L8lUvFehsfhR8cYjGQ/yAMRI9E7JIKivtl5Emo5iD13DhMr+VojzMCiYk8V2byNPwT/oapg==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.6.3.tgz", + "integrity": "sha512-Qvp2p0Q1irE7AaJO7QemJe04HdObHylJrG+q4hszvPlYp7q4EvfINpEIaIEFdB+3XTDp1h6fiyT60ae00gmRow==", + "license": "MIT" }, "node_modules/repeat-string": { "version": "1.6.1", @@ -2994,7 +2997,6 @@ "dev": true, "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -3435,7 +3437,6 @@ "dev": true, "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4315,7 +4316,6 @@ "dev": true, "inBundle": true, "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" diff --git a/package.json b/package.json index b61e07d7..ffd7421a 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "bin": "doctoc.js", "dependencies": { "@textlint/markdown-to-ast": "^12.1.1", - "anchor-markdown-header": "^0.7.0", + "anchor-markdown-header": "^0.8.1", "htmlparser2": "^7.2.0", "minimist": "^1.2.6", "underscore": "^1.13.2", From 79f7c77d80ecce08809462820196c6b5fb19b69e Mon Sep 17 00:00:00 2001 From: James Thompson Date: Fri, 6 Feb 2026 13:00:37 +1100 Subject: [PATCH 5/7] Fix test --- test/transform-weird-headers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/transform-weird-headers.js b/test/transform-weird-headers.js index 78182524..8cce9cfd 100644 --- a/test/transform-weird-headers.js +++ b/test/transform-weird-headers.js @@ -90,7 +90,7 @@ test('\nrandom md characters', function (t) { , [ '**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*', '', '- [Title with backslash `\\`](#title-with-backslash-)', - '- [4 § Toimielimet](#4-%C2%A7-toimielimet)', + '- [4 § Toimielimet](#4--toimielimet)', '- [Урок 8. Кроссплатформенность и виртуализация](#%D1%83%D1%80%D0%BE%D0%BA-8-%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%B8-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)', '- [Interface: SOME\\_NAME<\\>](#interface-some_name)', '- [Version 1.10.5](#version-1105)', @@ -107,7 +107,7 @@ test('\nrandom md characters', function (t) { '- [`this identifier`](#this-identifier)', '- [Header & noise](#header--noise)', '- [CJK。](#cjk)', - '- [¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1](#%C2%AA%C2%B5%C2%BAlatin-1)', + '- [¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿Latin 1](#%C2%AA%C2%B5%C2%BAlatin-1)', //#ªµºLatin 1 '- [Instance properties inherited from `EventEmitter`](#instance-properties-inherited-from-eventemitter)', '' ] , 'generates a correct toc when readme has special characters in table headers' From 61d1f45c4c4a223c1de6d8bbc011aa422947099a Mon Sep 17 00:00:00 2001 From: James Thompson Date: Tue, 10 Feb 2026 10:09:05 +1100 Subject: [PATCH 6/7] bump dependency --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index d69ba43c..b343d1b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@textlint/markdown-to-ast": "^12.1.1", - "anchor-markdown-header": "^0.8.1", + "anchor-markdown-header": "^0.8.2", "htmlparser2": "^7.2.0", "minimist": "^1.2.6", "underscore": "^1.13.2", @@ -676,8 +676,8 @@ } }, "node_modules/anchor-markdown-header": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.8.1.tgz", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.8.2.tgz", "integrity": "sha512-x4BeGLWZLC+HZZ5edpmIEg96L/gIcBDtNlNSotCKpLE3Ky5eXgQ6G7iUmEoYSeTI0Y4fDq6IGOQ9u0Ue/N/H9w==", "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ffd7421a..a33666c4 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "bin": "doctoc.js", "dependencies": { "@textlint/markdown-to-ast": "^12.1.1", - "anchor-markdown-header": "^0.8.1", + "anchor-markdown-header": "^0.8.2", "htmlparser2": "^7.2.0", "minimist": "^1.2.6", "underscore": "^1.13.2", From 476f1e5f16cc1935b137d738b2a4f0a5fcaa6ef6 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Tue, 10 Feb 2026 10:14:56 +1100 Subject: [PATCH 7/7] Update integrity hash for anchor-markdown-header Updated integrity hash for anchor-markdown-header package. --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index b343d1b4..ae9c81ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -678,7 +678,7 @@ "node_modules/anchor-markdown-header": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.8.2.tgz", - "integrity": "sha512-x4BeGLWZLC+HZZ5edpmIEg96L/gIcBDtNlNSotCKpLE3Ky5eXgQ6G7iUmEoYSeTI0Y4fDq6IGOQ9u0Ue/N/H9w==", + "integrity": "sha512-ix0Hx6ARkHOsQRmt1++ZmjURq4Pr5MGXQJjh0lQ/l5jTpTURn4aqhbZ+AJMpZ/Sd3JiyNwi7KaeiF64OsMGCPg==", "license": "MIT", "dependencies": { "emoji-regex": "~10.6.0",