@@ -1040,16 +1072,34 @@ function addMsg(role,html){
}
function renderMd(text){
- return text
- .replace(/&/g,'&').replace(//g,'>')
- .replace(/```[\w]*\n?([\s\S]*?)```/g,'
$1
')
- .replace(/`([^`]+)`/g,'
$1')
- .replace(/\*\*(.+?)\*\*/g,'
$1')
- .replace(/^#{1,3}\s+(.+)$/gm,'
$1
')
- .replace(/^[-*]\s+(.+)$/gm,'
$1')
- .replace(/(
[\s\S]+?<\/li>)/g,m=>``)
- .replace(/\n\n/g,'').replace(/^/,'
').replace(/$/,'
')
- .replace(/<\/p>/g,'').replace(/
(<[hup])/g,'$1').replace(/(<\/[hup][^>]*>)<\/p>/g,'$1');
+ // ์ฝ๋ํ์ค๋ฅผ ๋จผ์ ์๋ฆฌํ์์๋ก ๋นผ๋๊ณ ๋ชจ๋ ์ธ๋ผ์ธ/๋จ๋ฝ ์ฒ๋ฆฌ๊ฐ ๋๋ ๋ค ๋ณต์ํ๋ค โ
+ // ๊ทธ๋์ผ ์์ ์ฒ๋ผ \n\nโ
์นํ์ด
์๊น์ง ํ๊ณ ๋ค์ด ์ฝ๋ ๋ธ๋ก์ ๋น ์ค์
+ // ๋ก ๋์ด๋จน๋ ์ฌ๊ณ ๊ฐ ์ ๋๋ค. ์ธ๋ผ์ธ `์ฝ๋`/๊ตต๊ฒ ์ฒ๋ฆฌ๋ pre ์์ ๊ฑด๋๋ฆฌ์ง ๋ชปํ๋ค.
+ const blocks=[];
+ let s=String(text||'').replace(/&/g,'&').replace(//g,'>');
+ s=s.replace(/```[\w]*\n?([\s\S]*?)```/g,(m,code)=>{
+ blocks.push('
'+code.replace(/^\n/,'')+'
');
+ return '\n\n\u0000B'+(blocks.length-1)+'\u0000\n\n';
+ });
+ s=s.replace(/`([^`]+)`/g,'$1')
+ .replace(/\*\*(.+?)\*\*/g,'$1')
+ .replace(/^#{1,3}\s+(.+)$/gm,'$1
');
+ // ๋ฆฌ์คํธ โ ์ฐ์ํ๋ [-*] ์ค์ ํ๋์
๋ก ๋ฌถ๋๋ค(ํญ๋ชฉ๋ณ ์ด ๋ฐ๋ก ์๊ธฐ๋ ๋ฒ๊ทธ ์์ ).
+ s=s.replace(/(^|\n)([-*]\s+.+(?:\n[-*]\s+.+)*)/g,(m,lead,grp)=>{
+ const items=grp.split('\n').map(line=>'- '+line.replace(/^[-*]\s+/,'')+'
').join('');
+ return lead+'';
+ });
+ // ๋จ๋ฝ โ ๋น ์ค ๋จ์๋ก split. ์ด๋ฏธ ๋ธ๋ก ํ๊ทธ(//์ฝ๋ ์๋ฆฌํ์์)๋ก ์์ํ๋ฉด
+ // ๋ก ๊ฐ์ธ์ง ์๋๋ค.
+ s=s.split(/\n{2,}/).map(chunk=>{
+ const t=chunk.trim();
+ if(!t)return '';
+ if(/^\u0000B\d+\u0000$/.test(t))return t;
+ if(/^<(h3|ul|pre)\b/.test(t))return t;
+ return '
'+t+'
';
+ }).join('');
+ s=s.replace(/\u0000B(\d+)\u0000/g,(m,i)=>blocks[+i]||'');
+ return s;
}
async function sendMessage(){
@@ -1099,7 +1149,9 @@ async function callChat(message){
if(e.name!=='AbortError'){if(!bubble)bubble=addMsg('assistant','');bubble.innerHTML='์ค๋ฅ: '+escHtml(e.message)+'';}
}finally{btn.disabled=false;btn.textContent='์ ์ก';}
// ์ฑํ
์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์์ ์ ์์ผ๋(workshop_project ๋๊ตฌ ํธ์ถ) ๋์๋ณด๋๋ฅผ ์๋ก๊ณ ์นจํ๋ค.
- await loadWorkshopData();
+ // ๋จ, ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ๋์์ผ๋ฉด(๋๊ตฌ๊ฐ get ์ฒ๋ผ ์ฝ๊ธฐ๋ง ํ ๊ฒฝ์ฐ) ํ๋ฉด์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค โ
+ // ํผ์ณ๋ ๋ถํ ์นด๋๊ฐ ์ ํ๊ฑฐ๋ ํธ์ง ์ค์ด๋ input์ ํฌ์ปค์ค๊ฐ ๋ ์๊ฐ๋ ์ฌ๊ณ ๋ฅผ ๋ง๊ธฐ ์ํจ.
+ await softRefreshWorkshop();
// 09-22: ์ฑํ
์ผ๋ก scad_to_stl ๋ฑ ํ์ผ๋๊ตฌ๋ฅผ ๋ถ๋ฌ ์ ํ์ผ์ด ์๊ฒจ๋ ํ์ผํญ์ด ์ด๋ฏธ ์ด๋ ค์์ผ๋ฉด
// ์ ์๋ก๊ณ ์นจ๋๋ ๋ฌธ์ (์ฌ์ฉ์ ์ ๊ณ : "์ ์ฅ๋์๋๋ฐ ๋ณด์ด์ง ์๋ค") โ ํญ ์ ํ ์์ด๋ ๊ฐฑ์ .
if(document.getElementById('pane-files').classList.contains('active'))loadFiles();
@@ -1185,6 +1237,7 @@ document.addEventListener('click',(e)=>{
// โโ Init โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
(async function init(){
if(!(await checkAuth()))return;
+ {const tb=document.getElementById('theme-btn');if(tb)tb.textContent=document.documentElement.getAttribute('data-theme')==='light'?'โ๏ธ':'๐';}
await loadWorkshopData();
await initSessionId();
await loadHistory();