PageRenderTime 39ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/framework/java/jad/android/text/util/Rfc822Tokenizer.java

https://bitbucket.org/chameleonos/miui_frameworks
Java | 248 lines | 230 code | 13 blank | 5 comment | 98 complexity | ae7c4b3db0784313faf08654f74c016a MD5 | raw file
  1. // Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
  2. // Jad home page: http://www.geocities.com/kpdus/jad.html
  3. // Decompiler options: packimports(3) nonlb
  4. package android.text.util;
  5. import java.util.ArrayList;
  6. import java.util.Collection;
  7. // Referenced classes of package android.text.util:
  8. // Rfc822Token
  9. public class Rfc822Tokenizer
  10. implements android.widget.MultiAutoCompleteTextView.Tokenizer {
  11. public Rfc822Tokenizer() {
  12. }
  13. private static void crunch(StringBuilder stringbuilder) {
  14. int i = 0;
  15. int j;
  16. for(j = stringbuilder.length(); i < j;)
  17. if(stringbuilder.charAt(i) == 0) {
  18. if(i == 0 || i == j - 1 || stringbuilder.charAt(i - 1) == ' ' || stringbuilder.charAt(i - 1) == 0 || stringbuilder.charAt(i + 1) == ' ' || stringbuilder.charAt(i + 1) == 0) {
  19. stringbuilder.deleteCharAt(i);
  20. j--;
  21. } else {
  22. i++;
  23. }
  24. } else {
  25. i++;
  26. }
  27. for(int k = 0; k < j; k++)
  28. if(stringbuilder.charAt(k) == 0)
  29. stringbuilder.setCharAt(k, ' ');
  30. }
  31. public static void tokenize(CharSequence charsequence, Collection collection) {
  32. StringBuilder stringbuilder;
  33. StringBuilder stringbuilder1;
  34. StringBuilder stringbuilder2;
  35. int i;
  36. int j;
  37. stringbuilder = new StringBuilder();
  38. stringbuilder1 = new StringBuilder();
  39. stringbuilder2 = new StringBuilder();
  40. i = 0;
  41. j = charsequence.length();
  42. _L7:
  43. char c;
  44. if(i >= j)
  45. break; /* Loop/switch isn't completed */
  46. c = charsequence.charAt(i);
  47. if(c != ',' && c != ';') goto _L2; else goto _L1
  48. _L1:
  49. for(i++; i < j && charsequence.charAt(i) == ' '; i++);
  50. crunch(stringbuilder);
  51. if(stringbuilder1.length() <= 0) goto _L4; else goto _L3
  52. _L3:
  53. collection.add(new Rfc822Token(stringbuilder.toString(), stringbuilder1.toString(), stringbuilder2.toString()));
  54. _L5:
  55. stringbuilder.setLength(0);
  56. stringbuilder1.setLength(0);
  57. stringbuilder2.setLength(0);
  58. continue; /* Loop/switch isn't completed */
  59. _L4:
  60. if(stringbuilder.length() > 0)
  61. collection.add(new Rfc822Token(null, stringbuilder.toString(), stringbuilder2.toString()));
  62. if(true) goto _L5; else goto _L2
  63. _L2:
  64. if(c == '"') {
  65. i++;
  66. do {
  67. if(i >= j)
  68. continue; /* Loop/switch isn't completed */
  69. char c3 = charsequence.charAt(i);
  70. if(c3 == '"') {
  71. i++;
  72. continue; /* Loop/switch isn't completed */
  73. }
  74. if(c3 == '\\') {
  75. if(i + 1 < j)
  76. stringbuilder.append(charsequence.charAt(i + 1));
  77. i += 2;
  78. } else {
  79. stringbuilder.append(c3);
  80. i++;
  81. }
  82. } while(true);
  83. }
  84. if(c == '(') {
  85. int k = 1;
  86. i++;
  87. while(i < j && k > 0) {
  88. char c2 = charsequence.charAt(i);
  89. if(c2 == ')') {
  90. if(k > 1)
  91. stringbuilder2.append(c2);
  92. k--;
  93. i++;
  94. } else
  95. if(c2 == '(') {
  96. stringbuilder2.append(c2);
  97. k++;
  98. i++;
  99. } else
  100. if(c2 == '\\') {
  101. if(i + 1 < j)
  102. stringbuilder2.append(charsequence.charAt(i + 1));
  103. i += 2;
  104. } else {
  105. stringbuilder2.append(c2);
  106. i++;
  107. }
  108. }
  109. continue; /* Loop/switch isn't completed */
  110. }
  111. if(c == '<') {
  112. i++;
  113. do {
  114. if(i >= j)
  115. continue; /* Loop/switch isn't completed */
  116. char c1 = charsequence.charAt(i);
  117. if(c1 == '>') {
  118. i++;
  119. continue; /* Loop/switch isn't completed */
  120. }
  121. stringbuilder1.append(c1);
  122. i++;
  123. } while(true);
  124. }
  125. if(c == ' ') {
  126. stringbuilder.append('\0');
  127. i++;
  128. } else {
  129. stringbuilder.append(c);
  130. i++;
  131. }
  132. if(true) goto _L7; else goto _L6
  133. _L6:
  134. crunch(stringbuilder);
  135. if(stringbuilder1.length() <= 0) goto _L9; else goto _L8
  136. _L8:
  137. collection.add(new Rfc822Token(stringbuilder.toString(), stringbuilder1.toString(), stringbuilder2.toString()));
  138. _L11:
  139. return;
  140. _L9:
  141. if(stringbuilder.length() > 0)
  142. collection.add(new Rfc822Token(null, stringbuilder.toString(), stringbuilder2.toString()));
  143. if(true) goto _L11; else goto _L10
  144. _L10:
  145. }
  146. public static Rfc822Token[] tokenize(CharSequence charsequence) {
  147. ArrayList arraylist = new ArrayList();
  148. tokenize(charsequence, ((Collection) (arraylist)));
  149. return (Rfc822Token[])arraylist.toArray(new Rfc822Token[arraylist.size()]);
  150. }
  151. public int findTokenEnd(CharSequence charsequence, int i) {
  152. int j = charsequence.length();
  153. int k = i;
  154. label0:
  155. do {
  156. char c;
  157. label1:
  158. {
  159. if(k < j) {
  160. c = charsequence.charAt(k);
  161. if(c != ',' && c != ';')
  162. break label1;
  163. }
  164. return k;
  165. }
  166. if(c == '"') {
  167. k++;
  168. do {
  169. if(k >= j)
  170. continue label0;
  171. char c2 = charsequence.charAt(k);
  172. if(c2 == '"') {
  173. k++;
  174. continue label0;
  175. }
  176. if(c2 == '\\' && k + 1 < j)
  177. k += 2;
  178. else
  179. k++;
  180. } while(true);
  181. }
  182. if(c == '(') {
  183. int l = 1;
  184. k++;
  185. while(k < j && l > 0) {
  186. char c1 = charsequence.charAt(k);
  187. if(c1 == ')') {
  188. l--;
  189. k++;
  190. } else
  191. if(c1 == '(') {
  192. l++;
  193. k++;
  194. } else
  195. if(c1 == '\\' && k + 1 < j)
  196. k += 2;
  197. else
  198. k++;
  199. }
  200. continue;
  201. }
  202. if(c == '<') {
  203. k++;
  204. do {
  205. if(k >= j)
  206. continue label0;
  207. if(charsequence.charAt(k) == '>') {
  208. k++;
  209. continue label0;
  210. }
  211. k++;
  212. } while(true);
  213. }
  214. k++;
  215. } while(true);
  216. }
  217. public int findTokenStart(CharSequence charsequence, int i) {
  218. int j = 0;
  219. int k = 0;
  220. do {
  221. if(k >= i)
  222. break;
  223. k = findTokenEnd(charsequence, k);
  224. if(k < i) {
  225. for(k++; k < i && charsequence.charAt(k) == ' '; k++);
  226. if(k < i)
  227. j = k;
  228. }
  229. } while(true);
  230. return j;
  231. }
  232. public CharSequence terminateToken(CharSequence charsequence) {
  233. return (new StringBuilder()).append(charsequence).append(", ").toString();
  234. }
  235. }