< prev index next >

jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java

Print this page




 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


< prev index next >