-
Notifications
You must be signed in to change notification settings - Fork 0
/
customHelpFormatter.js
56 lines (48 loc) · 1.68 KB
/
customHelpFormatter.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const {ArgumentParser, HelpFormatter} = require('argparse');
/**
*
* This is custom formatter for the help text.
*
* It extends the formatter from the `argparse` module. The new behaviour ensures
* that whitespaces characeters like \n in the description or epilog are not removed.
*
*/
var CustomHelpFormatter = module.exports = function CustomHelpFormatter(options){
HelpFormatter.call(this, options);
}
CustomHelpFormatter.prototype = Object.create(HelpFormatter.prototype);
CustomHelpFormatter.prototype.constructor = CustomHelpFormatter;
HelpFormatter.prototype._splitLines = function (text, width) {
var lines = [];
var delimiters = [ ' ', '.', ',', '!', '?' ];
var re = new RegExp('[' + delimiters.join('') + '][^' + delimiters.join('') + ']*$');
// CHANGE 1
//text = text.replace(/[\n\|\t]/g, ' ');
text = text.trim();
// CHANGE 2
//text = text.replace(this._whitespaceMatcher, ' ');
// Wraps the single paragraph in text (a string) so every line
// is at most width characters long.
text.split('\n').forEach(function (line) {
if (width >= line.length) {
lines.push(line);
return;
}
var wrapStart = 0;
var wrapEnd = width;
var delimiterIndex = 0;
while (wrapEnd <= line.length) {
if (wrapEnd !== line.length && delimiters.indexOf(line[wrapEnd] < -1)) {
delimiterIndex = (re.exec(line.substring(wrapStart, wrapEnd)) || {}).index;
wrapEnd = wrapStart + delimiterIndex + 1;
}
lines.push(line.substring(wrapStart, wrapEnd));
wrapStart = wrapEnd;
wrapEnd += width;
}
if (wrapStart < line.length) {
lines.push(line.substring(wrapStart, wrapEnd));
}
});
return lines;
};