12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- const fs = require('fs');
- const path = require('path');
- // 读取HTML文件
- const htmlFilePath = path.join(__dirname, 'src/app/pages/designer/project-detail/project-detail.html');
- let htmlContent = fs.readFileSync(htmlFilePath, 'utf8');
- console.log('开始修复HTML结构...');
- // 分析并修复HTML结构
- function fixHtmlStructure(content) {
- const lines = content.split('\n');
- const stack = [];
- const fixedLines = [];
- let inIfBlock = false;
- let ifBlockDepth = 0;
-
- for (let i = 0; i < lines.length; i++) {
- const line = lines[i];
- const trimmedLine = line.trim();
-
- // 检测@if控制流
- if (trimmedLine.includes('@if')) {
- inIfBlock = true;
- ifBlockDepth++;
- fixedLines.push(line);
- continue;
- }
-
- // 检测@if控制流结束
- if (inIfBlock && trimmedLine === '}') {
- ifBlockDepth--;
- if (ifBlockDepth === 0) {
- inIfBlock = false;
- }
- fixedLines.push(line);
- continue;
- }
-
- // 检测div开始标签
- if (trimmedLine.includes('<div')) {
- const divMatch = trimmedLine.match(/<div[^>]*>/);
- if (divMatch && !trimmedLine.includes('</div>')) {
- stack.push({
- tag: 'div',
- line: i + 1,
- content: divMatch[0]
- });
- }
- fixedLines.push(line);
- continue;
- }
-
- // 检测div结束标签
- if (trimmedLine.includes('</div>')) {
- if (stack.length > 0 && stack[stack.length - 1].tag === 'div') {
- stack.pop();
- } else {
- console.log(`警告:第${i + 1}行发现多余的</div>标签,已移除`);
- continue; // 跳过多余的结束标签
- }
- }
-
- fixedLines.push(line);
- }
-
- // 添加缺失的结束标签
- while (stack.length > 0) {
- const unclosed = stack.pop();
- if (unclosed.tag === 'div') {
- fixedLines.push('</div>');
- console.log(`添加缺失的</div>标签`);
- }
- }
-
- return fixedLines.join('\n');
- }
- // 修复HTML结构
- const fixedContent = fixHtmlStructure(htmlContent);
- // 写回文件
- fs.writeFileSync(htmlFilePath, fixedContent, 'utf8');
- console.log('HTML结构修复完成!');
|