on master help sign in
Add and rename functions

use the term "pad" to add characters add ways to search for substrings read ints and floats

commitcfe1302e82b315dc6d12568fdab581d0e46723eb authorEvan Czaplicki <info@elm-lang.org> dateSun 6 Oct 2013, 14:25 (13 years ago) parent88aa9d3
3 files changed+108−48
libraries/Native/Basics.js−41 libraries/Native/String.js+73−7 libraries/String.elm+35
libraries/Native/Basics.js−41
@@ -6,9 +6,7 @@ Elm.Native.Basics.make = function(elm) {
66 if (elm.Native.Basics.values) return elm.Native.Basics.values;
77
88 var JS = Elm.Native.JavaScript.make(elm);
9− // var Maybe = Elm.Maybe(elm);
109 var Utils = Elm.Native.Utils.make(elm);
11− //var Char = Elm.Char(elm);
1210
1311 function div(a,b) { return (a/b)|0; }
1412 function rem(a,b) { return a % b; }
@@ -28,43 +26,7 @@ Elm.Native.Basics.make = function(elm) {
2826 function uncurry(f,v) { return A2(f,v._0,v._1); }
2927 function fst(t) { return t._0; }
3028 function snd(t) { return t._1; }
31−/*
32− function readInt(str) {
33− var s = JS.fromString(str);
34− var len = s.length;
35− if (len === 0) { return Maybe.Nothing; }
36− var start = 0;
37− if (s[0] == '-') {
38− if (len === 1) { return Maybe.Nothing; }
39− start = 1;
40− }
41− for (var i = start; i < len; ++i) {
42− if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
43− }
44− return Maybe.Just(parseInt(s, 10));
45− }
4629
47− function readFloat(str) {
48− var s = JS.fromString(str);
49− var len = s.length;
50− if (len === 0) { return Maybe.Nothing; }
51− var start = 0;
52− if (s[0] == '-') {
53− if (len === 1) { return Maybe.Nothing; }
54− start = 1;
55− }
56− var dotCount = 0;
57− for (var i = start; i < len; ++i) {
58− if (Char.isDigit(s[i])) { continue; }
59− if (s[i] === '.') {
60− dotCount += 1;
61− if (dotCount <= 1) { continue; }
62− }
63− return Maybe.Nothing;
64− }
65− return Maybe.Just(parseFloat(s));
66− }
67−*/
6830 var basics = {
6931 div:F2(div),
7032 rem:F2(rem),
@@ -97,9 +59,6 @@ Elm.Native.Basics.make = function(elm) {
9759 round:Math.round,
9860 toFloat:function(x) { return x; },
9961
100− //readInt:readInt,
101− //readFloat:readFloat,
102−
10362 curry:F3(curry),
10463 uncurry:F2(uncurry),
10564 fst:fst,
libraries/Native/String.js+73−7
@@ -6,6 +6,7 @@ Elm.Native.String.make = function(elm) {
66 if ('values' in Elm.Native.String)
77 return elm.Native.String.values = Elm.Native.String.values;
88
9+ var Char = Elm.Char.make(elm);
910 var Maybe = Elm.Maybe.make(elm);
1011 var JS = Elm.JavaScript.make(elm);
1112 var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
@@ -61,14 +62,14 @@ Elm.Native.String.make = function(elm) {
6162 }
6263 return result;
6364 }
64− function center(n,chr,str) {
65+ function pad(n,chr,str) {
6566 var half = n - str.length / 2;
6667 return repeat(Math.ceil(half),chr) + str + repeat(half|0,chr);
6768 }
68− function justifyLeft(n,chr,str) {
69+ function padRight(n,chr,str) {
6970 return str + repeat(n - str.length, chr);
7071 }
71− function justifyRight(n,chr,str) {
72+ function padLeft(n,chr,str) {
7273 return repeat(n - str.length, chr) + str;
7374 }
7475
@@ -115,6 +116,62 @@ Elm.Native.String.make = function(elm) {
115116 return true;
116117 }
117118
119+ function contains(sub, str) {
120+ return str.indexOf(sub) > -1;
121+ }
122+ function startsWith(sub, str) {
123+ return str.indexOf(sub) === 0;
124+ }
125+ function endsWith(sub, str) {
126+ return str.lastIndexOf(sub) === str.length - sub.length;
127+ }
128+ function indexes(sub, str) {
129+ var subLen = sub.length;
130+ var i = 0;
131+ var is = [];
132+ while ((i = str.indexOf(sub, i)) > -1) {
133+ is.push(i);
134+ i = i + subLen;
135+ }
136+ return JS.toList(is);
137+ }
138+
139+ function toInt(str) {
140+ var s = JS.fromString(str);
141+ var len = s.length;
142+ if (len === 0) { return Maybe.Nothing; }
143+ var start = 0;
144+ if (s[0] == '-') {
145+ if (len === 1) { return Maybe.Nothing; }
146+ start = 1;
147+ }
148+ for (var i = start; i < len; ++i) {
149+ if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
150+ }
151+ return Maybe.Just(parseInt(s, 10));
152+ }
153+
154+ function toFloat(str) {
155+ var s = JS.fromString(str);
156+ var len = s.length;
157+ if (len === 0) { return Maybe.Nothing; }
158+ var start = 0;
159+ if (s[0] == '-') {
160+ if (len === 1) { return Maybe.Nothing; }
161+ start = 1;
162+ }
163+ var dotCount = 0;
164+ for (var i = start; i < len; ++i) {
165+ if (Char.isDigit(s[i])) { continue; }
166+ if (s[i] === '.') {
167+ dotCount += 1;
168+ if (dotCount <= 1) { continue; }
169+ }
170+ return Maybe.Nothing;
171+ }
172+ return Maybe.Just(parseFloat(s));
173+ }
174+
118175 return Elm.Native.String.values = {
119176 isEmpty: isEmpty,
120177 cons: F2(cons),
@@ -129,9 +186,10 @@ Elm.Native.String.make = function(elm) {
129186 split: F2(split),
130187 join: F2(join),
131188 repeat: F2(repeat),
132− center: F3(center),
133− justifyLeft: F3(justifyLeft),
134− justifyRight: F3(justifyRight),
189+
190+ pad: F3(pad),
191+ padLeft: F3(padLeft),
192+ padRight: F3(padRight),
135193
136194 trim: trim,
137195 trimLeft: trimLeft,
@@ -146,6 +204,14 @@ Elm.Native.String.make = function(elm) {
146204 toLower: toLower,
147205
148206 any: F2(any),
149− all: F2(all)
207+ all: F2(all),
208+
209+ contains: F2(contains),
210+ startsWith: F2(startsWith),
211+ endsWith: F2(endsWith),
212+ indexes: F2(indexes),
213+
214+ toInt: toInt,
215+ toFloat: toFloat,
150216 };
151217};
libraries/String.elm+35
@@ -134,3 +134,38 @@ any = Native.String.any
134134-}
135135all : (Char -> Bool) -> String -> Bool
136136all = Native.String.all
137+
138+{-|
139+-}
140+contains : String -> String -> Bool
141+contains = Native.String.contains
142+
143+{-|
144+-}
145+startsWith : String -> String -> Bool
146+startsWith = Native.String.startsWith
147+
148+{-|
149+-}
150+endsWith : String -> String -> Bool
151+endsWith = Native.String.endsWith
152+
153+{-|
154+-}
155+indices : String -> String -> [Int]
156+indices = Native.String.indexes
157+
158+{-|
159+-}
160+indexes : String -> String -> [Int]
161+indexes = Native.String.indexes
162+
163+{-|
164+-}
165+toInt : String -> Maybe Int
166+toInt = Native.String.toInt
167+
168+{-|
169+-}
170+toFloat : String -> Maybe Float
171+toFloat = Native.String.toFloat