]> source.dussan.org Git - poi.git/commitdiff
refactor FieldDescriptor to be based on autogenerated code
authorSergey Vladimirov <sergey@apache.org>
Fri, 8 Jul 2011 09:49:47 +0000 (09:49 +0000)
committerSergey Vladimirov <sergey@apache.org>
Fri, 8 Jul 2011 09:49:47 +0000 (09:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1144224 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/model/FieldDescriptor.java
src/scratchpad/src/org/apache/poi/hwpf/model/types/FLDAbstractType.java [new file with mode: 0644]
src/types/definitions/fld_type.out.xml [new file with mode: 0644]
src/types/definitions/fld_type.xml [new file with mode: 0644]

index 4c0238f5dd6f375239b979bfd3d71ad31b87e1f3..daafedd4ce592582152e3dd42376565db8a2f648 100644 (file)
 
 package org.apache.poi.hwpf.model;
 
-import java.text.MessageFormat;
-
-import org.apache.poi.util.HexDump;
+import org.apache.poi.hwpf.model.types.FLDAbstractType;
 
 /**
  * Class for the FLD structure.
  * 
  * @author Cedric Bosdonnat <cbosdonnat@novell.com>
- *
  */
-public final class FieldDescriptor
+public final class FieldDescriptor extends FLDAbstractType
 {
-  public static final int FIELD_BEGIN_MARK = 0x13;
-  public static final int FIELD_SEPARATOR_MARK = 0x14;
-  public static final int FIELD_END_MARK = 0x15;
-
-  private static final short BOUNDARY_MASK = 0x1F;
-  private static final short TYPE_MASK = 0xFF;
-  private static final short ZOMBIE_EMBED_MASK = 0x02;
-  private static final short RESULT_DIRTY_MASK = 0x04;
-  private static final short RESULT_EDITED_MASK = 0x08;
-  private static final short LOCKED_MASK = 0x10;
-  private static final short PRIVATE_RESULT_MASK = 0x20;
-  private static final short NESTED_MASK = 0x40;
-  private static final short HAS_SEP_MASK = 0x80;
-
-  byte _fieldBoundaryType;
-  byte _info;
+    public static final int FIELD_BEGIN_MARK = 0x13;
+    public static final int FIELD_SEPARATOR_MARK = 0x14;
+    public static final int FIELD_END_MARK = 0x15;
 
-  private int fieldType;
-  private boolean zombieEmbed;
-  private boolean resultDirty;
-  private boolean resultEdited;
-  private boolean locked;
-  private boolean privateResult;
-  private boolean nested;
-  private boolean hasSep;
-
-  public FieldDescriptor(byte[] data)
-  {
-    _fieldBoundaryType = (byte) (data[0] & BOUNDARY_MASK);
-    _info = data[1];
-
-    if (_fieldBoundaryType == FIELD_BEGIN_MARK)
-    {
-      fieldType = _info & TYPE_MASK;
-    } else if (_fieldBoundaryType == FIELD_END_MARK)
+    public FieldDescriptor( byte[] data )
     {
-      zombieEmbed = ((_info & ZOMBIE_EMBED_MASK) == 1);
-      resultDirty = ((_info & RESULT_DIRTY_MASK) == 1);
-      resultEdited = ((_info & RESULT_EDITED_MASK) == 1);
-      locked = ((_info & LOCKED_MASK) == 1);
-      privateResult = ((_info & PRIVATE_RESULT_MASK) == 1);
-      nested = ((_info & NESTED_MASK) == 1);
-      hasSep = ((_info & HAS_SEP_MASK) == 1);
+        fillFields( data, 0 );
     }
-  }
 
-  public int getBoundaryType()
-  {
-    return _fieldBoundaryType;
-  }
-
-  public int getFieldType()
-  {
-    if (_fieldBoundaryType != FIELD_BEGIN_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for begin marks.");
-    return fieldType;
-  }
-
-  public boolean isZombieEmbed()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return zombieEmbed;
-  }
-
-  public boolean isResultDirty()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return resultDirty;
-  }
+    public int getBoundaryType()
+    {
+        return getCh();
+    }
 
-  public boolean isResultEdited()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return resultEdited;
-  }
+    public int getFieldType()
+    {
+        if ( getCh() != FIELD_BEGIN_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for begin marks." );
+        return getFlt();
+    }
 
-  public boolean isLocked()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return locked;
-  }
+    public boolean isZombieEmbed()
+    {
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFZombieEmbed();
+    }
 
