public override void characterData(CMLStack xpath, char[] ch, int start, int length) { System.String s = new System.String(ch, start, length).Trim(); //logger.debug("Start PMP chardata (" + CurrentElement + ") :" + s); //logger.debug(" ElTitle: " + elementTitle); if (xpath.ToString().EndsWith("string/") && BUILTIN.Equals("spacegroup")) { System.String sg = "P1"; // standardize space group names (see Crystal.java) if ("P 21 21 21 (1)".Equals(s)) { sg = "P 2_1 2_1 2_1"; } cdo.setObjectProperty("Crystal", "spacegroup", sg); } else { if (xpath.ToString().EndsWith("floatArray/") && (elementTitle.Equals("a") || elementTitle.Equals("b") || elementTitle.Equals("c"))) { System.String axis = elementTitle + "-axis"; cdo.startObject(axis); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(s); //logger.debug("Tokens: " + st.Count); if (st.Count > 2) { System.String token = st.NextToken(); //logger.debug("FloatArray (Token): " + token); cdo.setObjectProperty(axis, "x", token); token = st.NextToken(); //logger.debug("FloatArray (Token): " + token); cdo.setObjectProperty(axis, "y", token); token = st.NextToken(); //logger.debug("FloatArray (Token): " + token); cdo.setObjectProperty(axis, "z", token); } else { //logger.debug("PMP Convention error: incorrect number of cell axis fractions!\n"); } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" //logger.debug("PMP Convention error: " + e.ToString()); } cdo.endObject(axis); } else { base.characterData(xpath, ch, start, length); } } //logger.debug("End PMP chardata"); }
public override void characterData(CMLStack xpath, char[] ch, int start, int length) { System.String s = new System.String(ch, start, length).Trim(); if (xpath.ToString().EndsWith("string/") && BUILTIN.Equals("stereo")) { stereoGiven = true; if (s.Trim().Equals("W")) { //logger.debug("CML W stereo found"); bondStereo.Add("1"); } else if (s.Trim().Equals("H")) { //logger.debug("CML H stereo found"); bondStereo.Add("6"); } } else { base.characterData(xpath, ch, start, length); } }
public virtual void endElement(CMLStack xpath, System.String uri, System.String name, System.String raw) { ////logger.debug("EndElement: ", name); System.String cData = currentChars; if ("bond".Equals(name)) { if (!stereoGiven) bondStereo.Add(""); if (bondStereo.Count > bondDictRefs.Count) bondDictRefs.Add(null); } else if ("atom".Equals(name)) { if (atomCounter > eltitles.Count) { eltitles.Add(null); } if (atomCounter > hCounts.Count) { /* while strictly undefined, assume zero implicit hydrogens when no number is given */ hCounts.Add("0"); } if (atomCounter > atomDictRefs.Count) { atomDictRefs.Add(null); } if (atomCounter > isotope.Count) { isotope.Add(null); } if (atomCounter > spinMultiplicities.Count) { spinMultiplicities.Add(null); } if (atomCounter > formalCharges.Count) { /* while strictly undefined, assume zero implicit hydrogens when no number is given */ formalCharges.Add("0"); } /* It may happen that not all atoms have associated 2D or 3D coordinates. accept that */ if (atomCounter > x2.Count && x2.Count != 0) { /* apparently, the previous atoms had atomic coordinates, add 'null' for this atom */ x2.Add(null); y2.Add(null); } if (atomCounter > x3.Count && x3.Count != 0) { /* apparently, the previous atoms had atomic coordinates, add 'null' for this atom */ x3.Add(null); y3.Add(null); z3.Add(null); } if (atomCounter > xfract.Count && xfract.Count != 0) { /* apparently, the previous atoms had atomic coordinates, add 'null' for this atom */ xfract.Add(null); yfract.Add(null); zfract.Add(null); } } else if ("molecule".Equals(name)) { storeData(); cdo.endObject("Molecule"); } else if ("crystal".Equals(name)) { if (crystalScalar > 0) { // convert unit cell parameters to cartesians Vector3d[] axes = CrystalGeometryTools.notionalToCartesian(unitcellparams[0], unitcellparams[1], unitcellparams[2], unitcellparams[3], unitcellparams[4], unitcellparams[5]); aAxis = axes[0]; bAxis = axes[1]; cAxis = axes[2]; cartesianAxesSet = true; cdo.startObject("a-axis"); cdo.setObjectProperty("a-axis", "x", aAxis.x.ToString()); cdo.setObjectProperty("a-axis", "y", aAxis.y.ToString()); cdo.setObjectProperty("a-axis", "z", aAxis.z.ToString()); cdo.endObject("a-axis"); cdo.startObject("b-axis"); cdo.setObjectProperty("b-axis", "x", bAxis.x.ToString()); cdo.setObjectProperty("b-axis", "y", bAxis.y.ToString()); cdo.setObjectProperty("b-axis", "z", bAxis.z.ToString()); cdo.endObject("b-axis"); cdo.startObject("c-axis"); cdo.setObjectProperty("c-axis", "x", cAxis.x.ToString()); cdo.setObjectProperty("c-axis", "y", cAxis.y.ToString()); cdo.setObjectProperty("c-axis", "z", cAxis.z.ToString()); cdo.endObject("c-axis"); } else { ////logger.error("Could not find crystal unit cell parameters"); } cdo.endObject("Crystal"); } else if ("list".Equals(name)) { cdo.endObject("SetOfMolecules"); } else if ("coordinate3".Equals(name)) { if (BUILTIN.Equals("xyz3")) { ////logger.debug("New coord3 xyz3 found: ", currentChars); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(currentChars); x3.Add(st.NextToken()); y3.Add(st.NextToken()); z3.Add(st.NextToken()); ////logger.debug("coord3 x3.length: ", x3.Count); ////logger.debug("coord3 y3.length: ", y3.Count); ////logger.debug("coord3 z3.length: ", z3.Count); } catch (System.Exception exception) { ////logger.error("CMLParsing error while setting coordinate3!"); ////logger.debug(exception); } } else { ////logger.warn("Unknown coordinate3 BUILTIN: " + BUILTIN); } } else if ("string".Equals(name)) { if (BUILTIN.Equals("elementType")) { ////logger.debug("Element: ", cData.Trim()); elsym.Add(cData); } else if (BUILTIN.Equals("atomRef")) { curRef++; ////logger.debug("Bond: ref #", curRef); if (curRef == 1) { bondARef1.Add(cData.Trim()); } else if (curRef == 2) { bondARef2.Add(cData.Trim()); } } else if (BUILTIN.Equals("order")) { ////logger.debug("Bond: order ", cData.Trim()); order.Add(cData.Trim()); } else if (BUILTIN.Equals("formalCharge")) { // NOTE: this combination is in violation of the CML DTD!!! ////logger.warn("formalCharge BUILTIN accepted but violating CML DTD"); ////logger.debug("Charge: ", cData.Trim()); System.String charge = cData.Trim(); if (charge.StartsWith("+") && charge.Length > 1) { charge = charge.Substring(1); } formalCharges.Add(charge); } } else if ("float".Equals(name)) { if (BUILTIN.Equals("x3")) { x3.Add(cData.Trim()); } else if (BUILTIN.Equals("y3")) { y3.Add(cData.Trim()); } else if (BUILTIN.Equals("z3")) { z3.Add(cData.Trim()); } else if (BUILTIN.Equals("x2")) { x2.Add(cData.Trim()); } else if (BUILTIN.Equals("y2")) { y2.Add(cData.Trim()); } else if (BUILTIN.Equals("order")) { // NOTE: this combination is in violation of the CML DTD!!! order.Add(cData.Trim()); } else if (BUILTIN.Equals("charge") || BUILTIN.Equals("partialCharge")) { partialCharges.Add(cData.Trim()); } } else if ("integer".Equals(name)) { if (BUILTIN.Equals("formalCharge")) { formalCharges.Add(cData.Trim()); } } else if ("coordinate2".Equals(name)) { if (BUILTIN.Equals("xy2")) { ////logger.debug("New coord2 xy2 found.", cData); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); x2.Add(st.NextToken()); y2.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 175, 1); } } } else if ("stringArray".Equals(name)) { if (BUILTIN.Equals("id") || BUILTIN.Equals("atomId") || BUILTIN.Equals("atomID")) { // invalid according to CML1 DTD but found in OpenBabel 1.x output try { bool countAtoms = (atomCounter == 0) ? true : false; SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { if (countAtoms) { atomCounter++; } System.String token = st.NextToken(); ////logger.debug("StringArray (Token): ", token); elid.Add(token); } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 186, 1); } } else if (BUILTIN.Equals("elementType")) { try { bool countAtoms = (atomCounter == 0) ? true : false; SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { if (countAtoms) { atomCounter++; } elsym.Add(st.NextToken()); } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 194, 1); } } else if (BUILTIN.Equals("atomRefs")) { curRef++; ////logger.debug("New atomRefs found: ", curRef); try { bool countBonds = (bondCounter == 0) ? true : false; SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { if (countBonds) { bondCounter++; } System.String token = st.NextToken(); ////logger.debug("Token: ", token); if (curRef == 1) { bondARef1.Add(token); } else if (curRef == 2) { bondARef2.Add(token); } } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 194, 1); } } else if (BUILTIN.Equals("atomRef")) { curRef++; ////logger.debug("New atomRef found: ", curRef); // this is CML1 stuff, we get things like: /* <bondArray> <stringArray builtin="atomRef">a2 a2 a2 a2 a3 a3 a4 a4 a5 a6 a7 a9</stringArray> <stringArray builtin="atomRef">a9 a11 a12 a13 a5 a4 a6 a9 a7 a8 a8 a10</stringArray> <stringArray builtin="order">1 1 1 1 2 1 2 1 1 1 2 2</stringArray> </bondArray> */ try { bool countBonds = (bondCounter == 0) ? true : false; SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { if (countBonds) { bondCounter++; } System.String token = st.NextToken(); ////logger.debug("Token: ", token); if (curRef == 1) { bondARef1.Add(token); } else if (curRef == 2) { bondARef2.Add(token); } } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 194, 1); } } else if (BUILTIN.Equals("order")) { ////logger.debug("New bond order found."); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { System.String token = st.NextToken(); ////logger.debug("Token: ", token); order.Add(token); } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 194, 1); } } } else if ("integerArray".Equals(name)) { ////logger.debug("IntegerArray: builtin = ", BUILTIN); if (BUILTIN.Equals("formalCharge")) { try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) { System.String token = st.NextToken(); ////logger.debug("Charge added: ", token); formalCharges.Add(token); } } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 205, 1); } } } else if ("scalar".Equals(name)) { if (xpath.ToString().EndsWith("crystal/scalar/")) { ////logger.debug("Going to set a crystal parameter: " + crystalScalar, " to ", cData); try { unitcellparams[crystalScalar - 1] = System.Double.Parse(cData.Trim()); } catch (System.FormatException exception) { ////logger.error("Content must a float: " + cData); } } else { if (xpath.ToString().EndsWith("bond/scalar/")) { if (DICTREF.Equals("mdl:stereo")) { bondStereo.Add(cData.Trim()); stereoGiven = true; } } else { if (xpath.ToString().EndsWith("atom/scalar/")) { if (DICTREF.Equals("cdk:partialCharge")) { partialCharges.Add(cData.Trim()); } } else { if (xpath.ToString().EndsWith("molecule/scalar/")) { if (DICTREF.Equals("pdb:id")) { cdo.setObjectProperty("Molecule", DICTREF, cData); } } else { ////logger.warn("Ignoring scalar: " + xpath); } } } } } else if ("floatArray".Equals(name)) { if (BUILTIN.Equals("x3")) { try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) x3.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 205, 1); } } else if (BUILTIN.Equals("y3")) { try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) y3.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 213, 1); } } else if (BUILTIN.Equals("z3")) { try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) z3.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 221, 1); } } else if (BUILTIN.Equals("x2")) { ////logger.debug("New floatArray found."); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) x2.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 205, 1); } } else if (BUILTIN.Equals("y2")) { ////logger.debug("New floatArray found."); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) y2.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 454, 1); } } else if (BUILTIN.Equals("partialCharge")) { ////logger.debug("New floatArray with partial charges found."); try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(cData); while (st.HasMoreTokens()) partialCharges.Add(st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" notify("CMLParsing error: " + e, SYSTEMID, 462, 1); } } } else if ("basic".Equals(name)) { // assuming this is the child element of <identifier> this.inchi = cData; } else if ("name".Equals(name)) { if (xpath.ToString().EndsWith("molecule/name/")) { cdo.setObjectProperty("Molecule", DICTREF, cData); } } else { ////logger.warn("Skipping element: " + name); } currentChars = ""; BUILTIN = ""; elementTitle = ""; }
public virtual void startElement(CMLStack xpath, System.String uri, System.String local, System.String raw, SaxAttributesSupport atts) { System.String name = local; ////logger.debug("StartElement"); currentChars = ""; BUILTIN = ""; DICTREF = ""; for (int i = 0; i < atts.GetLength(); i++) { System.String qname = atts.GetFullName(i); if (qname.Equals("builtin")) { BUILTIN = atts.GetValue(i); ////logger.debug(name, "->BUILTIN found: ", atts.GetValue(i)); } else if (qname.Equals("dictRef")) { DICTREF = atts.GetValue(i); ////logger.debug(name, "->DICTREF found: ", atts.GetValue(i)); } else if (qname.Equals("title")) { elementTitle = atts.GetValue(i); ////logger.debug(name, "->TITLE found: ", atts.GetValue(i)); } else { ////logger.debug("Qname: ", qname); } } if ("atom".Equals(name)) { atomCounter++; for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); System.String value_Renamed = atts.GetValue(i); if (att.Equals("id")) { // this is supported in CML 1.x elid.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("elementType")) { elsym.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("title")) { eltitles.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("x2")) { x2.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("xy2")) { SupportClass.Tokenizer tokenizer = new SupportClass.Tokenizer(value_Renamed); x2.Add(tokenizer.NextToken()); y2.Add(tokenizer.NextToken()); } // this is supported in CML 2.0 else if (att.Equals("xyzFract")) { SupportClass.Tokenizer tokenizer = new SupportClass.Tokenizer(value_Renamed); xfract.Add(tokenizer.NextToken()); yfract.Add(tokenizer.NextToken()); zfract.Add(tokenizer.NextToken()); } // this is supported in CML 2.0 else if (att.Equals("xyz3")) { SupportClass.Tokenizer tokenizer = new SupportClass.Tokenizer(value_Renamed); x3.Add(tokenizer.NextToken()); y3.Add(tokenizer.NextToken()); z3.Add(tokenizer.NextToken()); } // this is supported in CML 2.0 else if (att.Equals("y2")) { y2.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("x3")) { x3.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("y3")) { y3.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("z3")) { z3.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("xFract")) { xfract.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("yFract")) { yfract.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("zFract")) { zfract.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("formalCharge")) { formalCharges.Add(value_Renamed); } // this is supported in CML 2.0 else if (att.Equals("hydrogenCount")) { hCounts.Add(value_Renamed); } else if (att.Equals("isotope")) { isotope.Add(value_Renamed); } else if (att.Equals("dictRef")) { atomDictRefs.Add(value_Renamed); } else if (att.Equals("spinMultiplicity")) { spinMultiplicities.Add(value_Renamed); } else { ////logger.warn("Unparsed attribute: " + att); } } } else if ("atomArray".Equals(name)) { bool atomsCounted = false; for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); int count = 0; if (att.Equals("atomID")) { count = addArrayElementsTo(elid, atts.GetValue(i)); } else if (att.Equals("elementType")) { count = addArrayElementsTo(elsym, atts.GetValue(i)); } else if (att.Equals("x2")) { count = addArrayElementsTo(x2, atts.GetValue(i)); } else if (att.Equals("y2")) { count = addArrayElementsTo(y2, atts.GetValue(i)); } else if (att.Equals("x3")) { count = addArrayElementsTo(x3, atts.GetValue(i)); } else if (att.Equals("y3")) { count = addArrayElementsTo(y3, atts.GetValue(i)); } else if (att.Equals("z3")) { count = addArrayElementsTo(z3, atts.GetValue(i)); } else if (att.Equals("xFract")) { count = addArrayElementsTo(xfract, atts.GetValue(i)); } else if (att.Equals("yFract")) { count = addArrayElementsTo(yfract, atts.GetValue(i)); } else if (att.Equals("zFract")) { count = addArrayElementsTo(zfract, atts.GetValue(i)); } else { ////logger.warn("Unparsed attribute: " + att); } if (!atomsCounted) { atomCounter += count; atomsCounted = true; } } } else if ("bond".Equals(name)) { bondCounter++; for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); ////logger.debug("B2 ", att, "=", atts.GetValue(i)); if (att.Equals("id")) { bondid.Add(atts.GetValue(i)); ////logger.debug("B3 ", bondid); } else if (att.Equals("atomRefs") || att.Equals("atomRefs2")) { // this is CML 2.0 support // expect exactly two references try { SupportClass.Tokenizer st = new SupportClass.Tokenizer(atts.GetValue(i)); bondARef1.Add((System.String)st.NextToken()); bondARef2.Add((System.String)st.NextToken()); } catch (System.Exception e) { //UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.getMessage' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" ////logger.error("Error in CML file: ", e.Message); ////logger.debug(e); } } else if (att.Equals("order")) { // this is CML 2.0 support order.Add(atts.GetValue(i).Trim()); } else if (att.Equals("dictRef")) { bondDictRefs.Add(atts.GetValue(i).Trim()); } } stereoGiven = false; curRef = 0; } else if ("bondArray".Equals(name)) { bool bondsCounted = false; for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); int count = 0; if (att.Equals("bondID")) { count = addArrayElementsTo(bondid, atts.GetValue(i)); } else if (att.Equals("atomRefs1")) { count = addArrayElementsTo(bondARef1, atts.GetValue(i)); } else if (att.Equals("atomRefs2")) { count = addArrayElementsTo(bondARef2, atts.GetValue(i)); } else if (att.Equals("atomRef1")) { count = addArrayElementsTo(bondARef1, atts.GetValue(i)); } else if (att.Equals("atomRef2")) { count = addArrayElementsTo(bondARef2, atts.GetValue(i)); } else if (att.Equals("order")) { count = addArrayElementsTo(order, atts.GetValue(i)); } else { ////logger.warn("Unparsed attribute: " + att); } if (!bondsCounted) { bondCounter += count; bondsCounted = true; } } curRef = 0; } else if ("molecule".Equals(name)) { newMolecule(); BUILTIN = ""; cdo.startObject("Molecule"); for (int i = 0; i < atts.GetLength(); i++) { if (atts.GetFullName(i).Equals("id")) { cdo.setObjectProperty("Molecule", "id", atts.GetValue(i)); } else if (atts.GetFullName(i).Equals("dictRef")) { cdo.setObjectProperty("Molecule", "dictRef", atts.GetValue(i)); } } } else if ("crystal".Equals(name)) { newCrystalData(); cdo.startObject("Crystal"); for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); if (att.Equals("z")) { cdo.setObjectProperty("Crystal", "z", atts.GetValue(i)); } } } else if ("symmetry".Equals(name)) { for (int i = 0; i < atts.GetLength(); i++) { System.String att = atts.GetFullName(i); if (att.Equals("spaceGroup")) { cdo.setObjectProperty("Crystal", "spacegroup", atts.GetValue(i)); } } } else if ("scalar".Equals(name)) { if (xpath.ToString().EndsWith("crystal/scalar/")) crystalScalar++; } else if ("list".Equals(name)) { cdo.startObject("SetOfMolecules"); } }