/** * Initialize the paragraph-specific data. */ private void paragraphInit(byte aBaseline, CoreMetrics lm, Map<? extends Attribute, ?> paragraphAttrs, char[] text) { baseline = aBaseline; // normalize to current baseline baselineOffsets = TextLine.getNormalizedOffsets(lm.baselineOffsets, baseline); justifyRatio = AttributeValues.getJustification(paragraphAttrs); NumericShaper shaper = AttributeValues.getNumericShaping(paragraphAttrs); if (shaper != null) { shaper.shape(text, 0, text.length); } }
private static void checkResult(String ranges, NumericShaper ns, String given, String expected) { char[] text = given.toCharArray(); ns.shape(text, 0, text.length); String got = new String(text); if (!expected.equals(got)) { err = true; System.err.println("Error with range(s) <" + ranges + ">."); System.err.println(" text = " + given); System.err.println(" got = " + got); System.err.println(" expected = " + expected); } else { System.out.println("OK with range(s) <" + ranges + ">."); System.out.println(" text = " + given); System.out.println(" got = " + got); System.out.println(" expected = " + expected); } }
public final void testGetContextualShaperIntInt() { NumericShaper ns; ns = NumericShaper.getContextualShaper(NumericShaper.ARABIC | NumericShaper.TAMIL, NumericShaper.EASTERN_ARABIC); assertNotNull(ns); assertEquals("Ranges are different", NumericShaper.ARABIC | NumericShaper.TAMIL, ns.getRanges()); assertTrue("Contextual shaper isContextual() method must return true value", ns.isContextual()); try{ // wrong ranges value ns = NumericShaper.getShaper(13); fail("IlligalArgumentException wasn't thrown with invalid shaper value"); } catch (IllegalArgumentException e){ } }
public final void testGetContextualShaperInt() { NumericShaper ns; ns = NumericShaper.getContextualShaper(NumericShaper.ARABIC | NumericShaper.TAMIL); assertNotNull(ns); assertEquals("Ranges are not the same", NumericShaper.ARABIC | NumericShaper.TAMIL, ns.getRanges()); assertTrue("Default contextual shaper isContextual() method must return true value", ns.isContextual()); try{ // wrong ranges value ns = NumericShaper.getShaper(13); fail("IlligalArgumentException wasn't thrown with invalid shaper value"); } catch (IllegalArgumentException e){ } }
public static NumericShaper getNumericShaping(Map<?, ?> map) { if (map != null) { if (map instanceof AttributeMap && ((AttributeMap) map).getValues() != null) { return ((AttributeMap)map).getValues().numericShaping; } Object obj = map.get(TextAttribute.NUMERIC_SHAPING); if (obj != null && obj instanceof NumericShaper) { return (NumericShaper)obj; } } return DEFAULT.numericShaping; }
private static void test6842557() { NumericShaper ns_old = getContextualShaper(ARABIC | TAMIL | ETHIOPIC, EUROPEAN); NumericShaper ns_new = getContextualShaper(EnumSet.of( Range.ARABIC, Range.TAMIL, Range.ETHIOPIC), Range.EUROPEAN); String[][] data = { // Arabic "October 10" {"\u0623\u0643\u062a\u0648\u0628\u0631 10", "\u0623\u0643\u062a\u0648\u0628\u0631 \u0661\u0660"}, // Tamil "Year 2009" {"\u0b86\u0ba3\u0bcd\u0b9f\u0bc1 2009", "\u0b86\u0ba3\u0bcd\u0b9f\u0bc1 \u0be8\u0be6\u0be6\u0bef"}, // "\u0be800\u0bef is returned by pre-JDK7 because Tamil zero was not // included in Unicode 4.0.0. // Ethiopic "Syllable<HA> 2009" {"\u1200 2009", "\u1200 \u136a00\u1371"}, // Ethiopic zero doesn't exist even in Unicode 5.1.0. }; for (int i = 0; i < data.length; i++) { checkResult("ARABIC | TAMIL | ETHIOPIC", ns_old, data[i][0], data[i][1]); checkResult("Range.ARABIC, Range.TAMIL, Range.ETHIOPIC", ns_new, data[i][0], data[i][1]); } }
private static void test6943963() { // Needed to reproduce this bug. NumericShaper ns_dummy = getContextualShaper(ARABIC | TAMIL | ETHIOPIC, EUROPEAN); char[] c = "\u1200 1".toCharArray(); ns_dummy.shape(c, 0, c.length); String given = "\u0627\u0628 456"; String expected_ARABIC = "\u0627\u0628 \u0664\u0665\u0666"; String expected_EASTERN_ARABIC = "\u0627\u0628 \u06f4\u06f5\u06f6"; NumericShaper ns = getContextualShaper(ARABIC); checkResult("ARABIC", ns, given, expected_ARABIC); ns = getContextualShaper(EnumSet.of(Range.ARABIC)); checkResult("Range.ARABIC", ns, given, expected_ARABIC); ns = getContextualShaper(EASTERN_ARABIC); checkResult("EASTERN_ARABIC", ns, given, expected_EASTERN_ARABIC); ns = getContextualShaper(EnumSet.of(Range.EASTERN_ARABIC)); checkResult("Range.EASTERN_ARABIC", ns, given, expected_EASTERN_ARABIC); ns = getContextualShaper(ARABIC | EASTERN_ARABIC); checkResult("ARABIC | EASTERN_ARABIC", ns, given, expected_EASTERN_ARABIC); ns = getContextualShaper(EnumSet.of(Range.ARABIC, Range.EASTERN_ARABIC)); checkResult("Range.ARABIC, Range.EASTERN_ARABIC", ns, given, expected_EASTERN_ARABIC); }
private static void test6903266() { NumericShaper ns = getContextualShaper(EnumSet.of(Range.TAI_THAM_HORA)); String given = "\u1a20 012"; String expected = "\u1a20 \u1a80\u1a81\u1a82"; checkResult("Range.TAI_THAM_HORA", ns, given, expected); ns = getContextualShaper(EnumSet.of(Range.TAI_THAM_HORA, Range.TAI_THAM_THAM)); given = "\u1a20 012"; expected = "\u1a20 \u1a90\u1a91\u1a92"; // Tham digits are prioritized. checkResult("Range.TAI_THAM_HORA, Range.TAI_THAM_THAM", ns, given, expected); ns = getContextualShaper(EnumSet.of(Range.JAVANESE)); given = "\ua984 012"; expected = "\ua984 \ua9d0\ua9d1\ua9d2"; checkResult("Range.JAVANESE", ns, given, expected); ns = getContextualShaper(EnumSet.of(Range.TAI_THAM_THAM)); given = "\u1a20 012"; expected = "\u1a20 \u1a90\u1a91\u1a92"; checkResult("Range.TAI_THAM_THAM", ns, given, expected); ns = getContextualShaper(EnumSet.of(Range.MEETEI_MAYEK)); given = "\uabc0 012"; expected = "\uabc0 \uabf0\uabf1\uabf2"; checkResult("Range.MEETEI_MAYEK", ns, given, expected); }
public static void main(String[] args) { NumericShaper ns1 = getContextualShaper(ARABIC | TAMIL, TAMIL); NumericShaper ns2 = getContextualShaper( EnumSet.of(Range.ARABIC, Range.TAMIL), Range.TAMIL); NumericShaper ns3 = getContextualShaper( EnumSet.of(Range.ARABIC, Range.TAMIL), Range.TAMIL); NumericShaper ns4 = getContextualShaper( EnumSet.of(Range.ARABIC, Range.TAMIL), Range.ARABIC); if (!ns1.equals(ns2)) { throw new RuntimeException("ns1 != ns2: ns1=" + ns1 + ", ns2=" + ns2); } if (!ns2.equals(ns1)) { throw new RuntimeException("ns2 != ns1: ns1=" + ns1 + ", ns2=" + ns2); } if (!ns2.equals(ns3)) { throw new RuntimeException("ns2 != ns3: ns2=" + ns2 + ", ns3=" + ns3); } if (ns1.equals(ns4)) { throw new RuntimeException("ns1 == ns4: ns1=" + ns1 + ", ns4=" + ns4); } if (ns2.equals(ns4)) { throw new RuntimeException("ns2 == ns4: ns2=" + ns2 + ", ns4=" + ns4); } }
private static void test8032446() { NumericShaper ns = getContextualShaper(EnumSet.of(Range.SINHALA)); String given = "\u0d85 012"; String expected = "\u0d85 \u0de6\u0de7\u0de8"; checkResult("Range.SINHALA", ns, given, expected); ns = getContextualShaper(EnumSet.of(Range.MYANMAR_TAI_LAING)); given = "\ua9e2 012"; expected = "\ua9e2 \ua9f0\ua9f1\ua9f2"; checkResult("Range.MYANMAR_TAI_LAING", ns, given, expected); }