Skip to content

Commit

Permalink
feat(ol start num): add support for defining the first num of ol
Browse files Browse the repository at this point in the history
Implement support for starting ordered lists at an arbitrary number

Closes #377
BREAKING CHANGE: Since showdown now supports starting ordered lists
at an arbitrary number, list output may differ.
  • Loading branch information
tivie committed Oct 24, 2017
1 parent 5b8f1d3 commit 9cdc35e
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 15 deletions.
24 changes: 19 additions & 5 deletions dist/showdown.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/showdown.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/showdown.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/showdown.min.js.map

Large diffs are not rendered by default.

24 changes: 19 additions & 5 deletions src/subParsers/lists.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
*/
showdown.subParser('lists', function (text, options, globals) {
'use strict';
text = globals.converter._dispatch('lists.before', text, options, globals);

/**
* Process the contents of a single ordered or unordered list, splitting it
Expand Down Expand Up @@ -123,6 +122,17 @@ showdown.subParser('lists', function (text, options, globals) {
return listStr;
}

function styleStartNumber (list, listType) {
// check if ol and starts by a number different than 1
if (listType === 'ol') {
var res = list.match(/^ *(\d+)\./);
if (res && res[1] !== '1') {
return ' start="' + res[1] + '"';
}
}
return '';
}

/**
* Check and parse consecutive lists (better fix for issue #142)
* @param {string} list
Expand All @@ -140,10 +150,11 @@ showdown.subParser('lists', function (text, options, globals) {

if (list.search(counterRxg) !== -1) {
(function parseCL (txt) {
var pos = txt.search(counterRxg);
var pos = txt.search(counterRxg),
style = styleStartNumber(list, listType);
if (pos !== -1) {
// slice
result += '\n<' + listType + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\n';
result += '\n<' + listType + style + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '</' + listType + '>\n';

// invert counterType and listType
listType = (listType === 'ul') ? 'ol' : 'ul';
Expand All @@ -152,16 +163,19 @@ showdown.subParser('lists', function (text, options, globals) {
//recurse
parseCL(txt.slice(pos));
} else {
result += '\n<' + listType + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n';
result += '\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n';
}
})(list);
} else {
result = '\n<' + listType + '>\n' + processListItems(list, !!trimTrailing) + '</' + listType + '>\n';
var style = styleStartNumber(list, listType);
result = '\n<' + listType + style + '>\n' + processListItems(list, !!trimTrailing) + '</' + listType + '>\n';
}

return result;
}

/** Start of list parsing **/
text = globals.converter._dispatch('lists.before', text, options, globals);
// add sentinel to hack around khtml/safari bug:
// http://bugs.webkit.org/show_bug.cgi?id=11231
text += '¨0';
Expand Down
12 changes: 12 additions & 0 deletions test/cases/ordered-list-starting-number.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<ol start="5">
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ol>
<hr />
<ol start="3">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
</ol>
10 changes: 10 additions & 0 deletions test/cases/ordered-list-starting-number.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
5. foo
6. bar
7. baz

---

3. a
2. b
7. c
23. d
4 changes: 2 additions & 2 deletions test/cases/ordered-list-wrong-numbers.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

8. Red
1. Red
1. Green
3. Blue
1. Blue

0 comments on commit 9cdc35e

Please sign in to comment.