mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-05-07 16:38:38 +00:00
Merge branch 'master' of https://github.com/naturalcrit/homebrewery into fix-CM-bugs
This commit is contained in:
@@ -137,14 +137,14 @@ export function tokenizeCustomMarkdown(text) {
|
||||
for (let i = lineNumber + 1; i < lines.length; i++) {
|
||||
const nextLine = lines[i];
|
||||
const onlyColonsMatch = /^:*$/.test(nextLine);
|
||||
const defMatch = /^(::)(.*\S.*)?\s*$/.exec(nextLine);
|
||||
const defMatch = /^(::)(.+)$/.exec(nextLine);
|
||||
if(!onlyColonsMatch && defMatch) {
|
||||
defs.push({ colons: defMatch[1], desc: defMatch[2], line: i });
|
||||
endLine = i;
|
||||
} else break;
|
||||
}
|
||||
|
||||
if(defs.length > 0) {
|
||||
if(defs.length > 0 && lineText.trim().length > 0) {
|
||||
tokens.push({
|
||||
line : startLine,
|
||||
type : customTags.definitionList,
|
||||
@@ -175,7 +175,7 @@ export function tokenizeCustomMarkdown(text) {
|
||||
line : d.line,
|
||||
type : customTags.definitionDesc,
|
||||
from : d.colons.length,
|
||||
to : d.colons.length + d.desc.length,
|
||||
to : d.colons.length + d.desc?.length,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -17,125 +17,28 @@ const indentLess = (view)=>{
|
||||
return true;
|
||||
};
|
||||
|
||||
const makeBold = (view)=>{
|
||||
const wrapSelection = (prefix, suffix) => (view) => {
|
||||
const { from, to } = view.state.selection.main;
|
||||
const selected = view.state.doc.sliceString(from, to);
|
||||
|
||||
let text, cursor;
|
||||
let text, selection;
|
||||
|
||||
if(from === to) {
|
||||
text = '****';
|
||||
cursor = from + 2;
|
||||
} else if(selected.startsWith('**') && selected.endsWith('**')) {
|
||||
text = selected.slice(2, -2);
|
||||
cursor = from + text.length;
|
||||
} else {
|
||||
text = `**${selected}**`;
|
||||
cursor = from + text.length;
|
||||
text = prefix + suffix;
|
||||
selection = { anchor: from + prefix.length, head: from + prefix.length };
|
||||
}
|
||||
else if(selected.startsWith(prefix) && selected.endsWith(suffix)) {
|
||||
text = selected.slice(prefix.length, -suffix.length);
|
||||
selection = { anchor: from, head: from + text.length };
|
||||
}
|
||||
else {
|
||||
text = `${prefix}${selected}${suffix}`;
|
||||
selection = { anchor: from, head: from + text.length };
|
||||
}
|
||||
|
||||
view.dispatch({
|
||||
changes : { from, to, insert: text },
|
||||
selection : { anchor: cursor },
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const makeItalic = (view)=>{
|
||||
const { from, to } = view.state.selection.main;
|
||||
const selected = view.state.doc.sliceString(from, to);
|
||||
|
||||
let text, cursor;
|
||||
|
||||
if(from === to) {
|
||||
text = '**';
|
||||
cursor = from + 1;
|
||||
} else if(selected.startsWith('*') && selected.endsWith('*')) {
|
||||
text = selected.slice(2, -2);
|
||||
cursor = from + text.length;
|
||||
} else {
|
||||
text = `*${selected}*`;
|
||||
cursor = from + text.length;
|
||||
}
|
||||
|
||||
view.dispatch({
|
||||
changes : { from, to, insert: text },
|
||||
selection : { anchor: cursor },
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const makeUnderline = (view)=>{
|
||||
const { from, to } = view.state.selection.main;
|
||||
const selected = view.state.doc.sliceString(from, to);
|
||||
|
||||
let text, cursor;
|
||||
|
||||
if(from === to) {
|
||||
text = '<u></u>';
|
||||
cursor = from + 3;
|
||||
} else if(selected.startsWith('<u>') && selected.endsWith('</u>')) {
|
||||
text = selected.slice(3, -4);
|
||||
cursor = from + text.length;
|
||||
} else {
|
||||
text = `<u>${selected}</u>`;
|
||||
cursor = from + text.length;
|
||||
}
|
||||
|
||||
view.dispatch({
|
||||
changes : { from, to, insert: text },
|
||||
selection : { anchor: cursor },
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
const makeSuper = (view)=>{
|
||||
const { from, to } = view.state.selection.main;
|
||||
const selected = view.state.doc.sliceString(from, to);
|
||||
|
||||
let text, cursor;
|
||||
|
||||
if(from === to) {
|
||||
text = '^^';
|
||||
cursor = from + 1;
|
||||
} else if(selected.startsWith('^') && selected.endsWith('^')) {
|
||||
text = selected.slice(1, -1);
|
||||
cursor = from + text.length;
|
||||
} else {
|
||||
text = `^${selected}^`;
|
||||
cursor = from + text.length;
|
||||
}
|
||||
|
||||
view.dispatch({
|
||||
changes : { from, to, insert: text },
|
||||
selection : { anchor: cursor },
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const makeSub = (view)=>{
|
||||
const { from, to } = view.state.selection.main;
|
||||
const selected = view.state.doc.sliceString(from, to);
|
||||
|
||||
let text, cursor;
|
||||
|
||||
if(from === to) {
|
||||
text = '^^^^';
|
||||
cursor = from + 2;
|
||||
} else if(selected.startsWith('^^') && selected.endsWith('^^')) {
|
||||
text = selected.slice(2, -2);
|
||||
cursor = from + text.length;
|
||||
} else {
|
||||
text = `^^${selected}^^`;
|
||||
cursor = from + text.length;
|
||||
}
|
||||
|
||||
view.dispatch({
|
||||
changes : { from, to, insert: text },
|
||||
selection : { anchor: cursor },
|
||||
selection
|
||||
});
|
||||
|
||||
return true;
|
||||
@@ -151,8 +54,8 @@ const makeNbsp = (view) => {
|
||||
const insert = (prev2 === ':>' || prev2 === '>>') ? '>' : ':>';
|
||||
|
||||
view.dispatch({
|
||||
changes: { from, to: from, insert },
|
||||
selection: { anchor: from + insert.length },
|
||||
changes : { from, to: from, insert },
|
||||
selection : { anchor: from + insert.length },
|
||||
});
|
||||
|
||||
return true;
|
||||
@@ -269,11 +172,11 @@ export const generalKeymap = Prec.high(keymap.of([
|
||||
export const markdownKeymap = Prec.highest(keymap.of([
|
||||
//{ key: 'Shift-Tab', run: indentMore },
|
||||
{ key: 'Shift-Tab', run: indentLess },
|
||||
{ key: 'Mod-b', run: makeBold },
|
||||
{ key: 'Mod-i', run: makeItalic },
|
||||
{ key: 'Mod-u', run: makeUnderline },
|
||||
{ key: 'Shift-Mod-=', run: makeSuper },
|
||||
{ key: 'Mod-=', run: makeSub },
|
||||
{ key: 'Mod-b', run: wrapSelection('**', '**') }, // makeBold
|
||||
{ key: 'Mod-i', run: wrapSelection('*', '*') }, // makeItalic
|
||||
{ key: 'Mod-u', run: wrapSelection('<u>', '</u>') }, // makeUnderline
|
||||
{ key: 'Shift-Mod-=', run: wrapSelection('^', '^') }, // makeSuper
|
||||
{ key: 'Mod-=', run: wrapSelection('^^', '^^') }, // makeSub
|
||||
{ key: 'Mod-.', run: makeNbsp },
|
||||
{ key: 'Shift-Mod-.', run: makeSpace },
|
||||
{ key: 'Shift-Mod-,', run: removeSpace },
|
||||
@@ -289,6 +192,6 @@ export const markdownKeymap = Prec.highest(keymap.of([
|
||||
{ key: 'Shift-Mod-4', run: makeHeader(4) },
|
||||
{ key: 'Shift-Mod-5', run: makeHeader(5) },
|
||||
{ key: 'Shift-Mod-6', run: makeHeader(6) },
|
||||
{ key: 'Shift-Mod-Enter', run: newColumn },
|
||||
{ key: 'Mod-Enter', run: newPage },
|
||||
{ key: 'Shift-Mod-Enter', run: newColumn },
|
||||
]));
|
||||
|
||||
Reference in New Issue
Block a user