UNPKG

1.75 kBJavaScriptView Raw
1var through = require('through');
2var HtmlToGFM = require('./converters/htmlToGFM');
3var HtmlParser = require('./htmlParser/htmlParser');
4var stringToStream = require('./utils/stringToStream');
5var HtmlToMarkdown = require('./converters/htmlToMarkdown');
6
7module.exports = function Hammerdown (options) {
8 "use strict";
9
10 if (!(this instanceof Hammerdown))
11 return new Hammerdown(options);
12
13 var parser = new HtmlParser();
14 var htmlToMarkdown = getMarkdownConverter(options);
15
16 parser.on('text',function(text){htmlToMarkdown.appendTextData(text);})
17 .on('opentag',function(tag){htmlToMarkdown.convertOpenTag(tag.name,tag.attributes);})
18 .on('closetag',function(tag){htmlToMarkdown.convertCloseTag(tag);})
19 .on('tagdepth',function(depth){htmlToMarkdown.onTagDepth(depth);})
20 .on('end',function(){ htmlToMarkdown.done();});
21
22 var tr = through(function(buffer){
23 var self = this;
24 parser.write(buffer);
25 htmlToMarkdown.readableStream.on('data',function(data){
26 self.queue(data);
27 });
28 },function(){
29 var self = this;
30 parser.push(null);
31 htmlToMarkdown.readableStream.on('end',function(){
32 self.queue(null);
33 });
34 });
35 tr.parse = function(text){
36 var stringParser = through();
37 stringToStream(text).pipe(this).pipe(stringParser);
38 return stringParser;
39 };
40 return tr;
41};
42
43var getMarkdownConverter = function(options){
44 if(!options)
45 options = {};
46
47 if(options.type === 'gfm')
48 return new HtmlToGFM(options);
49
50 return new HtmlToMarkdown(options);
51};
\No newline at end of file