xml/libxml2libs/src/libxml2/libxml2_chvalid.c
changeset 0 e35f40988205
equal deleted inserted replaced
-1:000000000000 0:e35f40988205
       
     1 /*
       
     2  * libxml2_chvalid.c:   this module implements the character range
       
     3  *                      validation APIs
       
     4  *
       
     5  * This file is automatically generated from the cvs source
       
     6  * definition files using the genChRanges.py Python script
       
     7  *
       
     8  * Generation date: Tue Nov 18 08:14:21 2003
       
     9  * Sources: chvalid.def
       
    10  * William Brack <wbrack@mmm.com.hk>
       
    11  * 
       
    12  * See Copyright for the status of this software.
       
    13  * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. 
       
    14  */
       
    15 
       
    16 #define IN_LIBXML
       
    17 #define UNDEF_IMPORT_C_IN_DATA
       
    18 #include "xmlenglibxml.h"
       
    19 #include <stdapis/libxml2/libxml2_chvalid.h>
       
    20 
       
    21 /*
       
    22  =====================================================================================
       
    23         GLOBAL CONSTANTS (moved from _xmlGlobalState struct)
       
    24  =====================================================================================
       
    25 */
       
    26 XMLPUBFUNEXPORT const xmlChSRange  xmlIsBaseChar_srng[197] = { {0x100, 0x131}, {0x134, 0x13e},
       
    27     {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, {0x1cd, 0x1f0},
       
    28     {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, {0x2bb, 0x2c1},
       
    29     {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1},
       
    30     {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
       
    31     {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, {0x401, 0x40c},
       
    32     {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, {0x490, 0x4c4},
       
    33     {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, {0x4ee, 0x4f5},
       
    34     {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, {0x561, 0x586},
       
    35     {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
       
    36     {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, {0x6d0, 0x6d3},
       
    37     {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, {0x93d, 0x93d},
       
    38     {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
       
    39     {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9dc, 0x9dd},
       
    40     {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10},
       
    41     {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36},
       
    42     {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74},
       
    43     {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
       
    44     {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
       
    45     {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28},
       
    46     {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, {0xb3d, 0xb3d},
       
    47     {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, {0xb8e, 0xb90},
       
    48     {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f},
       
    49     {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9},
       
    50     {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33},
       
    51     {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90},
       
    52     {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcde, 0xcde},
       
    53     {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
       
    54     {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, {0xe30, 0xe30},
       
    55     {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, {0xe84, 0xe84},
       
    56     {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
       
    57     {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
       
    58     {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, {0xeb2, 0xeb3},
       
    59     {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, {0xf49, 0xf69},
       
    60     {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, {0x1102, 0x1103},
       
    61     {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, {0x110e, 0x1112},
       
    62     {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, {0x114c, 0x114c},
       
    63     {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, {0x1159, 0x1159},
       
    64     {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, {0x1167, 0x1167},
       
    65     {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, {0x1175, 0x1175},
       
    66     {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, {0x11ae, 0x11af},
       
    67     {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, {0x11eb, 0x11eb},
       
    68     {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9},
       
    69     {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
       
    70     {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d},
       
    71     {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe},
       
    72     {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb},
       
    73     {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2126, 0x2126},
       
    74     {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, {0x3041, 0x3094},
       
    75     {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
       
    76 
       
    77 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsBaseCharGroup =
       
    78     {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
       
    79 
       
    80 XMLPUBFUNEXPORT const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
       
    81     {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
       
    82     {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
       
    83     {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
       
    84     {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
       
    85     {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
       
    86     {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
       
    87     {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
       
    88     {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
       
    89     {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
       
    90     {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
       
    91     {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
       
    92     {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
       
    93     {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
       
    94     {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
       
    95     {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
       
    96     {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
       
    97     {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
       
    98     {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
       
    99     {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
       
   100     {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
       
   101     {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
       
   102     {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
       
   103     {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
       
   104     {0x3099, 0x3099}, {0x309a, 0x309a}};
       
   105 
       
   106 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsCombiningGroup =
       
   107     {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
       
   108 
       
   109 const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, {0xe000, 0xfffd}};
       
   110 
       
   111 const xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
       
   112 
       
   113 const xmlChRangeGroup xmlIsCharGroup =  {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
       
   114 
       
   115 const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
       
   116     {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
       
   117 
       
   118 const xmlChRangeGroup xmlIsIdeographicGroup = {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
       
   119 
       
   120 
       
   121 XMLPUBFUNEXPORT const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, {0x6f0, 0x6f9},
       
   122     {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, {0xae6, 0xaef},
       
   123     {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, {0xce6, 0xcef},
       
   124     {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf29}};
       
   125 
       
   126 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsDigitGroup =
       
   127     {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
       
   128 
       
   129 XMLPUBFUNEXPORT const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, {0x2d1, 0x2d1},
       
   130     {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, {0xec6, 0xec6},
       
   131     {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, {0x30fc, 0x30fe}};
       
   132 
       
   133 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsExtenderGroup =
       
   134     {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
       
   135 
       
   136 /*
       
   137  * The initial tables ({func_name}_tab) are used to validate whether a
       
   138  * single-byte character is within the specified group.  Each table
       
   139  * contains 256 bytes, with each byte representing one of the 256
       
   140  * possible characters.  If the table byte is set, the character is
       
   141  * allowed.
       
   142  *
       
   143  */
       
   144 XMLPUBFUNEXPORT const unsigned char xmlIsPubidChar_tab[256] = {
       
   145     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
       
   146     0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   147     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
       
   148     0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   149     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   150     0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   151     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   152     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
       
   153     0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   154     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
       
   155     0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   156     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   157     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   158     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   159     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   160     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   161     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   162     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   163     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   164     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   165     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       
   166     0x00, 0x00, 0x00, 0x00 };
       
   167 
       
   168 /**
       
   169  * xmlCharInRange:
       
   170  * @param val character to be validated
       
   171  * @param rptr pointer to range to be used to validate
       
   172  *
       
   173  * Does a binary search of the range table to determine if char
       
   174  * is valid
       
   175  *
       
   176  * Returns: true if character valid, false otherwise
       
   177  */
       
   178 XMLPUBFUNEXPORT int
       
   179 xmlCharInRange (unsigned int val, const xmlChRangeGroupPtr rptr) {
       
   180     int low, high, mid;
       
   181     xmlChSRangePtr sptr;
       
   182     xmlChLRangePtr lptr;
       
   183     if (val < 0x10000) {    /* is val in 'short' or 'long'  array? */
       
   184         if (rptr->nbShortRange == 0)
       
   185             return 0;
       
   186         low = 0;
       
   187         high = rptr->nbShortRange - 1;
       
   188         sptr = rptr->shortRange;
       
   189         while (low <= high)
       
   190         {
       
   191             mid = (low + high) / 2;
       
   192             if ((unsigned short) val < sptr[mid].low) {
       
   193                 high = mid - 1;
       
   194             } else {
       
   195                 if ((unsigned short) val > sptr[mid].high) {
       
   196                     low = mid + 1;
       
   197                 } else {
       
   198                     return 1;
       
   199                 }
       
   200             }
       
   201         }
       
   202     } else {
       
   203         if (rptr->nbLongRange == 0) {
       
   204             return 0;
       
   205         }
       
   206         low = 0;
       
   207         high = rptr->nbLongRange - 1;
       
   208         lptr = rptr->longRange;
       
   209         while (low <= high) {
       
   210             mid = (low + high) / 2;
       
   211             if (val < lptr[mid].low) {
       
   212                 high = mid - 1;
       
   213             } else {
       
   214                 if (val > lptr[mid].high) {
       
   215                     low = mid + 1;
       
   216                 } else {
       
   217                     return 1;
       
   218                 }
       
   219             }
       
   220         }
       
   221     }
       
   222     return 0;
       
   223 }
       
   224 
       
   225 #ifndef XMLENGINE_EXCLUDE_UNUSED
       
   226 /**
       
   227  * xmlIsBaseChar:
       
   228  * @param ch character to validate
       
   229  *
       
   230  * This function is DEPRECATED.
       
   231  * Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead
       
   232  *
       
   233  * Returns true if argument valid, false otherwise
       
   234  */
       
   235 int
       
   236 xmlIsBaseChar(unsigned int ch) {
       
   237     return(xmlIsBaseCharQ(ch));
       
   238 }
       
   239 
       
   240 
       
   241 /**
       
   242  * xmlIsBlank:
       
   243  * @param ch character to validate
       
   244  *
       
   245  * This function is DEPRECATED.
       
   246  * Use xmlIsBlank_ch or xmlIsBlankQ instead
       
   247  *
       
   248  * Returns true if argument valid, false otherwise
       
   249  */
       
   250 int
       
   251 xmlIsBlank(unsigned int ch) {
       
   252     return(xmlIsBlankQ(ch));
       
   253 }
       
   254 
       
   255 
       
   256 /**
       
   257  * xmlIsChar:
       
   258  * @param ch character to validate
       
   259  *
       
   260  * This function is DEPRECATED.
       
   261  * Use xmlIsChar_ch or xmlIsCharQ instead
       
   262  *
       
   263  * Returns true if argument valid, false otherwise
       
   264  */
       
   265 int
       
   266 xmlIsChar(unsigned int ch) {
       
   267     return(xmlIsCharQ(ch));
       
   268 }
       
   269 
       
   270 
       
   271 /**
       
   272  * xmlIsCombining:
       
   273  * @param ch character to validate
       
   274  *
       
   275  * This function is DEPRECATED.
       
   276  * Use xmlIsCombiningQ instead
       
   277  *
       
   278  * Returns true if argument valid, false otherwise
       
   279  */
       
   280 int
       
   281 xmlIsCombining(unsigned int ch) {
       
   282     return(xmlIsCombiningQ(ch));
       
   283 }
       
   284 
       
   285 
       
   286 /**
       
   287  * xmlIsDigit:
       
   288  * @param ch character to validate
       
   289  *
       
   290  * This function is DEPRECATED.
       
   291  * Use xmlIsDigit_ch or xmlIsDigitQ instead
       
   292  *
       
   293  * Returns true if argument valid, false otherwise
       
   294  */
       
   295 int
       
   296 xmlIsDigit(unsigned int ch) {
       
   297     return(xmlIsDigitQ(ch));
       
   298 }
       
   299 
       
   300 
       
   301 /**
       
   302  * xmlIsExtender:
       
   303  * @param ch character to validate
       
   304  *
       
   305  * This function is DEPRECATED.
       
   306  * Use xmlIsExtender_ch or xmlIsExtenderQ instead
       
   307  *
       
   308  * Returns true if argument valid, false otherwise
       
   309  */
       
   310 int
       
   311 xmlIsExtender(unsigned int ch) {
       
   312     return(xmlIsExtenderQ(ch));
       
   313 }
       
   314 
       
   315 
       
   316 /**
       
   317  * xmlIsIdeographic:
       
   318  * @param ch character to validate
       
   319  *
       
   320  * This function is DEPRECATED.
       
   321  * Use xmlIsIdeographicQ instead
       
   322  *
       
   323  * Returns true if argument valid, false otherwise
       
   324  */
       
   325 int
       
   326 xmlIsIdeographic(unsigned int ch) {
       
   327     return(xmlIsIdeographicQ(ch));
       
   328 }
       
   329 
       
   330 
       
   331 /**
       
   332  * xmlIsPubidChar:
       
   333  * @param ch character to validate
       
   334  *
       
   335  * This function is DEPRECATED.
       
   336  * Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead
       
   337  *
       
   338  * Returns true if argument valid, false otherwise
       
   339  */
       
   340 int
       
   341 xmlIsPubidChar(unsigned int ch) {
       
   342     return(xmlIsPubidCharQ(ch));
       
   343 }
       
   344 #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */
       
   345