poi-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Praveen Mathew" <prmat...@in.ibm.com>
Subject Re: New FFN & Fontable classes
Date Fri, 04 Jul 2003 06:27:48 GMT
Thanks Ryan for creating a Bugzilla acount for me. Does creating an 
attachement & submiting is all I have to do for sending new patches? 

still now I dont have a clear picture of whats happening with 
Bugzilla...what is this Bugzilla? & why does the patches sent are 
considered as BUGS!!

Thanks & Regards
Praveen

Praveen Mathew
IBM Software Labs,Airport Road,
Bangalore - 560 017,India.
Ph : +91- 80 - 504 4609 (Direct)
       +91 - 80 - 5262355 Extn: 3609
Email: prmathew@in.ibm.com




"Ryan Ackley" <sackley@cfl.rr.com>
04/07/2003 00:33
Please respond to "POI Developers List"

 
        To:     "POI Developers List" <poi-dev@jakarta.apache.org>
        cc: 
        Subject:        Re: New FFN & Fontable classes

 

Praveen,

I need you to go to this website:
http://issues.apache.org/bugzilla/createaccount.cgi and create an apache
bugzilla account, then I want you to go here:
http://issues.apache.org/bugzilla/createattachment.cgi?id=21325 and upload
Ffn.java and FontTable.java. Here is the issue I created for you:
http://issues.apache.org/bugzilla/show_bug.cgi?id=21325

Ryan

----- Original Message ----- 
From: "Praveen Mathew" <prmathew@in.ibm.com>
To: "POI Developers List" <poi-dev@jakarta.apache.org>
Sent: Thursday, July 03, 2003 8:05 AM
Subject: New FFN & Fontable classes


