import { parseNormalText } from "./parseText";
export function parseTable(
templates: string[],
i: number,
templateLength: number
) {
let result = "
";
// 处理标题
result += processTableTHead(templates[i]);
result += ``;
++i;
for (; i < templateLength; i++) {
if (templates[i].trim()[0] === "|") {
result += processTabletBody(templates[i]);
} else {
break;
}
}
result += `
`;
result = result.replace(/<\/tr>/, "");
return { startIdx: i - 1, result };
}
function processTableTHead(s: string) {
let preIdx = -1,
template = "";
for (let i = 0, n = s.length; i < n; i++) {
if (
s[i] == "|" &&
isValidedSplitChar(s, i - 1) &&
isValidedSplitChar(s, i + 1)
) {
if (preIdx != -1) {
template += `| ${parseNormalText(s.slice(preIdx + 1, i))} | `;
}
preIdx = i;
}
}
return template + `
`;
}
function processTabletBody(s: string) {
let preIdx = -1,
template = "
";
for (let i = 0, n = s.length; i < n; i++) {
if (
s[i] == "|" &&
isValidedSplitChar(s, i - 1) &&
isValidedSplitChar(s, i + 1)
) {
if (preIdx != -1) {
let cnts = s.slice(preIdx + 1, i);
if (cnts.trim()[0] === "-") {
continue;
}
template += `| ${parseNormalText(cnts)} | `;
}
preIdx = i;
}
}
return template + `
`;
}
function isValidedSplitChar(s: string, i: number) {
return s[i] === " " || s[i] == undefined;
}