private void convertSprms(List <SinglePropertyModifier> sprms, XmlElement parent) { XmlElement shd = _nodeFactory.CreateElement("w", "shd", OpenXmlNamespaces.WordprocessingML); XmlElement rFonts = _nodeFactory.CreateElement("w", "rFonts", OpenXmlNamespaces.WordprocessingML); XmlElement color = _nodeFactory.CreateElement("w", "color", OpenXmlNamespaces.WordprocessingML); XmlAttribute colorVal = _nodeFactory.CreateAttribute("w", "val", OpenXmlNamespaces.WordprocessingML); XmlElement lang = _nodeFactory.CreateElement("w", "lang", OpenXmlNamespaces.WordprocessingML); foreach (SinglePropertyModifier sprm in sprms) { switch ((int)sprm.OpCode) { //style id case 0x4A30: _currentIstd = System.BitConverter.ToUInt16(sprm.Arguments, 0); appendValueElement(parent, "rStyle", StyleSheetMapping.MakeStyleId(_doc.Styles.Styles[_currentIstd]), true); break; //Element flags case 0x085A: appendFlagElement(parent, sprm, "rtl", true); break; case 0x0835: appendFlagElement(parent, sprm, "b", true); break; case 0x085C: appendFlagElement(parent, sprm, "bCs", true); break; case 0x083B: appendFlagElement(parent, sprm, "caps", true);; break; case 0x0882: appendFlagElement(parent, sprm, "cs", true); break; case 0x2A53: appendFlagElement(parent, sprm, "dstrike", true); break; case 0x0858: appendFlagElement(parent, sprm, "emboss", true); break; case 0x0854: appendFlagElement(parent, sprm, "imprint", true); break; case 0x0836: appendFlagElement(parent, sprm, "i", true); break; case 0x085D: appendFlagElement(parent, sprm, "iCs", true); break; case 0x0875: appendFlagElement(parent, sprm, "noProof", true); break; case 0x0838: appendFlagElement(parent, sprm, "outline", true); break; case 0x0839: appendFlagElement(parent, sprm, "shadow", true); break; case 0x083A: appendFlagElement(parent, sprm, "smallCaps", true); break; case 0x0818: appendFlagElement(parent, sprm, "specVanish", true); break; case 0x0837: appendFlagElement(parent, sprm, "strike", true); break; case 0x083C: appendFlagElement(parent, sprm, "vanish", true); break; case 0x0811: appendFlagElement(parent, sprm, "webHidden", true); break; case 0x2A48: SuperscriptIndex iss = (SuperscriptIndex)sprm.Arguments[0]; appendValueElement(parent, "vertAlign", iss.ToString(), true); break; //language case 0x486D: case 0x4873: //latin LanguageId langid = new LanguageId(System.BitConverter.ToInt16(sprm.Arguments, 0)); langid.Convert(new LanguageIdMapping(lang, LanguageIdMapping.LanguageType.Default)); break; case 0x486E: case 0x4874: //east asia langid = new LanguageId(System.BitConverter.ToInt16(sprm.Arguments, 0)); langid.Convert(new LanguageIdMapping(lang, LanguageIdMapping.LanguageType.EastAsian)); break; case 0x485F: //bidi langid = new LanguageId(System.BitConverter.ToInt16(sprm.Arguments, 0)); langid.Convert(new LanguageIdMapping(lang, LanguageIdMapping.LanguageType.Complex)); break; //borders case 0x6865: case 0xCA72: XmlNode bdr = _nodeFactory.CreateElement("w", "bdr", OpenXmlNamespaces.WordprocessingML); appendBorderAttributes(new BorderCode(sprm.Arguments), bdr); parent.AppendChild(bdr); break; //shading case 0x4866: case 0xCA71: ShadingDescriptor desc = new ShadingDescriptor(sprm.Arguments); appendShading(parent, desc); break; //color case 0x2A42: case 0x4A60: colorVal.Value = ((Global.ColorIdentifier)(sprm.Arguments[0])).ToString(); break; case 0x6870: //R colorVal.Value = String.Format("{0:x2}", sprm.Arguments[0]); //G colorVal.Value += String.Format("{0:x2}", sprm.Arguments[1]); //B colorVal.Value += String.Format("{0:x2}", sprm.Arguments[2]); break; //highlightning case 0x2A0C: appendValueElement(parent, "highlight", ((Global.ColorIdentifier)sprm.Arguments[0]).ToString(), true); break; //spacing case 0x8840: appendValueElement(parent, "spacing", System.BitConverter.ToInt16(sprm.Arguments, 0).ToString(), true); break; //font size case 0x4A43: appendValueElement(parent, "sz", sprm.Arguments[0].ToString(), true); break; case 0x484B: appendValueElement(parent, "kern", System.BitConverter.ToInt16(sprm.Arguments, 0).ToString(), true); break; case 0x4A61: appendValueElement(parent, "szCs", System.BitConverter.ToInt16(sprm.Arguments, 0).ToString(), true); break; //font family case 0x4A4F: XmlAttribute ascii = _nodeFactory.CreateAttribute("w", "ascii", OpenXmlNamespaces.WordprocessingML); FontFamilyName ffn = (FontFamilyName)_doc.FontTable.Data[System.BitConverter.ToUInt16(sprm.Arguments, 0)]; ascii.Value = ffn.xszFtn; rFonts.Attributes.Append(ascii); break; case 0x4A50: XmlAttribute eastAsia = _nodeFactory.CreateAttribute("w", "eastAsia", OpenXmlNamespaces.WordprocessingML); FontFamilyName ffnAsia = (FontFamilyName)_doc.FontTable.Data[System.BitConverter.ToUInt16(sprm.Arguments, 0)]; eastAsia.Value = ffnAsia.xszFtn; rFonts.Attributes.Append(eastAsia); break; case 0x4A51: XmlAttribute ansi = _nodeFactory.CreateAttribute("w", "hAnsi", OpenXmlNamespaces.WordprocessingML); FontFamilyName ffnAnsi = (FontFamilyName)_doc.FontTable.Data[System.BitConverter.ToUInt16(sprm.Arguments, 0)]; ansi.Value = ffnAnsi.xszFtn; rFonts.Attributes.Append(ansi); break; //Underlining case 0x2A3E: appendValueElement(parent, "u", lowerFirstChar(((Global.UnderlineCode)sprm.Arguments[0]).ToString()), true); break; //char width case 0x4852: appendValueElement(parent, "w", System.BitConverter.ToInt16(sprm.Arguments, 0).ToString(), true); break; //animation case 0x2859: appendValueElement(parent, "effect", ((Global.TextAnimation)sprm.Arguments[0]).ToString(), true); break; default: break; } } //apend lang if (lang.Attributes.Count > 0) { parent.AppendChild(lang); } //append fonts if (rFonts.Attributes.Count > 0) { parent.AppendChild(rFonts); } //append color if (colorVal.Value != "") { color.Attributes.Append(colorVal); parent.AppendChild(color); } }