-
Notifications
You must be signed in to change notification settings - Fork 3
/
generate-doc.js
41 lines (31 loc) · 1.17 KB
/
generate-doc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var fs = require('fs')
var _ = require('underscore')
var It = require('./')
function isComment(line) {
return line.substr(0, 2) === '//'
}
function stripComment(line) {
return line.replace(/^\/\/\s?/, '')
}
function comment(block) {
return 'console.log(' + JSON.stringify(_.map(block.lines, stripComment).join('\n') + '\n') + ');'
}
function code(block) {
var prints = block.source.match(/console\.log|send\('greet/) && !block.source.match(/function Person/) // quick and dirty!!
return 'console.log(' + JSON.stringify(['```javascript'].concat(block.lines).concat(['```']).join('\n') + '\n') + ');' +
(prints ? 'console.log("\\n```");' : '') +
block.lines.join('\n') + '\n' +
(prints ? 'console.log("```\\n");' : '')
}
function Block(source) {
this.source = source
this.lines = source.split(/\n/)
this.type = _.every(this.lines, isComment) ? comment : code
}
Block.prototype.getCode = function() {
return this.type(this)
}
var source = fs.readFileSync('example.js', 'utf-8')
var chunks = _.filter(source.split(/\n\s*\n/), It.send('replace', /\s*/, ''))
var blocks = _.map(chunks, It.instantiate(Block))
eval(_.map(blocks, It.send('getCode')).join('\n'))