JapanesePhoneNumberFormatter.java revision f013e1afd1e68af5e3b868c26a653bbfb39538f8
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/*
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Copyright (C) 2008 The Android Open Source Project
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Licensed under the Apache License, Version 2.0 (the "License");
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * you may not use this file except in compliance with the License.
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * You may obtain a copy of the License at
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *      http://www.apache.org/licenses/LICENSE-2.0
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Unless required by applicable law or agreed to in writing, software
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * distributed under the License is distributed on an "AS IS" BASIS,
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * See the License for the specific language governing permissions and
1407c51d09d4b61891cdc37f44bb332dc286b4de2fBenjamin Kramer * limitations under the License.
15b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton */
16b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpackage android.telephony;
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonimport android.text.Editable;
20ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/*
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Japanese Phone number formatting rule is a bit complicated.
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Here are some valid examples:
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *
25e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton * 022-229-1234 0223-23-1234 022-301-9876 015-482-7849 0154-91-3478
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 01547-5-4534 090-1234-1234 080-0123-6789
27861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice * 0800-000-9999 0570-000-000 0276-00-0000
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * As you can see, there is no straight-forward rule here.
30a9385537809ef342c843c5ab972e513742652047Greg Clayton * In order to handle this, a big array is prepared.
317508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham */
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* package */ class JapanesePhoneNumberFormatter {
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    private static short FORMAT_MAP[] = {
346e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    -100, 10, 220, -15, 410, 530, -15, 670, 780, 1060,
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -100, -25, 20, 40, 70, 100, 150, 190, 200, 210,
36a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan    -36, -100, -100, -35, -35, -35, 30, -100, -100, -100,
37f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan    -35, -35, -35, -35, -35, -35, -35, -45, -35, -35,
38ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton    -100, -100, -100, -35, -35, -35, -35, 50, -35, 60,
391c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton    -35, -35, -45, -35, -45, -35, -35, -45, -35, -35,
40cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste    -35, -35, -45, -35, -35, -35, -35, -45, -45, -35,
41e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -100, -100, -35, -35, -35, 80, 90, -100, -100, -100,
42e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -35, -35, -35, -35, -35, -45, -45, -35, -35,
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -35, -35, -35, -35, -35, -35, -45, -35, -35, -35,
44613b8739a4d489b7f1c571288d5786768c024205Greg Clayton    -25, -25, -35, -35, 110, 120, 130, -35, 140, -25,
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -35, -25, -35, -35, -35, -35, -35, -45, -25, -35,
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -35, -25, -35, -35, -35, -35, -35, -25, -45, -35,
47464c6161464694412b7472129e789248f1cf21b9Greg Clayton    -35, -35, -35, -35, -45, -35, -35, -35, -35, -35,
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -35, -35, -35, -35, -35, -35, -45, -45, -35, -35,
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -100, -100, -35, 160, 170, 180, -35, -35, -100, -100,
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    -35, -35, -45, -35, -45, -45, -35, -35, -35, -35,
51c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -35, -35, -35, -35, -35, -35, -35, -45, -35,
52c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -35, -35, -35, -45, -45, -45, -35, -45, -35,
53c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -25, -35, -35, -35, -35, -35, -25, -35, -35,
54c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -25, -35, -35, -35, -35, -35, -35, -25, -25,
55c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -35, -35, -35, -35, -35, -25, -35, -35, -25,
56c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -100, -100, 230, 250, 260, 270, 320, 340, 360, 390,
57c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -25, -25, 240, -35, -35, -35, -25, -35, -35,
5886827fbccc9a4d1f9993d74940f724d63d826e45Jim Ingham    -25, -35, -35, -35, -25, -25, -25, -25, -25, -25,
59c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -25, -25, -35, -35, -35, -25, -35, -35, -25,
60c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -35, -35, -35, -35, -25, -35, -35, -35, -25,
61c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -25, -25, -25, -35, 280, 290, 300, 310, -35,
62c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -25, -25, -25, -25, -25, -25, -35, -35, -25,
63c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton    -25, -25, -35, -35, -35, -25, -25, -25, -25, -25,
65c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
66c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -35, -25, -35, 330, -35, -35, -35, -35, -35,
676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    -25, -35, -35, -35, -35, -35, -25, -25, -25, -25,
68c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -25, -25, -25, -35, -25, -35, -35, 350, -35,
69c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -25, -25,
702e7f313dc473b036788319690116b324cb44b765Greg Clayton    -35, -25, -35, 370, -35, -35, -25, -35, -35, 380,
712e7f313dc473b036788319690116b324cb44b765Greg Clayton    -25, -35, -35, -25, -25, -35, -35, -35, -35, -35,
722e7f313dc473b036788319690116b324cb44b765Greg Clayton    -25, -35, -25, -25, -25, -25, -35, -35, -35, -35,
732e7f313dc473b036788319690116b324cb44b765Greg Clayton    -25, -35, -25, 400, -35, -35, -35, -35, -25, -35,
742e7f313dc473b036788319690116b324cb44b765Greg Clayton    -25, -35, -35, -35, -35, -25, -25, -25, -25, -25,
752e7f313dc473b036788319690116b324cb44b765Greg Clayton    -15, -15, 420, 460, -25, -25, 470, 480, 500, 510,
76b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -15, -25, 430, -25, -25, -25, -25, -25, 440, 450,
77b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
78b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -25, -25, -35, -35, -25, -25, -25, -35, -35, -35,
79b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -15, -25, -15, -15, -15, -15, -15, -25, -25, -15,
80b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -25, -25, -25, -25, -25, -25, -35, -25, -35, -35,
81b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -35, -25, -25, -35, -25, -35, -35, -35, -25, -25,
82b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    490, -15, -25, -25, -25, -35, -35, -25, -35, -35,
83b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -15, -35, -35, -35, -35, -35, -35, -35, -35, -15,
84b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
85b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -25, -25, -25, -35, -35, -35, -25, -25, -25, 520,
86b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -100, -100, -45, -100, -45, -100, -45, -100, -45, -100,
87b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham    -25, -100, -25, 540, 580, 590, 600, 610, 630, 640,
88090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -25, -35, -35, -35, -25, -25, -35, -35, -35, 550,
89090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -35, -35, -25, -25, -25, -25, 560, 570, -25, -35,
90090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -35, -35, -35, -35, -25, -25, -25, -25, -25, -25,
91090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -25, -25, -25, -25, -35, -25, -25, -35, -25, -25,
92090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -25, -25, -25, -25, -35, -35, -25, -35, -35, -25,
93090f83176695d86197b0e86b67dee4160ec5003dJim Ingham    -35, -35, -25, -35, -35, -35, -35, -35, -35, -25,
94761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -100, -35, -35, -35, -35, -35, -35, -35, -35, -35,
95761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -36, -100, -35, -35, -35, -35, 620, -35, -35, -100,
96761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -35, -35, -35, -35, -35, -35, -35, -35, -35, -45,
97761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -25, -35, -25, -25, -35, -35, -35, -35, -25, -25,
98761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -25, -25, -25, -25, -35, -35, -35, 650, -35, 660,
99761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    -35, -35, -35, -35, -45, -35, -35, -35, -35, -45,
100c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -35, -35, -35, -35, -35, -35, -35, -35, -35, -25,
101c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton    -26, -100, 680, 690, 700, -25, 720, 730, -25, 740,
102102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    -25, -35, -25, -25, -25, -35, -25, -25, -25, -25,
1036e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    -25, -25, -25, -25, -25, -35, -35, -35, -35, -35,
104b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -100, -35, -35, -35, -35, 710, -35, -35, -35,
105b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -35, -35, -35, -35, -35, -35, -45, -35,
106b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -25, -35, -25, -35, -25, -35, -35, -35, -35, -25,
107b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -35, -35, -35, -25, -35, -25, -35, -35,
108b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -25, -25, 750, 760, 770, -35, -35, -35,
109b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -25, -35, -25, -25, -25, -25, -35, -35, -35, -25,
110b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -25, -35, -35, -35, -35, -25, -25, -35, -35, -25,
111b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -25, -35, -35, -35, -35, -35, -25, -25, -35, -35,
112e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    790, -100, 800, 850, 900, 920, 940, 1030, 1040, 1050,
113e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -36, -26, -26, -26, -26, -26, -26, -26, -26, -26,
114e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -25, -25, -35, 810, -25, -35, -35, -25, 820,
115e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -35, -25, -25, -35, -35, -35, -35, -35, -25,
116ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton    -25, -35, 830, -35, 840, -35, -25, -35, -35, -25,
117b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
118b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -100, -25, -25, -25, -100, -100, -100, -100, -100, -100,
119444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -25, -25, -35, -35, -35, -35, 860, -35, 870, 880,
120444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
121e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -35, -35, -35, -35, -35, -35, -45, -45, -35,
122b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -100, -100, -100, -100, -100, -100, 890, -100, -100, -100,
123e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -45, -45, -25, -45, -45, -25, -45, -45, -45,
124e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -25, -25, -25, -25, -35, -35, 910, -35, -25,
125b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -35, -35, -35, -35, -35, -45, -35, -35,
126e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -100, 930, -35, -35, -35, -35, -35, -35, -35, -35,
127e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -100, -100, -45, -100, -45, -100, -100, -100, -100, -100,
128e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -25, -25, 950, -25, 970, 990, -35, 1000, 1010,
129b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -35, -35, -35, -35, 960, -35, -35, -35,
130b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -45, -45, -45, -45, -45, -45, -35, -45, -45, -45,
131b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -25, -35, -35, 980, -35, -35, -35, -35,
132444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -100, -100, -25, -25, -100, -100, -100, -100, -100, -100,
133444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
134e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -35, -35, -25,
135b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -25, -35, -35, -35, -25, -25, -35, -35, -35, 1020,
136e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -45, -45, -35, -35, -45, -45, -45, -45, -45, -45,
137e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -25, -25, -25, -25, -35, -25, -35, -25, -35,
138e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -25, -25, -35, -35, -35, -25, -35, -25, -35,
139e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -25, -35, -35, -35, -35, -35, -35, -35, -25,
140e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -26, -100, 1070, 1080, 1090, 1110, 1120, 1130, 1140, 1160,
141e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
142ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
143b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -100, -35, -35, -35, -100, -35, -35, -35, 1100,
144b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    -35, -35, -35, -35, -35, -35, -45, -35, -35, -35,
145444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -35, -25, -35, -25, -35, -35, -35, -35, -25, -35,
146444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    -25, -25, -25, -25, -35, -35, -35, -35, -35, -35,
147e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -25, -35, -35, -35, -25, -25, -35, -35, -35,
148e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    1150, -25, -35, -35, -35, -35, -35, -35, -25, -25,
149e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -35, -45, -35, -35, -35, -35, -35, -35, -35,
150e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, 1170, -25, -35, 1180, -35, 1190, -35, -25, -25,
151e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -100, -100, -45, -45, -100, -100, -100, -100, -100, -100,
152e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -25, -35, -35, -35, -35, -35, -35, -25, -25, -35,
153e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    -35, -35, -35, -35, -35, -35, -35, -35, -35, -45};
154ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton
155e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    public static void format(Editable text) {
156b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton        // Here, "root" means the position of "'":
157e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        // 0'3, 0'90, and +81'-90
158e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        // (dash will be deleted soon, so it is actually +81'90).
159e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        int rootIndex = 1;
160ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton        int length = text.length();
161e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        if (length > 3
162e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton                && text.subSequence(0, 3).toString().equals("+81")) {
163ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton            rootIndex = 3;
164ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton        } else if (length < 1 || text.charAt(0) != '0') {
165ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton            return;
166ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton        }
167e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
16836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        CharSequence saved = text.subSequence(0, length);
16936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton
17036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        // Strip the dashes first, as we're going to add them back
17136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        int i = 0;
17236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        while (i < text.length()) {
17336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton            if (text.charAt(i) == '-') {
17436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton                text.delete(i, i + 1);
17536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton            } else {
17636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton                i++;
17736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton            }
17836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        }
179c86723f0a71f5d929f4543c544d9255da52ea49dHan Ming Ong
18036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        length = text.length();
18136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        int dashposition;
18236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton
18336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        i = rootIndex;
18436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        int base = 0;
18536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton        while (i < length) {
18636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton            char ch = text.charAt(i);
18736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton            if (!Character.isDigit(ch)) {
188ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton                text.replace(0, length, saved);
189ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton                return;
19024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            }
191ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton            short value = FORMAT_MAP[base + ch - '0'];
19224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            if (value < 0) {
19324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton                if (value <= -100) {
194a733c04608cc94592a15d27583529588e19db552Greg Clayton                    text.replace(0, length, saved);
195b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                    return;
196a733c04608cc94592a15d27583529588e19db552Greg Clayton                }
197b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                int dashPos2 = rootIndex + (Math.abs(value) % 10);
198a733c04608cc94592a15d27583529588e19db552Greg Clayton                if (length > dashPos2) {
199b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                    text.insert(dashPos2, "-");
200a733c04608cc94592a15d27583529588e19db552Greg Clayton                }
201b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                int dashPos1 = rootIndex + (Math.abs(value) / 10);
202a733c04608cc94592a15d27583529588e19db552Greg Clayton                if (length > dashPos1) {
203b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                    text.insert(dashPos1, "-");
204a733c04608cc94592a15d27583529588e19db552Greg Clayton                }
20524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton                break;
20624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton            } else {
207b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                base = value;
20824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton                i++;
209b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            }
21024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        }
21124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
21224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        if (length > 3 && rootIndex == 3) {
213b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            text.insert(rootIndex, "-");
21424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        }
215b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    }
21624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}