Перейти к основному содержимому
clawam tools
Инструменты Документы Daoark EN Главная Главная / Инструменты разработчика › Главная manifest.json = 0 && line.lastIndexOf(inTriple) > line.indexOf(inTriple)) { inTriple = null; } continue; } // 简单检测三引号 if ((line.indexOf('"""') >= 0 || line.indexOf("'''") >= 0)) { var tc = line.indexOf('"""') >= 0 ? '"""' : "'''"; var first = line.indexOf(tc); var last = line.lastIndexOf(tc); if (first !== last) { result.push(indentStr.repeat(level) + line); continue; } else { inTriple = tc; result.push(indentStr.repeat(level) + line); continue; } } if (mode === 'block-split') { // 在冒号后换行 var colonMatch = trimmed.match(/^(\s*)(.*):(.*)$/); if (colonMatch && !colonMatch[2].endsWith('\\\\') && trimmed.indexOf('"""') < 0 && trimmed.indexOf("'''") < 0) { var head = colonMatch[1] + colonMatch[2] + ':'; var rest = colonMatch[3].trim(); result.push(indentStr.repeat(level) + head); if (rest && rest[0] === '#') { result.push(indentStr.repeat(level) + ' ' + rest); } else if (rest) { // rest 里还有内容,作为块内首句 var stmts = splitStatements(rest); for (var s = 0; s < stmts.length; s++) { result.push(indentStr.repeat(level + 1) + stmts[s]); } // 注意:这种"内联块"在 Python 里合法,但不是所有场景都该拆 // 简单场景:没有 rest 表示块开始,return 即可 } level++; continue; } // 简单 if/while 一行处理 var inlineMatch = trimmed.match(/^(\s*)(if|while|for|elif|else|try|except|finally|def|class)\b.*?:(.*)$/); if (inlineMatch) { var h = inlineMatch[1] + inlineMatch[2] + (trimmed.indexOf(inlineMatch[2]) + inlineMatch[2].length < trimmed.length ? trimmed.substring(inlineMatch[2].length, trimmed.length - inlineMatch[3].length) : '') + ':'; // 简化:直接输出原行 result.push(indentStr.repeat(level) + trimmed); continue; } result.push(indentStr.repeat(level) + trimmed); continue; } else { // indent 模式:仅缩进对齐 // 检测现有缩进 var leading = line.match(/^[ \t]*/)[0]; var level2 = 0; if (leading.indexOf('\t') >= 0) { level2 = leading.split('\t').length - 1; } else { level2 = Math.floor(leading.length / indentStr.length); } result.push(indentStr.repeat(level2) + trimmed); } } return result.join('\n'); } function doProcess() { try { var textA = getVal('text-a'); if (!textA) { showError('请输入'); return; } var size = parseInt(getVal('indent-size'), 10); if (!(size >= 1 && size <= 8)) { showError('缩进 1-8'); return; } var mode = getVal('mode'); var indent = ' '.repeat(size); var out = formatPy(textA, indent, mode); showResult(out, '模式: ' + mode + ',缩进 ' + size + ',输入 ' + textA.length + ' 字符,输出 ' + out.length); } catch (e) { showError('格式化失败: ' + (e.message || e)); } } $('btn-main').addEventListener('click', function(e) { e.preventDefault(); doProcess(); }); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].tagName === 'SELECT') inputs[i].selectedIndex = 0; else inputs[i].value = inputs[i].defaultValue; } var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); })();