comparison 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
comparison
equal deleted inserted replaced
554:18504c41b0be 555:e25ba7a2e816
54 54
55 @LuanMethod public static byte[] to_binary(String s) { 55 @LuanMethod public static byte[] to_binary(String s) {
56 return s.getBytes(); 56 return s.getBytes();
57 } 57 }
58 58
59 public static int len(LuanState luan,String s) throws LuanException {
60 Utils.checkNotNull(luan,s);
61 return s.length();
62 }
63
64 public static String lower(LuanState luan,String s) throws LuanException { 59 public static String lower(LuanState luan,String s) throws LuanException {
65 Utils.checkNotNull(luan,s); 60 Utils.checkNotNull(luan,s);
66 return s.toLowerCase(); 61 return s.toLowerCase();
67 } 62 }
68 63
98 int start = start(s,i); 93 int start = start(s,i);
99 int end = end(s,j,s.length()); 94 int end = end(s,j,s.length());
100 return s.substring(start,end); 95 return s.substring(start,end);
101 } 96 }
102 97
103 public static int[] find(String s,String pattern,Integer init,Boolean plain) { 98 @LuanMethod public static Object[] find(String s,String pattern,Integer init,Boolean plain) {
104 int start = start(s,init,0); 99 int start = start(s,init,0);
105 if( Boolean.TRUE.equals(plain) ) { 100 if( Boolean.TRUE.equals(plain) ) {
106 int i = s.indexOf(pattern,start); 101 int i = s.indexOf(pattern,start);
107 return i == -1 ? null : new int[]{i+1,i+pattern.length()}; 102 return i == -1 ? null : new Integer[]{i+1,i+pattern.length()};
108 } 103 }
109 Matcher m = Pattern.compile(pattern).matcher(s); 104 Matcher m = Pattern.compile(pattern).matcher(s);
110 return m.find(start) ? new int[]{m.start()+1,m.end()} : null; 105 if( !m.find(start) )
106 return null;
107 int n = m.groupCount();
108 Object[] rtn = new Object[2+n];
109 rtn[0] = m.start() + 1;
110 rtn[1] = m.end();
111 for( int i=0; i<n; i++ ) {
112 rtn[2+i] = m.group(i+1);
113 }
114 return rtn;
111 } 115 }
112 116
113 @LuanMethod public static String[] match(String s,String pattern,Integer init) { 117 @LuanMethod public static String[] match(String s,String pattern,Integer init) {
114 int start = start(s,init,0); 118 int start = start(s,init,0);
115 Matcher m = Pattern.compile(pattern).matcher(s); 119 Matcher m = Pattern.compile(pattern).matcher(s);
116 if( !m.find(start) ) 120 if( !m.find(start) )
117 return null; 121 return null;
118 final int n = m.groupCount(); 122 int n = m.groupCount();
119 if( n == 0 ) 123 if( n == 0 )
120 return new String[]{m.group()}; 124 return new String[]{m.group()};
121 String[] rtn = new String[n]; 125 String[] rtn = new String[n];
122 for( int i=0; i<n; i++ ) { 126 for( int i=0; i<n; i++ ) {
123 rtn[i] = m.group(i+1); 127 rtn[i] = m.group(i+1);
164 StringBuffer sb = new StringBuffer(); 168 StringBuffer sb = new StringBuffer();
165 while( i<max && m.find() ) { 169 while( i<max && m.find() ) {
166 String match = m.groupCount()==0 ? m.group() : m.group(1); 170 String match = m.groupCount()==0 ? m.group() : m.group(1);
167 Object val = t.get(luan,match); 171 Object val = t.get(luan,match);
168 if( val != null ) { 172 if( val != null ) {
169 String replacement = luan.checkString(val); 173 String replacement = luan.toString(val);
170 if( replacement==null )
171 throw luan.exception( "invalid replacement value (a "+Luan.type(val)+")" );
172 m.appendReplacement(sb,replacement); 174 m.appendReplacement(sb,replacement);
173 } 175 }
174 i++; 176 i++;
175 } 177 }
176 m.appendTail(sb); 178 m.appendTail(sb);
182 StringBuffer sb = new StringBuffer(); 184 StringBuffer sb = new StringBuffer();
183 while( i<max && m.find() ) { 185 while( i<max && m.find() ) {
184 Object[] args; 186 Object[] args;
185 final int count = m.groupCount(); 187 final int count = m.groupCount();
186 if( count == 0 ) { 188 if( count == 0 ) {
187 args = new Object[]{m.group()}; 189 args = new String[]{m.group()};
188 } else { 190 } else {
189 args = new Object[count]; 191 args = new String[count];
190 for( int j=0; j<count; j++ ) { 192 for( int j=0; j<count; j++ ) {
191 args[j] = m.group(j); 193 args[j] = m.group(j+1);
192 } 194 }
193 } 195 }
194 Object val = Luan.first( luan.call(fn,"repl-arg",args) ); 196 Object val = Luan.first( luan.call(fn,"repl-arg",args) );
195 if( val != null ) { 197 if( val != null ) {
196 String replacement = luan.checkString(val); 198 String replacement = luan.toString(val);
197 if( replacement==null )
198 throw luan.exception( "invalid replacement value (a "+Luan.type(val)+")" );
199 m.appendReplacement(sb,replacement); 199 m.appendReplacement(sb,replacement);
200 } 200 }
201 i++; 201 i++;
202 } 202 }
203 m.appendTail(sb); 203 m.appendTail(sb);