1 /* Copyright 2002, 2003 Elliotte Rusty Harold
2 
3    This library is free software; you can redistribute it and/or modify
4    it under the terms of version 2.1 of the GNU Lesser General Public
5    License as published by the Free Software Foundation.
6 
7    This library is distributed in the hope that it will be useful,
8    but WITHOUT ANY WARRANTY; without even the implied warranty of
9    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10    GNU Lesser General Public License for more details.
11 
12    You should have received a copy of the GNU Lesser General Public
13    License along with this library; if not, write to the
14    Free Software Foundation, Inc., 59 Temple Place, Suite 330,
15    Boston, MA 02111-1307  USA
16 
17    You can contact Elliotte Rusty Harold by sending e-mail to
18    elharo@ibiblio.org. Please include the word "XOM" in the
19    subject line. The XOM home page is located at http://www.xom.nu/
20 */
21 
22 package nu.xom;
23 
24 import java.io.Writer;
25 
26 /**
27  * <p>
28  *   ISO 8859-6, ASCII plus Arabic
29  * </p>
30  *
31  * @author Elliotte Rusty Harold
32  * @version 1.0
33  *
34  */
35 class ISOArabicWriter extends TextWriter {
36 
ISOArabicWriter(Writer out, String encoding)37     ISOArabicWriter(Writer out, String encoding) {
38         super(out, encoding);
39     }
40 
41     /**
42      * @see nu.xom.TextWriter#needsEscaping(char)
43      */
needsEscaping(char c)44     boolean needsEscaping(char c) {
45         if (c <= 0xA0) return false;
46         switch (c) {
47             case 0x060C: return false; // ARABIC COMMA
48             case 0x060D: return true;  // place holder to allow table lookup
49             case 0x060E: return true;  // place holder to allow table lookup
50             case 0x060F: return true;  // place holder to allow table lookup
51             case 0x0610: return true;  // place holder to allow table lookup
52             case 0x0611: return true;  // place holder to allow table lookup
53             case 0x0612: return true;  // place holder to allow table lookup
54             case 0x0613: return true;  // place holder to allow table lookup
55             case 0x0614: return true;  // place holder to allow table lookup
56             case 0x0615: return true;  // place holder to allow table lookup
57             case 0x0616: return true;  // place holder to allow table lookup
58             case 0x0617: return true;  // place holder to allow table lookup
59             case 0x0618: return true;  // place holder to allow table lookup
60             case 0x0619: return true;  // place holder to allow table lookup
61             case 0x061A: return true;  // place holder to allow table lookup
62             case 0x061B: return false; // ARABIC SEMICOLON
63             case 0x061C: return true;  // place holder to allow table lookup
64             case 0x061D: return true;  // place holder to allow table lookup
65             case 0x061E: return true;  // place holder to allow table lookup
66             case 0x061F: return false; // ARABIC QUESTION MARK
67             case 0x0620: return true;  // place holder to allow table lookup
68             case 0x0621: return false; // ARABIC LETTER HAMZA
69             case 0x0622: return false; // ARABIC LETTER ALEF WITH MADDA ABOVE
70             case 0x0623: return false; // ARABIC LETTER ALEF WITH HAMZA ABOVE
71             case 0x0624: return false; // ARABIC LETTER WAW WITH HAMZA ABOVE
72             case 0x0625: return false; // ARABIC LETTER ALEF WITH HAMZA BELOW
73             case 0x0626: return false; // ARABIC LETTER YEH WITH HAMZA ABOVE
74             case 0x0627: return false; // ARABIC LETTER ALEF
75             case 0x0628: return false; // ARABIC LETTER BEH
76             case 0x0629: return false; // ARABIC LETTER TEH MARBUTA
77             case 0x062A: return false; // ARABIC LETTER TEH
78             case 0x062B: return false; // ARABIC LETTER THEH
79             case 0x062C: return false; // ARABIC LETTER JEEM
80             case 0x062D: return false; // ARABIC LETTER HAH
81             case 0x062E: return false; // ARABIC LETTER KHAH
82             case 0x062F: return false; // ARABIC LETTER DAL
83             case 0x0630: return false; // ARABIC LETTER THAL
84             case 0x0631: return false; // ARABIC LETTER REH
85             case 0x0632: return false; // ARABIC LETTER ZAIN
86             case 0x0633: return false; // ARABIC LETTER SEEN
87             case 0x0634: return false; // ARABIC LETTER SHEEN
88             case 0x0635: return false; // ARABIC LETTER SAD
89             case 0x0636: return false; // ARABIC LETTER DAD
90             case 0x0637: return false; // ARABIC LETTER TAH
91             case 0x0638: return false; // ARABIC LETTER ZAH
92             case 0x0639: return false; // ARABIC LETTER AIN
93             case 0x063A: return false; // ARABIC LETTER GHAIN
94             case 0x063B: return true;  // place holder to allow table lookup
95             case 0x063C: return true;  // place holder to allow table lookup
96             case 0x063D: return true;  // place holder to allow table lookup
97             case 0x063E: return true;  // place holder to allow table lookup
98             case 0x063F: return true;  // place holder to allow table lookup
99             case 0x0640: return false; // ARABIC TATWEEL
100             case 0x0641: return false; // ARABIC LETTER FEH
101             case 0x0642: return false; // ARABIC LETTER QAF
102             case 0x0643: return false; // ARABIC LETTER KAF
103             case 0x0644: return false; // ARABIC LETTER LAM
104             case 0x0645: return false; // ARABIC LETTER MEEM
105             case 0x0646: return false; // ARABIC LETTER NOON
106             case 0x0647: return false; // ARABIC LETTER HEH
107             case 0x0648: return false; // ARABIC LETTER WAW
108             case 0x0649: return false; // ARABIC LETTER ALEF MAKSURA
109             case 0x064A: return false; // ARABIC LETTER YEH
110             case 0x064B: return false; // ARABIC FATHATAN
111             case 0x064C: return false; // ARABIC DAMMATAN
112             case 0x064D: return false; // ARABIC KASRATAN
113             case 0x064E: return false; // ARABIC FATHA
114             case 0x064F: return false; // ARABIC DAMMA
115             case 0x0650: return false; // ARABIC KASRA
116             case 0x0651: return false; // ARABIC SHADDA
117             case 0x0652: return false; // ARABIC SUKUN
118         }
119         switch (c) { // random overlap with Latin-1
120             case 0x00A4: return false; // CURRENCY SIGN
121             case 0x00AD: return false; // SOFT HYPHEN
122         }
123 
124         return true;
125 
126     }
127 
128 }