@@ -6,14 +6,20 @@ var _s = require('underscore.string');
6
6
var htmlparser = require ( "htmlparser" ) ;
7
7
8
8
function htmlToText ( html , options ) {
9
+ options = options || { } ;
10
+ _ . defaults ( options , {
11
+ wordwrap : 80 ,
12
+ tables : [ ]
13
+ } ) ;
14
+
9
15
var handler = new htmlparser . DefaultHandler ( function ( error , dom ) {
10
16
11
17
} , {
12
18
verbose : true ,
13
19
ignoreWhitespace : true
14
20
} ) ;
15
- var parser = new htmlparser . Parser ( handler ) ;
16
- parser . parseComplete ( html ) ;
21
+ new htmlparser . Parser ( handler ) . parseComplete ( html ) ;
22
+
17
23
var result = buildText ( filterBody ( handler . dom ) , options ) ;
18
24
return _s . strip ( result ) ;
19
25
}
@@ -89,6 +95,10 @@ function formatAnchor(elem, fn) {
89
95
return elem . attribs . href ;
90
96
}
91
97
98
+ function formatHorizontalLine ( elem , fn , options ) {
99
+ return '\n' + _s . repeat ( '-' , options . wordwrap || 80 ) + '\n' ;
100
+ }
101
+
92
102
function tableToString ( table ) {
93
103
// Determine space width per column
94
104
// Convert all rows to lengths
@@ -153,8 +163,6 @@ function formatTable(elem, fn) {
153
163
}
154
164
155
165
function buildText ( dom , options ) {
156
- options = options || { } ;
157
- var tables = options . tables || [ ] ;
158
166
function walk ( dom ) {
159
167
var result = '' ;
160
168
_ . each ( dom , function ( elem ) {
@@ -176,8 +184,11 @@ function buildText(dom, options) {
176
184
case 'br' :
177
185
result += formatBreak ( elem , walk ) ;
178
186
break ;
187
+ case 'hr' :
188
+ result += formatHorizontalLine ( elem , walk , options ) ;
189
+ break ;
179
190
case 'table' :
180
- if ( elem . attribs && elem . attribs . class && _ . include ( tables , elem . attribs . class ) ) {
191
+ if ( elem . attribs && elem . attribs . class && _ . include ( options . tables , elem . attribs . class ) ) {
181
192
result += formatTable ( elem , walk ) ;
182
193
break ;
183
194
}
0 commit comments