-  public boolean isPrivateResult()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return privateResult;
-  }
+    public boolean isResultDirty()
+    {
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFResultDirty();
+    }
 
-  public boolean isNested()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return nested;
-  }
+    public boolean isResultEdited()
+    {
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFResultEdited();
+    }
 
-  public boolean isHasSep()
-  {
-    if (_fieldBoundaryType != FIELD_END_MARK)
-      throw new UnsupportedOperationException(
-          "This field is only defined for end marks.");
-    return hasSep;
-  }
+    public boolean isLocked()
+    {
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFLocked();
+    }
 
-  public String toString()
-  {
-    String details = new String();
-    if (_fieldBoundaryType == FIELD_BEGIN_MARK)
+    public boolean isPrivateResult()
     {
-      details = " type: " + fieldType;
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFPrivateResult();
     }
-    else if (_fieldBoundaryType == FIELD_END_MARK)
+
+    public boolean isNested()
     {
-      details = " flags: 0x" + HexDump.toHex(_info);
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFNested();
     }
 
-    return MessageFormat.format("FLD - 0x{0}{1}", HexDump
-        .toHex((byte) _fieldBoundaryType), details);
-  }
+    public boolean isHasSep()
+    {
+        if ( getCh() != FIELD_END_MARK )
+            throw new UnsupportedOperationException(
+                    "This field is only defined for end marks." );
+        return isFHasSep();
+    }
 }
diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/FLDAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/FLDAbstractType.java
new file mode 100644 (file)
index 0000000..3408751
--- /dev/null
@@ -0,0 +1,310 @@
+/* ====================================================================
+   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.model.types;
+
+import org.apache.poi.hdf.model.hdftypes.HDFType;
+import org.apache.poi.util.BitField;
+
+/**
+ * Field Descriptor (FLD).
+ * <p>
+ * Class and fields descriptions are quoted from Microsoft Office Word 97-2007
+ * Binary File Format
+ * 
+ * NOTE: This source is automatically generated please do not modify this file.
+ * Either subclass or remove the record in src/records/definitions.
+ * 
+ * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary
+ *         File Format Specification [*.doc]
+ */
+public abstract class FLDAbstractType implements HDFType
+{
+
+    protected char field_1_ch;
+    protected byte field_2_flt;
+    private static BitField fDiffer = new BitField( 0x01 );
+    private static BitField fZombieEmbed = new BitField( 0x02 );
+    private static BitField fResultDirty = new BitField( 0x04 );
+    private static BitField fResultEdited = new BitField( 0x08 );
+    private static BitField fLocked = new BitField( 0x10 );
+    private static BitField fPrivateResult = new BitField( 0x20 );
+    private static BitField fNested = new BitField( 0x40 );
+    private static BitField fHasSep = new BitField( 0x40 );
+
+    public FLDAbstractType()
+    {
+
+    }
+
+    protected void fillFields( byte[] data, int offset )
+    {
+        field_1_ch = (char) data[0x0 + offset];
+        field_2_flt = data[0x1 + offset];
+
+    }
+
+    public void serialize( byte[] data, int offset )
+    {
+        data[0x0 + offset] = (byte) field_1_ch;
+        ;
+        data[0x1 + offset] = field_2_flt;
+        ;
+
+    }
+
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer();
+
+        buffer.append( "[FLD]\n" );
+
+        buffer.append( "    .ch                   = " );
+        buffer.append( " (" ).append( getCh() ).append( " )\n" );
+
+        buffer.append( "    .flt                  = " );
+        buffer.append( " (" ).append( getFlt() ).append( " )\n" );
+        buffer.append( "         .fDiffer                  = " )
+                .append( isFDiffer() ).append( '\n' );
+        buffer.append( "         .fZombieEmbed             = " )
+                .append( isFZombieEmbed() ).append( '\n' );
+        buffer.append( "         .fResultDirty             = " )
+                .append( isFResultDirty() ).append( '\n' );
+        buffer.append( "         .fResultEdited            = " )
+                .append( isFResultEdited() ).append( '\n' );
+        buffer.append( "         .fLocked                  = " )
+                .append( isFLocked() ).append( '\n' );
+        buffer.append( "         .fPrivateResult           = " )
+                .append( isFPrivateResult() ).append( '\n' );
+        buffer.append( "         .fNested                  = " )
+                .append( isFNested() ).append( '\n' );
+        buffer.append( "         .fHasSep                  = " )
+                .append( isFHasSep() ).append( '\n' );
+
+        buffer.append( "[/FLD]\n" );
+        return buffer.toString();
+    }
+
+    /**
+     * Size of record (exluding 4 byte header)
+     */
+    public int getSize()
+    {
+        return 4 + +1 + 1;
+    }
+
+    /**
+     * Type of field boundary the FLD describes: 19 -- field begin mark, 20 --
+     * field separation mark; 21 -- field end mark.
+     */
+    public char getCh()
+    {
+        return field_1_ch;
+    }
+
+    /**
+     * Type of field boundary the FLD describes: 19 -- field begin mark, 20 --
+     * field separation mark; 21 -- field end mark.
+     */
+    public void setCh( char field_1_ch )
+    {
+        this.field_1_ch = field_1_ch;
+    }
+
+    /**
+     * Field type when ch == 19 OR field flags when ch == 21 .
+     */
+    public byte getFlt()
+    {
+        return field_2_flt;
+    }
+
+    /**
+     * Field type when ch == 19 OR field flags when ch == 21 .
+     */
+    public void setFlt( byte field_2_flt )
+    {
+        this.field_2_flt = field_2_flt;
+    }
+
+    /**
+     * Sets the fDiffer field value. Ignored for saved file
+     */
+    public void setFDiffer( boolean value )
+    {
+        field_2_flt = (byte) fDiffer.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * Ignored for saved file
+     * 
+     * @return the fDiffer field value.
+     */
+    public boolean isFDiffer()
+    {
+        return fDiffer.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fZombieEmbed field value. ==1 when result still believes this
+     * field is an EMBED or LINK field
+     */
+    public void setFZombieEmbed( boolean value )
+    {
+        field_2_flt = (byte) fZombieEmbed.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when result still believes this field is an EMBED or LINK field
+     * 
+     * @return the fZombieEmbed field value.
+     */
+    public boolean isFZombieEmbed()
+    {
+        return fZombieEmbed.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fResultDirty field value. ==1 when user has edited or formatted
+     * the result. == 0 otherwise
+     */
+    public void setFResultDirty( boolean value )
+    {
+        field_2_flt = (byte) fResultDirty.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when user has edited or formatted the result. == 0 otherwise
+     * 
+     * @return the fResultDirty field value.
+     */
+    public boolean isFResultDirty()
+    {
+        return fResultDirty.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fResultEdited field value. ==1 when user has inserted text into
+     * or deleted text from the result
+     */
+    public void setFResultEdited( boolean value )
+    {
+        field_2_flt = (byte) fResultEdited.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when user has inserted text into or deleted text from the result
+     * 
+     * @return the fResultEdited field value.
+     */
+    public boolean isFResultEdited()
+    {
+        return fResultEdited.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fLocked field value. ==1 when field is locked from recalculation
+     */
+    public void setFLocked( boolean value )
+    {
+        field_2_flt = (byte) fLocked.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when field is locked from recalculation
+     * 
+     * @return the fLocked field value.
+     */
+    public boolean isFLocked()
+    {
+        return fLocked.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fPrivateResult field value. ==1 whenever the result of the field
+     * is never to be shown
+     */
+    public void setFPrivateResult( boolean value )
+    {
+        field_2_flt = (byte) fPrivateResult.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 whenever the result of the field is never to be shown
+     * 
+     * @return the fPrivateResult field value.
+     */
+    public boolean isFPrivateResult()
+    {
+        return fPrivateResult.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fNested field value. ==1 when field is nested within another
+     * field
+     */
+    public void setFNested( boolean value )
+    {
+        field_2_flt = (byte) fNested.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when field is nested within another field
+     * 
+     * @return the fNested field value.
+     */
+    public boolean isFNested()
+    {
+        return fNested.isSet( field_2_flt );
+
+    }
+
+    /**
+     * Sets the fHasSep field value. ==1 when field has a field separator
+     */
+    public void setFHasSep( boolean value )
+    {
+        field_2_flt = (byte) fHasSep.setBoolean( field_2_flt, value );
+
+    }
+
+    /**
+     * ==1 when field has a field separator
+     * 
+     * @return the fHasSep field value.
+     */
+    public boolean isFHasSep()
+    {
+        return fHasSep.isSet( field_2_flt );
+
+    }
+
+} // END OF CLASS
+
diff --git a/src/types/definitions/fld_type.out.xml b/src/types/definitions/fld_type.out.xml
new file mode 100644 (file)
index 0000000..a852f16
--- /dev/null
@@ -0,0 +1,300 @@
+
+package org.apache.poi.hwpf.model.types;
+
+
+
+import org.apache.poi.util.BitField;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.StringUtil;
+import org.apache.poi.util.HexDump;
+import org.apache.poi.hdf.model.hdftypes.HDFType;
+import org.apache.poi.hwpf.usermodel.*;
+
+/**
+ * Field Descriptor (FLD). <p>Class and fields descriptions are
+        quoted from
+        Microsoft Office Word 97-2007 Binary File Format
+    
+ * NOTE: This source is automatically generated please do not modify this file.  Either subclass or
+ *       remove the record in src/records/definitions.
+
+ * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File Format
+        Specification [*.doc]
+    
+ */
+public abstract class FLDAbstractType
+    implements HDFType
+{
+
+    protected  char field_1_ch;
+    protected  byte field_2_flt;
+        private static BitField  fDiffer = new BitField(0x01);
+        private static BitField  fZombieEmbed = new BitField(0x02);
+        private static BitField  fResultDirty = new BitField(0x04);
+        private static BitField  fResultEdited = new BitField(0x08);
+        private static BitField  fLocked = new BitField(0x10);
+        private static BitField  fPrivateResult = new BitField(0x20);
+        private static BitField  fNested = new BitField(0x40);
+        private static BitField  fHasSep = new BitField(0x40);
+
+
+    public FLDAbstractType()
+    {
+
+    }
+
+    protected void fillFields(byte [] data, int offset)
+    {
+        field_1_ch                      = data[ 0x0 + offset ];
+        field_2_flt                     = data[ 0x1 + offset ];
+
+    }
+
+    public void serialize(byte[] data, int offset)
+    {
+        data[ 0x0 + offset] = field_1_ch;;
+        data[ 0x1 + offset] = field_2_flt;;
+
+    }
+
+
+    public String toString()
+    {
+        StringBuffer buffer = new StringBuffer();
+
+        buffer.append("[FLD]\n");
+
+        buffer.append("    .ch                   = ");
+        buffer.append(" (").append(getCh()).append(" )\n");
+
+        buffer.append("    .flt                  = ");
+        buffer.append(" (").append(getFlt()).append(" )\n");
+        buffer.append("         .fDiffer                  = ").append(isFDiffer()).append('\n');
+        buffer.append("         .fZombieEmbed             = ").append(isFZombieEmbed()).append('\n');
+        buffer.append("         .fResultDirty             = ").append(isFResultDirty()).append('\n');
+        buffer.append("         .fResultEdited            = ").append(isFResultEdited()).append('\n');
+        buffer.append("         .fLocked                  = ").append(isFLocked()).append('\n');
+        buffer.append("         .fPrivateResult           = ").append(isFPrivateResult()).append('\n');
+        buffer.append("         .fNested                  = ").append(isFNested()).append('\n');
+        buffer.append("         .fHasSep                  = ").append(isFHasSep()).append('\n');
+
+        buffer.append("[/FLD]\n");
+        return buffer.toString();
+    }
+
+    /**
+     * Size of record (exluding 4 byte header)
+     */
+    public int getSize()
+    {
+        return 4 +  + 1 + 1;
+    }
+
+
+
+    /**
+     * Type of field boundary the FLD describes: 19 -- field begin mark, 20 -- field separation mark; 21 -- field end mark.
+     */
+    public char getCh()
+    {
+        return field_1_ch;
+    }
+
+    /**
+     * Type of field boundary the FLD describes: 19 -- field begin mark, 20 -- field separation mark; 21 -- field end mark.
+     */
+    public void setCh(char field_1_ch)
+    {
+        this.field_1_ch = field_1_ch;
+    }
+
+    /**
+     * Field type when ch == 19 OR field flags when ch == 21 .
+     */
+    public byte getFlt()
+    {
+        return field_2_flt;
+    }
+
+    /**
+     * Field type when ch == 19 OR field flags when ch == 21 .
+     */
+    public void setFlt(byte field_2_flt)
+    {
+        this.field_2_flt = field_2_flt;
+    }
+
+    /**
+     * Sets the fDiffer field value.
+     * Ignored for saved file
+     */
+    public void setFDiffer(boolean value)
+    {
+        field_2_flt = (byte)fDiffer.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * Ignored for saved file
+     * @return  the fDiffer field value.
+     */
+    public boolean isFDiffer()
+    {
+        return fDiffer.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fZombieEmbed field value.
+     * ==1 when result still believes this field is an EMBED or LINK field
+     */
+    public void setFZombieEmbed(boolean value)
+    {
+        field_2_flt = (byte)fZombieEmbed.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when result still believes this field is an EMBED or LINK field
+     * @return  the fZombieEmbed field value.
+     */
+    public boolean isFZombieEmbed()
+    {
+        return fZombieEmbed.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fResultDirty field value.
+     * ==1 when user has edited or formatted the result. == 0 otherwise
+     */
+    public void setFResultDirty(boolean value)
+    {
+        field_2_flt = (byte)fResultDirty.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when user has edited or formatted the result. == 0 otherwise
+     * @return  the fResultDirty field value.
+     */
+    public boolean isFResultDirty()
+    {
+        return fResultDirty.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fResultEdited field value.
+     * ==1 when user has inserted text into or deleted text from the result
+     */
+    public void setFResultEdited(boolean value)
+    {
+        field_2_flt = (byte)fResultEdited.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when user has inserted text into or deleted text from the result
+     * @return  the fResultEdited field value.
+     */
+    public boolean isFResultEdited()
+    {
+        return fResultEdited.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fLocked field value.
+     * ==1 when field is locked from recalculation
+     */
+    public void setFLocked(boolean value)
+    {
+        field_2_flt = (byte)fLocked.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when field is locked from recalculation
+     * @return  the fLocked field value.
+     */
+    public boolean isFLocked()
+    {
+        return fLocked.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fPrivateResult field value.
+     * ==1 whenever the result of the field is never to be shown
+     */
+    public void setFPrivateResult(boolean value)
+    {
+        field_2_flt = (byte)fPrivateResult.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 whenever the result of the field is never to be shown
+     * @return  the fPrivateResult field value.
+     */
+    public boolean isFPrivateResult()
+    {
+        return fPrivateResult.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fNested field value.
+     * ==1 when field is nested within another field
+     */
+    public void setFNested(boolean value)
+    {
+        field_2_flt = (byte)fNested.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when field is nested within another field
+     * @return  the fNested field value.
+     */
+    public boolean isFNested()
+    {
+        return fNested.isSet(field_2_flt);
+        
+    }
+
+    /**
+     * Sets the fHasSep field value.
+     * ==1 when field has a field separator
+     */
+    public void setFHasSep(boolean value)
+    {
+        field_2_flt = (byte)fHasSep.setBoolean(field_2_flt, value);
+
+        
+    }
+
+    /**
+     * ==1 when field has a field separator
+     * @return  the fHasSep field value.
+     */
+    public boolean isFHasSep()
+    {
+        return fHasSep.isSet(field_2_flt);
+        
+    }
+
+
+}  // END OF CLASS
+
+
+
+
diff --git a/src/types/definitions/fld_type.xml b/src/types/definitions/fld_type.xml
new file mode 100644 (file)
index 0000000..4ca480c
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!--
+    ====================================================================
+    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.
+    ====================================================================
+-->
+<record fromfile="true" name="FLD" package="org.apache.poi.hwpf.model.types">
+    <suffix>AbstractType</suffix>
+    <extends>HDFType</extends>
+    <description>Field Descriptor (FLD). &lt;p&gt;Class and fields descriptions are
+        quoted from
+        Microsoft Office Word 97-2007 Binary File Format
+    </description>
+    <author>Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File Format
+        Specification [*.doc]
+    </author>
+    <fields>
+        <field type="char" size="1" name="ch"
+            description="Type of field boundary the FLD describes: 19 -- field begin mark, 20 -- field separation mark; 21 -- field end mark"/>
+        <field type="byte" size="1" name="flt"
+            description="Field type when ch == 19 OR field flags when ch == 21 ">
+            <bit number="0" mask="0x01" name="fDiffer" description="Ignored for saved file"/>
+            <bit number="1" mask="0x02" name="fZombieEmbed"
+                description="==1 when result still believes this field is an EMBED or LINK field"/>
+            <bit number="2" mask="0x04" name="fResultDirty"
+                description="==1 when user has edited or formatted the result. == 0 otherwise"/>
+            <bit number="3" mask="0x08" name="fResultEdited"
+                description="==1 when user has inserted text into or deleted text from the result"/>
+            <bit number="4" mask="0x10" name="fLocked" description="==1 when field is locked from recalculation"/>
+            <bit number="5" mask="0x20" name="fPrivateResult"
+                description="==1 whenever the result of the field is never to be shown"/>
+            <bit number="6" mask="0x40" name="fNested" description="==1 when field is nested within another field"/>
+            <bit number="7" mask="0x40" name="fHasSep" description="==1 when field has a field separator"/>
+        </field>
+    </fields>
+</record>