public static CT_Rst Parse(XmlNode xmlNode, XmlNamespaceManager namespaceManager) { CT_Rst rst = new CT_Rst(); rst.r = new List<CT_RElt>(); var rNodes = xmlNode.SelectNodes("d:r", namespaceManager); foreach (XmlNode rNode in rNodes) { CT_RElt relt = rst.AddNewR(); var rPrNode = rNode.SelectSingleNode("d:rPr", namespaceManager); if (rPrNode != null) { CT_RPrElt rprelt = relt.AddNewRPr(); foreach (XmlNode childNode in rPrNode.ChildNodes) { switch (childNode.Name) { case "b": CT_BooleanProperty bprop= rprelt.AddNewB(); bprop.val = true; break; case "i": CT_BooleanProperty iprop = rprelt.AddNewI(); iprop.val = true; break; case "u": CT_UnderlineProperty uProp = rprelt.AddNewU(); uProp.val = (ST_UnderlineValues)Enum.Parse(typeof(ST_UnderlineValues), childNode.Attributes["val"].Value); break; case "color": CT_Color color = rprelt.AddNewColor(); if(childNode.Attributes["theme"]!=null) color.theme = uint.Parse(childNode.Attributes["theme"].Value); if(childNode.Attributes["auto"]!=null) color.auto = childNode.Attributes["auto"].Value=="1"?true:false; if(childNode.Attributes["indexed"]!=null) color.indexed = uint.Parse(childNode.Attributes["indexed"].Value); if(childNode.Attributes["tint"]!=null) color.tint = Double.Parse(childNode.Attributes["tint"].Value); break; case "rFont": CT_FontName fontname = rprelt.AddNewRFont(); fontname.val = childNode.Attributes["val"].Value; break; case "family": CT_IntProperty familyProp = rprelt.AddNewFamily(); familyProp.val = Int32.Parse(childNode.Attributes["val"].Value); break; case "charset": CT_IntProperty charsetProp = rprelt.AddNewCharset(); charsetProp.val = Int32.Parse(childNode.Attributes["val"].Value); break; case "scheme": CT_FontScheme schemeProp = rprelt.AddNewScheme(); schemeProp.val = (ST_FontScheme)Enum.Parse(typeof(ST_FontScheme), childNode.Attributes["val"].Value); break; case "sz": CT_FontSize szProp = rprelt.AddNewSz(); szProp.val = Int32.Parse(childNode.Attributes["val"].Value); break; case "vertAlign": CT_VerticalAlignFontProperty vertAlignProp = rprelt.AddNewVertAlign(); vertAlignProp.val = (ST_VerticalAlignRun)Enum.Parse(typeof(ST_VerticalAlignRun), childNode.Attributes["val"].Value); break; } } } var tNode = rNode.SelectSingleNode("d:t", namespaceManager); relt.t = tNode.InnerText.Replace("\r",""); } return rst; }
public void TestCreateNew() { SharedStringsTable sst = new SharedStringsTable(); CT_Rst st; int idx; // Check defaults Assert.IsNotNull(sst.Items); Assert.AreEqual(0, sst.Items.Count); Assert.AreEqual(0, sst.Count); Assert.AreEqual(0, sst.UniqueCount); st = new CT_Rst(); st.t = ("Hello, World!"); idx = sst.AddEntry(st); Assert.AreEqual(0, idx); Assert.AreEqual(1, sst.Count); Assert.AreEqual(1, sst.UniqueCount); //add the same entry again idx = sst.AddEntry(st); Assert.AreEqual(0, idx); Assert.AreEqual(2, sst.Count); Assert.AreEqual(1, sst.UniqueCount); //and again idx = sst.AddEntry(st); Assert.AreEqual(0, idx); Assert.AreEqual(3, sst.Count); Assert.AreEqual(1, sst.UniqueCount); st = new CT_Rst(); st.t = ("Second string"); idx = sst.AddEntry(st); Assert.AreEqual(1, idx); Assert.AreEqual(4, sst.Count); Assert.AreEqual(2, sst.UniqueCount); //add the same entry again idx = sst.AddEntry(st); Assert.AreEqual(1, idx); Assert.AreEqual(5, sst.Count); Assert.AreEqual(2, sst.UniqueCount); st = new CT_Rst(); CT_RElt r = st.AddNewR(); CT_RPrElt pr = r.AddNewRPr(); pr.AddNewColor().SetRgb(new byte[] { (byte)0xFF, 0, 0 }); //red pr.AddNewI().val = (true); //bold pr.AddNewB().val = (true); //italic r.t = ("Second string"); idx = sst.AddEntry(st); Assert.AreEqual(2, idx); Assert.AreEqual(6, sst.Count); Assert.AreEqual(3, sst.UniqueCount); idx = sst.AddEntry(st); Assert.AreEqual(2, idx); Assert.AreEqual(7, sst.Count); Assert.AreEqual(3, sst.UniqueCount); //OK. the sst table is Filled, check the contents Assert.AreEqual(3, sst.Items.Count); Assert.AreEqual("Hello, World!", new XSSFRichTextString(sst.GetEntryAt(0)).ToString()); Assert.AreEqual("Second string", new XSSFRichTextString(sst.GetEntryAt(1)).ToString()); Assert.AreEqual("Second string", new XSSFRichTextString(sst.GetEntryAt(2)).ToString()); }
CT_Rst buildCTRst(String text, SortedDictionary<int, CT_RPrElt> formats) { if (text.Length != GetLastKey(formats.Keys)) { throw new ArgumentException("Text length was " + text.Length + " but the last format index was " + GetLastKey(formats.Keys)); } CT_Rst st = new CT_Rst(); int runStartIdx = 0; for (SortedDictionary<int, CT_RPrElt>.KeyCollection.Enumerator it = formats.Keys.GetEnumerator(); it.MoveNext(); ) { int runEndIdx = it.Current; CT_RElt run = st.AddNewR(); String fragment = text.Substring(runStartIdx, runEndIdx - runStartIdx); run.t = (fragment); PreserveSpaces(run.t); CT_RPrElt fmt = formats[runEndIdx]; if (fmt != null) run.rPr = (fmt); runStartIdx = runEndIdx; } return st; }