Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ====================================================================
     Licensed to the Apache Software Foundation (ASF) under one or more
     contributor license agreements.  See the NOTICE file distributed with
     this work for additional information regarding copyright ownership.
     The ASF licenses this file to You under the Apache License, Version 2.0
     (the "License"); you may not use this file except in compliance with
     the License.  You may obtain a copy of the License at
  
         http://www.apache.org/licenses/LICENSE-2.0
 
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
 
 package org.apache.poi.hwpf.sprm;
 
This class is used to represent a sprm operation from a Word 97/2000/XP document.

Author(s):
Ryan Ackley
Version:
1.0
 
 public final class SprmOperation
 {
     private static final BitField BITFIELD_OP = BitFieldFactory
             .getInstance( 0x1ff );
     private static final BitField BITFIELD_SIZECODE = BitFieldFactory
             .getInstance( 0xe000 );
     private static final BitField BITFIELD_SPECIAL = BitFieldFactory
             .getInstance( 0x200 );
     private static final BitField BITFIELD_TYPE = BitFieldFactory
             .getInstance( 0x1c00 );
 
     final static private short SPRM_LONG_PARAGRAPH = (short) 0xc615;
     final static private short SPRM_LONG_TABLE = (short) 0xd608;
 
     public static final int TYPE_PAP = 1;
     public static final int TYPE_CHP = 2;
     public static final int TYPE_PIC = 3;
     public static final int TYPE_SEP = 4;
     public static final int TYPE_TAP = 5;
 
     @Deprecated
     final static public int PAP_TYPE = ;
     @Deprecated
     final static public int TAP_TYPE = ;
 
     public static int getOperationFromOpcodeshort opcode )
     {
         return .getValueopcode );
     }
 
     public static int getTypeFromOpcodeshort opcode )
     {
         return .getValueopcode );
     }
 
     private int _offset;
     private int _gOffset;
     private byte[] _grpprl;
     private int _size;
     private short _value;
 
     public SprmOperationbyte[] grpprlint offset )
     {
          = grpprl;
          = LittleEndian.getShortgrpprloffset );
          = offset;
          = offset + 2;
          = initSize );
     }
 
     public byte[] toByteArray()
     {
         byte[] result = new byte[size()];
         System.arraycopyresult, 0, size() );
         return result;
     }
 
     public byte[] getGrpprl()
     {
         return ;
     }
 
     public int getGrpprlOffset()
     {
         return ;
     }
     
    public int getOperand()
    {
        switch ( getSizeCode() )
        {
        case 0:
        case 1:
            return [];
        case 2:
        case 4:
        case 5:
            return LittleEndian.getShort );
        case 3:
            return LittleEndian.getInt );
        case 6:
            // surely shorter than an int...
            byte operandLength = [ + 1];
            // initialized to zeros by JVM
            byte[] codeBytes = new byte[.];
            for ( int i = 0; i < operandLengthi++ )
                if (  + i < . )
                    codeBytes[i] = [ + 1 + i];
            return LittleEndian.getIntcodeBytes, 0 );
        case 7:
            byte threeByteInt[] = new byte[4];
            threeByteInt[0] = [];
            threeByteInt[1] = [ + 1];
            threeByteInt[2] = [ + 2];
            threeByteInt[3] = (byte) 0;
            return LittleEndian.getIntthreeByteInt, 0 );
        default:
            throw new IllegalArgumentException(
                    "SPRM contains an invalid size code" );
        }
    }
    public short getOperandShortSigned()
    {
        if ( getSizeCode() != 2 && getSizeCode() != 4 && getSizeCode() != 5 )
            throw new UnsupportedOperationException(
                    "Current SPRM doesn't have signed short operand: " + this );
        return LittleEndian.getShort );
    }
    public int getOperation()
    {
        return .getValue );
    }
    public int getSizeCode()
    {
        return .getValue );
    }
    public int getType()
    {
        return .getValue );
    }
    private int initSizeshort sprm )
    {
        switch ( getSizeCode() )
        {
        case 0:
        case 1:
            return 3;
        case 2:
        case 4:
        case 5:
            return 4;
        case 3:
            return 6;
        case 6:
            int offset = ;
            if ( sprm ==  || sprm ==  )
            {
                int retVal = ( 0x0000ffff & LittleEndian.getShort,
                        offset ) ) + 3;
                 += 2;
                return retVal;
            }
            return ( 0x000000ff & [++] ) + 3;
        case 7:
            return 5;
        default:
            throw new IllegalArgumentException(
                    "SPRM contains an invalid size code" );
        }
    }
    public int size()
    {
        return ;
    }
    @Override
    public String toString()
    {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append"[SPRM] (0x" );
        stringBuilder.append( Integer.toHexString & 0xffff ) );
        stringBuilder.append"): " );
        try
        {
            stringBuilder.appendgetOperand() );
        }
        catch ( Exception exc )
        {
            stringBuilder.append"(error)" );
        }
        return stringBuilder.toString();
    }
New to GrepCode? Check out our FAQ X