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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/**
* (C) Copyright 2004-2007 Shawn Betts
* (C) Copyright 2007-2009 John J. Foerch
* (C) Copyright 2007-2008 Jeremy Maitin-Shepard
*
* Use, modification, and distribution are subject to the terms specified in the
* COPYING file.
**/
in_module(null);
/**
* trim_whitespace removes whitespace from the beginning and end of the
* given string.
*/
function trim_whitespace (str) {
var tmp = new String(str);
return tmp.replace(/^\s+/, "").replace(/\s+$/, "");
}
function shell_quote (str) {
var s = str.replace("\"", "\\\"", "g");
s = s.replace("$", "\$", "g");
return s;
}
/* Like perl's quotemeta. Backslash all non-alphanumerics. */
function quotemeta (str) {
return str.replace(/([^a-zA-Z0-9])/g, "\\$1");
}
/* Given a list of choices (strings), return a regex which matches any
of them*/
function choice_regex (choices) {
var regex = "(?:" + choices.map(quotemeta).join("|") + ")";
return regex;
}
/**
* get_shortdoc_string, given a docstring, returns the portion of the
* docstring up to the first newline, or the whole docstring.
*/
function get_shortdoc_string (doc) {
var shortdoc = null;
if (doc != null) {
var idx = doc.indexOf("\n");
if (idx >= 0)
shortdoc = doc.substring(0,idx);
else
shortdoc = doc;
}
return shortdoc;
}
/**
* string_format takes a format-string containing %X style format codes,
* and an object mapping the code-letters to replacement text. It
* returns a string with the formatting codes replaced by the replacement
* text.
*/
function string_format (spec, substitutions) {
return spec.replace(/%(.)/g, function (a, b) substitutions[b]);
}
/**
* html_escape replaces characters which are special in html with character
* entities, safe for inserting as text into an html document.
*/
function html_escape (str) {
return str.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
/**
* get_spaces returns a string of n spaces.
*/
function get_spaces (n) {
var x = "";
while (x.length < n) x += " ";
return x;
}
/**
* word_wrap wraps str to line_length.
*/
function word_wrap (str, line_length, line_prefix_first, line_prefix) {
if (line_prefix === undefined)
line_prefix = line_prefix_first;
else if (line_prefix.length < line_prefix_first.length) {
line_prefix += get_spaces(line_prefix_first.length - line_prefix.length);
}
line_length -= line_prefix_first.length;
if (line_length < 1)
line_length = 1;
let cur_prefix = line_prefix_first;
var out = "";
while (line_length < str.length) {
let i = str.lastIndexOf(" ", line_length);
if (i == -1)
i = str.indexOf(" ", line_length);
if (i == -1) {
out += cur_prefix + str + "\n";
str = "";
}
else {
out += cur_prefix + str.substr(0, i) + "\n";
while (i < str.length && str.charAt(i) == " ")
++i;
str = str.substr(i);
}
cur_prefix = line_prefix;
}
if (str.length > 0)
out += cur_prefix + str + "\n";
return out;
}
/**
* or_string joins an array of strings on commas, except for the last
* pair, which it joins with the word "or".
*/
function or_string (options) {
return options.slice(0,options.length-1)
.join(", ") + " or " + options[options.length - 1];
}
provide("string");
|