133 lines
5.4 KiB
JavaScript
133 lines
5.4 KiB
JavaScript
// https://github.com/Galadirith/markdown-it-lazy-headers
|
|
// Copyright (c) 2015 Edward Fauchon-Jones
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
// This repository incorporates code from
|
|
// [markdown-it](https://github.com/markdown-it/markdown-it) covered by the
|
|
// following terms:
|
|
|
|
// > Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
|
|
// >
|
|
// > Permission is hereby granted, free of charge, to any person
|
|
// > obtaining a copy of this software and associated documentation
|
|
// > files (the "Software"), to deal in the Software without
|
|
// > restriction, including without limitation the rights to use,
|
|
// > copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// > copies of the Software, and to permit persons to whom the
|
|
// > Software is furnished to do so, subject to the following
|
|
// > conditions:
|
|
// >
|
|
// > The above copyright notice and this permission notice shall be
|
|
// > included in all copies or substantial portions of the Software.
|
|
// >
|
|
// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// > EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
// > OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// > NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
// > HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
// > WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// > FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
// > OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
// This repository incorporates code from
|
|
// [markdown-it-math](https://github.com/runarberg/markdown-it-math) covered by the
|
|
// following terms:
|
|
|
|
// > Copyright (c) 2015 Rúnar Berg Baugsson Sigríðarson
|
|
// >
|
|
// > Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// > of this software and associated documentation files (the "Software"), to deal
|
|
// > in the Software without restriction, including without limitation the rights
|
|
// > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// > copies of the Software, and to permit persons to whom the Software is
|
|
// > furnished to do so, subject to the following conditions:
|
|
// >
|
|
// > The above copyright notice and this permission notice shall be included in
|
|
// > all copies or substantial portions of the Software.
|
|
// >
|
|
// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// > THE SOFTWARE.
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
window.markdownitLazyHeaders = function lazy_headers_plugin(md) {
|
|
function heading(state, startLine, endLine, silent) {
|
|
var ch, level, tmp, token,
|
|
pos = state.bMarks[startLine] + state.tShift[startLine],
|
|
max = state.eMarks[startLine];
|
|
|
|
ch = state.src.charCodeAt(pos);
|
|
|
|
if (ch !== 0x23/* # */ || pos >= max) { return false; }
|
|
|
|
// count heading level
|
|
level = 1;
|
|
ch = state.src.charCodeAt(++pos);
|
|
while (ch === 0x23/* # */ && pos < max && level <= 6) {
|
|
level++;
|
|
ch = state.src.charCodeAt(++pos);
|
|
}
|
|
|
|
if (level > 6) { return false; }
|
|
|
|
if (silent) { return true; }
|
|
|
|
// Let's cut tails like ' ### ' from the end of string
|
|
|
|
max = state.skipCharsBack(max, 0x20, pos); // space
|
|
tmp = state.skipCharsBack(max, 0x23, pos); // #
|
|
if (tmp > pos && state.src.charCodeAt(tmp - 1) === 0x20/* space */) {
|
|
max = tmp;
|
|
}
|
|
|
|
state.line = startLine + 1;
|
|
|
|
token = state.push('heading_open', 'h' + String(level), 1);
|
|
token.markup = '########'.slice(0, level);
|
|
token.map = [ startLine, state.line ];
|
|
|
|
token = state.push('inline', '', 0);
|
|
token.content = state.src.slice(pos, max).trim();
|
|
token.map = [ startLine, state.line ];
|
|
token.children = [];
|
|
|
|
token = state.push('heading_close', 'h' + String(level), -1);
|
|
token.markup = '########'.slice(0, level);
|
|
|
|
return true;
|
|
}
|
|
|
|
md.block.ruler.at('heading', heading, {
|
|
alt: [ 'paragraph', 'reference', 'blockquote' ]
|
|
});
|
|
};
|
|
}());
|