mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
Koenig - Expand --
to en dash and ---
to em dash
refs https://github.com/TryGhost/Ghost/issues/9623 - match `--` and `---` and convert if followed by a space or any character respectively - include guards to ensure that expansion doesn't occur inside code blocks
This commit is contained in:
parent
d760e5633c
commit
1b02a63848
1 changed files with 49 additions and 0 deletions
|
@ -85,6 +85,55 @@ export default function (editor, koenig) {
|
||||||
|
|
||||||
/* inline markdown ------------------------------------------------------ */
|
/* inline markdown ------------------------------------------------------ */
|
||||||
|
|
||||||
|
// --\s = en dash –
|
||||||
|
// ---. = em dash —
|
||||||
|
// separate to the grouped replacement functions because we're matching on
|
||||||
|
// the trailing character which can be anything
|
||||||
|
editor.onTextInput({
|
||||||
|
name: 'hyphens',
|
||||||
|
match: /---?.$/,
|
||||||
|
run(editor) {
|
||||||
|
let {range} = editor;
|
||||||
|
|
||||||
|
let text = editor.range.head.section.textUntil(editor.range.head);
|
||||||
|
|
||||||
|
// do not match if we're in code formatting
|
||||||
|
if (editor.hasActiveMarkup('code') || text.match(/[^\s]?`[^\s]/)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let ndashMatch = text.match(/[^-]--(\s)$/);
|
||||||
|
if (ndashMatch) {
|
||||||
|
let match = ndashMatch[0];
|
||||||
|
range = range.extend(-(match.length - 1));
|
||||||
|
|
||||||
|
if (editor.detectMarkupInRange(range, 'code')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return editor.run((postEditor) => {
|
||||||
|
let position = postEditor.deleteRange(range);
|
||||||
|
postEditor.insertText(position, `–${ndashMatch[1]}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let mdashMatch = text.match(/---([^-])$/);
|
||||||
|
if (mdashMatch) {
|
||||||
|
let match = mdashMatch[0];
|
||||||
|
range = range.extend(-(match.length));
|
||||||
|
|
||||||
|
if (editor.detectMarkupInRange(range, 'code')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return editor.run((postEditor) => {
|
||||||
|
let position = postEditor.deleteRange(range);
|
||||||
|
postEditor.insertText(position, `—${mdashMatch[1]}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function matchStrongStar(editor, text) {
|
function matchStrongStar(editor, text) {
|
||||||
let {range} = editor;
|
let {range} = editor;
|
||||||
let matches = text.match(/(?:^|\s)\*\*([^\s*]+|[^\s*][^*]*[^\s])\*\*/);
|
let matches = text.match(/(?:^|\s)\*\*([^\s*]+|[^\s*][^*]*[^\s])\*\*/);
|
||||||
|
|
Loading…
Add table
Reference in a new issue