/** * Converts the {@code NumericShaper.Range} enum-based parameters, if any, to the bit mask-based * counterparts and writes this object to the {@code stream}. Any enum constants that have no bit * mask-based counterparts are ignored in the conversion. * * @param stream the output stream to write to * @throws IOException if an I/O error occurs while writing to {@code stream} * @since 1.7 */ private void writeObject(ObjectOutputStream stream) throws IOException { if (shapingRange != null) { int index = Range.toRangeIndex(shapingRange); if (index >= 0) { key = index; } } if (rangeSet != null) { mask |= Range.toRangeMask(rangeSet); } stream.defaultWriteObject(); }
/** * Converts the digits in the text that occur between {@code start} and {@code start + count}, * using the provided {@code context}. {@code Context} is ignored if the shaper is not a * contextual shaper. * * @param text a {@code char} array * @param start the index into {@code text} to start converting * @param count the number of {@code char}s in {@code text} to convert * @param context the context to which to convert the characters, such as {@code * NumericShaper.Range.EUROPEAN} * @throws IndexOutOfBoundsException if {@code start} or {@code start + count} is out of bounds * @throws NullPointerException if {@code text} or {@code context} is null * @since 1.7 */ public void shape(char[] text, int start, int count, Range context) { checkParams(text, start, count); if (context == null) { throw new NullPointerException("context is null"); } if (isContextual()) { if (rangeSet != null) { shapeContextually(text, start, count, context); } else { int key = Range.toRangeIndex(context); if (key >= 0) { shapeContextually(text, start, count, key); } else { shapeContextually(text, start, count, shapingRange); } } } else { shapeNonContextually(text, start, count); } }