JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / JU / CifDataParser.js
1 Clazz.declarePackage ("JU");\r
2 Clazz.load (["javajs.api.GenericCifDataParser", "java.util.Hashtable", "JU.SB"], "JU.CifDataParser", ["JU.Lst", "$.PT"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.reader = null;\r
5 this.br = null;\r
6 this.line = null;\r
7 this.str = null;\r
8 this.ich = 0;\r
9 this.cch = 0;\r
10 this.wasUnQuoted = false;\r
11 this.strPeeked = null;\r
12 this.ichPeeked = 0;\r
13 this.fieldCount = 0;\r
14 this.loopData = null;\r
15 this.fileHeader = null;\r
16 this.isHeader = true;\r
17 this.nullString = "\0";\r
18 this.fields = null;\r
19 Clazz.instantialize (this, arguments);\r
20 }, JU, "CifDataParser", null, javajs.api.GenericCifDataParser);\r
21 Clazz.prepareFields (c$, function () {\r
22 this.fileHeader =  new JU.SB ();\r
23 });\r
24 Clazz.defineMethod (c$, "setNullValue", \r
25 function (nullString) {\r
26 this.nullString = nullString;\r
27 }, "~S");\r
28 Clazz.makeConstructor (c$, \r
29 function () {\r
30 });\r
31 Clazz.overrideMethod (c$, "getLoopData", \r
32 function (i) {\r
33 return this.loopData[i];\r
34 }, "~N");\r
35 Clazz.overrideMethod (c$, "getFieldCount", \r
36 function () {\r
37 return this.fieldCount;\r
38 });\r
39 Clazz.overrideMethod (c$, "getField", \r
40 function (i) {\r
41 return this.fields[i];\r
42 }, "~N");\r
43 Clazz.overrideMethod (c$, "set", \r
44 function (reader, br) {\r
45 this.reader = reader;\r
46 this.br = br;\r
47 return this;\r
48 }, "javajs.api.GenericLineReader,java.io.BufferedReader");\r
49 Clazz.overrideMethod (c$, "getFileHeader", \r
50 function () {\r
51 return this.fileHeader.toString ();\r
52 });\r
53 Clazz.overrideMethod (c$, "getAllCifData", \r
54 function () {\r
55 this.line = "";\r
56 var key;\r
57 var data = null;\r
58 var allData =  new java.util.Hashtable ();\r
59 var models =  new JU.Lst ();\r
60 allData.put ("models", models);\r
61 try {\r
62 while ((key = this.getNextToken ()) != null) {\r
63 if (key.startsWith ("global_") || key.startsWith ("data_")) {\r
64 models.addLast (data =  new java.util.Hashtable ());\r
65 data.put ("name", key);\r
66 continue;\r
67 }if (key.startsWith ("loop_")) {\r
68 this.getAllCifLoopData (data);\r
69 continue;\r
70 }if (key.charAt (0) != '_') {\r
71 System.out.println ("CIF ERROR ? should be an underscore: " + key);\r
72 } else {\r
73 var value = this.getNextToken ();\r
74 if (value == null) {\r
75 System.out.println ("CIF ERROR ? end of file; data missing: " + key);\r
76 } else {\r
77 data.put (this.fixKey (key), value);\r
78 }}}\r
79 } catch (e) {\r
80 if (Clazz.exceptionOf (e, Exception)) {\r
81 } else {\r
82 throw e;\r
83 }\r
84 }\r
85 try {\r
86 if (this.br != null) this.br.close ();\r
87 } catch (e) {\r
88 if (Clazz.exceptionOf (e, Exception)) {\r
89 } else {\r
90 throw e;\r
91 }\r
92 }\r
93 return allData;\r
94 });\r
95 Clazz.defineMethod (c$, "getAllCifLoopData", \r
96  function (data) {\r
97 var key;\r
98 var keyWords =  new JU.Lst ();\r
99 while ((key = this.peekToken ()) != null && key.charAt (0) == '_') {\r
100 key = this.fixKey (this.getTokenPeeked ());\r
101 keyWords.addLast (key);\r
102 data.put (key,  new JU.Lst ());\r
103 }\r
104 this.fieldCount = keyWords.size ();\r
105 if (this.fieldCount == 0) return;\r
106 this.loopData =  new Array (this.fieldCount);\r
107 while (this.getData ()) for (var i = 0; i < this.fieldCount; i++) (data.get (keyWords.get (i))).addLast (this.loopData[i]);\r
108 \r
109 \r
110 }, "java.util.Map");\r
111 Clazz.overrideMethod (c$, "readLine", \r
112 function () {\r
113 try {\r
114 this.line = (this.reader == null ? this.br.readLine () : this.reader.readNextLine ());\r
115 if (this.line == null) return null;\r
116 if (this.isHeader) {\r
117 if (this.line.startsWith ("#")) this.fileHeader.append (this.line).appendC ('\n');\r
118  else this.isHeader = false;\r
119 }return this.line;\r
120 } catch (e) {\r
121 if (Clazz.exceptionOf (e, Exception)) {\r
122 return null;\r
123 } else {\r
124 throw e;\r
125 }\r
126 }\r
127 });\r
128 Clazz.overrideMethod (c$, "getData", \r
129 function () {\r
130 for (var i = 0; i < this.fieldCount; ++i) if ((this.loopData[i] = this.getNextDataToken ()) == null) return false;\r
131 \r
132 return (this.fieldCount > 0);\r
133 });\r
134 Clazz.overrideMethod (c$, "skipLoop", \r
135 function () {\r
136 var str;\r
137 while ((str = this.peekToken ()) != null && str.charAt (0) == '_') this.getTokenPeeked ();\r
138 \r
139 while (this.getNextDataToken () != null) {\r
140 }\r
141 });\r
142 Clazz.overrideMethod (c$, "getNextToken", \r
143 function () {\r
144 while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;\r
145 \r
146 return this.nextStrToken ();\r
147 });\r
148 Clazz.overrideMethod (c$, "getNextDataToken", \r
149 function () {\r
150 var str = this.peekToken ();\r
151 if (str == null) return null;\r
152 if (this.wasUnQuoted) if (str.charAt (0) == '_' || str.startsWith ("loop_") || str.startsWith ("data_") || str.startsWith ("stop_") || str.startsWith ("global_")) return null;\r
153 return this.getTokenPeeked ();\r
154 });\r
155 Clazz.overrideMethod (c$, "peekToken", \r
156 function () {\r
157 while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;\r
158 \r
159 var ich = this.ich;\r
160 this.strPeeked = this.nextStrToken ();\r
161 this.ichPeeked = this.ich;\r
162 this.ich = ich;\r
163 return this.strPeeked;\r
164 });\r
165 Clazz.overrideMethod (c$, "getTokenPeeked", \r
166 function () {\r
167 this.ich = this.ichPeeked;\r
168 return this.strPeeked;\r
169 });\r
170 Clazz.overrideMethod (c$, "fullTrim", \r
171 function (str) {\r
172 var pt0 = -1;\r
173 var pt1 = str.length;\r
174 while (++pt0 < pt1 && JU.PT.isWhitespace (str.charAt (pt0))) {\r
175 }\r
176 while (--pt1 > pt0 && JU.PT.isWhitespace (str.charAt (pt1))) {\r
177 }\r
178 return str.substring (pt0, pt1 + 1);\r
179 }, "~S");\r
180 Clazz.overrideMethod (c$, "toUnicode", \r
181 function (data) {\r
182 var pt;\r
183 try {\r
184 while ((pt = data.indexOf ('\\')) >= 0) {\r
185 var c = data.charCodeAt (pt + 1);\r
186 var ch = (c >= 65 && c <= 90 ? "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z".substring (c - 65, c - 64) : c >= 97 && c <= 122 ? "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6".substring (c - 97, c - 96) : "_");\r
187 data = data.substring (0, pt) + ch + data.substring (pt + 2);\r
188 }\r
189 } catch (e) {\r
190 if (Clazz.exceptionOf (e, Exception)) {\r
191 } else {\r
192 throw e;\r
193 }\r
194 }\r
195 return data;\r
196 }, "~S");\r
197 Clazz.overrideMethod (c$, "parseLoopParameters", \r
198 function (fields, fieldOf, propertyOf) {\r
199 var propertyCount = 0;\r
200 if (fields == null) {\r
201 this.fields =  new Array (100);\r
202 } else {\r
203 if (!JU.CifDataParser.htFields.containsKey (fields[0])) for (var i = fields.length; --i >= 0; ) JU.CifDataParser.htFields.put (fields[i], Integer.$valueOf (i));\r
204 \r
205 for (var i = fields.length; --i >= 0; ) fieldOf[i] = -1;\r
206 \r
207 propertyCount = fields.length;\r
208 }this.fieldCount = 0;\r
209 while (true) {\r
210 var str = this.peekToken ();\r
211 if (str == null) {\r
212 this.fieldCount = 0;\r
213 break;\r
214 }if (str.charAt (0) != '_') break;\r
215 var pt = this.fieldCount++;\r
216 str = this.fixKey (this.getTokenPeeked ());\r
217 if (fields == null) {\r
218 this.fields[propertyOf[pt] = fieldOf[pt] = pt] = str;\r
219 continue;\r
220 }var iField = JU.CifDataParser.htFields.get (str);\r
221 var i = (iField == null ? -1 : iField.intValue ());\r
222 if ((propertyOf[pt] = i) != -1) fieldOf[i] = pt;\r
223 }\r
224 if (this.fieldCount > 0) this.loopData =  new Array (this.fieldCount);\r
225 return propertyCount;\r
226 }, "~A,~A,~A");\r
227 Clazz.overrideMethod (c$, "fixKey", \r
228 function (key) {\r
229 return (JU.PT.rep (key.startsWith ("_magnetic") ? key.substring (9) : key.startsWith ("_jana") ? key.substring (5) : key, ".", "_").toLowerCase ());\r
230 }, "~S");\r
231 Clazz.defineMethod (c$, "setString", \r
232  function (str) {\r
233 this.str = this.line = str;\r
234 this.cch = (str == null ? 0 : str.length);\r
235 this.ich = 0;\r
236 }, "~S");\r
237 Clazz.defineMethod (c$, "setStringNextLine", \r
238  function () {\r
239 this.setString (this.readLine ());\r
240 if (this.line == null || this.line.length == 0) return this.line;\r
241 if (this.line.charAt (0) != ';') {\r
242 if (this.str.startsWith ("###non-st#")) this.ich = 10;\r
243 return this.line;\r
244 }this.ich = 1;\r
245 var str = '\1' + this.line.substring (1) + '\n';\r
246 while (this.readLine () != null) {\r
247 if (this.line.startsWith (";")) {\r
248 str = str.substring (0, str.length - 1) + '\1' + this.line.substring (1);\r
249 break;\r
250 }str += this.line + '\n';\r
251 }\r
252 this.setString (str);\r
253 return str;\r
254 });\r
255 Clazz.defineMethod (c$, "strHasMoreTokens", \r
256  function () {\r
257 if (this.str == null) return false;\r
258 var ch = '#';\r
259 while (this.ich < this.cch && ((ch = this.str.charAt (this.ich)) == ' ' || ch == '\t')) ++this.ich;\r
260 \r
261 return (this.ich < this.cch && ch != '#');\r
262 });\r
263 Clazz.defineMethod (c$, "nextStrToken", \r
264  function () {\r
265 if (this.ich == this.cch) return null;\r
266 var ichStart = this.ich;\r
267 var ch = this.str.charAt (ichStart);\r
268 if (ch != '\'' && ch != '"' && ch != '\1') {\r
269 this.wasUnQuoted = true;\r
270 while (this.ich < this.cch && (ch = this.str.charAt (this.ich)) != ' ' && ch != '\t') ++this.ich;\r
271 \r
272 if (this.ich == ichStart + 1) if (this.nullString != null && (this.str.charAt (ichStart) == '.' || this.str.charAt (ichStart) == '?')) return this.nullString;\r
273 var s = this.str.substring (ichStart, this.ich);\r
274 return s;\r
275 }this.wasUnQuoted = false;\r
276 var chOpeningQuote = ch;\r
277 var previousCharacterWasQuote = false;\r
278 while (++this.ich < this.cch) {\r
279 ch = this.str.charAt (this.ich);\r
280 if (previousCharacterWasQuote && (ch == ' ' || ch == '\t')) break;\r
281 previousCharacterWasQuote = (ch == chOpeningQuote);\r
282 }\r
283 if (this.ich == this.cch) {\r
284 if (previousCharacterWasQuote) return this.str.substring (ichStart + 1, this.ich - 1);\r
285 return this.str.substring (ichStart, this.ich);\r
286 }++this.ich;\r
287 return this.str.substring (ichStart + 1, this.ich - 2);\r
288 });\r
289 c$.htFields = c$.prototype.htFields =  new java.util.Hashtable ();\r
290 Clazz.defineStatics (c$,\r
291 "grABC", "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z",\r
292 "grabc", "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6");\r
293 });\r