> I am unable to connect to cvs through Eclipse due to firewall problems. 
I
> am trying out "cvsgrab"  as avik suggested
> As soon as I set up the cvs I will sent the patch.
>
> If i dont need to send codes like this please tell me.
>
> FontTable.java...
>
> /* ====================================================================
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2003 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution,
>  *    if any, must include the following acknowledgment:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowledgment may appear in the software 
itself,
>  *    if and wherever such third-party acknowledgments normally appear.
>  *
>  * 4. The names "Apache" and "Apache Software Foundation" and
>  *    "Apache POI" must not be used to endorse or promote products
>  *    derived from this software without prior written permission. For
>  *    written permission, please contact apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache",
>  *    "Apache POI", nor may "Apache" appear in their name, without
>  *    prior written permission of the Apache Software Foundation.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.poi.hwpf.model.hdftypes;
>
> import java.io.IOException;
> import org.apache.poi.hwpf.model.io.HWPFFileSystem;
> import org.apache.poi.hwpf.model.io.HWPFOutputStream;
> import org.apache.poi.util.LittleEndian;
>
> /**
>  * FontTable or in MS terminology sttbfffn is a common data structure
written in all
>  * Word files. The sttbfffn is an sttbf where each string is an FFN
structure instead
>  * of pascal-style strings. An sttbf is a string Table stored in file.
Thus sttbffn
>  * is like an Sttbf with an array of FFN structures that stores the font
name strings
>  *
>  * @author Praveen Mathew
>  */
> public class FontTable
> {
>   private short exntdChar;// strings are extended character if = 0xFFFF
>   private short stringCount;// how many strings are included in the 
string
table
>   private short extraDataSz;// size in bytes of the extra data
>
>
>   // added extra facilitator members
>   private int lcbSttbfffn;// count of bytes in sttbfffn
>   private boolean isExtndChar;
>   private int fcSttbfffnMainOffset = 0x0112;// offset in mainStream
>   private int lcbSttbfffnMainOffset = 0x0116;// offset in mainstream
>   private int fcSttbfffn;// table stream offset for sttbfffn
>
>
>   // FFN structure containing strings of font names
>   private Ffn[] fontNames = null;
>
>
>   public FontTable(byte[] buf, int offset, int lcbSttbfffn)
>   {
>     this.lcbSttbfffn = lcbSttbfffn;
>     this.fcSttbfffn = offset;
>
>     exntdChar = LittleEndian.getShort(buf, offset);
>     offset += LittleEndian.SHORT_SIZE;
>     stringCount = LittleEndian.getShort(buf, offset);
>     offset += LittleEndian.SHORT_SIZE;
>     extraDataSz = LittleEndian.getShort(buf, offset);
>     offset += LittleEndian.SHORT_SIZE;
>
>     if ((exntdChar & 0xFFFF) == 0xFFFF)
>     {
>       isExtndChar = true;
>     }
>     else
>     {
>       isExtndChar = false;
>     }
>
>     fontNames = new Ffn[stringCount]; //Ffn corresponds to a Pascal 
style
String in STTBF.
>
>     for(int i = 0;i<stringCount; i++)
>     {
>       // some mistake in the fields we have chosen
>       if(offset >= this.getSize())
>       {
>         System.out.println("Total size of Sttbfn mismatched with
calculated size");
>         break;
>       }
>
>       fontNames[i] = new Ffn(buf,offset);
>       offset += fontNames[i].getSize();
>     }
>   }
>
>   public boolean isExtndChar()
>   {
>     return  isExtndChar;
>   }
>
>   public short getStringCount()
>   {
>     return  stringCount;
>   }
>
>   public int getSize()
>   {
>     return lcbSttbfffn;
>   }
>
>   public char [] getMainFont(int chpFtc )
>   {
>     if(chpFtc >= stringCount)
>     {
>       System.out.println("Mismatch in chpFtc with stringCount");
>       return null;
>     }
>
>     return fontNames[chpFtc].getMainFontName();
>   }
>
>   public char [] getAltFont(int chpFtc )
>   {
>     if(chpFtc >= stringCount)
>     {
>       System.out.println("Mismatch in chpFtc with stringCount");
>       return null;
>     }
>
>     return fontNames[chpFtc].getAltFontName();
>   }
>
>   public void setStringCount(short stringCount)
>   {
>     this.stringCount = stringCount;
>   }
>
>   public void writeTo(HWPFFileSystem sys, int fcMin)
>           throws IOException
>         {
>           HWPFOutputStream docStream = sys.getStream("WordDocument");
>           HWPFOutputStream tableStream = sys.getStream("1Table");
>           byte[] buf = docStream.toByteArray();
>           LittleEndian.putInt(buf,fcSttbfffnMainOffset, fcSttbfffn);
>           LittleEndian.putInt(buf,lcbSttbfffnMainOffset, lcbSttbfffn);
>           docStream.write(buf);
>
>           byte[] buf1 = new byte[LittleEndian.SHORT_SIZE];
>           LittleEndian.putShort(buf1, exntdChar);
>           tableStream.write(buf1);
>           LittleEndian.putShort(buf1, stringCount);
>           tableStream.write(buf1);
>           LittleEndian.putShort(buf1, extraDataSz);
>           tableStream.write(buf1);
>
>           for(int i = 0; i < fontNames.length; i++)
>           {
>                 tableStream.write(fontNames[i].toByteArray());
>           }
>
>         }
>
>
>
> }
>
>
>
> Ffn.java.....
>
> /* ====================================================================
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2003 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution,
>  *    if any, must include the following acknowledgment:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowledgment may appear in the software 
itself,
>  *    if and wherever such third-party acknowledgments normally appear.
>  *
>  * 4. The names "Apache" and "Apache Software Foundation" and
>  *    "Apache POI" must not be used to endorse or promote products
>  *    derived from this software without prior written permission. For
>  *    written permission, please contact apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache",
>  *    "Apache POI", nor may "Apache" appear in their name, without
>  *    prior written permission of the Apache Software Foundation.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.poi.hwpf.model.hdftypes;
>
> import org.apache.poi.util.BitField;
> import org.apache.poi.util.LittleEndian;
>
> /**
>  * FFN - Font Family Name. FFN is a data structure that stores the names
of the Main
>  * Font and that of Alternate font as an array of characters. It has 
also
a header
>  * that stores info about the whole structure and the fonts
>  *
>  * @author Praveen Mathew
>  */
> public class Ffn
> {
>   private int field1_cbFfnM1;//total length of FFN - 1.
>   private byte field2;
>     private  static BitField _prq = new BitField(0x0003);// pitch 
request
>     private  static BitField _fTrueType = new BitField(0x0004);// when 
1,
font is a TrueType font
>     private  static BitField _ff = new BitField(0x0070);
>   private short field3_wWeight;// base weight of font
>   private byte field4_chs;// character set identifier
>   private byte field5_ixchSzAlt;  // index into ffn.szFfn to the name of
>                                   // the alternate font
>   private byte [] panose = new byte[10];//????
>   private byte [] fontSig         = new byte[24];//????
>
>   // zero terminated string that records name of font, cuurently not
>   // supporting Extended chars
>   private char [] xszFfn;
>   private int xszFfnLength;
>
>   public Ffn(byte[] buf, int offset)
>   {
>     field1_cbFfnM1 = LittleEndian.getUnsignedByte(buf,offset);
>     offset += LittleEndian.BYTE_SIZE;
>     field2 = buf[offset];
>     offset += LittleEndian.BYTE_SIZE;
>     field3_wWeight = LittleEndian.getShort(buf, offset);
>     offset += LittleEndian.SHORT_SIZE;
>     field4_chs = buf[offset];
>     offset += LittleEndian.BYTE_SIZE;
>     field5_ixchSzAlt = buf[offset];
>     offset += LittleEndian.BYTE_SIZE;
>
>     // read panose and fs so we can write them back out.
>     System.arraycopy(buf, offset, panose, 0, panose.length);
>     offset += panose.length;
>     System.arraycopy(buf, offset, fontSig, 0, fontSig.length);
>     offset += fontSig.length;
>
>     xszFfnLength = this.getSize() - offset;
>     xszFfn = new char[xszFfnLength];
>
>     for(int i = 0; i < xszFfnLength; i++)
>     {
>       xszFfn[i] = (char)LittleEndian.getUnsignedByte(buf, offset);
>       offset += LittleEndian.BYTE_SIZE;
>     }
>
>
>   }
>
>   public int getField1_cbFfnM1()
>   {
>     return  field1_cbFfnM1;
>   }
>
>   public int getSize()
>   {
>     return (field1_cbFfnM1 + 1);
>   }
>
>   public char [] getMainFontName()
>   {
>     char [] temp = new char[field5_ixchSzAlt];
>     System.arraycopy(xszFfn,0,temp,0,temp.length);
>     return temp;
>   }
>
>   public char [] getAltFontName()
>   {
>     char [] temp = new char[xszFfnLength - field5_ixchSzAlt];
>     System.arraycopy(xszFfn, field5_ixchSzAlt, temp, 0, temp.length);
>     return temp;
>   }
>
>   public void setField1_cbFfnM1(int field1_cbFfnM1)
>   {
>     this.field1_cbFfnM1 = field1_cbFfnM1;
>   }
>
>   // changed protected to public
>   public byte[] toByteArray()
>   {
>         int offset = 0;
>         byte[] buf = new byte[this.getSize()];
>
>         buf[offset] = (byte)field1_cbFfnM1;
>         offset += LittleEndian.BYTE_SIZE;
>         buf[offset] = field2;
>         offset += LittleEndian.BYTE_SIZE;
>         LittleEndian.putShort(buf, offset, field3_wWeight);
>         offset += LittleEndian.SHORT_SIZE;
>         buf[offset] = field4_chs;
>         offset += LittleEndian.BYTE_SIZE;
>         buf[offset] = field5_ixchSzAlt;
>         offset += LittleEndian.BYTE_SIZE;
>
>         System.arraycopy(panose,0,buf, offset,panose.length);
>         offset += panose.length;
>         System.arraycopy(fontSig,0,buf, offset, fontSig.length);
>         offset += fontSig.length;
>
>         for(int i = 0; i < xszFfn.length; i++)
>         {
>                 buf[offset] = (byte)xszFfn[i];
>                 offset += LittleEndian.BYTE_SIZE;
>         }
>
>     return buf;
>
>   }
>
>
> }
>
>
>
>
> Thanks & Regards
> Praveen
>
> Praveen Mathew
> IBM Software Labs,Airport Road,
> Bangalore - 560 017,India.
> Ph : +91- 80 - 504 4609 (Direct)
>        +91 - 80 - 5262355 Extn: 3609
> Email: prmathew@in.ibm.com
>
>
>
>
> "Ryan Ackley" <sackley@cfl.rr.com>
> 03/07/2003 15:39
> Please respond to "POI Developers List"
>
>
>         To:     "POI Developers List" <poi-dev@jakarta.apache.org>
>         cc:
>         Subject:        Re: HWPF: java doubts
>
>
>
> > Thats cool!!
> >
> > Then why we need getUnsignedByte() itself??
> > eg:  to read a byte read 0xff , get its unsigned value by typcasting 
to
> > int  i,e 0x000000ff;
> > & to write it back just write the byte  0xff.
>
> The byte 0xff is equal to -1 so when you cast it to an int you end up 
with
> an int that is equal to -1 (0xffffffff). We want an int that is equal to
> 255. When you cast from a smaller precision number to a larger precision
> number (byte->int) the JVM will always preserve the sign.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: poi-dev-help@jakarta.apache.org
>
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org




Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message