2013-10-02 08:03:03 +00:00
|
|
|
Elm.Native.String = {};
|
|
|
|
Elm.Native.String.make = function(elm) {
|
|
|
|
elm.Native = elm.Native || {};
|
|
|
|
elm.Native.String = elm.Native.String || {};
|
|
|
|
if (elm.Native.String.values) return elm.Native.String.values;
|
|
|
|
if ('values' in Elm.Native.String)
|
|
|
|
return elm.Native.String.values = Elm.Native.String.values;
|
|
|
|
|
2013-10-06 21:25:29 +00:00
|
|
|
var Char = Elm.Char.make(elm);
|
2013-10-02 22:06:22 +00:00
|
|
|
var Maybe = Elm.Maybe.make(elm);
|
2013-10-04 18:07:40 +00:00
|
|
|
var JS = Elm.JavaScript.make(elm);
|
2013-10-02 22:06:22 +00:00
|
|
|
var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
|
|
|
|
|
2013-10-02 08:03:03 +00:00
|
|
|
function isEmpty(str) {
|
|
|
|
return str.length === 0;
|
|
|
|
}
|
2013-10-02 22:06:22 +00:00
|
|
|
function cons(chr,str) {
|
|
|
|
return chr + str;
|
|
|
|
}
|
|
|
|
function uncons(str) {
|
|
|
|
var chr;
|
|
|
|
return (chr = str[0]) ? Maybe.Just(Tuple2(chr, str.slice(1)))
|
|
|
|
: Maybe.Nothing;
|
|
|
|
}
|
2013-10-04 16:58:37 +00:00
|
|
|
function length(str) {
|
|
|
|
return str.length;
|
|
|
|
}
|
2013-10-02 08:03:03 +00:00
|
|
|
function map(f,str) {
|
2013-10-04 17:56:34 +00:00
|
|
|
return str.split('').map(f).join('');
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
function filter(pred,str) {
|
2013-10-04 17:56:34 +00:00
|
|
|
return str.split('').filter(pred).join('');
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
function reverse(str) {
|
2013-10-04 17:53:34 +00:00
|
|
|
return str.split('').reverse().join('');
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
2013-10-02 22:06:22 +00:00
|
|
|
function foldl(f,b,str) {
|
|
|
|
var len = str.length;
|
|
|
|
for (var i = 0; i < len; ++i) {
|
|
|
|
b = A2(f, str[i], b);
|
|
|
|
}
|
|
|
|
return b;
|
|
|
|
}
|
|
|
|
function foldr(f,b,str) {
|
|
|
|
for (var i = str.length; i--; ) {
|
|
|
|
b = A2(f, str[i], b);
|
|
|
|
}
|
|
|
|
return b;
|
|
|
|
}
|
2013-10-02 08:03:03 +00:00
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
function split(sep, str) {
|
|
|
|
return str.split(sep);
|
|
|
|
}
|
|
|
|
function join(sep, strs) {
|
2013-10-04 18:07:40 +00:00
|
|
|
return JS.fromList(strs).join(sep);
|
2013-10-02 22:06:22 +00:00
|
|
|
}
|
2013-10-02 08:03:03 +00:00
|
|
|
function repeat(n, chr) {
|
|
|
|
var result = '';
|
|
|
|
while (n > 0) {
|
|
|
|
if (n & 1) result += chr;
|
|
|
|
n >>= 1, chr += chr;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
2013-10-06 21:25:29 +00:00
|
|
|
function pad(n,chr,str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
var half = n - str.length / 2;
|
|
|
|
return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
|
|
|
|
}
|
2013-10-06 21:25:29 +00:00
|
|
|
function padRight(n,chr,str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
return str + repeat(n - str.length, chr);
|
|
|
|
}
|
2013-10-06 21:25:29 +00:00
|
|
|
function padLeft(n,chr,str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
return repeat(n - str.length, chr) + str;
|
|
|
|
}
|
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
function trim(str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
return str.trim();
|
|
|
|
}
|
2013-10-02 22:06:22 +00:00
|
|
|
function trimLeft(str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
return str.trimLeft();
|
|
|
|
}
|
2013-10-02 22:06:22 +00:00
|
|
|
function trimRight(str) {
|
2013-10-02 08:03:03 +00:00
|
|
|
return str.trimRight();
|
|
|
|
}
|
|
|
|
|
|
|
|
function words(str) {
|
2013-10-04 18:07:40 +00:00
|
|
|
return JS.toList(str.split(/\s+/g));
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
function unwords(str) {
|
2013-10-04 18:07:40 +00:00
|
|
|
return JS.fromList(str).join(' ');
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
function lines(str) {
|
2013-10-04 18:07:40 +00:00
|
|
|
return JS.toList(str.split(/\r\n|\r|\n/g));
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
function unlines(str) {
|
2013-10-04 18:07:40 +00:00
|
|
|
return JS.fromList(str).join('\n');
|
2013-10-02 08:03:03 +00:00
|
|
|
}
|
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
function toUpper(str) {
|
2013-10-03 00:41:58 +00:00
|
|
|
return str.toUpperCase();
|
2013-10-02 22:06:22 +00:00
|
|
|
}
|
|
|
|
function toLower(str) {
|
2013-10-03 00:41:58 +00:00
|
|
|
return str.toLowerCase();
|
2013-10-02 22:06:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function any(pred, str) {
|
|
|
|
for (var i = str.length; i--; ) {
|
|
|
|
if (pred(str[i])) return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function all(pred, str) {
|
|
|
|
for (var i = str.length; i--; ) {
|
|
|
|
if (!pred(str[i])) return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2013-10-06 21:25:29 +00:00
|
|
|
function contains(sub, str) {
|
|
|
|
return str.indexOf(sub) > -1;
|
|
|
|
}
|
|
|
|
function startsWith(sub, str) {
|
|
|
|
return str.indexOf(sub) === 0;
|
|
|
|
}
|
|
|
|
function endsWith(sub, str) {
|
|
|
|
return str.lastIndexOf(sub) === str.length - sub.length;
|
|
|
|
}
|
|
|
|
function indexes(sub, str) {
|
|
|
|
var subLen = sub.length;
|
|
|
|
var i = 0;
|
|
|
|
var is = [];
|
|
|
|
while ((i = str.indexOf(sub, i)) > -1) {
|
|
|
|
is.push(i);
|
|
|
|
i = i + subLen;
|
|
|
|
}
|
|
|
|
return JS.toList(is);
|
|
|
|
}
|
|
|
|
|
|
|
|
function toInt(str) {
|
|
|
|
var s = JS.fromString(str);
|
|
|
|
var len = s.length;
|
|
|
|
if (len === 0) { return Maybe.Nothing; }
|
|
|
|
var start = 0;
|
|
|
|
if (s[0] == '-') {
|
|
|
|
if (len === 1) { return Maybe.Nothing; }
|
|
|
|
start = 1;
|
|
|
|
}
|
|
|
|
for (var i = start; i < len; ++i) {
|
|
|
|
if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
|
|
|
|
}
|
|
|
|
return Maybe.Just(parseInt(s, 10));
|
|
|
|
}
|
|
|
|
|
|
|
|
function toFloat(str) {
|
|
|
|
var s = JS.fromString(str);
|
|
|
|
var len = s.length;
|
|
|
|
if (len === 0) { return Maybe.Nothing; }
|
|
|
|
var start = 0;
|
|
|
|
if (s[0] == '-') {
|
|
|
|
if (len === 1) { return Maybe.Nothing; }
|
|
|
|
start = 1;
|
|
|
|
}
|
|
|
|
var dotCount = 0;
|
|
|
|
for (var i = start; i < len; ++i) {
|
|
|
|
if (Char.isDigit(s[i])) { continue; }
|
|
|
|
if (s[i] === '.') {
|
|
|
|
dotCount += 1;
|
|
|
|
if (dotCount <= 1) { continue; }
|
|
|
|
}
|
|
|
|
return Maybe.Nothing;
|
|
|
|
}
|
|
|
|
return Maybe.Just(parseFloat(s));
|
|
|
|
}
|
|
|
|
|
2013-10-03 00:41:58 +00:00
|
|
|
return Elm.Native.String.values = {
|
2013-10-02 08:03:03 +00:00
|
|
|
isEmpty: isEmpty,
|
2013-10-02 22:06:22 +00:00
|
|
|
cons: F2(cons),
|
|
|
|
uncons: uncons,
|
2013-10-04 16:58:37 +00:00
|
|
|
length: length,
|
2013-10-02 08:03:03 +00:00
|
|
|
map: F2(map),
|
|
|
|
filter: F2(filter),
|
|
|
|
reverse: reverse,
|
2013-10-02 22:06:22 +00:00
|
|
|
foldl: F3(foldl),
|
|
|
|
foldr: F3(foldr),
|
2013-10-02 08:03:03 +00:00
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
split: F2(split),
|
|
|
|
join: F2(join),
|
2013-10-02 08:03:03 +00:00
|
|
|
repeat: F2(repeat),
|
2013-10-06 21:25:29 +00:00
|
|
|
|
|
|
|
pad: F3(pad),
|
|
|
|
padLeft: F3(padLeft),
|
|
|
|
padRight: F3(padRight),
|
2013-10-02 08:03:03 +00:00
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
trim: trim,
|
|
|
|
trimLeft: trimLeft,
|
|
|
|
trimRight: trimRight,
|
2013-10-02 08:03:03 +00:00
|
|
|
|
|
|
|
words: words,
|
|
|
|
unwords: unwords,
|
|
|
|
lines: lines,
|
|
|
|
unlines: unlines,
|
|
|
|
|
2013-10-02 22:06:22 +00:00
|
|
|
toUpper: toUpper,
|
|
|
|
toLower: toLower,
|
|
|
|
|
|
|
|
any: F2(any),
|
2013-10-06 21:25:29 +00:00
|
|
|
all: F2(all),
|
|
|
|
|
|
|
|
contains: F2(contains),
|
|
|
|
startsWith: F2(startsWith),
|
|
|
|
endsWith: F2(endsWith),
|
|
|
|
indexes: F2(indexes),
|
|
|
|
|
|
|
|
toInt: toInt,
|
|
|
|
toFloat: toFloat,
|
2013-10-02 08:03:03 +00:00
|
|
|
};
|
|
|
|
};
|