ASF Bugzilla – Attachment 4013 Details for
Bug 14733
[PATCH] HSSFHeader and HSSFFooter doesnot support for my native language
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
PATCH for FooterRecord and HeaderRecord
patch.txt (text/plain), 9.08 KB, created by
Toshiaki Kamoshida
on 2002-12-03 04:16:16 UTC
(
hide
)
Description:
PATCH for FooterRecord and HeaderRecord
Filename:
MIME Type:
Creator:
Toshiaki Kamoshida
Created:
2002-12-03 04:16:16 UTC
Size:
9.08 KB
patch
obsolete
>Index: FooterRecord.java >=================================================================== >RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/record/FooterRecord.java,v >retrieving revision 1.8 >diff -u -r1.8 FooterRecord.java >--- FooterRecord.java 5 Oct 2002 02:38:06 -0000 1.8 >+++ FooterRecord.java 3 Dec 2002 04:10:44 -0000 >@@ -73,7 +73,8 @@ > { > public final static short sid = 0x15; > private byte field_1_footer_len; >- private String field_2_footer; >+ private byte field_2_unicode_flag; >+ private String field_3_footer; > > public FooterRecord() > { >@@ -119,12 +120,47 @@ > if (size > 0) > { > field_1_footer_len = data[ 0 + offset ]; >- field_2_footer = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string >- LittleEndian.ubyteToInt( field_1_footer_len) ); >+ field_2_unicode_flag = data[ 2 + offset ]; >+ if(isMultibyte()) >+ { >+ field_3_footer = StringUtil.getFromUnicodeHigh( >+ data,3 + offset,LittleEndian.ubyteToInt(field_1_footer_len)); >+ } >+ else >+ { >+ field_3_footer = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string >+ LittleEndian.ubyteToInt( field_1_footer_len) ); >+ } > } > } > > /** >+ * see the unicode flag >+ * >+ * @return boolean flag >+ * true:footer string has at least one multibyte character >+ */ >+ public boolean isMultibyte() { >+ return ((field_2_unicode_flag & 0xFF) == 1); >+ } >+ >+ /** >+ * check the parameter has multibyte character >+ * >+ * @param value string to check >+ * @return boolean result >+ * true:string has at least one multibyte character >+ */ >+ private static boolean hasMultibyte(String value){ >+ if( value == null )return false; >+ for(int i = 0 ; i < value.length() ; i++ ){ >+ char c = value.charAt(i); >+ if(c > 0xFF )return true; >+ } >+ return false; >+ } >+ >+ /** > * set the length of the footer string > * > * @param len length of the footer string >@@ -145,7 +181,9 @@ > > public void setFooter(String footer) > { >- field_2_footer = footer; >+ field_3_footer = footer; >+ field_2_unicode_flag = >+ (byte) (hasMultibyte(field_3_footer) ? 1 : 0); > } > > /** >@@ -169,7 +207,7 @@ > > public String getFooter() > { >- return field_2_footer; >+ return field_3_footer; > } > > public String toString() >@@ -193,13 +231,23 @@ > { > len+=3; // [Shawn] Fixed for two null bytes in the length > } >+ short bytelen = (short)(isMultibyte() ? >+ getFooterLength()*2 : getFooterLength() ); > LittleEndian.putShort(data, 0 + offset, sid); > LittleEndian.putShort(data, 2 + offset, >- ( short ) ((len - 4) + getFooterLength())); >+ ( short ) ((len - 4) + bytelen )); > if (getFooterLength() > 0) > { > data[ 4 + offset ] = (byte)getFooterLength(); >- StringUtil.putCompressedUnicode(getFooter(), data, 7 + offset); // [Shawn] Place the string in the correct offset >+ data[ 6 + offset ] = field_2_unicode_flag; >+ if(isMultibyte()) >+ { >+ StringUtil.putUncompressedUnicode(getFooter(), data, 7 + offset); >+ } >+ else >+ { >+ StringUtil.putCompressedUnicode(getFooter(), data, 7 + offset); // [Shawn] Place the string in the correct offset >+ } > } > return getRecordSize(); > } >@@ -212,7 +260,8 @@ > { > retval+=3; // [Shawn] Fixed for two null bytes in the length > } >- return retval + getFooterLength(); >+ return (isMultibyte() ? >+ (retval + getFooterLength()*2) : (retval + getFooterLength())); > } > > public short getSid() >@@ -223,7 +272,8 @@ > public Object clone() { > FooterRecord rec = new FooterRecord(); > rec.field_1_footer_len = field_1_footer_len; >- rec.field_2_footer = field_2_footer; >+ rec.field_2_unicode_flag = field_2_unicode_flag; >+ rec.field_3_footer = field_3_footer; > return rec; > } > } >Index: HeaderRecord.java >=================================================================== >RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/record/HeaderRecord.java,v >retrieving revision 1.8 >diff -u -r1.8 HeaderRecord.java >--- HeaderRecord.java 5 Oct 2002 02:38:06 -0000 1.8 >+++ HeaderRecord.java 3 Dec 2002 04:10:44 -0000 >@@ -73,7 +73,8 @@ > { > public final static short sid = 0x14; > private byte field_1_header_len; >- private String field_2_header; >+ private byte field_2_unicode_flag; >+ private String field_3_header; > > public HeaderRecord() > { >@@ -119,12 +120,47 @@ > if (size > 0) > { > field_1_header_len = data[ 0 + offset ]; >- field_2_header = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string >- LittleEndian.ubyteToInt(field_1_header_len)); >+ field_2_unicode_flag = data[ 2 + offset ]; >+ if(isMultibyte()) >+ { >+ field_3_header = StringUtil.getFromUnicodeHigh( >+ data,3 + offset,LittleEndian.ubyteToInt(field_1_header_len)); >+ } >+ else >+ { >+ field_3_header = new String(data, 3 + offset, // [Shawn] Changed 1 to 3 for offset of string >+ LittleEndian.ubyteToInt( field_1_header_len) ); >+ } > } > } > > /** >+ * see the unicode flag >+ * >+ * @return boolean flag >+ * true:footer string has at least one multibyte character >+ */ >+ public boolean isMultibyte() { >+ return ((field_2_unicode_flag & 0xFF) == 1); >+ } >+ >+ /** >+ * check the parameter has multibyte character >+ * >+ * @param value string to check >+ * @return boolean result >+ * true:string has at least one multibyte character >+ */ >+ private static boolean hasMultibyte(String value){ >+ if( value == null )return false; >+ for(int i = 0 ; i < value.length() ; i++ ){ >+ char c = value.charAt(i); >+ if(c > 0xFF )return true; >+ } >+ return false; >+ } >+ >+ /** > * set the length of the header string > * > * @param len length of the header string >@@ -145,7 +181,9 @@ > > public void setHeader(String header) > { >- field_2_header = header; >+ field_3_header = header; >+ field_2_unicode_flag = >+ (byte) (hasMultibyte(field_3_header) ? 1 : 0); > } > > /** >@@ -169,7 +207,7 @@ > > public String getHeader() > { >- return field_2_header; >+ return field_3_header; > } > > public String toString() >@@ -193,14 +231,24 @@ > { > len+=3; // [Shawn] Fixed for two null bytes in the length > } >+ short bytelen = (short)(isMultibyte() ? >+ getHeaderLength()*2 : getHeaderLength() ); > LittleEndian.putShort(data, 0 + offset, sid); > LittleEndian.putShort(data, 2 + offset, >- ( short ) ((len - 4) + getHeaderLength())); >+ ( short ) ((len - 4) + bytelen)); > > if (getHeaderLength() > 0) > { > data[ 4 + offset ] = (byte)getHeaderLength(); >- StringUtil.putCompressedUnicode(getHeader(), data, 7 + offset); // [Shawn] Place the string in the correct offset >+ data[ 6 + offset ] = field_2_unicode_flag; >+ if(isMultibyte()) >+ { >+ StringUtil.putUncompressedUnicode(getHeader(), data, 7 + offset); >+ } >+ else >+ { >+ StringUtil.putCompressedUnicode(getHeader(), data, 7 + offset); // [Shawn] Place the string in the correct offset >+ } > } > return getRecordSize(); > } >@@ -213,8 +261,8 @@ > { > retval+=3; // [Shawn] Fixed for two null bytes in the length > } >- retval += getHeaderLength(); >- return retval; >+ return (isMultibyte() ? >+ (retval + getHeaderLength()*2) : (retval + getHeaderLength())); > } > > public short getSid() >@@ -225,7 +273,8 @@ > public Object clone() { > HeaderRecord rec = new HeaderRecord(); > rec.field_1_header_len = field_1_header_len; >- rec.field_2_header = field_2_header; >+ rec.field_2_unicode_flag = field_2_unicode_flag; >+ rec.field_3_header = field_3_header; > return rec; > } > } > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 14733
:
3916
|
3963
|
3964
|
3965
| 4013 |
4104
|
4105
|
4106
|
4156