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: [EMAIL PROTECTED]
"Ryan Ackley" <[EMAIL PROTECTED]>
04/07/2003 00:33
Please respond to "POI Developers List"
To: "POI Developers List" <[EMAIL PROTECTED]>
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" <[EMAIL PROTECTED]>
To: "POI Developers List" <[EMAIL PROTECTED]>
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 [EMAIL PROTECTED]
> *
> * 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 [EMAIL PROTECTED]
> *
> * 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: [EMAIL PROTECTED]
>
>
>
>
> "Ryan Ackley" <[EMAIL PROTECTED]>
> 03/07/2003 15:39
> Please respond to "POI Developers List"
>
>
> To: "POI Developers List" <[EMAIL PROTECTED]>
> 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: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]