コード例 #1
0
ファイル: HWPFList.cs プロジェクト: hanwangkun/npoi
        /**
         * Sets the paragraph properties for a particular level of the list.
         *
         * @param level The level number.
         * @param pap The paragraph properties
         */
        public void SetLevelParagraphProperties(int level, ParagraphProperties pap)
        {
            ListLevel listLevel = _listData.GetLevel(level);
            int styleIndex = _listData.GetLevelStyle(level);
            ParagraphProperties base1 = _styleSheet.GetParagraphStyle(styleIndex);

            byte[] grpprl = ParagraphSprmCompressor.CompressParagraphProperty(pap, base1);
            listLevel.SetLevelProperties(grpprl);
        }
コード例 #2
0
        public static ParagraphProperties UncompressPAP(ParagraphProperties parent,
                                                        byte[] grpprl,
                                                        int Offset)
        {
            ParagraphProperties newProperties = null;
            newProperties = (ParagraphProperties)parent.Clone();

            SprmIterator sprmIt = new SprmIterator(grpprl, Offset);

            while (sprmIt.HasNext())
            {
                SprmOperation sprm = sprmIt.Next();

                // PAPXs can contain table sprms if the paragraph marks the end of a
                // table row
                if (sprm.Type == SprmOperation.TYPE_PAP)
                {
                    UncompressPAPOperation(newProperties, sprm);
                }
            }

            return newProperties;
        }
