LCOV - code coverage report
Current view: top level - external/yxml - yxml.c (source / functions) Hit Total Coverage
Test: rapport Lines: 0 662 0.0 %
Date: 2021-12-10 16:22:55 Functions: 0 34 0.0 %
Branches: 0 681 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* THIS FILE IS AUTOMATICALLY GENERATED, DO NOT EDIT! */
       2                 :            : 
       3                 :            : /* Copyright (c) 2013-2014 Yoran Heling
       4                 :            : 
       5                 :            :   Permission is hereby granted, free of charge, to any person obtaining
       6                 :            :   a copy of this software and associated documentation files (the
       7                 :            :   "Software"), to deal in the Software without restriction, including
       8                 :            :   without limitation the rights to use, copy, modify, merge, publish,
       9                 :            :   distribute, sublicense, and/or sell copies of the Software, and to
      10                 :            :   permit persons to whom the Software is furnished to do so, subject to
      11                 :            :   the following conditions:
      12                 :            : 
      13                 :            :   The above copyright notice and this permission notice shall be included
      14                 :            :   in all copies or substantial portions of the Software.
      15                 :            : 
      16                 :            :   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      17                 :            :   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      18                 :            :   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
      19                 :            :   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
      20                 :            :   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
      21                 :            :   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
      22                 :            :   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      23                 :            : */
      24                 :            : 
      25                 :            : #include <yxml.h>
      26                 :            : #include <string.h>
      27                 :            : 
      28                 :            : typedef enum {
      29                 :            :         YXMLS_string,
      30                 :            :         YXMLS_attr0,
      31                 :            :         YXMLS_attr1,
      32                 :            :         YXMLS_attr2,
      33                 :            :         YXMLS_attr3,
      34                 :            :         YXMLS_attr4,
      35                 :            :         YXMLS_cd0,
      36                 :            :         YXMLS_cd1,
      37                 :            :         YXMLS_cd2,
      38                 :            :         YXMLS_comment0,
      39                 :            :         YXMLS_comment1,
      40                 :            :         YXMLS_comment2,
      41                 :            :         YXMLS_comment3,
      42                 :            :         YXMLS_comment4,
      43                 :            :         YXMLS_dt0,
      44                 :            :         YXMLS_dt1,
      45                 :            :         YXMLS_dt2,
      46                 :            :         YXMLS_dt3,
      47                 :            :         YXMLS_dt4,
      48                 :            :         YXMLS_elem0,
      49                 :            :         YXMLS_elem1,
      50                 :            :         YXMLS_elem2,
      51                 :            :         YXMLS_elem3,
      52                 :            :         YXMLS_enc0,
      53                 :            :         YXMLS_enc1,
      54                 :            :         YXMLS_enc2,
      55                 :            :         YXMLS_enc3,
      56                 :            :         YXMLS_etag0,
      57                 :            :         YXMLS_etag1,
      58                 :            :         YXMLS_etag2,
      59                 :            :         YXMLS_init,
      60                 :            :         YXMLS_le0,
      61                 :            :         YXMLS_le1,
      62                 :            :         YXMLS_le2,
      63                 :            :         YXMLS_le3,
      64                 :            :         YXMLS_lee1,
      65                 :            :         YXMLS_lee2,
      66                 :            :         YXMLS_leq0,
      67                 :            :         YXMLS_misc0,
      68                 :            :         YXMLS_misc1,
      69                 :            :         YXMLS_misc2,
      70                 :            :         YXMLS_misc2a,
      71                 :            :         YXMLS_misc3,
      72                 :            :         YXMLS_pi0,
      73                 :            :         YXMLS_pi1,
      74                 :            :         YXMLS_pi2,
      75                 :            :         YXMLS_pi3,
      76                 :            :         YXMLS_pi4,
      77                 :            :         YXMLS_std0,
      78                 :            :         YXMLS_std1,
      79                 :            :         YXMLS_std2,
      80                 :            :         YXMLS_std3,
      81                 :            :         YXMLS_ver0,
      82                 :            :         YXMLS_ver1,
      83                 :            :         YXMLS_ver2,
      84                 :            :         YXMLS_ver3,
      85                 :            :         YXMLS_xmldecl0,
      86                 :            :         YXMLS_xmldecl1,
      87                 :            :         YXMLS_xmldecl2,
      88                 :            :         YXMLS_xmldecl3,
      89                 :            :         YXMLS_xmldecl4,
      90                 :            :         YXMLS_xmldecl5,
      91                 :            :         YXMLS_xmldecl6,
      92                 :            :         YXMLS_xmldecl7,
      93                 :            :         YXMLS_xmldecl8,
      94                 :            :         YXMLS_xmldecl9
      95                 :            : } yxml_state_t;
      96                 :            : 
      97                 :            : 
      98                 :            : #define yxml_isChar(c) 1
      99                 :            : /* 0xd should be part of SP, too, but yxml_parse() already normalizes that into 0xa */
     100                 :            : #define yxml_isSP(c) (c == 0x20 || c == 0x09 || c == 0x0a)
     101                 :            : #define yxml_isAlpha(c) ((c|32)-'a' < 26)
     102                 :            : #define yxml_isNum(c) (c-'0' < 10)
     103                 :            : #define yxml_isHex(c) (yxml_isNum(c) || (c|32)-'a' < 6)
     104                 :            : #define yxml_isEncName(c) (yxml_isAlpha(c) || yxml_isNum(c) || c == '.' || c == '_' || c == '-')
     105                 :            : #define yxml_isNameStart(c) (yxml_isAlpha(c) || c == ':' || c == '_' || c >= 128)
     106                 :            : #define yxml_isName(c) (yxml_isNameStart(c) || yxml_isNum(c) || c == '-' || c == '.')
     107                 :            : /* XXX: The valid characters are dependent on the quote char, hence the access to x->quote */
     108                 :            : #define yxml_isAttValue(c) (yxml_isChar(c) && c != x->quote && c != '<' && c != '&')
     109                 :            : /* Anything between '&' and ';', the yxml_ref* functions will do further
     110                 :            :  * validation. Strictly speaking, this is "yxml_isName(c) || c == '#'", but
     111                 :            :  * this parser doesn't understand entities with '.', ':', etc, anwyay.  */
     112                 :            : #define yxml_isRef(c) (yxml_isNum(c) || yxml_isAlpha(c) || c == '#')
     113                 :            : 
     114                 :            : #define INTFROM5CHARS(a, b, c, d, e) ((((uint64_t)(a))<<32) | (((uint64_t)(b))<<24) | (((uint64_t)(c))<<16) | (((uint64_t)(d))<<8) | (uint64_t)(e))
     115                 :            : 
     116                 :            : 
     117                 :            : /* Set the given char value to ch (0<=ch<=255).
     118                 :            :  * This can't be done with simple assignment because char may be signed, and
     119                 :            :  * unsigned-to-signed overflow is implementation defined in C. This function
     120                 :            :  * /looks/ inefficient, but gcc compiles it down to a single movb instruction
     121                 :            :  * on x86, even with -O0. */
     122                 :          0 : static inline void yxml_setchar(char *dest, unsigned ch) {
     123                 :          0 :         unsigned char _ch = ch;
     124                 :          0 :         memcpy(dest, &_ch, 1);
     125                 :          0 : }
     126                 :            : 
     127                 :            : 
     128                 :            : /* Similar to yxml_setchar(), but will convert ch (any valid unicode point) to
     129                 :            :  * UTF-8 and appends a '\0'. dest must have room for at least 5 bytes. */
     130                 :          0 : static void yxml_setutf8(char *dest, unsigned ch) {
     131         [ #  # ]:          0 :         if(ch <= 0x007F)
     132                 :          0 :                 yxml_setchar(dest++, ch);
     133         [ #  # ]:          0 :         else if(ch <= 0x07FF) {
     134                 :          0 :                 yxml_setchar(dest++, 0xC0 | (ch>>6));
     135                 :          0 :                 yxml_setchar(dest++, 0x80 | (ch & 0x3F));
     136         [ #  # ]:          0 :         } else if(ch <= 0xFFFF) {
     137                 :          0 :                 yxml_setchar(dest++, 0xE0 | (ch>>12));
     138                 :          0 :                 yxml_setchar(dest++, 0x80 | ((ch>>6) & 0x3F));
     139                 :          0 :                 yxml_setchar(dest++, 0x80 | (ch & 0x3F));
     140                 :          0 :         } else {
     141                 :          0 :                 yxml_setchar(dest++, 0xF0 | (ch>>18));
     142                 :          0 :                 yxml_setchar(dest++, 0x80 | ((ch>>12) & 0x3F));
     143                 :          0 :                 yxml_setchar(dest++, 0x80 | ((ch>>6) & 0x3F));
     144                 :          0 :                 yxml_setchar(dest++, 0x80 | (ch & 0x3F));
     145                 :            :         }
     146                 :          0 :         *dest = 0;
     147                 :          0 : }
     148                 :            : 
     149                 :            : 
     150                 :          0 : static inline yxml_ret_t yxml_datacontent(yxml_t *x, unsigned ch) {
     151                 :          0 :         yxml_setchar(x->data, ch);
     152                 :          0 :         x->data[1] = 0;
     153                 :          0 :         return YXML_CONTENT;
     154                 :            : }
     155                 :            : 
     156                 :            : 
     157                 :          0 : static inline yxml_ret_t yxml_datapi1(yxml_t *x, unsigned ch) {
     158                 :          0 :         yxml_setchar(x->data, ch);
     159                 :          0 :         x->data[1] = 0;
     160                 :          0 :         return YXML_PICONTENT;
     161                 :            : }
     162                 :            : 
     163                 :            : 
     164                 :          0 : static inline yxml_ret_t yxml_datapi2(yxml_t *x, unsigned ch) {
     165                 :          0 :         x->data[0] = '?';
     166                 :          0 :         yxml_setchar(x->data+1, ch);
     167                 :          0 :         x->data[2] = 0;
     168                 :          0 :         return YXML_PICONTENT;
     169                 :            : }
     170                 :            : 
     171                 :            : 
     172                 :          0 : static inline yxml_ret_t yxml_datacd1(yxml_t *x, unsigned ch) {
     173                 :          0 :         x->data[0] = ']';
     174                 :          0 :         yxml_setchar(x->data+1, ch);
     175                 :          0 :         x->data[2] = 0;
     176                 :          0 :         return YXML_CONTENT;
     177                 :            : }
     178                 :            : 
     179                 :            : 
     180                 :          0 : static inline yxml_ret_t yxml_datacd2(yxml_t *x, unsigned ch) {
     181                 :          0 :         x->data[0] = ']';
     182                 :          0 :         x->data[1] = ']';
     183                 :          0 :         yxml_setchar(x->data+2, ch);
     184                 :          0 :         x->data[3] = 0;
     185                 :          0 :         return YXML_CONTENT;
     186                 :            : }
     187                 :            : 
     188                 :            : 
     189                 :          0 : static inline yxml_ret_t yxml_dataattr(yxml_t *x, unsigned ch) {
     190                 :            :         /* Normalize attribute values according to the XML spec section 3.3.3. */
     191   [ #  #  #  # ]:          0 :         yxml_setchar(x->data, ch == 0x9 || ch == 0xa ? 0x20 : ch);
     192                 :          0 :         x->data[1] = 0;
     193                 :          0 :         return YXML_ATTRVAL;
     194                 :            : }
     195                 :            : 
     196                 :            : 
     197                 :          0 : static yxml_ret_t yxml_pushstack(yxml_t *x, char **res, unsigned ch) {
     198         [ #  # ]:          0 :         if(x->stacklen+2 >= x->stacksize)
     199                 :          0 :                 return YXML_ESTACK;
     200                 :          0 :         x->stacklen++;
     201                 :          0 :         *res = (char *)x->stack+x->stacklen;
     202                 :          0 :         x->stack[x->stacklen] = ch;
     203                 :          0 :         x->stacklen++;
     204                 :          0 :         x->stack[x->stacklen] = 0;
     205                 :          0 :         return YXML_OK;
     206                 :          0 : }
     207                 :            : 
     208                 :            : 
     209                 :          0 : static yxml_ret_t yxml_pushstackc(yxml_t *x, unsigned ch) {
     210         [ #  # ]:          0 :         if(x->stacklen+1 >= x->stacksize)
     211                 :          0 :                 return YXML_ESTACK;
     212                 :          0 :         x->stack[x->stacklen] = ch;
     213                 :          0 :         x->stacklen++;
     214                 :          0 :         x->stack[x->stacklen] = 0;
     215                 :          0 :         return YXML_OK;
     216                 :          0 : }
     217                 :            : 
     218                 :            : 
     219                 :          0 : static void yxml_popstack(yxml_t *x) {
     220                 :          0 :         do
     221         [ #  # ]:          0 :                 x->stacklen--;
     222                 :          0 :         while(x->stack[x->stacklen]);
     223                 :          0 : }
     224                 :            : 
     225                 :            : 
     226                 :          0 : static inline yxml_ret_t yxml_elemstart  (yxml_t *x, unsigned ch) { return yxml_pushstack(x, &x->elem, ch); }
     227                 :          0 : static inline yxml_ret_t yxml_elemname   (yxml_t *x, unsigned ch) { return yxml_pushstackc(x, ch); }
     228                 :          0 : static inline yxml_ret_t yxml_elemnameend(yxml_t *x, unsigned ch) { return YXML_ELEMSTART; }
     229                 :            : 
     230                 :            : 
     231                 :            : /* Also used in yxml_elemcloseend(), since this function just removes the last
     232                 :            :  * element from the stack and returns ELEMEND. */
     233                 :          0 : static yxml_ret_t yxml_selfclose(yxml_t *x, unsigned ch) {
     234                 :          0 :         yxml_popstack(x);
     235         [ #  # ]:          0 :         if(x->stacklen) {
     236                 :          0 :                 x->elem = (char *)x->stack+x->stacklen-1;
     237         [ #  # ]:          0 :                 while(*(x->elem-1))
     238                 :          0 :                         x->elem--;
     239                 :          0 :                 return YXML_ELEMEND;
     240                 :            :         }
     241                 :          0 :         x->elem = (char *)x->stack;
     242                 :          0 :         x->state = YXMLS_misc3;
     243                 :          0 :         return YXML_ELEMEND;
     244                 :          0 : }
     245                 :            : 
     246                 :            : 
     247                 :          0 : static inline yxml_ret_t yxml_elemclose(yxml_t *x, unsigned ch) {
     248         [ #  # ]:          0 :         if(*((unsigned char *)x->elem) != ch)
     249                 :          0 :                 return YXML_ECLOSE;
     250                 :          0 :         x->elem++;
     251                 :          0 :         return YXML_OK;
     252                 :          0 : }
     253                 :            : 
     254                 :            : 
     255                 :          0 : static inline yxml_ret_t yxml_elemcloseend(yxml_t *x, unsigned ch) {
     256         [ #  # ]:          0 :         if(*x->elem)
     257                 :          0 :                 return YXML_ECLOSE;
     258                 :          0 :         return yxml_selfclose(x, ch);
     259                 :          0 : }
     260                 :            : 
     261                 :            : 
     262                 :          0 : static inline yxml_ret_t yxml_attrstart  (yxml_t *x, unsigned ch) { return yxml_pushstack(x, &x->attr, ch); }
     263                 :          0 : static inline yxml_ret_t yxml_attrname   (yxml_t *x, unsigned ch) { return yxml_pushstackc(x, ch); }
     264                 :          0 : static inline yxml_ret_t yxml_attrnameend(yxml_t *x, unsigned ch) { return YXML_ATTRSTART; }
     265                 :          0 : static inline yxml_ret_t yxml_attrvalend (yxml_t *x, unsigned ch) { yxml_popstack(x); return YXML_ATTREND; }
     266                 :            : 
     267                 :            : 
     268                 :          0 : static inline yxml_ret_t yxml_pistart  (yxml_t *x, unsigned ch) { return yxml_pushstack(x, &x->pi, ch); }
     269                 :          0 : static inline yxml_ret_t yxml_piname   (yxml_t *x, unsigned ch) { return yxml_pushstackc(x, ch); }
     270                 :          0 : static inline yxml_ret_t yxml_piabort  (yxml_t *x, unsigned ch) { yxml_popstack(x); return YXML_OK; }
     271                 :          0 : static inline yxml_ret_t yxml_pinameend(yxml_t *x, unsigned ch) {
     272   [ #  #  #  #  :          0 :         return (x->pi[0]|32) == 'x' && (x->pi[1]|32) == 'm' && (x->pi[2]|32) == 'l' && !x->pi[3] ? YXML_ESYN : YXML_PISTART;
                   #  # ]
     273                 :            : }
     274                 :          0 : static inline yxml_ret_t yxml_pivalend (yxml_t *x, unsigned ch) { yxml_popstack(x); x->pi = (char *)x->stack; return YXML_PIEND; }
     275                 :            : 
     276                 :            : 
     277                 :          0 : static inline yxml_ret_t yxml_refstart(yxml_t *x, unsigned ch) {
     278                 :          0 :         memset(x->data, 0, sizeof(x->data));
     279                 :          0 :         x->reflen = 0;
     280                 :          0 :         return YXML_OK;
     281                 :            : }
     282                 :            : 
     283                 :            : 
     284                 :          0 : static yxml_ret_t yxml_ref(yxml_t *x, unsigned ch) {
     285         [ #  # ]:          0 :         if(x->reflen >= sizeof(x->data)-1)
     286                 :          0 :                 return YXML_EREF;
     287                 :          0 :         yxml_setchar(x->data+x->reflen, ch);
     288                 :          0 :         x->reflen++;
     289                 :          0 :         return YXML_OK;
     290                 :          0 : }
     291                 :            : 
     292                 :            : 
     293                 :          0 : static yxml_ret_t yxml_refend(yxml_t *x, yxml_ret_t ret) {
     294                 :          0 :         unsigned char *r = (unsigned char *)x->data;
     295                 :          0 :         unsigned ch = 0;
     296         [ #  # ]:          0 :         if(*r == '#') {
     297         [ #  # ]:          0 :                 if(r[1] == 'x')
     298   [ #  #  #  # ]:          0 :                         for(r += 2; yxml_isHex((unsigned)*r); r++)
     299         [ #  # ]:          0 :                                 ch = (ch<<4) + (*r <= '9' ? *r-'0' : (*r|32)-'a' + 10);
     300                 :            :                 else
     301         [ #  # ]:          0 :                         for(r++; yxml_isNum((unsigned)*r); r++)
     302                 :          0 :                                 ch = (ch*10) + (*r-'0');
     303         [ #  # ]:          0 :                 if(*r)
     304                 :          0 :                         ch = 0;
     305                 :          0 :         } else {
     306                 :          0 :                 uint64_t i = INTFROM5CHARS(r[0], r[1], r[2], r[3], r[4]);
     307                 :          0 :                 ch =
     308         [ #  # ]:          0 :                         i == INTFROM5CHARS('l','t', 0,  0, 0) ? '<' :
     309         [ #  # ]:          0 :                         i == INTFROM5CHARS('g','t', 0,  0, 0) ? '>' :
     310         [ #  # ]:          0 :                         i == INTFROM5CHARS('a','m','p', 0, 0) ? '&' :
     311         [ #  # ]:          0 :                         i == INTFROM5CHARS('a','p','o','s',0) ? '\'':
     312                 :          0 :                         i == INTFROM5CHARS('q','u','o','t',0) ? '"' : 0;
     313                 :            :         }
     314                 :            : 
     315                 :            :         /* Codepoints not allowed in the XML 1.1 definition of a Char */
     316   [ #  #  #  #  :          0 :         if(!ch || ch > 0x10FFFF || ch == 0xFFFE || ch == 0xFFFF || (ch-0xDFFF) < 0x7FF)
          #  #  #  #  #  
                      # ]
     317                 :          0 :                 return YXML_EREF;
     318                 :          0 :         yxml_setutf8(x->data, ch);
     319                 :          0 :         return ret;
     320                 :          0 : }
     321                 :            : 
     322                 :            : 
     323                 :          0 : static inline yxml_ret_t yxml_refcontent(yxml_t *x, unsigned ch) { return yxml_refend(x, YXML_CONTENT); }
     324                 :          0 : static inline yxml_ret_t yxml_refattrval(yxml_t *x, unsigned ch) { return yxml_refend(x, YXML_ATTRVAL); }
     325                 :            : 
     326                 :            : 
     327                 :          0 : void yxml_init(yxml_t *x, void *stack, size_t stacksize) {
     328                 :          0 :         memset(x, 0, sizeof(*x));
     329                 :          0 :         x->line = 1;
     330                 :          0 :         x->stack = (unsigned char*)stack;
     331                 :          0 :         x->stacksize = stacksize;
     332                 :          0 :         *x->stack = 0;
     333                 :          0 :         x->elem = x->pi = x->attr = (char *)x->stack;
     334                 :          0 :         x->state = YXMLS_init;
     335                 :          0 : }
     336                 :            : 
     337                 :            : 
     338                 :          0 : yxml_ret_t yxml_parse(yxml_t *x, int _ch) {
     339                 :            :         /* Ensure that characters are in the range of 0..255 rather than -126..125.
     340                 :            :          * All character comparisons are done with positive integers. */
     341                 :          0 :         unsigned ch = (unsigned)(_ch+256) & 0xff;
     342         [ #  # ]:          0 :         if(!ch)
     343                 :          0 :                 return YXML_ESYN;
     344                 :          0 :         x->total++;
     345                 :            : 
     346                 :            :         /* End-of-Line normalization, "\rX", "\r\n" and "\n" are recognized and
     347                 :            :          * normalized to a single '\n' as per XML 1.0 section 2.11. XML 1.1 adds
     348                 :            :          * some non-ASCII character sequences to this list, but we can only handle
     349                 :            :          * ASCII here without making assumptions about the input encoding. */
     350         [ #  # ]:          0 :         if(x->ignore == ch) {
     351                 :          0 :                 x->ignore = 0;
     352                 :          0 :                 return YXML_OK;
     353                 :            :         }
     354                 :          0 :         x->ignore = (ch == 0xd) * 0xa;
     355   [ #  #  #  # ]:          0 :         if(ch == 0xa || ch == 0xd) {
     356                 :          0 :                 ch = 0xa;
     357                 :          0 :                 x->line++;
     358                 :          0 :                 x->byte = 0;
     359                 :          0 :         }
     360                 :          0 :         x->byte++;
     361                 :            : 
     362   [ #  #  #  #  :          0 :         switch((yxml_state_t)x->state) {
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
     363                 :            :         case YXMLS_string:
     364         [ #  # ]:          0 :                 if(ch == *x->string) {
     365                 :          0 :                         x->string++;
     366         [ #  # ]:          0 :                         if(!*x->string)
     367                 :          0 :                                 x->state = x->nextstate;
     368                 :          0 :                         return YXML_OK;
     369                 :            :                 }
     370                 :          0 :                 break;
     371                 :            :         case YXMLS_attr0:
     372   [ #  #  #  #  :          0 :                 if(yxml_isName(ch))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     373                 :          0 :                         return yxml_attrname(x, ch);
     374   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     375                 :          0 :                         x->state = YXMLS_attr1;
     376                 :          0 :                         return yxml_attrnameend(x, ch);
     377                 :            :                 }
     378         [ #  # ]:          0 :                 if(ch == (unsigned char)'=') {
     379                 :          0 :                         x->state = YXMLS_attr2;
     380                 :          0 :                         return yxml_attrnameend(x, ch);
     381                 :            :                 }
     382                 :          0 :                 break;
     383                 :            :         case YXMLS_attr1:
     384   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     385                 :          0 :                         return YXML_OK;
     386         [ #  # ]:          0 :                 if(ch == (unsigned char)'=') {
     387                 :          0 :                         x->state = YXMLS_attr2;
     388                 :          0 :                         return YXML_OK;
     389                 :            :                 }
     390                 :          0 :                 break;
     391                 :            :         case YXMLS_attr2:
     392   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     393                 :          0 :                         return YXML_OK;
     394   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     395                 :          0 :                         x->state = YXMLS_attr3;
     396                 :          0 :                         x->quote = ch;
     397                 :          0 :                         return YXML_OK;
     398                 :            :                 }
     399                 :          0 :                 break;
     400                 :            :         case YXMLS_attr3:
     401   [ #  #  #  #  :          0 :                 if(yxml_isAttValue(ch))
                   #  # ]
     402                 :          0 :                         return yxml_dataattr(x, ch);
     403         [ #  # ]:          0 :                 if(ch == (unsigned char)'&') {
     404                 :          0 :                         x->state = YXMLS_attr4;
     405                 :          0 :                         return yxml_refstart(x, ch);
     406                 :            :                 }
     407         [ #  # ]:          0 :                 if(x->quote == ch) {
     408                 :          0 :                         x->state = YXMLS_elem2;
     409                 :          0 :                         return yxml_attrvalend(x, ch);
     410                 :            :                 }
     411                 :          0 :                 break;
     412                 :            :         case YXMLS_attr4:
     413   [ #  #  #  #  :          0 :                 if(yxml_isRef(ch))
                   #  # ]
     414                 :          0 :                         return yxml_ref(x, ch);
     415         [ #  # ]:          0 :                 if(ch == (unsigned char)'\x3b') {
     416                 :          0 :                         x->state = YXMLS_attr3;
     417                 :          0 :                         return yxml_refattrval(x, ch);
     418                 :            :                 }
     419                 :          0 :                 break;
     420                 :            :         case YXMLS_cd0:
     421         [ #  # ]:          0 :                 if(ch == (unsigned char)']') {
     422                 :          0 :                         x->state = YXMLS_cd1;
     423                 :          0 :                         return YXML_OK;
     424                 :            :                 }
     425                 :            :                 if(yxml_isChar(ch))
     426                 :          0 :                         return yxml_datacontent(x, ch);
     427                 :            :                 break;
     428                 :            :         case YXMLS_cd1:
     429         [ #  # ]:          0 :                 if(ch == (unsigned char)']') {
     430                 :          0 :                         x->state = YXMLS_cd2;
     431                 :          0 :                         return YXML_OK;
     432                 :            :                 }
     433                 :            :                 if(yxml_isChar(ch)) {
     434                 :          0 :                         x->state = YXMLS_cd0;
     435                 :          0 :                         return yxml_datacd1(x, ch);
     436                 :            :                 }
     437                 :            :                 break;
     438                 :            :         case YXMLS_cd2:
     439         [ #  # ]:          0 :                 if(ch == (unsigned char)']')
     440                 :          0 :                         return yxml_datacontent(x, ch);
     441         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     442                 :          0 :                         x->state = YXMLS_misc2;
     443                 :          0 :                         return YXML_OK;
     444                 :            :                 }
     445                 :            :                 if(yxml_isChar(ch)) {
     446                 :          0 :                         x->state = YXMLS_cd0;
     447                 :          0 :                         return yxml_datacd2(x, ch);
     448                 :            :                 }
     449                 :            :                 break;
     450                 :            :         case YXMLS_comment0:
     451         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     452                 :          0 :                         x->state = YXMLS_comment1;
     453                 :          0 :                         return YXML_OK;
     454                 :            :                 }
     455                 :          0 :                 break;
     456                 :            :         case YXMLS_comment1:
     457         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     458                 :          0 :                         x->state = YXMLS_comment2;
     459                 :          0 :                         return YXML_OK;
     460                 :            :                 }
     461                 :          0 :                 break;
     462                 :            :         case YXMLS_comment2:
     463         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     464                 :          0 :                         x->state = YXMLS_comment3;
     465                 :          0 :                         return YXML_OK;
     466                 :            :                 }
     467                 :            :                 if(yxml_isChar(ch))
     468                 :          0 :                         return YXML_OK;
     469                 :            :                 break;
     470                 :            :         case YXMLS_comment3:
     471         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     472                 :          0 :                         x->state = YXMLS_comment4;
     473                 :          0 :                         return YXML_OK;
     474                 :            :                 }
     475                 :            :                 if(yxml_isChar(ch)) {
     476                 :          0 :                         x->state = YXMLS_comment2;
     477                 :          0 :                         return YXML_OK;
     478                 :            :                 }
     479                 :            :                 break;
     480                 :            :         case YXMLS_comment4:
     481         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     482                 :          0 :                         x->state = x->nextstate;
     483                 :          0 :                         return YXML_OK;
     484                 :            :                 }
     485                 :          0 :                 break;
     486                 :            :         case YXMLS_dt0:
     487         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     488                 :          0 :                         x->state = YXMLS_misc1;
     489                 :          0 :                         return YXML_OK;
     490                 :            :                 }
     491   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     492                 :          0 :                         x->state = YXMLS_dt1;
     493                 :          0 :                         x->quote = ch;
     494                 :          0 :                         x->nextstate = YXMLS_dt0;
     495                 :          0 :                         return YXML_OK;
     496                 :            :                 }
     497         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     498                 :          0 :                         x->state = YXMLS_dt2;
     499                 :          0 :                         return YXML_OK;
     500                 :            :                 }
     501                 :            :                 if(yxml_isChar(ch))
     502                 :          0 :                         return YXML_OK;
     503                 :            :                 break;
     504                 :            :         case YXMLS_dt1:
     505         [ #  # ]:          0 :                 if(x->quote == ch) {
     506                 :          0 :                         x->state = x->nextstate;
     507                 :          0 :                         return YXML_OK;
     508                 :            :                 }
     509                 :            :                 if(yxml_isChar(ch))
     510                 :          0 :                         return YXML_OK;
     511                 :            :                 break;
     512                 :            :         case YXMLS_dt2:
     513         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     514                 :          0 :                         x->state = YXMLS_pi0;
     515                 :          0 :                         x->nextstate = YXMLS_dt0;
     516                 :          0 :                         return YXML_OK;
     517                 :            :                 }
     518         [ #  # ]:          0 :                 if(ch == (unsigned char)'!') {
     519                 :          0 :                         x->state = YXMLS_dt3;
     520                 :          0 :                         return YXML_OK;
     521                 :            :                 }
     522                 :          0 :                 break;
     523                 :            :         case YXMLS_dt3:
     524         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     525                 :          0 :                         x->state = YXMLS_comment1;
     526                 :          0 :                         x->nextstate = YXMLS_dt0;
     527                 :          0 :                         return YXML_OK;
     528                 :            :                 }
     529                 :            :                 if(yxml_isChar(ch)) {
     530                 :          0 :                         x->state = YXMLS_dt4;
     531                 :          0 :                         return YXML_OK;
     532                 :            :                 }
     533                 :            :                 break;
     534                 :            :         case YXMLS_dt4:
     535   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     536                 :          0 :                         x->state = YXMLS_dt1;
     537                 :          0 :                         x->quote = ch;
     538                 :          0 :                         x->nextstate = YXMLS_dt4;
     539                 :          0 :                         return YXML_OK;
     540                 :            :                 }
     541         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     542                 :          0 :                         x->state = YXMLS_dt0;
     543                 :          0 :                         return YXML_OK;
     544                 :            :                 }
     545                 :            :                 if(yxml_isChar(ch))
     546                 :          0 :                         return YXML_OK;
     547                 :            :                 break;
     548                 :            :         case YXMLS_elem0:
     549   [ #  #  #  #  :          0 :                 if(yxml_isName(ch))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     550                 :          0 :                         return yxml_elemname(x, ch);
     551   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     552                 :          0 :                         x->state = YXMLS_elem1;
     553                 :          0 :                         return yxml_elemnameend(x, ch);
     554                 :            :                 }
     555         [ #  # ]:          0 :                 if(ch == (unsigned char)'/') {
     556                 :          0 :                         x->state = YXMLS_elem3;
     557                 :          0 :                         return yxml_elemnameend(x, ch);
     558                 :            :                 }
     559         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     560                 :          0 :                         x->state = YXMLS_misc2;
     561                 :          0 :                         return yxml_elemnameend(x, ch);
     562                 :            :                 }
     563                 :          0 :                 break;
     564                 :            :         case YXMLS_elem1:
     565   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     566                 :          0 :                         return YXML_OK;
     567         [ #  # ]:          0 :                 if(ch == (unsigned char)'/') {
     568                 :          0 :                         x->state = YXMLS_elem3;
     569                 :          0 :                         return YXML_OK;
     570                 :            :                 }
     571         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     572                 :          0 :                         x->state = YXMLS_misc2;
     573                 :          0 :                         return YXML_OK;
     574                 :            :                 }
     575   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     576                 :          0 :                         x->state = YXMLS_attr0;
     577                 :          0 :                         return yxml_attrstart(x, ch);
     578                 :            :                 }
     579                 :          0 :                 break;
     580                 :            :         case YXMLS_elem2:
     581   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     582                 :          0 :                         x->state = YXMLS_elem1;
     583                 :          0 :                         return YXML_OK;
     584                 :            :                 }
     585         [ #  # ]:          0 :                 if(ch == (unsigned char)'/') {
     586                 :          0 :                         x->state = YXMLS_elem3;
     587                 :          0 :                         return YXML_OK;
     588                 :            :                 }
     589         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     590                 :          0 :                         x->state = YXMLS_misc2;
     591                 :          0 :                         return YXML_OK;
     592                 :            :                 }
     593                 :          0 :                 break;
     594                 :            :         case YXMLS_elem3:
     595         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     596                 :          0 :                         x->state = YXMLS_misc2;
     597                 :          0 :                         return yxml_selfclose(x, ch);
     598                 :            :                 }
     599                 :          0 :                 break;
     600                 :            :         case YXMLS_enc0:
     601   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     602                 :          0 :                         return YXML_OK;
     603         [ #  # ]:          0 :                 if(ch == (unsigned char)'=') {
     604                 :          0 :                         x->state = YXMLS_enc1;
     605                 :          0 :                         return YXML_OK;
     606                 :            :                 }
     607                 :          0 :                 break;
     608                 :            :         case YXMLS_enc1:
     609   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     610                 :          0 :                         return YXML_OK;
     611   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     612                 :          0 :                         x->state = YXMLS_enc2;
     613                 :          0 :                         x->quote = ch;
     614                 :          0 :                         return YXML_OK;
     615                 :            :                 }
     616                 :          0 :                 break;
     617                 :            :         case YXMLS_enc2:
     618         [ #  # ]:          0 :                 if(yxml_isAlpha(ch)) {
     619                 :          0 :                         x->state = YXMLS_enc3;
     620                 :          0 :                         return YXML_OK;
     621                 :            :                 }
     622                 :          0 :                 break;
     623                 :            :         case YXMLS_enc3:
     624   [ #  #  #  #  :          0 :                 if(yxml_isEncName(ch))
          #  #  #  #  #  
                      # ]
     625                 :          0 :                         return YXML_OK;
     626         [ #  # ]:          0 :                 if(x->quote == ch) {
     627                 :          0 :                         x->state = YXMLS_xmldecl6;
     628                 :          0 :                         return YXML_OK;
     629                 :            :                 }
     630                 :          0 :                 break;
     631                 :            :         case YXMLS_etag0:
     632   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     633                 :          0 :                         x->state = YXMLS_etag1;
     634                 :          0 :                         return yxml_elemclose(x, ch);
     635                 :            :                 }
     636                 :          0 :                 break;
     637                 :            :         case YXMLS_etag1:
     638   [ #  #  #  #  :          0 :                 if(yxml_isName(ch))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     639                 :          0 :                         return yxml_elemclose(x, ch);
     640   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     641                 :          0 :                         x->state = YXMLS_etag2;
     642                 :          0 :                         return yxml_elemcloseend(x, ch);
     643                 :            :                 }
     644         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     645                 :          0 :                         x->state = YXMLS_misc2;
     646                 :          0 :                         return yxml_elemcloseend(x, ch);
     647                 :            :                 }
     648                 :          0 :                 break;
     649                 :            :         case YXMLS_etag2:
     650   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     651                 :          0 :                         return YXML_OK;
     652         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     653                 :          0 :                         x->state = YXMLS_misc2;
     654                 :          0 :                         return YXML_OK;
     655                 :            :                 }
     656                 :          0 :                 break;
     657                 :            :         case YXMLS_init:
     658         [ #  # ]:          0 :                 if(ch == (unsigned char)'\xef') {
     659                 :          0 :                         x->state = YXMLS_string;
     660                 :          0 :                         x->nextstate = YXMLS_misc0;
     661                 :          0 :                         x->string = (unsigned char *)"\xbb\xbf";
     662                 :          0 :                         return YXML_OK;
     663                 :            :                 }
     664   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     665                 :          0 :                         x->state = YXMLS_misc0;
     666                 :          0 :                         return YXML_OK;
     667                 :            :                 }
     668         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     669                 :          0 :                         x->state = YXMLS_le0;
     670                 :          0 :                         return YXML_OK;
     671                 :            :                 }
     672                 :          0 :                 break;
     673                 :            :         case YXMLS_le0:
     674         [ #  # ]:          0 :                 if(ch == (unsigned char)'!') {
     675                 :          0 :                         x->state = YXMLS_lee1;
     676                 :          0 :                         return YXML_OK;
     677                 :            :                 }
     678         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     679                 :          0 :                         x->state = YXMLS_leq0;
     680                 :          0 :                         return YXML_OK;
     681                 :            :                 }
     682   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     683                 :          0 :                         x->state = YXMLS_elem0;
     684                 :          0 :                         return yxml_elemstart(x, ch);
     685                 :            :                 }
     686                 :          0 :                 break;
     687                 :            :         case YXMLS_le1:
     688         [ #  # ]:          0 :                 if(ch == (unsigned char)'!') {
     689                 :          0 :                         x->state = YXMLS_lee1;
     690                 :          0 :                         return YXML_OK;
     691                 :            :                 }
     692         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     693                 :          0 :                         x->state = YXMLS_pi0;
     694                 :          0 :                         x->nextstate = YXMLS_misc1;
     695                 :          0 :                         return YXML_OK;
     696                 :            :                 }
     697   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     698                 :          0 :                         x->state = YXMLS_elem0;
     699                 :          0 :                         return yxml_elemstart(x, ch);
     700                 :            :                 }
     701                 :          0 :                 break;
     702                 :            :         case YXMLS_le2:
     703         [ #  # ]:          0 :                 if(ch == (unsigned char)'!') {
     704                 :          0 :                         x->state = YXMLS_lee2;
     705                 :          0 :                         return YXML_OK;
     706                 :            :                 }
     707         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     708                 :          0 :                         x->state = YXMLS_pi0;
     709                 :          0 :                         x->nextstate = YXMLS_misc2;
     710                 :          0 :                         return YXML_OK;
     711                 :            :                 }
     712         [ #  # ]:          0 :                 if(ch == (unsigned char)'/') {
     713                 :          0 :                         x->state = YXMLS_etag0;
     714                 :          0 :                         return YXML_OK;
     715                 :            :                 }
     716   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     717                 :          0 :                         x->state = YXMLS_elem0;
     718                 :          0 :                         return yxml_elemstart(x, ch);
     719                 :            :                 }
     720                 :          0 :                 break;
     721                 :            :         case YXMLS_le3:
     722         [ #  # ]:          0 :                 if(ch == (unsigned char)'!') {
     723                 :          0 :                         x->state = YXMLS_comment0;
     724                 :          0 :                         x->nextstate = YXMLS_misc3;
     725                 :          0 :                         return YXML_OK;
     726                 :            :                 }
     727         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     728                 :          0 :                         x->state = YXMLS_pi0;
     729                 :          0 :                         x->nextstate = YXMLS_misc3;
     730                 :          0 :                         return YXML_OK;
     731                 :            :                 }
     732                 :          0 :                 break;
     733                 :            :         case YXMLS_lee1:
     734         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     735                 :          0 :                         x->state = YXMLS_comment1;
     736                 :          0 :                         x->nextstate = YXMLS_misc1;
     737                 :          0 :                         return YXML_OK;
     738                 :            :                 }
     739         [ #  # ]:          0 :                 if(ch == (unsigned char)'D') {
     740                 :          0 :                         x->state = YXMLS_string;
     741                 :          0 :                         x->nextstate = YXMLS_dt0;
     742                 :          0 :                         x->string = (unsigned char *)"OCTYPE";
     743                 :          0 :                         return YXML_OK;
     744                 :            :                 }
     745                 :          0 :                 break;
     746                 :            :         case YXMLS_lee2:
     747         [ #  # ]:          0 :                 if(ch == (unsigned char)'-') {
     748                 :          0 :                         x->state = YXMLS_comment1;
     749                 :          0 :                         x->nextstate = YXMLS_misc2;
     750                 :          0 :                         return YXML_OK;
     751                 :            :                 }
     752         [ #  # ]:          0 :                 if(ch == (unsigned char)'[') {
     753                 :          0 :                         x->state = YXMLS_string;
     754                 :          0 :                         x->nextstate = YXMLS_cd0;
     755                 :          0 :                         x->string = (unsigned char *)"CDATA[";
     756                 :          0 :                         return YXML_OK;
     757                 :            :                 }
     758                 :          0 :                 break;
     759                 :            :         case YXMLS_leq0:
     760         [ #  # ]:          0 :                 if(ch == (unsigned char)'x') {
     761                 :          0 :                         x->state = YXMLS_xmldecl0;
     762                 :          0 :                         x->nextstate = YXMLS_misc1;
     763                 :          0 :                         return yxml_pistart(x, ch);
     764                 :            :                 }
     765   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     766                 :          0 :                         x->state = YXMLS_pi1;
     767                 :          0 :                         x->nextstate = YXMLS_misc1;
     768                 :          0 :                         return yxml_pistart(x, ch);
     769                 :            :                 }
     770                 :          0 :                 break;
     771                 :            :         case YXMLS_misc0:
     772   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     773                 :          0 :                         return YXML_OK;
     774         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     775                 :          0 :                         x->state = YXMLS_le0;
     776                 :          0 :                         return YXML_OK;
     777                 :            :                 }
     778                 :          0 :                 break;
     779                 :            :         case YXMLS_misc1:
     780   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     781                 :          0 :                         return YXML_OK;
     782         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     783                 :          0 :                         x->state = YXMLS_le1;
     784                 :          0 :                         return YXML_OK;
     785                 :            :                 }
     786                 :          0 :                 break;
     787                 :            :         case YXMLS_misc2:
     788         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     789                 :          0 :                         x->state = YXMLS_le2;
     790                 :          0 :                         return YXML_OK;
     791                 :            :                 }
     792         [ #  # ]:          0 :                 if(ch == (unsigned char)'&') {
     793                 :          0 :                         x->state = YXMLS_misc2a;
     794                 :          0 :                         return yxml_refstart(x, ch);
     795                 :            :                 }
     796                 :            :                 if(yxml_isChar(ch))
     797                 :          0 :                         return yxml_datacontent(x, ch);
     798                 :            :                 break;
     799                 :            :         case YXMLS_misc2a:
     800   [ #  #  #  #  :          0 :                 if(yxml_isRef(ch))
                   #  # ]
     801                 :          0 :                         return yxml_ref(x, ch);
     802         [ #  # ]:          0 :                 if(ch == (unsigned char)'\x3b') {
     803                 :          0 :                         x->state = YXMLS_misc2;
     804                 :          0 :                         return yxml_refcontent(x, ch);
     805                 :            :                 }
     806                 :          0 :                 break;
     807                 :            :         case YXMLS_misc3:
     808   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     809                 :          0 :                         return YXML_OK;
     810         [ #  # ]:          0 :                 if(ch == (unsigned char)'<') {
     811                 :          0 :                         x->state = YXMLS_le3;
     812                 :          0 :                         return YXML_OK;
     813                 :            :                 }
     814                 :          0 :                 break;
     815                 :            :         case YXMLS_pi0:
     816   [ #  #  #  #  :          0 :                 if(yxml_isNameStart(ch)) {
             #  #  #  # ]
     817                 :          0 :                         x->state = YXMLS_pi1;
     818                 :          0 :                         return yxml_pistart(x, ch);
     819                 :            :                 }
     820                 :          0 :                 break;
     821                 :            :         case YXMLS_pi1:
     822   [ #  #  #  #  :          0 :                 if(yxml_isName(ch))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     823                 :          0 :                         return yxml_piname(x, ch);
     824         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     825                 :          0 :                         x->state = YXMLS_pi4;
     826                 :          0 :                         return yxml_pinameend(x, ch);
     827                 :            :                 }
     828   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     829                 :          0 :                         x->state = YXMLS_pi2;
     830                 :          0 :                         return yxml_pinameend(x, ch);
     831                 :            :                 }
     832                 :          0 :                 break;
     833                 :            :         case YXMLS_pi2:
     834         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     835                 :          0 :                         x->state = YXMLS_pi3;
     836                 :          0 :                         return YXML_OK;
     837                 :            :                 }
     838                 :            :                 if(yxml_isChar(ch))
     839                 :          0 :                         return yxml_datapi1(x, ch);
     840                 :            :                 break;
     841                 :            :         case YXMLS_pi3:
     842         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     843                 :          0 :                         x->state = x->nextstate;
     844                 :          0 :                         return yxml_pivalend(x, ch);
     845                 :            :                 }
     846                 :            :                 if(yxml_isChar(ch)) {
     847                 :          0 :                         x->state = YXMLS_pi2;
     848                 :          0 :                         return yxml_datapi2(x, ch);
     849                 :            :                 }
     850                 :            :                 break;
     851                 :            :         case YXMLS_pi4:
     852         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
     853                 :          0 :                         x->state = x->nextstate;
     854                 :          0 :                         return yxml_pivalend(x, ch);
     855                 :            :                 }
     856                 :          0 :                 break;
     857                 :            :         case YXMLS_std0:
     858   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     859                 :          0 :                         return YXML_OK;
     860         [ #  # ]:          0 :                 if(ch == (unsigned char)'=') {
     861                 :          0 :                         x->state = YXMLS_std1;
     862                 :          0 :                         return YXML_OK;
     863                 :            :                 }
     864                 :          0 :                 break;
     865                 :            :         case YXMLS_std1:
     866   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     867                 :          0 :                         return YXML_OK;
     868   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     869                 :          0 :                         x->state = YXMLS_std2;
     870                 :          0 :                         x->quote = ch;
     871                 :          0 :                         return YXML_OK;
     872                 :            :                 }
     873                 :          0 :                 break;
     874                 :            :         case YXMLS_std2:
     875         [ #  # ]:          0 :                 if(ch == (unsigned char)'y') {
     876                 :          0 :                         x->state = YXMLS_string;
     877                 :          0 :                         x->nextstate = YXMLS_std3;
     878                 :          0 :                         x->string = (unsigned char *)"es";
     879                 :          0 :                         return YXML_OK;
     880                 :            :                 }
     881         [ #  # ]:          0 :                 if(ch == (unsigned char)'n') {
     882                 :          0 :                         x->state = YXMLS_string;
     883                 :          0 :                         x->nextstate = YXMLS_std3;
     884                 :          0 :                         x->string = (unsigned char *)"o";
     885                 :          0 :                         return YXML_OK;
     886                 :            :                 }
     887                 :          0 :                 break;
     888                 :            :         case YXMLS_std3:
     889         [ #  # ]:          0 :                 if(x->quote == ch) {
     890                 :          0 :                         x->state = YXMLS_xmldecl8;
     891                 :          0 :                         return YXML_OK;
     892                 :            :                 }
     893                 :          0 :                 break;
     894                 :            :         case YXMLS_ver0:
     895   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     896                 :          0 :                         return YXML_OK;
     897         [ #  # ]:          0 :                 if(ch == (unsigned char)'=') {
     898                 :          0 :                         x->state = YXMLS_ver1;
     899                 :          0 :                         return YXML_OK;
     900                 :            :                 }
     901                 :          0 :                 break;
     902                 :            :         case YXMLS_ver1:
     903   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     904                 :          0 :                         return YXML_OK;
     905   [ #  #  #  # ]:          0 :                 if(ch == (unsigned char)'\'' || ch == (unsigned char)'"') {
     906                 :          0 :                         x->state = YXMLS_string;
     907                 :          0 :                         x->quote = ch;
     908                 :          0 :                         x->nextstate = YXMLS_ver2;
     909                 :          0 :                         x->string = (unsigned char *)"1.";
     910                 :          0 :                         return YXML_OK;
     911                 :            :                 }
     912                 :          0 :                 break;
     913                 :            :         case YXMLS_ver2:
     914         [ #  # ]:          0 :                 if(yxml_isNum(ch)) {
     915                 :          0 :                         x->state = YXMLS_ver3;
     916                 :          0 :                         return YXML_OK;
     917                 :            :                 }
     918                 :          0 :                 break;
     919                 :            :         case YXMLS_ver3:
     920         [ #  # ]:          0 :                 if(yxml_isNum(ch))
     921                 :          0 :                         return YXML_OK;
     922         [ #  # ]:          0 :                 if(x->quote == ch) {
     923                 :          0 :                         x->state = YXMLS_xmldecl4;
     924                 :          0 :                         return YXML_OK;
     925                 :            :                 }
     926                 :          0 :                 break;
     927                 :            :         case YXMLS_xmldecl0:
     928         [ #  # ]:          0 :                 if(ch == (unsigned char)'m') {
     929                 :          0 :                         x->state = YXMLS_xmldecl1;
     930                 :          0 :                         return yxml_piname(x, ch);
     931                 :            :                 }
     932   [ #  #  #  #  :          0 :                 if(yxml_isName(ch)) {
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     933                 :          0 :                         x->state = YXMLS_pi1;
     934                 :          0 :                         return yxml_piname(x, ch);
     935                 :            :                 }
     936         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     937                 :          0 :                         x->state = YXMLS_pi4;
     938                 :          0 :                         return yxml_pinameend(x, ch);
     939                 :            :                 }
     940   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     941                 :          0 :                         x->state = YXMLS_pi2;
     942                 :          0 :                         return yxml_pinameend(x, ch);
     943                 :            :                 }
     944                 :          0 :                 break;
     945                 :            :         case YXMLS_xmldecl1:
     946         [ #  # ]:          0 :                 if(ch == (unsigned char)'l') {
     947                 :          0 :                         x->state = YXMLS_xmldecl2;
     948                 :          0 :                         return yxml_piname(x, ch);
     949                 :            :                 }
     950   [ #  #  #  #  :          0 :                 if(yxml_isName(ch)) {
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     951                 :          0 :                         x->state = YXMLS_pi1;
     952                 :          0 :                         return yxml_piname(x, ch);
     953                 :            :                 }
     954         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     955                 :          0 :                         x->state = YXMLS_pi4;
     956                 :          0 :                         return yxml_pinameend(x, ch);
     957                 :            :                 }
     958   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     959                 :          0 :                         x->state = YXMLS_pi2;
     960                 :          0 :                         return yxml_pinameend(x, ch);
     961                 :            :                 }
     962                 :          0 :                 break;
     963                 :            :         case YXMLS_xmldecl2:
     964   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     965                 :          0 :                         x->state = YXMLS_xmldecl3;
     966                 :          0 :                         return yxml_piabort(x, ch);
     967                 :            :                 }
     968   [ #  #  #  #  :          0 :                 if(yxml_isName(ch)) {
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     969                 :          0 :                         x->state = YXMLS_pi1;
     970                 :          0 :                         return yxml_piname(x, ch);
     971                 :            :                 }
     972                 :          0 :                 break;
     973                 :            :         case YXMLS_xmldecl3:
     974   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     975                 :          0 :                         return YXML_OK;
     976         [ #  # ]:          0 :                 if(ch == (unsigned char)'v') {
     977                 :          0 :                         x->state = YXMLS_string;
     978                 :          0 :                         x->nextstate = YXMLS_ver0;
     979                 :          0 :                         x->string = (unsigned char *)"ersion";
     980                 :          0 :                         return YXML_OK;
     981                 :            :                 }
     982                 :          0 :                 break;
     983                 :            :         case YXMLS_xmldecl4:
     984   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
     985                 :          0 :                         x->state = YXMLS_xmldecl5;
     986                 :          0 :                         return YXML_OK;
     987                 :            :                 }
     988         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     989                 :          0 :                         x->state = YXMLS_xmldecl9;
     990                 :          0 :                         return YXML_OK;
     991                 :            :                 }
     992                 :          0 :                 break;
     993                 :            :         case YXMLS_xmldecl5:
     994   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
     995                 :          0 :                         return YXML_OK;
     996         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
     997                 :          0 :                         x->state = YXMLS_xmldecl9;
     998                 :          0 :                         return YXML_OK;
     999                 :            :                 }
    1000         [ #  # ]:          0 :                 if(ch == (unsigned char)'e') {
    1001                 :          0 :                         x->state = YXMLS_string;
    1002                 :          0 :                         x->nextstate = YXMLS_enc0;
    1003                 :          0 :                         x->string = (unsigned char *)"ncoding";
    1004                 :          0 :                         return YXML_OK;
    1005                 :            :                 }
    1006         [ #  # ]:          0 :                 if(ch == (unsigned char)'s') {
    1007                 :          0 :                         x->state = YXMLS_string;
    1008                 :          0 :                         x->nextstate = YXMLS_std0;
    1009                 :          0 :                         x->string = (unsigned char *)"tandalone";
    1010                 :          0 :                         return YXML_OK;
    1011                 :            :                 }
    1012                 :          0 :                 break;
    1013                 :            :         case YXMLS_xmldecl6:
    1014   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch)) {
                   #  # ]
    1015                 :          0 :                         x->state = YXMLS_xmldecl7;
    1016                 :          0 :                         return YXML_OK;
    1017                 :            :                 }
    1018         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
    1019                 :          0 :                         x->state = YXMLS_xmldecl9;
    1020                 :          0 :                         return YXML_OK;
    1021                 :            :                 }
    1022                 :          0 :                 break;
    1023                 :            :         case YXMLS_xmldecl7:
    1024   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
    1025                 :          0 :                         return YXML_OK;
    1026         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
    1027                 :          0 :                         x->state = YXMLS_xmldecl9;
    1028                 :          0 :                         return YXML_OK;
    1029                 :            :                 }
    1030         [ #  # ]:          0 :                 if(ch == (unsigned char)'s') {
    1031                 :          0 :                         x->state = YXMLS_string;
    1032                 :          0 :                         x->nextstate = YXMLS_std0;
    1033                 :          0 :                         x->string = (unsigned char *)"tandalone";
    1034                 :          0 :                         return YXML_OK;
    1035                 :            :                 }
    1036                 :          0 :                 break;
    1037                 :            :         case YXMLS_xmldecl8:
    1038   [ #  #  #  #  :          0 :                 if(yxml_isSP(ch))
                   #  # ]
    1039                 :          0 :                         return YXML_OK;
    1040         [ #  # ]:          0 :                 if(ch == (unsigned char)'?') {
    1041                 :          0 :                         x->state = YXMLS_xmldecl9;
    1042                 :          0 :                         return YXML_OK;
    1043                 :            :                 }
    1044                 :          0 :                 break;
    1045                 :            :         case YXMLS_xmldecl9:
    1046         [ #  # ]:          0 :                 if(ch == (unsigned char)'>') {
    1047                 :          0 :                         x->state = YXMLS_misc1;
    1048                 :          0 :                         return YXML_OK;
    1049                 :            :                 }
    1050                 :          0 :                 break;
    1051                 :            :         }
    1052                 :          0 :         return YXML_ESYN;
    1053                 :          0 : }
    1054                 :            : 
    1055                 :            : 
    1056                 :          0 : yxml_ret_t yxml_eof(yxml_t *x) {
    1057         [ #  # ]:          0 :         if(x->state != YXMLS_misc3)
    1058                 :          0 :                 return YXML_EEOF;
    1059                 :          0 :         return YXML_OK;
    1060                 :          0 : }
    1061                 :            : 
    1062                 :            : 
    1063                 :            : /* vim: set noet sw=4 ts=4: */

Generated by: LCOV version 1.15