feat: hand parser uses 'x' blanks instead of guessing suits/cards
Per Brian: never invent. Unknown suit -> 'x' (e.g. "Ax","Kx","4x"); fully unknown card -> "x". "AA, ace of spades" -> ["As","Ax"]; "AK on A4x" -> board ["Ax","4x","x"]. Each card's suit is independent (a hole 'As' doesn't make a board ace 'As'). Viewer renders 'x' as a muted unknown card and 'Rx' as the rank with a neutral suit dot. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,8 @@
|
||||
.card .r{font-size:1rem;}
|
||||
.card.red{color:#c8102e;}
|
||||
.card.back{background:#2a3550;color:#2a3550;}
|
||||
.card.unknown{background:#2a3550;color:#7c879e;font-size:1.2rem;}
|
||||
.card .nosuit{color:#9aa3b5;}
|
||||
|
||||
.seat{position:absolute;transform:translate(-50%,-50%);width:96px;text-align:center;
|
||||
background:rgba(13,16,22,.85);border:1px solid var(--border);border-radius:10px;padding:5px 4px;}
|
||||
@@ -84,9 +86,12 @@
|
||||
|
||||
function cardEl(code, sm){
|
||||
if(!code) return '';
|
||||
const m = String(code).trim().match(/^(10|[2-9TJQKA])\s*([shdc])$/i);
|
||||
if(!m) return `<span class="card${sm?' sm':''}">${esc(code)}</span>`;
|
||||
const c = String(code).trim();
|
||||
if(c.toLowerCase()==='x') return `<span class="card${sm?' sm':''} unknown">?</span>`;
|
||||
const m = c.match(/^(10|[2-9TJQKA])\s*([shdcx])$/i);
|
||||
if(!m) return `<span class="card${sm?' sm':''}">${esc(c)}</span>`;
|
||||
const r = m[1].toUpperCase().replace('10','T'); const s = m[2].toLowerCase();
|
||||
if(s==='x') return `<span class="card${sm?' sm':''}"><span class="r">${r}</span><span class="nosuit">·</span></span>`;
|
||||
return `<span class="card${sm?' sm':''}${RED.has(s)?' red':''}"><span class="r">${r}</span><span>${SUIT[s]}</span></span>`;
|
||||
}
|
||||
const cards = (arr, sm) => (arr||[]).map(c=>cardEl(c,sm)).join('');
|
||||
|
||||
Reference in New Issue
Block a user