1 #include "XmlParser.hpp"
   2 #include <soulng/util/Unicode.hpp>
   3 #include <soulng/lexer/TrivialLexer.hpp>
   4 #include <soulng/parser/Range.hpp>
   5 
   6 // this file has been automatically generated from 'D:/work/soulng-project/sngxml/xml/XmlParser.parser' using soulng parser generator spg version 3.0.0
   7 
   8 static const soulng::parser::Range s0[] = {{99}  {1010}  {1313}  {3255295}  {5734465533}  {655361114111}};
   9 
  10 static const soulng::parser::Range s1[] = {{3232}  {99}  {1313}  {1010}};
  11 
  12 static const soulng::parser::Range s2[] = {{5858}  {6590}  {9595}  {97122}  {192214}  {216246}  {248767}  {880893}  {8958191}  {82048205}  {83048591}  {1126412271}  {1228955295}  {6374464975}  {6500865533}  {65536983039}};
  13 
  14 static const soulng::parser::Range s3[] = {{4545}  {4646}  {4857}  {183183}  {768879}  {82558256}};
  15 
  16 static const int s4[] = {6063120109108};
  17 
  18 static const int s5[] = {6362};
  19 
  20 static const int s6[] = {118101114115105111110};
  21 
  22 static const soulng::parser::Range s7[] = {{4857}};
  23 
  24 static const int s8[] = {10111099111100105110103};
  25 
  26 static const soulng::parser::Range s9[] = {{6590}  {97122}};
  27 
  28 static const soulng::parser::Range s10[] = {{6590}  {97122}  {4857}  {4646}  {9595}  {4545}};
  29 
  30 static const int s11[] = {1151169711010097108111110101};
  31 
  32 static const int s12[] = {603368796784898069};
  33 
  34 static const int s13[] = {838983846977};
  35 
  36 static const int s14[] = {808566767367};
  37 
  38 static const soulng::parser::Range s15[] = {{3434}};
  39 
  40 static const soulng::parser::Range s16[] = {{3939}};
  41 
  42 static const soulng::parser::Range s17[] = {{3232}  {1313}  {1010}};
  43 
  44 static const soulng::parser::Range s18[] = {{97122}  {6590}  {4857}};
  45 
  46 static const soulng::parser::Range s19[] = {{4545}  {3939}  {4040}  {4141}  {4343}  {4444}  {4646}  {4747}  {5858}  {6161}  {6363}  {5959}  {3333}  {4242}  {3535}  {6464}  {3636}  {9595}  {3737}};
  47 
  48 static const int s20[] = {603369766977697884};
  49 
  50 static const int s21[] = {6977808489};
  51 
  52 static const int s22[] = {657889};
  53 
  54 static const int s23[] = {35806768658465};
  55 
  56 static const int s24[] = {4142};
  57 
  58 static const int s25[] = {35806768658465};
  59 
  60 static const int s26[] = {603365848476738384};
  61 
  62 static const int s27[] = {6768658465};
  63 
  64 static const int s28[] = {7368};
  65 
  66 static const int s29[] = {7368826970};
  67 
  68 static const int s30[] = {736882697083};
  69 
  70 static const int s31[] = {697884738489};
  71 
  72 static const int s32[] = {6978847384736983};
  73 
  74 static const int s33[] = {78778479756978};
  75 
  76 static const int s34[] = {7877847975697883};
  77 
  78 static const int s35[] = {7879846584737978};
  79 
  80 static const int s36[] = {358269818573826968};
  81 
  82 static const int s37[] = {3573778076736968};
  83 
  84 static const int s38[] = {357073886968};
  85 
  86 static const int s39[] = {6033697884738489};
  87 
  88 static const int s40[] = {6033697884738489};
  89 
  90 static const soulng::parser::Range s41[] = {{3737}  {3838}  {3434}};
  91 
  92 static const soulng::parser::Range s42[] = {{3737}  {3838}  {3939}};
  93 
  94 static const int s43[] = {7868658465};
  95 
  96 static const int s44[] = {60337879846584737978};
  97 
  98 static const int s45[] = {808566767367};
  99 
 100 static const int s46[] = {4762};
 101 
 102 static const int s47[] = {6047};
 103 
 104 static const soulng::parser::Range s48[] = {{6060}  {3838}};
 105 
 106 static const soulng::parser::Range s49[] = {{6060}  {3838}};
 107 
 108 static const int s50[] = {939362};
 109 
 110 static const soulng::parser::Range s51[] = {{6060}  {3838}};
 111 
 112 static const int s52[] = {603391676865846591};
 113 
 114 static const int s53[] = {939362};
 115 
 116 static const int s54[] = {939362};
 117 
 118 static const soulng::parser::Range s55[] = {{6060}  {3838}  {3434}};
 119 
 120 static const soulng::parser::Range s56[] = {{6060}  {3838}  {3939}};
 121 
 122 static const soulng::parser::Range s57[] = {{4857}};
 123 
 124 static const soulng::parser::Range s58[] = {{4857}  {97102}  {6570}};
 125 
 126 static const int s59[] = {3835};
 127 
 128 static const int s60[] = {3835120};
 129 
 130 static const int s61[] = {60334545};
 131 
 132 static const int s62[] = {454562};
 133 
 134 static const int s63[] = {6063};
 135 
 136 static const int s64[] = {6362};
 137 
 138 static const int s65[] = {6362};
 139 
 140 static const soulng::parser::Range s66[] = {{120120}  {8888}};
 141 
 142 static const soulng::parser::Range s67[] = {{109109}  {7777}};
 143 
 144 static const soulng::parser::Range s68[] = {{108108}  {7676}};
 145 
 146 static const int s69[] = {3412110111534};
 147 
 148 static const int s70[] = {3411011134};
 149 
 150 using namespace soulng::unicode;
 151 using namespace soulng::lexer;
 152 
 153 void XmlParser::Parse(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
 154 {
 155     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 156 
 157 
 158 
 159 
 160 
 161     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 162     ++lexer;
 163     soulng::lexer::Span span = lexer.GetSpan();
 164     soulng::parser::Match match = XmlParser::Document(lexerprocessor);
 165     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 166 
 167 
 168 
 169 
 170 
 171     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 172     if (match.hit)
 173     {
 174         if (*lexer == soulng::lexer::END_TOKEN)
 175         {
 176             return;
 177         }
 178         else
 179         {
 180             lexer.ThrowExpectationFailure(lexer.GetSpan()ToUtf32(soulng::lexer::GetEndTokenInfo()));
 181         }
 182     }
 183     else
 184     {
 185         lexer.ThrowExpectationFailure(spanU"Document");
 186     }
 187     return;
 188 }
 189 
 190 soulng::parser::Match XmlParser::Document(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
 191 {
 192     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 193 
 194 
 195 
 196 
 197 
 198 
 199 
 200     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 201     soulng::parser::Match match(false);
 202     soulng::parser::Match* parentMatch0 = &match;
 203     {
 204         soulng::parser::Match match(false);
 205         soulng::parser::Match* parentMatch1 = &match;
 206         {
 207             int64_t pos = lexer.GetPos();
 208             soulng::parser::Match match(true);
 209             if (match.hit)
 210             {
 211                 processor->StartDocument();
 212             }
 213             *parentMatch1 = match;
 214         }
 215         *parentMatch0 = match;
 216     }
 217     if (match.hit)
 218     {
 219         soulng::parser::Match match(false);
 220         soulng::parser::Match* parentMatch2 = &match;
 221         {
 222             soulng::parser::Match match(false);
 223             soulng::parser::Match* parentMatch3 = &match;
 224             {
 225                 int64_t pos = lexer.GetPos();
 226                 soulng::parser::Match match(false);
 227                 soulng::parser::Match* parentMatch4 = &match;
 228                 {
 229                     soulng::parser::Match match(false);
 230                     soulng::parser::Match* parentMatch5 = &match;
 231                     {
 232                         soulng::parser::Match match(false);
 233                         soulng::parser::Match* parentMatch6 = &match;
 234                         {
 235                             soulng::parser::Match match = XmlParser::Prolog(lexerprocessor);
 236                             *parentMatch6 = match;
 237                         }
 238                         if (match.hit)
 239                         {
 240                             soulng::parser::Match match(false);
 241                             soulng::parser::Match* parentMatch7 = &match;
 242                             {
 243                                 soulng::parser::Match match = XmlParser::Element(lexerprocessor);
 244                                 *parentMatch7 = match;
 245                             }
 246                             *parentMatch6 = match;
 247                         }
 248                         *parentMatch5 = match;
 249                     }
 250                     if (match.hit)
 251                     {
 252                         soulng::parser::Match match(false);
 253                         soulng::parser::Match* parentMatch8 = &match;
 254                         {
 255                             soulng::parser::Match match(true);
 256                             soulng::parser::Match* parentMatch9 = &match;
 257                             {
 258                                 while (true)
 259                                 {
 260                                     int64_t save = lexer.GetPos();
 261                                     {
 262                                         soulng::parser::Match match(false);
 263                                         soulng::parser::Match* parentMatch10 = &match;
 264                                         {
 265                                             soulng::parser::Match match = XmlParser::Misc(lexerprocessor);
 266                                             *parentMatch10 = match;
 267                                         }
 268                                         if (match.hit)
 269                                         {
 270                                             *parentMatch9 = match;
 271                                         }
 272                                         else
 273                                         {
 274                                             lexer.SetPos(save);
 275                                             break;
 276                                         }
 277                                     }
 278                                 }
 279                             }
 280                             *parentMatch8 = match;
 281                         }
 282                         *parentMatch5 = match;
 283                     }
 284                     *parentMatch4 = match;
 285                 }
 286                 if (match.hit)
 287                 {
 288                     processor->EndDocument();
 289                 }
 290                 *parentMatch3 = match;
 291             }
 292             *parentMatch2 = match;
 293         }
 294         *parentMatch0 = match;
 295     }
 296     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 297 
 298 
 299 
 300 
 301 
 302     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 303     if (!match.hit)
 304     {
 305         match.value = nullptr;
 306     }
 307     return match;
 308 }
 309 
 310 soulng::parser::Match XmlParser::Char(TrivialLexer& lexer)
 311 {
 312     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 313 
 314 
 315 
 316 
 317 
 318 
 319 
 320     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 321     soulng::parser::Match match(false);
 322     soulng::parser::Match* parentMatch0 = &match;
 323     {
 324         int64_t pos = lexer.GetPos();
 325         soulng::parser::Match match(false);
 326         soulng::parser::Match* parentMatch1 = &match;
 327         {
 328             soulng::parser::Match match(false);
 329             for (const soulng::parser::Range& range : s0)
 330             {
 331                 if (*lexer >= range.first && *lexer <= range.last)
 332                 {
 333                     match.hit = true;
 334                     ++lexer;
 335                     break;
 336                 }
 337             }
 338             *parentMatch1 = match;
 339         }
 340         if (match.hit)
 341         {
 342             Token token = lexer.GetToken(pos);
 343             {
 344                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 345 
 346                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
 347                 return soulng::parser::Match(truenew soulng::parser::Value<char32_t>(static_cast<char32_t>(token.id)));
 348             }
 349         }
 350         *parentMatch0 = match;
 351     }
 352     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 353 
 354 
 355 
 356 
 357 
 358     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 359     if (!match.hit)
 360     {
 361         match.value = nullptr;
 362     }
 363     return match;
 364 }
 365 
 366 soulng::parser::Match XmlParser::S(TrivialLexer& lexer)
 367 {
 368     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 369 
 370 
 371 
 372 
 373 
 374 
 375 
 376     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 377     soulng::parser::Match match(false);
 378     soulng::parser::Match* parentMatch0 = &match;
 379     {
 380         soulng::parser::Match match(false);
 381         for (const soulng::parser::Range& range : s1)
 382         {
 383             if (*lexer >= range.first && *lexer <= range.last)
 384             {
 385                 match.hit = true;
 386                 ++lexer;
 387                 break;
 388             }
 389         }
 390         *parentMatch0 = match;
 391     }
 392     if (match.hit)
 393     {
 394         soulng::parser::Match match(true);
 395         soulng::parser::Match* parentMatch1 = &match;
 396         while (true)
 397         {
 398             int64_t save = lexer.GetPos();
 399             {
 400                 soulng::parser::Match match(false);
 401                 for (const soulng::parser::Range& range : s1)
 402                 {
 403                     if (*lexer >= range.first && *lexer <= range.last)
 404                     {
 405                         match.hit = true;
 406                         ++lexer;
 407                         break;
 408                     }
 409                 }
 410                 if (match.hit)
 411                 {
 412                     *parentMatch1 = match;
 413                 }
 414                 else
 415                 {
 416                     lexer.SetPos(save);
 417                     break;
 418                 }
 419             }
 420         }
 421     }
 422     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 423 
 424 
 425 
 426 
 427 
 428     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 429     if (!match.hit)
 430     {
 431         match.value = nullptr;
 432     }
 433     return match;
 434 }
 435 
 436 soulng::parser::Match XmlParser::NameStartChar(TrivialLexer& lexer)
 437 {
 438     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 439 
 440 
 441 
 442 
 443 
 444 
 445 
 446     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 447     soulng::parser::Match match(false);
 448     for (const soulng::parser::Range& range : s2)
 449     {
 450         if (*lexer >= range.first && *lexer <= range.last)
 451         {
 452             match.hit = true;
 453             ++lexer;
 454             break;
 455         }
 456     }
 457     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 458 
 459 
 460 
 461 
 462 
 463     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 464     if (!match.hit)
 465     {
 466         match.value = nullptr;
 467     }
 468     return match;
 469 }
 470 
 471 soulng::parser::Match XmlParser::NameChar(TrivialLexer& lexer)
 472 {
 473     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 474 
 475 
 476 
 477 
 478 
 479 
 480 
 481     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 482     soulng::parser::Match match(false);
 483     soulng::parser::Match* parentMatch0 = &match;
 484     {
 485         int64_t save = lexer.GetPos();
 486         soulng::parser::Match match = XmlParser::NameStartChar(lexer);
 487         *parentMatch0 = match;
 488         if (!match.hit)
 489         {
 490             soulng::parser::Match match(false);
 491             soulng::parser::Match* parentMatch1 = &match;
 492             lexer.SetPos(save);
 493             {
 494                 soulng::parser::Match match(false);
 495                 for (const soulng::parser::Range& range : s3)
 496                 {
 497                     if (*lexer >= range.first && *lexer <= range.last)
 498                     {
 499                         match.hit = true;
 500                         ++lexer;
 501                         break;
 502                     }
 503                 }
 504                 *parentMatch1 = match;
 505             }
 506             *parentMatch0 = match;
 507         }
 508     }
 509     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 510 
 511 
 512 
 513 
 514 
 515     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 516     if (!match.hit)
 517     {
 518         match.value = nullptr;
 519     }
 520     return match;
 521 }
 522 
 523 soulng::parser::Match XmlParser::Name(TrivialLexer& lexer)
 524 {
 525     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 526 
 527 
 528 
 529 
 530 
 531 
 532 
 533     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 534     Span s = Span();
 535     soulng::parser::Match match(false);
 536     soulng::parser::Match* parentMatch0 = &match;
 537     {
 538         int64_t pos = lexer.GetPos();
 539         soulng::parser::Match match(false);
 540         soulng::parser::Match* parentMatch1 = &match;
 541         {
 542             soulng::parser::Match match(false);
 543             soulng::parser::Match* parentMatch2 = &match;
 544             {
 545                 soulng::parser::Match match(false);
 546                 soulng::parser::Match* parentMatch3 = &match;
 547                 {
 548                     int64_t pos = lexer.GetPos();
 549                     soulng::lexer::Span span = lexer.GetSpan();
 550                     soulng::parser::Match match = XmlParser::NameStartChar(lexer);
 551                     if (match.hit)
 552                     {
 553                         s = span;
 554                     }
 555                     *parentMatch3 = match;
 556                 }
 557                 *parentMatch2 = match;
 558             }
 559             if (match.hit)
 560             {
 561                 soulng::parser::Match match(false);
 562                 soulng::parser::Match* parentMatch4 = &match;
 563                 {
 564                     soulng::parser::Match match(true);
 565                     soulng::parser::Match* parentMatch5 = &match;
 566                     {
 567                         while (true)
 568                         {
 569                             int64_t save = lexer.GetPos();
 570                             {
 571                                 soulng::parser::Match match(false);
 572                                 soulng::parser::Match* parentMatch6 = &match;
 573                                 {
 574                                     soulng::parser::Match match(false);
 575                                     soulng::parser::Match* parentMatch7 = &match;
 576                                     {
 577                                         int64_t pos = lexer.GetPos();
 578                                         soulng::lexer::Span span = lexer.GetSpan();
 579                                         soulng::parser::Match match = XmlParser::NameChar(lexer);
 580                                         if (match.hit)
 581                                         {
 582                                             s.end = span.end;
 583                                         }
 584                                         *parentMatch7 = match;
 585                                     }
 586                                     *parentMatch6 = match;
 587                                 }
 588                                 if (match.hit)
 589                                 {
 590                                     *parentMatch5 = match;
 591                                 }
 592                                 else
 593                                 {
 594                                     lexer.SetPos(save);
 595                                     break;
 596                                 }
 597                             }
 598                         }
 599                     }
 600                     *parentMatch4 = match;
 601                 }
 602                 *parentMatch2 = match;
 603             }
 604             *parentMatch1 = match;
 605         }
 606         if (match.hit)
 607         {
 608             {
 609                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 610 
 611                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
 612                 return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(lexer.GetMatch(s)));
 613             }
 614         }
 615         *parentMatch0 = match;
 616     }
 617     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 618 
 619 
 620 
 621 
 622 
 623     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 624     if (!match.hit)
 625     {
 626         match.value = nullptr;
 627     }
 628     return match;
 629 }
 630 
 631 soulng::parser::Match XmlParser::Names(TrivialLexer& lexer)
 632 {
 633     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 634 
 635 
 636 
 637 
 638 
 639 
 640 
 641     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 642     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name1;
 643     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name2;
 644     soulng::parser::Match match(false);
 645     soulng::parser::Match* parentMatch0 = &match;
 646     {
 647         soulng::parser::Match match = XmlParser::Name(lexer);
 648         name1.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
 649         *parentMatch0 = match;
 650     }
 651     if (match.hit)
 652     {
 653         soulng::parser::Match match(false);
 654         soulng::parser::Match* parentMatch1 = &match;
 655         {
 656             soulng::parser::Match match(true);
 657             soulng::parser::Match* parentMatch2 = &match;
 658             {
 659                 while (true)
 660                 {
 661                     int64_t save = lexer.GetPos();
 662                     {
 663                         soulng::parser::Match match(false);
 664                         soulng::parser::Match* parentMatch3 = &match;
 665                         {
 666                             soulng::parser::Match match(false);
 667                             soulng::parser::Match* parentMatch4 = &match;
 668                             {
 669                                 soulng::parser::Match match(false);
 670                                 if (*lexer == 32)
 671                                 {
 672                                     ++lexer;
 673                                     match.hit = true;
 674                                 }
 675                                 *parentMatch4 = match;
 676                             }
 677                             if (match.hit)
 678                             {
 679                                 soulng::parser::Match match(false);
 680                                 soulng::parser::Match* parentMatch5 = &match;
 681                                 {
 682                                     soulng::parser::Match match = XmlParser::Name(lexer);
 683                                     name2.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
 684                                     *parentMatch5 = match;
 685                                 }
 686                                 *parentMatch4 = match;
 687                             }
 688                             *parentMatch3 = match;
 689                         }
 690                         if (match.hit)
 691                         {
 692                             *parentMatch2 = match;
 693                         }
 694                         else
 695                         {
 696                             lexer.SetPos(save);
 697                             break;
 698                         }
 699                     }
 700                 }
 701             }
 702             *parentMatch1 = match;
 703         }
 704         *parentMatch0 = match;
 705     }
 706     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 707 
 708 
 709 
 710 
 711 
 712     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 713     if (!match.hit)
 714     {
 715         match.value = nullptr;
 716     }
 717     return match;
 718 }
 719 
 720 soulng::parser::Match XmlParser::Nmtoken(TrivialLexer& lexer)
 721 {
 722     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 723 
 724 
 725 
 726 
 727 
 728 
 729 
 730     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 731     soulng::parser::Match match(false);
 732     soulng::parser::Match* parentMatch0 = &match;
 733     {
 734         soulng::parser::Match match = XmlParser::NameChar(lexer);
 735         *parentMatch0 = match;
 736     }
 737     if (match.hit)
 738     {
 739         soulng::parser::Match match(true);
 740         soulng::parser::Match* parentMatch1 = &match;
 741         while (true)
 742         {
 743             int64_t save = lexer.GetPos();
 744             {
 745                 soulng::parser::Match match = XmlParser::NameChar(lexer);
 746                 if (match.hit)
 747                 {
 748                     *parentMatch1 = match;
 749                 }
 750                 else
 751                 {
 752                     lexer.SetPos(save);
 753                     break;
 754                 }
 755             }
 756         }
 757     }
 758     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 759 
 760 
 761 
 762 
 763 
 764     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 765     if (!match.hit)
 766     {
 767         match.value = nullptr;
 768     }
 769     return match;
 770 }
 771 
 772 soulng::parser::Match XmlParser::Nmtokens(TrivialLexer& lexer)
 773 {
 774     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 775 
 776 
 777 
 778 
 779 
 780 
 781 
 782     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 783     soulng::parser::Match match(false);
 784     soulng::parser::Match* parentMatch0 = &match;
 785     {
 786         soulng::parser::Match match = XmlParser::Nmtoken(lexer);
 787         *parentMatch0 = match;
 788     }
 789     if (match.hit)
 790     {
 791         soulng::parser::Match match(false);
 792         soulng::parser::Match* parentMatch1 = &match;
 793         {
 794             soulng::parser::Match match(true);
 795             soulng::parser::Match* parentMatch2 = &match;
 796             {
 797                 while (true)
 798                 {
 799                     int64_t save = lexer.GetPos();
 800                     {
 801                         soulng::parser::Match match(false);
 802                         soulng::parser::Match* parentMatch3 = &match;
 803                         {
 804                             soulng::parser::Match match(false);
 805                             soulng::parser::Match* parentMatch4 = &match;
 806                             {
 807                                 soulng::parser::Match match(false);
 808                                 if (*lexer == 32)
 809                                 {
 810                                     ++lexer;
 811                                     match.hit = true;
 812                                 }
 813                                 *parentMatch4 = match;
 814                             }
 815                             if (match.hit)
 816                             {
 817                                 soulng::parser::Match match(false);
 818                                 soulng::parser::Match* parentMatch5 = &match;
 819                                 {
 820                                     soulng::parser::Match match = XmlParser::Nmtoken(lexer);
 821                                     *parentMatch5 = match;
 822                                 }
 823                                 *parentMatch4 = match;
 824                             }
 825                             *parentMatch3 = match;
 826                         }
 827                         if (match.hit)
 828                         {
 829                             *parentMatch2 = match;
 830                         }
 831                         else
 832                         {
 833                             lexer.SetPos(save);
 834                             break;
 835                         }
 836                     }
 837                 }
 838             }
 839             *parentMatch1 = match;
 840         }
 841         *parentMatch0 = match;
 842     }
 843     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 844 
 845 
 846 
 847 
 848 
 849     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 850     if (!match.hit)
 851     {
 852         match.value = nullptr;
 853     }
 854     return match;
 855 }
 856 
 857 soulng::parser::Match XmlParser::Prolog(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
 858 {
 859     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 860 
 861 
 862 
 863 
 864 
 865 
 866 
 867     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 868     soulng::parser::Match match(false);
 869     soulng::parser::Match* parentMatch0 = &match;
 870     {
 871         soulng::parser::Match match(false);
 872         soulng::parser::Match* parentMatch1 = &match;
 873         {
 874             soulng::parser::Match match(true);
 875             int64_t save = lexer.GetPos();
 876             soulng::parser::Match* parentMatch2 = &match;
 877             {
 878                 soulng::parser::Match match = XmlParser::XMLDecl(lexerprocessor);
 879                 if (match.hit)
 880                 {
 881                     *parentMatch2 = match;
 882                 }
 883                 else
 884                 {
 885                     lexer.SetPos(save);
 886                 }
 887             }
 888             *parentMatch1 = match;
 889         }
 890         if (match.hit)
 891         {
 892             soulng::parser::Match match(false);
 893             soulng::parser::Match* parentMatch3 = &match;
 894             {
 895                 soulng::parser::Match match(true);
 896                 soulng::parser::Match* parentMatch4 = &match;
 897                 {
 898                     while (true)
 899                     {
 900                         int64_t save = lexer.GetPos();
 901                         {
 902                             soulng::parser::Match match = XmlParser::Misc(lexerprocessor);
 903                             if (match.hit)
 904                             {
 905                                 *parentMatch4 = match;
 906                             }
 907                             else
 908                             {
 909                                 lexer.SetPos(save);
 910                                 break;
 911                             }
 912                         }
 913                     }
 914                 }
 915                 *parentMatch3 = match;
 916             }
 917             *parentMatch1 = match;
 918         }
 919         *parentMatch0 = match;
 920     }
 921     if (match.hit)
 922     {
 923         soulng::parser::Match match(false);
 924         soulng::parser::Match* parentMatch5 = &match;
 925         {
 926             soulng::parser::Match match(true);
 927             int64_t save = lexer.GetPos();
 928             soulng::parser::Match* parentMatch6 = &match;
 929             {
 930                 soulng::parser::Match match(false);
 931                 soulng::parser::Match* parentMatch7 = &match;
 932                 {
 933                     soulng::parser::Match match(false);
 934                     soulng::parser::Match* parentMatch8 = &match;
 935                     {
 936                         soulng::parser::Match match = XmlParser::DocTypeDecl(lexerprocessor);
 937                         *parentMatch8 = match;
 938                     }
 939                     if (match.hit)
 940                     {
 941                         soulng::parser::Match match(false);
 942                         soulng::parser::Match* parentMatch9 = &match;
 943                         {
 944                             soulng::parser::Match match(true);
 945                             soulng::parser::Match* parentMatch10 = &match;
 946                             {
 947                                 while (true)
 948                                 {
 949                                     int64_t save = lexer.GetPos();
 950                                     {
 951                                         soulng::parser::Match match = XmlParser::Misc(lexerprocessor);
 952                                         if (match.hit)
 953                                         {
 954                                             *parentMatch10 = match;
 955                                         }
 956                                         else
 957                                         {
 958                                             lexer.SetPos(save);
 959                                             break;
 960                                         }
 961                                     }
 962                                 }
 963                             }
 964                             *parentMatch9 = match;
 965                         }
 966                         *parentMatch8 = match;
 967                     }
 968                     *parentMatch7 = match;
 969                 }
 970                 if (match.hit)
 971                 {
 972                     *parentMatch6 = match;
 973                 }
 974                 else
 975                 {
 976                     lexer.SetPos(save);
 977                 }
 978             }
 979             *parentMatch5 = match;
 980         }
 981         *parentMatch0 = match;
 982     }
 983     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
 984 
 985 
 986 
 987 
 988 
 989     #endif // SOULNG_PARSER_DEBUG_SUPPORT
 990     if (!match.hit)
 991     {
 992         match.value = nullptr;
 993     }
 994     return match;
 995 }
 996 
 997 soulng::parser::Match XmlParser::XMLDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
 998 {
 999     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1000 
1001 
1002 
1003 
1004 
1005 
1006 
1007     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1008     soulng::parser::Match match(false);
1009     soulng::parser::Match* parentMatch0 = &match;
1010     {
1011         soulng::parser::Match match(false);
1012         soulng::parser::Match* parentMatch1 = &match;
1013         {
1014             soulng::parser::Match match(false);
1015             soulng::parser::Match* parentMatch2 = &match;
1016             {
1017                 soulng::parser::Match match(false);
1018                 soulng::parser::Match* parentMatch3 = &match;
1019                 {
1020                     soulng::parser::Match match(false);
1021                     soulng::parser::Match* parentMatch4 = &match;
1022                     {
1023                         soulng::parser::Match match(true);
1024                         for (int i : s4)
1025                         {
1026                             if (*lexer == i)
1027                             {
1028                                 ++lexer;
1029                             }
1030                             else
1031                             {
1032                                 match.hit = false;
1033                                 break;
1034                             }
1035                         }
1036                         *parentMatch4 = match;
1037                     }
1038                     if (match.hit)
1039                     {
1040                         soulng::parser::Match match(false);
1041                         soulng::parser::Match* parentMatch5 = &match;
1042                         {
1043                             soulng::parser::Match match = XmlParser::VersionInfo(lexerprocessor);
1044                             *parentMatch5 = match;
1045                         }
1046                         *parentMatch4 = match;
1047                     }
1048                     *parentMatch3 = match;
1049                 }
1050                 if (match.hit)
1051                 {
1052                     soulng::parser::Match match(false);
1053                     soulng::parser::Match* parentMatch6 = &match;
1054                     {
1055                         soulng::parser::Match match(true);
1056                         int64_t save = lexer.GetPos();
1057                         soulng::parser::Match* parentMatch7 = &match;
1058                         {
1059                             soulng::parser::Match match = XmlParser::EncodingDecl(lexerprocessor);
1060                             if (match.hit)
1061                             {
1062                                 *parentMatch7 = match;
1063                             }
1064                             else
1065                             {
1066                                 lexer.SetPos(save);
1067                             }
1068                         }
1069                         *parentMatch6 = match;
1070                     }
1071                     *parentMatch3 = match;
1072                 }
1073                 *parentMatch2 = match;
1074             }
1075             if (match.hit)
1076             {
1077                 soulng::parser::Match match(false);
1078                 soulng::parser::Match* parentMatch8 = &match;
1079                 {
1080                     soulng::parser::Match match(true);
1081                     int64_t save = lexer.GetPos();
1082                     soulng::parser::Match* parentMatch9 = &match;
1083                     {
1084                         soulng::parser::Match match = XmlParser::SDDecl(lexerprocessor);
1085                         if (match.hit)
1086                         {
1087                             *parentMatch9 = match;
1088                         }
1089                         else
1090                         {
1091                             lexer.SetPos(save);
1092                         }
1093                     }
1094                     *parentMatch8 = match;
1095                 }
1096                 *parentMatch2 = match;
1097             }
1098             *parentMatch1 = match;
1099         }
1100         if (match.hit)
1101         {
1102             soulng::parser::Match match(false);
1103             soulng::parser::Match* parentMatch10 = &match;
1104             {
1105                 soulng::parser::Match match(true);
1106                 int64_t save = lexer.GetPos();
1107                 soulng::parser::Match* parentMatch11 = &match;
1108                 {
1109                     soulng::parser::Match match = XmlParser::S(lexer);
1110                     if (match.hit)
1111                     {
1112                         *parentMatch11 = match;
1113                     }
1114                     else
1115                     {
1116                         lexer.SetPos(save);
1117                     }
1118                 }
1119                 *parentMatch10 = match;
1120             }
1121             *parentMatch1 = match;
1122         }
1123         *parentMatch0 = match;
1124     }
1125     if (match.hit)
1126     {
1127         soulng::parser::Match match(false);
1128         soulng::parser::Match* parentMatch12 = &match;
1129         {
1130             soulng::parser::Match match(true);
1131             for (int i : s5)
1132             {
1133                 if (*lexer == i)
1134                 {
1135                     ++lexer;
1136                 }
1137                 else
1138                 {
1139                     match.hit = false;
1140                     break;
1141                 }
1142             }
1143             *parentMatch12 = match;
1144         }
1145         *parentMatch0 = match;
1146     }
1147     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1148 
1149 
1150 
1151 
1152 
1153     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1154     if (!match.hit)
1155     {
1156         match.value = nullptr;
1157     }
1158     return match;
1159 }
1160 
1161 soulng::parser::Match XmlParser::VersionInfo(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1162 {
1163     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1164 
1165 
1166 
1167 
1168 
1169 
1170 
1171     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1172     soulng::parser::Match match(false);
1173     soulng::parser::Match* parentMatch0 = &match;
1174     {
1175         soulng::parser::Match match(false);
1176         soulng::parser::Match* parentMatch1 = &match;
1177         {
1178             soulng::parser::Match match(false);
1179             soulng::parser::Match* parentMatch2 = &match;
1180             {
1181                 soulng::parser::Match match = XmlParser::S(lexer);
1182                 *parentMatch2 = match;
1183             }
1184             if (match.hit)
1185             {
1186                 soulng::parser::Match match(false);
1187                 soulng::parser::Match* parentMatch3 = &match;
1188                 {
1189                     soulng::parser::Match match(true);
1190                     for (int i : s6)
1191                     {
1192                         if (*lexer == i)
1193                         {
1194                             ++lexer;
1195                         }
1196                         else
1197                         {
1198                             match.hit = false;
1199                             break;
1200                         }
1201                     }
1202                     *parentMatch3 = match;
1203                 }
1204                 *parentMatch2 = match;
1205             }
1206             *parentMatch1 = match;
1207         }
1208         if (match.hit)
1209         {
1210             soulng::parser::Match match(false);
1211             soulng::parser::Match* parentMatch4 = &match;
1212             {
1213                 soulng::parser::Match match = XmlParser::Eq(lexer);
1214                 *parentMatch4 = match;
1215             }
1216             *parentMatch1 = match;
1217         }
1218         *parentMatch0 = match;
1219     }
1220     if (match.hit)
1221     {
1222         soulng::parser::Match match(false);
1223         soulng::parser::Match* parentMatch5 = &match;
1224         {
1225             soulng::parser::Match match = XmlParser::VersionNumber(lexerprocessor);
1226             *parentMatch5 = match;
1227         }
1228         *parentMatch0 = match;
1229     }
1230     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1231 
1232 
1233 
1234 
1235 
1236     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1237     if (!match.hit)
1238     {
1239         match.value = nullptr;
1240     }
1241     return match;
1242 }
1243 
1244 soulng::parser::Match XmlParser::VersionNum(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1245 {
1246     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1247 
1248 
1249 
1250 
1251 
1252 
1253 
1254     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1255     Span s = Span();
1256     soulng::parser::Match match(false);
1257     soulng::parser::Match* parentMatch0 = &match;
1258     {
1259         int64_t pos = lexer.GetPos();
1260         soulng::parser::Match match(false);
1261         soulng::parser::Match* parentMatch1 = &match;
1262         {
1263             soulng::parser::Match match(false);
1264             soulng::parser::Match* parentMatch2 = &match;
1265             {
1266                 soulng::parser::Match match(false);
1267                 soulng::parser::Match* parentMatch3 = &match;
1268                 {
1269                     soulng::parser::Match match(false);
1270                     soulng::parser::Match* parentMatch4 = &match;
1271                     {
1272                         int64_t pos = lexer.GetPos();
1273                         soulng::lexer::Span span = lexer.GetSpan();
1274                         soulng::parser::Match match(false);
1275                         if (*lexer == 49)
1276                         {
1277                             ++lexer;
1278                             match.hit = true;
1279                         }
1280                         if (match.hit)
1281                         {
1282                             s = span;
1283                         }
1284                         *parentMatch4 = match;
1285                     }
1286                     *parentMatch3 = match;
1287                 }
1288                 if (match.hit)
1289                 {
1290                     soulng::parser::Match match(false);
1291                     soulng::parser::Match* parentMatch5 = &match;
1292                     {
1293                         soulng::parser::Match match(false);
1294                         if (*lexer == 46)
1295                         {
1296                             ++lexer;
1297                             match.hit = true;
1298                         }
1299                         *parentMatch5 = match;
1300                     }
1301                     *parentMatch3 = match;
1302                 }
1303                 *parentMatch2 = match;
1304             }
1305             if (match.hit)
1306             {
1307                 soulng::parser::Match match(false);
1308                 soulng::parser::Match* parentMatch6 = &match;
1309                 {
1310                     soulng::parser::Match match(false);
1311                     soulng::parser::Match* parentMatch7 = &match;
1312                     {
1313                         soulng::parser::Match match(false);
1314                         soulng::parser::Match* parentMatch8 = &match;
1315                         {
1316                             soulng::parser::Match match(false);
1317                             soulng::parser::Match* parentMatch9 = &match;
1318                             {
1319                                 int64_t pos = lexer.GetPos();
1320                                 soulng::lexer::Span span = lexer.GetSpan();
1321                                 soulng::parser::Match match(false);
1322                                 for (const soulng::parser::Range& range : s7)
1323                                 {
1324                                     if (*lexer >= range.first && *lexer <= range.last)
1325                                     {
1326                                         match.hit = true;
1327                                         ++lexer;
1328                                         break;
1329                                     }
1330                                 }
1331                                 if (match.hit)
1332                                 {
1333                                     s.end = span.end;
1334                                 }
1335                                 *parentMatch9 = match;
1336                             }
1337                             *parentMatch8 = match;
1338                         }
1339                         *parentMatch7 = match;
1340                     }
1341                     if (match.hit)
1342                     {
1343                         soulng::parser::Match match(true);
1344                         soulng::parser::Match* parentMatch10 = &match;
1345                         while (true)
1346                         {
1347                             int64_t save = lexer.GetPos();
1348                             {
1349                                 soulng::parser::Match match(false);
1350                                 soulng::parser::Match* parentMatch11 = &match;
1351                                 {
1352                                     soulng::parser::Match match(false);
1353                                     soulng::parser::Match* parentMatch12 = &match;
1354                                     {
1355                                         int64_t pos = lexer.GetPos();
1356                                         soulng::lexer::Span span = lexer.GetSpan();
1357                                         soulng::parser::Match match(false);
1358                                         for (const soulng::parser::Range& range : s7)
1359                                         {
1360                                             if (*lexer >= range.first && *lexer <= range.last)
1361                                             {
1362                                                 match.hit = true;
1363                                                 ++lexer;
1364                                                 break;
1365                                             }
1366                                         }
1367                                         if (match.hit)
1368                                         {
1369                                             s.end = span.end;
1370                                         }
1371                                         *parentMatch12 = match;
1372                                     }
1373                                     *parentMatch11 = match;
1374                                 }
1375                                 if (match.hit)
1376                                 {
1377                                     *parentMatch10 = match;
1378                                 }
1379                                 else
1380                                 {
1381                                     lexer.SetPos(save);
1382                                     break;
1383                                 }
1384                             }
1385                         }
1386                     }
1387                     *parentMatch6 = match;
1388                 }
1389                 *parentMatch2 = match;
1390             }
1391             *parentMatch1 = match;
1392         }
1393         if (match.hit)
1394         {
1395             processor->Version(lexer.GetMatch(s));
1396         }
1397         *parentMatch0 = match;
1398     }
1399     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1400 
1401 
1402 
1403 
1404 
1405     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1406     if (!match.hit)
1407     {
1408         match.value = nullptr;
1409     }
1410     return match;
1411 }
1412 
1413 soulng::parser::Match XmlParser::VersionNumDQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1414 {
1415     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1416 
1417 
1418 
1419 
1420 
1421 
1422 
1423     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1424     soulng::parser::Match match(false);
1425     soulng::parser::Match* parentMatch0 = &match;
1426     {
1427         soulng::parser::Match match(false);
1428         soulng::parser::Match* parentMatch1 = &match;
1429         {
1430             soulng::parser::Match match(false);
1431             if (*lexer == 34)
1432             {
1433                 ++lexer;
1434                 match.hit = true;
1435             }
1436             *parentMatch1 = match;
1437         }
1438         if (match.hit)
1439         {
1440             soulng::parser::Match match(false);
1441             soulng::parser::Match* parentMatch2 = &match;
1442             {
1443                 soulng::parser::Match match = XmlParser::VersionNum(lexerprocessor);
1444                 *parentMatch2 = match;
1445             }
1446             *parentMatch1 = match;
1447         }
1448         *parentMatch0 = match;
1449     }
1450     if (match.hit)
1451     {
1452         soulng::parser::Match match(false);
1453         soulng::parser::Match* parentMatch3 = &match;
1454         {
1455             soulng::parser::Match match(false);
1456             if (*lexer == 34)
1457             {
1458                 ++lexer;
1459                 match.hit = true;
1460             }
1461             *parentMatch3 = match;
1462         }
1463         *parentMatch0 = match;
1464     }
1465     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1466 
1467 
1468 
1469 
1470 
1471     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1472     if (!match.hit)
1473     {
1474         match.value = nullptr;
1475     }
1476     return match;
1477 }
1478 
1479 soulng::parser::Match XmlParser::VersionNumSQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1480 {
1481     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1482 
1483 
1484 
1485 
1486 
1487 
1488 
1489     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1490     soulng::parser::Match match(false);
1491     soulng::parser::Match* parentMatch0 = &match;
1492     {
1493         soulng::parser::Match match(false);
1494         soulng::parser::Match* parentMatch1 = &match;
1495         {
1496             soulng::parser::Match match(false);
1497             if (*lexer == 39)
1498             {
1499                 ++lexer;
1500                 match.hit = true;
1501             }
1502             *parentMatch1 = match;
1503         }
1504         if (match.hit)
1505         {
1506             soulng::parser::Match match(false);
1507             soulng::parser::Match* parentMatch2 = &match;
1508             {
1509                 soulng::parser::Match match = XmlParser::VersionNum(lexerprocessor);
1510                 *parentMatch2 = match;
1511             }
1512             *parentMatch1 = match;
1513         }
1514         *parentMatch0 = match;
1515     }
1516     if (match.hit)
1517     {
1518         soulng::parser::Match match(false);
1519         soulng::parser::Match* parentMatch3 = &match;
1520         {
1521             soulng::parser::Match match(false);
1522             if (*lexer == 39)
1523             {
1524                 ++lexer;
1525                 match.hit = true;
1526             }
1527             *parentMatch3 = match;
1528         }
1529         *parentMatch0 = match;
1530     }
1531     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1532 
1533 
1534 
1535 
1536 
1537     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1538     if (!match.hit)
1539     {
1540         match.value = nullptr;
1541     }
1542     return match;
1543 }
1544 
1545 soulng::parser::Match XmlParser::VersionNumber(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1546 {
1547     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1548 
1549 
1550 
1551 
1552 
1553 
1554 
1555     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1556     soulng::parser::Match match(false);
1557     soulng::parser::Match* parentMatch0 = &match;
1558     {
1559         int64_t save = lexer.GetPos();
1560         soulng::parser::Match match = XmlParser::VersionNumDQ(lexerprocessor);
1561         *parentMatch0 = match;
1562         if (!match.hit)
1563         {
1564             soulng::parser::Match match(false);
1565             soulng::parser::Match* parentMatch1 = &match;
1566             lexer.SetPos(save);
1567             {
1568                 soulng::parser::Match match = XmlParser::VersionNumSQ(lexerprocessor);
1569                 *parentMatch1 = match;
1570             }
1571             *parentMatch0 = match;
1572         }
1573     }
1574     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1575 
1576 
1577 
1578 
1579 
1580     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1581     if (!match.hit)
1582     {
1583         match.value = nullptr;
1584     }
1585     return match;
1586 }
1587 
1588 soulng::parser::Match XmlParser::EncodingDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1589 {
1590     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1591 
1592 
1593 
1594 
1595 
1596 
1597 
1598     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1599     soulng::parser::Match match(false);
1600     soulng::parser::Match* parentMatch0 = &match;
1601     {
1602         soulng::parser::Match match(false);
1603         soulng::parser::Match* parentMatch1 = &match;
1604         {
1605             soulng::parser::Match match(false);
1606             soulng::parser::Match* parentMatch2 = &match;
1607             {
1608                 soulng::parser::Match match = XmlParser::S(lexer);
1609                 *parentMatch2 = match;
1610             }
1611             if (match.hit)
1612             {
1613                 soulng::parser::Match match(false);
1614                 soulng::parser::Match* parentMatch3 = &match;
1615                 {
1616                     soulng::parser::Match match(true);
1617                     for (int i : s8)
1618                     {
1619                         if (*lexer == i)
1620                         {
1621                             ++lexer;
1622                         }
1623                         else
1624                         {
1625                             match.hit = false;
1626                             break;
1627                         }
1628                     }
1629                     *parentMatch3 = match;
1630                 }
1631                 *parentMatch2 = match;
1632             }
1633             *parentMatch1 = match;
1634         }
1635         if (match.hit)
1636         {
1637             soulng::parser::Match match(false);
1638             soulng::parser::Match* parentMatch4 = &match;
1639             {
1640                 soulng::parser::Match match = XmlParser::Eq(lexer);
1641                 *parentMatch4 = match;
1642             }
1643             *parentMatch1 = match;
1644         }
1645         *parentMatch0 = match;
1646     }
1647     if (match.hit)
1648     {
1649         soulng::parser::Match match(false);
1650         soulng::parser::Match* parentMatch5 = &match;
1651         {
1652             soulng::parser::Match match = XmlParser::EncName(lexerprocessor);
1653             *parentMatch5 = match;
1654         }
1655         *parentMatch0 = match;
1656     }
1657     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1658 
1659 
1660 
1661 
1662 
1663     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1664     if (!match.hit)
1665     {
1666         match.value = nullptr;
1667     }
1668     return match;
1669 }
1670 
1671 soulng::parser::Match XmlParser::EncodingName(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1672 {
1673     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1674 
1675 
1676 
1677 
1678 
1679 
1680 
1681     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1682     Span s = Span();
1683     soulng::parser::Match match(false);
1684     soulng::parser::Match* parentMatch0 = &match;
1685     {
1686         int64_t pos = lexer.GetPos();
1687         soulng::parser::Match match(false);
1688         soulng::parser::Match* parentMatch1 = &match;
1689         {
1690             soulng::parser::Match match(false);
1691             soulng::parser::Match* parentMatch2 = &match;
1692             {
1693                 soulng::parser::Match match(false);
1694                 soulng::parser::Match* parentMatch3 = &match;
1695                 {
1696                     int64_t pos = lexer.GetPos();
1697                     soulng::lexer::Span span = lexer.GetSpan();
1698                     soulng::parser::Match match(false);
1699                     for (const soulng::parser::Range& range : s9)
1700                     {
1701                         if (*lexer >= range.first && *lexer <= range.last)
1702                         {
1703                             match.hit = true;
1704                             ++lexer;
1705                             break;
1706                         }
1707                     }
1708                     if (match.hit)
1709                     {
1710                         s = span;
1711                     }
1712                     *parentMatch3 = match;
1713                 }
1714                 *parentMatch2 = match;
1715             }
1716             if (match.hit)
1717             {
1718                 soulng::parser::Match match(false);
1719                 soulng::parser::Match* parentMatch4 = &match;
1720                 {
1721                     soulng::parser::Match match(true);
1722                     soulng::parser::Match* parentMatch5 = &match;
1723                     {
1724                         while (true)
1725                         {
1726                             int64_t save = lexer.GetPos();
1727                             {
1728                                 soulng::parser::Match match(false);
1729                                 soulng::parser::Match* parentMatch6 = &match;
1730                                 {
1731                                     soulng::parser::Match match(false);
1732                                     soulng::parser::Match* parentMatch7 = &match;
1733                                     {
1734                                         int64_t pos = lexer.GetPos();
1735                                         soulng::lexer::Span span = lexer.GetSpan();
1736                                         soulng::parser::Match match(false);
1737                                         for (const soulng::parser::Range& range : s10)
1738                                         {
1739                                             if (*lexer >= range.first && *lexer <= range.last)
1740                                             {
1741                                                 match.hit = true;
1742                                                 ++lexer;
1743                                                 break;
1744                                             }
1745                                         }
1746                                         if (match.hit)
1747                                         {
1748                                             s.end = span.end;
1749                                         }
1750                                         *parentMatch7 = match;
1751                                     }
1752                                     *parentMatch6 = match;
1753                                 }
1754                                 if (match.hit)
1755                                 {
1756                                     *parentMatch5 = match;
1757                                 }
1758                                 else
1759                                 {
1760                                     lexer.SetPos(save);
1761                                     break;
1762                                 }
1763                             }
1764                         }
1765                     }
1766                     *parentMatch4 = match;
1767                 }
1768                 *parentMatch2 = match;
1769             }
1770             *parentMatch1 = match;
1771         }
1772         if (match.hit)
1773         {
1774             processor->Encoding(lexer.GetMatch(s));
1775         }
1776         *parentMatch0 = match;
1777     }
1778     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1779 
1780 
1781 
1782 
1783 
1784     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1785     if (!match.hit)
1786     {
1787         match.value = nullptr;
1788     }
1789     return match;
1790 }
1791 
1792 soulng::parser::Match XmlParser::EncNameDQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1793 {
1794     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1795 
1796 
1797 
1798 
1799 
1800 
1801 
1802     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1803     soulng::parser::Match match(false);
1804     soulng::parser::Match* parentMatch0 = &match;
1805     {
1806         soulng::parser::Match match(false);
1807         soulng::parser::Match* parentMatch1 = &match;
1808         {
1809             soulng::parser::Match match(false);
1810             if (*lexer == 34)
1811             {
1812                 ++lexer;
1813                 match.hit = true;
1814             }
1815             *parentMatch1 = match;
1816         }
1817         if (match.hit)
1818         {
1819             soulng::parser::Match match(false);
1820             soulng::parser::Match* parentMatch2 = &match;
1821             {
1822                 soulng::parser::Match match = XmlParser::EncodingName(lexerprocessor);
1823                 *parentMatch2 = match;
1824             }
1825             *parentMatch1 = match;
1826         }
1827         *parentMatch0 = match;
1828     }
1829     if (match.hit)
1830     {
1831         soulng::parser::Match match(false);
1832         soulng::parser::Match* parentMatch3 = &match;
1833         {
1834             soulng::parser::Match match(false);
1835             if (*lexer == 34)
1836             {
1837                 ++lexer;
1838                 match.hit = true;
1839             }
1840             *parentMatch3 = match;
1841         }
1842         *parentMatch0 = match;
1843     }
1844     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1845 
1846 
1847 
1848 
1849 
1850     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1851     if (!match.hit)
1852     {
1853         match.value = nullptr;
1854     }
1855     return match;
1856 }
1857 
1858 soulng::parser::Match XmlParser::EncNameSQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1859 {
1860     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1861 
1862 
1863 
1864 
1865 
1866 
1867 
1868     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1869     soulng::parser::Match match(false);
1870     soulng::parser::Match* parentMatch0 = &match;
1871     {
1872         soulng::parser::Match match(false);
1873         soulng::parser::Match* parentMatch1 = &match;
1874         {
1875             soulng::parser::Match match(false);
1876             if (*lexer == 39)
1877             {
1878                 ++lexer;
1879                 match.hit = true;
1880             }
1881             *parentMatch1 = match;
1882         }
1883         if (match.hit)
1884         {
1885             soulng::parser::Match match(false);
1886             soulng::parser::Match* parentMatch2 = &match;
1887             {
1888                 soulng::parser::Match match = XmlParser::EncodingName(lexerprocessor);
1889                 *parentMatch2 = match;
1890             }
1891             *parentMatch1 = match;
1892         }
1893         *parentMatch0 = match;
1894     }
1895     if (match.hit)
1896     {
1897         soulng::parser::Match match(false);
1898         soulng::parser::Match* parentMatch3 = &match;
1899         {
1900             soulng::parser::Match match(false);
1901             if (*lexer == 39)
1902             {
1903                 ++lexer;
1904                 match.hit = true;
1905             }
1906             *parentMatch3 = match;
1907         }
1908         *parentMatch0 = match;
1909     }
1910     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1911 
1912 
1913 
1914 
1915 
1916     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1917     if (!match.hit)
1918     {
1919         match.value = nullptr;
1920     }
1921     return match;
1922 }
1923 
1924 soulng::parser::Match XmlParser::EncName(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1925 {
1926     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1927 
1928 
1929 
1930 
1931 
1932 
1933 
1934     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1935     soulng::parser::Match match(false);
1936     soulng::parser::Match* parentMatch0 = &match;
1937     {
1938         int64_t save = lexer.GetPos();
1939         soulng::parser::Match match = XmlParser::EncNameDQ(lexerprocessor);
1940         *parentMatch0 = match;
1941         if (!match.hit)
1942         {
1943             soulng::parser::Match match(false);
1944             soulng::parser::Match* parentMatch1 = &match;
1945             lexer.SetPos(save);
1946             {
1947                 soulng::parser::Match match = XmlParser::EncNameSQ(lexerprocessor);
1948                 *parentMatch1 = match;
1949             }
1950             *parentMatch0 = match;
1951         }
1952     }
1953     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1954 
1955 
1956 
1957 
1958 
1959     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1960     if (!match.hit)
1961     {
1962         match.value = nullptr;
1963     }
1964     return match;
1965 }
1966 
1967 soulng::parser::Match XmlParser::SDDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
1968 {
1969     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
1970 
1971 
1972 
1973 
1974 
1975 
1976 
1977     #endif // SOULNG_PARSER_DEBUG_SUPPORT
1978     std::unique_ptr<soulng::parser::soulng::parser::Value<bool>>yn;
1979     soulng::parser::Match match(false);
1980     soulng::parser::Match* parentMatch0 = &match;
1981     {
1982         soulng::parser::Match match(false);
1983         soulng::parser::Match* parentMatch1 = &match;
1984         {
1985             soulng::parser::Match match(false);
1986             soulng::parser::Match* parentMatch2 = &match;
1987             {
1988                 soulng::parser::Match match = XmlParser::S(lexer);
1989                 *parentMatch2 = match;
1990             }
1991             if (match.hit)
1992             {
1993                 soulng::parser::Match match(false);
1994                 soulng::parser::Match* parentMatch3 = &match;
1995                 {
1996                     soulng::parser::Match match(true);
1997                     for (int i : s11)
1998                     {
1999                         if (*lexer == i)
2000                         {
2001                             ++lexer;
2002                         }
2003                         else
2004                         {
2005                             match.hit = false;
2006                             break;
2007                         }
2008                     }
2009                     *parentMatch3 = match;
2010                 }
2011                 *parentMatch2 = match;
2012             }
2013             *parentMatch1 = match;
2014         }
2015         if (match.hit)
2016         {
2017             soulng::parser::Match match(false);
2018             soulng::parser::Match* parentMatch4 = &match;
2019             {
2020                 soulng::parser::Match match = XmlParser::Eq(lexer);
2021                 *parentMatch4 = match;
2022             }
2023             *parentMatch1 = match;
2024         }
2025         *parentMatch0 = match;
2026     }
2027     if (match.hit)
2028     {
2029         soulng::parser::Match match(false);
2030         soulng::parser::Match* parentMatch5 = &match;
2031         {
2032             soulng::parser::Match match(false);
2033             soulng::parser::Match* parentMatch6 = &match;
2034             {
2035                 int64_t pos = lexer.GetPos();
2036                 soulng::parser::Match match = XmlParser::YesNo(lexer);
2037                 yn.reset(static_cast<soulng::parser::soulng::parser::Value<bool>*>(match.value));
2038                 if (match.hit)
2039                 {
2040                     processor->Standalone(yn->value);
2041                 }
2042                 *parentMatch6 = match;
2043             }
2044             *parentMatch5 = match;
2045         }
2046         *parentMatch0 = match;
2047     }
2048     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2049 
2050 
2051 
2052 
2053 
2054     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2055     if (!match.hit)
2056     {
2057         match.value = nullptr;
2058     }
2059     return match;
2060 }
2061 
2062 soulng::parser::Match XmlParser::DocTypeDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
2063 {
2064     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2065 
2066 
2067 
2068 
2069 
2070 
2071 
2072     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2073     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>rootElementName;
2074     soulng::parser::Match match(false);
2075     soulng::parser::Match* parentMatch0 = &match;
2076     {
2077         soulng::parser::Match match(false);
2078         soulng::parser::Match* parentMatch1 = &match;
2079         {
2080             soulng::parser::Match match(false);
2081             soulng::parser::Match* parentMatch2 = &match;
2082             {
2083                 soulng::parser::Match match(false);
2084                 soulng::parser::Match* parentMatch3 = &match;
2085                 {
2086                     soulng::parser::Match match(false);
2087                     soulng::parser::Match* parentMatch4 = &match;
2088                     {
2089                         soulng::parser::Match match(false);
2090                         soulng::parser::Match* parentMatch5 = &match;
2091                         {
2092                             soulng::parser::Match match(true);
2093                             for (int i : s12)
2094                             {
2095                                 if (*lexer == i)
2096                                 {
2097                                     ++lexer;
2098                                 }
2099                                 else
2100                                 {
2101                                     match.hit = false;
2102                                     break;
2103                                 }
2104                             }
2105                             *parentMatch5 = match;
2106                         }
2107                         if (match.hit)
2108                         {
2109                             soulng::parser::Match match(false);
2110                             soulng::parser::Match* parentMatch6 = &match;
2111                             {
2112                                 soulng::parser::Match match = XmlParser::S(lexer);
2113                                 *parentMatch6 = match;
2114                             }
2115                             *parentMatch5 = match;
2116                         }
2117                         *parentMatch4 = match;
2118                     }
2119                     if (match.hit)
2120                     {
2121                         soulng::parser::Match match(false);
2122                         soulng::parser::Match* parentMatch7 = &match;
2123                         {
2124                             soulng::parser::Match match = XmlParser::Name(lexer);
2125                             rootElementName.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
2126                             *parentMatch7 = match;
2127                         }
2128                         *parentMatch4 = match;
2129                     }
2130                     *parentMatch3 = match;
2131                 }
2132                 if (match.hit)
2133                 {
2134                     soulng::parser::Match match(false);
2135                     soulng::parser::Match* parentMatch8 = &match;
2136                     {
2137                         soulng::parser::Match match(true);
2138                         int64_t save = lexer.GetPos();
2139                         soulng::parser::Match* parentMatch9 = &match;
2140                         {
2141                             soulng::parser::Match match(false);
2142                             soulng::parser::Match* parentMatch10 = &match;
2143                             {
2144                                 soulng::parser::Match match(false);
2145                                 soulng::parser::Match* parentMatch11 = &match;
2146                                 {
2147                                     soulng::parser::Match match = XmlParser::S(lexer);
2148                                     *parentMatch11 = match;
2149                                 }
2150                                 if (match.hit)
2151                                 {
2152                                     soulng::parser::Match match(false);
2153                                     soulng::parser::Match* parentMatch12 = &match;
2154                                     {
2155                                         soulng::parser::Match match = XmlParser::ExternalID(lexer);
2156                                         *parentMatch12 = match;
2157                                     }
2158                                     *parentMatch11 = match;
2159                                 }
2160                                 *parentMatch10 = match;
2161                             }
2162                             if (match.hit)
2163                             {
2164                                 *parentMatch9 = match;
2165                             }
2166                             else
2167                             {
2168                                 lexer.SetPos(save);
2169                             }
2170                         }
2171                         *parentMatch8 = match;
2172                     }
2173                     *parentMatch3 = match;
2174                 }
2175                 *parentMatch2 = match;
2176             }
2177             if (match.hit)
2178             {
2179                 soulng::parser::Match match(false);
2180                 soulng::parser::Match* parentMatch13 = &match;
2181                 {
2182                     soulng::parser::Match match(true);
2183                     int64_t save = lexer.GetPos();
2184                     soulng::parser::Match* parentMatch14 = &match;
2185                     {
2186                         soulng::parser::Match match = XmlParser::S(lexer);
2187                         if (match.hit)
2188                         {
2189                             *parentMatch14 = match;
2190                         }
2191                         else
2192                         {
2193                             lexer.SetPos(save);
2194                         }
2195                     }
2196                     *parentMatch13 = match;
2197                 }
2198                 *parentMatch2 = match;
2199             }
2200             *parentMatch1 = match;
2201         }
2202         if (match.hit)
2203         {
2204             soulng::parser::Match match(false);
2205             soulng::parser::Match* parentMatch15 = &match;
2206             {
2207                 soulng::parser::Match match(true);
2208                 int64_t save = lexer.GetPos();
2209                 soulng::parser::Match* parentMatch16 = &match;
2210                 {
2211                     soulng::parser::Match match(false);
2212                     soulng::parser::Match* parentMatch17 = &match;
2213                     {
2214                         soulng::parser::Match match(false);
2215                         soulng::parser::Match* parentMatch18 = &match;
2216                         {
2217                             soulng::parser::Match match(false);
2218                             soulng::parser::Match* parentMatch19 = &match;
2219                             {
2220                                 soulng::parser::Match match(false);
2221                                 soulng::parser::Match* parentMatch20 = &match;
2222                                 {
2223                                     soulng::parser::Match match(false);
2224                                     if (*lexer == 91)
2225                                     {
2226                                         ++lexer;
2227                                         match.hit = true;
2228                                     }
2229                                     *parentMatch20 = match;
2230                                 }
2231                                 if (match.hit)
2232                                 {
2233                                     soulng::parser::Match match(false);
2234                                     soulng::parser::Match* parentMatch21 = &match;
2235                                     {
2236                                         soulng::parser::Match match = XmlParser::IntSubset(lexerprocessor);
2237                                         *parentMatch21 = match;
2238                                     }
2239                                     *parentMatch20 = match;
2240                                 }
2241                                 *parentMatch19 = match;
2242                             }
2243                             if (match.hit)
2244                             {
2245                                 soulng::parser::Match match(false);
2246                                 soulng::parser::Match* parentMatch22 = &match;
2247                                 {
2248                                     soulng::parser::Match match(false);
2249                                     if (*lexer == 93)
2250                                     {
2251                                         ++lexer;
2252                                         match.hit = true;
2253                                     }
2254                                     *parentMatch22 = match;
2255                                 }
2256                                 *parentMatch19 = match;
2257                             }
2258                             *parentMatch18 = match;
2259                         }
2260                         if (match.hit)
2261                         {
2262                             soulng::parser::Match match(false);
2263                             soulng::parser::Match* parentMatch23 = &match;
2264                             {
2265                                 soulng::parser::Match match(true);
2266                                 int64_t save = lexer.GetPos();
2267                                 soulng::parser::Match* parentMatch24 = &match;
2268                                 {
2269                                     soulng::parser::Match match = XmlParser::S(lexer);
2270                                     if (match.hit)
2271                                     {
2272                                         *parentMatch24 = match;
2273                                     }
2274                                     else
2275                                     {
2276                                         lexer.SetPos(save);
2277                                     }
2278                                 }
2279                                 *parentMatch23 = match;
2280                             }
2281                             *parentMatch18 = match;
2282                         }
2283                         *parentMatch17 = match;
2284                     }
2285                     if (match.hit)
2286                     {
2287                         *parentMatch16 = match;
2288                     }
2289                     else
2290                     {
2291                         lexer.SetPos(save);
2292                     }
2293                 }
2294                 *parentMatch15 = match;
2295             }
2296             *parentMatch1 = match;
2297         }
2298         *parentMatch0 = match;
2299     }
2300     if (match.hit)
2301     {
2302         soulng::parser::Match match(false);
2303         soulng::parser::Match* parentMatch25 = &match;
2304         {
2305             soulng::parser::Match match(false);
2306             if (*lexer == 62)
2307             {
2308                 ++lexer;
2309                 match.hit = true;
2310             }
2311             *parentMatch25 = match;
2312         }
2313         *parentMatch0 = match;
2314     }
2315     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2316 
2317 
2318 
2319 
2320 
2321     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2322     if (!match.hit)
2323     {
2324         match.value = nullptr;
2325     }
2326     return match;
2327 }
2328 
2329 soulng::parser::Match XmlParser::ExternalID(TrivialLexer& lexer)
2330 {
2331     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2332 
2333 
2334 
2335 
2336 
2337 
2338 
2339     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2340     soulng::parser::Match match(false);
2341     soulng::parser::Match* parentMatch0 = &match;
2342     {
2343         int64_t save = lexer.GetPos();
2344         soulng::parser::Match match(false);
2345         soulng::parser::Match* parentMatch1 = &match;
2346         {
2347             soulng::parser::Match match(false);
2348             soulng::parser::Match* parentMatch2 = &match;
2349             {
2350                 soulng::parser::Match match(false);
2351                 soulng::parser::Match* parentMatch3 = &match;
2352                 {
2353                     soulng::parser::Match match(true);
2354                     for (int i : s13)
2355                     {
2356                         if (*lexer == i)
2357                         {
2358                             ++lexer;
2359                         }
2360                         else
2361                         {
2362                             match.hit = false;
2363                             break;
2364                         }
2365                     }
2366                     *parentMatch3 = match;
2367                 }
2368                 if (match.hit)
2369                 {
2370                     soulng::parser::Match match(false);
2371                     soulng::parser::Match* parentMatch4 = &match;
2372                     {
2373                         soulng::parser::Match match = XmlParser::S(lexer);
2374                         *parentMatch4 = match;
2375                     }
2376                     *parentMatch3 = match;
2377                 }
2378                 *parentMatch2 = match;
2379             }
2380             if (match.hit)
2381             {
2382                 soulng::parser::Match match(false);
2383                 soulng::parser::Match* parentMatch5 = &match;
2384                 {
2385                     soulng::parser::Match match = XmlParser::SystemLiteral(lexer);
2386                     *parentMatch5 = match;
2387                 }
2388                 *parentMatch2 = match;
2389             }
2390             *parentMatch1 = match;
2391         }
2392         *parentMatch0 = match;
2393         if (!match.hit)
2394         {
2395             soulng::parser::Match match(false);
2396             soulng::parser::Match* parentMatch6 = &match;
2397             lexer.SetPos(save);
2398             {
2399                 soulng::parser::Match match(false);
2400                 soulng::parser::Match* parentMatch7 = &match;
2401                 {
2402                     soulng::parser::Match match(false);
2403                     soulng::parser::Match* parentMatch8 = &match;
2404                     {
2405                         soulng::parser::Match match(false);
2406                         soulng::parser::Match* parentMatch9 = &match;
2407                         {
2408                             soulng::parser::Match match(false);
2409                             soulng::parser::Match* parentMatch10 = &match;
2410                             {
2411                                 soulng::parser::Match match(false);
2412                                 soulng::parser::Match* parentMatch11 = &match;
2413                                 {
2414                                     soulng::parser::Match match(true);
2415                                     for (int i : s14)
2416                                     {
2417                                         if (*lexer == i)
2418                                         {
2419                                             ++lexer;
2420                                         }
2421                                         else
2422                                         {
2423                                             match.hit = false;
2424                                             break;
2425                                         }
2426                                     }
2427                                     *parentMatch11 = match;
2428                                 }
2429                                 if (match.hit)
2430                                 {
2431                                     soulng::parser::Match match(false);
2432                                     soulng::parser::Match* parentMatch12 = &match;
2433                                     {
2434                                         soulng::parser::Match match = XmlParser::S(lexer);
2435                                         *parentMatch12 = match;
2436                                     }
2437                                     *parentMatch11 = match;
2438                                 }
2439                                 *parentMatch10 = match;
2440                             }
2441                             if (match.hit)
2442                             {
2443                                 soulng::parser::Match match(false);
2444                                 soulng::parser::Match* parentMatch13 = &match;
2445                                 {
2446                                     soulng::parser::Match match = XmlParser::PubidLiteral(lexer);
2447                                     *parentMatch13 = match;
2448                                 }
2449                                 *parentMatch10 = match;
2450                             }
2451                             *parentMatch9 = match;
2452                         }
2453                         if (match.hit)
2454                         {
2455                             soulng::parser::Match match(false);
2456                             soulng::parser::Match* parentMatch14 = &match;
2457                             {
2458                                 soulng::parser::Match match = XmlParser::S(lexer);
2459                                 *parentMatch14 = match;
2460                             }
2461                             *parentMatch9 = match;
2462                         }
2463                         *parentMatch8 = match;
2464                     }
2465                     if (match.hit)
2466                     {
2467                         soulng::parser::Match match(false);
2468                         soulng::parser::Match* parentMatch15 = &match;
2469                         {
2470                             soulng::parser::Match match = XmlParser::SystemLiteral(lexer);
2471                             *parentMatch15 = match;
2472                         }
2473                         *parentMatch8 = match;
2474                     }
2475                     *parentMatch7 = match;
2476                 }
2477                 *parentMatch6 = match;
2478             }
2479             *parentMatch0 = match;
2480         }
2481     }
2482     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2483 
2484 
2485 
2486 
2487 
2488     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2489     if (!match.hit)
2490     {
2491         match.value = nullptr;
2492     }
2493     return match;
2494 }
2495 
2496 soulng::parser::Match XmlParser::SystemLiteral(TrivialLexer& lexer)
2497 {
2498     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2499 
2500 
2501 
2502 
2503 
2504 
2505 
2506     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2507     soulng::parser::Match match(false);
2508     soulng::parser::Match* parentMatch0 = &match;
2509     {
2510         int64_t save = lexer.GetPos();
2511         soulng::parser::Match match(false);
2512         soulng::parser::Match* parentMatch1 = &match;
2513         {
2514             soulng::parser::Match match(false);
2515             soulng::parser::Match* parentMatch2 = &match;
2516             {
2517                 soulng::parser::Match match(false);
2518                 soulng::parser::Match* parentMatch3 = &match;
2519                 {
2520                     soulng::parser::Match match(false);
2521                     if (*lexer == 34)
2522                     {
2523                         ++lexer;
2524                         match.hit = true;
2525                     }
2526                     *parentMatch3 = match;
2527                 }
2528                 if (match.hit)
2529                 {
2530                     soulng::parser::Match match(false);
2531                     soulng::parser::Match* parentMatch4 = &match;
2532                     {
2533                         soulng::parser::Match match(false);
2534                         soulng::parser::Match* parentMatch5 = &match;
2535                         {
2536                             soulng::parser::Match match(true);
2537                             soulng::parser::Match* parentMatch6 = &match;
2538                             {
2539                                 while (true)
2540                                 {
2541                                     int64_t save = lexer.GetPos();
2542                                     {
2543                                         soulng::parser::Match match(lexer.Pos() != lexer.End());
2544                                         for (const soulng::parser::Range& range : s15)
2545                                         {
2546                                             if (*lexer >= range.first && *lexer <= range.last)
2547                                             {
2548                                                 match.hit = false;
2549                                                 break;
2550                                             }
2551                                         }
2552                                         if (match.hit)
2553                                         {
2554                                             ++lexer;
2555                                         }
2556                                         if (match.hit)
2557                                         {
2558                                             *parentMatch6 = match;
2559                                         }
2560                                         else
2561                                         {
2562                                             lexer.SetPos(save);
2563                                             break;
2564                                         }
2565                                     }
2566                                 }
2567                             }
2568                             *parentMatch5 = match;
2569                         }
2570                         *parentMatch4 = match;
2571                     }
2572                     *parentMatch3 = match;
2573                 }
2574                 *parentMatch2 = match;
2575             }
2576             if (match.hit)
2577             {
2578                 soulng::parser::Match match(false);
2579                 soulng::parser::Match* parentMatch7 = &match;
2580                 {
2581                     soulng::parser::Match match(false);
2582                     if (*lexer == 34)
2583                     {
2584                         ++lexer;
2585                         match.hit = true;
2586                     }
2587                     *parentMatch7 = match;
2588                 }
2589                 *parentMatch2 = match;
2590             }
2591             *parentMatch1 = match;
2592         }
2593         *parentMatch0 = match;
2594         if (!match.hit)
2595         {
2596             soulng::parser::Match match(false);
2597             soulng::parser::Match* parentMatch8 = &match;
2598             lexer.SetPos(save);
2599             {
2600                 soulng::parser::Match match(false);
2601                 soulng::parser::Match* parentMatch9 = &match;
2602                 {
2603                     soulng::parser::Match match(false);
2604                     soulng::parser::Match* parentMatch10 = &match;
2605                     {
2606                         soulng::parser::Match match(false);
2607                         soulng::parser::Match* parentMatch11 = &match;
2608                         {
2609                             soulng::parser::Match match(false);
2610                             if (*lexer == 39)
2611                             {
2612                                 ++lexer;
2613                                 match.hit = true;
2614                             }
2615                             *parentMatch11 = match;
2616                         }
2617                         if (match.hit)
2618                         {
2619                             soulng::parser::Match match(false);
2620                             soulng::parser::Match* parentMatch12 = &match;
2621                             {
2622                                 soulng::parser::Match match(false);
2623                                 soulng::parser::Match* parentMatch13 = &match;
2624                                 {
2625                                     soulng::parser::Match match(true);
2626                                     soulng::parser::Match* parentMatch14 = &match;
2627                                     {
2628                                         while (true)
2629                                         {
2630                                             int64_t save = lexer.GetPos();
2631                                             {
2632                                                 soulng::parser::Match match(lexer.Pos() != lexer.End());
2633                                                 for (const soulng::parser::Range& range : s16)
2634                                                 {
2635                                                     if (*lexer >= range.first && *lexer <= range.last)
2636                                                     {
2637                                                         match.hit = false;
2638                                                         break;
2639                                                     }
2640                                                 }
2641                                                 if (match.hit)
2642                                                 {
2643                                                     ++lexer;
2644                                                 }
2645                                                 if (match.hit)
2646                                                 {
2647                                                     *parentMatch14 = match;
2648                                                 }
2649                                                 else
2650                                                 {
2651                                                     lexer.SetPos(save);
2652                                                     break;
2653                                                 }
2654                                             }
2655                                         }
2656                                     }
2657                                     *parentMatch13 = match;
2658                                 }
2659                                 *parentMatch12 = match;
2660                             }
2661                             *parentMatch11 = match;
2662                         }
2663                         *parentMatch10 = match;
2664                     }
2665                     if (match.hit)
2666                     {
2667                         soulng::parser::Match match(false);
2668                         soulng::parser::Match* parentMatch15 = &match;
2669                         {
2670                             soulng::parser::Match match(false);
2671                             if (*lexer == 39)
2672                             {
2673                                 ++lexer;
2674                                 match.hit = true;
2675                             }
2676                             *parentMatch15 = match;
2677                         }
2678                         *parentMatch10 = match;
2679                     }
2680                     *parentMatch9 = match;
2681                 }
2682                 *parentMatch8 = match;
2683             }
2684             *parentMatch0 = match;
2685         }
2686     }
2687     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2688 
2689 
2690 
2691 
2692 
2693     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2694     if (!match.hit)
2695     {
2696         match.value = nullptr;
2697     }
2698     return match;
2699 }
2700 
2701 soulng::parser::Match XmlParser::PubidLiteral(TrivialLexer& lexer)
2702 {
2703     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2704 
2705 
2706 
2707 
2708 
2709 
2710 
2711     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2712     soulng::parser::Match match(false);
2713     soulng::parser::Match* parentMatch0 = &match;
2714     {
2715         int64_t save = lexer.GetPos();
2716         soulng::parser::Match match(false);
2717         soulng::parser::Match* parentMatch1 = &match;
2718         {
2719             soulng::parser::Match match(false);
2720             soulng::parser::Match* parentMatch2 = &match;
2721             {
2722                 soulng::parser::Match match(false);
2723                 if (*lexer == 34)
2724                 {
2725                     ++lexer;
2726                     match.hit = true;
2727                 }
2728                 *parentMatch2 = match;
2729             }
2730             if (match.hit)
2731             {
2732                 soulng::parser::Match match(false);
2733                 soulng::parser::Match* parentMatch3 = &match;
2734                 {
2735                     soulng::parser::Match match(false);
2736                     soulng::parser::Match* parentMatch4 = &match;
2737                     {
2738                         soulng::parser::Match match(true);
2739                         soulng::parser::Match* parentMatch5 = &match;
2740                         {
2741                             while (true)
2742                             {
2743                                 int64_t save = lexer.GetPos();
2744                                 {
2745                                     soulng::parser::Match match = XmlParser::PubidChar(lexer);
2746                                     if (match.hit)
2747                                     {
2748                                         *parentMatch5 = match;
2749                                     }
2750                                     else
2751                                     {
2752                                         lexer.SetPos(save);
2753                                         break;
2754                                     }
2755                                 }
2756                             }
2757                         }
2758                         *parentMatch4 = match;
2759                     }
2760                     *parentMatch3 = match;
2761                 }
2762                 *parentMatch2 = match;
2763             }
2764             *parentMatch1 = match;
2765         }
2766         if (match.hit)
2767         {
2768             soulng::parser::Match match(false);
2769             soulng::parser::Match* parentMatch6 = &match;
2770             {
2771                 soulng::parser::Match match(false);
2772                 if (*lexer == 34)
2773                 {
2774                     ++lexer;
2775                     match.hit = true;
2776                 }
2777                 *parentMatch6 = match;
2778             }
2779             *parentMatch1 = match;
2780         }
2781         *parentMatch0 = match;
2782         if (!match.hit)
2783         {
2784             soulng::parser::Match match(false);
2785             soulng::parser::Match* parentMatch7 = &match;
2786             lexer.SetPos(save);
2787             {
2788                 soulng::parser::Match match(false);
2789                 soulng::parser::Match* parentMatch8 = &match;
2790                 {
2791                     soulng::parser::Match match(false);
2792                     soulng::parser::Match* parentMatch9 = &match;
2793                     {
2794                         soulng::parser::Match match(false);
2795                         if (*lexer == 39)
2796                         {
2797                             ++lexer;
2798                             match.hit = true;
2799                         }
2800                         *parentMatch9 = match;
2801                     }
2802                     if (match.hit)
2803                     {
2804                         soulng::parser::Match match(false);
2805                         soulng::parser::Match* parentMatch10 = &match;
2806                         {
2807                             soulng::parser::Match match(false);
2808                             soulng::parser::Match* parentMatch11 = &match;
2809                             {
2810                                 soulng::parser::Match match(true);
2811                                 soulng::parser::Match* parentMatch12 = &match;
2812                                 {
2813                                     while (true)
2814                                     {
2815                                         int64_t save = lexer.GetPos();
2816                                         {
2817                                             soulng::parser::Match match(false);
2818                                             soulng::parser::Match* parentMatch13 = &match;
2819                                             {
2820                                                 soulng::parser::Match match(false);
2821                                                 soulng::parser::Match* parentMatch14 = &match;
2822                                                 int64_t save = lexer.GetPos();
2823                                                 {
2824                                                     soulng::parser::Match match = XmlParser::PubidChar(lexer);
2825                                                     *parentMatch14 = match;
2826                                                 }
2827                                                 if (match.hit)
2828                                                 {
2829                                                     soulng::parser::Match match(false);
2830                                                     soulng::parser::Match* parentMatch15 = &match;
2831                                                     {
2832                                                         int64_t tmp = lexer.GetPos();
2833                                                         lexer.SetPos(save);
2834                                                         save = tmp;
2835                                                         soulng::parser::Match match(false);
2836                                                         if (*lexer == 39)
2837                                                         {
2838                                                             ++lexer;
2839                                                             match.hit = true;
2840                                                         }
2841                                                         *parentMatch15 = match;
2842                                                     }
2843                                                     if (!match.hit)
2844                                                     {
2845                                                         lexer.SetPos(save);
2846                                                     }
2847                                                     *parentMatch14 = soulng::parser::Match(!match.hitmatch.value);
2848                                                 }
2849                                                 *parentMatch13 = match;
2850                                             }
2851                                             if (match.hit)
2852                                             {
2853                                                 *parentMatch12 = match;
2854                                             }
2855                                             else
2856                                             {
2857                                                 lexer.SetPos(save);
2858                                                 break;
2859                                             }
2860                                         }
2861                                     }
2862                                 }
2863                                 *parentMatch11 = match;
2864                             }
2865                             *parentMatch10 = match;
2866                         }
2867                         *parentMatch9 = match;
2868                     }
2869                     *parentMatch8 = match;
2870                 }
2871                 if (match.hit)
2872                 {
2873                     soulng::parser::Match match(false);
2874                     soulng::parser::Match* parentMatch16 = &match;
2875                     {
2876                         soulng::parser::Match match(false);
2877                         if (*lexer == 39)
2878                         {
2879                             ++lexer;
2880                             match.hit = true;
2881                         }
2882                         *parentMatch16 = match;
2883                     }
2884                     *parentMatch8 = match;
2885                 }
2886                 *parentMatch7 = match;
2887             }
2888             *parentMatch0 = match;
2889         }
2890     }
2891     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2892 
2893 
2894 
2895 
2896 
2897     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2898     if (!match.hit)
2899     {
2900         match.value = nullptr;
2901     }
2902     return match;
2903 }
2904 
2905 soulng::parser::Match XmlParser::PubidChar(TrivialLexer& lexer)
2906 {
2907     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2908 
2909 
2910 
2911 
2912 
2913 
2914 
2915     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2916     soulng::parser::Match match(false);
2917     soulng::parser::Match* parentMatch0 = &match;
2918     {
2919         int64_t save = lexer.GetPos();
2920         soulng::parser::Match match(false);
2921         soulng::parser::Match* parentMatch1 = &match;
2922         {
2923             int64_t save = lexer.GetPos();
2924             soulng::parser::Match match(false);
2925             for (const soulng::parser::Range& range : s17)
2926             {
2927                 if (*lexer >= range.first && *lexer <= range.last)
2928                 {
2929                     match.hit = true;
2930                     ++lexer;
2931                     break;
2932                 }
2933             }
2934             *parentMatch1 = match;
2935             if (!match.hit)
2936             {
2937                 soulng::parser::Match match(false);
2938                 soulng::parser::Match* parentMatch2 = &match;
2939                 lexer.SetPos(save);
2940                 {
2941                     soulng::parser::Match match(false);
2942                     for (const soulng::parser::Range& range : s18)
2943                     {
2944                         if (*lexer >= range.first && *lexer <= range.last)
2945                         {
2946                             match.hit = true;
2947                             ++lexer;
2948                             break;
2949                         }
2950                     }
2951                     *parentMatch2 = match;
2952                 }
2953                 *parentMatch1 = match;
2954             }
2955         }
2956         *parentMatch0 = match;
2957         if (!match.hit)
2958         {
2959             soulng::parser::Match match(false);
2960             soulng::parser::Match* parentMatch3 = &match;
2961             lexer.SetPos(save);
2962             {
2963                 soulng::parser::Match match(false);
2964                 for (const soulng::parser::Range& range : s19)
2965                 {
2966                     if (*lexer >= range.first && *lexer <= range.last)
2967                     {
2968                         match.hit = true;
2969                         ++lexer;
2970                         break;
2971                     }
2972                 }
2973                 *parentMatch3 = match;
2974             }
2975             *parentMatch0 = match;
2976         }
2977     }
2978     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2979 
2980 
2981 
2982 
2983 
2984     #endif // SOULNG_PARSER_DEBUG_SUPPORT
2985     if (!match.hit)
2986     {
2987         match.value = nullptr;
2988     }
2989     return match;
2990 }
2991 
2992 soulng::parser::Match XmlParser::IntSubset(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
2993 {
2994     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
2995 
2996 
2997 
2998 
2999 
3000 
3001 
3002     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3003     soulng::parser::Match match(true);
3004     soulng::parser::Match* parentMatch0 = &match;
3005     {
3006         while (true)
3007         {
3008             int64_t save = lexer.GetPos();
3009             {
3010                 soulng::parser::Match match(false);
3011                 soulng::parser::Match* parentMatch1 = &match;
3012                 {
3013                     soulng::parser::Match match(false);
3014                     soulng::parser::Match* parentMatch2 = &match;
3015                     {
3016                         int64_t save = lexer.GetPos();
3017                         soulng::parser::Match match = XmlParser::MarkupDecl(lexerprocessor);
3018                         *parentMatch2 = match;
3019                         if (!match.hit)
3020                         {
3021                             soulng::parser::Match match(false);
3022                             soulng::parser::Match* parentMatch3 = &match;
3023                             lexer.SetPos(save);
3024                             {
3025                                 soulng::parser::Match match = XmlParser::DeclSep(lexerprocessor);
3026                                 *parentMatch3 = match;
3027                             }
3028                             *parentMatch2 = match;
3029                         }
3030                     }
3031                     *parentMatch1 = match;
3032                 }
3033                 if (match.hit)
3034                 {
3035                     *parentMatch0 = match;
3036                 }
3037                 else
3038                 {
3039                     lexer.SetPos(save);
3040                     break;
3041                 }
3042             }
3043         }
3044     }
3045     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3046 
3047 
3048 
3049 
3050 
3051     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3052     if (!match.hit)
3053     {
3054         match.value = nullptr;
3055     }
3056     return match;
3057 }
3058 
3059 soulng::parser::Match XmlParser::MarkupDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
3060 {
3061     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3062 
3063 
3064 
3065 
3066 
3067 
3068 
3069     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3070     soulng::parser::Match match(false);
3071     soulng::parser::Match* parentMatch0 = &match;
3072     {
3073         int64_t save = lexer.GetPos();
3074         soulng::parser::Match match(false);
3075         soulng::parser::Match* parentMatch1 = &match;
3076         {
3077             int64_t save = lexer.GetPos();
3078             soulng::parser::Match match(false);
3079             soulng::parser::Match* parentMatch2 = &match;
3080             {
3081                 int64_t save = lexer.GetPos();
3082                 soulng::parser::Match match(false);
3083                 soulng::parser::Match* parentMatch3 = &match;
3084                 {
3085                     int64_t save = lexer.GetPos();
3086                     soulng::parser::Match match(false);
3087                     soulng::parser::Match* parentMatch4 = &match;
3088                     {
3089                         int64_t save = lexer.GetPos();
3090                         soulng::parser::Match match = XmlParser::ElementDecl(lexerprocessor);
3091                         *parentMatch4 = match;
3092                         if (!match.hit)
3093                         {
3094                             soulng::parser::Match match(false);
3095                             soulng::parser::Match* parentMatch5 = &match;
3096                             lexer.SetPos(save);
3097                             {
3098                                 soulng::parser::Match match = XmlParser::AttlistDecl(lexerprocessor);
3099                                 *parentMatch5 = match;
3100                             }
3101                             *parentMatch4 = match;
3102                         }
3103                     }
3104                     *parentMatch3 = match;
3105                     if (!match.hit)
3106                     {
3107                         soulng::parser::Match match(false);
3108                         soulng::parser::Match* parentMatch6 = &match;
3109                         lexer.SetPos(save);
3110                         {
3111                             soulng::parser::Match match = XmlParser::EntityDecl(lexerprocessor);
3112                             *parentMatch6 = match;
3113                         }
3114                         *parentMatch3 = match;
3115                     }
3116                 }
3117                 *parentMatch2 = match;
3118                 if (!match.hit)
3119                 {
3120                     soulng::parser::Match match(false);
3121                     soulng::parser::Match* parentMatch7 = &match;
3122                     lexer.SetPos(save);
3123                     {
3124                         soulng::parser::Match match = XmlParser::NotationDecl(lexerprocessor);
3125                         *parentMatch7 = match;
3126                     }
3127                     *parentMatch2 = match;
3128                 }
3129             }
3130             *parentMatch1 = match;
3131             if (!match.hit)
3132             {
3133                 soulng::parser::Match match(false);
3134                 soulng::parser::Match* parentMatch8 = &match;
3135                 lexer.SetPos(save);
3136                 {
3137                     soulng::parser::Match match = XmlParser::PI(lexerprocessor);
3138                     *parentMatch8 = match;
3139                 }
3140                 *parentMatch1 = match;
3141             }
3142         }
3143         *parentMatch0 = match;
3144         if (!match.hit)
3145         {
3146             soulng::parser::Match match(false);
3147             soulng::parser::Match* parentMatch9 = &match;
3148             lexer.SetPos(save);
3149             {
3150                 soulng::parser::Match match = XmlParser::Comment(lexerprocessor);
3151                 *parentMatch9 = match;
3152             }
3153             *parentMatch0 = match;
3154         }
3155     }
3156     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3157 
3158 
3159 
3160 
3161 
3162     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3163     if (!match.hit)
3164     {
3165         match.value = nullptr;
3166     }
3167     return match;
3168 }
3169 
3170 soulng::parser::Match XmlParser::DeclSep(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
3171 {
3172     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3173 
3174 
3175 
3176 
3177 
3178 
3179 
3180     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3181     soulng::parser::Match match(false);
3182     soulng::parser::Match* parentMatch0 = &match;
3183     {
3184         int64_t save = lexer.GetPos();
3185         soulng::parser::Match match = XmlParser::PEReference(lexerprocessor);
3186         *parentMatch0 = match;
3187         if (!match.hit)
3188         {
3189             soulng::parser::Match match(false);
3190             soulng::parser::Match* parentMatch1 = &match;
3191             lexer.SetPos(save);
3192             {
3193                 soulng::parser::Match match = XmlParser::S(lexer);
3194                 *parentMatch1 = match;
3195             }
3196             *parentMatch0 = match;
3197         }
3198     }
3199     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3200 
3201 
3202 
3203 
3204 
3205     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3206     if (!match.hit)
3207     {
3208         match.value = nullptr;
3209     }
3210     return match;
3211 }
3212 
3213 soulng::parser::Match XmlParser::ElementDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
3214 {
3215     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3216 
3217 
3218 
3219 
3220 
3221 
3222 
3223     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3224     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>elementName;
3225     soulng::parser::Match match(false);
3226     soulng::parser::Match* parentMatch0 = &match;
3227     {
3228         soulng::parser::Match match(false);
3229         soulng::parser::Match* parentMatch1 = &match;
3230         {
3231             soulng::parser::Match match(false);
3232             soulng::parser::Match* parentMatch2 = &match;
3233             {
3234                 soulng::parser::Match match(false);
3235                 soulng::parser::Match* parentMatch3 = &match;
3236                 {
3237                     soulng::parser::Match match(false);
3238                     soulng::parser::Match* parentMatch4 = &match;
3239                     {
3240                         soulng::parser::Match match(false);
3241                         soulng::parser::Match* parentMatch5 = &match;
3242                         {
3243                             soulng::parser::Match match(true);
3244                             for (int i : s20)
3245                             {
3246                                 if (*lexer == i)
3247                                 {
3248                                     ++lexer;
3249                                 }
3250                                 else
3251                                 {
3252                                     match.hit = false;
3253                                     break;
3254                                 }
3255                             }
3256                             *parentMatch5 = match;
3257                         }
3258                         if (match.hit)
3259                         {
3260                             soulng::parser::Match match(false);
3261                             soulng::parser::Match* parentMatch6 = &match;
3262                             {
3263                                 soulng::parser::Match match = XmlParser::S(lexer);
3264                                 *parentMatch6 = match;
3265                             }
3266                             *parentMatch5 = match;
3267                         }
3268                         *parentMatch4 = match;
3269                     }
3270                     if (match.hit)
3271                     {
3272                         soulng::parser::Match match(false);
3273                         soulng::parser::Match* parentMatch7 = &match;
3274                         {
3275                             soulng::parser::Match match = XmlParser::Name(lexer);
3276                             elementName.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
3277                             *parentMatch7 = match;
3278                         }
3279                         *parentMatch4 = match;
3280                     }
3281                     *parentMatch3 = match;
3282                 }
3283                 if (match.hit)
3284                 {
3285                     soulng::parser::Match match(false);
3286                     soulng::parser::Match* parentMatch8 = &match;
3287                     {
3288                         soulng::parser::Match match = XmlParser::S(lexer);
3289                         *parentMatch8 = match;
3290                     }
3291                     *parentMatch3 = match;
3292                 }
3293                 *parentMatch2 = match;
3294             }
3295             if (match.hit)
3296             {
3297                 soulng::parser::Match match(false);
3298                 soulng::parser::Match* parentMatch9 = &match;
3299                 {
3300                     soulng::parser::Match match = XmlParser::ContentSpec(lexer);
3301                     *parentMatch9 = match;
3302                 }
3303                 *parentMatch2 = match;
3304             }
3305             *parentMatch1 = match;
3306         }
3307         if (match.hit)
3308         {
3309             soulng::parser::Match match(false);
3310             soulng::parser::Match* parentMatch10 = &match;
3311             {
3312                 soulng::parser::Match match(true);
3313                 int64_t save = lexer.GetPos();
3314                 soulng::parser::Match* parentMatch11 = &match;
3315                 {
3316                     soulng::parser::Match match = XmlParser::S(lexer);
3317                     if (match.hit)
3318                     {
3319                         *parentMatch11 = match;
3320                     }
3321                     else
3322                     {
3323                         lexer.SetPos(save);
3324                     }
3325                 }
3326                 *parentMatch10 = match;
3327             }
3328             *parentMatch1 = match;
3329         }
3330         *parentMatch0 = match;
3331     }
3332     if (match.hit)
3333     {
3334         soulng::parser::Match match(false);
3335         soulng::parser::Match* parentMatch12 = &match;
3336         {
3337             soulng::parser::Match match(false);
3338             if (*lexer == 62)
3339             {
3340                 ++lexer;
3341                 match.hit = true;
3342             }
3343             *parentMatch12 = match;
3344         }
3345         *parentMatch0 = match;
3346     }
3347     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3348 
3349 
3350 
3351 
3352 
3353     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3354     if (!match.hit)
3355     {
3356         match.value = nullptr;
3357     }
3358     return match;
3359 }
3360 
3361 soulng::parser::Match XmlParser::ContentSpec(TrivialLexer& lexer)
3362 {
3363     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3364 
3365 
3366 
3367 
3368 
3369 
3370 
3371     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3372     soulng::parser::Match match(false);
3373     soulng::parser::Match* parentMatch0 = &match;
3374     {
3375         int64_t save = lexer.GetPos();
3376         soulng::parser::Match match(false);
3377         soulng::parser::Match* parentMatch1 = &match;
3378         {
3379             int64_t save = lexer.GetPos();
3380             soulng::parser::Match match(false);
3381             soulng::parser::Match* parentMatch2 = &match;
3382             {
3383                 int64_t save = lexer.GetPos();
3384                 soulng::parser::Match match(true);
3385                 for (int i : s21)
3386                 {
3387                     if (*lexer == i)
3388                     {
3389                         ++lexer;
3390                     }
3391                     else
3392                     {
3393                         match.hit = false;
3394                         break;
3395                     }
3396                 }
3397                 *parentMatch2 = match;
3398                 if (!match.hit)
3399                 {
3400                     soulng::parser::Match match(false);
3401                     soulng::parser::Match* parentMatch3 = &match;
3402                     lexer.SetPos(save);
3403                     {
3404                         soulng::parser::Match match(true);
3405                         for (int i : s22)
3406                         {
3407                             if (*lexer == i)
3408                             {
3409                                 ++lexer;
3410                             }
3411                             else
3412                             {
3413                                 match.hit = false;
3414                                 break;
3415                             }
3416                         }
3417                         *parentMatch3 = match;
3418                     }
3419                     *parentMatch2 = match;
3420                 }
3421             }
3422             *parentMatch1 = match;
3423             if (!match.hit)
3424             {
3425                 soulng::parser::Match match(false);
3426                 soulng::parser::Match* parentMatch4 = &match;
3427                 lexer.SetPos(save);
3428                 {
3429                     soulng::parser::Match match = XmlParser::Mixed(lexer);
3430                     *parentMatch4 = match;
3431                 }
3432                 *parentMatch1 = match;
3433             }
3434         }
3435         *parentMatch0 = match;
3436         if (!match.hit)
3437         {
3438             soulng::parser::Match match(false);
3439             soulng::parser::Match* parentMatch5 = &match;
3440             lexer.SetPos(save);
3441             {
3442                 soulng::parser::Match match = XmlParser::Children(lexer);
3443                 *parentMatch5 = match;
3444             }
3445             *parentMatch0 = match;
3446         }
3447     }
3448     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3449 
3450 
3451 
3452 
3453 
3454     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3455     if (!match.hit)
3456     {
3457         match.value = nullptr;
3458     }
3459     return match;
3460 }
3461 
3462 soulng::parser::Match XmlParser::Children(TrivialLexer& lexer)
3463 {
3464     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3465 
3466 
3467 
3468 
3469 
3470 
3471 
3472     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3473     soulng::parser::Match match(false);
3474     soulng::parser::Match* parentMatch0 = &match;
3475     {
3476         soulng::parser::Match match(false);
3477         soulng::parser::Match* parentMatch1 = &match;
3478         {
3479             soulng::parser::Match match(false);
3480             soulng::parser::Match* parentMatch2 = &match;
3481             {
3482                 int64_t save = lexer.GetPos();
3483                 soulng::parser::Match match = XmlParser::Choice(lexer);
3484                 *parentMatch2 = match;
3485                 if (!match.hit)
3486                 {
3487                     soulng::parser::Match match(false);
3488                     soulng::parser::Match* parentMatch3 = &match;
3489                     lexer.SetPos(save);
3490                     {
3491                         soulng::parser::Match match = XmlParser::Seq(lexer);
3492                         *parentMatch3 = match;
3493                     }
3494                     *parentMatch2 = match;
3495                 }
3496             }
3497             *parentMatch1 = match;
3498         }
3499         *parentMatch0 = match;
3500     }
3501     if (match.hit)
3502     {
3503         soulng::parser::Match match(false);
3504         soulng::parser::Match* parentMatch4 = &match;
3505         {
3506             soulng::parser::Match match(true);
3507             int64_t save = lexer.GetPos();
3508             soulng::parser::Match* parentMatch5 = &match;
3509             {
3510                 soulng::parser::Match match(false);
3511                 soulng::parser::Match* parentMatch6 = &match;
3512                 {
3513                     soulng::parser::Match match(false);
3514                     soulng::parser::Match* parentMatch7 = &match;
3515                     {
3516                         int64_t save = lexer.GetPos();
3517                         soulng::parser::Match match(false);
3518                         soulng::parser::Match* parentMatch8 = &match;
3519                         {
3520                             int64_t save = lexer.GetPos();
3521                             soulng::parser::Match match(false);
3522                             if (*lexer == 63)
3523                             {
3524                                 ++lexer;
3525                                 match.hit = true;
3526                             }
3527                             *parentMatch8 = match;
3528                             if (!match.hit)
3529                             {
3530                                 soulng::parser::Match match(false);
3531                                 soulng::parser::Match* parentMatch9 = &match;
3532                                 lexer.SetPos(save);
3533                                 {
3534                                     soulng::parser::Match match(false);
3535                                     if (*lexer == 42)
3536                                     {
3537                                         ++lexer;
3538                                         match.hit = true;
3539                                     }
3540                                     *parentMatch9 = match;
3541                                 }
3542                                 *parentMatch8 = match;
3543                             }
3544                         }
3545                         *parentMatch7 = match;
3546                         if (!match.hit)
3547                         {
3548                             soulng::parser::Match match(false);
3549                             soulng::parser::Match* parentMatch10 = &match;
3550                             lexer.SetPos(save);
3551                             {
3552                                 soulng::parser::Match match(false);
3553                                 if (*lexer == 43)
3554                                 {
3555                                     ++lexer;
3556                                     match.hit = true;
3557                                 }
3558                                 *parentMatch10 = match;
3559                             }
3560                             *parentMatch7 = match;
3561                         }
3562                     }
3563                     *parentMatch6 = match;
3564                 }
3565                 if (match.hit)
3566                 {
3567                     *parentMatch5 = match;
3568                 }
3569                 else
3570                 {
3571                     lexer.SetPos(save);
3572                 }
3573             }
3574             *parentMatch4 = match;
3575         }
3576         *parentMatch0 = match;
3577     }
3578     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3579 
3580 
3581 
3582 
3583 
3584     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3585     if (!match.hit)
3586     {
3587         match.value = nullptr;
3588     }
3589     return match;
3590 }
3591 
3592 soulng::parser::Match XmlParser::CP(TrivialLexer& lexer)
3593 {
3594     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3595 
3596 
3597 
3598 
3599 
3600 
3601 
3602     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3603     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
3604     soulng::parser::Match match(false);
3605     soulng::parser::Match* parentMatch0 = &match;
3606     {
3607         soulng::parser::Match match(false);
3608         soulng::parser::Match* parentMatch1 = &match;
3609         {
3610             soulng::parser::Match match(false);
3611             soulng::parser::Match* parentMatch2 = &match;
3612             {
3613                 int64_t save = lexer.GetPos();
3614                 soulng::parser::Match match(false);
3615                 soulng::parser::Match* parentMatch3 = &match;
3616                 {
3617                     int64_t save = lexer.GetPos();
3618                     soulng::parser::Match match = XmlParser::Name(lexer);
3619                     name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
3620                     *parentMatch3 = match;
3621                     if (!match.hit)
3622                     {
3623                         soulng::parser::Match match(false);
3624                         soulng::parser::Match* parentMatch4 = &match;
3625                         lexer.SetPos(save);
3626                         {
3627                             soulng::parser::Match match = XmlParser::Choice(lexer);
3628                             *parentMatch4 = match;
3629                         }
3630                         *parentMatch3 = match;
3631                     }
3632                 }
3633                 *parentMatch2 = match;
3634                 if (!match.hit)
3635                 {
3636                     soulng::parser::Match match(false);
3637                     soulng::parser::Match* parentMatch5 = &match;
3638                     lexer.SetPos(save);
3639                     {
3640                         soulng::parser::Match match = XmlParser::Seq(lexer);
3641                         *parentMatch5 = match;
3642                     }
3643                     *parentMatch2 = match;
3644                 }
3645             }
3646             *parentMatch1 = match;
3647         }
3648         *parentMatch0 = match;
3649     }
3650     if (match.hit)
3651     {
3652         soulng::parser::Match match(false);
3653         soulng::parser::Match* parentMatch6 = &match;
3654         {
3655             soulng::parser::Match match(true);
3656             int64_t save = lexer.GetPos();
3657             soulng::parser::Match* parentMatch7 = &match;
3658             {
3659                 soulng::parser::Match match(false);
3660                 soulng::parser::Match* parentMatch8 = &match;
3661                 {
3662                     soulng::parser::Match match(false);
3663                     soulng::parser::Match* parentMatch9 = &match;
3664                     {
3665                         int64_t save = lexer.GetPos();
3666                         soulng::parser::Match match(false);
3667                         soulng::parser::Match* parentMatch10 = &match;
3668                         {
3669                             int64_t save = lexer.GetPos();
3670                             soulng::parser::Match match(false);
3671                             if (*lexer == 63)
3672                             {
3673                                 ++lexer;
3674                                 match.hit = true;
3675                             }
3676                             *parentMatch10 = match;
3677                             if (!match.hit)
3678                             {
3679                                 soulng::parser::Match match(false);
3680                                 soulng::parser::Match* parentMatch11 = &match;
3681                                 lexer.SetPos(save);
3682                                 {
3683                                     soulng::parser::Match match(false);
3684                                     if (*lexer == 42)
3685                                     {
3686                                         ++lexer;
3687                                         match.hit = true;
3688                                     }
3689                                     *parentMatch11 = match;
3690                                 }
3691                                 *parentMatch10 = match;
3692                             }
3693                         }
3694                         *parentMatch9 = match;
3695                         if (!match.hit)
3696                         {
3697                             soulng::parser::Match match(false);
3698                             soulng::parser::Match* parentMatch12 = &match;
3699                             lexer.SetPos(save);
3700                             {
3701                                 soulng::parser::Match match(false);
3702                                 if (*lexer == 43)
3703                                 {
3704                                     ++lexer;
3705                                     match.hit = true;
3706                                 }
3707                                 *parentMatch12 = match;
3708                             }
3709                             *parentMatch9 = match;
3710                         }
3711                     }
3712                     *parentMatch8 = match;
3713                 }
3714                 if (match.hit)
3715                 {
3716                     *parentMatch7 = match;
3717                 }
3718                 else
3719                 {
3720                     lexer.SetPos(save);
3721                 }
3722             }
3723             *parentMatch6 = match;
3724         }
3725         *parentMatch0 = match;
3726     }
3727     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3728 
3729 
3730 
3731 
3732 
3733     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3734     if (!match.hit)
3735     {
3736         match.value = nullptr;
3737     }
3738     return match;
3739 }
3740 
3741 soulng::parser::Match XmlParser::Choice(TrivialLexer& lexer)
3742 {
3743     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
3744 
3745 
3746 
3747 
3748 
3749 
3750 
3751     #endif // SOULNG_PARSER_DEBUG_SUPPORT
3752     soulng::parser::Match match(false);
3753     soulng::parser::Match* parentMatch0 = &match;
3754     {
3755         soulng::parser::Match match(false);
3756         soulng::parser::Match* parentMatch1 = &match;
3757         {
3758             soulng::parser::Match match(false);
3759             soulng::parser::Match* parentMatch2 = &match;
3760             {
3761                 soulng::parser::Match match(false);
3762                 soulng::parser::Match* parentMatch3 = &match;
3763                 {
3764                     soulng::parser::Match match(false);
3765                     soulng::parser::Match* parentMatch4 = &match;
3766                     {
3767                         soulng::parser::Match match(false);
3768                         if (*lexer == 40)
3769                         {
3770                             ++lexer;
3771                             match.hit = true;
3772                         }
3773                         *parentMatch4 = match;
3774                     }
3775                     if (match.hit)
3776                     {
3777                         soulng::parser::Match match(false);
3778                         soulng::parser::Match* parentMatch5 = &match;
3779                         {
3780                             soulng::parser::Match match(true);
3781                             int64_t save = lexer.GetPos();
3782                             soulng::parser::Match* parentMatch6 = &match;
3783                             {
3784                                 soulng::parser::Match match = XmlParser::S(lexer);
3785                                 if (match.hit)
3786                                 {
3787                                     *parentMatch6 = match;
3788                                 }
3789                                 else
3790                                 {
3791                                     lexer.SetPos(save);
3792                                 }
3793                             }
3794                             *parentMatch5 = match;
3795                         }
3796                         *parentMatch4 = match;
3797                     }
3798                     *parentMatch3 = match;
3799                 }
3800                 if (match.hit)
3801                 {
3802                     soulng::parser::Match match(false);
3803                     soulng::parser::Match* parentMatch7 = &match;
3804                     {
3805                         soulng::parser::Match match = XmlParser::CP(lexer);
3806                         *parentMatch7 = match;
3807                     }
3808                     *parentMatch3 = match;
3809                 }
3810                 *parentMatch2 = match;
3811             }
3812             if (match.hit)
3813             {
3814                 soulng::parser::Match match(false);
3815                 soulng::parser::Match* parentMatch8 = &match;
3816                 {
3817                     soulng::parser::Match match(false);
3818                     soulng::parser::Match* parentMatch9 = &match;
3819                     {
3820                         soulng::parser::Match match(false);
3821                         soulng::parser::Match* parentMatch10 = &match;
3822                         {
3823                             soulng::parser::Match match(false);
3824                             soulng::parser::Match* parentMatch11 = &match;
3825                             {
3826                                 soulng::parser::Match match(false);
3827                                 soulng::parser::Match* parentMatch12 = &match;
3828                                 {
3829                                     soulng::parser::Match match(false);
3830                                     soulng::parser::Match* parentMatch13 = &match;
3831                                     {
3832                                         soulng::parser::Match match(true);
3833                                         int64_t save = lexer.GetPos();
3834                                         soulng::parser::Match* parentMatch14 = &match;
3835                                         {
3836                                             soulng::parser::Match match = XmlParser::S(lexer);
3837                                             if (match.hit)
3838                                             {
3839                                                 *parentMatch14 = match;
3840                                             }
3841                                             else
3842                                             {
3843                                                 lexer.SetPos(save);
3844                                             }
3845                                         }
3846                                         *parentMatch13 = match;
3847                                     }
3848                                     if (match.hit)
3849                                     {
3850                                         soulng::parser::Match match(false);
3851                                         soulng::parser::Match* parentMatch15 = &match;
3852                                         {
3853                                             soulng::parser::Match match(false);
3854                                             if (*lexer == 124)
3855                                             {
3856                                                 ++lexer;
3857                                                 match.hit = true;
3858                                             }
3859                                             *parentMatch15 = match;
3860                                         }
3861                                         *parentMatch13 = match;
3862                                     }
3863                                     *parentMatch12 = match;
3864                                 }
3865                                 if (match.hit)
3866                                 {
3867                                     soulng::parser::Match match(false);
3868                                     soulng::parser::Match* parentMatch16 = &match;
3869                                     {
3870                                         soulng::parser::Match match(true);
3871                                         int64_t save = lexer.GetPos();
3872                                         soulng::parser::Match* parentMatch17 = &match;
3873                                         {
3874                                             soulng::parser::Match match = XmlParser::S(lexer);
3875                                             if (match.hit)
3876                                             {
3877                                                 *parentMatch17 = match;
3878                                             }
3879                                             else
3880                                             {
3881                                                 lexer.SetPos(save);
3882                                             }
3883                                         }
3884                                         *parentMatch16 = match;
3885                                     }
3886                                     *parentMatch12 = match;
3887                                 }
3888                                 *parentMatch11 = match;
3889                             }
3890                             if (match.hit)
3891                             {
3892                                 soulng::parser::Match match(false);
3893                                 soulng::parser::Match* parentMatch18 = &match;
3894                                 {
3895                                     soulng::parser::Match match = XmlParser::CP(lexer);
3896                                     *parentMatch18 = match;
3897                                 }
3898                                 *parentMatch11 = match;
3899                             }
3900                             *parentMatch10 = match;
3901                         }
3902                         *parentMatch9 = match;
3903                     }
3904                     if (match.hit)
3905                     {
3906                         soulng::parser::Match match(true);
3907                         soulng::parser::Match* parentMatch19 = &match;
3908                         while (true)
3909                         {
3910                             int64_t save = lexer.GetPos();
3911                             {
3912                                 soulng::parser::Match match(false);
3913                                 soulng::parser::Match* parentMatch20 = &match;
3914                                 {
3915                                     soulng::parser::Match match(false);
3916                                     soulng::parser::Match* parentMatch21 = &match;
3917                                     {
3918                                         soulng::parser::Match match(false);
3919                                         soulng::parser::Match* parentMatch22 = &match;
3920                                         {
3921                                             soulng::parser::Match match(false);
3922                                             soulng::parser::Match* parentMatch23 = &match;
3923                                             {
3924                                                 soulng::parser::Match match(true);
3925                                                 int64_t save = lexer.GetPos();
3926                                                 soulng::parser::Match* parentMatch24 = &match;
3927                                                 {
3928                                                     soulng::parser::Match match = XmlParser::S(lexer);
3929                                                     if (match.hit)
3930                                                     {
3931                                                         *parentMatch24 = match;
3932                                                     }
3933                                                     else
3934                                                     {
3935                                                         lexer.SetPos(save);
3936                                                     }
3937                                                 }
3938                                                 *parentMatch23 = match;
3939                                             }
3940                                             if (match.hit)
3941                                             {
3942                                                 soulng::parser::Match match(false);
3943                                                 soulng::parser::Match* parentMatch25 = &match;
3944                                                 {
3945                                                     soulng::parser::Match match(false);
3946                                                     if (*lexer == 124)
3947                                                     {
3948                                                         ++lexer;
3949                                                         match.hit = true;
3950                                                     }
3951                                                     *parentMatch25 = match;
3952                                                 }
3953                                                 *parentMatch23 = match;
3954                                             }
3955                                             *parentMatch22 = match;
3956                                         }
3957                                         if (match.hit)
3958                                         {
3959                                             soulng::parser::Match match(false);
3960                                             soulng::parser::Match* parentMatch26 = &match;
3961                                             {
3962                                                 soulng::parser::Match match(true);
3963                                                 int64_t save = lexer.GetPos();
3964                                                 soulng::parser::Match* parentMatch27 = &match;
3965                                                 {
3966                                                     soulng::parser::Match match = XmlParser::S(lexer);
3967                                                     if (match.hit)
3968                                                     {
3969                                                         *parentMatch27 = match;
3970                                                     }
3971                                                     else
3972                                                     {
3973                                                         lexer.SetPos(save);
3974                                                     }
3975                                                 }
3976                                                 *parentMatch26 = match;
3977                                             }
3978                                             *parentMatch22 = match;
3979                                         }
3980                                         *parentMatch21 = match;
3981                                     }
3982                                     if (match.hit)
3983                                     {
3984                                         soulng::parser::Match match(false);
3985                                         soulng::parser::Match* parentMatch28 = &match;
3986                                         {
3987                                             soulng::parser::Match match = XmlParser::CP(lexer);
3988                                             *parentMatch28 = match;
3989                                         }
3990                                         *parentMatch21 = match;
3991                                     }
3992                                     *parentMatch20 = match;
3993                                 }
3994                                 if (match.hit)
3995                                 {
3996                                     *parentMatch19 = match;
3997                                 }
3998                                 else
3999                                 {
4000                                     lexer.SetPos(save);
4001                                     break;
4002                                 }
4003                             }
4004                         }
4005                     }
4006                     *parentMatch8 = match;
4007                 }
4008                 *parentMatch2 = match;
4009             }
4010             *parentMatch1 = match;
4011         }
4012         if (match.hit)
4013         {
4014             soulng::parser::Match match(false);
4015             soulng::parser::Match* parentMatch29 = &match;
4016             {
4017                 soulng::parser::Match match(true);
4018                 int64_t save = lexer.GetPos();
4019                 soulng::parser::Match* parentMatch30 = &match;
4020                 {
4021                     soulng::parser::Match match = XmlParser::S(lexer);
4022                     if (match.hit)
4023                     {
4024                         *parentMatch30 = match;
4025                     }
4026                     else
4027                     {
4028                         lexer.SetPos(save);
4029                     }
4030                 }
4031                 *parentMatch29 = match;
4032             }
4033             *parentMatch1 = match;
4034         }
4035         *parentMatch0 = match;
4036     }
4037     if (match.hit)
4038     {
4039         soulng::parser::Match match(false);
4040         soulng::parser::Match* parentMatch31 = &match;
4041         {
4042             soulng::parser::Match match(false);
4043             if (*lexer == 41)
4044             {
4045                 ++lexer;
4046                 match.hit = true;
4047             }
4048             *parentMatch31 = match;
4049         }
4050         *parentMatch0 = match;
4051     }
4052     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4053 
4054 
4055 
4056 
4057 
4058     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4059     if (!match.hit)
4060     {
4061         match.value = nullptr;
4062     }
4063     return match;
4064 }
4065 
4066 soulng::parser::Match XmlParser::Seq(TrivialLexer& lexer)
4067 {
4068     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4069 
4070 
4071 
4072 
4073 
4074 
4075 
4076     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4077     soulng::parser::Match match(false);
4078     soulng::parser::Match* parentMatch0 = &match;
4079     {
4080         soulng::parser::Match match(false);
4081         soulng::parser::Match* parentMatch1 = &match;
4082         {
4083             soulng::parser::Match match(false);
4084             soulng::parser::Match* parentMatch2 = &match;
4085             {
4086                 soulng::parser::Match match(false);
4087                 soulng::parser::Match* parentMatch3 = &match;
4088                 {
4089                     soulng::parser::Match match(false);
4090                     soulng::parser::Match* parentMatch4 = &match;
4091                     {
4092                         soulng::parser::Match match(false);
4093                         if (*lexer == 40)
4094                         {
4095                             ++lexer;
4096                             match.hit = true;
4097                         }
4098                         *parentMatch4 = match;
4099                     }
4100                     if (match.hit)
4101                     {
4102                         soulng::parser::Match match(false);
4103                         soulng::parser::Match* parentMatch5 = &match;
4104                         {
4105                             soulng::parser::Match match(true);
4106                             int64_t save = lexer.GetPos();
4107                             soulng::parser::Match* parentMatch6 = &match;
4108                             {
4109                                 soulng::parser::Match match = XmlParser::S(lexer);
4110                                 if (match.hit)
4111                                 {
4112                                     *parentMatch6 = match;
4113                                 }
4114                                 else
4115                                 {
4116                                     lexer.SetPos(save);
4117                                 }
4118                             }
4119                             *parentMatch5 = match;
4120                         }
4121                         *parentMatch4 = match;
4122                     }
4123                     *parentMatch3 = match;
4124                 }
4125                 if (match.hit)
4126                 {
4127                     soulng::parser::Match match(false);
4128                     soulng::parser::Match* parentMatch7 = &match;
4129                     {
4130                         soulng::parser::Match match = XmlParser::CP(lexer);
4131                         *parentMatch7 = match;
4132                     }
4133                     *parentMatch3 = match;
4134                 }
4135                 *parentMatch2 = match;
4136             }
4137             if (match.hit)
4138             {
4139                 soulng::parser::Match match(false);
4140                 soulng::parser::Match* parentMatch8 = &match;
4141                 {
4142                     soulng::parser::Match match(true);
4143                     soulng::parser::Match* parentMatch9 = &match;
4144                     {
4145                         while (true)
4146                         {
4147                             int64_t save = lexer.GetPos();
4148                             {
4149                                 soulng::parser::Match match(false);
4150                                 soulng::parser::Match* parentMatch10 = &match;
4151                                 {
4152                                     soulng::parser::Match match(false);
4153                                     soulng::parser::Match* parentMatch11 = &match;
4154                                     {
4155                                         soulng::parser::Match match(false);
4156                                         soulng::parser::Match* parentMatch12 = &match;
4157                                         {
4158                                             soulng::parser::Match match(false);
4159                                             soulng::parser::Match* parentMatch13 = &match;
4160                                             {
4161                                                 soulng::parser::Match match(true);
4162                                                 int64_t save = lexer.GetPos();
4163                                                 soulng::parser::Match* parentMatch14 = &match;
4164                                                 {
4165                                                     soulng::parser::Match match = XmlParser::S(lexer);
4166                                                     if (match.hit)
4167                                                     {
4168                                                         *parentMatch14 = match;
4169                                                     }
4170                                                     else
4171                                                     {
4172                                                         lexer.SetPos(save);
4173                                                     }
4174                                                 }
4175                                                 *parentMatch13 = match;
4176                                             }
4177                                             if (match.hit)
4178                                             {
4179                                                 soulng::parser::Match match(false);
4180                                                 soulng::parser::Match* parentMatch15 = &match;
4181                                                 {
4182                                                     soulng::parser::Match match(false);
4183                                                     if (*lexer == 44)
4184                                                     {
4185                                                         ++lexer;
4186                                                         match.hit = true;
4187                                                     }
4188                                                     *parentMatch15 = match;
4189                                                 }
4190                                                 *parentMatch13 = match;
4191                                             }
4192                                             *parentMatch12 = match;
4193                                         }
4194                                         if (match.hit)
4195                                         {
4196                                             soulng::parser::Match match(false);
4197                                             soulng::parser::Match* parentMatch16 = &match;
4198                                             {
4199                                                 soulng::parser::Match match(true);
4200                                                 int64_t save = lexer.GetPos();
4201                                                 soulng::parser::Match* parentMatch17 = &match;
4202                                                 {
4203                                                     soulng::parser::Match match = XmlParser::S(lexer);
4204                                                     if (match.hit)
4205                                                     {
4206                                                         *parentMatch17 = match;
4207                                                     }
4208                                                     else
4209                                                     {
4210                                                         lexer.SetPos(save);
4211                                                     }
4212                                                 }
4213                                                 *parentMatch16 = match;
4214                                             }
4215                                             *parentMatch12 = match;
4216                                         }
4217                                         *parentMatch11 = match;
4218                                     }
4219                                     if (match.hit)
4220                                     {
4221                                         soulng::parser::Match match(false);
4222                                         soulng::parser::Match* parentMatch18 = &match;
4223                                         {
4224                                             soulng::parser::Match match = XmlParser::CP(lexer);
4225                                             *parentMatch18 = match;
4226                                         }
4227                                         *parentMatch11 = match;
4228                                     }
4229                                     *parentMatch10 = match;
4230                                 }
4231                                 if (match.hit)
4232                                 {
4233                                     *parentMatch9 = match;
4234                                 }
4235                                 else
4236                                 {
4237                                     lexer.SetPos(save);
4238                                     break;
4239                                 }
4240                             }
4241                         }
4242                     }
4243                     *parentMatch8 = match;
4244                 }
4245                 *parentMatch2 = match;
4246             }
4247             *parentMatch1 = match;
4248         }
4249         if (match.hit)
4250         {
4251             soulng::parser::Match match(false);
4252             soulng::parser::Match* parentMatch19 = &match;
4253             {
4254                 soulng::parser::Match match(true);
4255                 int64_t save = lexer.GetPos();
4256                 soulng::parser::Match* parentMatch20 = &match;
4257                 {
4258                     soulng::parser::Match match = XmlParser::S(lexer);
4259                     if (match.hit)
4260                     {
4261                         *parentMatch20 = match;
4262                     }
4263                     else
4264                     {
4265                         lexer.SetPos(save);
4266                     }
4267                 }
4268                 *parentMatch19 = match;
4269             }
4270             *parentMatch1 = match;
4271         }
4272         *parentMatch0 = match;
4273     }
4274     if (match.hit)
4275     {
4276         soulng::parser::Match match(false);
4277         soulng::parser::Match* parentMatch21 = &match;
4278         {
4279             soulng::parser::Match match(false);
4280             if (*lexer == 41)
4281             {
4282                 ++lexer;
4283                 match.hit = true;
4284             }
4285             *parentMatch21 = match;
4286         }
4287         *parentMatch0 = match;
4288     }
4289     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4290 
4291 
4292 
4293 
4294 
4295     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4296     if (!match.hit)
4297     {
4298         match.value = nullptr;
4299     }
4300     return match;
4301 }
4302 
4303 soulng::parser::Match XmlParser::Mixed(TrivialLexer& lexer)
4304 {
4305     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4306 
4307 
4308 
4309 
4310 
4311 
4312 
4313     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4314     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
4315     soulng::parser::Match match(false);
4316     soulng::parser::Match* parentMatch0 = &match;
4317     {
4318         int64_t save = lexer.GetPos();
4319         soulng::parser::Match match(false);
4320         soulng::parser::Match* parentMatch1 = &match;
4321         {
4322             soulng::parser::Match match(false);
4323             soulng::parser::Match* parentMatch2 = &match;
4324             {
4325                 soulng::parser::Match match(false);
4326                 soulng::parser::Match* parentMatch3 = &match;
4327                 {
4328                     soulng::parser::Match match(false);
4329                     soulng::parser::Match* parentMatch4 = &match;
4330                     {
4331                         soulng::parser::Match match(false);
4332                         soulng::parser::Match* parentMatch5 = &match;
4333                         {
4334                             soulng::parser::Match match(false);
4335                             if (*lexer == 40)
4336                             {
4337                                 ++lexer;
4338                                 match.hit = true;
4339                             }
4340                             *parentMatch5 = match;
4341                         }
4342                         if (match.hit)
4343                         {
4344                             soulng::parser::Match match(false);
4345                             soulng::parser::Match* parentMatch6 = &match;
4346                             {
4347                                 soulng::parser::Match match(true);
4348                                 int64_t save = lexer.GetPos();
4349                                 soulng::parser::Match* parentMatch7 = &match;
4350                                 {
4351                                     soulng::parser::Match match = XmlParser::S(lexer);
4352                                     if (match.hit)
4353                                     {
4354                                         *parentMatch7 = match;
4355                                     }
4356                                     else
4357                                     {
4358                                         lexer.SetPos(save);
4359                                     }
4360                                 }
4361                                 *parentMatch6 = match;
4362                             }
4363                             *parentMatch5 = match;
4364                         }
4365                         *parentMatch4 = match;
4366                     }
4367                     if (match.hit)
4368                     {
4369                         soulng::parser::Match match(false);
4370                         soulng::parser::Match* parentMatch8 = &match;
4371                         {
4372                             soulng::parser::Match match(true);
4373                             for (int i : s23)
4374                             {
4375                                 if (*lexer == i)
4376                                 {
4377                                     ++lexer;
4378                                 }
4379                                 else
4380                                 {
4381                                     match.hit = false;
4382                                     break;
4383                                 }
4384                             }
4385                             *parentMatch8 = match;
4386                         }
4387                         *parentMatch4 = match;
4388                     }
4389                     *parentMatch3 = match;
4390                 }
4391                 if (match.hit)
4392                 {
4393                     soulng::parser::Match match(false);
4394                     soulng::parser::Match* parentMatch9 = &match;
4395                     {
4396                         soulng::parser::Match match(true);
4397                         soulng::parser::Match* parentMatch10 = &match;
4398                         {
4399                             while (true)
4400                             {
4401                                 int64_t save = lexer.GetPos();
4402                                 {
4403                                     soulng::parser::Match match(false);
4404                                     soulng::parser::Match* parentMatch11 = &match;
4405                                     {
4406                                         soulng::parser::Match match(false);
4407                                         soulng::parser::Match* parentMatch12 = &match;
4408                                         {
4409                                             soulng::parser::Match match(false);
4410                                             soulng::parser::Match* parentMatch13 = &match;
4411                                             {
4412                                                 soulng::parser::Match match(false);
4413                                                 soulng::parser::Match* parentMatch14 = &match;
4414                                                 {
4415                                                     soulng::parser::Match match(true);
4416                                                     int64_t save = lexer.GetPos();
4417                                                     soulng::parser::Match* parentMatch15 = &match;
4418                                                     {
4419                                                         soulng::parser::Match match = XmlParser::S(lexer);
4420                                                         if (match.hit)
4421                                                         {
4422                                                             *parentMatch15 = match;
4423                                                         }
4424                                                         else
4425                                                         {
4426                                                             lexer.SetPos(save);
4427                                                         }
4428                                                     }
4429                                                     *parentMatch14 = match;
4430                                                 }
4431                                                 if (match.hit)
4432                                                 {
4433                                                     soulng::parser::Match match(false);
4434                                                     soulng::parser::Match* parentMatch16 = &match;
4435                                                     {
4436                                                         soulng::parser::Match match(false);
4437                                                         if (*lexer == 124)
4438                                                         {
4439                                                             ++lexer;
4440                                                             match.hit = true;
4441                                                         }
4442                                                         *parentMatch16 = match;
4443                                                     }
4444                                                     *parentMatch14 = match;
4445                                                 }
4446                                                 *parentMatch13 = match;
4447                                             }
4448                                             if (match.hit)
4449                                             {
4450                                                 soulng::parser::Match match(false);
4451                                                 soulng::parser::Match* parentMatch17 = &match;
4452                                                 {
4453                                                     soulng::parser::Match match(true);
4454                                                     int64_t save = lexer.GetPos();
4455                                                     soulng::parser::Match* parentMatch18 = &match;
4456                                                     {
4457                                                         soulng::parser::Match match = XmlParser::S(lexer);
4458                                                         if (match.hit)
4459                                                         {
4460                                                             *parentMatch18 = match;
4461                                                         }
4462                                                         else
4463                                                         {
4464                                                             lexer.SetPos(save);
4465                                                         }
4466                                                     }
4467                                                     *parentMatch17 = match;
4468                                                 }
4469                                                 *parentMatch13 = match;
4470                                             }
4471                                             *parentMatch12 = match;
4472                                         }
4473                                         if (match.hit)
4474                                         {
4475                                             soulng::parser::Match match(false);
4476                                             soulng::parser::Match* parentMatch19 = &match;
4477                                             {
4478                                                 soulng::parser::Match match = XmlParser::Name(lexer);
4479                                                 name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
4480                                                 *parentMatch19 = match;
4481                                             }
4482                                             *parentMatch12 = match;
4483                                         }
4484                                         *parentMatch11 = match;
4485                                     }
4486                                     if (match.hit)
4487                                     {
4488                                         *parentMatch10 = match;
4489                                     }
4490                                     else
4491                                     {
4492                                         lexer.SetPos(save);
4493                                         break;
4494                                     }
4495                                 }
4496                             }
4497                         }
4498                         *parentMatch9 = match;
4499                     }
4500                     *parentMatch3 = match;
4501                 }
4502                 *parentMatch2 = match;
4503             }
4504             if (match.hit)
4505             {
4506                 soulng::parser::Match match(false);
4507                 soulng::parser::Match* parentMatch20 = &match;
4508                 {
4509                     soulng::parser::Match match(true);
4510                     int64_t save = lexer.GetPos();
4511                     soulng::parser::Match* parentMatch21 = &match;
4512                     {
4513                         soulng::parser::Match match = XmlParser::S(lexer);
4514                         if (match.hit)
4515                         {
4516                             *parentMatch21 = match;
4517                         }
4518                         else
4519                         {
4520                             lexer.SetPos(save);
4521                         }
4522                     }
4523                     *parentMatch20 = match;
4524                 }
4525                 *parentMatch2 = match;
4526             }
4527             *parentMatch1 = match;
4528         }
4529         if (match.hit)
4530         {
4531             soulng::parser::Match match(false);
4532             soulng::parser::Match* parentMatch22 = &match;
4533             {
4534                 soulng::parser::Match match(true);
4535                 for (int i : s24)
4536                 {
4537                     if (*lexer == i)
4538                     {
4539                         ++lexer;
4540                     }
4541                     else
4542                     {
4543                         match.hit = false;
4544                         break;
4545                     }
4546                 }
4547                 *parentMatch22 = match;
4548             }
4549             *parentMatch1 = match;
4550         }
4551         *parentMatch0 = match;
4552         if (!match.hit)
4553         {
4554             soulng::parser::Match match(false);
4555             soulng::parser::Match* parentMatch23 = &match;
4556             lexer.SetPos(save);
4557             {
4558                 soulng::parser::Match match(false);
4559                 soulng::parser::Match* parentMatch24 = &match;
4560                 {
4561                     soulng::parser::Match match(false);
4562                     soulng::parser::Match* parentMatch25 = &match;
4563                     {
4564                         soulng::parser::Match match(false);
4565                         soulng::parser::Match* parentMatch26 = &match;
4566                         {
4567                             soulng::parser::Match match(false);
4568                             soulng::parser::Match* parentMatch27 = &match;
4569                             {
4570                                 soulng::parser::Match match(false);
4571                                 if (*lexer == 40)
4572                                 {
4573                                     ++lexer;
4574                                     match.hit = true;
4575                                 }
4576                                 *parentMatch27 = match;
4577                             }
4578                             if (match.hit)
4579                             {
4580                                 soulng::parser::Match match(false);
4581                                 soulng::parser::Match* parentMatch28 = &match;
4582                                 {
4583                                     soulng::parser::Match match(true);
4584                                     int64_t save = lexer.GetPos();
4585                                     soulng::parser::Match* parentMatch29 = &match;
4586                                     {
4587                                         soulng::parser::Match match = XmlParser::S(lexer);
4588                                         if (match.hit)
4589                                         {
4590                                             *parentMatch29 = match;
4591                                         }
4592                                         else
4593                                         {
4594                                             lexer.SetPos(save);
4595                                         }
4596                                     }
4597                                     *parentMatch28 = match;
4598                                 }
4599                                 *parentMatch27 = match;
4600                             }
4601                             *parentMatch26 = match;
4602                         }
4603                         if (match.hit)
4604                         {
4605                             soulng::parser::Match match(false);
4606                             soulng::parser::Match* parentMatch30 = &match;
4607                             {
4608                                 soulng::parser::Match match(true);
4609                                 for (int i : s25)
4610                                 {
4611                                     if (*lexer == i)
4612                                     {
4613                                         ++lexer;
4614                                     }
4615                                     else
4616                                     {
4617                                         match.hit = false;
4618                                         break;
4619                                     }
4620                                 }
4621                                 *parentMatch30 = match;
4622                             }
4623                             *parentMatch26 = match;
4624                         }
4625                         *parentMatch25 = match;
4626                     }
4627                     if (match.hit)
4628                     {
4629                         soulng::parser::Match match(false);
4630                         soulng::parser::Match* parentMatch31 = &match;
4631                         {
4632                             soulng::parser::Match match(true);
4633                             int64_t save = lexer.GetPos();
4634                             soulng::parser::Match* parentMatch32 = &match;
4635                             {
4636                                 soulng::parser::Match match = XmlParser::S(lexer);
4637                                 if (match.hit)
4638                                 {
4639                                     *parentMatch32 = match;
4640                                 }
4641                                 else
4642                                 {
4643                                     lexer.SetPos(save);
4644                                 }
4645                             }
4646                             *parentMatch31 = match;
4647                         }
4648                         *parentMatch25 = match;
4649                     }
4650                     *parentMatch24 = match;
4651                 }
4652                 if (match.hit)
4653                 {
4654                     soulng::parser::Match match(false);
4655                     soulng::parser::Match* parentMatch33 = &match;
4656                     {
4657                         soulng::parser::Match match(false);
4658                         if (*lexer == 41)
4659                         {
4660                             ++lexer;
4661                             match.hit = true;
4662                         }
4663                         *parentMatch33 = match;
4664                     }
4665                     *parentMatch24 = match;
4666                 }
4667                 *parentMatch23 = match;
4668             }
4669             *parentMatch0 = match;
4670         }
4671     }
4672     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4673 
4674 
4675 
4676 
4677 
4678     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4679     if (!match.hit)
4680     {
4681         match.value = nullptr;
4682     }
4683     return match;
4684 }
4685 
4686 soulng::parser::Match XmlParser::AttlistDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
4687 {
4688     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4689 
4690 
4691 
4692 
4693 
4694 
4695 
4696     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4697     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
4698     soulng::parser::Match match(false);
4699     soulng::parser::Match* parentMatch0 = &match;
4700     {
4701         soulng::parser::Match match(false);
4702         soulng::parser::Match* parentMatch1 = &match;
4703         {
4704             soulng::parser::Match match(false);
4705             soulng::parser::Match* parentMatch2 = &match;
4706             {
4707                 soulng::parser::Match match(false);
4708                 soulng::parser::Match* parentMatch3 = &match;
4709                 {
4710                     soulng::parser::Match match(false);
4711                     soulng::parser::Match* parentMatch4 = &match;
4712                     {
4713                         soulng::parser::Match match(true);
4714                         for (int i : s26)
4715                         {
4716                             if (*lexer == i)
4717                             {
4718                                 ++lexer;
4719                             }
4720                             else
4721                             {
4722                                 match.hit = false;
4723                                 break;
4724                             }
4725                         }
4726                         *parentMatch4 = match;
4727                     }
4728                     if (match.hit)
4729                     {
4730                         soulng::parser::Match match(false);
4731                         soulng::parser::Match* parentMatch5 = &match;
4732                         {
4733                             soulng::parser::Match match = XmlParser::S(lexer);
4734                             *parentMatch5 = match;
4735                         }
4736                         *parentMatch4 = match;
4737                     }
4738                     *parentMatch3 = match;
4739                 }
4740                 if (match.hit)
4741                 {
4742                     soulng::parser::Match match(false);
4743                     soulng::parser::Match* parentMatch6 = &match;
4744                     {
4745                         soulng::parser::Match match = XmlParser::Name(lexer);
4746                         name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
4747                         *parentMatch6 = match;
4748                     }
4749                     *parentMatch3 = match;
4750                 }
4751                 *parentMatch2 = match;
4752             }
4753             if (match.hit)
4754             {
4755                 soulng::parser::Match match(false);
4756                 soulng::parser::Match* parentMatch7 = &match;
4757                 {
4758                     soulng::parser::Match match(true);
4759                     soulng::parser::Match* parentMatch8 = &match;
4760                     {
4761                         while (true)
4762                         {
4763                             int64_t save = lexer.GetPos();
4764                             {
4765                                 soulng::parser::Match match = XmlParser::AttDef(lexerprocessor);
4766                                 if (match.hit)
4767                                 {
4768                                     *parentMatch8 = match;
4769                                 }
4770                                 else
4771                                 {
4772                                     lexer.SetPos(save);
4773                                     break;
4774                                 }
4775                             }
4776                         }
4777                     }
4778                     *parentMatch7 = match;
4779                 }
4780                 *parentMatch2 = match;
4781             }
4782             *parentMatch1 = match;
4783         }
4784         if (match.hit)
4785         {
4786             soulng::parser::Match match(false);
4787             soulng::parser::Match* parentMatch9 = &match;
4788             {
4789                 soulng::parser::Match match(true);
4790                 int64_t save = lexer.GetPos();
4791                 soulng::parser::Match* parentMatch10 = &match;
4792                 {
4793                     soulng::parser::Match match = XmlParser::S(lexer);
4794                     if (match.hit)
4795                     {
4796                         *parentMatch10 = match;
4797                     }
4798                     else
4799                     {
4800                         lexer.SetPos(save);
4801                     }
4802                 }
4803                 *parentMatch9 = match;
4804             }
4805             *parentMatch1 = match;
4806         }
4807         *parentMatch0 = match;
4808     }
4809     if (match.hit)
4810     {
4811         soulng::parser::Match match(false);
4812         soulng::parser::Match* parentMatch11 = &match;
4813         {
4814             soulng::parser::Match match(false);
4815             if (*lexer == 62)
4816             {
4817                 ++lexer;
4818                 match.hit = true;
4819             }
4820             *parentMatch11 = match;
4821         }
4822         *parentMatch0 = match;
4823     }
4824     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4825 
4826 
4827 
4828 
4829 
4830     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4831     if (!match.hit)
4832     {
4833         match.value = nullptr;
4834     }
4835     return match;
4836 }
4837 
4838 soulng::parser::Match XmlParser::AttDef(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
4839 {
4840     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4841 
4842 
4843 
4844 
4845 
4846 
4847 
4848     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4849     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
4850     soulng::parser::Match match(false);
4851     soulng::parser::Match* parentMatch0 = &match;
4852     {
4853         soulng::parser::Match match(false);
4854         soulng::parser::Match* parentMatch1 = &match;
4855         {
4856             soulng::parser::Match match(false);
4857             soulng::parser::Match* parentMatch2 = &match;
4858             {
4859                 soulng::parser::Match match(false);
4860                 soulng::parser::Match* parentMatch3 = &match;
4861                 {
4862                     soulng::parser::Match match(false);
4863                     soulng::parser::Match* parentMatch4 = &match;
4864                     {
4865                         soulng::parser::Match match = XmlParser::S(lexer);
4866                         *parentMatch4 = match;
4867                     }
4868                     if (match.hit)
4869                     {
4870                         soulng::parser::Match match(false);
4871                         soulng::parser::Match* parentMatch5 = &match;
4872                         {
4873                             soulng::parser::Match match = XmlParser::Name(lexer);
4874                             name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
4875                             *parentMatch5 = match;
4876                         }
4877                         *parentMatch4 = match;
4878                     }
4879                     *parentMatch3 = match;
4880                 }
4881                 if (match.hit)
4882                 {
4883                     soulng::parser::Match match(false);
4884                     soulng::parser::Match* parentMatch6 = &match;
4885                     {
4886                         soulng::parser::Match match = XmlParser::S(lexer);
4887                         *parentMatch6 = match;
4888                     }
4889                     *parentMatch3 = match;
4890                 }
4891                 *parentMatch2 = match;
4892             }
4893             if (match.hit)
4894             {
4895                 soulng::parser::Match match(false);
4896                 soulng::parser::Match* parentMatch7 = &match;
4897                 {
4898                     soulng::parser::Match match = XmlParser::AttType(lexer);
4899                     *parentMatch7 = match;
4900                 }
4901                 *parentMatch2 = match;
4902             }
4903             *parentMatch1 = match;
4904         }
4905         if (match.hit)
4906         {
4907             soulng::parser::Match match(false);
4908             soulng::parser::Match* parentMatch8 = &match;
4909             {
4910                 soulng::parser::Match match = XmlParser::S(lexer);
4911                 *parentMatch8 = match;
4912             }
4913             *parentMatch1 = match;
4914         }
4915         *parentMatch0 = match;
4916     }
4917     if (match.hit)
4918     {
4919         soulng::parser::Match match(false);
4920         soulng::parser::Match* parentMatch9 = &match;
4921         {
4922             soulng::parser::Match match = XmlParser::DefaultDecl(lexerprocessor);
4923             *parentMatch9 = match;
4924         }
4925         *parentMatch0 = match;
4926     }
4927     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4928 
4929 
4930 
4931 
4932 
4933     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4934     if (!match.hit)
4935     {
4936         match.value = nullptr;
4937     }
4938     return match;
4939 }
4940 
4941 soulng::parser::Match XmlParser::AttType(TrivialLexer& lexer)
4942 {
4943     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4944 
4945 
4946 
4947 
4948 
4949 
4950 
4951     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4952     soulng::parser::Match match(false);
4953     soulng::parser::Match* parentMatch0 = &match;
4954     {
4955         int64_t save = lexer.GetPos();
4956         soulng::parser::Match match(false);
4957         soulng::parser::Match* parentMatch1 = &match;
4958         {
4959             int64_t save = lexer.GetPos();
4960             soulng::parser::Match match = XmlParser::StringType(lexer);
4961             *parentMatch1 = match;
4962             if (!match.hit)
4963             {
4964                 soulng::parser::Match match(false);
4965                 soulng::parser::Match* parentMatch2 = &match;
4966                 lexer.SetPos(save);
4967                 {
4968                     soulng::parser::Match match = XmlParser::TokenizedType(lexer);
4969                     *parentMatch2 = match;
4970                 }
4971                 *parentMatch1 = match;
4972             }
4973         }
4974         *parentMatch0 = match;
4975         if (!match.hit)
4976         {
4977             soulng::parser::Match match(false);
4978             soulng::parser::Match* parentMatch3 = &match;
4979             lexer.SetPos(save);
4980             {
4981                 soulng::parser::Match match = XmlParser::EnumeratedType(lexer);
4982                 *parentMatch3 = match;
4983             }
4984             *parentMatch0 = match;
4985         }
4986     }
4987     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
4988 
4989 
4990 
4991 
4992 
4993     #endif // SOULNG_PARSER_DEBUG_SUPPORT
4994     if (!match.hit)
4995     {
4996         match.value = nullptr;
4997     }
4998     return match;
4999 }
5000 
5001 soulng::parser::Match XmlParser::StringType(TrivialLexer& lexer)
5002 {
5003     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5004 
5005 
5006 
5007 
5008 
5009 
5010 
5011     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5012     soulng::parser::Match match(true);
5013     for (int i : s27)
5014     {
5015         if (*lexer == i)
5016         {
5017             ++lexer;
5018         }
5019         else
5020         {
5021             match.hit = false;
5022             break;
5023         }
5024     }
5025     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5026 
5027 
5028 
5029 
5030 
5031     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5032     if (!match.hit)
5033     {
5034         match.value = nullptr;
5035     }
5036     return match;
5037 }
5038 
5039 soulng::parser::Match XmlParser::TokenizedType(TrivialLexer& lexer)
5040 {
5041     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5042 
5043 
5044 
5045 
5046 
5047 
5048 
5049     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5050     soulng::parser::Match match(false);
5051     soulng::parser::Match* parentMatch0 = &match;
5052     {
5053         int64_t save = lexer.GetPos();
5054         soulng::parser::Match match(false);
5055         soulng::parser::Match* parentMatch1 = &match;
5056         {
5057             int64_t save = lexer.GetPos();
5058             soulng::parser::Match match(false);
5059             soulng::parser::Match* parentMatch2 = &match;
5060             {
5061                 int64_t save = lexer.GetPos();
5062                 soulng::parser::Match match(false);
5063                 soulng::parser::Match* parentMatch3 = &match;
5064                 {
5065                     int64_t save = lexer.GetPos();
5066                     soulng::parser::Match match(false);
5067                     soulng::parser::Match* parentMatch4 = &match;
5068                     {
5069                         int64_t save = lexer.GetPos();
5070                         soulng::parser::Match match(false);
5071                         soulng::parser::Match* parentMatch5 = &match;
5072                         {
5073                             int64_t save = lexer.GetPos();
5074                             soulng::parser::Match match(true);
5075                             for (int i : s28)
5076                             {
5077                                 if (*lexer == i)
5078                                 {
5079                                     ++lexer;
5080                                 }
5081                                 else
5082                                 {
5083                                     match.hit = false;
5084                                     break;
5085                                 }
5086                             }
5087                             *parentMatch5 = match;
5088                             if (!match.hit)
5089                             {
5090                                 soulng::parser::Match match(false);
5091                                 soulng::parser::Match* parentMatch6 = &match;
5092                                 lexer.SetPos(save);
5093                                 {
5094                                     soulng::parser::Match match(true);
5095                                     for (int i : s29)
5096                                     {
5097                                         if (*lexer == i)
5098                                         {
5099                                             ++lexer;
5100                                         }
5101                                         else
5102                                         {
5103                                             match.hit = false;
5104                                             break;
5105                                         }
5106                                     }
5107                                     *parentMatch6 = match;
5108                                 }
5109                                 *parentMatch5 = match;
5110                             }
5111                         }
5112                         *parentMatch4 = match;
5113                         if (!match.hit)
5114                         {
5115                             soulng::parser::Match match(false);
5116                             soulng::parser::Match* parentMatch7 = &match;
5117                             lexer.SetPos(save);
5118                             {
5119                                 soulng::parser::Match match(true);
5120                                 for (int i : s30)
5121                                 {
5122                                     if (*lexer == i)
5123                                     {
5124                                         ++lexer;
5125                                     }
5126                                     else
5127                                     {
5128                                         match.hit = false;
5129                                         break;
5130                                     }
5131                                 }
5132                                 *parentMatch7 = match;
5133                             }
5134                             *parentMatch4 = match;
5135                         }
5136                     }
5137                     *parentMatch3 = match;
5138                     if (!match.hit)
5139                     {
5140                         soulng::parser::Match match(false);
5141                         soulng::parser::Match* parentMatch8 = &match;
5142                         lexer.SetPos(save);
5143                         {
5144                             soulng::parser::Match match(true);
5145                             for (int i : s31)
5146                             {
5147                                 if (*lexer == i)
5148                                 {
5149                                     ++lexer;
5150                                 }
5151                                 else
5152                                 {
5153                                     match.hit = false;
5154                                     break;
5155                                 }
5156                             }
5157                             *parentMatch8 = match;
5158                         }
5159                         *parentMatch3 = match;
5160                     }
5161                 }
5162                 *parentMatch2 = match;
5163                 if (!match.hit)
5164                 {
5165                     soulng::parser::Match match(false);
5166                     soulng::parser::Match* parentMatch9 = &match;
5167                     lexer.SetPos(save);
5168                     {
5169                         soulng::parser::Match match(true);
5170                         for (int i : s32)
5171                         {
5172                             if (*lexer == i)
5173                             {
5174                                 ++lexer;
5175                             }
5176                             else
5177                             {
5178                                 match.hit = false;
5179                                 break;
5180                             }
5181                         }
5182                         *parentMatch9 = match;
5183                     }
5184                     *parentMatch2 = match;
5185                 }
5186             }
5187             *parentMatch1 = match;
5188             if (!match.hit)
5189             {
5190                 soulng::parser::Match match(false);
5191                 soulng::parser::Match* parentMatch10 = &match;
5192                 lexer.SetPos(save);
5193                 {
5194                     soulng::parser::Match match(true);
5195                     for (int i : s33)
5196                     {
5197                         if (*lexer == i)
5198                         {
5199                             ++lexer;
5200                         }
5201                         else
5202                         {
5203                             match.hit = false;
5204                             break;
5205                         }
5206                     }
5207                     *parentMatch10 = match;
5208                 }
5209                 *parentMatch1 = match;
5210             }
5211         }
5212         *parentMatch0 = match;
5213         if (!match.hit)
5214         {
5215             soulng::parser::Match match(false);
5216             soulng::parser::Match* parentMatch11 = &match;
5217             lexer.SetPos(save);
5218             {
5219                 soulng::parser::Match match(true);
5220                 for (int i : s34)
5221                 {
5222                     if (*lexer == i)
5223                     {
5224                         ++lexer;
5225                     }
5226                     else
5227                     {
5228                         match.hit = false;
5229                         break;
5230                     }
5231                 }
5232                 *parentMatch11 = match;
5233             }
5234             *parentMatch0 = match;
5235         }
5236     }
5237     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5238 
5239 
5240 
5241 
5242 
5243     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5244     if (!match.hit)
5245     {
5246         match.value = nullptr;
5247     }
5248     return match;
5249 }
5250 
5251 soulng::parser::Match XmlParser::EnumeratedType(TrivialLexer& lexer)
5252 {
5253     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5254 
5255 
5256 
5257 
5258 
5259 
5260 
5261     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5262     soulng::parser::Match match(false);
5263     soulng::parser::Match* parentMatch0 = &match;
5264     {
5265         int64_t save = lexer.GetPos();
5266         soulng::parser::Match match = XmlParser::NotationType(lexer);
5267         *parentMatch0 = match;
5268         if (!match.hit)
5269         {
5270             soulng::parser::Match match(false);
5271             soulng::parser::Match* parentMatch1 = &match;
5272             lexer.SetPos(save);
5273             {
5274                 soulng::parser::Match match = XmlParser::Enumeration(lexer);
5275                 *parentMatch1 = match;
5276             }
5277             *parentMatch0 = match;
5278         }
5279     }
5280     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5281 
5282 
5283 
5284 
5285 
5286     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5287     if (!match.hit)
5288     {
5289         match.value = nullptr;
5290     }
5291     return match;
5292 }
5293 
5294 soulng::parser::Match XmlParser::NotationType(TrivialLexer& lexer)
5295 {
5296     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5297 
5298 
5299 
5300 
5301 
5302 
5303 
5304     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5305     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>f;
5306     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>n;
5307     soulng::parser::Match match(false);
5308     soulng::parser::Match* parentMatch0 = &match;
5309     {
5310         soulng::parser::Match match(false);
5311         soulng::parser::Match* parentMatch1 = &match;
5312         {
5313             soulng::parser::Match match(false);
5314             soulng::parser::Match* parentMatch2 = &match;
5315             {
5316                 soulng::parser::Match match(false);
5317                 soulng::parser::Match* parentMatch3 = &match;
5318                 {
5319                     soulng::parser::Match match(false);
5320                     soulng::parser::Match* parentMatch4 = &match;
5321                     {
5322                         soulng::parser::Match match(false);
5323                         soulng::parser::Match* parentMatch5 = &match;
5324                         {
5325                             soulng::parser::Match match(false);
5326                             soulng::parser::Match* parentMatch6 = &match;
5327                             {
5328                                 soulng::parser::Match match(true);
5329                                 for (int i : s35)
5330                                 {
5331                                     if (*lexer == i)
5332                                     {
5333                                         ++lexer;
5334                                     }
5335                                     else
5336                                     {
5337                                         match.hit = false;
5338                                         break;
5339                                     }
5340                                 }
5341                                 *parentMatch6 = match;
5342                             }
5343                             if (match.hit)
5344                             {
5345                                 soulng::parser::Match match(false);
5346                                 soulng::parser::Match* parentMatch7 = &match;
5347                                 {
5348                                     soulng::parser::Match match = XmlParser::S(lexer);
5349                                     *parentMatch7 = match;
5350                                 }
5351                                 *parentMatch6 = match;
5352                             }
5353                             *parentMatch5 = match;
5354                         }
5355                         if (match.hit)
5356                         {
5357                             soulng::parser::Match match(false);
5358                             soulng::parser::Match* parentMatch8 = &match;
5359                             {
5360                                 soulng::parser::Match match(false);
5361                                 if (*lexer == 40)
5362                                 {
5363                                     ++lexer;
5364                                     match.hit = true;
5365                                 }
5366                                 *parentMatch8 = match;
5367                             }
5368                             *parentMatch5 = match;
5369                         }
5370                         *parentMatch4 = match;
5371                     }
5372                     if (match.hit)
5373                     {
5374                         soulng::parser::Match match(false);
5375                         soulng::parser::Match* parentMatch9 = &match;
5376                         {
5377                             soulng::parser::Match match(true);
5378                             int64_t save = lexer.GetPos();
5379                             soulng::parser::Match* parentMatch10 = &match;
5380                             {
5381                                 soulng::parser::Match match = XmlParser::S(lexer);
5382                                 if (match.hit)
5383                                 {
5384                                     *parentMatch10 = match;
5385                                 }
5386                                 else
5387                                 {
5388                                     lexer.SetPos(save);
5389                                 }
5390                             }
5391                             *parentMatch9 = match;
5392                         }
5393                         *parentMatch4 = match;
5394                     }
5395                     *parentMatch3 = match;
5396                 }
5397                 if (match.hit)
5398                 {
5399                     soulng::parser::Match match(false);
5400                     soulng::parser::Match* parentMatch11 = &match;
5401                     {
5402                         soulng::parser::Match match = XmlParser::Name(lexer);
5403                         f.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
5404                         *parentMatch11 = match;
5405                     }
5406                     *parentMatch3 = match;
5407                 }
5408                 *parentMatch2 = match;
5409             }
5410             if (match.hit)
5411             {
5412                 soulng::parser::Match match(false);
5413                 soulng::parser::Match* parentMatch12 = &match;
5414                 {
5415                     soulng::parser::Match match(true);
5416                     soulng::parser::Match* parentMatch13 = &match;
5417                     {
5418                         while (true)
5419                         {
5420                             int64_t save = lexer.GetPos();
5421                             {
5422                                 soulng::parser::Match match(false);
5423                                 soulng::parser::Match* parentMatch14 = &match;
5424                                 {
5425                                     soulng::parser::Match match(false);
5426                                     soulng::parser::Match* parentMatch15 = &match;
5427                                     {
5428                                         soulng::parser::Match match(false);
5429                                         soulng::parser::Match* parentMatch16 = &match;
5430                                         {
5431                                             soulng::parser::Match match(false);
5432                                             soulng::parser::Match* parentMatch17 = &match;
5433                                             {
5434                                                 soulng::parser::Match match(true);
5435                                                 int64_t save = lexer.GetPos();
5436                                                 soulng::parser::Match* parentMatch18 = &match;
5437                                                 {
5438                                                     soulng::parser::Match match = XmlParser::S(lexer);
5439                                                     if (match.hit)
5440                                                     {
5441                                                         *parentMatch18 = match;
5442                                                     }
5443                                                     else
5444                                                     {
5445                                                         lexer.SetPos(save);
5446                                                     }
5447                                                 }
5448                                                 *parentMatch17 = match;
5449                                             }
5450                                             if (match.hit)
5451                                             {
5452                                                 soulng::parser::Match match(false);
5453                                                 soulng::parser::Match* parentMatch19 = &match;
5454                                                 {
5455                                                     soulng::parser::Match match(false);
5456                                                     if (*lexer == 124)
5457                                                     {
5458                                                         ++lexer;
5459                                                         match.hit = true;
5460                                                     }
5461                                                     *parentMatch19 = match;
5462                                                 }
5463                                                 *parentMatch17 = match;
5464                                             }
5465                                             *parentMatch16 = match;
5466                                         }
5467                                         if (match.hit)
5468                                         {
5469                                             soulng::parser::Match match(false);
5470                                             soulng::parser::Match* parentMatch20 = &match;
5471                                             {
5472                                                 soulng::parser::Match match(true);
5473                                                 int64_t save = lexer.GetPos();
5474                                                 soulng::parser::Match* parentMatch21 = &match;
5475                                                 {
5476                                                     soulng::parser::Match match = XmlParser::S(lexer);
5477                                                     if (match.hit)
5478                                                     {
5479                                                         *parentMatch21 = match;
5480                                                     }
5481                                                     else
5482                                                     {
5483                                                         lexer.SetPos(save);
5484                                                     }
5485                                                 }
5486                                                 *parentMatch20 = match;
5487                                             }
5488                                             *parentMatch16 = match;
5489                                         }
5490                                         *parentMatch15 = match;
5491                                     }
5492                                     if (match.hit)
5493                                     {
5494                                         soulng::parser::Match match(false);
5495                                         soulng::parser::Match* parentMatch22 = &match;
5496                                         {
5497                                             soulng::parser::Match match = XmlParser::Name(lexer);
5498                                             n.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
5499                                             *parentMatch22 = match;
5500                                         }
5501                                         *parentMatch15 = match;
5502                                     }
5503                                     *parentMatch14 = match;
5504                                 }
5505                                 if (match.hit)
5506                                 {
5507                                     *parentMatch13 = match;
5508                                 }
5509                                 else
5510                                 {
5511                                     lexer.SetPos(save);
5512                                     break;
5513                                 }
5514                             }
5515                         }
5516                     }
5517                     *parentMatch12 = match;
5518                 }
5519                 *parentMatch2 = match;
5520             }
5521             *parentMatch1 = match;
5522         }
5523         if (match.hit)
5524         {
5525             soulng::parser::Match match(false);
5526             soulng::parser::Match* parentMatch23 = &match;
5527             {
5528                 soulng::parser::Match match(true);
5529                 int64_t save = lexer.GetPos();
5530                 soulng::parser::Match* parentMatch24 = &match;
5531                 {
5532                     soulng::parser::Match match = XmlParser::S(lexer);
5533                     if (match.hit)
5534                     {
5535                         *parentMatch24 = match;
5536                     }
5537                     else
5538                     {
5539                         lexer.SetPos(save);
5540                     }
5541                 }
5542                 *parentMatch23 = match;
5543             }
5544             *parentMatch1 = match;
5545         }
5546         *parentMatch0 = match;
5547     }
5548     if (match.hit)
5549     {
5550         soulng::parser::Match match(false);
5551         soulng::parser::Match* parentMatch25 = &match;
5552         {
5553             soulng::parser::Match match(false);
5554             if (*lexer == 41)
5555             {
5556                 ++lexer;
5557                 match.hit = true;
5558             }
5559             *parentMatch25 = match;
5560         }
5561         *parentMatch0 = match;
5562     }
5563     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5564 
5565 
5566 
5567 
5568 
5569     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5570     if (!match.hit)
5571     {
5572         match.value = nullptr;
5573     }
5574     return match;
5575 }
5576 
5577 soulng::parser::Match XmlParser::Enumeration(TrivialLexer& lexer)
5578 {
5579     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5580 
5581 
5582 
5583 
5584 
5585 
5586 
5587     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5588     soulng::parser::Match match(false);
5589     soulng::parser::Match* parentMatch0 = &match;
5590     {
5591         soulng::parser::Match match(false);
5592         soulng::parser::Match* parentMatch1 = &match;
5593         {
5594             soulng::parser::Match match(false);
5595             soulng::parser::Match* parentMatch2 = &match;
5596             {
5597                 soulng::parser::Match match(false);
5598                 soulng::parser::Match* parentMatch3 = &match;
5599                 {
5600                     soulng::parser::Match match(false);
5601                     soulng::parser::Match* parentMatch4 = &match;
5602                     {
5603                         soulng::parser::Match match(false);
5604                         if (*lexer == 40)
5605                         {
5606                             ++lexer;
5607                             match.hit = true;
5608                         }
5609                         *parentMatch4 = match;
5610                     }
5611                     if (match.hit)
5612                     {
5613                         soulng::parser::Match match(false);
5614                         soulng::parser::Match* parentMatch5 = &match;
5615                         {
5616                             soulng::parser::Match match(true);
5617                             int64_t save = lexer.GetPos();
5618                             soulng::parser::Match* parentMatch6 = &match;
5619                             {
5620                                 soulng::parser::Match match = XmlParser::S(lexer);
5621                                 if (match.hit)
5622                                 {
5623                                     *parentMatch6 = match;
5624                                 }
5625                                 else
5626                                 {
5627                                     lexer.SetPos(save);
5628                                 }
5629                             }
5630                             *parentMatch5 = match;
5631                         }
5632                         *parentMatch4 = match;
5633                     }
5634                     *parentMatch3 = match;
5635                 }
5636                 if (match.hit)
5637                 {
5638                     soulng::parser::Match match(false);
5639                     soulng::parser::Match* parentMatch7 = &match;
5640                     {
5641                         soulng::parser::Match match = XmlParser::Nmtoken(lexer);
5642                         *parentMatch7 = match;
5643                     }
5644                     *parentMatch3 = match;
5645                 }
5646                 *parentMatch2 = match;
5647             }
5648             if (match.hit)
5649             {
5650                 soulng::parser::Match match(false);
5651                 soulng::parser::Match* parentMatch8 = &match;
5652                 {
5653                     soulng::parser::Match match(true);
5654                     soulng::parser::Match* parentMatch9 = &match;
5655                     {
5656                         while (true)
5657                         {
5658                             int64_t save = lexer.GetPos();
5659                             {
5660                                 soulng::parser::Match match(false);
5661                                 soulng::parser::Match* parentMatch10 = &match;
5662                                 {
5663                                     soulng::parser::Match match(false);
5664                                     soulng::parser::Match* parentMatch11 = &match;
5665                                     {
5666                                         soulng::parser::Match match(false);
5667                                         soulng::parser::Match* parentMatch12 = &match;
5668                                         {
5669                                             soulng::parser::Match match(false);
5670                                             soulng::parser::Match* parentMatch13 = &match;
5671                                             {
5672                                                 soulng::parser::Match match(true);
5673                                                 int64_t save = lexer.GetPos();
5674                                                 soulng::parser::Match* parentMatch14 = &match;
5675                                                 {
5676                                                     soulng::parser::Match match = XmlParser::S(lexer);
5677                                                     if (match.hit)
5678                                                     {
5679                                                         *parentMatch14 = match;
5680                                                     }
5681                                                     else
5682                                                     {
5683                                                         lexer.SetPos(save);
5684                                                     }
5685                                                 }
5686                                                 *parentMatch13 = match;
5687                                             }
5688                                             if (match.hit)
5689                                             {
5690                                                 soulng::parser::Match match(false);
5691                                                 soulng::parser::Match* parentMatch15 = &match;
5692                                                 {
5693                                                     soulng::parser::Match match(false);
5694                                                     if (*lexer == 124)
5695                                                     {
5696                                                         ++lexer;
5697                                                         match.hit = true;
5698                                                     }
5699                                                     *parentMatch15 = match;
5700                                                 }
5701                                                 *parentMatch13 = match;
5702                                             }
5703                                             *parentMatch12 = match;
5704                                         }
5705                                         if (match.hit)
5706                                         {
5707                                             soulng::parser::Match match(false);
5708                                             soulng::parser::Match* parentMatch16 = &match;
5709                                             {
5710                                                 soulng::parser::Match match(true);
5711                                                 int64_t save = lexer.GetPos();
5712                                                 soulng::parser::Match* parentMatch17 = &match;
5713                                                 {
5714                                                     soulng::parser::Match match = XmlParser::S(lexer);
5715                                                     if (match.hit)
5716                                                     {
5717                                                         *parentMatch17 = match;
5718                                                     }
5719                                                     else
5720                                                     {
5721                                                         lexer.SetPos(save);
5722                                                     }
5723                                                 }
5724                                                 *parentMatch16 = match;
5725                                             }
5726                                             *parentMatch12 = match;
5727                                         }
5728                                         *parentMatch11 = match;
5729                                     }
5730                                     if (match.hit)
5731                                     {
5732                                         soulng::parser::Match match(false);
5733                                         soulng::parser::Match* parentMatch18 = &match;
5734                                         {
5735                                             soulng::parser::Match match = XmlParser::Nmtoken(lexer);
5736                                             *parentMatch18 = match;
5737                                         }
5738                                         *parentMatch11 = match;
5739                                     }
5740                                     *parentMatch10 = match;
5741                                 }
5742                                 if (match.hit)
5743                                 {
5744                                     *parentMatch9 = match;
5745                                 }
5746                                 else
5747                                 {
5748                                     lexer.SetPos(save);
5749                                     break;
5750                                 }
5751                             }
5752                         }
5753                     }
5754                     *parentMatch8 = match;
5755                 }
5756                 *parentMatch2 = match;
5757             }
5758             *parentMatch1 = match;
5759         }
5760         if (match.hit)
5761         {
5762             soulng::parser::Match match(false);
5763             soulng::parser::Match* parentMatch19 = &match;
5764             {
5765                 soulng::parser::Match match(true);
5766                 int64_t save = lexer.GetPos();
5767                 soulng::parser::Match* parentMatch20 = &match;
5768                 {
5769                     soulng::parser::Match match = XmlParser::S(lexer);
5770                     if (match.hit)
5771                     {
5772                         *parentMatch20 = match;
5773                     }
5774                     else
5775                     {
5776                         lexer.SetPos(save);
5777                     }
5778                 }
5779                 *parentMatch19 = match;
5780             }
5781             *parentMatch1 = match;
5782         }
5783         *parentMatch0 = match;
5784     }
5785     if (match.hit)
5786     {
5787         soulng::parser::Match match(false);
5788         soulng::parser::Match* parentMatch21 = &match;
5789         {
5790             soulng::parser::Match match(false);
5791             if (*lexer == 41)
5792             {
5793                 ++lexer;
5794                 match.hit = true;
5795             }
5796             *parentMatch21 = match;
5797         }
5798         *parentMatch0 = match;
5799     }
5800     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5801 
5802 
5803 
5804 
5805 
5806     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5807     if (!match.hit)
5808     {
5809         match.value = nullptr;
5810     }
5811     return match;
5812 }
5813 
5814 soulng::parser::Match XmlParser::DefaultDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
5815 {
5816     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5817 
5818 
5819 
5820 
5821 
5822 
5823 
5824     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5825     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>attVAlue;
5826     soulng::parser::Match match(false);
5827     soulng::parser::Match* parentMatch0 = &match;
5828     {
5829         int64_t save = lexer.GetPos();
5830         soulng::parser::Match match(false);
5831         soulng::parser::Match* parentMatch1 = &match;
5832         {
5833             int64_t save = lexer.GetPos();
5834             soulng::parser::Match match(true);
5835             for (int i : s36)
5836             {
5837                 if (*lexer == i)
5838                 {
5839                     ++lexer;
5840                 }
5841                 else
5842                 {
5843                     match.hit = false;
5844                     break;
5845                 }
5846             }
5847             *parentMatch1 = match;
5848             if (!match.hit)
5849             {
5850                 soulng::parser::Match match(false);
5851                 soulng::parser::Match* parentMatch2 = &match;
5852                 lexer.SetPos(save);
5853                 {
5854                     soulng::parser::Match match(true);
5855                     for (int i : s37)
5856                     {
5857                         if (*lexer == i)
5858                         {
5859                             ++lexer;
5860                         }
5861                         else
5862                         {
5863                             match.hit = false;
5864                             break;
5865                         }
5866                     }
5867                     *parentMatch2 = match;
5868                 }
5869                 *parentMatch1 = match;
5870             }
5871         }
5872         *parentMatch0 = match;
5873         if (!match.hit)
5874         {
5875             soulng::parser::Match match(false);
5876             soulng::parser::Match* parentMatch3 = &match;
5877             lexer.SetPos(save);
5878             {
5879                 soulng::parser::Match match(false);
5880                 soulng::parser::Match* parentMatch4 = &match;
5881                 {
5882                     soulng::parser::Match match(false);
5883                     soulng::parser::Match* parentMatch5 = &match;
5884                     {
5885                         soulng::parser::Match match(true);
5886                         int64_t save = lexer.GetPos();
5887                         soulng::parser::Match* parentMatch6 = &match;
5888                         {
5889                             soulng::parser::Match match(false);
5890                             soulng::parser::Match* parentMatch7 = &match;
5891                             {
5892                                 soulng::parser::Match match(false);
5893                                 soulng::parser::Match* parentMatch8 = &match;
5894                                 {
5895                                     soulng::parser::Match match(true);
5896                                     for (int i : s38)
5897                                     {
5898                                         if (*lexer == i)
5899                                         {
5900                                             ++lexer;
5901                                         }
5902                                         else
5903                                         {
5904                                             match.hit = false;
5905                                             break;
5906                                         }
5907                                     }
5908                                     *parentMatch8 = match;
5909                                 }
5910                                 if (match.hit)
5911                                 {
5912                                     soulng::parser::Match match(false);
5913                                     soulng::parser::Match* parentMatch9 = &match;
5914                                     {
5915                                         soulng::parser::Match match = XmlParser::S(lexer);
5916                                         *parentMatch9 = match;
5917                                     }
5918                                     *parentMatch8 = match;
5919                                 }
5920                                 *parentMatch7 = match;
5921                             }
5922                             if (match.hit)
5923                             {
5924                                 *parentMatch6 = match;
5925                             }
5926                             else
5927                             {
5928                                 lexer.SetPos(save);
5929                             }
5930                         }
5931                         *parentMatch5 = match;
5932                     }
5933                     if (match.hit)
5934                     {
5935                         soulng::parser::Match match(false);
5936                         soulng::parser::Match* parentMatch10 = &match;
5937                         {
5938                             soulng::parser::Match match = XmlParser::AttValue(lexerprocessor);
5939                             attVAlue.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
5940                             *parentMatch10 = match;
5941                         }
5942                         *parentMatch5 = match;
5943                     }
5944                     *parentMatch4 = match;
5945                 }
5946                 *parentMatch3 = match;
5947             }
5948             *parentMatch0 = match;
5949         }
5950     }
5951     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5952 
5953 
5954 
5955 
5956 
5957     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5958     if (!match.hit)
5959     {
5960         match.value = nullptr;
5961     }
5962     return match;
5963 }
5964 
5965 soulng::parser::Match XmlParser::EntityDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
5966 {
5967     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5968 
5969 
5970 
5971 
5972 
5973 
5974 
5975     #endif // SOULNG_PARSER_DEBUG_SUPPORT
5976     soulng::parser::Match match(false);
5977     soulng::parser::Match* parentMatch0 = &match;
5978     {
5979         int64_t save = lexer.GetPos();
5980         soulng::parser::Match match = XmlParser::GEDecl(lexerprocessor);
5981         *parentMatch0 = match;
5982         if (!match.hit)
5983         {
5984             soulng::parser::Match match(false);
5985             soulng::parser::Match* parentMatch1 = &match;
5986             lexer.SetPos(save);
5987             {
5988                 soulng::parser::Match match = XmlParser::PEDecl(lexerprocessor);
5989                 *parentMatch1 = match;
5990             }
5991             *parentMatch0 = match;
5992         }
5993     }
5994     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
5995 
5996 
5997 
5998 
5999 
6000     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6001     if (!match.hit)
6002     {
6003         match.value = nullptr;
6004     }
6005     return match;
6006 }
6007 
6008 soulng::parser::Match XmlParser::GEDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6009 {
6010     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6011 
6012 
6013 
6014 
6015 
6016 
6017 
6018     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6019     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>entityName;
6020     soulng::parser::Match match(false);
6021     soulng::parser::Match* parentMatch0 = &match;
6022     {
6023         soulng::parser::Match match(false);
6024         soulng::parser::Match* parentMatch1 = &match;
6025         {
6026             soulng::parser::Match match(false);
6027             soulng::parser::Match* parentMatch2 = &match;
6028             {
6029                 soulng::parser::Match match(false);
6030                 soulng::parser::Match* parentMatch3 = &match;
6031                 {
6032                     soulng::parser::Match match(false);
6033                     soulng::parser::Match* parentMatch4 = &match;
6034                     {
6035                         soulng::parser::Match match(false);
6036                         soulng::parser::Match* parentMatch5 = &match;
6037                         {
6038                             soulng::parser::Match match(true);
6039                             for (int i : s39)
6040                             {
6041                                 if (*lexer == i)
6042                                 {
6043                                     ++lexer;
6044                                 }
6045                                 else
6046                                 {
6047                                     match.hit = false;
6048                                     break;
6049                                 }
6050                             }
6051                             *parentMatch5 = match;
6052                         }
6053                         if (match.hit)
6054                         {
6055                             soulng::parser::Match match(false);
6056                             soulng::parser::Match* parentMatch6 = &match;
6057                             {
6058                                 soulng::parser::Match match = XmlParser::S(lexer);
6059                                 *parentMatch6 = match;
6060                             }
6061                             *parentMatch5 = match;
6062                         }
6063                         *parentMatch4 = match;
6064                     }
6065                     if (match.hit)
6066                     {
6067                         soulng::parser::Match match(false);
6068                         soulng::parser::Match* parentMatch7 = &match;
6069                         {
6070                             soulng::parser::Match match = XmlParser::Name(lexer);
6071                             entityName.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
6072                             *parentMatch7 = match;
6073                         }
6074                         *parentMatch4 = match;
6075                     }
6076                     *parentMatch3 = match;
6077                 }
6078                 if (match.hit)
6079                 {
6080                     soulng::parser::Match match(false);
6081                     soulng::parser::Match* parentMatch8 = &match;
6082                     {
6083                         soulng::parser::Match match = XmlParser::S(lexer);
6084                         *parentMatch8 = match;
6085                     }
6086                     *parentMatch3 = match;
6087                 }
6088                 *parentMatch2 = match;
6089             }
6090             if (match.hit)
6091             {
6092                 soulng::parser::Match match(false);
6093                 soulng::parser::Match* parentMatch9 = &match;
6094                 {
6095                     soulng::parser::Match match = XmlParser::EntityDef(lexerprocessor);
6096                     *parentMatch9 = match;
6097                 }
6098                 *parentMatch2 = match;
6099             }
6100             *parentMatch1 = match;
6101         }
6102         if (match.hit)
6103         {
6104             soulng::parser::Match match(false);
6105             soulng::parser::Match* parentMatch10 = &match;
6106             {
6107                 soulng::parser::Match match(true);
6108                 int64_t save = lexer.GetPos();
6109                 soulng::parser::Match* parentMatch11 = &match;
6110                 {
6111                     soulng::parser::Match match = XmlParser::S(lexer);
6112                     if (match.hit)
6113                     {
6114                         *parentMatch11 = match;
6115                     }
6116                     else
6117                     {
6118                         lexer.SetPos(save);
6119                     }
6120                 }
6121                 *parentMatch10 = match;
6122             }
6123             *parentMatch1 = match;
6124         }
6125         *parentMatch0 = match;
6126     }
6127     if (match.hit)
6128     {
6129         soulng::parser::Match match(false);
6130         soulng::parser::Match* parentMatch12 = &match;
6131         {
6132             soulng::parser::Match match(false);
6133             if (*lexer == 62)
6134             {
6135                 ++lexer;
6136                 match.hit = true;
6137             }
6138             *parentMatch12 = match;
6139         }
6140         *parentMatch0 = match;
6141     }
6142     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6143 
6144 
6145 
6146 
6147 
6148     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6149     if (!match.hit)
6150     {
6151         match.value = nullptr;
6152     }
6153     return match;
6154 }
6155 
6156 soulng::parser::Match XmlParser::PEDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6157 {
6158     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6159 
6160 
6161 
6162 
6163 
6164 
6165 
6166     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6167     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>peName;
6168     soulng::parser::Match match(false);
6169     soulng::parser::Match* parentMatch0 = &match;
6170     {
6171         soulng::parser::Match match(false);
6172         soulng::parser::Match* parentMatch1 = &match;
6173         {
6174             soulng::parser::Match match(false);
6175             soulng::parser::Match* parentMatch2 = &match;
6176             {
6177                 soulng::parser::Match match(false);
6178                 soulng::parser::Match* parentMatch3 = &match;
6179                 {
6180                     soulng::parser::Match match(false);
6181                     soulng::parser::Match* parentMatch4 = &match;
6182                     {
6183                         soulng::parser::Match match(false);
6184                         soulng::parser::Match* parentMatch5 = &match;
6185                         {
6186                             soulng::parser::Match match(false);
6187                             soulng::parser::Match* parentMatch6 = &match;
6188                             {
6189                                 soulng::parser::Match match(false);
6190                                 soulng::parser::Match* parentMatch7 = &match;
6191                                 {
6192                                     soulng::parser::Match match(true);
6193                                     for (int i : s40)
6194                                     {
6195                                         if (*lexer == i)
6196                                         {
6197                                             ++lexer;
6198                                         }
6199                                         else
6200                                         {
6201                                             match.hit = false;
6202                                             break;
6203                                         }
6204                                     }
6205                                     *parentMatch7 = match;
6206                                 }
6207                                 if (match.hit)
6208                                 {
6209                                     soulng::parser::Match match(false);
6210                                     soulng::parser::Match* parentMatch8 = &match;
6211                                     {
6212                                         soulng::parser::Match match = XmlParser::S(lexer);
6213                                         *parentMatch8 = match;
6214                                     }
6215                                     *parentMatch7 = match;
6216                                 }
6217                                 *parentMatch6 = match;
6218                             }
6219                             if (match.hit)
6220                             {
6221                                 soulng::parser::Match match(false);
6222                                 soulng::parser::Match* parentMatch9 = &match;
6223                                 {
6224                                     soulng::parser::Match match(false);
6225                                     if (*lexer == 37)
6226                                     {
6227                                         ++lexer;
6228                                         match.hit = true;
6229                                     }
6230                                     *parentMatch9 = match;
6231                                 }
6232                                 *parentMatch6 = match;
6233                             }
6234                             *parentMatch5 = match;
6235                         }
6236                         if (match.hit)
6237                         {
6238                             soulng::parser::Match match(false);
6239                             soulng::parser::Match* parentMatch10 = &match;
6240                             {
6241                                 soulng::parser::Match match = XmlParser::S(lexer);
6242                                 *parentMatch10 = match;
6243                             }
6244                             *parentMatch5 = match;
6245                         }
6246                         *parentMatch4 = match;
6247                     }
6248                     if (match.hit)
6249                     {
6250                         soulng::parser::Match match(false);
6251                         soulng::parser::Match* parentMatch11 = &match;
6252                         {
6253                             soulng::parser::Match match = XmlParser::Name(lexer);
6254                             peName.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
6255                             *parentMatch11 = match;
6256                         }
6257                         *parentMatch4 = match;
6258                     }
6259                     *parentMatch3 = match;
6260                 }
6261                 if (match.hit)
6262                 {
6263                     soulng::parser::Match match(false);
6264                     soulng::parser::Match* parentMatch12 = &match;
6265                     {
6266                         soulng::parser::Match match = XmlParser::S(lexer);
6267                         *parentMatch12 = match;
6268                     }
6269                     *parentMatch3 = match;
6270                 }
6271                 *parentMatch2 = match;
6272             }
6273             if (match.hit)
6274             {
6275                 soulng::parser::Match match(false);
6276                 soulng::parser::Match* parentMatch13 = &match;
6277                 {
6278                     soulng::parser::Match match = XmlParser::PEDef(lexerprocessor);
6279                     *parentMatch13 = match;
6280                 }
6281                 *parentMatch2 = match;
6282             }
6283             *parentMatch1 = match;
6284         }
6285         if (match.hit)
6286         {
6287             soulng::parser::Match match(false);
6288             soulng::parser::Match* parentMatch14 = &match;
6289             {
6290                 soulng::parser::Match match(true);
6291                 int64_t save = lexer.GetPos();
6292                 soulng::parser::Match* parentMatch15 = &match;
6293                 {
6294                     soulng::parser::Match match = XmlParser::S(lexer);
6295                     if (match.hit)
6296                     {
6297                         *parentMatch15 = match;
6298                     }
6299                     else
6300                     {
6301                         lexer.SetPos(save);
6302                     }
6303                 }
6304                 *parentMatch14 = match;
6305             }
6306             *parentMatch1 = match;
6307         }
6308         *parentMatch0 = match;
6309     }
6310     if (match.hit)
6311     {
6312         soulng::parser::Match match(false);
6313         soulng::parser::Match* parentMatch16 = &match;
6314         {
6315             soulng::parser::Match match(false);
6316             if (*lexer == 62)
6317             {
6318                 ++lexer;
6319                 match.hit = true;
6320             }
6321             *parentMatch16 = match;
6322         }
6323         *parentMatch0 = match;
6324     }
6325     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6326 
6327 
6328 
6329 
6330 
6331     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6332     if (!match.hit)
6333     {
6334         match.value = nullptr;
6335     }
6336     return match;
6337 }
6338 
6339 soulng::parser::Match XmlParser::EntityDef(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6340 {
6341     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6342 
6343 
6344 
6345 
6346 
6347 
6348 
6349     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6350     soulng::parser::Match match(false);
6351     soulng::parser::Match* parentMatch0 = &match;
6352     {
6353         int64_t save = lexer.GetPos();
6354         soulng::parser::Match match = XmlParser::EntityValue(lexerprocessor);
6355         *parentMatch0 = match;
6356         if (!match.hit)
6357         {
6358             soulng::parser::Match match(false);
6359             soulng::parser::Match* parentMatch1 = &match;
6360             lexer.SetPos(save);
6361             {
6362                 soulng::parser::Match match(false);
6363                 soulng::parser::Match* parentMatch2 = &match;
6364                 {
6365                     soulng::parser::Match match(false);
6366                     soulng::parser::Match* parentMatch3 = &match;
6367                     {
6368                         soulng::parser::Match match = XmlParser::ExternalID(lexer);
6369                         *parentMatch3 = match;
6370                     }
6371                     if (match.hit)
6372                     {
6373                         soulng::parser::Match match(false);
6374                         soulng::parser::Match* parentMatch4 = &match;
6375                         {
6376                             soulng::parser::Match match(true);
6377                             int64_t save = lexer.GetPos();
6378                             soulng::parser::Match* parentMatch5 = &match;
6379                             {
6380                                 soulng::parser::Match match = XmlParser::NDataDecl(lexer);
6381                                 if (match.hit)
6382                                 {
6383                                     *parentMatch5 = match;
6384                                 }
6385                                 else
6386                                 {
6387                                     lexer.SetPos(save);
6388                                 }
6389                             }
6390                             *parentMatch4 = match;
6391                         }
6392                         *parentMatch3 = match;
6393                     }
6394                     *parentMatch2 = match;
6395                 }
6396                 *parentMatch1 = match;
6397             }
6398             *parentMatch0 = match;
6399         }
6400     }
6401     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6402 
6403 
6404 
6405 
6406 
6407     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6408     if (!match.hit)
6409     {
6410         match.value = nullptr;
6411     }
6412     return match;
6413 }
6414 
6415 soulng::parser::Match XmlParser::PEDef(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6416 {
6417     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6418 
6419 
6420 
6421 
6422 
6423 
6424 
6425     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6426     soulng::parser::Match match(false);
6427     soulng::parser::Match* parentMatch0 = &match;
6428     {
6429         int64_t save = lexer.GetPos();
6430         soulng::parser::Match match = XmlParser::EntityValue(lexerprocessor);
6431         *parentMatch0 = match;
6432         if (!match.hit)
6433         {
6434             soulng::parser::Match match(false);
6435             soulng::parser::Match* parentMatch1 = &match;
6436             lexer.SetPos(save);
6437             {
6438                 soulng::parser::Match match = XmlParser::ExternalID(lexer);
6439                 *parentMatch1 = match;
6440             }
6441             *parentMatch0 = match;
6442         }
6443     }
6444     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6445 
6446 
6447 
6448 
6449 
6450     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6451     if (!match.hit)
6452     {
6453         match.value = nullptr;
6454     }
6455     return match;
6456 }
6457 
6458 soulng::parser::Match XmlParser::EntityValue(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6459 {
6460     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6461 
6462 
6463 
6464 
6465 
6466 
6467 
6468     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6469     soulng::parser::Match match(false);
6470     soulng::parser::Match* parentMatch0 = &match;
6471     {
6472         int64_t save = lexer.GetPos();
6473         soulng::parser::Match match(false);
6474         soulng::parser::Match* parentMatch1 = &match;
6475         {
6476             soulng::parser::Match match(false);
6477             soulng::parser::Match* parentMatch2 = &match;
6478             {
6479                 soulng::parser::Match match(false);
6480                 if (*lexer == 34)
6481                 {
6482                     ++lexer;
6483                     match.hit = true;
6484                 }
6485                 *parentMatch2 = match;
6486             }
6487             if (match.hit)
6488             {
6489                 soulng::parser::Match match(false);
6490                 soulng::parser::Match* parentMatch3 = &match;
6491                 {
6492                     soulng::parser::Match match(true);
6493                     soulng::parser::Match* parentMatch4 = &match;
6494                     {
6495                         while (true)
6496                         {
6497                             int64_t save = lexer.GetPos();
6498                             {
6499                                 soulng::parser::Match match(false);
6500                                 soulng::parser::Match* parentMatch5 = &match;
6501                                 {
6502                                     soulng::parser::Match match(false);
6503                                     soulng::parser::Match* parentMatch6 = &match;
6504                                     {
6505                                         int64_t save = lexer.GetPos();
6506                                         soulng::parser::Match match(false);
6507                                         soulng::parser::Match* parentMatch7 = &match;
6508                                         {
6509                                             int64_t save = lexer.GetPos();
6510                                             soulng::parser::Match match(lexer.Pos() != lexer.End());
6511                                             for (const soulng::parser::Range& range : s41)
6512                                             {
6513                                                 if (*lexer >= range.first && *lexer <= range.last)
6514                                                 {
6515                                                     match.hit = false;
6516                                                     break;
6517                                                 }
6518                                             }
6519                                             if (match.hit)
6520                                             {
6521                                                 ++lexer;
6522                                             }
6523                                             *parentMatch7 = match;
6524                                             if (!match.hit)
6525                                             {
6526                                                 soulng::parser::Match match(false);
6527                                                 soulng::parser::Match* parentMatch8 = &match;
6528                                                 lexer.SetPos(save);
6529                                                 {
6530                                                     soulng::parser::Match match = XmlParser::PEReference(lexerprocessor);
6531                                                     *parentMatch8 = match;
6532                                                 }
6533                                                 *parentMatch7 = match;
6534                                             }
6535                                         }
6536                                         *parentMatch6 = match;
6537                                         if (!match.hit)
6538                                         {
6539                                             soulng::parser::Match match(false);
6540                                             soulng::parser::Match* parentMatch9 = &match;
6541                                             lexer.SetPos(save);
6542                                             {
6543                                                 soulng::parser::Match match = XmlParser::Reference(lexerprocessor);
6544                                                 *parentMatch9 = match;
6545                                             }
6546                                             *parentMatch6 = match;
6547                                         }
6548                                     }
6549                                     *parentMatch5 = match;
6550                                 }
6551                                 if (match.hit)
6552                                 {
6553                                     *parentMatch4 = match;
6554                                 }
6555                                 else
6556                                 {
6557                                     lexer.SetPos(save);
6558                                     break;
6559                                 }
6560                             }
6561                         }
6562                     }
6563                     *parentMatch3 = match;
6564                 }
6565                 *parentMatch2 = match;
6566             }
6567             *parentMatch1 = match;
6568         }
6569         if (match.hit)
6570         {
6571             soulng::parser::Match match(false);
6572             soulng::parser::Match* parentMatch10 = &match;
6573             {
6574                 soulng::parser::Match match(false);
6575                 if (*lexer == 34)
6576                 {
6577                     ++lexer;
6578                     match.hit = true;
6579                 }
6580                 *parentMatch10 = match;
6581             }
6582             *parentMatch1 = match;
6583         }
6584         *parentMatch0 = match;
6585         if (!match.hit)
6586         {
6587             soulng::parser::Match match(false);
6588             soulng::parser::Match* parentMatch11 = &match;
6589             lexer.SetPos(save);
6590             {
6591                 soulng::parser::Match match(false);
6592                 soulng::parser::Match* parentMatch12 = &match;
6593                 {
6594                     soulng::parser::Match match(false);
6595                     soulng::parser::Match* parentMatch13 = &match;
6596                     {
6597                         soulng::parser::Match match(false);
6598                         if (*lexer == 39)
6599                         {
6600                             ++lexer;
6601                             match.hit = true;
6602                         }
6603                         *parentMatch13 = match;
6604                     }
6605                     if (match.hit)
6606                     {
6607                         soulng::parser::Match match(false);
6608                         soulng::parser::Match* parentMatch14 = &match;
6609                         {
6610                             soulng::parser::Match match(true);
6611                             soulng::parser::Match* parentMatch15 = &match;
6612                             {
6613                                 while (true)
6614                                 {
6615                                     int64_t save = lexer.GetPos();
6616                                     {
6617                                         soulng::parser::Match match(false);
6618                                         soulng::parser::Match* parentMatch16 = &match;
6619                                         {
6620                                             soulng::parser::Match match(false);
6621                                             soulng::parser::Match* parentMatch17 = &match;
6622                                             {
6623                                                 int64_t save = lexer.GetPos();
6624                                                 soulng::parser::Match match(false);
6625                                                 soulng::parser::Match* parentMatch18 = &match;
6626                                                 {
6627                                                     int64_t save = lexer.GetPos();
6628                                                     soulng::parser::Match match(lexer.Pos() != lexer.End());
6629                                                     for (const soulng::parser::Range& range : s42)
6630                                                     {
6631                                                         if (*lexer >= range.first && *lexer <= range.last)
6632                                                         {
6633                                                             match.hit = false;
6634                                                             break;
6635                                                         }
6636                                                     }
6637                                                     if (match.hit)
6638                                                     {
6639                                                         ++lexer;
6640                                                     }
6641                                                     *parentMatch18 = match;
6642                                                     if (!match.hit)
6643                                                     {
6644                                                         soulng::parser::Match match(false);
6645                                                         soulng::parser::Match* parentMatch19 = &match;
6646                                                         lexer.SetPos(save);
6647                                                         {
6648                                                             soulng::parser::Match match = XmlParser::PEReference(lexerprocessor);
6649                                                             *parentMatch19 = match;
6650                                                         }
6651                                                         *parentMatch18 = match;
6652                                                     }
6653                                                 }
6654                                                 *parentMatch17 = match;
6655                                                 if (!match.hit)
6656                                                 {
6657                                                     soulng::parser::Match match(false);
6658                                                     soulng::parser::Match* parentMatch20 = &match;
6659                                                     lexer.SetPos(save);
6660                                                     {
6661                                                         soulng::parser::Match match = XmlParser::Reference(lexerprocessor);
6662                                                         *parentMatch20 = match;
6663                                                     }
6664                                                     *parentMatch17 = match;
6665                                                 }
6666                                             }
6667                                             *parentMatch16 = match;
6668                                         }
6669                                         if (match.hit)
6670                                         {
6671                                             *parentMatch15 = match;
6672                                         }
6673                                         else
6674                                         {
6675                                             lexer.SetPos(save);
6676                                             break;
6677                                         }
6678                                     }
6679                                 }
6680                             }
6681                             *parentMatch14 = match;
6682                         }
6683                         *parentMatch13 = match;
6684                     }
6685                     *parentMatch12 = match;
6686                 }
6687                 if (match.hit)
6688                 {
6689                     soulng::parser::Match match(false);
6690                     soulng::parser::Match* parentMatch21 = &match;
6691                     {
6692                         soulng::parser::Match match(false);
6693                         if (*lexer == 39)
6694                         {
6695                             ++lexer;
6696                             match.hit = true;
6697                         }
6698                         *parentMatch21 = match;
6699                     }
6700                     *parentMatch12 = match;
6701                 }
6702                 *parentMatch11 = match;
6703             }
6704             *parentMatch0 = match;
6705         }
6706     }
6707     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6708 
6709 
6710 
6711 
6712 
6713     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6714     if (!match.hit)
6715     {
6716         match.value = nullptr;
6717     }
6718     return match;
6719 }
6720 
6721 soulng::parser::Match XmlParser::NDataDecl(TrivialLexer& lexer)
6722 {
6723     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6724 
6725 
6726 
6727 
6728 
6729 
6730 
6731     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6732     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
6733     soulng::parser::Match match(false);
6734     soulng::parser::Match* parentMatch0 = &match;
6735     {
6736         soulng::parser::Match match(false);
6737         soulng::parser::Match* parentMatch1 = &match;
6738         {
6739             soulng::parser::Match match(false);
6740             soulng::parser::Match* parentMatch2 = &match;
6741             {
6742                 soulng::parser::Match match = XmlParser::S(lexer);
6743                 *parentMatch2 = match;
6744             }
6745             if (match.hit)
6746             {
6747                 soulng::parser::Match match(false);
6748                 soulng::parser::Match* parentMatch3 = &match;
6749                 {
6750                     soulng::parser::Match match(true);
6751                     for (int i : s43)
6752                     {
6753                         if (*lexer == i)
6754                         {
6755                             ++lexer;
6756                         }
6757                         else
6758                         {
6759                             match.hit = false;
6760                             break;
6761                         }
6762                     }
6763                     *parentMatch3 = match;
6764                 }
6765                 *parentMatch2 = match;
6766             }
6767             *parentMatch1 = match;
6768         }
6769         if (match.hit)
6770         {
6771             soulng::parser::Match match(false);
6772             soulng::parser::Match* parentMatch4 = &match;
6773             {
6774                 soulng::parser::Match match = XmlParser::S(lexer);
6775                 *parentMatch4 = match;
6776             }
6777             *parentMatch1 = match;
6778         }
6779         *parentMatch0 = match;
6780     }
6781     if (match.hit)
6782     {
6783         soulng::parser::Match match(false);
6784         soulng::parser::Match* parentMatch5 = &match;
6785         {
6786             soulng::parser::Match match = XmlParser::Name(lexer);
6787             name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
6788             *parentMatch5 = match;
6789         }
6790         *parentMatch0 = match;
6791     }
6792     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6793 
6794 
6795 
6796 
6797 
6798     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6799     if (!match.hit)
6800     {
6801         match.value = nullptr;
6802     }
6803     return match;
6804 }
6805 
6806 soulng::parser::Match XmlParser::PEReference(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6807 {
6808     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6809 
6810 
6811 
6812 
6813 
6814 
6815 
6816     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6817     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
6818     soulng::parser::Match match(false);
6819     soulng::parser::Match* parentMatch0 = &match;
6820     {
6821         soulng::parser::Match match(false);
6822         soulng::parser::Match* parentMatch1 = &match;
6823         {
6824             soulng::parser::Match match(false);
6825             if (*lexer == 37)
6826             {
6827                 ++lexer;
6828                 match.hit = true;
6829             }
6830             *parentMatch1 = match;
6831         }
6832         if (match.hit)
6833         {
6834             soulng::parser::Match match(false);
6835             soulng::parser::Match* parentMatch2 = &match;
6836             {
6837                 soulng::parser::Match match = XmlParser::Name(lexer);
6838                 name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
6839                 *parentMatch2 = match;
6840             }
6841             *parentMatch1 = match;
6842         }
6843         *parentMatch0 = match;
6844     }
6845     if (match.hit)
6846     {
6847         soulng::parser::Match match(false);
6848         soulng::parser::Match* parentMatch3 = &match;
6849         {
6850             soulng::parser::Match match(false);
6851             if (*lexer == 59)
6852             {
6853                 ++lexer;
6854                 match.hit = true;
6855             }
6856             *parentMatch3 = match;
6857         }
6858         *parentMatch0 = match;
6859     }
6860     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6861 
6862 
6863 
6864 
6865 
6866     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6867     if (!match.hit)
6868     {
6869         match.value = nullptr;
6870     }
6871     return match;
6872 }
6873 
6874 soulng::parser::Match XmlParser::NotationDecl(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
6875 {
6876     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
6877 
6878 
6879 
6880 
6881 
6882 
6883 
6884     #endif // SOULNG_PARSER_DEBUG_SUPPORT
6885     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
6886     soulng::parser::Match match(false);
6887     soulng::parser::Match* parentMatch0 = &match;
6888     {
6889         soulng::parser::Match match(false);
6890         soulng::parser::Match* parentMatch1 = &match;
6891         {
6892             soulng::parser::Match match(false);
6893             soulng::parser::Match* parentMatch2 = &match;
6894             {
6895                 soulng::parser::Match match(false);
6896                 soulng::parser::Match* parentMatch3 = &match;
6897                 {
6898                     soulng::parser::Match match(false);
6899                     soulng::parser::Match* parentMatch4 = &match;
6900                     {
6901                         soulng::parser::Match match(false);
6902                         soulng::parser::Match* parentMatch5 = &match;
6903                         {
6904                             soulng::parser::Match match(true);
6905                             for (int i : s44)
6906                             {
6907                                 if (*lexer == i)
6908                                 {
6909                                     ++lexer;
6910                                 }
6911                                 else
6912                                 {
6913                                     match.hit = false;
6914                                     break;
6915                                 }
6916                             }
6917                             *parentMatch5 = match;
6918                         }
6919                         if (match.hit)
6920                         {
6921                             soulng::parser::Match match(false);
6922                             soulng::parser::Match* parentMatch6 = &match;
6923                             {
6924                                 soulng::parser::Match match = XmlParser::S(lexer);
6925                                 *parentMatch6 = match;
6926                             }
6927                             *parentMatch5 = match;
6928                         }
6929                         *parentMatch4 = match;
6930                     }
6931                     if (match.hit)
6932                     {
6933                         soulng::parser::Match match(false);
6934                         soulng::parser::Match* parentMatch7 = &match;
6935                         {
6936                             soulng::parser::Match match = XmlParser::Name(lexer);
6937                             name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
6938                             *parentMatch7 = match;
6939                         }
6940                         *parentMatch4 = match;
6941                     }
6942                     *parentMatch3 = match;
6943                 }
6944                 if (match.hit)
6945                 {
6946                     soulng::parser::Match match(false);
6947                     soulng::parser::Match* parentMatch8 = &match;
6948                     {
6949                         soulng::parser::Match match = XmlParser::S(lexer);
6950                         *parentMatch8 = match;
6951                     }
6952                     *parentMatch3 = match;
6953                 }
6954                 *parentMatch2 = match;
6955             }
6956             if (match.hit)
6957             {
6958                 soulng::parser::Match match(false);
6959                 soulng::parser::Match* parentMatch9 = &match;
6960                 {
6961                     soulng::parser::Match match(false);
6962                     soulng::parser::Match* parentMatch10 = &match;
6963                     {
6964                         soulng::parser::Match match(false);
6965                         soulng::parser::Match* parentMatch11 = &match;
6966                         {
6967                             int64_t save = lexer.GetPos();
6968                             soulng::parser::Match match = XmlParser::ExternalID(lexer);
6969                             *parentMatch11 = match;
6970                             if (!match.hit)
6971                             {
6972                                 soulng::parser::Match match(false);
6973                                 soulng::parser::Match* parentMatch12 = &match;
6974                                 lexer.SetPos(save);
6975                                 {
6976                                     soulng::parser::Match match = XmlParser::PublicID(lexer);
6977                                     *parentMatch12 = match;
6978                                 }
6979                                 *parentMatch11 = match;
6980                             }
6981                         }
6982                         *parentMatch10 = match;
6983                     }
6984                     *parentMatch9 = match;
6985                 }
6986                 *parentMatch2 = match;
6987             }
6988             *parentMatch1 = match;
6989         }
6990         if (match.hit)
6991         {
6992             soulng::parser::Match match(false);
6993             soulng::parser::Match* parentMatch13 = &match;
6994             {
6995                 soulng::parser::Match match(true);
6996                 int64_t save = lexer.GetPos();
6997                 soulng::parser::Match* parentMatch14 = &match;
6998                 {
6999                     soulng::parser::Match match = XmlParser::S(lexer);
7000                     if (match.hit)
7001                     {
7002                         *parentMatch14 = match;
7003                     }
7004                     else
7005                     {
7006                         lexer.SetPos(save);
7007                     }
7008                 }
7009                 *parentMatch13 = match;
7010             }
7011             *parentMatch1 = match;
7012         }
7013         *parentMatch0 = match;
7014     }
7015     if (match.hit)
7016     {
7017         soulng::parser::Match match(false);
7018         soulng::parser::Match* parentMatch15 = &match;
7019         {
7020             soulng::parser::Match match(false);
7021             if (*lexer == 62)
7022             {
7023                 ++lexer;
7024                 match.hit = true;
7025             }
7026             *parentMatch15 = match;
7027         }
7028         *parentMatch0 = match;
7029     }
7030     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7031 
7032 
7033 
7034 
7035 
7036     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7037     if (!match.hit)
7038     {
7039         match.value = nullptr;
7040     }
7041     return match;
7042 }
7043 
7044 soulng::parser::Match XmlParser::PublicID(TrivialLexer& lexer)
7045 {
7046     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7047 
7048 
7049 
7050 
7051 
7052 
7053 
7054     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7055     soulng::parser::Match match(false);
7056     soulng::parser::Match* parentMatch0 = &match;
7057     {
7058         soulng::parser::Match match(false);
7059         soulng::parser::Match* parentMatch1 = &match;
7060         {
7061             soulng::parser::Match match(true);
7062             for (int i : s45)
7063             {
7064                 if (*lexer == i)
7065                 {
7066                     ++lexer;
7067                 }
7068                 else
7069                 {
7070                     match.hit = false;
7071                     break;
7072                 }
7073             }
7074             *parentMatch1 = match;
7075         }
7076         if (match.hit)
7077         {
7078             soulng::parser::Match match(false);
7079             soulng::parser::Match* parentMatch2 = &match;
7080             {
7081                 soulng::parser::Match match = XmlParser::S(lexer);
7082                 *parentMatch2 = match;
7083             }
7084             *parentMatch1 = match;
7085         }
7086         *parentMatch0 = match;
7087     }
7088     if (match.hit)
7089     {
7090         soulng::parser::Match match(false);
7091         soulng::parser::Match* parentMatch3 = &match;
7092         {
7093             soulng::parser::Match match = XmlParser::PubidLiteral(lexer);
7094             *parentMatch3 = match;
7095         }
7096         *parentMatch0 = match;
7097     }
7098     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7099 
7100 
7101 
7102 
7103 
7104     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7105     if (!match.hit)
7106     {
7107         match.value = nullptr;
7108     }
7109     return match;
7110 }
7111 
7112 soulng::parser::Match XmlParser::Element(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
7113 {
7114     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7115 
7116 
7117 
7118 
7119 
7120 
7121 
7122     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7123     std::u32string tagName = std::u32string();
7124     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
7125     soulng::parser::Match match(false);
7126     soulng::parser::Match* parentMatch0 = &match;
7127     {
7128         soulng::parser::Match match(false);
7129         soulng::parser::Match* parentMatch1 = &match;
7130         {
7131             soulng::parser::Match match(false);
7132             soulng::parser::Match* parentMatch2 = &match;
7133             {
7134                 soulng::parser::Match match(false);
7135                 soulng::parser::Match* parentMatch3 = &match;
7136                 {
7137                     soulng::parser::Match match(false);
7138                     if (*lexer == 60)
7139                     {
7140                         ++lexer;
7141                         match.hit = true;
7142                     }
7143                     *parentMatch3 = match;
7144                 }
7145                 if (match.hit)
7146                 {
7147                     soulng::parser::Match match(false);
7148                     soulng::parser::Match* parentMatch4 = &match;
7149                     {
7150                         soulng::parser::Match match(false);
7151                         soulng::parser::Match* parentMatch5 = &match;
7152                         {
7153                             int64_t pos = lexer.GetPos();
7154                             soulng::parser::Match match = XmlParser::Name(lexer);
7155                             name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
7156                             if (match.hit)
7157                             {
7158                                 tagName = name->value;
7159                                 processor->BeginStartTag(tagName);
7160                             }
7161                             *parentMatch5 = match;
7162                         }
7163                         *parentMatch4 = match;
7164                     }
7165                     *parentMatch3 = match;
7166                 }
7167                 *parentMatch2 = match;
7168             }
7169             if (match.hit)
7170             {
7171                 soulng::parser::Match match(false);
7172                 soulng::parser::Match* parentMatch6 = &match;
7173                 {
7174                     soulng::parser::Match match(true);
7175                     soulng::parser::Match* parentMatch7 = &match;
7176                     {
7177                         while (true)
7178                         {
7179                             int64_t save = lexer.GetPos();
7180                             {
7181                                 soulng::parser::Match match(false);
7182                                 soulng::parser::Match* parentMatch8 = &match;
7183                                 {
7184                                     soulng::parser::Match match(false);
7185                                     soulng::parser::Match* parentMatch9 = &match;
7186                                     {
7187                                         soulng::parser::Match match = XmlParser::S(lexer);
7188                                         *parentMatch9 = match;
7189                                     }
7190                                     if (match.hit)
7191                                     {
7192                                         soulng::parser::Match match(false);
7193                                         soulng::parser::Match* parentMatch10 = &match;
7194                                         {
7195                                             soulng::parser::Match match = XmlParser::Attribute(lexerprocessor);
7196                                             *parentMatch10 = match;
7197                                         }
7198                                         *parentMatch9 = match;
7199                                     }
7200                                     *parentMatch8 = match;
7201                                 }
7202                                 if (match.hit)
7203                                 {
7204                                     *parentMatch7 = match;
7205                                 }
7206                                 else
7207                                 {
7208                                     lexer.SetPos(save);
7209                                     break;
7210                                 }
7211                             }
7212                         }
7213                     }
7214                     *parentMatch6 = match;
7215                 }
7216                 *parentMatch2 = match;
7217             }
7218             *parentMatch1 = match;
7219         }
7220         if (match.hit)
7221         {
7222             soulng::parser::Match match(false);
7223             soulng::parser::Match* parentMatch11 = &match;
7224             {
7225                 soulng::parser::Match match(true);
7226                 int64_t save = lexer.GetPos();
7227                 soulng::parser::Match* parentMatch12 = &match;
7228                 {
7229                     soulng::parser::Match match = XmlParser::S(lexer);
7230                     if (match.hit)
7231                     {
7232                         *parentMatch12 = match;
7233                     }
7234                     else
7235                     {
7236                         lexer.SetPos(save);
7237                     }
7238                 }
7239                 *parentMatch11 = match;
7240             }
7241             *parentMatch1 = match;
7242         }
7243         *parentMatch0 = match;
7244     }
7245     if (match.hit)
7246     {
7247         soulng::parser::Match match(false);
7248         soulng::parser::Match* parentMatch13 = &match;
7249         {
7250             soulng::parser::Match match(false);
7251             soulng::parser::Match* parentMatch14 = &match;
7252             {
7253                 soulng::parser::Match match(false);
7254                 soulng::parser::Match* parentMatch15 = &match;
7255                 {
7256                     int64_t save = lexer.GetPos();
7257                     soulng::parser::Match match(false);
7258                     soulng::parser::Match* parentMatch16 = &match;
7259                     {
7260                         int64_t pos = lexer.GetPos();
7261                         soulng::lexer::Span span = lexer.GetSpan();
7262                         soulng::parser::Match match(true);
7263                         for (int i : s46)
7264                         {
7265                             if (*lexer == i)
7266                             {
7267                                 ++lexer;
7268                             }
7269                             else
7270                             {
7271                                 match.hit = false;
7272                                 break;
7273                             }
7274                         }
7275                         if (match.hit)
7276                         {
7277                             processor->EndStartTag(spanlexer.FileName());
7278                             processor->EndTag(tagNamespanlexer.FileName());
7279                         }
7280                         *parentMatch16 = match;
7281                     }
7282                     *parentMatch15 = match;
7283                     if (!match.hit)
7284                     {
7285                         soulng::parser::Match match(false);
7286                         soulng::parser::Match* parentMatch17 = &match;
7287                         lexer.SetPos(save);
7288                         {
7289                             soulng::parser::Match match(false);
7290                             soulng::parser::Match* parentMatch18 = &match;
7291                             {
7292                                 soulng::parser::Match match(false);
7293                                 soulng::parser::Match* parentMatch19 = &match;
7294                                 {
7295                                     soulng::parser::Match match(false);
7296                                     soulng::parser::Match* parentMatch20 = &match;
7297                                     {
7298                                         int64_t pos = lexer.GetPos();
7299                                         soulng::lexer::Span span = lexer.GetSpan();
7300                                         soulng::parser::Match match(false);
7301                                         if (*lexer == 62)
7302                                         {
7303                                             ++lexer;
7304                                             match.hit = true;
7305                                         }
7306                                         if (match.hit)
7307                                         {
7308                                             processor->EndStartTag(spanlexer.FileName());
7309                                         }
7310                                         *parentMatch20 = match;
7311                                     }
7312                                     *parentMatch19 = match;
7313                                 }
7314                                 if (match.hit)
7315                                 {
7316                                     soulng::parser::Match match(false);
7317                                     soulng::parser::Match* parentMatch21 = &match;
7318                                     {
7319                                         soulng::parser::Match match = XmlParser::Content(lexerprocessor);
7320                                         *parentMatch21 = match;
7321                                     }
7322                                     *parentMatch19 = match;
7323                                 }
7324                                 *parentMatch18 = match;
7325                             }
7326                             if (match.hit)
7327                             {
7328                                 soulng::parser::Match match(false);
7329                                 soulng::parser::Match* parentMatch22 = &match;
7330                                 {
7331                                     soulng::parser::Match match = XmlParser::ETag(lexerprocessor);
7332                                     *parentMatch22 = match;
7333                                 }
7334                                 *parentMatch18 = match;
7335                             }
7336                             *parentMatch17 = match;
7337                         }
7338                         *parentMatch15 = match;
7339                     }
7340                 }
7341                 *parentMatch14 = match;
7342             }
7343             *parentMatch13 = match;
7344         }
7345         *parentMatch0 = match;
7346     }
7347     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7348 
7349 
7350 
7351 
7352 
7353     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7354     if (!match.hit)
7355     {
7356         match.value = nullptr;
7357     }
7358     return match;
7359 }
7360 
7361 soulng::parser::Match XmlParser::ETag(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
7362 {
7363     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7364 
7365 
7366 
7367 
7368 
7369 
7370 
7371     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7372     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
7373     soulng::parser::Match match(false);
7374     soulng::parser::Match* parentMatch0 = &match;
7375     {
7376         soulng::parser::Match match(false);
7377         soulng::parser::Match* parentMatch1 = &match;
7378         {
7379             soulng::parser::Match match(false);
7380             soulng::parser::Match* parentMatch2 = &match;
7381             {
7382                 soulng::parser::Match match(true);
7383                 for (int i : s47)
7384                 {
7385                     if (*lexer == i)
7386                     {
7387                         ++lexer;
7388                     }
7389                     else
7390                     {
7391                         match.hit = false;
7392                         break;
7393                     }
7394                 }
7395                 *parentMatch2 = match;
7396             }
7397             if (match.hit)
7398             {
7399                 soulng::parser::Match match(false);
7400                 soulng::parser::Match* parentMatch3 = &match;
7401                 {
7402                     soulng::parser::Match match(false);
7403                     soulng::parser::Match* parentMatch4 = &match;
7404                     {
7405                         int64_t pos = lexer.GetPos();
7406                         soulng::lexer::Span span = lexer.GetSpan();
7407                         soulng::parser::Match match = XmlParser::Name(lexer);
7408                         name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
7409                         if (match.hit)
7410                         {
7411                             processor->EndTag(name->valuespanlexer.FileName());
7412                         }
7413                         *parentMatch4 = match;
7414                     }
7415                     *parentMatch3 = match;
7416                 }
7417                 *parentMatch2 = match;
7418             }
7419             *parentMatch1 = match;
7420         }
7421         if (match.hit)
7422         {
7423             soulng::parser::Match match(false);
7424             soulng::parser::Match* parentMatch5 = &match;
7425             {
7426                 soulng::parser::Match match(true);
7427                 int64_t save = lexer.GetPos();
7428                 soulng::parser::Match* parentMatch6 = &match;
7429                 {
7430                     soulng::parser::Match match = XmlParser::S(lexer);
7431                     if (match.hit)
7432                     {
7433                         *parentMatch6 = match;
7434                     }
7435                     else
7436                     {
7437                         lexer.SetPos(save);
7438                     }
7439                 }
7440                 *parentMatch5 = match;
7441             }
7442             *parentMatch1 = match;
7443         }
7444         *parentMatch0 = match;
7445     }
7446     if (match.hit)
7447     {
7448         soulng::parser::Match match(false);
7449         soulng::parser::Match* parentMatch7 = &match;
7450         {
7451             soulng::parser::Match match(false);
7452             if (*lexer == 62)
7453             {
7454                 ++lexer;
7455                 match.hit = true;
7456             }
7457             *parentMatch7 = match;
7458         }
7459         *parentMatch0 = match;
7460     }
7461     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7462 
7463 
7464 
7465 
7466 
7467     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7468     if (!match.hit)
7469     {
7470         match.value = nullptr;
7471     }
7472     return match;
7473 }
7474 
7475 soulng::parser::Match XmlParser::Content(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
7476 {
7477     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7478 
7479 
7480 
7481 
7482 
7483 
7484 
7485     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7486     soulng::parser::Match match(false);
7487     soulng::parser::Match* parentMatch0 = &match;
7488     {
7489         soulng::parser::Match match(true);
7490         int64_t save = lexer.GetPos();
7491         soulng::parser::Match* parentMatch1 = &match;
7492         {
7493             soulng::parser::Match match = XmlParser::CharData(lexerprocessor);
7494             if (match.hit)
7495             {
7496                 *parentMatch1 = match;
7497             }
7498             else
7499             {
7500                 lexer.SetPos(save);
7501             }
7502         }
7503         *parentMatch0 = match;
7504     }
7505     if (match.hit)
7506     {
7507         soulng::parser::Match match(false);
7508         soulng::parser::Match* parentMatch2 = &match;
7509         {
7510             soulng::parser::Match match(true);
7511             soulng::parser::Match* parentMatch3 = &match;
7512             {
7513                 while (true)
7514                 {
7515                     int64_t save = lexer.GetPos();
7516                     {
7517                         soulng::parser::Match match(false);
7518                         soulng::parser::Match* parentMatch4 = &match;
7519                         {
7520                             soulng::parser::Match match(false);
7521                             soulng::parser::Match* parentMatch5 = &match;
7522                             {
7523                                 soulng::parser::Match match(false);
7524                                 soulng::parser::Match* parentMatch6 = &match;
7525                                 {
7526                                     soulng::parser::Match match(false);
7527                                     soulng::parser::Match* parentMatch7 = &match;
7528                                     {
7529                                         int64_t save = lexer.GetPos();
7530                                         soulng::parser::Match match(false);
7531                                         soulng::parser::Match* parentMatch8 = &match;
7532                                         {
7533                                             int64_t save = lexer.GetPos();
7534                                             soulng::parser::Match match(false);
7535                                             soulng::parser::Match* parentMatch9 = &match;
7536                                             {
7537                                                 int64_t save = lexer.GetPos();
7538                                                 soulng::parser::Match match(false);
7539                                                 soulng::parser::Match* parentMatch10 = &match;
7540                                                 {
7541                                                     int64_t save = lexer.GetPos();
7542                                                     soulng::parser::Match match = XmlParser::Element(lexerprocessor);
7543                                                     *parentMatch10 = match;
7544                                                     if (!match.hit)
7545                                                     {
7546                                                         soulng::parser::Match match(false);
7547                                                         soulng::parser::Match* parentMatch11 = &match;
7548                                                         lexer.SetPos(save);
7549                                                         {
7550                                                             soulng::parser::Match match = XmlParser::Reference(lexerprocessor);
7551                                                             *parentMatch11 = match;
7552                                                         }
7553                                                         *parentMatch10 = match;
7554                                                     }
7555                                                 }
7556                                                 *parentMatch9 = match;
7557                                                 if (!match.hit)
7558                                                 {
7559                                                     soulng::parser::Match match(false);
7560                                                     soulng::parser::Match* parentMatch12 = &match;
7561                                                     lexer.SetPos(save);
7562                                                     {
7563                                                         soulng::parser::Match match = XmlParser::CDSect(lexerprocessor);
7564                                                         *parentMatch12 = match;
7565                                                     }
7566                                                     *parentMatch9 = match;
7567                                                 }
7568                                             }
7569                                             *parentMatch8 = match;
7570                                             if (!match.hit)
7571                                             {
7572                                                 soulng::parser::Match match(false);
7573                                                 soulng::parser::Match* parentMatch13 = &match;
7574                                                 lexer.SetPos(save);
7575                                                 {
7576                                                     soulng::parser::Match match = XmlParser::PI(lexerprocessor);
7577                                                     *parentMatch13 = match;
7578                                                 }
7579                                                 *parentMatch8 = match;
7580                                             }
7581                                         }
7582                                         *parentMatch7 = match;
7583                                         if (!match.hit)
7584                                         {
7585                                             soulng::parser::Match match(false);
7586                                             soulng::parser::Match* parentMatch14 = &match;
7587                                             lexer.SetPos(save);
7588                                             {
7589                                                 soulng::parser::Match match = XmlParser::Comment(lexerprocessor);
7590                                                 *parentMatch14 = match;
7591                                             }
7592                                             *parentMatch7 = match;
7593                                         }
7594                                     }
7595                                     *parentMatch6 = match;
7596                                 }
7597                                 *parentMatch5 = match;
7598                             }
7599                             if (match.hit)
7600                             {
7601                                 soulng::parser::Match match(false);
7602                                 soulng::parser::Match* parentMatch15 = &match;
7603                                 {
7604                                     soulng::parser::Match match(true);
7605                                     int64_t save = lexer.GetPos();
7606                                     soulng::parser::Match* parentMatch16 = &match;
7607                                     {
7608                                         soulng::parser::Match match = XmlParser::CharData(lexerprocessor);
7609                                         if (match.hit)
7610                                         {
7611                                             *parentMatch16 = match;
7612                                         }
7613                                         else
7614                                         {
7615                                             lexer.SetPos(save);
7616                                         }
7617                                     }
7618                                     *parentMatch15 = match;
7619                                 }
7620                                 *parentMatch5 = match;
7621                             }
7622                             *parentMatch4 = match;
7623                         }
7624                         if (match.hit)
7625                         {
7626                             *parentMatch3 = match;
7627                         }
7628                         else
7629                         {
7630                             lexer.SetPos(save);
7631                             break;
7632                         }
7633                     }
7634                 }
7635             }
7636             *parentMatch2 = match;
7637         }
7638         *parentMatch0 = match;
7639     }
7640     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7641 
7642 
7643 
7644 
7645 
7646     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7647     if (!match.hit)
7648     {
7649         match.value = nullptr;
7650     }
7651     return match;
7652 }
7653 
7654 soulng::parser::Match XmlParser::CharDataChar(TrivialLexer& lexer)
7655 {
7656     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7657 
7658 
7659 
7660 
7661 
7662 
7663 
7664     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7665     soulng::parser::Match match(false);
7666     soulng::parser::Match* parentMatch0 = &match;
7667     {
7668         int64_t pos = lexer.GetPos();
7669         soulng::parser::Match match(lexer.Pos() != lexer.End());
7670         for (const soulng::parser::Range& range : s48)
7671         {
7672             if (*lexer >= range.first && *lexer <= range.last)
7673             {
7674                 match.hit = false;
7675                 break;
7676             }
7677         }
7678         if (match.hit)
7679         {
7680             ++lexer;
7681         }
7682         if (match.hit)
7683         {
7684             Token token = lexer.GetToken(pos);
7685             {
7686                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7687 
7688                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
7689                 return soulng::parser::Match(truenew soulng::parser::Value<char32_t>(static_cast<char32_t>(token.id)));
7690             }
7691         }
7692         *parentMatch0 = match;
7693     }
7694     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7695 
7696 
7697 
7698 
7699 
7700     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7701     if (!match.hit)
7702     {
7703         match.value = nullptr;
7704     }
7705     return match;
7706 }
7707 
7708 soulng::parser::Match XmlParser::CharData(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
7709 {
7710     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7711 
7712 
7713 
7714 
7715 
7716 
7717 
7718     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7719     std::u32string s = std::u32string();
7720     std::unique_ptr<soulng::parser::soulng::parser::Value<char32_t>>chr;
7721     soulng::parser::Match match(false);
7722     soulng::parser::Match* parentMatch0 = &match;
7723     {
7724         int64_t pos = lexer.GetPos();
7725         soulng::parser::Match match(false);
7726         soulng::parser::Match* parentMatch1 = &match;
7727         {
7728             soulng::parser::Match match(false);
7729             soulng::parser::Match* parentMatch2 = &match;
7730             int64_t save = lexer.GetPos();
7731             {
7732                 soulng::parser::Match match(true);
7733                 soulng::parser::Match* parentMatch3 = &match;
7734                 {
7735                     while (true)
7736                     {
7737                         int64_t save = lexer.GetPos();
7738                         {
7739                             soulng::parser::Match match(false);
7740                             soulng::parser::Match* parentMatch4 = &match;
7741                             {
7742                                 soulng::parser::Match match(false);
7743                                 soulng::parser::Match* parentMatch5 = &match;
7744                                 {
7745                                     int64_t pos = lexer.GetPos();
7746                                     soulng::parser::Match match = XmlParser::CharDataChar(lexer);
7747                                     chr.reset(static_cast<soulng::parser::soulng::parser::Value<char32_t>*>(match.value));
7748                                     if (match.hit)
7749                                     {
7750                                         s.append(1chr->value);
7751                                     }
7752                                     *parentMatch5 = match;
7753                                 }
7754                                 *parentMatch4 = match;
7755                             }
7756                             if (match.hit)
7757                             {
7758                                 *parentMatch3 = match;
7759                             }
7760                             else
7761                             {
7762                                 lexer.SetPos(save);
7763                                 break;
7764                             }
7765                         }
7766                     }
7767                 }
7768                 *parentMatch2 = match;
7769             }
7770             if (match.hit)
7771             {
7772                 soulng::parser::Match match(false);
7773                 soulng::parser::Match* parentMatch6 = &match;
7774                 {
7775                     int64_t tmp = lexer.GetPos();
7776                     lexer.SetPos(save);
7777                     save = tmp;
7778                     soulng::parser::Match match(false);
7779                     soulng::parser::Match* parentMatch7 = &match;
7780                     {
7781                         soulng::parser::Match match(false);
7782                         soulng::parser::Match* parentMatch8 = &match;
7783                         {
7784                             soulng::parser::Match match(false);
7785                             soulng::parser::Match* parentMatch9 = &match;
7786                             {
7787                                 soulng::parser::Match match(true);
7788                                 soulng::parser::Match* parentMatch10 = &match;
7789                                 {
7790                                     while (true)
7791                                     {
7792                                         int64_t save = lexer.GetPos();
7793                                         {
7794                                             soulng::parser::Match match(lexer.Pos() != lexer.End());
7795                                             for (const soulng::parser::Range& range : s49)
7796                                             {
7797                                                 if (*lexer >= range.first && *lexer <= range.last)
7798                                                 {
7799                                                     match.hit = false;
7800                                                     break;
7801                                                 }
7802                                             }
7803                                             if (match.hit)
7804                                             {
7805                                                 ++lexer;
7806                                             }
7807                                             if (match.hit)
7808                                             {
7809                                                 *parentMatch10 = match;
7810                                             }
7811                                             else
7812                                             {
7813                                                 lexer.SetPos(save);
7814                                                 break;
7815                                             }
7816                                         }
7817                                     }
7818                                 }
7819                                 *parentMatch9 = match;
7820                             }
7821                             if (match.hit)
7822                             {
7823                                 soulng::parser::Match match(false);
7824                                 soulng::parser::Match* parentMatch11 = &match;
7825                                 {
7826                                     soulng::parser::Match match(true);
7827                                     for (int i : s50)
7828                                     {
7829                                         if (*lexer == i)
7830                                         {
7831                                             ++lexer;
7832                                         }
7833                                         else
7834                                         {
7835                                             match.hit = false;
7836                                             break;
7837                                         }
7838                                     }
7839                                     *parentMatch11 = match;
7840                                 }
7841                                 *parentMatch9 = match;
7842                             }
7843                             *parentMatch8 = match;
7844                         }
7845                         if (match.hit)
7846                         {
7847                             soulng::parser::Match match(false);
7848                             soulng::parser::Match* parentMatch12 = &match;
7849                             {
7850                                 soulng::parser::Match match(true);
7851                                 soulng::parser::Match* parentMatch13 = &match;
7852                                 {
7853                                     while (true)
7854                                     {
7855                                         int64_t save = lexer.GetPos();
7856                                         {
7857                                             soulng::parser::Match match(lexer.Pos() != lexer.End());
7858                                             for (const soulng::parser::Range& range : s51)
7859                                             {
7860                                                 if (*lexer >= range.first && *lexer <= range.last)
7861                                                 {
7862                                                     match.hit = false;
7863                                                     break;
7864                                                 }
7865                                             }
7866                                             if (match.hit)
7867                                             {
7868                                                 ++lexer;
7869                                             }
7870                                             if (match.hit)
7871                                             {
7872                                                 *parentMatch13 = match;
7873                                             }
7874                                             else
7875                                             {
7876                                                 lexer.SetPos(save);
7877                                                 break;
7878                                             }
7879                                         }
7880                                     }
7881                                 }
7882                                 *parentMatch12 = match;
7883                             }
7884                             *parentMatch8 = match;
7885                         }
7886                         *parentMatch7 = match;
7887                     }
7888                     *parentMatch6 = match;
7889                 }
7890                 if (!match.hit)
7891                 {
7892                     lexer.SetPos(save);
7893                 }
7894                 *parentMatch2 = soulng::parser::Match(!match.hitmatch.value);
7895             }
7896             *parentMatch1 = match;
7897         }
7898         if (match.hit)
7899         {
7900             processor->Text(s);
7901         }
7902         *parentMatch0 = match;
7903     }
7904     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7905 
7906 
7907 
7908 
7909 
7910     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7911     if (!match.hit)
7912     {
7913         match.value = nullptr;
7914     }
7915     return match;
7916 }
7917 
7918 soulng::parser::Match XmlParser::CDSect(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
7919 {
7920     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
7921 
7922 
7923 
7924 
7925 
7926 
7927 
7928     #endif // SOULNG_PARSER_DEBUG_SUPPORT
7929     std::u32string s = std::u32string();
7930     std::unique_ptr<soulng::parser::soulng::parser::Value<char32_t>>chr;
7931     soulng::parser::Match match(false);
7932     soulng::parser::Match* parentMatch0 = &match;
7933     {
7934         int64_t pos = lexer.GetPos();
7935         soulng::parser::Match match(false);
7936         soulng::parser::Match* parentMatch1 = &match;
7937         {
7938             soulng::parser::Match match(false);
7939             soulng::parser::Match* parentMatch2 = &match;
7940             {
7941                 soulng::parser::Match match(false);
7942                 soulng::parser::Match* parentMatch3 = &match;
7943                 {
7944                     soulng::parser::Match match(true);
7945                     for (int i : s52)
7946                     {
7947                         if (*lexer == i)
7948                         {
7949                             ++lexer;
7950                         }
7951                         else
7952                         {
7953                             match.hit = false;
7954                             break;
7955                         }
7956                     }
7957                     *parentMatch3 = match;
7958                 }
7959                 if (match.hit)
7960                 {
7961                     soulng::parser::Match match(false);
7962                     soulng::parser::Match* parentMatch4 = &match;
7963                     {
7964                         soulng::parser::Match match(true);
7965                         soulng::parser::Match* parentMatch5 = &match;
7966                         {
7967                             while (true)
7968                             {
7969                                 int64_t save = lexer.GetPos();
7970                                 {
7971                                     soulng::parser::Match match(false);
7972                                     soulng::parser::Match* parentMatch6 = &match;
7973                                     {
7974                                         soulng::parser::Match match(false);
7975                                         soulng::parser::Match* parentMatch7 = &match;
7976                                         {
7977                                             int64_t pos = lexer.GetPos();
7978                                             soulng::parser::Match match(false);
7979                                             soulng::parser::Match* parentMatch8 = &match;
7980                                             {
7981                                                 soulng::parser::Match match(false);
7982                                                 soulng::parser::Match* parentMatch9 = &match;
7983                                                 int64_t save = lexer.GetPos();
7984                                                 {
7985                                                     soulng::parser::Match match = XmlParser::Char(lexer);
7986                                                     chr.reset(static_cast<soulng::parser::soulng::parser::Value<char32_t>*>(match.value));
7987                                                     *parentMatch9 = match;
7988                                                 }
7989                                                 if (match.hit)
7990                                                 {
7991                                                     soulng::parser::Match match(false);
7992                                                     soulng::parser::Match* parentMatch10 = &match;
7993                                                     {
7994                                                         int64_t tmp = lexer.GetPos();
7995                                                         lexer.SetPos(save);
7996                                                         save = tmp;
7997                                                         soulng::parser::Match match(true);
7998                                                         for (int i : s53)
7999                                                         {
8000                                                             if (*lexer == i)
8001                                                             {
8002                                                                 ++lexer;
8003                                                             }
8004                                                             else
8005                                                             {
8006                                                                 match.hit = false;
8007                                                                 break;
8008                                                             }
8009                                                         }
8010                                                         *parentMatch10 = match;
8011                                                     }
8012                                                     if (!match.hit)
8013                                                     {
8014                                                         lexer.SetPos(save);
8015                                                     }
8016                                                     *parentMatch9 = soulng::parser::Match(!match.hitmatch.value);
8017                                                 }
8018                                                 *parentMatch8 = match;
8019                                             }
8020                                             if (match.hit)
8021                                             {
8022                                                 s.append(1chr->value);
8023                                             }
8024                                             *parentMatch7 = match;
8025                                         }
8026                                         *parentMatch6 = match;
8027                                     }
8028                                     if (match.hit)
8029                                     {
8030                                         *parentMatch5 = match;
8031                                     }
8032                                     else
8033                                     {
8034                                         lexer.SetPos(save);
8035                                         break;
8036                                     }
8037                                 }
8038                             }
8039                         }
8040                         *parentMatch4 = match;
8041                     }
8042                     *parentMatch3 = match;
8043                 }
8044                 *parentMatch2 = match;
8045             }
8046             if (match.hit)
8047             {
8048                 soulng::parser::Match match(false);
8049                 soulng::parser::Match* parentMatch11 = &match;
8050                 {
8051                     soulng::parser::Match match(true);
8052                     for (int i : s54)
8053                     {
8054                         if (*lexer == i)
8055                         {
8056                             ++lexer;
8057                         }
8058                         else
8059                         {
8060                             match.hit = false;
8061                             break;
8062                         }
8063                     }
8064                     *parentMatch11 = match;
8065                 }
8066                 *parentMatch2 = match;
8067             }
8068             *parentMatch1 = match;
8069         }
8070         if (match.hit)
8071         {
8072             processor->CDataSection(s);
8073         }
8074         *parentMatch0 = match;
8075     }
8076     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8077 
8078 
8079 
8080 
8081 
8082     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8083     if (!match.hit)
8084     {
8085         match.value = nullptr;
8086     }
8087     return match;
8088 }
8089 
8090 soulng::parser::Match XmlParser::Attribute(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8091 {
8092     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8093 
8094 
8095 
8096 
8097 
8098 
8099 
8100     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8101     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>attName;
8102     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>attValue;
8103     soulng::parser::Match match(false);
8104     soulng::parser::Match* parentMatch0 = &match;
8105     {
8106         soulng::parser::Match match(false);
8107         soulng::parser::Match* parentMatch1 = &match;
8108         {
8109             soulng::parser::Match match = XmlParser::Name(lexer);
8110             attName.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
8111             *parentMatch1 = match;
8112         }
8113         if (match.hit)
8114         {
8115             soulng::parser::Match match(false);
8116             soulng::parser::Match* parentMatch2 = &match;
8117             {
8118                 soulng::parser::Match match = XmlParser::Eq(lexer);
8119                 *parentMatch2 = match;
8120             }
8121             *parentMatch1 = match;
8122         }
8123         *parentMatch0 = match;
8124     }
8125     if (match.hit)
8126     {
8127         soulng::parser::Match match(false);
8128         soulng::parser::Match* parentMatch3 = &match;
8129         {
8130             soulng::parser::Match match(false);
8131             soulng::parser::Match* parentMatch4 = &match;
8132             {
8133                 int64_t pos = lexer.GetPos();
8134                 soulng::lexer::Span span = lexer.GetSpan();
8135                 soulng::parser::Match match = XmlParser::AttValue(lexerprocessor);
8136                 attValue.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
8137                 if (match.hit)
8138                 {
8139                     processor->AddAttribute(attName->valueattValue->valuespanlexer.FileName());
8140                 }
8141                 *parentMatch4 = match;
8142             }
8143             *parentMatch3 = match;
8144         }
8145         *parentMatch0 = match;
8146     }
8147     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8148 
8149 
8150 
8151 
8152 
8153     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8154     if (!match.hit)
8155     {
8156         match.value = nullptr;
8157     }
8158     return match;
8159 }
8160 
8161 soulng::parser::Match XmlParser::AttValueDQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8162 {
8163     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8164 
8165 
8166 
8167 
8168 
8169 
8170 
8171     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8172     soulng::parser::Match match(false);
8173     soulng::parser::Match* parentMatch0 = &match;
8174     {
8175         soulng::parser::Match match(false);
8176         soulng::parser::Match* parentMatch1 = &match;
8177         {
8178             soulng::parser::Match match(false);
8179             soulng::parser::Match* parentMatch2 = &match;
8180             {
8181                 int64_t pos = lexer.GetPos();
8182                 soulng::parser::Match match(false);
8183                 if (*lexer == 34)
8184                 {
8185                     ++lexer;
8186                     match.hit = true;
8187                 }
8188                 if (match.hit)
8189                 {
8190                     processor->BeginAttributeValue();
8191                 }
8192                 *parentMatch2 = match;
8193             }
8194             *parentMatch1 = match;
8195         }
8196         if (match.hit)
8197         {
8198             soulng::parser::Match match(false);
8199             soulng::parser::Match* parentMatch3 = &match;
8200             {
8201                 soulng::parser::Match match(true);
8202                 soulng::parser::Match* parentMatch4 = &match;
8203                 {
8204                     while (true)
8205                     {
8206                         int64_t save = lexer.GetPos();
8207                         {
8208                             soulng::parser::Match match(false);
8209                             soulng::parser::Match* parentMatch5 = &match;
8210                             {
8211                                 soulng::parser::Match match(false);
8212                                 soulng::parser::Match* parentMatch6 = &match;
8213                                 {
8214                                     int64_t save = lexer.GetPos();
8215                                     soulng::parser::Match match(false);
8216                                     soulng::parser::Match* parentMatch7 = &match;
8217                                     {
8218                                         int64_t pos = lexer.GetPos();
8219                                         soulng::lexer::Span span = lexer.GetSpan();
8220                                         soulng::parser::Match match(lexer.Pos() != lexer.End());
8221                                         for (const soulng::parser::Range& range : s55)
8222                                         {
8223                                             if (*lexer >= range.first && *lexer <= range.last)
8224                                             {
8225                                                 match.hit = false;
8226                                                 break;
8227                                             }
8228                                         }
8229                                         if (match.hit)
8230                                         {
8231                                             ++lexer;
8232                                         }
8233                                         if (match.hit)
8234                                         {
8235                                             processor->AttValue().append(lexer.GetMatch(span));
8236                                         }
8237                                         *parentMatch7 = match;
8238                                     }
8239                                     *parentMatch6 = match;
8240                                     if (!match.hit)
8241                                     {
8242                                         soulng::parser::Match match(false);
8243                                         soulng::parser::Match* parentMatch8 = &match;
8244                                         lexer.SetPos(save);
8245                                         {
8246                                             soulng::parser::Match match = XmlParser::Reference(lexerprocessor);
8247                                             *parentMatch8 = match;
8248                                         }
8249                                         *parentMatch6 = match;
8250                                     }
8251                                 }
8252                                 *parentMatch5 = match;
8253                             }
8254                             if (match.hit)
8255                             {
8256                                 *parentMatch4 = match;
8257                             }
8258                             else
8259                             {
8260                                 lexer.SetPos(save);
8261                                 break;
8262                             }
8263                         }
8264                     }
8265                 }
8266                 *parentMatch3 = match;
8267             }
8268             *parentMatch1 = match;
8269         }
8270         *parentMatch0 = match;
8271     }
8272     if (match.hit)
8273     {
8274         soulng::parser::Match match(false);
8275         soulng::parser::Match* parentMatch9 = &match;
8276         {
8277             soulng::parser::Match match(false);
8278             soulng::parser::Match* parentMatch10 = &match;
8279             {
8280                 int64_t pos = lexer.GetPos();
8281                 soulng::parser::Match match(false);
8282                 if (*lexer == 34)
8283                 {
8284                     ++lexer;
8285                     match.hit = true;
8286                 }
8287                 if (match.hit)
8288                 {
8289                     std::u32string value = processor->AttValue();
8290                     processor->EndAttributeValue();
8291                     {
8292                         #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8293 
8294                         #endif // SOULNG_PARSER_DEBUG_SUPPORT
8295                         return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(value));
8296                     }
8297                 }
8298                 *parentMatch10 = match;
8299             }
8300             *parentMatch9 = match;
8301         }
8302         *parentMatch0 = match;
8303     }
8304     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8305 
8306 
8307 
8308 
8309 
8310     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8311     if (!match.hit)
8312     {
8313         match.value = nullptr;
8314     }
8315     return match;
8316 }
8317 
8318 soulng::parser::Match XmlParser::AttValueSQ(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8319 {
8320     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8321 
8322 
8323 
8324 
8325 
8326 
8327 
8328     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8329     soulng::parser::Match match(false);
8330     soulng::parser::Match* parentMatch0 = &match;
8331     {
8332         soulng::parser::Match match(false);
8333         soulng::parser::Match* parentMatch1 = &match;
8334         {
8335             soulng::parser::Match match(false);
8336             soulng::parser::Match* parentMatch2 = &match;
8337             {
8338                 int64_t pos = lexer.GetPos();
8339                 soulng::parser::Match match(false);
8340                 if (*lexer == 39)
8341                 {
8342                     ++lexer;
8343                     match.hit = true;
8344                 }
8345                 if (match.hit)
8346                 {
8347                     processor->BeginAttributeValue();
8348                 }
8349                 *parentMatch2 = match;
8350             }
8351             *parentMatch1 = match;
8352         }
8353         if (match.hit)
8354         {
8355             soulng::parser::Match match(false);
8356             soulng::parser::Match* parentMatch3 = &match;
8357             {
8358                 soulng::parser::Match match(true);
8359                 soulng::parser::Match* parentMatch4 = &match;
8360                 {
8361                     while (true)
8362                     {
8363                         int64_t save = lexer.GetPos();
8364                         {
8365                             soulng::parser::Match match(false);
8366                             soulng::parser::Match* parentMatch5 = &match;
8367                             {
8368                                 soulng::parser::Match match(false);
8369                                 soulng::parser::Match* parentMatch6 = &match;
8370                                 {
8371                                     int64_t save = lexer.GetPos();
8372                                     soulng::parser::Match match(false);
8373                                     soulng::parser::Match* parentMatch7 = &match;
8374                                     {
8375                                         int64_t pos = lexer.GetPos();
8376                                         soulng::lexer::Span span = lexer.GetSpan();
8377                                         soulng::parser::Match match(lexer.Pos() != lexer.End());
8378                                         for (const soulng::parser::Range& range : s56)
8379                                         {
8380                                             if (*lexer >= range.first && *lexer <= range.last)
8381                                             {
8382                                                 match.hit = false;
8383                                                 break;
8384                                             }
8385                                         }
8386                                         if (match.hit)
8387                                         {
8388                                             ++lexer;
8389                                         }
8390                                         if (match.hit)
8391                                         {
8392                                             processor->AttValue().append(lexer.GetMatch(span));
8393                                         }
8394                                         *parentMatch7 = match;
8395                                     }
8396                                     *parentMatch6 = match;
8397                                     if (!match.hit)
8398                                     {
8399                                         soulng::parser::Match match(false);
8400                                         soulng::parser::Match* parentMatch8 = &match;
8401                                         lexer.SetPos(save);
8402                                         {
8403                                             soulng::parser::Match match = XmlParser::Reference(lexerprocessor);
8404                                             *parentMatch8 = match;
8405                                         }
8406                                         *parentMatch6 = match;
8407                                     }
8408                                 }
8409                                 *parentMatch5 = match;
8410                             }
8411                             if (match.hit)
8412                             {
8413                                 *parentMatch4 = match;
8414                             }
8415                             else
8416                             {
8417                                 lexer.SetPos(save);
8418                                 break;
8419                             }
8420                         }
8421                     }
8422                 }
8423                 *parentMatch3 = match;
8424             }
8425             *parentMatch1 = match;
8426         }
8427         *parentMatch0 = match;
8428     }
8429     if (match.hit)
8430     {
8431         soulng::parser::Match match(false);
8432         soulng::parser::Match* parentMatch9 = &match;
8433         {
8434             soulng::parser::Match match(false);
8435             soulng::parser::Match* parentMatch10 = &match;
8436             {
8437                 int64_t pos = lexer.GetPos();
8438                 soulng::parser::Match match(false);
8439                 if (*lexer == 39)
8440                 {
8441                     ++lexer;
8442                     match.hit = true;
8443                 }
8444                 if (match.hit)
8445                 {
8446                     std::u32string value = processor->AttValue();
8447                     processor->EndAttributeValue();
8448                     {
8449                         #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8450 
8451                         #endif // SOULNG_PARSER_DEBUG_SUPPORT
8452                         return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(value));
8453                     }
8454                 }
8455                 *parentMatch10 = match;
8456             }
8457             *parentMatch9 = match;
8458         }
8459         *parentMatch0 = match;
8460     }
8461     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8462 
8463 
8464 
8465 
8466 
8467     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8468     if (!match.hit)
8469     {
8470         match.value = nullptr;
8471     }
8472     return match;
8473 }
8474 
8475 soulng::parser::Match XmlParser::AttValue(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8476 {
8477     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8478 
8479 
8480 
8481 
8482 
8483 
8484 
8485     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8486     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>attValueDQ;
8487     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>attValueSQ;
8488     soulng::parser::Match match(false);
8489     soulng::parser::Match* parentMatch0 = &match;
8490     {
8491         int64_t save = lexer.GetPos();
8492         soulng::parser::Match match(false);
8493         soulng::parser::Match* parentMatch1 = &match;
8494         {
8495             int64_t pos = lexer.GetPos();
8496             soulng::parser::Match match = XmlParser::AttValueDQ(lexerprocessor);
8497             attValueDQ.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
8498             if (match.hit)
8499             {
8500                 {
8501                     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8502 
8503                     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8504                     return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(attValueDQ->value));
8505                 }
8506             }
8507             *parentMatch1 = match;
8508         }
8509         *parentMatch0 = match;
8510         if (!match.hit)
8511         {
8512             soulng::parser::Match match(false);
8513             soulng::parser::Match* parentMatch2 = &match;
8514             lexer.SetPos(save);
8515             {
8516                 soulng::parser::Match match(false);
8517                 soulng::parser::Match* parentMatch3 = &match;
8518                 {
8519                     int64_t pos = lexer.GetPos();
8520                     soulng::parser::Match match = XmlParser::AttValueSQ(lexerprocessor);
8521                     attValueSQ.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
8522                     if (match.hit)
8523                     {
8524                         {
8525                             #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8526 
8527                             #endif // SOULNG_PARSER_DEBUG_SUPPORT
8528                             return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(attValueSQ->value));
8529                         }
8530                     }
8531                     *parentMatch3 = match;
8532                 }
8533                 *parentMatch2 = match;
8534             }
8535             *parentMatch0 = match;
8536         }
8537     }
8538     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8539 
8540 
8541 
8542 
8543 
8544     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8545     if (!match.hit)
8546     {
8547         match.value = nullptr;
8548     }
8549     return match;
8550 }
8551 
8552 soulng::parser::Match XmlParser::EntityRef(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8553 {
8554     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8555 
8556 
8557 
8558 
8559 
8560 
8561 
8562     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8563     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
8564     soulng::parser::Match match(false);
8565     soulng::parser::Match* parentMatch0 = &match;
8566     {
8567         int64_t pos = lexer.GetPos();
8568         soulng::lexer::Span span = lexer.GetSpan();
8569         soulng::parser::Match match(false);
8570         soulng::parser::Match* parentMatch1 = &match;
8571         {
8572             soulng::parser::Match match(false);
8573             soulng::parser::Match* parentMatch2 = &match;
8574             {
8575                 soulng::parser::Match match(false);
8576                 soulng::parser::Match* parentMatch3 = &match;
8577                 {
8578                     soulng::parser::Match match(false);
8579                     if (*lexer == 38)
8580                     {
8581                         ++lexer;
8582                         match.hit = true;
8583                     }
8584                     *parentMatch3 = match;
8585                 }
8586                 if (match.hit)
8587                 {
8588                     soulng::parser::Match match(false);
8589                     soulng::parser::Match* parentMatch4 = &match;
8590                     {
8591                         soulng::parser::Match match = XmlParser::Name(lexer);
8592                         name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
8593                         *parentMatch4 = match;
8594                     }
8595                     *parentMatch3 = match;
8596                 }
8597                 *parentMatch2 = match;
8598             }
8599             if (match.hit)
8600             {
8601                 soulng::parser::Match match(false);
8602                 soulng::parser::Match* parentMatch5 = &match;
8603                 {
8604                     soulng::parser::Match match(false);
8605                     if (*lexer == 59)
8606                     {
8607                         ++lexer;
8608                         match.hit = true;
8609                     }
8610                     *parentMatch5 = match;
8611                 }
8612                 *parentMatch2 = match;
8613             }
8614             *parentMatch1 = match;
8615         }
8616         if (match.hit)
8617         {
8618             processor->EntityRef(name->valuespanlexer.FileName());
8619         }
8620         *parentMatch0 = match;
8621     }
8622     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8623 
8624 
8625 
8626 
8627 
8628     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8629     if (!match.hit)
8630     {
8631         match.value = nullptr;
8632     }
8633     return match;
8634 }
8635 
8636 soulng::parser::Match XmlParser::DecCodePoint(TrivialLexer& lexer)
8637 {
8638     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8639 
8640 
8641 
8642 
8643 
8644 
8645 
8646     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8647     uint32_t val = uint32_t();
8648     soulng::parser::Match match(false);
8649     soulng::parser::Match* parentMatch0 = &match;
8650     {
8651         int64_t pos = lexer.GetPos();
8652         soulng::parser::Match match(false);
8653         soulng::parser::Match* parentMatch1 = &match;
8654         {
8655             soulng::parser::Match match(false);
8656             soulng::parser::Match* parentMatch2 = &match;
8657             {
8658                 soulng::parser::Match match(false);
8659                 soulng::parser::Match* parentMatch3 = &match;
8660                 {
8661                     soulng::parser::Match match(false);
8662                     soulng::parser::Match* parentMatch4 = &match;
8663                     {
8664                         int64_t pos = lexer.GetPos();
8665                         soulng::parser::Match match(false);
8666                         for (const soulng::parser::Range& range : s57)
8667                         {
8668                             if (*lexer >= range.first && *lexer <= range.last)
8669                             {
8670                                 match.hit = true;
8671                                 ++lexer;
8672                                 break;
8673                             }
8674                         }
8675                         if (match.hit)
8676                         {
8677                             Token token = lexer.GetToken(pos);
8678                             val = 10 * val + token.id - '0';
8679                         }
8680                         *parentMatch4 = match;
8681                     }
8682                     *parentMatch3 = match;
8683                 }
8684                 *parentMatch2 = match;
8685             }
8686             if (match.hit)
8687             {
8688                 soulng::parser::Match match(true);
8689                 soulng::parser::Match* parentMatch5 = &match;
8690                 while (true)
8691                 {
8692                     int64_t save = lexer.GetPos();
8693                     {
8694                         soulng::parser::Match match(false);
8695                         soulng::parser::Match* parentMatch6 = &match;
8696                         {
8697                             soulng::parser::Match match(false);
8698                             soulng::parser::Match* parentMatch7 = &match;
8699                             {
8700                                 int64_t pos = lexer.GetPos();
8701                                 soulng::parser::Match match(false);
8702                                 for (const soulng::parser::Range& range : s57)
8703                                 {
8704                                     if (*lexer >= range.first && *lexer <= range.last)
8705                                     {
8706                                         match.hit = true;
8707                                         ++lexer;
8708                                         break;
8709                                     }
8710                                 }
8711                                 if (match.hit)
8712                                 {
8713                                     Token token = lexer.GetToken(pos);
8714                                     val = 10 * val + token.id - '0';
8715                                 }
8716                                 *parentMatch7 = match;
8717                             }
8718                             *parentMatch6 = match;
8719                         }
8720                         if (match.hit)
8721                         {
8722                             *parentMatch5 = match;
8723                         }
8724                         else
8725                         {
8726                             lexer.SetPos(save);
8727                             break;
8728                         }
8729                     }
8730                 }
8731             }
8732             *parentMatch1 = match;
8733         }
8734         if (match.hit)
8735         {
8736             {
8737                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8738 
8739                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
8740                 return soulng::parser::Match(truenew soulng::parser::Value<uint32_t>(val));
8741             }
8742         }
8743         *parentMatch0 = match;
8744     }
8745     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8746 
8747 
8748 
8749 
8750 
8751     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8752     if (!match.hit)
8753     {
8754         match.value = nullptr;
8755     }
8756     return match;
8757 }
8758 
8759 soulng::parser::Match XmlParser::HexCodePoint(TrivialLexer& lexer)
8760 {
8761     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8762 
8763 
8764 
8765 
8766 
8767 
8768 
8769     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8770     uint32_t val = uint32_t();
8771     soulng::parser::Match match(false);
8772     soulng::parser::Match* parentMatch0 = &match;
8773     {
8774         int64_t pos = lexer.GetPos();
8775         soulng::parser::Match match(false);
8776         soulng::parser::Match* parentMatch1 = &match;
8777         {
8778             soulng::parser::Match match(false);
8779             soulng::parser::Match* parentMatch2 = &match;
8780             {
8781                 soulng::parser::Match match(false);
8782                 soulng::parser::Match* parentMatch3 = &match;
8783                 {
8784                     soulng::parser::Match match(false);
8785                     soulng::parser::Match* parentMatch4 = &match;
8786                     {
8787                         int64_t pos = lexer.GetPos();
8788                         soulng::parser::Match match(false);
8789                         for (const soulng::parser::Range& range : s58)
8790                         {
8791                             if (*lexer >= range.first && *lexer <= range.last)
8792                             {
8793                                 match.hit = true;
8794                                 ++lexer;
8795                                 break;
8796                             }
8797                         }
8798                         if (match.hit)
8799                         {
8800                             Token token = lexer.GetToken(pos);
8801                             if (token.id >= '0' && token.id <= '9') val = 16 * val + token.id - '0';
8802                             else if (token.id >= 'a' && token.id <= 'f') val = 16 * val + 10 + token.id - 'a';
8803                             else if (token.id >= 'A' && token.id <= 'F') val = 16 * val + 10 + token.id - 'A';
8804                         }
8805                         *parentMatch4 = match;
8806                     }
8807                     *parentMatch3 = match;
8808                 }
8809                 *parentMatch2 = match;
8810             }
8811             if (match.hit)
8812             {
8813                 soulng::parser::Match match(true);
8814                 soulng::parser::Match* parentMatch5 = &match;
8815                 while (true)
8816                 {
8817                     int64_t save = lexer.GetPos();
8818                     {
8819                         soulng::parser::Match match(false);
8820                         soulng::parser::Match* parentMatch6 = &match;
8821                         {
8822                             soulng::parser::Match match(false);
8823                             soulng::parser::Match* parentMatch7 = &match;
8824                             {
8825                                 int64_t pos = lexer.GetPos();
8826                                 soulng::parser::Match match(false);
8827                                 for (const soulng::parser::Range& range : s58)
8828                                 {
8829                                     if (*lexer >= range.first && *lexer <= range.last)
8830                                     {
8831                                         match.hit = true;
8832                                         ++lexer;
8833                                         break;
8834                                     }
8835                                 }
8836                                 if (match.hit)
8837                                 {
8838                                     Token token = lexer.GetToken(pos);
8839                                     if (token.id >= '0' && token.id <= '9') val = 16 * val + token.id - '0';
8840                                     else if (token.id >= 'a' && token.id <= 'f') val = 16 * val + 10 + token.id - 'a';
8841                                     else if (token.id >= 'A' && token.id <= 'F') val = 16 * val + 10 + token.id - 'A';
8842                                 }
8843                                 *parentMatch7 = match;
8844                             }
8845                             *parentMatch6 = match;
8846                         }
8847                         if (match.hit)
8848                         {
8849                             *parentMatch5 = match;
8850                         }
8851                         else
8852                         {
8853                             lexer.SetPos(save);
8854                             break;
8855                         }
8856                     }
8857                 }
8858             }
8859             *parentMatch1 = match;
8860         }
8861         if (match.hit)
8862         {
8863             {
8864                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8865 
8866                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
8867                 return soulng::parser::Match(truenew soulng::parser::Value<uint32_t>(val));
8868             }
8869         }
8870         *parentMatch0 = match;
8871     }
8872     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8873 
8874 
8875 
8876 
8877 
8878     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8879     if (!match.hit)
8880     {
8881         match.value = nullptr;
8882     }
8883     return match;
8884 }
8885 
8886 soulng::parser::Match XmlParser::CharRef(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
8887 {
8888     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
8889 
8890 
8891 
8892 
8893 
8894 
8895 
8896     #endif // SOULNG_PARSER_DEBUG_SUPPORT
8897     std::unique_ptr<soulng::parser::soulng::parser::Value<uint32_t>>decCodePoint;
8898     std::unique_ptr<soulng::parser::soulng::parser::Value<uint32_t>>hexCodePoint;
8899     soulng::parser::Match match(false);
8900     soulng::parser::Match* parentMatch0 = &match;
8901     {
8902         int64_t save = lexer.GetPos();
8903         soulng::parser::Match match(false);
8904         soulng::parser::Match* parentMatch1 = &match;
8905         {
8906             int64_t pos = lexer.GetPos();
8907             soulng::parser::Match match(false);
8908             soulng::parser::Match* parentMatch2 = &match;
8909             {
8910                 soulng::parser::Match match(false);
8911                 soulng::parser::Match* parentMatch3 = &match;
8912                 {
8913                     soulng::parser::Match match(false);
8914                     soulng::parser::Match* parentMatch4 = &match;
8915                     {
8916                         soulng::parser::Match match(true);
8917                         for (int i : s59)
8918                         {
8919                             if (*lexer == i)
8920                             {
8921                                 ++lexer;
8922                             }
8923                             else
8924                             {
8925                                 match.hit = false;
8926                                 break;
8927                             }
8928                         }
8929                         *parentMatch4 = match;
8930                     }
8931                     if (match.hit)
8932                     {
8933                         soulng::parser::Match match(false);
8934                         soulng::parser::Match* parentMatch5 = &match;
8935                         {
8936                             soulng::parser::Match match = XmlParser::DecCodePoint(lexer);
8937                             decCodePoint.reset(static_cast<soulng::parser::soulng::parser::Value<uint32_t>*>(match.value));
8938                             *parentMatch5 = match;
8939                         }
8940                         *parentMatch4 = match;
8941                     }
8942                     *parentMatch3 = match;
8943                 }
8944                 if (match.hit)
8945                 {
8946                     soulng::parser::Match match(false);
8947                     soulng::parser::Match* parentMatch6 = &match;
8948                     {
8949                         soulng::parser::Match match(false);
8950                         if (*lexer == 59)
8951                         {
8952                             ++lexer;
8953                             match.hit = true;
8954                         }
8955                         *parentMatch6 = match;
8956                     }
8957                     *parentMatch3 = match;
8958                 }
8959                 *parentMatch2 = match;
8960             }
8961             if (match.hit)
8962             {
8963                 processor->Text(std::u32string(1static_cast<char32_t>(decCodePoint->value)));
8964             }
8965             *parentMatch1 = match;
8966         }
8967         *parentMatch0 = match;
8968         if (!match.hit)
8969         {
8970             soulng::parser::Match match(false);
8971             soulng::parser::Match* parentMatch7 = &match;
8972             lexer.SetPos(save);
8973             {
8974                 soulng::parser::Match match(false);
8975                 soulng::parser::Match* parentMatch8 = &match;
8976                 {
8977                     int64_t pos = lexer.GetPos();
8978                     soulng::parser::Match match(false);
8979                     soulng::parser::Match* parentMatch9 = &match;
8980                     {
8981                         soulng::parser::Match match(false);
8982                         soulng::parser::Match* parentMatch10 = &match;
8983                         {
8984                             soulng::parser::Match match(false);
8985                             soulng::parser::Match* parentMatch11 = &match;
8986                             {
8987                                 soulng::parser::Match match(true);
8988                                 for (int i : s60)
8989                                 {
8990                                     if (*lexer == i)
8991                                     {
8992                                         ++lexer;
8993                                     }
8994                                     else
8995                                     {
8996                                         match.hit = false;
8997                                         break;
8998                                     }
8999                                 }
9000                                 *parentMatch11 = match;
9001                             }
9002                             if (match.hit)
9003                             {
9004                                 soulng::parser::Match match(false);
9005                                 soulng::parser::Match* parentMatch12 = &match;
9006                                 {
9007                                     soulng::parser::Match match = XmlParser::HexCodePoint(lexer);
9008                                     hexCodePoint.reset(static_cast<soulng::parser::soulng::parser::Value<uint32_t>*>(match.value));
9009                                     *parentMatch12 = match;
9010                                 }
9011                                 *parentMatch11 = match;
9012                             }
9013                             *parentMatch10 = match;
9014                         }
9015                         if (match.hit)
9016                         {
9017                             soulng::parser::Match match(false);
9018                             soulng::parser::Match* parentMatch13 = &match;
9019                             {
9020                                 soulng::parser::Match match(false);
9021                                 if (*lexer == 59)
9022                                 {
9023                                     ++lexer;
9024                                     match.hit = true;
9025                                 }
9026                                 *parentMatch13 = match;
9027                             }
9028                             *parentMatch10 = match;
9029                         }
9030                         *parentMatch9 = match;
9031                     }
9032                     if (match.hit)
9033                     {
9034                         processor->Text(std::u32string(1static_cast<char32_t>(hexCodePoint->value)));
9035                     }
9036                     *parentMatch8 = match;
9037                 }
9038                 *parentMatch7 = match;
9039             }
9040             *parentMatch0 = match;
9041         }
9042     }
9043     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9044 
9045 
9046 
9047 
9048 
9049     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9050     if (!match.hit)
9051     {
9052         match.value = nullptr;
9053     }
9054     return match;
9055 }
9056 
9057 soulng::parser::Match XmlParser::Reference(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
9058 {
9059     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9060 
9061 
9062 
9063 
9064 
9065 
9066 
9067     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9068     soulng::parser::Match match(false);
9069     soulng::parser::Match* parentMatch0 = &match;
9070     {
9071         int64_t save = lexer.GetPos();
9072         soulng::parser::Match match = XmlParser::EntityRef(lexerprocessor);
9073         *parentMatch0 = match;
9074         if (!match.hit)
9075         {
9076             soulng::parser::Match match(false);
9077             soulng::parser::Match* parentMatch1 = &match;
9078             lexer.SetPos(save);
9079             {
9080                 soulng::parser::Match match = XmlParser::CharRef(lexerprocessor);
9081                 *parentMatch1 = match;
9082             }
9083             *parentMatch0 = match;
9084         }
9085     }
9086     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9087 
9088 
9089 
9090 
9091 
9092     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9093     if (!match.hit)
9094     {
9095         match.value = nullptr;
9096     }
9097     return match;
9098 }
9099 
9100 soulng::parser::Match XmlParser::Misc(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
9101 {
9102     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9103 
9104 
9105 
9106 
9107 
9108 
9109 
9110     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9111     soulng::parser::Match match(false);
9112     soulng::parser::Match* parentMatch0 = &match;
9113     {
9114         int64_t save = lexer.GetPos();
9115         soulng::parser::Match match(false);
9116         soulng::parser::Match* parentMatch1 = &match;
9117         {
9118             int64_t save = lexer.GetPos();
9119             soulng::parser::Match match = XmlParser::Comment(lexerprocessor);
9120             *parentMatch1 = match;
9121             if (!match.hit)
9122             {
9123                 soulng::parser::Match match(false);
9124                 soulng::parser::Match* parentMatch2 = &match;
9125                 lexer.SetPos(save);
9126                 {
9127                     soulng::parser::Match match = XmlParser::PI(lexerprocessor);
9128                     *parentMatch2 = match;
9129                 }
9130                 *parentMatch1 = match;
9131             }
9132         }
9133         *parentMatch0 = match;
9134         if (!match.hit)
9135         {
9136             soulng::parser::Match match(false);
9137             soulng::parser::Match* parentMatch3 = &match;
9138             lexer.SetPos(save);
9139             {
9140                 soulng::parser::Match match = XmlParser::S(lexer);
9141                 *parentMatch3 = match;
9142             }
9143             *parentMatch0 = match;
9144         }
9145     }
9146     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9147 
9148 
9149 
9150 
9151 
9152     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9153     if (!match.hit)
9154     {
9155         match.value = nullptr;
9156     }
9157     return match;
9158 }
9159 
9160 soulng::parser::Match XmlParser::Comment(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
9161 {
9162     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9163 
9164 
9165 
9166 
9167 
9168 
9169 
9170     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9171     std::u32string s = std::u32string();
9172     std::unique_ptr<soulng::parser::soulng::parser::Value<char32_t>>chr;
9173     soulng::parser::Match match(false);
9174     soulng::parser::Match* parentMatch0 = &match;
9175     {
9176         int64_t pos = lexer.GetPos();
9177         soulng::parser::Match match(false);
9178         soulng::parser::Match* parentMatch1 = &match;
9179         {
9180             soulng::parser::Match match(false);
9181             soulng::parser::Match* parentMatch2 = &match;
9182             {
9183                 soulng::parser::Match match(false);
9184                 soulng::parser::Match* parentMatch3 = &match;
9185                 {
9186                     soulng::parser::Match match(true);
9187                     for (int i : s61)
9188                     {
9189                         if (*lexer == i)
9190                         {
9191                             ++lexer;
9192                         }
9193                         else
9194                         {
9195                             match.hit = false;
9196                             break;
9197                         }
9198                     }
9199                     *parentMatch3 = match;
9200                 }
9201                 if (match.hit)
9202                 {
9203                     soulng::parser::Match match(false);
9204                     soulng::parser::Match* parentMatch4 = &match;
9205                     {
9206                         soulng::parser::Match match(true);
9207                         soulng::parser::Match* parentMatch5 = &match;
9208                         {
9209                             while (true)
9210                             {
9211                                 int64_t save = lexer.GetPos();
9212                                 {
9213                                     soulng::parser::Match match(false);
9214                                     soulng::parser::Match* parentMatch6 = &match;
9215                                     {
9216                                         soulng::parser::Match match(false);
9217                                         soulng::parser::Match* parentMatch7 = &match;
9218                                         {
9219                                             int64_t save = lexer.GetPos();
9220                                             soulng::parser::Match match(false);
9221                                             soulng::parser::Match* parentMatch8 = &match;
9222                                             {
9223                                                 int64_t pos = lexer.GetPos();
9224                                                 soulng::parser::Match match(false);
9225                                                 soulng::parser::Match* parentMatch9 = &match;
9226                                                 {
9227                                                     soulng::parser::Match match(false);
9228                                                     soulng::parser::Match* parentMatch10 = &match;
9229                                                     int64_t save = lexer.GetPos();
9230                                                     {
9231                                                         soulng::parser::Match match = XmlParser::Char(lexer);
9232                                                         chr.reset(static_cast<soulng::parser::soulng::parser::Value<char32_t>*>(match.value));
9233                                                         *parentMatch10 = match;
9234                                                     }
9235                                                     if (match.hit)
9236                                                     {
9237                                                         soulng::parser::Match match(false);
9238                                                         soulng::parser::Match* parentMatch11 = &match;
9239                                                         {
9240                                                             int64_t tmp = lexer.GetPos();
9241                                                             lexer.SetPos(save);
9242                                                             save = tmp;
9243                                                             soulng::parser::Match match(false);
9244                                                             if (*lexer == 45)
9245                                                             {
9246                                                                 ++lexer;
9247                                                                 match.hit = true;
9248                                                             }
9249                                                             *parentMatch11 = match;
9250                                                         }
9251                                                         if (!match.hit)
9252                                                         {
9253                                                             lexer.SetPos(save);
9254                                                         }
9255                                                         *parentMatch10 = soulng::parser::Match(!match.hitmatch.value);
9256                                                     }
9257                                                     *parentMatch9 = match;
9258                                                 }
9259                                                 if (match.hit)
9260                                                 {
9261                                                     s.append(1chr->value);
9262                                                 }
9263                                                 *parentMatch8 = match;
9264                                             }
9265                                             *parentMatch7 = match;
9266                                             if (!match.hit)
9267                                             {
9268                                                 soulng::parser::Match match(false);
9269                                                 soulng::parser::Match* parentMatch12 = &match;
9270                                                 lexer.SetPos(save);
9271                                                 {
9272                                                     soulng::parser::Match match(false);
9273                                                     soulng::parser::Match* parentMatch13 = &match;
9274                                                     {
9275                                                         soulng::parser::Match match(false);
9276                                                         if (*lexer == 45)
9277                                                         {
9278                                                             ++lexer;
9279                                                             match.hit = true;
9280                                                         }
9281                                                         *parentMatch13 = match;
9282                                                     }
9283                                                     if (match.hit)
9284                                                     {
9285                                                         soulng::parser::Match match(false);
9286                                                         soulng::parser::Match* parentMatch14 = &match;
9287                                                         {
9288                                                             soulng::parser::Match match(false);
9289                                                             soulng::parser::Match* parentMatch15 = &match;
9290                                                             {
9291                                                                 int64_t pos = lexer.GetPos();
9292                                                                 soulng::parser::Match match(false);
9293                                                                 soulng::parser::Match* parentMatch16 = &match;
9294                                                                 {
9295                                                                     soulng::parser::Match match(false);
9296                                                                     soulng::parser::Match* parentMatch17 = &match;
9297                                                                     int64_t save = lexer.GetPos();
9298                                                                     {
9299                                                                         soulng::parser::Match match = XmlParser::Char(lexer);
9300                                                                         chr.reset(static_cast<soulng::parser::soulng::parser::Value<char32_t>*>(match.value));
9301                                                                         *parentMatch17 = match;
9302                                                                     }
9303                                                                     if (match.hit)
9304                                                                     {
9305                                                                         soulng::parser::Match match(false);
9306                                                                         soulng::parser::Match* parentMatch18 = &match;
9307                                                                         {
9308                                                                             int64_t tmp = lexer.GetPos();
9309                                                                             lexer.SetPos(save);
9310                                                                             save = tmp;
9311                                                                             soulng::parser::Match match(false);
9312                                                                             if (*lexer == 45)
9313                                                                             {
9314                                                                                 ++lexer;
9315                                                                                 match.hit = true;
9316                                                                             }
9317                                                                             *parentMatch18 = match;
9318                                                                         }
9319                                                                         if (!match.hit)
9320                                                                         {
9321                                                                             lexer.SetPos(save);
9322                                                                         }
9323                                                                         *parentMatch17 = soulng::parser::Match(!match.hitmatch.value);
9324                                                                     }
9325                                                                     *parentMatch16 = match;
9326                                                                 }
9327                                                                 if (match.hit)
9328                                                                 {
9329                                                                     s.append(1'-').append(1chr->value);
9330                                                                 }
9331                                                                 *parentMatch15 = match;
9332                                                             }
9333                                                             *parentMatch14 = match;
9334                                                         }
9335                                                         *parentMatch13 = match;
9336                                                     }
9337                                                     *parentMatch12 = match;
9338                                                 }
9339                                                 *parentMatch7 = match;
9340                                             }
9341                                         }
9342                                         *parentMatch6 = match;
9343                                     }
9344                                     if (match.hit)
9345                                     {
9346                                         *parentMatch5 = match;
9347                                     }
9348                                     else
9349                                     {
9350                                         lexer.SetPos(save);
9351                                         break;
9352                                     }
9353                                 }
9354                             }
9355                         }
9356                         *parentMatch4 = match;
9357                     }
9358                     *parentMatch3 = match;
9359                 }
9360                 *parentMatch2 = match;
9361             }
9362             if (match.hit)
9363             {
9364                 soulng::parser::Match match(false);
9365                 soulng::parser::Match* parentMatch19 = &match;
9366                 {
9367                     soulng::parser::Match match(true);
9368                     for (int i : s62)
9369                     {
9370                         if (*lexer == i)
9371                         {
9372                             ++lexer;
9373                         }
9374                         else
9375                         {
9376                             match.hit = false;
9377                             break;
9378                         }
9379                     }
9380                     *parentMatch19 = match;
9381                 }
9382                 *parentMatch2 = match;
9383             }
9384             *parentMatch1 = match;
9385         }
9386         if (match.hit)
9387         {
9388             processor->Comment(s);
9389         }
9390         *parentMatch0 = match;
9391     }
9392     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9393 
9394 
9395 
9396 
9397 
9398     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9399     if (!match.hit)
9400     {
9401         match.value = nullptr;
9402     }
9403     return match;
9404 }
9405 
9406 soulng::parser::Match XmlParser::PI(TrivialLexer& lexersngxml::xml::XmlProcessor* processor)
9407 {
9408     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9409 
9410 
9411 
9412 
9413 
9414 
9415 
9416     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9417     std::u32string data = std::u32string();
9418     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>target;
9419     std::unique_ptr<soulng::parser::soulng::parser::Value<char32_t>>chr;
9420     soulng::parser::Match match(false);
9421     soulng::parser::Match* parentMatch0 = &match;
9422     {
9423         int64_t pos = lexer.GetPos();
9424         soulng::parser::Match match(false);
9425         soulng::parser::Match* parentMatch1 = &match;
9426         {
9427             soulng::parser::Match match(false);
9428             soulng::parser::Match* parentMatch2 = &match;
9429             {
9430                 soulng::parser::Match match(false);
9431                 soulng::parser::Match* parentMatch3 = &match;
9432                 {
9433                     soulng::parser::Match match(false);
9434                     soulng::parser::Match* parentMatch4 = &match;
9435                     {
9436                         soulng::parser::Match match(false);
9437                         soulng::parser::Match* parentMatch5 = &match;
9438                         {
9439                             soulng::parser::Match match(true);
9440                             for (int i : s63)
9441                             {
9442                                 if (*lexer == i)
9443                                 {
9444                                     ++lexer;
9445                                 }
9446                                 else
9447                                 {
9448                                     match.hit = false;
9449                                     break;
9450                                 }
9451                             }
9452                             *parentMatch5 = match;
9453                         }
9454                         if (match.hit)
9455                         {
9456                             soulng::parser::Match match(false);
9457                             soulng::parser::Match* parentMatch6 = &match;
9458                             {
9459                                 soulng::parser::Match match = XmlParser::PITarget(lexer);
9460                                 target.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
9461                                 *parentMatch6 = match;
9462                             }
9463                             *parentMatch5 = match;
9464                         }
9465                         *parentMatch4 = match;
9466                     }
9467                     if (match.hit)
9468                     {
9469                         soulng::parser::Match match(false);
9470                         soulng::parser::Match* parentMatch7 = &match;
9471                         {
9472                             soulng::parser::Match match = XmlParser::S(lexer);
9473                             *parentMatch7 = match;
9474                         }
9475                         *parentMatch4 = match;
9476                     }
9477                     *parentMatch3 = match;
9478                 }
9479                 if (match.hit)
9480                 {
9481                     soulng::parser::Match match(false);
9482                     soulng::parser::Match* parentMatch8 = &match;
9483                     {
9484                         soulng::parser::Match match(true);
9485                         soulng::parser::Match* parentMatch9 = &match;
9486                         {
9487                             while (true)
9488                             {
9489                                 int64_t save = lexer.GetPos();
9490                                 {
9491                                     soulng::parser::Match match(false);
9492                                     soulng::parser::Match* parentMatch10 = &match;
9493                                     {
9494                                         soulng::parser::Match match(false);
9495                                         soulng::parser::Match* parentMatch11 = &match;
9496                                         {
9497                                             int64_t pos = lexer.GetPos();
9498                                             soulng::parser::Match match(false);
9499                                             soulng::parser::Match* parentMatch12 = &match;
9500                                             {
9501                                                 soulng::parser::Match match(false);
9502                                                 soulng::parser::Match* parentMatch13 = &match;
9503                                                 int64_t save = lexer.GetPos();
9504                                                 {
9505                                                     soulng::parser::Match match = XmlParser::Char(lexer);
9506                                                     chr.reset(static_cast<soulng::parser::soulng::parser::Value<char32_t>*>(match.value));
9507                                                     *parentMatch13 = match;
9508                                                 }
9509                                                 if (match.hit)
9510                                                 {
9511                                                     soulng::parser::Match match(false);
9512                                                     soulng::parser::Match* parentMatch14 = &match;
9513                                                     {
9514                                                         int64_t tmp = lexer.GetPos();
9515                                                         lexer.SetPos(save);
9516                                                         save = tmp;
9517                                                         soulng::parser::Match match(true);
9518                                                         for (int i : s64)
9519                                                         {
9520                                                             if (*lexer == i)
9521                                                             {
9522                                                                 ++lexer;
9523                                                             }
9524                                                             else
9525                                                             {
9526                                                                 match.hit = false;
9527                                                                 break;
9528                                                             }
9529                                                         }
9530                                                         *parentMatch14 = match;
9531                                                     }
9532                                                     if (!match.hit)
9533                                                     {
9534                                                         lexer.SetPos(save);
9535                                                     }
9536                                                     *parentMatch13 = soulng::parser::Match(!match.hitmatch.value);
9537                                                 }
9538                                                 *parentMatch12 = match;
9539                                             }
9540                                             if (match.hit)
9541                                             {
9542                                                 data.append(1chr->value);
9543                                             }
9544                                             *parentMatch11 = match;
9545                                         }
9546                                         *parentMatch10 = match;
9547                                     }
9548                                     if (match.hit)
9549                                     {
9550                                         *parentMatch9 = match;
9551                                     }
9552                                     else
9553                                     {
9554                                         lexer.SetPos(save);
9555                                         break;
9556                                     }
9557                                 }
9558                             }
9559                         }
9560                         *parentMatch8 = match;
9561                     }
9562                     *parentMatch3 = match;
9563                 }
9564                 *parentMatch2 = match;
9565             }
9566             if (match.hit)
9567             {
9568                 soulng::parser::Match match(false);
9569                 soulng::parser::Match* parentMatch15 = &match;
9570                 {
9571                     soulng::parser::Match match(true);
9572                     for (int i : s65)
9573                     {
9574                         if (*lexer == i)
9575                         {
9576                             ++lexer;
9577                         }
9578                         else
9579                         {
9580                             match.hit = false;
9581                             break;
9582                         }
9583                     }
9584                     *parentMatch15 = match;
9585                 }
9586                 *parentMatch2 = match;
9587             }
9588             *parentMatch1 = match;
9589         }
9590         if (match.hit)
9591         {
9592             processor->PI(target->valuedata);
9593         }
9594         *parentMatch0 = match;
9595     }
9596     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9597 
9598 
9599 
9600 
9601 
9602     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9603     if (!match.hit)
9604     {
9605         match.value = nullptr;
9606     }
9607     return match;
9608 }
9609 
9610 soulng::parser::Match XmlParser::PITarget(TrivialLexer& lexer)
9611 {
9612     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9613 
9614 
9615 
9616 
9617 
9618 
9619 
9620     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9621     std::unique_ptr<soulng::parser::soulng::parser::Value<std::u32string>>name;
9622     soulng::parser::Match match(false);
9623     soulng::parser::Match* parentMatch0 = &match;
9624     {
9625         int64_t pos = lexer.GetPos();
9626         soulng::parser::Match match(false);
9627         soulng::parser::Match* parentMatch1 = &match;
9628         {
9629             soulng::parser::Match match(false);
9630             soulng::parser::Match* parentMatch2 = &match;
9631             int64_t save = lexer.GetPos();
9632             {
9633                 soulng::parser::Match match = XmlParser::Name(lexer);
9634                 name.reset(static_cast<soulng::parser::soulng::parser::Value<std::u32string>*>(match.value));
9635                 *parentMatch2 = match;
9636             }
9637             if (match.hit)
9638             {
9639                 soulng::parser::Match match(false);
9640                 soulng::parser::Match* parentMatch3 = &match;
9641                 {
9642                     int64_t tmp = lexer.GetPos();
9643                     lexer.SetPos(save);
9644                     save = tmp;
9645                     soulng::parser::Match match = XmlParser::Xml(lexer);
9646                     *parentMatch3 = match;
9647                 }
9648                 if (!match.hit)
9649                 {
9650                     lexer.SetPos(save);
9651                 }
9652                 *parentMatch2 = soulng::parser::Match(!match.hitmatch.value);
9653             }
9654             *parentMatch1 = match;
9655         }
9656         if (match.hit)
9657         {
9658             {
9659                 #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9660 
9661                 #endif // SOULNG_PARSER_DEBUG_SUPPORT
9662                 return soulng::parser::Match(truenew soulng::parser::Value<std::u32string>(name->value));
9663             }
9664         }
9665         *parentMatch0 = match;
9666     }
9667     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9668 
9669 
9670 
9671 
9672 
9673     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9674     if (!match.hit)
9675     {
9676         match.value = nullptr;
9677     }
9678     return match;
9679 }
9680 
9681 soulng::parser::Match XmlParser::Xml(TrivialLexer& lexer)
9682 {
9683     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9684 
9685 
9686 
9687 
9688 
9689 
9690 
9691     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9692     soulng::parser::Match match(false);
9693     soulng::parser::Match* parentMatch0 = &match;
9694     {
9695         soulng::parser::Match match(false);
9696         soulng::parser::Match* parentMatch1 = &match;
9697         {
9698             soulng::parser::Match match(false);
9699             for (const soulng::parser::Range& range : s66)
9700             {
9701                 if (*lexer >= range.first && *lexer <= range.last)
9702                 {
9703                     match.hit = true;
9704                     ++lexer;
9705                     break;
9706                 }
9707             }
9708             *parentMatch1 = match;
9709         }
9710         if (match.hit)
9711         {
9712             soulng::parser::Match match(false);
9713             soulng::parser::Match* parentMatch2 = &match;
9714             {
9715                 soulng::parser::Match match(false);
9716                 for (const soulng::parser::Range& range : s67)
9717                 {
9718                     if (*lexer >= range.first && *lexer <= range.last)
9719                     {
9720                         match.hit = true;
9721                         ++lexer;
9722                         break;
9723                     }
9724                 }
9725                 *parentMatch2 = match;
9726             }
9727             *parentMatch1 = match;
9728         }
9729         *parentMatch0 = match;
9730     }
9731     if (match.hit)
9732     {
9733         soulng::parser::Match match(false);
9734         soulng::parser::Match* parentMatch3 = &match;
9735         {
9736             soulng::parser::Match match(false);
9737             for (const soulng::parser::Range& range : s68)
9738             {
9739                 if (*lexer >= range.first && *lexer <= range.last)
9740                 {
9741                     match.hit = true;
9742                     ++lexer;
9743                     break;
9744                 }
9745             }
9746             *parentMatch3 = match;
9747         }
9748         *parentMatch0 = match;
9749     }
9750     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9751 
9752 
9753 
9754 
9755 
9756     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9757     if (!match.hit)
9758     {
9759         match.value = nullptr;
9760     }
9761     return match;
9762 }
9763 
9764 soulng::parser::Match XmlParser::Eq(TrivialLexer& lexer)
9765 {
9766     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9767 
9768 
9769 
9770 
9771 
9772 
9773 
9774     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9775     soulng::parser::Match match(false);
9776     soulng::parser::Match* parentMatch0 = &match;
9777     {
9778         soulng::parser::Match match(false);
9779         soulng::parser::Match* parentMatch1 = &match;
9780         {
9781             soulng::parser::Match match(true);
9782             int64_t save = lexer.GetPos();
9783             soulng::parser::Match* parentMatch2 = &match;
9784             {
9785                 soulng::parser::Match match = XmlParser::S(lexer);
9786                 if (match.hit)
9787                 {
9788                     *parentMatch2 = match;
9789                 }
9790                 else
9791                 {
9792                     lexer.SetPos(save);
9793                 }
9794             }
9795             *parentMatch1 = match;
9796         }
9797         if (match.hit)
9798         {
9799             soulng::parser::Match match(false);
9800             soulng::parser::Match* parentMatch3 = &match;
9801             {
9802                 soulng::parser::Match match(false);
9803                 if (*lexer == 61)
9804                 {
9805                     ++lexer;
9806                     match.hit = true;
9807                 }
9808                 *parentMatch3 = match;
9809             }
9810             *parentMatch1 = match;
9811         }
9812         *parentMatch0 = match;
9813     }
9814     if (match.hit)
9815     {
9816         soulng::parser::Match match(false);
9817         soulng::parser::Match* parentMatch4 = &match;
9818         {
9819             soulng::parser::Match match(true);
9820             int64_t save = lexer.GetPos();
9821             soulng::parser::Match* parentMatch5 = &match;
9822             {
9823                 soulng::parser::Match match = XmlParser::S(lexer);
9824                 if (match.hit)
9825                 {
9826                     *parentMatch5 = match;
9827                 }
9828                 else
9829                 {
9830                     lexer.SetPos(save);
9831                 }
9832             }
9833             *parentMatch4 = match;
9834         }
9835         *parentMatch0 = match;
9836     }
9837     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9838 
9839 
9840 
9841 
9842 
9843     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9844     if (!match.hit)
9845     {
9846         match.value = nullptr;
9847     }
9848     return match;
9849 }
9850 
9851 soulng::parser::Match XmlParser::YesNo(TrivialLexer& lexer)
9852 {
9853     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9854 
9855 
9856 
9857 
9858 
9859 
9860 
9861     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9862     soulng::parser::Match match(false);
9863     soulng::parser::Match* parentMatch0 = &match;
9864     {
9865         int64_t save = lexer.GetPos();
9866         soulng::parser::Match match(false);
9867         soulng::parser::Match* parentMatch1 = &match;
9868         {
9869             int64_t pos = lexer.GetPos();
9870             soulng::parser::Match match(true);
9871             for (int i : s69)
9872             {
9873                 if (*lexer == i)
9874                 {
9875                     ++lexer;
9876                 }
9877                 else
9878                 {
9879                     match.hit = false;
9880                     break;
9881                 }
9882             }
9883             if (match.hit)
9884             {
9885                 {
9886                     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9887 
9888                     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9889                     return soulng::parser::Match(truenew soulng::parser::Value<bool>(true));
9890                 }
9891             }
9892             *parentMatch1 = match;
9893         }
9894         *parentMatch0 = match;
9895         if (!match.hit)
9896         {
9897             soulng::parser::Match match(false);
9898             soulng::parser::Match* parentMatch2 = &match;
9899             lexer.SetPos(save);
9900             {
9901                 soulng::parser::Match match(false);
9902                 soulng::parser::Match* parentMatch3 = &match;
9903                 {
9904                     int64_t pos = lexer.GetPos();
9905                     soulng::parser::Match match(true);
9906                     for (int i : s70)
9907                     {
9908                         if (*lexer == i)
9909                         {
9910                             ++lexer;
9911                         }
9912                         else
9913                         {
9914                             match.hit = false;
9915                             break;
9916                         }
9917                     }
9918                     if (match.hit)
9919                     {
9920                         {
9921                             #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9922 
9923                             #endif // SOULNG_PARSER_DEBUG_SUPPORT
9924                             return soulng::parser::Match(truenew soulng::parser::Value<bool>(false));
9925                         }
9926                     }
9927                     *parentMatch3 = match;
9928                 }
9929                 *parentMatch2 = match;
9930             }
9931             *parentMatch0 = match;
9932         }
9933     }
9934     #ifdef SOULNG_PARSER_DEBUG_SUPPORT
9935 
9936 
9937 
9938 
9939 
9940     #endif // SOULNG_PARSER_DEBUG_SUPPORT
9941     if (!match.hit)
9942     {
9943         match.value = nullptr;
9944     }
9945     return match;
9946 }