Example #1
0
        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);
            }
        }