⚙️ TOML 格式化

TOML 美化与压缩:标准化空格、合并连续空行、整理表头。基础支持 [section]、key=value、字符串、数字。

等待输入...
已复制
const SAMPLE = 'title = "My App"\nversion = "1.0"\ndebug=true\n\n[database]\nhost = "localhost"\nport = 5432\npool=10\n\n[[servers]]\nname = "a"\nrole = "web"\n\n[[servers]]\nname = "b"\nrole = "db"'; function formatToml(toml, minify){ const lines = toml.split('\n'); const out = []; let prevEmpty = false; for(let line of lines){ const trimmed = line.trim(); if(!trimmed){ if(!minify && !prevEmpty) out.push(''); prevEmpty = true; continue; } prevEmpty = false; if(trimmed.startsWith('#')){ out.push(trimmed); continue; } if(trimmed.startsWith('[')){ out.push(trimmed); continue; } const eqIdx = trimmed.indexOf('='); if(eqIdx > 0){ const k = trimmed.slice(0, eqIdx).trim(); let v = trimmed.slice(eqIdx + 1).trim(); v = v.replace(/=\s+/, '='); v = v.replace(/,\s+/g, ', '); out.push(k + ' = ' + v); } else { out.push(trimmed); } } return out.join('\n').replace(/\n{3,}/g, '\n\n').trim() + (minify ? '' : '\n'); } function doBeautify(){ setErr(''); try{ setOut(formatToml(document.getElementById('input').value, false)); setErr('✅ 格式化成功'); }catch(e){ setErr('❌ ' + e.message); } } function doMinify(){ setErr(''); try{ setOut(formatToml(document.getElementById('input').value, true)); setErr('✅ 压缩成功'); }catch(e){ setErr('❌ ' + e.message); } } function doValidate(){ setErr(''); try{ const toml = document.getElementById('input').value; const lines = toml.split('\n'); let tables = 0, kv = 0; for(const line of lines){ const t = line.trim(); if(t.startsWith('[') && t.endsWith(']')) tables++; else if(t.includes('=')) kv++; } setErr('✅ 解析成功:' + tables + ' 个表头,' + kv + ' 个键值对'); }catch(e){ setErr('❌ ' + e.message); } } function loadSample(){document.getElementById('input').value = SAMPLE; doBeautify();} function getIndent(){const v=document.getElementById('indent').value;return v==='tab'?'\t':' '.repeat(parseInt(v));} function setOut(s){document.getElementById('output').textContent=s;} function setErr(s){const e=document.getElementById('err');e.textContent=s||'';e.className='err'+(s?'':' ok');} function clearAll(){document.getElementById('input').value='';setOut('等待输入...');setErr('');} function loadSample(){document.getElementById('input').value=SAMPLE;doBeautify();}