mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-25 14:02:40 +00:00
Merge pull request #3908 from dbolack-ab/justifiedParagraphs
V4 proposed aligned paragraph tokens
This commit is contained in:
@@ -73,6 +73,9 @@ jobs:
|
||||
- run:
|
||||
name: Test - Non-Breaking Spaces
|
||||
command: npm run test:non-breaking-spaces
|
||||
- run:
|
||||
name: Test - Paragraph Justification
|
||||
command: npm run test:paragraph-justification
|
||||
- run:
|
||||
name: Test - Variables
|
||||
command: npm run test:variables
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
"test:definition-lists": "jest tests/markdown/definition-lists.test.js --verbose --noStackTrace",
|
||||
"test:hard-breaks": "jest tests/markdown/hard-breaks.test.js --verbose --noStackTrace",
|
||||
"test:non-breaking-spaces": "jest tests/markdown/non-breaking-spaces.test.js --verbose --noStackTrace",
|
||||
"test:paragraph-justification": "jest tests/markdown/paragraph-justification.test.js --verbose --noStackTrace",
|
||||
"test:emojis": "jest tests/markdown/emojis.test.js --verbose --noStackTrace",
|
||||
"test:route": "jest tests/routes/static-pages.test.js --verbose",
|
||||
"test:safehtml": "jest tests/html/safeHTML.test.js --verbose",
|
||||
|
||||
@@ -371,6 +371,43 @@ const superSubScripts = {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const justifiedParagraphClasses = [];
|
||||
justifiedParagraphClasses[2] = 'Left';
|
||||
justifiedParagraphClasses[4] = 'Right';
|
||||
justifiedParagraphClasses[6] = 'Center';
|
||||
|
||||
const justifiedParagraphs = {
|
||||
name : 'justifiedParagraphs',
|
||||
level : 'block',
|
||||
start(src) {
|
||||
return src.match(/\n(?:-:|:-|-:) {1}/m)?.index;
|
||||
}, // Hint to Marked.js to stop and check for a match
|
||||
tokenizer(src, tokens) {
|
||||
const regex = /^(((:-))|((-:))|((:-:))) .+(\n(([^\n].*\n)*(\n|$))|$)/ygm;
|
||||
const match = regex.exec(src);
|
||||
if(match?.length) {
|
||||
let whichJustify;
|
||||
if(match[2]?.length) whichJustify = 2;
|
||||
if(match[4]?.length) whichJustify = 4;
|
||||
if(match[6]?.length) whichJustify = 6;
|
||||
return {
|
||||
type : 'justifiedParagraphs', // Should match "name" above
|
||||
raw : match[0], // Text to consume from the source
|
||||
length : match[whichJustify].length,
|
||||
text : match[0].slice(match[whichJustify].length),
|
||||
class : justifiedParagraphClasses[whichJustify],
|
||||
tokens : this.lexer.inlineTokens(match[0].slice(match[whichJustify].length + 1))
|
||||
};
|
||||
}
|
||||
},
|
||||
renderer(token) {
|
||||
return `<p align="${token.class}">${this.parser.parseInline(token.tokens)}</p>`;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
const forcedParagraphBreaks = {
|
||||
name : 'hardBreaks',
|
||||
level : 'block',
|
||||
@@ -768,7 +805,7 @@ const tableTerminators = [
|
||||
];
|
||||
|
||||
Marked.use(MarkedVariables());
|
||||
Marked.use({ extensions : [definitionListsMultiLine, definitionListsSingleLine, forcedParagraphBreaks,
|
||||
Marked.use({ extensions : [justifiedParagraphs, definitionListsMultiLine, definitionListsSingleLine, forcedParagraphBreaks,
|
||||
nonbreakingSpaces, superSubScripts, mustacheSpans, mustacheDivs, mustacheInjectInline] });
|
||||
Marked.use(mustacheInjectBlock);
|
||||
Marked.use({ renderer: renderer, tokenizer: tokenizer, mangle: false });
|
||||
|
||||
27
tests/markdown/paragraph-justification.test.js
Normal file
27
tests/markdown/paragraph-justification.test.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/* eslint-disable max-lines */
|
||||
|
||||
import Markdown from 'naturalcrit/markdown.js';
|
||||
|
||||
describe('Justification', ()=>{
|
||||
test('Left Justify', function() {
|
||||
const source = ':- Hello';
|
||||
const rendered = Markdown.render(source);
|
||||
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p align=\"Left\">Hello</p>`);
|
||||
});
|
||||
test('Right Justify', function() {
|
||||
const source = '-: Hello';
|
||||
const rendered = Markdown.render(source);
|
||||
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p align=\"Right\">Hello</p>`);
|
||||
});
|
||||
test('Center Justify', function() {
|
||||
const source = ':-: Hello';
|
||||
const rendered = Markdown.render(source);
|
||||
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<p align=\"Center\">Hello</p>`);
|
||||
});
|
||||
|
||||
test('Ignored inside a code block', function() {
|
||||
const source = '```\n\n:- Hello\n\n```\n';
|
||||
const rendered = Markdown.render(source);
|
||||
expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`<pre><code>\n:- Hello\n</code></pre>\n`);
|
||||
});
|
||||
});
|
||||
@@ -505,4 +505,4 @@ body { counter-reset : page-numbers 0; }
|
||||
counter-increment : page-numbers;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user