Vitaly Puzrin
10 years ago
2 changed files with 116 additions and 1 deletions
@ -0,0 +1,115 @@ |
|||
#!/usr/bin/env node
|
|||
/*eslint no-console:0*/ |
|||
|
|||
// Fixtures generator from stmd specs. Split spec to working / not working
|
|||
// examples, or show total stat.
|
|||
|
|||
'use strict'; |
|||
|
|||
|
|||
var fs = require('fs'); |
|||
var util = require('util'); |
|||
var argparse = require('argparse'); |
|||
|
|||
var Remarkable = require('..'); |
|||
|
|||
|
|||
var cli = new argparse.ArgumentParser({ |
|||
prog: 'specsplit', |
|||
version: require('../package.json').version, |
|||
addHelp: true |
|||
}); |
|||
|
|||
cli.addArgument([ 'type' ], { |
|||
help: 'type of examples to filter', |
|||
nargs: '?', |
|||
choices: [ 'good', 'bad' ] |
|||
}); |
|||
|
|||
cli.addArgument([ 'spec' ], { |
|||
help: 'spec file to read' |
|||
}); |
|||
|
|||
var options = cli.parseArgs(); |
|||
|
|||
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
function readFile(filename, encoding, callback) { |
|||
if (options.file === '-') { |
|||
// read from stdin
|
|||
|
|||
var chunks = []; |
|||
|
|||
process.stdin.on('data', function(chunk) { |
|||
chunks.push(chunk); |
|||
}); |
|||
|
|||
process.stdin.on('end', function() { |
|||
return callback(null, Buffer.concat(chunks).toString(encoding)); |
|||
}); |
|||
} else { |
|||
fs.readFile(filename, encoding, callback); |
|||
} |
|||
} |
|||
|
|||
|
|||
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
readFile(options.spec, 'utf8', function (error, input) { |
|||
var good = [], bad = [], |
|||
markdown = new Remarkable({ |
|||
xhtml: true, // write <hr /> instead of <hr> and so on
|
|||
codeLangPrefix: 'language-' |
|||
}); |
|||
|
|||
if (error) { |
|||
if (error.code === 'ENOENT') { |
|||
process.stderr.write('File not found: ' + options.spec); |
|||
process.exit(2); |
|||
} |
|||
|
|||
process.stderr.write(error.stack || error.message || String(error)); |
|||
process.exit(1); |
|||
} |
|||
|
|||
input = input.replace(/→/g, '\t'); |
|||
|
|||
input.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$/gm, function(__, md, html, offset, orig) { |
|||
|
|||
var result = { |
|||
md: md, |
|||
html: html, |
|||
line: orig.slice(0, offset).split(/\r?\n/g).length, |
|||
err: '' |
|||
}; |
|||
|
|||
try { |
|||
if (markdown.render(md) === html) { |
|||
good.push(result); |
|||
} else { |
|||
result.err = markdown.render(md); |
|||
bad.push(result); |
|||
} |
|||
} catch (___) { |
|||
bad.push(result); |
|||
} |
|||
}); |
|||
|
|||
if (!options.type) { |
|||
console.log(util.format('passed samples: %s, failed samples: %s', good.length, bad.length)); |
|||
} else { |
|||
var data = options.type === 'good' ? good : bad; |
|||
|
|||
data.forEach(function (sample) { |
|||
console.log(util.format( |
|||
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n' + |
|||
'src line: %s\n\n.\n%s.\n%s.\n', |
|||
sample.line, sample.md, sample.html)); |
|||
if (sample.err) { |
|||
console.log(util.format('error:\n\n%s\n', sample.err)); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
process.exit(0); |
|||
}); |
Loading…
Reference in new issue