1234567891011121314151617181920212223242526272829 |
- const reTag = /^@\S+/;
- /**
- * Creates configured `Parser`
- * @param {Partial<Options>} options
- */
- export default function getParser({ fence = '```', } = {}) {
- const fencer = getFencer(fence);
- const toggleFence = (source, isFenced) => fencer(source) ? !isFenced : isFenced;
- return function parseBlock(source) {
- // start with description section
- const sections = [[]];
- let isFenced = false;
- for (const line of source) {
- if (reTag.test(line.tokens.description) && !isFenced) {
- sections.push([line]);
- }
- else {
- sections[sections.length - 1].push(line);
- }
- isFenced = toggleFence(line.tokens.description, isFenced);
- }
- return sections;
- };
- }
- function getFencer(fence) {
- if (typeof fence === 'string')
- return (source) => source.split(fence).length % 2 === 0;
- return fence;
- }
|