react/docs/extractCode.js

40 lines
1.1 KiB
JavaScript
Raw Normal View History

2015-02-20 09:06:15 +08:00
'use strict';
2013-05-30 03:46:11 +08:00
var argv = require('optimist').argv;
var fs = require('fs');
var CODE_SAMPLE = /```[\S]+\s*[\s\S]*?```/g;
var PARTS = /```[\S]+\s*\/\/\s+(.+?)\n([\s\S]*?)```/;
function truncate(s, n) {
2015-02-20 09:06:15 +08:00
n = n || 256;
if (s.length < n) {
2015-02-20 09:06:15 +08:00
return s;
}
return s.substring(0, n) + '...';
2013-05-30 03:46:11 +08:00
}
function main(dest, filenames) {
if (!dest) {
throw new Error('no dest provided');
}
filenames.map(function(filename) {
var content = fs.readFileSync(filename).toString('utf8');
var codeSamples = content.match(CODE_SAMPLE);
2013-05-30 03:46:11 +08:00
codeSamples.map(function(codeSample) {
// Do a little jank preprocessing
codeSample = codeSample.replace('<!--', '//').replace(' -->', '');
var extracted = codeSample.match(PARTS);
if (!extracted) {
throw new Error('Code sample did not match correct format in ' + filename + ': ' + truncate(codeSample));
}
2015-02-20 09:06:15 +08:00
var codeSampleFilename = extracted[1];
var codeSampleContent = extracted[2].replace(/\*\*/g, '');
fs.writeFileSync(argv.dest + '/' + codeSampleFilename, codeSampleContent);
2013-05-30 03:46:11 +08:00
});
});
2013-05-30 03:46:11 +08:00
}
main(argv.dest, argv._);