Mercurial Hosting > luan
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++;