99941cf4ed79aa21d266f965267d3865d8e5fdb9
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/string/logic-impl.js          1) /*
lib/plankton/string/logic-impl.js          2) This file is part of »bacterio-plankton:string«.
lib/plankton/string/logic-impl.js          3) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/string/logic-impl.js   4) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/string/logic-impl.js          5) <info@greenscale.de>
lib/plankton/string/logic-impl.js          6) 
lib/plankton/string/logic-impl.js          7) »bacterio-plankton:string« is free software: you can redistribute it and/or modify
lib/plankton/string/logic-impl.js          8) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/string/logic-impl.js          9) the Free Software Foundation, either version 3 of the License, or
lib/plankton/string/logic-impl.js         10) (at your option) any later version.
lib/plankton/string/logic-impl.js         11) 
lib/plankton/string/logic-impl.js         12) »bacterio-plankton:string« is distributed in the hope that it will be useful,
lib/plankton/string/logic-impl.js         13) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/string/logic-impl.js         14) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/string/logic-impl.js         15) GNU Lesser General Public License for more details.
lib/plankton/string/logic-impl.js         16) 
lib/plankton/string/logic-impl.js         17) You should have received a copy of the GNU Lesser General Public License
lib/plankton/string/logic-impl.js         18) along with »bacterio-plankton:string«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/string/logic-impl.js         19)  */
lib/plankton/string/logic-impl.js         20) var plain_text_to_html = function (text) {
lib/plankton/string/logic-impl.js         21)     var ret = text;
lib/plankton/string/logic-impl.js         22)     ret = ret.replace(/  /g, "&nbsp;&nbsp;"); // convert multiple whitespace to forced ones
lib/plankton/string/logic-impl.js         23)     ret = ret.split("\n").join("<br/>");
lib/plankton/string/logic-impl.js         24)     return ret;
lib/plankton/string/logic-impl.js         25) };
lib/plankton/string/logic-impl.js         26) /**
lib/plankton/string/logic-impl.js         27)  * @desc makes a valid
lib/plankton/string/logic-impl.js         28)  */
lib/plankton/string/logic-impl.js         29) var format_sentence = function (str, rtl, caseSense) {
lib/plankton/string/logic-impl.js         30)     if (rtl === void 0) { rtl = false; }
lib/plankton/string/logic-impl.js         31)     if (caseSense === void 0) { caseSense = true; }
lib/plankton/string/logic-impl.js         32)     if (str === "") {
lib/plankton/string/logic-impl.js         33)         return str;
lib/plankton/string/logic-impl.js         34)     }
lib/plankton/string/logic-impl.js         35)     else {
lib/plankton/string/logic-impl.js         36)         var marks = {
lib/plankton/string/logic-impl.js         37)             ".": true,
lib/plankton/string/logic-impl.js         38)             "?": true,
lib/plankton/string/logic-impl.js         39)             "!": true
lib/plankton/string/logic-impl.js         40)         };
lib/plankton/string/logic-impl.js         41)         var default_mark = ".";
lib/plankton/string/logic-impl.js         42)         var ret = str.split("");
lib/plankton/string/logic-impl.js         43)         if (!rtl) {
lib/plankton/string/logic-impl.js         44)             ret[0] = ret[0].toLocaleUpperCase();
lib/plankton/string/logic-impl.js         45)             if (!(ret[ret.length - 1] in marks)) {
lib/plankton/string/logic-impl.js         46)                 ret.push(default_mark);
lib/plankton/string/logic-impl.js         47)             }
lib/plankton/string/logic-impl.js         48)         }
lib/plankton/string/logic-impl.js         49)         else {
lib/plankton/string/logic-impl.js         50)             ret[ret.length - 1] = ret[ret.length - 1].toLocaleUpperCase();
lib/plankton/string/logic-impl.js         51)             if (!(ret[0] in marks)) {
lib/plankton/string/logic-impl.js         52)                 ret.unshift(default_mark);
lib/plankton/string/logic-impl.js         53)             }
lib/plankton/string/logic-impl.js         54)         }
lib/plankton/string/logic-impl.js         55)         return ret.join("");
lib/plankton/string/logic-impl.js         56)     }
lib/plankton/string/logic-impl.js         57) };
lib/plankton/string/logic-impl.js         58) var fill_string_template = function (template_string, object, fabric, delimiter, default_string, sloppy) {
lib/plankton/string/logic-impl.js         59)     if (fabric === void 0) { fabric = function (object, key) { return object[key]; }; }
lib/plankton/string/logic-impl.js         60)     if (delimiter === void 0) { delimiter = "%"; }
lib/plankton/string/logic-impl.js         61)     if (default_string === void 0) { default_string = null; }
lib/plankton/string/logic-impl.js         62)     function get_tags(str) {
lib/plankton/string/logic-impl.js         63)         var r = new RegExp(delimiter + "[^\\s^" + delimiter + "]+" + delimiter, "gi");
lib/plankton/string/logic-impl.js         64)         return ((str.match(r) || []).map(function (e) {
lib/plankton/string/logic-impl.js         65)             return e.slice(delimiter.length, e.length - delimiter.length);
lib/plankton/string/logic-impl.js         66)         }));
lib/plankton/string/logic-impl.js         67)     }
lib/plankton/string/logic-impl.js         68)     function replace_tag(str, tag, value) {
lib/plankton/string/logic-impl.js         69)         var r = new RegExp(delimiter + tag + delimiter, "gi");
lib/plankton/string/logic-impl.js         70)         return str.replace(r, value);
lib/plankton/string/logic-impl.js         71)     }
lib/plankton/string/logic-impl.js         72)     function replace_tags(str, obj) {
lib/plankton/string/logic-impl.js         73)         return (get_tags(str).reduce(function (ret, key) {
lib/plankton/string/logic-impl.js         74)             var value = "";
lib/plankton/string/logic-impl.js         75)             try {
lib/plankton/string/logic-impl.js         76)                 value = fabric(obj, key);
lib/plankton/string/logic-impl.js         77)                 if ((!sloppy && (value === void 0)) || (sloppy && (value == void 0))) {
lib/plankton/string/logic-impl.js         78)                     value = default_string;
lib/plankton/string/logic-impl.js         79)                 }
lib/plankton/string/logic-impl.js         80)             }
lib/plankton/string/logic-impl.js         81)             catch (e) {
lib/plankton/string/logic-impl.js         82)                 console.warn("invalid placeholder " + key);
lib/plankton/string/logic-impl.js         83)                 value = default_string;
lib/plankton/string/logic-impl.js         84)             }
lib/plankton/string/logic-impl.js         85)             return replace_tag(ret, key, value);
lib/plankton/string/logic-impl.js         86)         }, str));
lib/plankton/string/logic-impl.js         87)     }
lib/plankton/string/logic-impl.js         88)     return replace_tags(template_string, object);
lib/plankton/string/logic-impl.js         89) };
lib/plankton/string/logic-impl.js         90) var make_string_template = function (_template, _fabrics) {
lib/plankton/string/logic-impl.js         91)     if (_fabrics === void 0) { _fabrics = {}; }
lib/plankton/string/logic-impl.js         92)     function replace_tag(str, tag, value) {
lib/plankton/string/logic-impl.js         93)         var r = new RegExp("%" + tag + "%", "gi");
lib/plankton/string/logic-impl.js         94)         return str.replace(r, value);
lib/plankton/string/logic-impl.js         95)     }
lib/plankton/string/logic-impl.js         96)     function replace_tags(str, obj) {
lib/plankton/string/logic-impl.js         97)         return (Object.keys(obj).reduce(function (ret, key) {
lib/plankton/string/logic-impl.js         98)             return replace_tag(ret, key, _fabrics[key] || obj[key]);
lib/plankton/string/logic-impl.js         99)         }, str));
lib/plankton/string/logic-impl.js        100)     }
lib/plankton/string/logic-impl.js        101)     return (function (tags) {
lib/plankton/string/logic-impl.js        102)         return replace_tags(_template, tags);
lib/plankton/string/logic-impl.js        103)     });
lib/plankton/string/logic-impl.js        104) };
lib/plankton/string/logic-impl.js        105) var make_eml_header = (function () {
lib/plankton/string/logic-impl.js        106)     var _template = "";
lib/plankton/string/logic-impl.js        107)     _template += "From: %from%\n";
lib/plankton/string/logic-impl.js        108)     _template += "To: %recipient%\n";
lib/plankton/string/logic-impl.js        109)     _template += "Subject: %subject%\n";
lib/plankton/string/logic-impl.js        110)     _template += "X-Mailer: greenscale-plankton.emlgen\n";
lib/plankton/string/logic-impl.js        111)     return make_string_template(_template);
lib/plankton/string/logic-impl.js        112) })();
lib/plankton/string/logic-impl.js        113) var make_eml_body = (function () {
lib/plankton/string/logic-impl.js        114)     var exports = {};
lib/plankton/string/logic-impl.js        115)     exports["simple_body"] = make_string_template("Content-Type: %contenttype%\n\n%body%\n\n");
lib/plankton/string/logic-impl.js        116)     // very basic implementation
lib/plankton/string/logic-impl.js        117)     // parts = [{contenttype:"text/html; charset=UTF-8", body: "<h1>foo</h1>" }, {...}]
lib/plankton/string/logic-impl.js        118)     exports["body_boundrary"] = function (parts, boundrary) {
lib/plankton/string/logic-impl.js        119)         var _template = "";
lib/plankton/string/logic-impl.js        120)         _template += "--%boundrary%\n";
lib/plankton/string/logic-impl.js        121)         _template += "Content-Type: %contenttype%\n\n%body%\n\n";
lib/plankton/string/logic-impl.js        122)         //_template += "--%boundrary%--\n\n";
lib/plankton/string/logic-impl.js        123)         var maker = make_string_template(_template);
lib/plankton/string/logic-impl.js        124)         return (parts.reduce(function (prev, curr) {
lib/plankton/string/logic-impl.js        125)             curr.boundrary = boundrary;
lib/plankton/string/logic-impl.js        126)             return [prev, maker(curr)].join("");
lib/plankton/string/logic-impl.js        127)         }, ""));
lib/plankton/string/logic-impl.js        128)     };
lib/plankton/string/logic-impl.js        129)     // body must be base64 encoded!
lib/plankton/string/logic-impl.js        130)     exports["attachment_boundrary"] = function (parts, boundrary) {
lib/plankton/string/logic-impl.js        131)         var _template = "";
lib/plankton/string/logic-impl.js        132)         _template += "--%boundrary%\n";
lib/plankton/string/logic-impl.js        133)         _template += "Content-Type: %contenttype%\n";
lib/plankton/string/logic-impl.js        134)         _template += "Content-Transfer-Encoding: base64\n";
lib/plankton/string/logic-impl.js        135)         _template += "Content-Disposition: %disposition%; filename=\"%name%\"\n\n";
lib/plankton/string/logic-impl.js        136)         _template += "%body%\n\n";
lib/plankton/string/logic-impl.js        137)         //_template += "--%boundrary%--\n\n";
lib/plankton/string/logic-impl.js        138)         var maker = make_string_template(_template);
lib/plankton/string/logic-impl.js        139)         return (parts.reduce(function (prev, curr) {
lib/plankton/string/logic-impl.js        140)             curr.boundrary = boundrary;
lib/plankton/string/logic-impl.js        141)             if (curr.disposition === void 0)
lib/plankton/string/logic-impl.js        142)                 curr.disposition = "inline";
lib/plankton/string/logic-impl.js        143)             return [prev, maker(curr)].join("");
lib/plankton/string/logic-impl.js        144)         }, ""));
lib/plankton/string/logic-impl.js        145)     };
lib/plankton/string/logic-impl.js        146)     exports["gen_boundrary"] = function () {
lib/plankton/string/logic-impl.js        147)         return ("xxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g, function (c) {
lib/plankton/string/logic-impl.js        148)             var r = crypto.getRandomValues(new Uint8Array(1))[0] % 16 | 0, v = c == "x" ? r : (r & 0x3 | 0x8);
lib/plankton/string/logic-impl.js        149)             return v.toString(16);
lib/plankton/string/logic-impl.js        150)         }));
lib/plankton/string/logic-impl.js        151)     };
lib/plankton/string/logic-impl.js        152)     // simple implementation without alternatives (old rfc)
lib/plankton/string/logic-impl.js        153)     exports["complete_boundrary"] = function (bodyparts, attachments) {
lib/plankton/string/logic-impl.js        154)         var ret = "";
lib/plankton/string/logic-impl.js        155)         var boundrary = exports["gen_boundrary"]();
lib/plankton/string/logic-impl.js        156)         ret += exports["body_boundrary"](bodyparts, boundrary);
lib/plankton/string/logic-impl.js        157)         ret += exports["attachment_boundrary"](attachments, boundrary);
lib/plankton/string/logic-impl.js        158)         ret += "--" + boundrary + "--\n\nINVISIBLE!!!!";
lib/plankton/string/logic-impl.js        159)         return (exports["simple_body"]({
lib/plankton/string/logic-impl.js        160)             "contenttype": sprintf("multipart/mixed; boundary=%s", [boundrary]),
lib/plankton/string/logic-impl.js        161)             "body": ret
lib/plankton/string/logic-impl.js        162)         }));
lib/plankton/string/logic-impl.js        163)     };
lib/plankton/string/logic-impl.js        164)     return exports;
lib/plankton/string/logic-impl.js        165) })();
lib/plankton/string/logic-impl.js        166) /*
lib/plankton/string/logic-impl.js        167) This file is part of »bacterio-plankton:string«.
lib/plankton/string/logic-impl.js        168) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/string/logic-impl.js 169) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/string/logic-impl.js        170) <info@greenscale.de>
lib/plankton/string/logic-impl.js        171) 
lib/plankton/string/logic-impl.js        172) »bacterio-plankton:string« is free software: you can redistribute it and/or modify
lib/plankton/string/logic-impl.js        173) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/string/logic-impl.js        174) the Free Software Foundation, either version 3 of the License, or
lib/plankton/string/logic-impl.js        175) (at your option) any later version.
lib/plankton/string/logic-impl.js        176) 
lib/plankton/string/logic-impl.js        177) »bacterio-plankton:string« is distributed in the hope that it will be useful,
lib/plankton/string/logic-impl.js        178) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/string/logic-impl.js        179) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/string/logic-impl.js        180) GNU Lesser General Public License for more details.
lib/plankton/string/logic-impl.js        181) 
lib/plankton/string/logic-impl.js        182) You should have received a copy of the GNU Lesser General Public License
lib/plankton/string/logic-impl.js        183) along with »bacterio-plankton:string«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/string/logic-impl.js        184)  */
lib/plankton/string/logic-impl.js        185) var lib_string;
lib/plankton/string/logic-impl.js        186) (function (lib_string) {
lib/plankton/string/logic-impl.js        187)     /**
lib/plankton/string/logic-impl.js        188)      * @author fenris
lib/plankton/string/logic-impl.js        189)      */
lib/plankton/string/logic-impl.js        190)     var hexdigits = 4;
lib/plankton/string/logic-impl.js        191)     /**
lib/plankton/string/logic-impl.js        192)      * @author fenris
lib/plankton/string/logic-impl.js        193)      */
lib/plankton/string/logic-impl.js        194)     var index_max = (1 << (4 * hexdigits));
lib/plankton/string/logic-impl.js        195)     /**
lib/plankton/string/logic-impl.js        196)      * @author fenris
lib/plankton/string/logic-impl.js        197)      */
lib/plankton/string/logic-impl.js        198)     var index_is = 0;
lib/plankton/string/logic-impl.js        199)     /**
lib/plankton/string/logic-impl.js        200)      * @author neuc,frac
lib/plankton/string/logic-impl.js        201)      */
lib/plankton/string/logic-impl.js        202)     function empty(str) {
lib/plankton/string/logic-impl.js        203)         return (str.trim() === "");
lib/plankton/string/logic-impl.js        204)     }
lib/plankton/string/logic-impl.js        205)     lib_string.empty = empty;
lib/plankton/string/logic-impl.js        206)     /**
lib/plankton/string/logic-impl.js        207)      * @desc returns a unique string
lib/plankton/string/logic-impl.js        208)      * @param {string} prefix an optional prefix for the generated string
lib/plankton/string/logic-impl.js        209)      * @return {string}
lib/plankton/string/logic-impl.js        210)      * @author fenris
lib/plankton/string/logic-impl.js        211)      */
lib/plankton/string/logic-impl.js        212)     function generate(prefix) {
lib/plankton/string/logic-impl.js        213)         if (prefix === void 0) { prefix = "string_"; }
lib/plankton/string/logic-impl.js        214)         if (index_is > index_max) {
lib/plankton/string/logic-impl.js        215)             throw (new Error("[string_generate] out of valid indices"));
lib/plankton/string/logic-impl.js        216)         }
lib/plankton/string/logic-impl.js        217)         else {
lib/plankton/string/logic-impl.js        218)             return lib_string.sprintf(prefix + "%0" + hexdigits.toString() + "X", [index_is++]);
lib/plankton/string/logic-impl.js        219)         }
lib/plankton/string/logic-impl.js        220)     }
lib/plankton/string/logic-impl.js        221)     lib_string.generate = generate;
lib/plankton/string/logic-impl.js        222)     /**
lib/plankton/string/logic-impl.js        223)      * @desc splits a string, but returns an empty list, if the string is empty
lib/plankton/string/logic-impl.js        224)      * @param {string} chain
lib/plankton/string/logic-impl.js        225)      * @param {string} separator
lib/plankton/string/logic-impl.js        226)      * @return {Array<string>}
lib/plankton/string/logic-impl.js        227)      * @author fenris
lib/plankton/string/logic-impl.js        228)      */
lib/plankton/string/logic-impl.js        229)     function split(chain, separator) {
lib/plankton/string/logic-impl.js        230)         if (separator === void 0) { separator = " "; }
lib/plankton/string/logic-impl.js        231)         if (chain.length == 0) {
lib/plankton/string/logic-impl.js        232)             return [];
lib/plankton/string/logic-impl.js        233)         }
lib/plankton/string/logic-impl.js        234)         else {
lib/plankton/string/logic-impl.js        235)             return chain.split(separator);
lib/plankton/string/logic-impl.js        236)         }
lib/plankton/string/logic-impl.js        237)     }
lib/plankton/string/logic-impl.js        238)     lib_string.split = split;
lib/plankton/string/logic-impl.js        239)     /**
lib/plankton/string/logic-impl.js        240)      * @author neu3no
lib/plankton/string/logic-impl.js        241)      */
lib/plankton/string/logic-impl.js        242)     function explode(str, needle, max) {
lib/plankton/string/logic-impl.js        243)         var temp = str.split(needle);
lib/plankton/string/logic-impl.js        244)         var right = temp.splice(max - 1);
lib/plankton/string/logic-impl.js        245)         temp.push(right.join(needle));
lib/plankton/string/logic-impl.js        246)         return temp;
lib/plankton/string/logic-impl.js        247)     }
lib/plankton/string/logic-impl.js        248)     lib_string.explode = explode;
lib/plankton/string/logic-impl.js        249)     /**
lib/plankton/string/logic-impl.js        250)      * @desc concats a given word with itself n times
lib/plankton/string/logic-impl.js        251)      * @param {string} word
lib/plankton/string/logic-impl.js        252)      * @param {int}
lib/plankton/string/logic-impl.js        253)      * @return {string}
lib/plankton/string/logic-impl.js        254)      * @author fenris
lib/plankton/string/logic-impl.js        255)      */
lib/plankton/string/logic-impl.js        256)     function repeat(word, count) {
lib/plankton/string/logic-impl.js        257)         // return ((count == 0) ? "" : (word + repeat(word, count-1)));
lib/plankton/string/logic-impl.js        258)         var result = "";
lib/plankton/string/logic-impl.js        259)         for (var n = 0; n < count; n += 1) {
lib/plankton/string/logic-impl.js        260)             result += word;
lib/plankton/string/logic-impl.js        261)         }
lib/plankton/string/logic-impl.js        262)         return result;
lib/plankton/string/logic-impl.js        263)     }
lib/plankton/string/logic-impl.js        264)     lib_string.repeat = repeat;
lib/plankton/string/logic-impl.js        265)     /**
lib/plankton/string/logic-impl.js        266)      * @desc lengthens a string by repeatedly appending or prepending another string
lib/plankton/string/logic-impl.js        267)      * @param {string} word the string to pad
lib/plankton/string/logic-impl.js        268)      * @param {int} length the length, which the result shall have
lib/plankton/string/logic-impl.js        269)      * @param {string} symbol the string, which will be added (multiple times)
lib/plankton/string/logic-impl.js        270)      * @param {boolean} [prepend]; whether to prepend (~true) or append (~false); default: false
lib/plankton/string/logic-impl.js        271)      * @return {string} the padded string
lib/plankton/string/logic-impl.js        272)      * @author fenris
lib/plankton/string/logic-impl.js        273)      */
lib/plankton/string/logic-impl.js        274)     function pad(word, length, symbol, mode) {
lib/plankton/string/logic-impl.js        275)         if (symbol === void 0) { symbol = " "; }
lib/plankton/string/logic-impl.js        276)         if (mode === void 0) { mode = "append"; }
lib/plankton/string/logic-impl.js        277)         switch (mode) {
lib/plankton/string/logic-impl.js        278)             case "prepend": {
lib/plankton/string/logic-impl.js        279)                 // insert symbols only at the beginning
lib/plankton/string/logic-impl.js        280)                 while (word.length < length)
lib/plankton/string/logic-impl.js        281)                     word = symbol + word;
lib/plankton/string/logic-impl.js        282)                 return word.substring(word.length - length);
lib/plankton/string/logic-impl.js        283)                 break;
lib/plankton/string/logic-impl.js        284)             }
lib/plankton/string/logic-impl.js        285)             case "append": {
lib/plankton/string/logic-impl.js        286)                 // insert symbols only at the end
lib/plankton/string/logic-impl.js        287)                 while (word.length < length)
lib/plankton/string/logic-impl.js        288)                     word = word + symbol;
lib/plankton/string/logic-impl.js        289)                 return word.substring(0, length);
lib/plankton/string/logic-impl.js        290)                 break;
lib/plankton/string/logic-impl.js        291)             }
lib/plankton/string/logic-impl.js        292)             case "widen": {
lib/plankton/string/logic-impl.js        293)                 // insert symbols at both sides
lib/plankton/string/logic-impl.js        294)                 var left = (((length - word.length) & 1) === 0);
lib/plankton/string/logic-impl.js        295)                 while (word.length < length) {
lib/plankton/string/logic-impl.js        296)                     word = (left
lib/plankton/string/logic-impl.js        297)                         ? (symbol + word)
lib/plankton/string/logic-impl.js        298)                         : (word + symbol));
lib/plankton/string/logic-impl.js        299)                     left = (!left);
lib/plankton/string/logic-impl.js        300)                 }
lib/plankton/string/logic-impl.js        301)                 return word.substring(0, length);
lib/plankton/string/logic-impl.js        302)                 break;
lib/plankton/string/logic-impl.js        303)             }
lib/plankton/string/logic-impl.js        304)             default: {
lib/plankton/string/logic-impl.js        305)                 var message = ("unhandled mode '" + mode + "'");
lib/plankton/string/logic-impl.js        306)                 console.warn(message);
lib/plankton/string/logic-impl.js        307)                 return word;
lib/plankton/string/logic-impl.js        308)                 break;
lib/plankton/string/logic-impl.js        309)             }
lib/plankton/string/logic-impl.js        310)         }
lib/plankton/string/logic-impl.js        311)     }
lib/plankton/string/logic-impl.js        312)     lib_string.pad = pad;
lib/plankton/string/logic-impl.js        313)     /**
lib/plankton/string/logic-impl.js        314)      * @desc checks if a given string conttains a certain substring
lib/plankton/string/logic-impl.js        315)      * @param {string} string
lib/plankton/string/logic-impl.js        316)      * @param {string} part
lib/plankton/string/logic-impl.js        317)      * @return {boolean}
lib/plankton/string/logic-impl.js        318)      * @author fenris
lib/plankton/string/logic-impl.js        319)      */
lib/plankton/string/logic-impl.js        320)     function contains(chain, part) {
lib/plankton/string/logic-impl.js        321)         if (typeof (chain) !== "string") {
lib/plankton/string/logic-impl.js        322)             return false;
lib/plankton/string/logic-impl.js        323)         }
lib/plankton/string/logic-impl.js        324)         return (chain.indexOf(part) >= 0);
lib/plankton/string/logic-impl.js        325)     }
lib/plankton/string/logic-impl.js        326)     lib_string.contains = contains;
lib/plankton/string/logic-impl.js        327)     /**
lib/plankton/string/logic-impl.js        328)      * @desc checks if a given string starts with a certain substring
lib/plankton/string/logic-impl.js        329)      * @param {string} string
lib/plankton/string/logic-impl.js        330)      * @param {string} part
lib/plankton/string/logic-impl.js        331)      * @return {boolean}
lib/plankton/string/logic-impl.js        332)      * @author fenris
lib/plankton/string/logic-impl.js        333)      */
lib/plankton/string/logic-impl.js        334)     function startsWith(chain, part) {
lib/plankton/string/logic-impl.js        335)         if (typeof (chain) !== "string") {
lib/plankton/string/logic-impl.js        336)             return false;
lib/plankton/string/logic-impl.js        337)         }
lib/plankton/string/logic-impl.js        338)         // return (string.indexOf(part) === 0);
lib/plankton/string/logic-impl.js        339)         return ((function (m, n) {
lib/plankton/string/logic-impl.js        340)             if (n === 0) {
lib/plankton/string/logic-impl.js        341)                 return true;
lib/plankton/string/logic-impl.js        342)             }
lib/plankton/string/logic-impl.js        343)             else {
lib/plankton/string/logic-impl.js        344)                 if (m === 0) {
lib/plankton/string/logic-impl.js        345)                     return false;
lib/plankton/string/logic-impl.js        346)                 }
lib/plankton/string/logic-impl.js        347)                 else {
lib/plankton/string/logic-impl.js        348)                     return ((chain[0] == part[0])
lib/plankton/string/logic-impl.js        349)                         &&
lib/plankton/string/logic-impl.js        350)                             startsWith(chain.substring(1), part.substring(1)));
lib/plankton/string/logic-impl.js        351)                 }
lib/plankton/string/logic-impl.js        352)             }
lib/plankton/string/logic-impl.js        353)         })(chain.length, part.length));
lib/plankton/string/logic-impl.js        354)     }
lib/plankton/string/logic-impl.js        355)     lib_string.startsWith = startsWith;
lib/plankton/string/logic-impl.js        356)     /**
lib/plankton/string/logic-impl.js        357)      * @desc checks if a given string ends with a certain substring
lib/plankton/string/logic-impl.js        358)      * @param {string} string
lib/plankton/string/logic-impl.js        359)      * @param {string} part
lib/plankton/string/logic-impl.js        360)      * @return {boolean}
lib/plankton/string/logic-impl.js        361)      * @author fenris
lib/plankton/string/logic-impl.js        362)      */
lib/plankton/string/logic-impl.js        363)     function endsWith(chain, part) {
lib/plankton/string/logic-impl.js        364)         if (typeof (chain) !== "string") {
lib/plankton/string/logic-impl.js        365)             return false;
lib/plankton/string/logic-impl.js        366)         }
lib/plankton/string/logic-impl.js        367)         // return (string.lastIndexOf(part) === string.length-part.length);
lib/plankton/string/logic-impl.js        368)         return ((function (m, n) {
lib/plankton/string/logic-impl.js        369)             if (n === 0) {
lib/plankton/string/logic-impl.js        370)                 return true;
lib/plankton/string/logic-impl.js        371)             }
lib/plankton/string/logic-impl.js        372)             else {
lib/plankton/string/logic-impl.js        373)                 if (m === 0) {
lib/plankton/string/logic-impl.js        374)                     return false;
lib/plankton/string/logic-impl.js        375)                 }
lib/plankton/string/logic-impl.js        376)                 else {
lib/plankton/string/logic-impl.js        377)                     // console.info(("(" + string[m-1] + " == " + part[n-1] + ")") + " = " + String(string[m-1] == part[n-1]));
lib/plankton/string/logic-impl.js        378)                     return ((chain[m - 1] === part[n - 1])
lib/plankton/string/logic-impl.js        379)                         &&
lib/plankton/string/logic-impl.js        380)                             endsWith(chain.substring(0, m - 1), part.substring(0, n - 1)));
lib/plankton/string/logic-impl.js        381)                 }
lib/plankton/string/logic-impl.js        382)             }
lib/plankton/string/logic-impl.js        383)         })(chain.length, part.length));
lib/plankton/string/logic-impl.js        384)     }
lib/plankton/string/logic-impl.js        385)     lib_string.endsWith = endsWith;
lib/plankton/string/logic-impl.js        386)     /**
lib/plankton/string/logic-impl.js        387)      * @desc count the occourrences of a string in a string
lib/plankton/string/logic-impl.js        388)      * @param string haystack_string the string wich should be examined
lib/plankton/string/logic-impl.js        389)      * @param string needle_string the string which should be counted
lib/plankton/string/logic-impl.js        390)      * @author neuc
lib/plankton/string/logic-impl.js        391)      */
lib/plankton/string/logic-impl.js        392)     function count_occourrences(haystack_string, needle_string, check_escape) {
lib/plankton/string/logic-impl.js        393)         var cnt = 0;
lib/plankton/string/logic-impl.js        394)         var pos = -1;
lib/plankton/string/logic-impl.js        395)         do {
lib/plankton/string/logic-impl.js        396)             pos = haystack_string.indexOf(needle_string, pos + 1);
lib/plankton/string/logic-impl.js        397)             if ((!check_escape) || (haystack_string[pos - 1] != "\\")) {
lib/plankton/string/logic-impl.js        398)                 cnt++;
lib/plankton/string/logic-impl.js        399)             }
lib/plankton/string/logic-impl.js        400)         } while (pos >= 0);
lib/plankton/string/logic-impl.js        401)         return (cnt - 1);
lib/plankton/string/logic-impl.js        402)     }
lib/plankton/string/logic-impl.js        403)     lib_string.count_occourrences = count_occourrences;
lib/plankton/string/logic-impl.js        404)     /**
lib/plankton/string/logic-impl.js        405)      * @desc replaces occurences of "${name}" in a string by the corresponding values of an argument object
lib/plankton/string/logic-impl.js        406)      * @author fenris
lib/plankton/string/logic-impl.js        407)      */
lib/plankton/string/logic-impl.js        408)     function coin(str, args) {
lib/plankton/string/logic-impl.js        409)         Object.keys(args).forEach(function (key) {
lib/plankton/string/logic-impl.js        410)             // old syntax
lib/plankton/string/logic-impl.js        411)             {
lib/plankton/string/logic-impl.js        412)                 var value = args[key];
lib/plankton/string/logic-impl.js        413)                 var regexp_argument = new RegExp("\\${" + key + "}");
lib/plankton/string/logic-impl.js        414)                 str = str.replace(regexp_argument, value);
lib/plankton/string/logic-impl.js        415)             }
lib/plankton/string/logic-impl.js        416)             // new syntax
lib/plankton/string/logic-impl.js        417)             {
lib/plankton/string/logic-impl.js        418)                 var value = args[key];
lib/plankton/string/logic-impl.js        419)                 var regexp_argument = new RegExp("{{" + key + "}}");
lib/plankton/string/logic-impl.js        420)                 str = str.replace(regexp_argument, value);
lib/plankton/string/logic-impl.js        421)             }
lib/plankton/string/logic-impl.js        422)         });
lib/plankton/string/logic-impl.js        423)         return str;
lib/plankton/string/logic-impl.js        424)     }
lib/plankton/string/logic-impl.js        425)     lib_string.coin = coin;
lib/plankton/string/logic-impl.js        426)     /**
lib/plankton/string/logic-impl.js        427)      * @author fenris
lib/plankton/string/logic-impl.js        428)      */
lib/plankton/string/logic-impl.js        429)     lib_string.stance = coin;
lib/plankton/string/logic-impl.js        430)     /**
lib/plankton/string/logic-impl.js        431)      * @author fenris
lib/plankton/string/logic-impl.js        432)      */
lib/plankton/string/logic-impl.js        433)     function url_encode(_a) {
lib/plankton/string/logic-impl.js        434)         var _b = _a === void 0 ? {} : _a, _c = _b["protocol"], protocol = _c === void 0 ? null : _c, _d = _b["host"], host = _d === void 0 ? null : _d, _e = _b["port"], port = _e === void 0 ? null : _e, _f = _b["path"], path = _f === void 0 ? null : _f, _g = _b["arguments"], arguments_ = _g === void 0 ? null : _g;
lib/plankton/string/logic-impl.js        435)         var url = "";
lib/plankton/string/logic-impl.js        436)         // protocol
lib/plankton/string/logic-impl.js        437)         {
lib/plankton/string/logic-impl.js        438)             if (protocol != null) {
lib/plankton/string/logic-impl.js        439)                 url = protocol + ":" + url;
lib/plankton/string/logic-impl.js        440)             }
lib/plankton/string/logic-impl.js        441)         }
lib/plankton/string/logic-impl.js        442)         // host
lib/plankton/string/logic-impl.js        443)         {
lib/plankton/string/logic-impl.js        444)             if (host != null) {
lib/plankton/string/logic-impl.js        445)                 url = url + "//" + host;
lib/plankton/string/logic-impl.js        446)             }
lib/plankton/string/logic-impl.js        447)         }
lib/plankton/string/logic-impl.js        448)         // port
lib/plankton/string/logic-impl.js        449)         {
lib/plankton/string/logic-impl.js        450)             if (port != null) {
lib/plankton/string/logic-impl.js        451)                 url = url + ":" + port.toString();
lib/plankton/string/logic-impl.js        452)             }
lib/plankton/string/logic-impl.js        453)         }
lib/plankton/string/logic-impl.js        454)         // path
lib/plankton/string/logic-impl.js        455)         {
lib/plankton/string/logic-impl.js        456)             if (path != null) {
lib/plankton/string/logic-impl.js        457)                 var path_ = encodeURI(path);
lib/plankton/string/logic-impl.js        458)                 url = "" + url + path_;
lib/plankton/string/logic-impl.js        459)             }
lib/plankton/string/logic-impl.js        460)         }
lib/plankton/string/logic-impl.js        461)         // arguments
lib/plankton/string/logic-impl.js        462)         {
lib/plankton/string/logic-impl.js        463)             if (arguments_ != null) {
lib/plankton/string/logic-impl.js        464)                 var suffix = Object.keys(arguments_).map(function (key) { return key + "=" + arguments_[key]; }).join("&");
lib/plankton/string/logic-impl.js        465)                 var suffix_ = encodeURI(suffix);
lib/plankton/string/logic-impl.js        466)                 url = url + "?" + suffix_;
lib/plankton/string/logic-impl.js        467)             }
lib/plankton/string/logic-impl.js        468)         }
lib/plankton/string/logic-impl.js        469)         return url;
lib/plankton/string/logic-impl.js        470)     }
lib/plankton/string/logic-impl.js        471)     lib_string.url_encode = url_encode;
lib/plankton/string/logic-impl.js        472)     /**
lib/plankton/string/logic-impl.js        473)      * @author fenris
lib/plankton/string/logic-impl.js        474)      */
lib/plankton/string/logic-impl.js        475)     lib_string.make_url = url_encode;
lib/plankton/string/logic-impl.js        476)     /**
lib/plankton/string/logic-impl.js        477)      * @author fenris
lib/plankton/string/logic-impl.js        478)      * @todo arguments
lib/plankton/string/logic-impl.js        479)      */
lib/plankton/string/logic-impl.js        480)     function url_decode(url) {
lib/plankton/string/logic-impl.js        481)         var regexp = new RegExp("^([^:]*)://([^:]*):([^/]*)/(.*)$");
lib/plankton/string/logic-impl.js        482)         var matching = regexp.exec(url);
lib/plankton/string/logic-impl.js        483)         if (matching === null) {
lib/plankton/string/logic-impl.js        484)             return null;
lib/plankton/string/logic-impl.js        485)         }
lib/plankton/string/logic-impl.js        486)         else {
lib/plankton/string/logic-impl.js        487)             var components = {
lib/plankton/string/logic-impl.js        488)                 "protocol": matching[1],
lib/plankton/string/logic-impl.js        489)                 "host": matching[2],
lib/plankton/string/logic-impl.js        490)                 "port": parseInt(matching[3]),
lib/plankton/string/logic-impl.js        491)                 "path": ("/" + matching[4])
lib/plankton/string/logic-impl.js        492)             };
lib/plankton/string/logic-impl.js        493)             return components;
lib/plankton/string/logic-impl.js        494)         }
lib/plankton/string/logic-impl.js        495)     }
lib/plankton/string/logic-impl.js        496)     lib_string.url_decode = url_decode;
lib/plankton/string/logic-impl.js        497)     /**
lib/plankton/string/logic-impl.js        498)      * @author fenris
lib/plankton/string/logic-impl.js        499)      */
lib/plankton/string/logic-impl.js        500)     function cut(str, length, delimiter) {
lib/plankton/string/logic-impl.js        501)         if (delimiter === void 0) { delimiter = "…"; }
lib/plankton/string/logic-impl.js        502)         if (str.length <= length) {
lib/plankton/string/logic-impl.js        503)             return str;
lib/plankton/string/logic-impl.js        504)         }
lib/plankton/string/logic-impl.js        505)         else {
lib/plankton/string/logic-impl.js        506)             return (str.slice(0, length - delimiter.length) + delimiter);
lib/plankton/string/logic-impl.js        507)         }
lib/plankton/string/logic-impl.js        508)     }
lib/plankton/string/logic-impl.js        509)     lib_string.cut = cut;
lib/plankton/string/logic-impl.js        510) })(lib_string || (lib_string = {}));
lib/plankton/string/logic-impl.js        511) /*
lib/plankton/string/logic-impl.js        512) This file is part of »bacterio-plankton:string«.
lib/plankton/string/logic-impl.js        513) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/string/logic-impl.js 514) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/string/logic-impl.js        515) <info@greenscale.de>
lib/plankton/string/logic-impl.js        516) 
lib/plankton/string/logic-impl.js        517) »bacterio-plankton:string« is free software: you can redistribute it and/or modify
lib/plankton/string/logic-impl.js        518) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/string/logic-impl.js        519) the Free Software Foundation, either version 3 of the License, or
lib/plankton/string/logic-impl.js        520) (at your option) any later version.
lib/plankton/string/logic-impl.js        521) 
lib/plankton/string/logic-impl.js        522) »bacterio-plankton:string« is distributed in the hope that it will be useful,
lib/plankton/string/logic-impl.js        523) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/string/logic-impl.js        524) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/string/logic-impl.js        525) GNU Lesser General Public License for more details.
lib/plankton/string/logic-impl.js        526) 
lib/plankton/string/logic-impl.js        527) You should have received a copy of the GNU Lesser General Public License
lib/plankton/string/logic-impl.js        528) along with »bacterio-plankton:string«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/string/logic-impl.js        529)  */
lib/plankton/string/logic-impl.js        530) var lib_string;
lib/plankton/string/logic-impl.js        531) (function (lib_string) {
lib/plankton/string/logic-impl.js        532)     var pattern = /%([-+#0 ]*)([0-9]*)[\.]{0,1}([0-9]*)([\w]{1})/;
lib/plankton/string/logic-impl.js        533)     var gpattern = /%([-+#0 ]*)([0-9]*)[\.]{0,1}([0-9]*)([\w]{1})/g;
lib/plankton/string/logic-impl.js        534)     function split_format(format) {
lib/plankton/string/logic-impl.js        535)         var tmp = format.match(pattern);
lib/plankton/string/logic-impl.js        536)         if (tmp === null)
lib/plankton/string/logic-impl.js        537)             return null;
lib/plankton/string/logic-impl.js        538)         return {
lib/plankton/string/logic-impl.js        539)             'flags': tmp[1].split(""),
lib/plankton/string/logic-impl.js        540)             'width': Number(tmp[2]),
lib/plankton/string/logic-impl.js        541)             'precision': tmp[3] === '' ? null : Number(tmp[3]),
lib/plankton/string/logic-impl.js        542)             'specifier': tmp[4],
lib/plankton/string/logic-impl.js        543)             'string': format
lib/plankton/string/logic-impl.js        544)         };
lib/plankton/string/logic-impl.js        545)     }
lib/plankton/string/logic-impl.js        546)     function make_err(format, arg, should) {
lib/plankton/string/logic-impl.js        547)         return ("[sprintf]" + " " + "argument for '" + format.string + "' has to be '" + should + "' but '" + arg + "' is '" + typeof arg + "'!");
lib/plankton/string/logic-impl.js        548)     }
lib/plankton/string/logic-impl.js        549)     function test_arg(format, arg, should) {
lib/plankton/string/logic-impl.js        550)         if (typeof arg !== should) {
lib/plankton/string/logic-impl.js        551)             console.warn(make_err(format, arg, should));
lib/plankton/string/logic-impl.js        552)             return false;
lib/plankton/string/logic-impl.js        553)         }
lib/plankton/string/logic-impl.js        554)         return true;
lib/plankton/string/logic-impl.js        555)     }
lib/plankton/string/logic-impl.js        556)     function string_fill(str, char, len, left) {
lib/plankton/string/logic-impl.js        557)         while (str.length < len) {
lib/plankton/string/logic-impl.js        558)             if (left) {
lib/plankton/string/logic-impl.js        559)                 str += char;
lib/plankton/string/logic-impl.js        560)             }
lib/plankton/string/logic-impl.js        561)             else {
lib/plankton/string/logic-impl.js        562)                 str = char + str;
lib/plankton/string/logic-impl.js        563)             }
lib/plankton/string/logic-impl.js        564)         }
lib/plankton/string/logic-impl.js        565)         return str;
lib/plankton/string/logic-impl.js        566)     }
lib/plankton/string/logic-impl.js        567)     /**
lib/plankton/string/logic-impl.js        568)      * the known_parameters are used to parse the different identifiers for the welln known syntax:
lib/plankton/string/logic-impl.js        569)      *          flag   width   precision   identifier
lib/plankton/string/logic-impl.js        570)      *      %{[0#+- ]}{[0-9]*}.{[0-9]*}[fFdiueEgGsoxXaAsn]
lib/plankton/string/logic-impl.js        571)      * flags:
lib/plankton/string/logic-impl.js        572)      * 0    -   fill with '0' instead of ' ' if the string length < width
lib/plankton/string/logic-impl.js        573)      * #    -   not implemented
lib/plankton/string/logic-impl.js        574)      * -    -   left-justified -> fill on the right side to reach width
lib/plankton/string/logic-impl.js        575)      * +    -   force using '+' on positive numbers
lib/plankton/string/logic-impl.js        576)      * ' '  -   add a single space before positive numbers
lib/plankton/string/logic-impl.js        577)      *
lib/plankton/string/logic-impl.js        578)      * identifiers
lib/plankton/string/logic-impl.js        579)      * %f, %F       -   interpret given number as float, width: the minimal total width (fill with ' ' or '0' if the
lib/plankton/string/logic-impl.js        580)      *                  resulting string is too short, precision: cut more then given decimal places
lib/plankton/string/logic-impl.js        581)      * %d, %i, %u   -   interpret number as integer, decimal places will be cut. width: like float, precision:
lib/plankton/string/logic-impl.js        582)      *                  fill with '0' on right side until length given in precision is reached
lib/plankton/string/logic-impl.js        583)      * %e           -   interpret as float and write as scientifical number, width & precision like in float
lib/plankton/string/logic-impl.js        584)      * %E           -   same es %e but uppercase 'E'
lib/plankton/string/logic-impl.js        585)      * %g           -   use the shortest string of %f or %e
lib/plankton/string/logic-impl.js        586)      * %G           -   use the shortest string of %E or %E
lib/plankton/string/logic-impl.js        587)      * %s           -   simply print a string
lib/plankton/string/logic-impl.js        588)      * %o           -   print the given number in octal notation
lib/plankton/string/logic-impl.js        589)      * %x           -   print the given number in hex notation
lib/plankton/string/logic-impl.js        590)      * %X           -   same as %x but with uppercase characters
lib/plankton/string/logic-impl.js        591)      * %a           -   alias to %x
lib/plankton/string/logic-impl.js        592)      * %A           -   alias to %X
lib/plankton/string/logic-impl.js        593)      * %n           -   just print nothing
lib/plankton/string/logic-impl.js        594)      * @type {{}}
lib/plankton/string/logic-impl.js        595)      */
lib/plankton/string/logic-impl.js        596)     var known_params = {};
lib/plankton/string/logic-impl.js        597)     known_params["f"] = function (format, arg) {
lib/plankton/string/logic-impl.js        598)         if (!test_arg(format, arg, "number"))
lib/plankton/string/logic-impl.js        599)             return "Ø";
lib/plankton/string/logic-impl.js        600)         var tmp = Math.abs(arg);
lib/plankton/string/logic-impl.js        601)         var sign = (arg < 0) ? -1 : 1;
lib/plankton/string/logic-impl.js        602)         var tmp_result = null;
lib/plankton/string/logic-impl.js        603)         if (format.precision !== null) {
lib/plankton/string/logic-impl.js        604)             tmp = Math.floor(Math.pow(10, format.precision) * tmp) / Math.pow(10, format.precision);
lib/plankton/string/logic-impl.js        605)             var tmp_ = (tmp * sign).toString().split(".");
lib/plankton/string/logic-impl.js        606)             if (tmp_.length === 1)
lib/plankton/string/logic-impl.js        607)                 tmp_.push("");
lib/plankton/string/logic-impl.js        608)             tmp_[1] = string_fill(tmp_[1], "0", format.precision, true);
lib/plankton/string/logic-impl.js        609)             tmp_result = tmp_.join(".");
lib/plankton/string/logic-impl.js        610)         }
lib/plankton/string/logic-impl.js        611)         else {
lib/plankton/string/logic-impl.js        612)             tmp_result = (sign * tmp).toString();
lib/plankton/string/logic-impl.js        613)         }
lib/plankton/string/logic-impl.js        614)         if ((format.flags.indexOf(" ") >= 0) && (arg >= 0)) {
lib/plankton/string/logic-impl.js        615)             tmp_result = " " + tmp;
lib/plankton/string/logic-impl.js        616)         }
lib/plankton/string/logic-impl.js        617)         else if ((format.flags.indexOf("+") >= 0) && (arg >= 0)) {
lib/plankton/string/logic-impl.js        618)             tmp_result = "+" + tmp;
lib/plankton/string/logic-impl.js        619)         }
lib/plankton/string/logic-impl.js        620)         tmp_result = string_fill(tmp, (format.flags.indexOf("0") >= 0) ? "0" : " ", format.width, (format.flags.indexOf("-") >= 0));
lib/plankton/string/logic-impl.js        621)         return tmp_result;
lib/plankton/string/logic-impl.js        622)     };
lib/plankton/string/logic-impl.js        623)     known_params["F"] = known_params["f"];
lib/plankton/string/logic-impl.js        624)     known_params["d"] = function (format, arg) {
lib/plankton/string/logic-impl.js        625)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        626)             return 'Ø';
lib/plankton/string/logic-impl.js        627)         var tmp = (((arg < 0 && format.specifier !== 'u') ? -1 : 1) * Math.floor(Math.abs(arg))).toString();
lib/plankton/string/logic-impl.js        628)         if ((format.specifier === 'd' || format.specifier === 'i') && format.flags.indexOf(' ') >= 0 && arg >= 0) {
lib/plankton/string/logic-impl.js        629)             tmp = ' ' + tmp;
lib/plankton/string/logic-impl.js        630)         }
lib/plankton/string/logic-impl.js        631)         else if ((format.specifier === 'd' || format.specifier === 'i') && format.flags.indexOf('+') >= 0 && arg >= 0) {
lib/plankton/string/logic-impl.js        632)             tmp = '+' + tmp;
lib/plankton/string/logic-impl.js        633)         }
lib/plankton/string/logic-impl.js        634)         tmp = string_fill(tmp, format.flags.indexOf('0') >= 0 ? '0' : ' ', format.width, format.flags.indexOf('-') >= 0);
lib/plankton/string/logic-impl.js        635)         tmp = string_fill(tmp, '0', format.precision === null ? 0 : format.precision, false);
lib/plankton/string/logic-impl.js        636)         return tmp;
lib/plankton/string/logic-impl.js        637)     };
lib/plankton/string/logic-impl.js        638)     known_params["i"] = known_params["d"];
lib/plankton/string/logic-impl.js        639)     known_params["u"] = known_params["d"];
lib/plankton/string/logic-impl.js        640)     known_params["e"] = function (format, arg) {
lib/plankton/string/logic-impl.js        641)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        642)             return 'Ø';
lib/plankton/string/logic-impl.js        643)         var tmp = arg.toExponential(format.precision === null ? undefined : format.precision).toString();
lib/plankton/string/logic-impl.js        644)         if (format.flags.indexOf(' ') >= 0 && arg >= 0) {
lib/plankton/string/logic-impl.js        645)             tmp = ' ' + tmp;
lib/plankton/string/logic-impl.js        646)         }
lib/plankton/string/logic-impl.js        647)         else if (format.flags.indexOf('+') >= 0 && arg >= 0) {
lib/plankton/string/logic-impl.js        648)             tmp = '+' + tmp;
lib/plankton/string/logic-impl.js        649)         }
lib/plankton/string/logic-impl.js        650)         tmp = string_fill(tmp, format.flags.indexOf('0') >= 0 ? '0' : ' ', format.width, format.flags.indexOf('-') >= 0);
lib/plankton/string/logic-impl.js        651)         return tmp;
lib/plankton/string/logic-impl.js        652)     };
lib/plankton/string/logic-impl.js        653)     known_params["E"] = function (format, arg) {
lib/plankton/string/logic-impl.js        654)         return known_params["e"](format, arg).toUpperCase();
lib/plankton/string/logic-impl.js        655)     };
lib/plankton/string/logic-impl.js        656)     known_params["g"] = function (format, arg) {
lib/plankton/string/logic-impl.js        657)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        658)             return 'Ø';
lib/plankton/string/logic-impl.js        659)         var tmpf = known_params["f"](format, arg);
lib/plankton/string/logic-impl.js        660)         var tmpe = known_params["e"](format, arg);
lib/plankton/string/logic-impl.js        661)         if (tmpf.length < tmpe.length) {
lib/plankton/string/logic-impl.js        662)             return tmpf;
lib/plankton/string/logic-impl.js        663)         }
lib/plankton/string/logic-impl.js        664)         else {
lib/plankton/string/logic-impl.js        665)             return tmpe;
lib/plankton/string/logic-impl.js        666)         }
lib/plankton/string/logic-impl.js        667)     };
lib/plankton/string/logic-impl.js        668)     known_params["G"] = function (format, arg) {
lib/plankton/string/logic-impl.js        669)         return known_params["g"](format, arg).toUpperCase();
lib/plankton/string/logic-impl.js        670)     };
lib/plankton/string/logic-impl.js        671)     known_params["s"] = function (format, arg) {
lib/plankton/string/logic-impl.js        672)         if (!test_arg(format, arg, 'string'))
lib/plankton/string/logic-impl.js        673)             return 'o.O';
lib/plankton/string/logic-impl.js        674)         var tmp = format.precision !== null ? arg.substr(0, format.precision) : arg;
lib/plankton/string/logic-impl.js        675)         tmp = string_fill(tmp, format.flags.indexOf('0') >= 0 ? '0' : ' ', format.width, format.flags.indexOf('-') >= 0);
lib/plankton/string/logic-impl.js        676)         return tmp;
lib/plankton/string/logic-impl.js        677)     };
lib/plankton/string/logic-impl.js        678)     known_params["o"] = function (format, arg) {
lib/plankton/string/logic-impl.js        679)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        680)             return 'Ø';
lib/plankton/string/logic-impl.js        681)         var tmp = Math.floor(Math.round(Math.abs(arg))) * ((arg < 0) ? -1 : 1);
lib/plankton/string/logic-impl.js        682)         return known_params["s"](format, tmp.toString(8));
lib/plankton/string/logic-impl.js        683)     };
lib/plankton/string/logic-impl.js        684)     known_params["x"] = function (format, arg) {
lib/plankton/string/logic-impl.js        685)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        686)             return 'Ø';
lib/plankton/string/logic-impl.js        687)         var tmp = Math.floor(Math.round(Math.abs(arg))) * ((arg < 0) ? -1 : 1);
lib/plankton/string/logic-impl.js        688)         return known_params["s"](format, tmp.toString(16));
lib/plankton/string/logic-impl.js        689)     };
lib/plankton/string/logic-impl.js        690)     known_params["a"] = known_params["x"];
lib/plankton/string/logic-impl.js        691)     known_params["X"] = function (format, arg) {
lib/plankton/string/logic-impl.js        692)         if (!test_arg(format, arg, 'number'))
lib/plankton/string/logic-impl.js        693)             return 'Ø';
lib/plankton/string/logic-impl.js        694)         return known_params["x"](format, arg).toUpperCase();
lib/plankton/string/logic-impl.js        695)     };
lib/plankton/string/logic-impl.js        696)     known_params["A"] = known_params["X"];
lib/plankton/string/logic-impl.js        697)     known_params["c"] = function (format, arg) {
lib/plankton/string/logic-impl.js        698)         var tmp = "";
lib/plankton/string/logic-impl.js        699)         if (typeof arg === "number") {
lib/plankton/string/logic-impl.js        700)             tmp = String.fromCharCode(arg);
lib/plankton/string/logic-impl.js        701)         }
lib/plankton/string/logic-impl.js        702)         else if ((typeof arg === "string") && (arg.length === 1)) {
lib/plankton/string/logic-impl.js        703)             tmp = arg[0];
lib/plankton/string/logic-impl.js        704)         }
lib/plankton/string/logic-impl.js        705)         else {
lib/plankton/string/logic-impl.js        706)             console.warn(make_err(format, arg, "number|string") + " and if string it needs to have the length of 1!");
lib/plankton/string/logic-impl.js        707)         }
lib/plankton/string/logic-impl.js        708)         return known_params["s"](format, tmp);
lib/plankton/string/logic-impl.js        709)     };
lib/plankton/string/logic-impl.js        710)     known_params["n"] = function () {
lib/plankton/string/logic-impl.js        711)         return "";
lib/plankton/string/logic-impl.js        712)     };
lib/plankton/string/logic-impl.js        713)     var decompose = function (chain, regexp) {
lib/plankton/string/logic-impl.js        714)         var result = regexp.exec(chain);
lib/plankton/string/logic-impl.js        715)         if (result == null) {
lib/plankton/string/logic-impl.js        716)             return null;
lib/plankton/string/logic-impl.js        717)         }
lib/plankton/string/logic-impl.js        718)         else {
lib/plankton/string/logic-impl.js        719)             var front = chain.substring(0, result.index);
lib/plankton/string/logic-impl.js        720)             var back = chain.substring(result.index + result[0].length);
lib/plankton/string/logic-impl.js        721)             return { "front": front, "match": result[0], "back": back };
lib/plankton/string/logic-impl.js        722)         }
lib/plankton/string/logic-impl.js        723)     };
lib/plankton/string/logic-impl.js        724)     /**
lib/plankton/string/logic-impl.js        725)      * an implementation of c sprintf
lib/plankton/string/logic-impl.js        726)      * @param {string} string format string
lib/plankton/string/logic-impl.js        727)      * @param {array} args arguments which should be filled into
lib/plankton/string/logic-impl.js        728)      * @returns {string}
lib/plankton/string/logic-impl.js        729)      */
lib/plankton/string/logic-impl.js        730)     lib_string.sprintf = function (input, args, original) {
lib/plankton/string/logic-impl.js        731)         if (args === void 0) { args = []; }
lib/plankton/string/logic-impl.js        732)         if (original === void 0) { original = null; }
lib/plankton/string/logic-impl.js        733)         if (original == null)
lib/plankton/string/logic-impl.js        734)             original = input;
lib/plankton/string/logic-impl.js        735)         var components = decompose(input, pattern);
lib/plankton/string/logic-impl.js        736)         if (components == null) {
lib/plankton/string/logic-impl.js        737)             if (args.length > 0) {
lib/plankton/string/logic-impl.js        738)                 console.warn("[sprintf] superfluous arguments while formatting '" + original + "': ", args);
lib/plankton/string/logic-impl.js        739)             }
lib/plankton/string/logic-impl.js        740)             return input;
lib/plankton/string/logic-impl.js        741)         }
lib/plankton/string/logic-impl.js        742)         else {
lib/plankton/string/logic-impl.js        743)             var arg;
lib/plankton/string/logic-impl.js        744)             var rest;
lib/plankton/string/logic-impl.js        745)             if (args.length > 0) {
lib/plankton/string/logic-impl.js        746)                 arg = args[0];
lib/plankton/string/logic-impl.js        747)                 rest = args.slice(1);
lib/plankton/string/logic-impl.js        748)             }
lib/plankton/string/logic-impl.js        749)             else {
lib/plankton/string/logic-impl.js        750)                 console.warn("[sprintf] out of arguments while formatting '" + original + "'");
lib/plankton/string/logic-impl.js        751)                 arg = null;
lib/plankton/string/logic-impl.js        752)                 rest = [];
lib/plankton/string/logic-impl.js        753)                 return input;
lib/plankton/string/logic-impl.js        754)             }
lib/plankton/string/logic-impl.js        755)             var fmt = split_format(components["match"]);
lib/plankton/string/logic-impl.js        756)             return (components["front"]
lib/plankton/string/logic-impl.js        757)                 + known_params[fmt.specifier](fmt, arg)
lib/plankton/string/logic-impl.js        758)                 + lib_string.sprintf(components["back"], rest, original));
lib/plankton/string/logic-impl.js        759)         }
lib/plankton/string/logic-impl.js        760)     };
lib/plankton/string/logic-impl.js        761)     /**
lib/plankton/string/logic-impl.js        762)      * an implementation of c printf
lib/plankton/string/logic-impl.js        763)      * @param {string} string format string
lib/plankton/string/logic-impl.js        764)      * @param {array} args arguments which should be filled into
lib/plankton/string/logic-impl.js        765)      * @returns {string}
lib/plankton/string/logic-impl.js        766)      */
lib/plankton/string/logic-impl.js        767)     function printf(format, args) {
lib/plankton/string/logic-impl.js        768)         console.log(lib_string.sprintf(format, args));
lib/plankton/string/logic-impl.js        769)     }
lib/plankton/string/logic-impl.js        770)     lib_string.printf = printf;
lib/plankton/string/logic-impl.js        771) })(lib_string || (lib_string = {}));
lib/plankton/string/logic-impl.js        772) var sprintf = lib_string.sprintf;
lib/plankton/string/logic-impl.js        773) var printf = lib_string.printf;
lib/plankton/string/logic-impl.js        774) /*
lib/plankton/string/logic-impl.js        775) This file is part of »bacterio-plankton:string«.
lib/plankton/string/logic-impl.js        776) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/string/logic-impl.js 777) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'