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