コード例 #3
0
        /**
         * Performs an operation on a ParagraphProperties object. Used to uncompress
         * from a papx.
         *
         * @param newPAP The ParagraphProperties object to perform the operation on.
         * @param operand The operand that defines the operation.
         * @param param The operation's parameter.
         * @param varParam The operation's variable length parameter.
         * @param grpprl The original papx.
         * @param offset The current offset in the papx.
         * @param spra A part of the sprm that defined this operation.
         */
        static void UncompressPAPOperation(ParagraphProperties newPAP, SprmOperation sprm)
        {
            switch (sprm.Operation)
            {
                case 0:
                    newPAP.SetIstd(sprm.Operand);
                    break;
                case 0x1:

                    // Used only for piece table grpprl's not for PAPX
                    //        int istdFirst = LittleEndian.Getshort (varParam, 2);
                    //        int istdLast = LittleEndian.Getshort (varParam, 4);
                    //        if ((newPAP.GetIstd () > istdFirst) || (newPAP.GetIstd () <= istdLast))
                    //        {
                    //          permuteIstd (newPAP, varParam, opSize);
                    //        }
                    break;
                case 0x2:
                    if (newPAP.GetIstd() <= 9 || newPAP.GetIstd() >= 1)
                    {
                        byte paramTmp = (byte)sprm.Operand;
                        newPAP.SetIstd(newPAP.GetIstd() + paramTmp);
                        newPAP.SetLvl((byte)(newPAP.GetLvl() + paramTmp));

                        if (((paramTmp >> 7) & 0x01) == 1)
                        {
                            newPAP.SetIstd(Math.Max(newPAP.GetIstd(), 1));
                        }
                        else
                        {
                            newPAP.SetIstd(Math.Min(newPAP.GetIstd(), 9));
                        }

                    }
                    break;
                case 0x3:
                    // Physical justification of the paragraph
                    newPAP.SetJc((byte)sprm.Operand);
                    break;
                case 0x4:
                    newPAP.SetFSideBySide(sprm.Operand!=0);
                    break;
                case 0x5:
                    newPAP.SetFKeep(sprm.Operand!=0);
                    break;
                case 0x6:
                    newPAP.SetFKeepFollow(sprm.Operand!=0);
                    break;
                case 0x7:
                    newPAP.SetFPageBreakBefore(sprm.Operand!=0);
                    break;
                case 0x8:
                    newPAP.SetBrcl((byte)sprm.Operand);
                    break;
                case 0x9:
                    newPAP.SetBrcp((byte)sprm.Operand);
                    break;
                case 0xa:
                    newPAP.SetIlvl((byte)sprm.Operand);
                    break;
                case 0xb:
                    newPAP.SetIlfo(sprm.Operand);
                    break;
                case 0xc:
                    newPAP.SetFNoLnn(sprm.Operand!=0);
                    break;
                case 0xd:
                    /**handle tabs . variable parameter. seperate Processing needed*/
                    handleTabs(newPAP, sprm);
                    break;
                case 0xe:
                    newPAP.SetDxaRight(sprm.Operand);
                    break;
                case 0xf:
                    newPAP.SetDxaLeft(sprm.Operand);
                    break;
                case 0x10:

                    // sprmPNest is only stored in grpprls linked to a piece table.
                    newPAP.SetDxaLeft(newPAP.GetDxaLeft() + sprm.Operand);
                    newPAP.SetDxaLeft(Math.Max(0, newPAP.GetDxaLeft()));
                    break;
                case 0x11:
                    newPAP.SetDxaLeft1(sprm.Operand);
                    break;
                case 0x12:
                    newPAP.SetLspd(new LineSpacingDescriptor(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x13:
                    newPAP.SetDyaBefore(sprm.Operand);
                    break;
                case 0x14:
                    newPAP.SetDyaAfter(sprm.Operand);
                    break;
                case 0x15:
                    // fast saved only
                    //ApplySprmPChgTabs (newPAP, varParam, opSize);
                    break;
                case 0x16:
                    newPAP.SetFInTable(sprm.Operand!=0);
                    break;
                case 0x17:
                    newPAP.SetFTtp(sprm.Operand!=0);
                    break;
                case 0x18:
                    newPAP.SetDxaAbs(sprm.Operand);
                    break;
                case 0x19:
                    newPAP.SetDyaAbs(sprm.Operand);
                    break;
                case 0x1a:
                    newPAP.SetDxaWidth(sprm.Operand);
                    break;
                case 0x1b:
                    byte param = (byte)sprm.Operand;
                    /** @todo handle paragraph postioning*/
                    byte pcVert = (byte)((param & 0x0c) >> 2);
                    byte pcHorz = (byte)(param & 0x03);
                    if (pcVert != 3)
                    {
                        newPAP.SetPcVert(pcVert);
                    }
                    if (pcHorz != 3)
                    {
                        newPAP.SetPcHorz(pcHorz);
                    }
                    break;

                // BrcXXX1 is older Version. Brc is used
                case 0x1c:

                    //newPAP.SetBrcTop1((short)param);
                    break;
                case 0x1d:

                    //newPAP.SetBrcLeft1((short)param);
                    break;
                case 0x1e:

                    //newPAP.SetBrcBottom1((short)param);
                    break;
                case 0x1f:

                    //newPAP.SetBrcRight1((short)param);
                    break;
                case 0x20:

                    //newPAP.SetBrcBetween1((short)param);
                    break;
                case 0x21:

                    //newPAP.SetBrcBar1((byte)param);
                    break;
                case 0x22:
                    newPAP.SetDxaFromText(sprm.Operand);
                    break;
                case 0x23:
                    newPAP.SetWr((byte)sprm.Operand);
                    break;
                case 0x24:
                    newPAP.SetBrcTop(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x25:
                    newPAP.SetBrcLeft(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x26:
                    newPAP.SetBrcBottom(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x27:
                    newPAP.SetBrcRight(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x28:
                    newPAP.SetBrcBetween(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x29:
                    newPAP.SetBrcBar(new BorderCode(sprm.Grpprl, sprm.GrpprlOffset));
                    break;
                case 0x2a:
                    newPAP.SetFNoAutoHyph(sprm.Operand!=0);
                    break;
                case 0x2b:
                    newPAP.SetDyaHeight(sprm.Operand);
                    break;
                case 0x2c:
                    newPAP.SetDcs(new DropCapSpecifier((short)sprm.Operand));
                    break;
                case 0x2d:
                    newPAP.SetShd(new ShadingDescriptor((short)sprm.Operand));
                    break;
                case 0x2e:
                    newPAP.SetDyaFromText(sprm.Operand);
                    break;
                case 0x2f:
                    newPAP.SetDxaFromText(sprm.Operand);
                    break;
                case 0x30:
                    newPAP.SetFLocked(sprm.Operand!=0);
                    break;
                case 0x31:
                    newPAP.SetFWidowControl(sprm.Operand!=0);
                    break;
                case 0x32:

                    //undocumented
                    break;
                case 0x33:
                    newPAP.SetFKinsoku(sprm.Operand!=0);
                    break;
                case 0x34:
                    newPAP.SetFWordWrap(sprm.Operand!=0);
                    break;
                case 0x35:
                    newPAP.SetFOverflowPunct(sprm.Operand!=0);
                    break;
                case 0x36:
                    newPAP.SetFTopLinePunct(sprm.Operand!=0);
                    break;
                case 0x37:
                    newPAP.SetFAutoSpaceDE(sprm.Operand!=0);
                    break;
                case 0x38:
                    newPAP.SetFAutoSpaceDN(sprm.Operand!=0);
                    break;
                case 0x39:
                    newPAP.SetWAlignFont(sprm.Operand);
                    break;
                case 0x3a:
                    newPAP.SetFontAlign((short)sprm.Operand);
                    break;
                case 0x3b:

                    //obsolete
                    break;
                case 0x3e:
                    byte[] buf = new byte[sprm.Size - 3];
                    Array.Copy(buf, 0, sprm.Grpprl, sprm.GrpprlOffset,
                                     buf.Length);
                    newPAP.SetAnld(buf);
                    break;
                case 0x3f:
                    //don't really need this. spec is confusing regarding this
                    //sprm
                        byte[] varParam = sprm.Grpprl;
                        int offset = sprm.GrpprlOffset;
                        newPAP.SetFPropRMark(varParam[offset]!=0);
                        newPAP.SetIbstPropRMark(LittleEndian.GetShort(varParam, offset + 1));
                        newPAP.SetDttmPropRMark(new DateAndTime(varParam, offset + 3));

                    break;
                case 0x40:
                    // This condition commented out, as Word seems to set outline levels even for 
                    //  paragraph with other styles than Heading 1..9, even though specification 
                    //  does not say so. See bug 49820 for discussion.
                    //if (newPAP.GetIstd () < 1 && newPAP.GetIstd () > 9)
                    //{
                        newPAP.SetLvl((byte)sprm.Operand);
                    //}
                    break;
                case 0x41:

                    // undocumented
                    break;
                case 0x43:

                    //pap.fNumRMIns
                    newPAP.SetFNumRMIns(sprm.Operand!=0);
                    break;
                case 0x44:

                    //undocumented
                    break;
                case 0x45:
                    if (sprm.SizeCode == 6)
                    {
                        byte[] buf1 = new byte[sprm.Size - 3];
                        Array.Copy(buf1, 0, sprm.Grpprl, sprm.GrpprlOffset, buf1.Length);
                        newPAP.SetNumrm(buf1);
                    }
                    else
                    {
                        /**@todo handle large PAPX from data stream*/
                    }
                    break;

                case 0x47:
                    newPAP.SetFUsePgsuSettings(sprm.Operand!=0);
                    break;
                case 0x48:
                    newPAP.SetFAdjustRight(sprm.Operand!=0);
                    break;
                case 0x49:
                    // sprmPItap -- 0x6649
                    newPAP.SetItap(sprm.Operand);
                    break;
                case 0x4a:
                    // sprmPDtap -- 0x664a
                    newPAP.SetItap((byte)(newPAP.GetItap() + sprm.Operand));
                    break;
                case 0x4b:
                    // sprmPFInnerTableCell -- 0x244b
                    newPAP.SetFInnerTableCell(sprm.Operand!=0);
                    break;
                case 0x4c:
                    // sprmPFInnerTtp -- 0x244c
                    newPAP.SetFTtpEmbedded(sprm.Operand!=0);
                    break;
                case 0x61:
                    // sprmPJc 
                    newPAP.SetJustificationLogical((byte)sprm.Operand);
                    break;
                default:
                    break;
            }
        }
コード例 #4
0
        private static void handleTabs(ParagraphProperties pap, SprmOperation sprm)
        {
            byte[] grpprl = sprm.Grpprl;
            int offset = sprm.GrpprlOffset;
            int delSize = grpprl[offset++];
            int[] tabPositions = pap.GetRgdxaTab();
            byte[] tabDescriptors = pap.GetRgtbd();

            Hashtable tabMap = new Hashtable();
            for (int x = 0; x < tabPositions.Length; x++)
            {
                tabMap.Add(tabPositions[x], tabDescriptors[x]);
            }

            for (int x = 0; x < delSize; x++)
            {
                tabMap.Remove(LittleEndian.GetShort(grpprl, offset));
                offset += LittleEndianConsts.SHORT_SIZE;
            }

            int addSize = grpprl[offset++];
            int start = offset;
            for (int x = 0; x < addSize; x++)
            {
                int key = LittleEndian.GetShort(grpprl, offset);
                Byte val = grpprl[start + ((LittleEndianConsts.SHORT_SIZE * addSize) + x)];
                tabMap.Add(key, val);
                offset += LittleEndianConsts.SHORT_SIZE;
            }

            tabPositions = new int[tabMap.Count];
            tabDescriptors = new byte[tabPositions.Length];
            ArrayList list = new ArrayList();

            IEnumerator keyIT = tabMap.Keys.GetEnumerator();
            while (keyIT.MoveNext())
            {
                list.Add(keyIT.Current);
            }
            list.Sort();

            for (int x = 0; x < tabPositions.Length; x++)
            {
                int key = (int)list[x];
                tabPositions[x] = key;
                tabDescriptors[x] = (byte)tabMap[key];
            }

            pap.SetRgdxaTab(tabPositions);
            pap.SetRgtbd(tabDescriptors);
        }
コード例 #5
0
        public static byte[] CompressParagraphProperty(ParagraphProperties newPAP,
                                                       ParagraphProperties oldPAP)
        {
            // page numbers links to Word97-2007BinaryFileFormat(doc)Specification.pdf, accessible from microsoft.com 
            ArrayList sprmList = new ArrayList();
            int size = 0;

            // Page 50 of public specification begins
            if (newPAP.GetIstd() != oldPAP.GetIstd())
            {
                // sprmPIstd 
                size += SprmUtils.AddSprm((short)0x4600, newPAP.GetIstd(), null, sprmList);
            }
            if (newPAP.GetJc() != oldPAP.GetJc())
            {
                // sprmPJc80 
                size += SprmUtils.AddSprm((short)0x2403, newPAP.GetJc(), null, sprmList);
            }
            if (newPAP.GetFSideBySide() != oldPAP.GetFSideBySide())
            {
                // sprmPFSideBySide 
                size += SprmUtils.AddSprm((short)0x2404, Convert.ToBoolean(newPAP.GetFSideBySide()), sprmList);
            }
            if (newPAP.GetFKeep() != oldPAP.GetFKeep())
            {
                size += SprmUtils.AddSprm((short)0x2405, newPAP.GetFKeep(), sprmList);
            }
            if (newPAP.GetFKeepFollow() != oldPAP.GetFKeepFollow())
            {
                size += SprmUtils.AddSprm((short)0x2406, newPAP.GetFKeepFollow(), sprmList);
            }
            if (newPAP.GetFPageBreakBefore() != oldPAP.GetFPageBreakBefore())
            {
                size += SprmUtils.AddSprm((short)0x2407, newPAP.GetFPageBreakBefore(), sprmList);
            }
            if (newPAP.GetBrcl() != oldPAP.GetBrcl())
            {
                size += SprmUtils.AddSprm((short)0x2408, newPAP.GetBrcl(), null, sprmList);
            }
            if (newPAP.GetBrcp() != oldPAP.GetBrcp())
            {
                size += SprmUtils.AddSprm((short)0x2409, newPAP.GetBrcp(), null, sprmList);
            }
            if (newPAP.GetIlvl() != oldPAP.GetIlvl())
            {
                size += SprmUtils.AddSprm((short)0x260A, newPAP.GetIlvl(), null, sprmList);
            }
            if (newPAP.GetIlfo() != oldPAP.GetIlfo())
            {
                size += SprmUtils.AddSprm((short)0x460b, newPAP.GetIlfo(), null, sprmList);
            }
            if (newPAP.GetFNoLnn() != oldPAP.GetFNoLnn())
            {
                size += SprmUtils.AddSprm((short)0x240C, newPAP.GetFNoLnn(), sprmList);
            }

            if (newPAP.GetItbdMac() != oldPAP.GetItbdMac() ||
                !Arrays.Equals(newPAP.GetRgdxaTab(), oldPAP.GetRgdxaTab()) ||
                !Arrays.Equals(newPAP.GetRgtbd(), oldPAP.GetRgtbd()))
            {
                /** @todo revisit this */
                //      byte[] oldTabArray = oldPAP.GetRgdxaTab();
                //      byte[] newTabArray = newPAP.GetRgdxaTab();
                //      byte[] newTabDescriptors = newPAP.GetRgtbd();
                //      byte[] varParam = new byte[2 + oldTabArray.Length + newTabArray.Length +
                //                                 newTabDescriptors.Length];
                //      varParam[0] = (byte)(oldTabArray.Length/2);
                //      int offset = 1;
                //      Array.Copy(oldTabArray, 0, varParam, offset, oldTabArray.Length);
                //      offset += oldTabArray.Length;
                //      varParam[offset] = (byte)(newTabArray.Length/2);
                //      offset += 1;
                //      Array.Copy(newTabArray, 0, varParam, offset, newTabArray.Length);
                //      offset += newTabArray.Length;
                //      Array.Copy(newTabDescriptors, 0, varParam, offset, newTabDescriptors.Length);
                //
                //      size += SprmUtils.AddSprm((short)0xC60D, 0, varParam, sprmList);
            }
            if (newPAP.GetDxaLeft() != oldPAP.GetDxaLeft())
            {
                // sprmPDxaLeft80 
                size += SprmUtils.AddSprm(unchecked((short)0x840F), newPAP.GetDxaLeft(), null, sprmList);
            }

            // Page 51 of public specification begins
            if (newPAP.GetDxaLeft1() != oldPAP.GetDxaLeft1())
            {
                // sprmPDxaLeft180 
                size += SprmUtils.AddSprm(unchecked((short)0x8411), newPAP.GetDxaLeft1(), null, sprmList);
            }
            if (newPAP.GetDxaRight() != oldPAP.GetDxaRight())
            {
                // sprmPDxaRight80  
                size += SprmUtils.AddSprm(unchecked((short)0x840E), newPAP.GetDxaRight(), null, sprmList);
            }
            if (newPAP.GetDxcLeft() != oldPAP.GetDxcLeft())
            {
                // sprmPDxcLeft
                size += SprmUtils.AddSprm((short)0x4456, newPAP.GetDxcLeft(), null, sprmList);
            }
            if (newPAP.GetDxcLeft1() != oldPAP.GetDxcLeft1())
            {
                // sprmPDxcLeft1
                size += SprmUtils.AddSprm((short)0x4457, newPAP.GetDxcLeft1(), null, sprmList);
            }
            if (newPAP.GetDxcRight() != oldPAP.GetDxcRight())
            {
                // sprmPDxcRight
                size += SprmUtils.AddSprm((short)0x4455, newPAP.GetDxcRight(), null, sprmList);
            }
            if (!newPAP.GetLspd().Equals(oldPAP.GetLspd()))
            {
                // sprmPDyaLine
                byte[] buf = new byte[4];
                newPAP.GetLspd().Serialize(buf, 0);

                size += SprmUtils.AddSprm((short)0x6412, LittleEndian.GetInt(buf), null, sprmList);
            }
            if (newPAP.GetDyaBefore() != oldPAP.GetDyaBefore())
            {
                // sprmPDyaBefore
                size += SprmUtils.AddSprm(unchecked((short)0xA413), newPAP.GetDyaBefore(), null, sprmList);
            }
            if (newPAP.GetDyaAfter() != oldPAP.GetDyaAfter())
            {
                // sprmPDyaAfter
                size += SprmUtils.AddSprm(unchecked((short)0xA414), newPAP.GetDyaAfter(), null, sprmList);
            }
            if (newPAP.GetFDyaBeforeAuto() != oldPAP.GetFDyaBeforeAuto())
            {
                // sprmPFDyaBeforeAuto
                size += SprmUtils.AddSprm((short)0x245B, newPAP.GetFDyaBeforeAuto(), sprmList);
            }
            if (newPAP.GetFDyaAfterAuto() != oldPAP.GetFDyaAfterAuto())
            {
                // sprmPFDyaAfterAuto
                size += SprmUtils.AddSprm((short)0x245C, newPAP.GetFDyaAfterAuto(), sprmList);
            }
            if (newPAP.GetFInTable() != oldPAP.GetFInTable())
            {
                // sprmPFInTable
                size += SprmUtils.AddSprm((short)0x2416, newPAP.GetFInTable(), sprmList);
            }
            if (newPAP.GetFTtp() != oldPAP.GetFTtp())
            {
                // sprmPFTtp
                size += SprmUtils.AddSprm((short)0x2417, newPAP.GetFTtp(), sprmList);
            }
            if (newPAP.GetDxaAbs() != oldPAP.GetDxaAbs())
            {
                // sprmPDxaAbs
                size += SprmUtils.AddSprm(unchecked((short)0x8418), newPAP.GetDxaAbs(), null, sprmList);
            }
            if (newPAP.GetDyaAbs() != oldPAP.GetDyaAbs())
            {
                // sprmPDyaAbs
                size += SprmUtils.AddSprm(unchecked((short)0x8419), newPAP.GetDyaAbs(), null, sprmList);
            }

            if (newPAP.GetDxaWidth() != oldPAP.GetDxaWidth())
            {
                // sprmPDxaWidth
                size += SprmUtils.AddSprm(unchecked((short)0x841A), newPAP.GetDxaWidth(), null, sprmList);
            }


            if (newPAP.GetWr() != oldPAP.GetWr())
            {
                size += SprmUtils.AddSprm((short)0x2423, newPAP.GetWr(), null, sprmList);
            }
            if (newPAP.GetBrcBar().Equals(oldPAP.GetBrcBar()))
            {
                // XXX: sprm code 0x6428 is sprmPBrcBetween80, but accessed property linked to sprmPBrcBar80 (0x6629)
                int brc = newPAP.GetBrcBar().ToInt();
                size += SprmUtils.AddSprm((short)0x6428, brc, null, sprmList);
            }
            if (!newPAP.GetBrcBottom().Equals(oldPAP.GetBrcBottom()))
            {
                // sprmPBrcBottom80  
                int brc = newPAP.GetBrcBottom().ToInt();
                size += SprmUtils.AddSprm((short)0x6426, brc, null, sprmList);
            }
            if (!newPAP.GetBrcLeft().Equals(oldPAP.GetBrcLeft()))
            {
                // sprmPBrcLeft80  
                int brc = newPAP.GetBrcLeft().ToInt();
                size += SprmUtils.AddSprm((short)0x6425, brc, null, sprmList);
            }
            // Page 53 of public specification begins
            if (!newPAP.GetBrcRight().Equals(oldPAP.GetBrcRight()))
            {
                // sprmPBrcRight80
                int brc = newPAP.GetBrcRight().ToInt();
                size += SprmUtils.AddSprm((short)0x6427, brc, null, sprmList);
            }
            if (!newPAP.GetBrcTop().Equals(oldPAP.GetBrcTop()))
            {
                // sprmPBrcTop80 
                int brc = newPAP.GetBrcTop().ToInt();
                size += SprmUtils.AddSprm((short)0x6424, brc, null, sprmList);
            }
            if (newPAP.GetFNoAutoHyph() != oldPAP.GetFNoAutoHyph())
            {
                size += SprmUtils.AddSprm((short)0x242A, newPAP.GetFNoAutoHyph(), sprmList);
            }
            if (newPAP.GetDyaHeight() != oldPAP.GetDyaHeight() ||
                 newPAP.GetFMinHeight() != oldPAP.GetFMinHeight())
            {
                // sprmPWHeightAbs
                short val = (short)newPAP.GetDyaHeight();
                if (newPAP.GetFMinHeight())
                {
                    val |= unchecked((short)0x8000);
                }
                size += SprmUtils.AddSprm((short)0x442B, val, null, sprmList);
            }
            if (newPAP.GetDcs() != null && !newPAP.GetDcs().Equals(oldPAP.GetDcs()))
            {
                // sprmPDcs 
                size += SprmUtils.AddSprm((short)0x442C, newPAP.GetDcs().ToShort(), null, sprmList);
            }
            if (newPAP.GetShd() != null && !newPAP.GetShd().Equals(oldPAP.GetShd()))
            {
                // sprmPShd80 
                size += SprmUtils.AddSprm((short)0x442D, newPAP.GetShd().ToShort(), null, sprmList);
            }
            if (newPAP.GetDyaFromText() != oldPAP.GetDyaFromText())
            {
                // sprmPDyaFromText
                size += SprmUtils.AddSprm(unchecked((short)0x842E), newPAP.GetDyaFromText(), null, sprmList);
            }
            if (newPAP.GetDxaFromText() != oldPAP.GetDxaFromText())
            {
                // sprmPDxaFromText
                size += SprmUtils.AddSprm(unchecked((short)0x842F), newPAP.GetDxaFromText(), null, sprmList);
            }
            if (newPAP.GetFLocked() != oldPAP.GetFLocked())
            {
                // sprmPFLocked
                size += SprmUtils.AddSprm((short)0x2430, newPAP.GetFLocked(), sprmList);
            }
            if (newPAP.GetFWidowControl() != oldPAP.GetFWidowControl())
            {
                // sprmPFWidowControl
                size += SprmUtils.AddSprm((short)0x2431, newPAP.GetFWidowControl(), sprmList);
            }
            if (newPAP.GetFKinsoku() != oldPAP.GetFKinsoku())
            {
                size += SprmUtils.AddSprm((short)0x2433, newPAP.GetDyaBefore(), null, sprmList);
            }
            if (newPAP.GetFWordWrap() != oldPAP.GetFWordWrap())
            {
                size += SprmUtils.AddSprm((short)0x2434, newPAP.GetFWordWrap(), sprmList);
            }
            if (newPAP.GetFOverflowPunct() != oldPAP.GetFOverflowPunct())
            {
                size += SprmUtils.AddSprm((short)0x2435, newPAP.GetFOverflowPunct(), sprmList);
            }
            if (newPAP.GetFTopLinePunct() != oldPAP.GetFTopLinePunct())
            {
                size += SprmUtils.AddSprm((short)0x2436, newPAP.GetFTopLinePunct(), sprmList);
            }
            if (newPAP.GetFAutoSpaceDE() != oldPAP.GetFAutoSpaceDE())
            {
                size += SprmUtils.AddSprm((short)0x2437, newPAP.GetFAutoSpaceDE(), sprmList);
            }
            if (newPAP.GetFAutoSpaceDN() != oldPAP.GetFAutoSpaceDN())
            {
                size += SprmUtils.AddSprm((short)0x2438, newPAP.GetFAutoSpaceDN(), sprmList);
            }
            if (newPAP.GetWAlignFont() != oldPAP.GetWAlignFont())
            {
                size += SprmUtils.AddSprm((short)0x4439, newPAP.GetWAlignFont(), null, sprmList);
            }
            // Page 54 of public specification begins
            if (newPAP.IsFBackward() != oldPAP.IsFBackward() ||
                newPAP.IsFVertical() != oldPAP.IsFVertical() ||
                newPAP.IsFRotateFont() != oldPAP.IsFRotateFont())
            {
                int val = 0;
                if (newPAP.IsFBackward())
                {
                    val |= 0x2;
                }
                if (newPAP.IsFVertical())
                {
                    val |= 0x1;
                }
                if (newPAP.IsFRotateFont())
                {
                    val |= 0x4;
                }
                size += SprmUtils.AddSprm((short)0x443A, val, null, sprmList);
            }
            if (!Arrays.Equals(newPAP.GetAnld(), oldPAP.GetAnld()))
            {
                // sprmPAnld80 
                size += SprmUtils.AddSprm(unchecked((short)0xC63E), 0, newPAP.GetAnld(), sprmList);
            }
            if (newPAP.GetFPropRMark() != oldPAP.GetFPropRMark() ||
                newPAP.GetIbstPropRMark() != oldPAP.GetIbstPropRMark() ||
                !newPAP.GetDttmPropRMark().Equals(oldPAP.GetDttmPropRMark()))
            {
                // sprmPPropRMark
                byte[] buf = new byte[7];
                buf[0] = (byte)(newPAP.GetFPropRMark() ? 1 : 0);
                LittleEndian.PutShort(buf, 1, (short)newPAP.GetIbstPropRMark());
                newPAP.GetDttmPropRMark().Serialize(buf, 3);
                size += SprmUtils.AddSprm(unchecked((short)0xC63F), 0, buf, sprmList);
            }
            if (newPAP.GetLvl() != oldPAP.GetLvl())
            {
                // sprmPOutLvl 
                size += SprmUtils.AddSprm((short)0x2640, newPAP.GetLvl(), null, sprmList);
            }
            if (newPAP.GetFBiDi() != oldPAP.GetFBiDi())
            {
                // sprmPFBiDi 
                size += SprmUtils.AddSprm((short)0x2441, newPAP.GetFBiDi(), sprmList);
            }
            if (newPAP.GetFNumRMIns() != oldPAP.GetFNumRMIns())
            {
                // sprmPFNumRMIns 
                size += SprmUtils.AddSprm((short)0x2443, newPAP.GetFNumRMIns(), sprmList);
            }

            if (!Arrays.Equals(newPAP.GetNumrm(), oldPAP.GetNumrm()))
            {
                // sprmPNumRM
                size += SprmUtils.AddSprm(unchecked((short)0xC645), 0, newPAP.GetNumrm(), sprmList);
            }

            if (newPAP.GetFInnerTableCell() != oldPAP.GetFInnerTableCell())
            {
                // sprmPFInnerTableCell
                size += SprmUtils.AddSprm((short)0x244b, newPAP.GetFInnerTableCell(), sprmList);
            }

            if (newPAP.GetFTtpEmbedded() != oldPAP.GetFTtpEmbedded())
            {
                // sprmPFInnerTtp 
                size += SprmUtils.AddSprm((short)0x244c, newPAP.GetFTtpEmbedded(), sprmList);
            }
            // Page 55 of public specification begins
            if (newPAP.GetItap() != oldPAP.GetItap())
            {
                // sprmPItap
                size += SprmUtils.AddSprm((short)0x6649, newPAP.GetItap(), null, sprmList);
            }

            return SprmUtils.GetGrpprl(sprmList, size);

        }
コード例 #6
0
 internal void SetPAP(ParagraphProperties pap)
 {
     _pap = pap;
 }
コード例 #7
0
ファイル: StyleSheet.cs プロジェクト: hanwangkun/npoi
        /**
         * Creates a PartagraphProperties object from a papx stored in the
         * StyleDescription at the index istd in the StyleDescription array. The PAP
         * is placed in the StyleDescription at istd after its been Created. Not
         * every StyleDescription will contain a papx. In these cases this function
         * does nothing
         *
         * @param istd The index of the StyleDescription to create the
         *        ParagraphProperties  from (and also place the finished PAP in)
         */
        private void CreatePap(int istd)
        {
            StyleDescription sd = _styleDescriptions[istd];
            ParagraphProperties pap = sd.GetPAP();
            byte[] papx = sd.GetPAPX();
            int baseIndex = sd.GetBaseStyle();
            if (pap == null && papx != null)
            {
                ParagraphProperties parentPAP = new ParagraphProperties();
                if (baseIndex != NIL_STYLE)
                {

                    parentPAP = _styleDescriptions[baseIndex].GetPAP();
                    if (parentPAP == null)
                    {
                        if (baseIndex == istd)
                        {
                            // Oh dear, style claims that it is its own parent
                            throw new InvalidOperationException("Pap style " + istd + " claimed to have itself as its parent, which isn't allowed");
                        }
                        // Create the parent style
                        CreatePap(baseIndex);
                        parentPAP = _styleDescriptions[baseIndex].GetPAP();
                    }

                }

                pap = ParagraphSprmUncompressor.UncompressPAP(parentPAP, papx, 2);
                sd.SetPAP(pap);
            }
        }
コード例 #8
0
ファイル: Paragraph.cs プロジェクト: 89sos98/npoi
        internal Paragraph(PAPX papx, Range parent)
            : base(Math.Max(parent._start, papx.Start), Math.Min(parent._end, papx.End), parent)
        {

            _props = papx.GetParagraphProperties(_doc.GetStyleSheet());
            _papx = papx.GetSprmBuf();
            _istd = papx.GetIstd();
        }
コード例 #9
0
ファイル: Paragraph.cs プロジェクト: 89sos98/npoi
 internal Paragraph(int startIdx, int endIdx, Table parent)
     : base(startIdx, endIdx, parent)
 {
     InitAll();
     PAPX papx = (PAPX)_paragraphs[_parEnd - 1];
     _props = papx.GetParagraphProperties(_doc.GetStyleSheet());
     _papx = papx.GetSprmBuf();
     _istd = papx.GetIstd();
 }
コード例 #10
0
ファイル: Range.cs プロジェクト: datadiode/npoi
 public Paragraph InsertAfter(ParagraphProperties props, int styleIndex)
 //
 {
     return(this.InsertAfter(props, styleIndex, "\r"));
 }