var fs = require("fs"); var _ = require("lodash"); var jade = require('jade'); var md = require("marked"); function main(opts) { loadLanguages(opts.languagesDir) .sort(function(a,b) { return a.id > b.id ? 1 : -1 }) .forEach(function(lang,_,languages) { outputLanguage(lang,languages,opts); }); } function loadLanguages(path) { var index = readJson(path + "/language.json"); var availableListedLanguages = _.intersection(index.listed,fs.readdirSync(path)); return availableListedLanguages.reduce(function(all,lang) { var langPath = path + "/" + lang; if(!fs.statSync(langPath).isDirectory()) return all; var data = _.extend(loadLanguage(langPath),{id: lang}); return all.concat(data); },[]); } function loadLanguage(path) { var index = readJson(path + '/index.json'); var language = _.extend(index,{ sections: index.sections.map(function(section) { return _.extend(section,{ link: section.dir, isIntro: section.dir == "intro", articles: section.articles.map(function(article) { return _.extend({ link: section.dir + "." + article },loadArticle(path + "/" + section.dir + "/" + article + ".md")); }) }) }) }); language.navigation = language.sections; return language; } function loadArticle(path) { var text = fs.readFileSync(path,"utf8"); var title = text.substring(0, text.indexOf('\n')); text = text.substring(title.length); title = md(title.replace(/\#/g, '').trim()); var titleText = title.substring(3, title.length - 5); text = processArticleBody(text); var parts = text.split('
/g, ''); return text.replace(/