#!/usr/bin/node //Copyright Chris Xiong 2018 //License: Expat (MIT) const config = { content_dir: '../content', template_dir: '../templates', dest_dir: '../generated', posts_per_listpage: 5, // These are only used by the Atom feed generator atom_feed_nposts: 10, version_string: '2.6', atom_url: 'https://chrisoft.org/blog/atom.xml', published_url: 'https://chrisoft.org/blog/', atom_title: 'Specluncam Ursae', atom_subtitle: 'Chris Xiong\'s blog posts', atom_author: 'Chris Xiong', atom_icon: 'https://chrisoft.org/cx.png' }; const fs=require('fs'); const path=require('path'); const scanner=require('./scanner'); let list=scanner.scan(config.content_dir,config.dest_dir); const tags=scanner.build_list_index(); const taglist=Object.keys(tags).sort(); const force=process.argv.indexOf('--force')!=-1; const postrenderer=require('./postrenderer'); postrenderer.set_template(path.join(config.template_dir,'post_template')); function ensure_dir(p) { let needcreation=false; try{ if(!fs.statSync(p).isDirectory()) { needcreation=true; fs.unlinkSync(p); } }catch(e){needcreation=true;} if(needcreation)fs.mkdirSync(p); if(!fs.statSync(p).isDirectory())throw 'shit'; } const post_dir=path.join(config.dest_dir,'post'); ensure_dir(post_dir); for(let j=0;j{console.log(`rendered: ${r}`);}) } const listrenderer=require('./listrenderer'); listrenderer.set_template(path.join(config.template_dir,'list_template')); list = list.filter((t) => (t.date.indexOf('UNLISTED') == -1)); const gen_atom = require('./atomgen').gen_atom; gen_atom(list, config); const list_dir=path.join(config.dest_dir,'list'); const ppp=config.posts_per_listpage; ensure_dir(list_dir); let pc=Math.floor(list.length/ppp)+(list.length%ppp!=0); for(let i=0;i