UNPKG

@chezearth/string

Version:

This is a temporary package until I can open a pull request on the original. string contains methods that aren't included in the vanilla JavaScript string such as escaping html, decoding html entities, stripping tags, etc.

1,189 lines (1,035 loc) 39.9 kB
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.S = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ function count(self, substr) { var count = 0 var pos = self.indexOf(substr) while (pos >= 0) { count += 1 pos = self.indexOf(substr, pos + 1) } return count } module.exports = count },{}],2:[function(require,module,exports){ function splitLeft(self, sep, maxSplit, limit) { if (typeof maxSplit === 'undefined') { var maxSplit = -1; } var splitResult = self.split(sep); var splitPart1 = splitResult.slice(0, maxSplit); var splitPart2 = splitResult.slice(maxSplit); if (splitPart2.length === 0) { splitResult = splitPart1; } else { splitResult = splitPart1.concat(splitPart2.join(sep)); } if (typeof limit === 'undefined') { return splitResult; } else if (limit < 0) { return splitResult.slice(limit); } else { return splitResult.slice(0, limit); } } module.exports = splitLeft; },{}],3:[function(require,module,exports){ function splitRight(self, sep, maxSplit, limit) { if (typeof maxSplit === 'undefined') { var maxSplit = -1; } if (typeof limit === 'undefined') { var limit = 0; } var splitResult = [self]; for (var i = self.length-1; i >= 0; i--) { if ( splitResult[0].slice(i).indexOf(sep) === 0 && (splitResult.length <= maxSplit || maxSplit === -1) ) { splitResult.splice(1, 0, splitResult[0].slice(i+sep.length)); // insert splitResult[0] = splitResult[0].slice(0, i) } } if (limit >= 0) { return splitResult.slice(-limit); } else { return splitResult.slice(0, -limit); } } module.exports = splitRight; },{}],4:[function(require,module,exports){ /* string.js - Copyright (C) 2012-2014, JP Richardson <jprichardson@gmail.com> */ !(function() { "use strict"; var VERSION = '3.3.3'; var ENTITIES = {}; // from http://semplicewebsites.com/removing-accents-javascript var latin_map={"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","ẞ":"SS","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ß":"ss","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x"}; //****************************************************************************** // Added an initialize function which is essentially the code from the S // constructor. Now, the S constructor calls this and a new method named // setValue calls it as well. The setValue function allows constructors for // modules that extend string.js to set the initial value of an object without // knowing the internal workings of string.js. // // Also, all methods which return a new S object now call: // // return new this.constructor(s); // // instead of: // // return new S(s); // // This allows extended objects to keep their proper instanceOf and constructor. //****************************************************************************** function initialize (object, s) { if (s !== null && s !== undefined) { if (typeof s === 'string') object.s = s; else object.s = s.toString(); } else { object.s = s; //null or undefined } object.orig = s; //original object, currently only used by toCSV() and toBoolean() if (s !== null && s !== undefined) { if (object.__defineGetter__) { object.__defineGetter__('length', function() { return object.s.length; }) } else { object.length = s.length; } } else { object.length = -1; } } function S(s) { initialize(this, s); } var __nsp = String.prototype; var __sp = S.prototype = { between: function(left, right) { var s = this.s; var startPos = s.indexOf(left); var endPos = s.indexOf(right, startPos + left.length); if (endPos == -1 && right != null) return new this.constructor('') else if (endPos == -1 && right == null) return new this.constructor(s.substring(startPos + left.length)) else return new this.constructor(s.slice(startPos + left.length, endPos)); }, //# modified slightly from https://github.com/epeli/underscore.string camelize: function() { var s = this.trim().s.replace(/(\-|_|\s)+(.)?/g, function(mathc, sep, c) { return (c ? c.toUpperCase() : ''); }); return new this.constructor(s); }, capitalize: function() { return new this.constructor(this.s.substr(0, 1).toUpperCase() + this.s.substring(1).toLowerCase()); }, charAt: function(index) { return this.s.charAt(index); }, chompLeft: function(prefix) { var s = this.s; if (s.indexOf(prefix) === 0) { s = s.slice(prefix.length); return new this.constructor(s); } else { return this; } }, chompRight: function(suffix) { if (this.endsWith(suffix)) { var s = this.s; s = s.slice(0, s.length - suffix.length); return new this.constructor(s); } else { return this; } }, //#thanks Google collapseWhitespace: function() { var s = this.s.replace(/[\s\xa0]+/g, ' ').replace(/^\s+|\s+$/g, ''); return new this.constructor(s); }, contains: function(ss) { return this.s.indexOf(ss) >= 0; }, count: function(ss) { return require('./_count')(this.s, ss) }, //#modified from https://github.com/epeli/underscore.string dasherize: function() { var s = this.trim().s.replace(/[_\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase(); return new this.constructor(s); }, equalsIgnoreCase: function(prefix) { var s = this.s; return s.toLowerCase() == prefix.toLowerCase() }, latinise: function() { var s = this.replace(/[^A-Za-z0-9\[\] ]/g, function(x) { return latin_map[x] || x; }); return new this.constructor(s); }, decodeHtmlEntities: function() { //https://github.com/substack/node-ent/blob/master/index.js var s = this.s; s = s.replace(/&#(\d+);?/g, function (_, code) { return String.fromCharCode(code); }) .replace(/&#[xX]([A-Fa-f0-9]+);?/g, function (_, hex) { return String.fromCharCode(parseInt(hex, 16)); }) .replace(/&([^;\W]+;?)/g, function (m, e) { var ee = e.replace(/;$/, ''); var target = ENTITIES[e] || (e.match(/;$/) && ENTITIES[ee]); if (typeof target === 'number') { return String.fromCharCode(target); } else if (typeof target === 'string') { return target; } else { return m; } }) return new this.constructor(s); }, endsWith: function() { var suffixes = Array.prototype.slice.call(arguments, 0); for (var i = 0; i < suffixes.length; ++i) { var l = this.s.length - suffixes[i].length; if (l >= 0 && this.s.indexOf(suffixes[i], l) === l) return true; } return false; }, escapeHTML: function() { //from underscore.string return new this.constructor(this.s.replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; })); }, ensureLeft: function(prefix) { var s = this.s; if (s.indexOf(prefix) === 0) { return this; } else { return new this.constructor(prefix + s); } }, ensureRight: function(suffix) { var s = this.s; if (this.endsWith(suffix)) { return this; } else { return new this.constructor(s + suffix); } }, humanize: function() { //modified from underscore.string if (this.s === null || this.s === undefined) return new this.constructor('') var s = this.underscore().replace(/_id$/,'').replace(/_/g, ' ').trim().capitalize() return new this.constructor(s) }, isAlpha: function() { return !/[^a-z\xDF-\xFF]|^$/.test(this.s.toLowerCase()); }, isAlphaNumeric: function() { return !/[^0-9a-z\xDF-\xFF]/.test(this.s.toLowerCase()); }, isEmpty: function() { return this.s === null || this.s === undefined ? true : /^[\s\xa0]*$/.test(this.s); }, isLower: function() { return this.isAlpha() && this.s.toLowerCase() === this.s; }, isNumeric: function() { return !/[^0-9]/.test(this.s); }, isUpper: function() { return this.isAlpha() && this.s.toUpperCase() === this.s; }, left: function(N) { if (N >= 0) { var s = this.s.substr(0, N); return new this.constructor(s); } else { return this.right(-N); } }, lines: function() { //convert windows newlines to unix newlines then convert to an Array of lines return this.replaceAll('\r\n', '\n').s.split('\n'); }, pad: function(len, ch) { //https://github.com/component/pad if (ch == null) ch = ' '; if (this.s.length >= len) return new this.constructor(this.s); len = len - this.s.length; var left = Array(Math.ceil(len / 2) + 1).join(ch); var right = Array(Math.floor(len / 2) + 1).join(ch); return new this.constructor(left + this.s + right); }, padLeft: function(len, ch) { //https://github.com/component/pad if (ch == null) ch = ' '; if (this.s.length >= len) return new this.constructor(this.s); return new this.constructor(Array(len - this.s.length + 1).join(ch) + this.s); }, padRight: function(len, ch) { //https://github.com/component/pad if (ch == null) ch = ' '; if (this.s.length >= len) return new this.constructor(this.s); return new this.constructor(this.s + Array(len - this.s.length + 1).join(ch)); }, parseCSV: function(delimiter, qualifier, escape, lineDelimiter) { //try to parse no matter what delimiter = delimiter || ','; escape = escape || '\\' if (typeof qualifier == 'undefined') qualifier = '"'; var i = 0, fieldBuffer = [], fields = [], len = this.s.length, inField = false, inUnqualifiedString = false, self = this; var ca = function(i){return self.s.charAt(i)}; if (typeof lineDelimiter !== 'undefined') var rows = []; if (!qualifier) inField = true; while (i < len) { var current = ca(i); switch (current) { case escape: //fix for issues #32 and #35 if (inField && ((escape !== qualifier) || ca(i+1) === qualifier)) { i += 1; fieldBuffer.push(ca(i)); break; } if (escape !== qualifier) break; case qualifier: inField = !inField; break; case delimiter: if(inUnqualifiedString) { inField=false; inUnqualifiedString=false; } if (inField && qualifier) fieldBuffer.push(current); else { fields.push(fieldBuffer.join('')) fieldBuffer.length = 0; } break; case lineDelimiter: if(inUnqualifiedString) { inField=false; inUnqualifiedString=false; fields.push(fieldBuffer.join('')) rows.push(fields); fields = []; fieldBuffer.length = 0; } else if (inField) { fieldBuffer.push(current); } else { if (rows) { fields.push(fieldBuffer.join('')) rows.push(fields); fields = []; fieldBuffer.length = 0; } } break; case ' ': if (inField) fieldBuffer.push(current); break; default: if (inField) fieldBuffer.push(current); else if(current!==qualifier) { fieldBuffer.push(current); inField=true; inUnqualifiedString=true; } break; } i += 1; } fields.push(fieldBuffer.join('')); if (rows) { rows.push(fields); return rows; } return fields; }, replaceAll: function(ss, r) { //var s = this.s.replace(new RegExp(ss, 'g'), r); var s = this.s.split(ss).join(r) return new this.constructor(s); }, splitLeft: function(sep, maxSplit, limit) { return require('./_splitLeft')(this.s, sep, maxSplit, limit) }, splitRight: function(sep, maxSplit, limit) { return require('./_splitRight')(this.s, sep, maxSplit, limit) }, strip: function() { var ss = this.s; for(var i= 0, n=arguments.length; i<n; i++) { ss = ss.split(arguments[i]).join(''); } return new this.constructor(ss); }, stripLeft: function (chars) { var regex; var pattern; var ss = ensureString(this.s); if (chars === undefined) { pattern = /^\s+/g; } else { regex = escapeRegExp(chars); pattern = new RegExp("^[" + regex + "]+", "g"); } return new this.constructor(ss.replace(pattern, "")); }, stripRight: function (chars) { var regex; var pattern; var ss = ensureString(this.s); if (chars === undefined) { pattern = /\s+$/g; } else { regex = escapeRegExp(chars); pattern = new RegExp("[" + regex + "]+$", "g"); } return new this.constructor(ss.replace(pattern, "")); }, right: function(N) { if (N >= 0) { var s = this.s.substr(this.s.length - N, N); return new this.constructor(s); } else { return this.left(-N); } }, setValue: function (s) { initialize(this, s); return this; }, slugify: function() { var sl = (new S(new S(this.s).latinise().s.replace(/[^\w\s-]/g, '').toLowerCase())).dasherize().s; if (sl.charAt(0) === '-') sl = sl.substr(1); return new this.constructor(sl); }, startsWith: function() { var prefixes = Array.prototype.slice.call(arguments, 0); for (var i = 0; i < prefixes.length; ++i) { if (this.s.lastIndexOf(prefixes[i], 0) === 0) return true; } return false; }, stripPunctuation: function() { //return new this.constructor(this.s.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"")); return new this.constructor(this.s.replace(/[^\w\s]|_/g, "").replace(/\s+/g, " ")); }, stripTags: function() { //from sugar.js var s = this.s, args = arguments.length > 0 ? arguments : ['']; multiArgs(args, function(tag) { s = s.replace(RegExp('<\/?' + tag + '[^<>]*>', 'gi'), ''); }); return new this.constructor(s); }, template: function(values, opening, closing) { var s = this.s var opening = opening || Export.TMPL_OPEN var closing = closing || Export.TMPL_CLOSE var open = opening.replace(/[-[\]()*\s]/g, "\\$&").replace(/\$/g, '\\$') var close = closing.replace(/[-[\]()*\s]/g, "\\$&").replace(/\$/g, '\\$') var r = new RegExp(open + '(.+?)' + close, 'g') //, r = /\{\{(.+?)\}\}/g var matches = s.match(r) || []; matches.forEach(function(match) { var key = match.substring(opening.length, match.length - closing.length).trim();//chop {{ and }} var value = typeof values[key] == 'undefined' ? '' : values[key]; s = s.replace(match, value); }); return new this.constructor(s); }, times: function(n) { return new this.constructor(new Array(n + 1).join(this.s)); }, titleCase: function() { var s = this.s; if (s) { s = s.replace(/(^[a-z]| [a-z]|-[a-z]|_[a-z])/g, function($1){ return $1.toUpperCase(); } ); } return new this.constructor(s); }, toBoolean: function() { if (typeof this.orig === 'string') { var s = this.s.toLowerCase(); return s === 'true' || s === 'yes' || s === 'on' || s === '1'; } else return this.orig === true || this.orig === 1; }, toFloat: function(precision) { var num = parseFloat(this.s) if (precision) return parseFloat(num.toFixed(precision)) else return num }, toInt: function() { //thanks Google // If the string starts with '0x' or '-0x', parse as hex. return /^\s*-?0x/i.test(this.s) ? parseInt(this.s, 16) : parseInt(this.s, 10) }, trim: function() { var s; if (typeof __nsp.trim === 'undefined') s = this.s.replace(/(^\s*|\s*$)/g, '') else s = this.s.trim() return new this.constructor(s); }, trimLeft: function() { var s; if (__nsp.trimLeft) s = this.s.trimLeft(); else s = this.s.replace(/(^\s*)/g, ''); return new this.constructor(s); }, trimRight: function() { var s; if (__nsp.trimRight) s = this.s.trimRight(); else s = this.s.replace(/\s+$/, ''); return new this.constructor(s); }, truncate: function(length, pruneStr) { //from underscore.string, author: github.com/rwz var str = this.s; length = ~~length; pruneStr = pruneStr || '...'; if (str.length <= length) return new this.constructor(str); var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; }, template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA' if (template.slice(template.length-2).match(/\w\w/)) template = template.replace(/\s*\S+$/, ''); else template = new S(template.slice(0, template.length-1)).trimRight().s; return (template+pruneStr).length > str.length ? new S(str) : new S(str.slice(0, template.length)+pruneStr); }, toCSV: function() { var delim = ',', qualifier = '"', escape = '\\', encloseNumbers = true, keys = false; var dataArray = []; function hasVal(it) { return it !== null && it !== ''; } if (typeof arguments[0] === 'object') { delim = arguments[0].delimiter || delim; delim = arguments[0].separator || delim; qualifier = arguments[0].qualifier || qualifier; encloseNumbers = !!arguments[0].encloseNumbers; escape = arguments[0].escape || escape; keys = !!arguments[0].keys; } else if (typeof arguments[0] === 'string') { delim = arguments[0]; } if (typeof arguments[1] === 'string') qualifier = arguments[1]; if (arguments[1] === null) qualifier = null; if (this.orig instanceof Array) dataArray = this.orig; else { //object for (var key in this.orig) if (this.orig.hasOwnProperty(key)) if (keys) dataArray.push(key); else dataArray.push(this.orig[key]); } var rep = escape + qualifier; var buildString = []; for (var i = 0; i < dataArray.length; ++i) { var shouldQualify = hasVal(qualifier) if (typeof dataArray[i] == 'number') shouldQualify &= encloseNumbers; if (shouldQualify) buildString.push(qualifier); if (dataArray[i] !== null && dataArray[i] !== undefined) { var d = new S(dataArray[i]).replaceAll(qualifier, rep).s; buildString.push(d); } else buildString.push('') if (shouldQualify) buildString.push(qualifier); if (delim) buildString.push(delim); } //chop last delim //console.log(buildString.length) buildString.length = buildString.length - 1; return new this.constructor(buildString.join('')); }, toString: function() { return this.s; }, //#modified from https://github.com/epeli/underscore.string underscore: function() { var s = this.trim().s.replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/([A-Z\d]+)([A-Z][a-z])/g,'$1_$2').replace(/[-\s]+/g, '_').toLowerCase(); return new this.constructor(s); }, unescapeHTML: function() { //from underscore.string return new this.constructor(this.s.replace(/\&([^;]+);/g, function(entity, entityCode){ var match; if (entityCode in escapeChars) { return escapeChars[entityCode]; } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { return String.fromCharCode(parseInt(match[1], 16)); } else if (match = entityCode.match(/^#(\d+)$/)) { return String.fromCharCode(~~match[1]); } else { return entity; } })); }, valueOf: function() { return this.s.valueOf(); }, //#Added a New Function called wrapHTML. wrapHTML: function (tagName, tagAttrs) { var s = this.s, el = (tagName == null) ? 'span' : tagName, elAttr = '', wrapped = ''; if(typeof tagAttrs == 'object') for(var prop in tagAttrs) elAttr += ' ' + prop + '="' +(new this.constructor(tagAttrs[prop])).escapeHTML() + '"'; s = wrapped.concat('<', el, elAttr, '>', this, '</', el, '>'); return new this.constructor(s); } } var methodsAdded = []; function extendPrototype() { for (var name in __sp) { (function(name){ var func = __sp[name]; if (!__nsp.hasOwnProperty(name)) { methodsAdded.push(name); __nsp[name] = function() { String.prototype.s = this; return func.apply(this, arguments); } } })(name); } } function restorePrototype() { for (var i = 0; i < methodsAdded.length; ++i) delete String.prototype[methodsAdded[i]]; methodsAdded.length = 0; } /************************************* /* Attach Native JavaScript String Properties /*************************************/ var nativeProperties = getNativeStringProperties(); for (var name in nativeProperties) { (function(name) { var stringProp = __nsp[name]; if (typeof stringProp == 'function') { //console.log(stringProp) if (!__sp[name]) { if (nativeProperties[name] === 'string') { __sp[name] = function() { //console.log(name) return new this.constructor(stringProp.apply(this, arguments)); } } else { __sp[name] = stringProp; } } } })(name); } /************************************* /* Function Aliases /*************************************/ __sp.repeat = __sp.times; __sp.include = __sp.contains; __sp.toInteger = __sp.toInt; __sp.toBool = __sp.toBoolean; __sp.decodeHTMLEntities = __sp.decodeHtmlEntities //ensure consistent casing scheme of 'HTML' //****************************************************************************** // Set the constructor. Without this, string.js objects are instances of // Object instead of S. //****************************************************************************** __sp.constructor = S; /************************************* /* Private Functions /*************************************/ function getNativeStringProperties() { var names = getNativeStringPropertyNames(); var retObj = {}; for (var i = 0; i < names.length; ++i) { var name = names[i]; if (name === 'to' || name === 'toEnd') continue; // get rid of the shelljs prototype messup var func = __nsp[name]; try { var type = typeof func.apply('teststring'); retObj[name] = type; } catch (e) {} } return retObj; } function getNativeStringPropertyNames() { var results = []; if (Object.getOwnPropertyNames) { results = Object.getOwnPropertyNames(__nsp); results.splice(results.indexOf('valueOf'), 1); results.splice(results.indexOf('toString'), 1); return results; } else { //meant for legacy cruft, this could probably be made more efficient var stringNames = {}; var objectNames = []; for (var name in String.prototype) stringNames[name] = name; for (var name in Object.prototype) delete stringNames[name]; //stringNames['toString'] = 'toString'; //this was deleted with the rest of the object names for (var name in stringNames) { results.push(name); } return results; } } function Export(str) { return new S(str); }; //attach exports to StringJSWrapper Export.extendPrototype = extendPrototype; Export.restorePrototype = restorePrototype; Export.VERSION = VERSION; Export.TMPL_OPEN = '{{'; Export.TMPL_CLOSE = '}}'; Export.ENTITIES = ENTITIES; /************************************* /* Exports /*************************************/ if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = Export; } else { if(typeof define === "function" && define.amd) { define([], function() { return Export; }); } else { window.S = Export; } } /************************************* /* 3rd Party Private Functions /*************************************/ //from sugar.js function multiArgs(args, fn) { var result = [], i; for(i = 0; i < args.length; i++) { result.push(args[i]); if(fn) fn.call(args, args[i], i); } return result; } //from underscore.string var escapeChars = { lt: '<', gt: '>', quot: '"', apos: "'", amp: '&' }; function escapeRegExp (s) { // most part from https://github.com/skulpt/skulpt/blob/ecaf75e69c2e539eff124b2ab45df0b01eaf2295/src/str.js#L242 var c; var i; var ret = []; var re = /^[A-Za-z0-9]+$/; s = ensureString(s); for (i = 0; i < s.length; ++i) { c = s.charAt(i); if (re.test(c)) { ret.push(c); } else { if (c === "\\000") { ret.push("\\000"); } else { ret.push("\\" + c); } } } return ret.join(""); } function ensureString(string) { return string == null ? '' : '' + string; } //from underscore.string var reversedEscapeChars = {}; for(var key in escapeChars){ reversedEscapeChars[escapeChars[key]] = key; } ENTITIES = { "amp" : "&", "gt" : ">", "lt" : "<", "quot" : "\"", "apos" : "'", "AElig" : 198, "Aacute" : 193, "Acirc" : 194, "Agrave" : 192, "Aring" : 197, "Atilde" : 195, "Auml" : 196, "Ccedil" : 199, "ETH" : 208, "Eacute" : 201, "Ecirc" : 202, "Egrave" : 200, "Euml" : 203, "Iacute" : 205, "Icirc" : 206, "Igrave" : 204, "Iuml" : 207, "Ntilde" : 209, "Oacute" : 211, "Ocirc" : 212, "Ograve" : 210, "Oslash" : 216, "Otilde" : 213, "Ouml" : 214, "THORN" : 222, "Uacute" : 218, "Ucirc" : 219, "Ugrave" : 217, "Uuml" : 220, "Yacute" : 221, "aacute" : 225, "acirc" : 226, "aelig" : 230, "agrave" : 224, "aring" : 229, "atilde" : 227, "auml" : 228, "ccedil" : 231, "eacute" : 233, "ecirc" : 234, "egrave" : 232, "eth" : 240, "euml" : 235, "iacute" : 237, "icirc" : 238, "igrave" : 236, "iuml" : 239, "ntilde" : 241, "oacute" : 243, "ocirc" : 244, "ograve" : 242, "oslash" : 248, "otilde" : 245, "ouml" : 246, "szlig" : 223, "thorn" : 254, "uacute" : 250, "ucirc" : 251, "ugrave" : 249, "uuml" : 252, "yacute" : 253, "yuml" : 255, "copy" : 169, "reg" : 174, "nbsp" : 160, "iexcl" : 161, "cent" : 162, "pound" : 163, "curren" : 164, "yen" : 165, "brvbar" : 166, "sect" : 167, "uml" : 168, "ordf" : 170, "laquo" : 171, "not" : 172, "shy" : 173, "macr" : 175, "deg" : 176, "plusmn" : 177, "sup1" : 185, "sup2" : 178, "sup3" : 179, "acute" : 180, "micro" : 181, "para" : 182, "middot" : 183, "cedil" : 184, "ordm" : 186, "raquo" : 187, "frac14" : 188, "frac12" : 189, "frac34" : 190, "iquest" : 191, "times" : 215, "divide" : 247, "OElig;" : 338, "oelig;" : 339, "Scaron;" : 352, "scaron;" : 353, "Yuml;" : 376, "fnof;" : 402, "circ;" : 710, "tilde;" : 732, "Alpha;" : 913, "Beta;" : 914, "Gamma;" : 915, "Delta;" : 916, "Epsilon;" : 917, "Zeta;" : 918, "Eta;" : 919, "Theta;" : 920, "Iota;" : 921, "Kappa;" : 922, "Lambda;" : 923, "Mu;" : 924, "Nu;" : 925, "Xi;" : 926, "Omicron;" : 927, "Pi;" : 928, "Rho;" : 929, "Sigma;" : 931, "Tau;" : 932, "Upsilon;" : 933, "Phi;" : 934, "Chi;" : 935, "Psi;" : 936, "Omega;" : 937, "alpha;" : 945, "beta;" : 946, "gamma;" : 947, "delta;" : 948, "epsilon;" : 949, "zeta;" : 950, "eta;" : 951, "theta;" : 952, "iota;" : 953, "kappa;" : 954, "lambda;" : 955, "mu;" : 956, "nu;" : 957, "xi;" : 958, "omicron;" : 959, "pi;" : 960, "rho;" : 961, "sigmaf;" : 962, "sigma;" : 963, "tau;" : 964, "upsilon;" : 965, "phi;" : 966, "chi;" : 967, "psi;" : 968, "omega;" : 969, "thetasym;" : 977, "upsih;" : 978, "piv;" : 982, "ensp;" : 8194, "emsp;" : 8195, "thinsp;" : 8201, "zwnj;" : 8204, "zwj;" : 8205, "lrm;" : 8206, "rlm;" : 8207, "ndash;" : 8211, "mdash;" : 8212, "lsquo;" : 8216, "rsquo;" : 8217, "sbquo;" : 8218, "ldquo;" : 8220, "rdquo;" : 8221, "bdquo;" : 8222, "dagger;" : 8224, "Dagger;" : 8225, "bull;" : 8226, "hellip;" : 8230, "permil;" : 8240, "prime;" : 8242, "Prime;" : 8243, "lsaquo;" : 8249, "rsaquo;" : 8250, "oline;" : 8254, "frasl;" : 8260, "euro;" : 8364, "image;" : 8465, "weierp;" : 8472, "real;" : 8476, "trade;" : 8482, "alefsym;" : 8501, "larr;" : 8592, "uarr;" : 8593, "rarr;" : 8594, "darr;" : 8595, "harr;" : 8596, "crarr;" : 8629, "lArr;" : 8656, "uArr;" : 8657, "rArr;" : 8658, "dArr;" : 8659, "hArr;" : 8660, "forall;" : 8704, "part;" : 8706, "exist;" : 8707, "empty;" : 8709, "nabla;" : 8711, "isin;" : 8712, "notin;" : 8713, "ni;" : 8715, "prod;" : 8719, "sum;" : 8721, "minus;" : 8722, "lowast;" : 8727, "radic;" : 8730, "prop;" : 8733, "infin;" : 8734, "ang;" : 8736, "and;" : 8743, "or;" : 8744, "cap;" : 8745, "cup;" : 8746, "int;" : 8747, "there4;" : 8756, "sim;" : 8764, "cong;" : 8773, "asymp;" : 8776, "ne;" : 8800, "equiv;" : 8801, "le;" : 8804, "ge;" : 8805, "sub;" : 8834, "sup;" : 8835, "nsub;" : 8836, "sube;" : 8838, "supe;" : 8839, "oplus;" : 8853, "otimes;" : 8855, "perp;" : 8869, "sdot;" : 8901, "lceil;" : 8968, "rceil;" : 8969, "lfloor;" : 8970, "rfloor;" : 8971, "lang;" : 9001, "rang;" : 9002, "loz;" : 9674, "spades;" : 9824, "clubs;" : 9827, "hearts;" : 9829, "diams;" : 9830 } }).call(this); },{"./_count":1,"./_splitLeft":2,"./_splitRight":3}]},{},[4])(4) });