|
@@ -0,0 +1,118 @@
|
|
|
+class NekoString__ implements String {
|
|
|
+
|
|
|
+ private static var __split : Dynamic = Neko.load("std","string_split",2);
|
|
|
+
|
|
|
+ public var length : Int;
|
|
|
+
|
|
|
+ private function new(s) {
|
|
|
+ untyped {
|
|
|
+ if( __dollar__typeof(s) != __dollar__tstring )
|
|
|
+ s = __dollar__string(s);
|
|
|
+ this.__s = s;
|
|
|
+ this.length = __dollar__ssize(s);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function charAt(p) {
|
|
|
+ untyped {
|
|
|
+ var s = __dollar__smake(1);
|
|
|
+ __dollar__sset(s,0,__dollar__sget(this.__s,p));
|
|
|
+ return new String(s);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function charCodeAt(p) {
|
|
|
+ untyped {
|
|
|
+ return __dollar__sget(this.__s,p);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function indexOf( str, pos ) {
|
|
|
+ untyped {
|
|
|
+ var p = __dollar__sfind(this.__s,pos,str.__s);
|
|
|
+ if( p == null )
|
|
|
+ return -1;
|
|
|
+ return p;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function lastIndexOf( str, pos ) {
|
|
|
+ untyped {
|
|
|
+ var last = -1;
|
|
|
+ while( true ) {
|
|
|
+ var p = __dollar__sfind(this.__s,last + 1,str.__s);
|
|
|
+ if( p == null )
|
|
|
+ return last;
|
|
|
+ last = p;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function split( delim ) {
|
|
|
+ untyped {
|
|
|
+ var l = __split(this.__s,delim.__s);
|
|
|
+ var a = new Array<String>();
|
|
|
+ while( l != null ) {
|
|
|
+ a.push(new String(l[0]));
|
|
|
+ l = l[1];
|
|
|
+ }
|
|
|
+ return a;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function substr( pos, len ) {
|
|
|
+ return untyped new String(__dollar__ssub(this.__s,pos,len));
|
|
|
+ }
|
|
|
+
|
|
|
+ public function toLowerCase() {
|
|
|
+ untyped {
|
|
|
+ var s = this.__s;
|
|
|
+ var l = this.length;
|
|
|
+ var s2 = __dollar__scopy(s);
|
|
|
+ var i = 0;
|
|
|
+ while( i < l ) {
|
|
|
+ var c = __dollar__sget(s,i);
|
|
|
+ if( c >= 65 && c <= 90 )
|
|
|
+ __dollar__sset(s2,i,c-65+97);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ return new String(s2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function toUpperCase() {
|
|
|
+ untyped {
|
|
|
+ var s = this.__s;
|
|
|
+ var l = this.length;
|
|
|
+ var s2 = __dollar__scopy(s);
|
|
|
+ var i = 0;
|
|
|
+ while( i < l ) {
|
|
|
+ var c = __dollar__sget(s,i);
|
|
|
+ if( c >= 97 && c <= 122 )
|
|
|
+ __dollar__sset(s2,i,c-97+65);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ return new String(s2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* NEKO INTERNALS */
|
|
|
+
|
|
|
+ private function __string() {
|
|
|
+ return untyped this.__s;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function __compare(o) {
|
|
|
+ return untyped __compare__(this.__s,o.__s);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function __add(s) {
|
|
|
+ return untyped new String(this.__s+__dollar__string(s));
|
|
|
+ }
|
|
|
+
|
|
|
+ private function __radd(s) {
|
|
|
+ return untyped new String(__dollar__string(s)+this.__s);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|