1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under 4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution, 5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html 6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: Strings.java,v 1.1.1.1 2004/05/09 16:57:55 vlad_r Exp $ 8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.util; 10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.File; 12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.IOException; 13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.ArrayList; 14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.HashSet; 15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.List; 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Set; 17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.StringTokenizer; 18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/** 21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2003 22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic 24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectabstract class Strings 25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{ 26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // public: ................................................................ 27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static final String WHITE_SPACE = " \t\r\n"; 30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project //TODO: add duplicate removal 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String toListForm (final String [] strings, final char delimiter) 34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (strings == null) return null; 36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (strings.length == 0) return ""; 37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringBuffer s = new StringBuffer (); 39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0, iLimit = strings.length; i < iLimit; ++ i) 40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (i != 0) s.append (delimiter); 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project s.append (strings [i]); 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return s.toString (); 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String [] removeDuplicates (final String [] strings, final boolean removeNull) 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (strings == null) return strings; 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int length = strings.length; 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (length == 0) return strings; 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final Set /* String */ _strings = new HashSet (length); 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final List /* String */ _result = new ArrayList (length); 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < length; ++ i) 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String s = strings [i]; 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (removeNull && (s == null)) continue; 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (_strings.add (s)) _result.add (s); 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int resultLength = _result.size (); 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (resultLength == length) 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return strings; 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String [] result = new String [resultLength]; 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _result.toArray (result); 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return result; 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Also removes duplicates. 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param strings 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param delimiters 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param removeNull 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String [] merge (final String [] strings, final String delimiters, final boolean removeNull) 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (strings == null) return strings; 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int length = strings.length; 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (length == 0) return strings; 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if ((delimiters == null) || (delimiters.length () == 0)) 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new IllegalArgumentException ("null/empty input: delimiters"); 95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final Set /* String */ _strings = new HashSet (length); 97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final List /* String */ _result = new ArrayList (length); 98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < length; ++ i) 100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String s = strings [i]; 102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (removeNull && (s == null)) continue; 103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringTokenizer tokenizer = new StringTokenizer (s, delimiters); 105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project while (tokenizer.hasMoreTokens ()) 106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String ss = tokenizer.nextToken (); 108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (_strings.add (ss)) _result.add (ss); 109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String [] result = new String [_result.size ()]; 113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _result.toArray (result); 114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return result; 116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Removes duplicates. 120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param delimiters 122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param processAtFiles 123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return 124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IOException 125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String [] mergeAT (final String [] strings, final String delimiters, final boolean processAtFiles) 127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throws IOException 128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (! processAtFiles) 130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return merge (strings, delimiters, true); 131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (strings == null) return strings; 134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int length = strings.length; 136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (length == 0) return strings; 137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if ((delimiters == null) || (delimiters.length () == 0)) 139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new IllegalArgumentException ("null/empty input: delimiters"); 140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final Set /* String */ _strings = new HashSet (length); 142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final List /* String */ _result = new ArrayList (length); 143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < length; ++ i) 145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String s = strings [i]; 147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (s == null) continue; 148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringTokenizer tokenizer = new StringTokenizer (s, delimiters); 150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project while (tokenizer.hasMoreTokens ()) 151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String ss = tokenizer.nextToken (); 153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (ss.startsWith ("@")) 155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String [] fileList = Files.readFileList (new File (ss.substring (1))); 157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int j = 0; j < fileList.length; ++ j) 158f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 159f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String sss = fileList [j]; 160f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (_strings.add (sss)) _result.add (sss); 161f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 162f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 163f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else if (_strings.add (ss)) _result.add (ss); 164f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 165f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 166f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 167f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final String [] result = new String [_result.size ()]; 168f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _result.toArray (result); 169f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 170f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return result; 171f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 172f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 173f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 174f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 175f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * HTML attribute values can be quoted using either double or single quotes. 176f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Depending on the type of quote used, the other kind can be used unescaped 177f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * within the attribute value. This method assumes that only double quotes 178f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * are used for delimiting, hence this is the only kind that is escaped. 179f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 180f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static void HTMLEscape (final String s, final StringBuffer append) 181f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 182f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (s == null) throw new IllegalArgumentException ("null input: s"); 183f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (append == null) throw new IllegalArgumentException ("null input: append"); 184f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 185f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final char [] chars; 186f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (USE_GET_CHARS) chars = s.toCharArray (); 187f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 188f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0, iLimit = s.length (); i < iLimit; ++ i) 189f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 190f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final char c = USE_GET_CHARS ? chars [i] : s.charAt (i); 191f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 192f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project switch (c) 193f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 194f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '<': 195f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("<"); 196f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 197f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 198f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '>': 199f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append (">"); 200f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 201f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 202f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '"': 203f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("""); 204f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 205f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 206f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '&': 207f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("&"); 208f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 209f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 210f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project default: 211f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append (c); 212f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 213f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } // end of switch 214f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 215f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 216f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 217f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 218f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Same as {@link #HTMLEscape(String, StringBuffer)} but also replaces spaces 219f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * with " "'s, which is handy for escaping code. 220f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 221f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static void HTMLEscapeNB (final String s, final StringBuffer append) 222f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 223f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (s == null) throw new IllegalArgumentException ("null input: s"); 224f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (append == null) throw new IllegalArgumentException ("null input: append"); 225f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 226f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final char [] chars; 227f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (USE_GET_CHARS) chars = s.toCharArray (); 228f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 229f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0, iLimit = s.length (); i < iLimit; ++ i) 230f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 231f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final char c = USE_GET_CHARS ? chars [i] : s.charAt (i); 232f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 233f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project switch (c) 234f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 235f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case ' ': 236f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ('\u00A0'); // don't use " ": a waste of space 237f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 238f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 239f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '\t': 240f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0"); // TODO: define a prop for this 241f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 242f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 243f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// case '-': 244f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// append.append ((char) 0x8209); 245f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// break; 246f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 247f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '<': 248f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("<"); 249f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 250f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 251f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '>': 252f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append (">"); 253f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 254f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 255f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '"': 256f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("""); 257f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 258f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 259f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project case '&': 260f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append ("&"); 261f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project break; 262f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 263f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project default: 264f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project append.append (c); 265f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 266f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } // end of switch 267f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 268f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 269f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 270f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String HTMLEscape (final String s) 271f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 272f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringBuffer buf = new StringBuffer (); 273f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project HTMLEscape (s, buf); 274f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 275f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return buf.toString (); 276f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 277f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 278f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public static String HTMLEscapeSP (final String s) 279f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 280f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringBuffer buf = new StringBuffer (); 281f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project HTMLEscapeNB (s, buf); 282f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 283f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return buf.toString (); 284f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 285f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 286f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // protected: ............................................................. 287f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 288f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // package: ............................................................... 289f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 290f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // private: ............................................................... 291f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 292f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 293f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private Strings () {} // prevent subclassing 294f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 295f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 296f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private static final boolean USE_GET_CHARS = true; 297f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 298f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class 299f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------