function load(textarea, div) {
div.innerHTML = '';
let lines = textarea.value.split('\n');
let firsttableline = null;
for (let i = 0; i < lines.length; i++) {
let line = lines[i];
let elem = formatLine(line);
div.append(elem);
if (elem.classList.contains('tablerow')) {
if (firsttableline == null) {
firsttableline = elem;
}
} else if (firsttableline != null) {
formatTable(firsttableline);
firsttableline = null;
}
}
}
function save(textarea, div) {
let lines = div.children;
let text = '';
for (let i=0; i\s*>\s*>(\s|$)/i)) {
token = /^(\s*>\s*>\s*>(\s|$))/i;
elem.classList.add('bq3');
elem.classList.add('bq');
} else if (line.match(/^\s*>\s*>(\s|$)/i)) {
token = /^(\s*>\s*>(\s|$))/i;
elem.classList.add('bq2');
elem.classList.add('bq');
} else if (line.match(/^\s*>(\s|$)/i)) {
token = /^(\s*>(\s|$))/i;
elem.classList.add('bq1');
elem.classList.add('bq');
} else {
elem.classList.add('body');
}
if (elem.classList.contains('bq') || elem.classList.contains('body')) {
if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){3}(\s|$)/i)) {
token = /^(\s*(>\s*){0,3}([\*\-+]\s*){3}(\s|$))/i;
elem.classList.add('ul3');
elem.classList.remove('body');
} else if (line.match(/^\s*((>\s*){0,3}\s)?([\*\-+]\s*){2}(\s|$)/i)) {
token = /^(\s*(>\s*){0,3}([\*\-+]\s*){2}(\s|$))/i;
elem.classList.add('ul2');
elem.classList.remove('body');
} else if (line.match(/^\s*((>\s*){0,3}\s)?[\*\-+](\s|$)/i)) {
token = /^(\s*(>\s*){0,3}[\*\-+](\s*|$))/;
elem.classList.add('ul1');
elem.classList.remove('body');
} else if (line.match(/^\s*((>\s*){0,3}\s)?([0-9]+\.){3}(\s|$)/i)) {
token = /^(\s*(>\s*){0,3}(\s*|$))/;
elem.classList.add('ol3');
elem.classList.remove('body');
} else if (line.match(/^\s*((>\s*){0,3}\s)?([0-9]+\.){2}(\s|$)/i)) {
token = /^(\s*(>\s*){0,3}(\s*|$))/;
elem.classList.add('ol2');
elem.classList.remove('body');
} else if (line.match(/^\s*((>\s*){0,3}\s)?[0-9]+\.(\s|$)/i)) {
token = /^(\s*(>\s*){0,3}(\s*|$))/;
elem.classList.add('ol1');
elem.classList.remove('body');
}
}
if (token != null) {
line = line.replace(token, '$1');
}
line = addLink(line);
line = addBold(line);
line = addItalic(line);
line = addTableLine(line);
line = addMono(line, listMono);
elem.innerHTML = line;
if (elem.getElementsByClassName('tablerow').length > 0) {
if (elem.childNodes[0].childNodes.length > 0) {
let child = elem.childNodes[0].childNodes[0];
while(child != null) {
if (child.nodeType == 3) {
let newchild = document.createElement('span');
newchild.innerText = child.nodeValue;
child.parentNode.replaceChild(newchild, child);
child = newchild;
}
child = child.nextSibling;
}
}
elem.classList.remove('body');
elem.classList.add('tablerow');
}
let links = elem.getElementsByClassName('link');
for (let i=0; i 1000) {
continue;
}
cpt++;
}
matches = matches.reverse();
for(let i=0; i|' + line.substring(index+1, line.length);
continue;
}
if (i == 0 && index == line.length - 1) {
// dernier |
line = line.substring(0, index) + '|' + line.substring(index+1, line.length);
continue;
}
line = line.substring(0, index) + '|' + line.substring(index+1, line.length);
}
line = '' + line + '';
}
return line;
}
function formatTable(line) {
if (! line.classList.contains('tablerow')) {
return;
}
let firstline = line;
let lastline = line;
while (firstline.previousSibling !== null && firstline.previousSibling.classList.contains('tablerow')) {
firstline = firstline.previousSibling;
firstline.classList.remove('firsttablerow');
firstline.classList.remove('lasttablerow');
}
while (lastline.nextSibling !== null && lastline.nextSibling.classList.contains('tablerow')) {
lastline = lastline.nextSibling;
lastline.classList.remove('firsttablerow');
lastline.classList.remove('lasttablerow');
}
firstline.classList.add('firsttablerow');
lastline.classList.add('lasttablerow');
resizeTableCols(firstline, lastline)
}
function resizeTableCols(firstline, lastline) {
let colsmaxwidth = [];
let currentline = firstline;
while (currentline !== null && currentline.classList.contains('tablerow')) {
let tablerow = currentline.getElementsByClassName('tablerow')[0];
let childNodes = tablerow.childNodes;
let currentwidth = 0;
let col = 0;
let currentleft;
for(let i=0; i 1000) {
continue;
}
cpt++;
}
matches = matches.reverse();
for(let i=0; i`' + mono + '`' + line.substring(matches[i]+2, line.length);
}
return line;
}
function addLink(line) {
line = line.replace(/(\[([^\]]+?)\]\(([^\)]+?)\))/ig, '[$2]($3)');
line = line.replace(/(\[([^\]]+?)\]\(\))/ig, '[$2]()');
line = line.replace(/(\[\]\(([^\)]+?)\))/ig, '[]($2)');
return line;
}
function addBold(line) {
line = line.replace(/\*\*([^\s].*?)\*\*/ig, '**$1**');
line = line.replace(/__([^\s].*?)__/ig, '__$1__');
return line;
}
function addItalic(line) {
line = line.replace(/(^|[^\*])\*([^\*\s].*?[^\*\s]|[^\*\s])\*([^\*]|$)/ig, '$1*$2*$3');
line = line.replace(/(^|[^_])_([^_\s].*?[^_\s]|[^_\s])_([^_]|$)/ig, '$1_$2_$3');
return line;
}
export { load, save, formatLine, formatTable };