275
276 if (istart > strlen)
277 return(EMPTYSTRING);
278 if (istart < 1)
279 istart = 0;
280 try {
281 return value.substring(istart);
282 } catch (IndexOutOfBoundsException e) {
283 runTimeError(RUN_TIME_INTERNAL_ERR, "substring()");
284 return null;
285 }
286 }
287
288 /**
289 * XSLT Standard function substring(). Must take a double because of
290 * conversions resulting into NaNs and rounding.
291 */
292 public static String substringF(String value, double start, double length) {
293 if (Double.isInfinite(start) ||
294 Double.isNaN(start) ||
295 Double.isNaN(length))
296 return(EMPTYSTRING);
297
298 int istart = (int)Math.round(start) - 1;
299 final int isum;
300 if (Double.isInfinite(length))
301 isum = Integer.MAX_VALUE;
302 else
303 isum = istart + (int)Math.round(length);
304
305 final int strlen = value.length();
306 if (isum < 0 || istart > strlen)
307 return(EMPTYSTRING);
308
309 if (istart < 0)
310 istart = 0;
311
312 try {
313 if (isum > strlen)
314 return value.substring(istart);
315 else
|
275
276 if (istart > strlen)
277 return(EMPTYSTRING);
278 if (istart < 1)
279 istart = 0;
280 try {
281 return value.substring(istart);
282 } catch (IndexOutOfBoundsException e) {
283 runTimeError(RUN_TIME_INTERNAL_ERR, "substring()");
284 return null;
285 }
286 }
287
288 /**
289 * XSLT Standard function substring(). Must take a double because of
290 * conversions resulting into NaNs and rounding.
291 */
292 public static String substringF(String value, double start, double length) {
293 if (Double.isInfinite(start) ||
294 Double.isNaN(start) ||
295 Double.isNaN(length) ||
296 length < 0)
297 return(EMPTYSTRING);
298
299 int istart = (int)Math.round(start) - 1;
300 final int isum;
301 if (Double.isInfinite(length))
302 isum = Integer.MAX_VALUE;
303 else
304 isum = istart + (int)Math.round(length);
305
306 final int strlen = value.length();
307 if (isum < 0 || istart > strlen)
308 return(EMPTYSTRING);
309
310 if (istart < 0)
311 istart = 0;
312
313 try {
314 if (isum > strlen)
315 return value.substring(istart);
316 else
|