public override void CharacterData(CMLStack xpath, XElement element) { string s = element.Value.Trim(); if (xpath.ToString().EndsWith("string/", StringComparison.Ordinal) && Builtin.Equals("stereo", StringComparison.Ordinal)) { StereoGiven = true; switch (s.Trim()) { case "W": Debug.WriteLine("CML W stereo found"); BondStereo.Add("1"); break; case "H": Debug.WriteLine("CML H stereo found"); BondStereo.Add("6"); break; } } else { base.CharacterData(xpath, element); } }
public override void StartElement(CMLStack xpath, XElement element) { isBond = false; if (xpath.ToString().EndsWith("string/", StringComparison.Ordinal)) { var a_buildin = element.Attribute("buildin"); if (a_buildin != null && a_buildin.Value.Equals("order", StringComparison.Ordinal)) { isBond = true; } } else { base.StartElement(xpath, element); } }
public override void CharacterData(CMLStack xpath, XElement element) { string s = element.Value.Trim(); Debug.WriteLine($"Start PMP chardata ({CurrentElement}) :{s}"); Debug.WriteLine($" ElTitle: {ElementTitle}"); if (xpath.ToString().EndsWith("string/", StringComparison.Ordinal) && Builtin.Equals("spacegroup", StringComparison.Ordinal)) { string sg = "P1"; // standardize space group names (see Crystal.java) if (string.Equals("P 21 21 21 (1)", s, StringComparison.Ordinal)) { sg = "P 2_1 2_1 2_1"; } ((ICrystal)CurrentMolecule).SpaceGroup = sg; } else if (xpath.ToString().EndsWith("floatArray/", StringComparison.Ordinal)) { switch (ElementTitle) { case "a": case "b": case "c": var tokens = s.Split(' '); if (tokens.Length > 2) { if (string.Equals(ElementTitle, "a", StringComparison.Ordinal)) { ((ICrystal)CurrentMolecule).A = new Vector3( double.Parse(tokens[0], NumberFormatInfo.InvariantInfo), double.Parse(tokens[1], NumberFormatInfo.InvariantInfo), double.Parse(tokens[2], NumberFormatInfo.InvariantInfo)); } else if (string.Equals(ElementTitle, "b", StringComparison.Ordinal)) { ((ICrystal)CurrentMolecule).B = new Vector3( double.Parse(tokens[0], NumberFormatInfo.InvariantInfo), double.Parse(tokens[1], NumberFormatInfo.InvariantInfo), double.Parse(tokens[2], NumberFormatInfo.InvariantInfo)); } else if (string.Equals(ElementTitle, "c", StringComparison.Ordinal)) { ((ICrystal)CurrentMolecule).C = new Vector3( double.Parse(tokens[0], NumberFormatInfo.InvariantInfo), double.Parse(tokens[1], NumberFormatInfo.InvariantInfo), double.Parse(tokens[2], NumberFormatInfo.InvariantInfo)); } } else { Debug.WriteLine("PMP Convention error: incorrect number of cell axis fractions!"); } break; } } else { base.CharacterData(xpath, element); } Debug.WriteLine("End PMP chardata"); }