#!/usr/bin/env node // Генератор скелетов глав Физики 7. Создаёт physics_7_ch1..ch5.html из единого шаблона. // Phase 0: скелет с инфраструктурой (header, navigator, sidebar, KaTeX, прогресс/XP, goTo), // без §-контента — наполняется в Phase 1+. const fs = require('fs'); const path = require('path'); const VER = '20260530'; const OUT = path.join(__dirname, '..', '..', 'frontend', 'textbooks'); const CHAPTERS = [ { n: 1, slug: 'physics-7-ch1', title: 'Физические методы познания природы', range: '§§1–7', accent: '#4f46e5', accentD: '#3730a3', accentSoft: '#e0e7ff', coverGrad: 'linear-gradient(135deg,#312e81,#4f46e5 60%,#a5b4fc)', paras: [ { id:'p1', num:'§ 1', title:'Физика — наука о природе', wm:'?' }, { id:'p2', num:'§ 2', title:'Тело, явление, величина', wm:'×' }, { id:'p3', num:'§ 3', title:'Методы исследования в физике', wm:'⚙' }, { id:'p4', num:'§ 4', title:'Прямые и косвенные измерения', wm:'=' }, { id:'p5', num:'§ 5', title:'Единицы измерения. СИ', wm:'м' }, { id:'p6', num:'§ 6', title:'Действия над физическими величинами', wm:'±' }, { id:'p7', num:'§ 7', title:'Цена деления. Погрешность', wm:'∇' }, { id:'final1', num:'Финал', title:'Итоги главы 1', wm:'★' }, ], achTitle: 'Юный физик', }, { n: 2, slug: 'physics-7-ch2', title: 'Строение вещества', range: '§§8–13', accent: '#7c3aed', accentD: '#5b21b6', accentSoft: '#ede9fe', coverGrad: 'linear-gradient(135deg,#4c1d95,#7c3aed 60%,#c4b5fd)', paras: [ { id:'p8', num:'§ 8', title:'Дискретное строение вещества', wm:'•' }, { id:'p9', num:'§ 9', title:'Тепловое движение частиц', wm:'~' }, { id:'p10', num:'§ 10', title:'Взаимодействие частиц', wm:'⇌' }, { id:'p11', num:'§ 11', title:'Газ, жидкость, твёрдое', wm:'△' }, { id:'p12', num:'§ 12', title:'Тепловое расширение', wm:'↔' }, { id:'p13', num:'§ 13', title:'Температура. Термометры', wm:'°' }, { id:'final2', num:'Финал', title:'Итоги главы 2', wm:'★' }, ], achTitle: 'Знаток вещества', }, { n: 3, slug: 'physics-7-ch3', title: 'Движение и силы', range: '§§14–27', accent: '#dc2626', accentD: '#991b1b', accentSoft: '#fee2e2', coverGrad: 'linear-gradient(135deg,#7f1d1d,#dc2626 60%,#f87171)', paras: [ { id:'p14', num:'§ 14', title:'Механическое движение. Относительность', wm:'→' }, { id:'p15', num:'§ 15', title:'Траектория, путь, время', wm:'s' }, { id:'p16', num:'§ 16', title:'Равномерное движение. Скорость', wm:'v' }, { id:'p17', num:'§ 17', title:'Графики s(t) и v(t)', wm:'∠' }, { id:'p18', num:'§ 18', title:'Средняя скорость', wm:'⟨⟩' }, { id:'p19', num:'§ 19', title:'Инерция', wm:'∞' }, { id:'p20', num:'§ 20', title:'Масса. Плотность', wm:'ρ' }, { id:'p21', num:'§ 21', title:'Сила', wm:'F' }, { id:'p22', num:'§ 22', title:'Сила тяжести', wm:'↓' }, { id:'p23', num:'§ 23', title:'Сила упругости', wm:'≈' }, { id:'p24', num:'§ 24', title:'Вес тела', wm:'P' }, { id:'p25', num:'§ 25', title:'Динамометр', wm:'⊥' }, { id:'p26', num:'§ 26', title:'Сложение сил', wm:'+' }, { id:'p27', num:'§ 27', title:'Сила трения', wm:'~' }, { id:'final3', num:'Финал', title:'Итоги главы 3', wm:'★' }, ], achTitle: 'Мастер движения', }, { n: 4, slug: 'physics-7-ch4', title: 'Давление', range: '§§28–35', accent: '#d97706', accentD: '#92400e', accentSoft: '#fef3c7', coverGrad: 'linear-gradient(135deg,#78350f,#d97706 60%,#fbbf24)', paras: [ { id:'p28', num:'§ 28', title:'Давление. Единицы давления', wm:'p' }, { id:'p29', num:'§ 29', title:'Давление газа', wm:'∴' }, { id:'p30', num:'§ 30', title:'Закон Паскаля', wm:'⊕' }, { id:'p31', num:'§ 31', title:'Гидростатическое давление', wm:'≡' }, { id:'p32', num:'§ 32', title:'Сообщающиеся сосуды', wm:'U' }, { id:'p33', num:'§ 33', title:'Газы и их вес', wm:'⌒' }, { id:'p34', num:'§ 34', title:'Атмосферное давление', wm:'∼' }, { id:'p35', num:'§ 35', title:'Барометры и манометры', wm:'⏚' }, { id:'final4', num:'Финал', title:'Итоги главы 4', wm:'★' }, ], achTitle: 'Властелин давления', }, { n: 5, slug: 'physics-7-ch5', title: 'Работа. Мощность. Энергия', range: '§§36–42', accent: '#10b981', accentD: '#047857', accentSoft: '#d1fae5', coverGrad: 'linear-gradient(135deg,#064e3b,#10b981 60%,#6ee7b7)', paras: [ { id:'p36', num:'§ 36', title:'Механическая работа', wm:'A' }, { id:'p37', num:'§ 37', title:'КПД', wm:'η' }, { id:'p38', num:'§ 38', title:'Мощность', wm:'P' }, { id:'p39', num:'§ 39', title:'Кинетическая энергия',wm:'Eк' }, { id:'p40', num:'§ 40', title:'Потенциальная энергия',wm:'Eп' }, { id:'p41', num:'§ 41', title:'Расчёт Eп = mgh', wm:'h' }, { id:'p42', num:'§ 42', title:'Закон сохранения энергии',wm:'∑' }, { id:'final5', num:'Финал', title:'Итоги главы 5', wm:'★' }, ], achTitle: 'Энергетик', }, ]; function makeHTML(C) { const parasJs = C.paras.map(p => `{id:'${p.id}',num:'${p.num}',title:${JSON.stringify(p.title)},wm:'${p.wm}'}`).join(','); const sections = C.paras.map(p => `
${p.num}

${p.title}

Содержимое параграфа появится в одной из ближайших фаз разработки.
`).join('\n'); return ` Физика 7 · Глава ${C.n} · ${C.title}
К физике 7

Физика 7 · Глава ${C.n}

${C.title} · ${C.range}
Параграфы главы ${C.n}
${sections}
`; } CHAPTERS.forEach(C => { const html = makeHTML(C); const file = path.join(OUT, `physics_7_ch${C.n}.html`); fs.writeFileSync(file, html, 'utf8'); console.log(`[gen_phys7_ch] ${file} — ${html.split('\n').length} lines`); }); console.log('Done.');