diff core/src/luan/modules/StringLuan.java @ 555:e25ba7a2e816

some String documentation and fixes
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 19 Jun 2015 04:29:06 -0600
parents f4dfe9c64c25
children f1601a4ce1aa
line wrap: on
line diff
--- a/core/src/luan/modules/StringLuan.java	Thu Jun 18 03:30:18 2015 -0600
+++ b/core/src/luan/modules/StringLuan.java	Fri Jun 19 04:29:06 2015 -0600
@@ -56,11 +56,6 @@
 		return s.getBytes();
 	}
 
-	public static int len(LuanState luan,String s) throws LuanException {
-		Utils.checkNotNull(luan,s);
-		return s.length();
-	}
-
 	public static String lower(LuanState luan,String s) throws LuanException {
 		Utils.checkNotNull(luan,s);
 		return s.toLowerCase();
@@ -100,14 +95,23 @@
 		return s.substring(start,end);
 	}
 
-	public static int[] find(String s,String pattern,Integer init,Boolean plain) {
+	@LuanMethod public static Object[] find(String s,String pattern,Integer init,Boolean plain) {
 		int start = start(s,init,0);
 		if( Boolean.TRUE.equals(plain) ) {
 			int i = s.indexOf(pattern,start);
-			return i == -1 ? null : new int[]{i+1,i+pattern.length()};
+			return i == -1 ? null : new Integer[]{i+1,i+pattern.length()};
 		}
 		Matcher m = Pattern.compile(pattern).matcher(s);
-		return m.find(start) ? new int[]{m.start()+1,m.end()} : null;
+		if( !m.find(start) )
+			return null;
+		int n = m.groupCount();
+		Object[] rtn = new Object[2+n];
+		rtn[0] = m.start() + 1;
+		rtn[1] = m.end();
+		for( int i=0; i<n; i++ ) {
+			rtn[2+i] = m.group(i+1);
+		}
+		return rtn;
 	}
 
 	@LuanMethod public static String[] match(String s,String pattern,Integer init) {
@@ -115,7 +119,7 @@
 		Matcher m = Pattern.compile(pattern).matcher(s);
 		if( !m.find(start) )
 			return null;
-		final int n = m.groupCount();
+		int n = m.groupCount();
 		if( n == 0 )
 			return new String[]{m.group()};
 		String[] rtn = new String[n];
@@ -166,9 +170,7 @@
 				String match = m.groupCount()==0 ? m.group() : m.group(1);
 				Object val = t.get(luan,match);
 				if( val != null ) {
-					String replacement = luan.checkString(val);
-					if( replacement==null )
-						throw luan.exception( "invalid replacement value (a "+Luan.type(val)+")" );
+					String replacement = luan.toString(val);
 					m.appendReplacement(sb,replacement);
 				}
 				i++;
@@ -184,18 +186,16 @@
 				Object[] args;
 				final int count = m.groupCount();
 				if( count == 0 ) {
-					args = new Object[]{m.group()};
+					args = new String[]{m.group()};
 				} else {
-					args = new Object[count];
+					args = new String[count];
 					for( int j=0; j<count; j++ ) {
-						args[j] = m.group(j);
+						args[j] = m.group(j+1);
 					}
 				}
 				Object val = Luan.first( luan.call(fn,"repl-arg",args) );
 				if( val != null ) {
-					String replacement = luan.checkString(val);
-					if( replacement==null )
-						throw luan.exception( "invalid replacement value (a "+Luan.type(val)+")" );
+					String replacement = luan.toString(val);
 					m.appendReplacement(sb,replacement);
 				}
 				i++;