1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.i18n.filter;
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * HTML Filter
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class HTMLFilter implements Filter
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String doFilter(String input)
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StringBuffer buf = new StringBuffer(input);
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 0;
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (i < buf.length())
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            char ch = buf.charAt(i);
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            switch (ch)
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '<':
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#60");
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '>':
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#62");
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '(':
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#40");
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case ')':
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#41");
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '#':
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#35");
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '&':
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#38");
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '\"':
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#34");
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '\'':
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#39");
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '%':
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#37");
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case ';':
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#59");
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '+':
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#43");
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case '-':
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                buf.replace(i,i+1,"&#45");
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            default:
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                i -= 3;
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            i += 4;
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return buf.toString();
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
64