fix: box-drawing table multi-line cell merge

Continuation rows (≤1 non-empty cell, e.g. wrapped cell text)
were being treated as separate data rows, shifting columns.
Now merged into the previous row by appending to the same cell.
This commit is contained in:
windpacer
2026-05-24 13:11:28 +09:00
parent c31a2cf2e7
commit 762b4a1e7d

View File

@@ -372,23 +372,38 @@ function docsBoxBlockToGfm(buf) {
if (seps.length < 2) return '```\n' + buf.join('\n') + '\n```';
var numCols = seps.length - 1;
var dataRows = [];
// raw data rows 추출 후 각 셀 trim + 여분 줄(≤1개 셀만 내용있음)을 윗줄에 병합
var raw = [];
for (var i = 0; i < buf.length; i++) {
if (/^[ \t]*│/.test(buf[i])) dataRows.push(buf[i]);
if (!/^[ \t]*│/.test(buf[i])) continue;
var cells = [];
for (var c = 0; c < numCols; c++) cells.push(buf[i].substring(seps[c] + 1, seps[c + 1]).trim());
raw.push(cells);
}
if (raw.length === 0) return '```\n' + buf.join('\n') + '\n```';
var merged = [raw[0]];
for (var r = 1; r < raw.length; r++) {
var nonEmpty = 0, lastNec = -1;
for (var c = 0; c < numCols; c++) { if (raw[r][c] !== '') { nonEmpty++; lastNec = c; } }
if (nonEmpty <= 1) {
// 여분 줄: 윗줄의 같은 칸에 이어붙임
if (lastNec >= 0 && merged[merged.length - 1][lastNec] !== '')
merged[merged.length - 1][lastNec] += ' ' + raw[r][lastNec];
} else {
merged.push(raw[r]);
}
}
if (dataRows.length === 0) return '```\n' + buf.join('\n') + '\n```';
var result = [];
// header
var hdr = [];
for (var c = 0; c < numCols; c++) hdr.push(dataRows[0].substring(seps[c] + 1, seps[c + 1]).trim());
var hdr = merged[0];
result.push('| ' + hdr.join(' | ') + ' |');
result.push('|' + ' --- |'.repeat(numCols));
// data
for (var r = 1; r < dataRows.length; r++) {
var row = [];
for (var c = 0; c < numCols; c++) row.push(dataRows[r].substring(seps[c] + 1, seps[c + 1]).trim());
result.push('| ' + row.join(' | ') + ' |');
for (var r = 1; r < merged.length; r++) {
result.push('| ' + merged[r].join(' | ') + ' |');
}
return result.join('\n');
}