summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/backbone/summary.js3
-rw-r--r--lib/utils/location.js4
-rw-r--r--test/summary.js28
3 files changed, 33 insertions, 2 deletions
diff --git a/lib/backbone/summary.js b/lib/backbone/summary.js
index a79b1e9..5a2f7f2 100644
--- a/lib/backbone/summary.js
+++ b/lib/backbone/summary.js
@@ -39,6 +39,9 @@ function TOCArticle(def, parent) {
var parts = this.ref.split('#');
this.path = (parts.length > 1? parts.slice(0, -1).join('#') : this.ref);
this.anchor = (parts.length > 1? '#' + _.last(parts) : null);
+
+ // Normalize path to remove ('./', etc)
+ this.path = location.normalize(this.path);
}
}
diff --git a/lib/utils/location.js b/lib/utils/location.js
index ba0c57d..ba43644 100644
--- a/lib/utils/location.js
+++ b/lib/utils/location.js
@@ -27,7 +27,7 @@ function isAnchor(href) {
// Normalize a path to be a link
function normalize(s) {
- return s.replace(/\\/g, '/');
+ return path.normalize(s).replace(/\\/g, '/');
}
// Convert relative to absolute path
@@ -36,7 +36,7 @@ function normalize(s) {
function toAbsolute(_href, dir, outdir) {
if (isExternal(_href)) return _href;
outdir = outdir == undefined? dir : outdir;
-
+
_href = normalize(_href);
dir = normalize(dir);
outdir = normalize(outdir);
diff --git a/test/summary.js b/test/summary.js
index 08b9db8..9859693 100644
--- a/test/summary.js
+++ b/test/summary.js
@@ -59,6 +59,34 @@ describe('Summary / Table of contents', function() {
});
});
+ describe('Unicode summary', function() {
+ var book;
+
+ before(function() {
+ return mockSummary({
+ 'SUMMARY.md': '# Summary\n\n'
+ + '* [Hello](./hello world.md)\n'
+ + '* [Spanish](./Descripción del problema.md)\n\n'
+ + '* [Chinese](读了这本书.md)\n\n'
+ })
+ .then(function(_book) {
+ book = _book;
+ });
+ });
+
+ it('should accept article with spaces', function() {
+ should(book.summary.getArticle('hello world.md')).be.ok();
+ });
+
+ it('should accept article with chinese filename', function() {
+ should(book.summary.getArticle('读了这本书.md')).be.ok();
+ });
+
+ it('should accept article with accents', function() {
+ should(book.summary.getArticle('Descripción del problema.md')).be.ok();
+ });
+ });
+
describe('Non-empty summary list', function() {
var book;