Changeset 163 for trunk/src/xmlmodel.c


Ignore:
Timestamp:
Jun 22, 2008, 1:45:20 PM (11 years ago)
Author:
cameron
Message:

Restructuring: Document/Externalt? Entity Info into xmldecl.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/xmlmodel.c

    r160 r163  
    4646}
    4747
    48 Entity_Info::Entity_Info() {
    49 }
    50 Entity_Info::~Entity_Info() {
    51         free(encoding);
    52 }
    53 
    54 /* Signature-based character set family detection in accord with
    55    Appendix F of the XML 1.0 and 1.1 specifications. */
    56 
    57 /* These definitions use b2int16 to determine appropriate doublebyte
    58    values based on endianness of the underlying architecture. */
    59 static const int x0000 = b2int16<0x00, 0x00>::value;
    60 static const int xFEFF = b2int16<0xFE, 0xFF>::value;
    61 static const int xFFFE = b2int16<0xFF, 0xFE>::value;
    62 static const int x003C = b2int16<0x00, 0x3C>::value;
    63 static const int x3C00 = b2int16<0x3C, 0x00>::value;
    64 static const int x4C6F = b2int16<0x4C, 0x6F>::value;
    65 static const int xA794 = b2int16<0xA7, 0x94>::value;
    66 static const int xEFBE = b2int16<0xEF, 0xBE>::value;
    67 
    68 void Entity_Info::AnalyzeSignature(unsigned char * signature) {
    69         uint16_t * XML_dbl_byte = (uint16_t *) signature;
    70         switch (XML_dbl_byte[0]) {
    71                 case x0000:
    72                         switch (XML_dbl_byte[1]) {
    73                                 case xFEFF: set_charset_family(ASCII, QuadByte, BigEndian, 1);break;
    74                                 case xFFFE: set_charset_family(ASCII, QuadByte, Unusual_2143, 1);break;
    75                                 case x3C00: set_charset_family(ASCII, QuadByte, Unusual_2143, 0);break;
    76                                 default: set_charset_family(ASCII, QuadByte, BigEndian, 0);
    77                         }
    78                         break;
    79                 case xFEFF:
    80                         if (XML_dbl_byte[1] == x0000)
    81                                 set_charset_family(ASCII, QuadByte, Unusual_3412, 1);
    82                         else set_charset_family(ASCII, DoubleByte, BigEndian, 1);
    83                         break;
    84                 case xFFFE:
    85                         if (XML_dbl_byte[1] == x0000)
    86                                 set_charset_family(ASCII, QuadByte, LittleEndian, 1);
    87                         else set_charset_family(ASCII, DoubleByte, LittleEndian, 1);
    88                         break;
    89                 case x003C:
    90                         if (XML_dbl_byte[1] == x0000)
    91                                 set_charset_family(ASCII, QuadByte, Unusual_3412, 0);
    92                         else set_charset_family(ASCII, DoubleByte, BigEndian, 0);
    93                         break;
    94                 case x3C00:
    95                         if (XML_dbl_byte[1] == x0000)
    96                                 set_charset_family(ASCII, QuadByte, LittleEndian, 0);
    97                         else set_charset_family(ASCII, DoubleByte, LittleEndian, 0);
    98                         break;
    99                 case x4C6F:
    100                         if (XML_dbl_byte[1] == xA794)
    101                                 set_charset_family(EBCDIC, SingleByte, BigEndian, 0);
    102                         else set_charset_family(ASCII, SingleByte, BigEndian, 0);
    103                         break;
    104                 case xEFBE:
    105                         if (signature[2] == 0xBF)
    106                                 set_charset_family(ASCII, SingleByte, BigEndian, 3);
    107                         else set_charset_family(ASCII, SingleByte, BigEndian, 0);
    108                         break;
    109                 default:
    110                         set_charset_family(ASCII, SingleByte, BigEndian, 0);
    111         }
    112 }
    113 void Entity_Info::set_charset_family(CodeUnit_Base C, CodeUnit_Size S, CodeUnit_ByteOrder O, int B){
    114                 code_unit_base = C;
    115                 code_unit_size = S;
    116                 byte_order = O;
    117                 BOM_units = B;
    118  }
    11948int Model_Info::getOrInsertGlobalElement(int elem_nameID) {
    12049        int elemID =  GlobalElementTable[elem_nameID];
Note: See TracChangeset for help on using the changeset viewer.