feat(ol start num): add support for defining the first num of ol

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.
This commit is contained in:
Estevao Soares dos Santos 2017-10-24 15:15:56 +01:00
parent 5b8f1d312f
commit 9cdc35e705
8 changed files with 43 additions and 7 deletions

BIN
dist/showdown.js vendored

Binary file not shown.

BIN
dist/showdown.js.map vendored

Binary file not shown.

BIN
dist/showdown.min.js vendored

Binary file not shown.

Binary file not shown.

View File

@ -3,7 +3,6 @@
*/ */
showdown.subParser('lists', function (text, options, globals) { showdown.subParser('lists', function (text, options, globals) {
'use strict'; 'use strict';
text = globals.converter._dispatch('lists.before', text, options, globals);
/** /**
* Process the contents of a single ordered or unordered list, splitting it * Process the contents of a single ordered or unordered list, splitting it
@ -123,6 +122,17 @@ showdown.subParser('lists', function (text, options, globals) {
return listStr; 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) * Check and parse consecutive lists (better fix for issue #142)
* @param {string} list * @param {string} list
@ -140,10 +150,11 @@ showdown.subParser('lists', function (text, options, globals) {
if (list.search(counterRxg) !== -1) { if (list.search(counterRxg) !== -1) {
(function parseCL (txt) { (function parseCL (txt) {
var pos = txt.search(counterRxg); var pos = txt.search(counterRxg),
style = styleStartNumber(list, listType);
if (pos !== -1) { if (pos !== -1) {
// slice // 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 // invert counterType and listType
listType = (listType === 'ul') ? 'ol' : 'ul'; listType = (listType === 'ul') ? 'ol' : 'ul';
@ -152,16 +163,19 @@ showdown.subParser('lists', function (text, options, globals) {
//recurse //recurse
parseCL(txt.slice(pos)); parseCL(txt.slice(pos));
} else { } else {
result += '\n<' + listType + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n'; result += '\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '</' + listType + '>\n';
} }
})(list); })(list);
} else { } 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; return result;
} }
/** Start of list parsing **/
text = globals.converter._dispatch('lists.before', text, options, globals);
// add sentinel to hack around khtml/safari bug: // add sentinel to hack around khtml/safari bug:
// http://bugs.webkit.org/show_bug.cgi?id=11231 // http://bugs.webkit.org/show_bug.cgi?id=11231
text += '¨0'; text += '¨0';

View File

@ -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>

View File

@ -0,0 +1,10 @@
5. foo
6. bar
7. baz
---
3. a
2. b
7. c
23. d

View File

@ -1,4 +1,4 @@
8. Red 1. Red
1. Green 1. Green
3. Blue 1. Blue