From 12f717c626501a112212b9b70cbd562c541ba77f Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 24 Sep 2026 08:36:38 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9E=91=EC=97=85=EC=8B=A4=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=20renderMd=EC=97=90=20=EB=A7=88=ED=81=AC=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=20=ED=91=9C=20=EC=A7=80=EC=9B=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 모델 출력의 표는 세션에 줄바꿈까지 정상이었는데 renderMd에 표 처리가 없어 파이프 문자열이 평문

로 뭉개져(HTML 줄바꿈 접힘) 한 줄로 합쳐 보였다 (09-24 실측: 카메라 모듈 스펙 표가 파이프soup로 복사됨). 구분행 |---| 있는 연속 파이프 라인만 로 변환, 없으면 무사통과. 셀 안 굵게 유지, 단락 분기의 블록태그 검사에 table 추가. Co-Authored-By: Claude Code --- web-ui/html/workshop-app.html | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/web-ui/html/workshop-app.html b/web-ui/html/workshop-app.html index 7ea65cd..0353b05 100644 --- a/web-ui/html/workshop-app.html +++ b/web-ui/html/workshop-app.html @@ -1337,13 +1337,27 @@ function renderMd(text){ const items=grp.split('\n').map(line=>'
  • '+line.replace(/^[-*]\s+/,'')+'
  • ').join(''); return lead+'
      '+items+'
    '; }); + // 표 — 연속하는 파이프 라인(구분행 |---| 포함)을
    로. 표 지원이 없어 파이프 문자열이 + // 평문으로 뭉개져 한 줄에 다 붙어 보였다(09-24 실측: 카메라 모듈 스펙 표가 그대로 복사됨). + // 구분행이 없으면 표가 아니라고 보고 그대로 둔다. + s=s.replace(/(?:\|.*\n?)+/g, grp=>{ + const lines=grp.replace(/\n$/,'').split('\n').filter(l=>l.trim()); + if(lines.length<2 || !/^\|[\s:|-]+$/.test(lines[1])) return grp; + const mkRow=(line,tag)=>{ + const cs=line.replace(/^\s*\||\|\s*$/g,'').split('|') + .map(c=>'<'+tag+' style="border:1px solid var(--rb-border,#d5d0c8);padding:2px 8px;text-align:left;font-weight:'+(tag==='th'?'600':'400')+'">'+c.trim()+'').join(''); + return ''+cs+''; + }; + return '
    ' + +mkRow(lines[0],'th')+lines.slice(2).map(l=>mkRow(l,'td')).join('')+'
    '; + }); // 단락 — 빈 줄 단위로 split. 이미 블록 태그(

    /