78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
function readFile(p) {
|
|
return fs.readFileSync(path.resolve(p), 'utf8');
|
|
}
|
|
|
|
const base = readFile('./backend/scripts/create-bisaya-course.js');
|
|
const bisaya = readFile('./backend/scripts/bisaya-course-plan-24-43.js');
|
|
|
|
function extractLessons(text) {
|
|
const lessons = new Map();
|
|
const re = /\{[\s\S]*?num:\s*(\d+),[\s\S]*?title:\s*'([^']+)'[\s\S]*?\}/g;
|
|
let m;
|
|
while ((m = re.exec(text))) {
|
|
const num = Number(m[1]);
|
|
const title = m[2];
|
|
if (num >= 1 && num <= 30) lessons.set(num, title);
|
|
}
|
|
return lessons;
|
|
}
|
|
|
|
function extractCorePatternsForTitle(title, text) {
|
|
// Try to find 'title': { ... corePatterns: [ ... ] }
|
|
const escTitle = title.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
const re = new RegExp("'" + escTitle + "'\\s*:\\s*\\{[\\s\\S]*?corePatterns\\s*:\\s*\\[([\\s\\S]*?)\\]", 'm');
|
|
const m = re.exec(text);
|
|
if (!m) return null;
|
|
const inside = m[1];
|
|
// Count entries: either objects { target: ... } or string entries
|
|
const lines = inside.split(/\r?\n/).map(l => l.trim()).filter(l => l.length > 0);
|
|
let count = 0;
|
|
for (const ln of lines) {
|
|
if (ln.startsWith('{') || ln.startsWith("'") || ln.startsWith('"')) count++;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
const lessons = extractLessons(base + '\n' + bisaya);
|
|
const results = [];
|
|
for (let i = 1; i <= 30; i++) {
|
|
const title = lessons.get(i);
|
|
if (!title) {
|
|
results.push({ num: i, title: null, count: 0, note: 'title not found' });
|
|
continue;
|
|
}
|
|
let count = extractCorePatternsForTitle(title, base);
|
|
let source = 'create-bisaya-course.js';
|
|
if (count === null) {
|
|
count = extractCorePatternsForTitle(title, bisaya);
|
|
source = 'bisaya-course-plan-24-43.js';
|
|
}
|
|
if (count === null) {
|
|
// try relationship anchor
|
|
const relText = bisaya;
|
|
count = extractCorePatternsForTitle(title, relText);
|
|
source = 'bisaya-course-plan-24-43.js';
|
|
}
|
|
if (count === null) {
|
|
results.push({ num: i, title, count: 0, note: 'corePatterns not found' });
|
|
} else {
|
|
results.push({ num: i, title, count, source });
|
|
}
|
|
}
|
|
|
|
let total = 0;
|
|
for (const r of results) {
|
|
total += r.count || 0;
|
|
}
|
|
|
|
console.log('Core pattern counts for lessons 1..30:');
|
|
results.forEach(r => {
|
|
console.log(`${r.num}. ${r.title || '<missing>'} -> ${r.count} ${r.source ? '('+r.source+')' : ''} ${r.note?'- '+r.note:''}`);
|
|
});
|
|
console.log('---');
|
|
console.log('Total core patterns (1..30):', total);
|