@@ -327,6 +327,7 @@ static TParserStateActionItem actionTPS_Base[] = {
327
327
{p_iseqC ,'+' ,A_PUSH ,TPS_InSignedIntFirst ,0 ,NULL },
328
328
{p_iseqC ,'&' ,A_PUSH ,TPS_InHTMLEntityFirst ,0 ,NULL },
329
329
{p_iseqC ,'/' ,A_PUSH ,TPS_InFileFirst ,0 ,NULL },
330
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InPathFirst ,0 ,NULL },
330
331
{NULL ,0 ,A_NEXT ,TPS_InSpace ,0 ,NULL }
331
332
};
332
333
@@ -336,15 +337,16 @@ static TParserStateActionItem actionTPS_InUWord[] = {
336
337
{p_isalnum ,0 ,A_NEXT ,TPS_InUWord ,0 ,NULL },
337
338
{p_iseqC ,'@' ,A_PUSH ,TPS_InEmail ,0 ,NULL },
338
339
{p_iseqC ,'/' ,A_PUSH ,TPS_InFileFirst ,0 ,NULL },
340
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InFileNext ,0 ,NULL },
339
341
{p_iseqC ,'-' ,A_PUSH ,TPS_InHyphenUWordFirst ,0 ,NULL },
340
342
{NULL ,0 ,A_BINGO ,TPS_Base ,UWORD ,NULL }
341
343
};
342
344
343
345
static TParserStateActionItem actionTPS_InLatWord []= {
344
346
{p_isEOF ,0 ,A_BINGO ,TPS_Base ,LATWORD ,NULL },
345
347
{p_islatin ,0 ,A_NEXT ,TPS_Null ,0 ,NULL },
346
- {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomen ,0 ,NULL },
347
- {p_iseqC ,'.' ,A_PUSH ,TPS_InFileFirst ,0 ,NULL },
348
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomain ,0 ,NULL },
349
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InFileNext ,0 ,NULL },
348
350
{p_iseqC ,'-' ,A_PUSH ,TPS_InHostFirstAN ,0 ,NULL },
349
351
{p_iseqC ,'-' ,A_PUSH ,TPS_InHyphenLatWordFirst ,0 ,NULL },
350
352
{p_iseqC ,'@' ,A_PUSH ,TPS_InEmail ,0 ,NULL },
@@ -366,7 +368,7 @@ static TParserStateActionItem actionTPS_InCyrWord[] = {
366
368
static TParserStateActionItem actionTPS_InUnsignedInt []= {
367
369
{p_isEOF ,0 ,A_BINGO ,TPS_Base ,UNSIGNEDINT ,NULL },
368
370
{p_isdigit ,0 ,A_NEXT ,TPS_Null ,0 ,NULL },
369
- {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomen ,0 ,NULL },
371
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomain ,0 ,NULL },
370
372
{p_iseqC ,'.' ,A_PUSH ,TPS_InUDecimalFirst ,0 ,NULL },
371
373
{p_iseqC ,'e' ,A_PUSH ,TPS_InMantissaFirst ,0 ,NULL },
372
374
{p_iseqC ,'E' ,A_PUSH ,TPS_InMantissaFirst ,0 ,NULL },
@@ -500,10 +502,19 @@ static TParserStateActionItem actionTPS_InTagFirst[] = {
500
502
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
501
503
{p_iseqC ,'/' ,A_PUSH ,TPS_InTagCloseFirst ,0 ,NULL },
502
504
{p_iseqC ,'!' ,A_PUSH ,TPS_InCommentFirst ,0 ,NULL },
505
+ {p_iseqC ,'?' ,A_PUSH ,TPS_InXMLBegin ,0 ,NULL },
503
506
{p_islatin ,0 ,A_PUSH ,TPS_InTag ,0 ,NULL },
504
507
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
505
508
};
506
509
510
+ static TParserStateActionItem actionTPS_InXMLBegin []= {
511
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
512
+ /* <?xml ... */
513
+ {p_iseqC ,'x' ,A_NEXT ,TPS_InTag ,0 ,NULL },
514
+ {p_iseqC ,'X' ,A_NEXT ,TPS_InTag ,0 ,NULL },
515
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
516
+ };
517
+
507
518
static TParserStateActionItem actionTPS_InTagCloseFirst []= {
508
519
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
509
520
{p_islatin ,0 ,A_NEXT ,TPS_InTag ,0 ,NULL },
@@ -520,6 +531,11 @@ static TParserStateActionItem actionTPS_InTag[] = {
520
531
{p_iseqC ,'=' ,A_NEXT ,TPS_Null ,0 ,NULL },
521
532
{p_iseqC ,'-' ,A_NEXT ,TPS_Null ,0 ,NULL },
522
533
{p_iseqC ,'#' ,A_NEXT ,TPS_Null ,0 ,NULL },
534
+ {p_iseqC ,'/' ,A_NEXT ,TPS_Null ,0 ,NULL },
535
+ {p_iseqC ,':' ,A_NEXT ,TPS_Null ,0 ,NULL },
536
+ {p_iseqC ,'.' ,A_NEXT ,TPS_Null ,0 ,NULL },
537
+ {p_iseqC ,'&' ,A_NEXT ,TPS_Null ,0 ,NULL },
538
+ {p_iseqC ,'?' ,A_NEXT ,TPS_Null ,0 ,NULL },
523
539
{p_iseqC ,'%' ,A_NEXT ,TPS_Null ,0 ,NULL },
524
540
{p_isspace ,0 ,A_NEXT ,TPS_Null ,0 ,SpecialTags },
525
541
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
@@ -551,6 +567,9 @@ static TParserStateActionItem actionTPS_InTagEnd[] = {
551
567
static TParserStateActionItem actionTPS_InCommentFirst []= {
552
568
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
553
569
{p_iseqC ,'-' ,A_NEXT ,TPS_InCommentLast ,0 ,NULL },
570
+ /* <!DOCTYPE ...>*/
571
+ {p_iseqC ,'D' ,A_NEXT ,TPS_InTag ,0 ,NULL },
572
+ {p_iseqC ,'d' ,A_NEXT ,TPS_InTag ,0 ,NULL },
554
573
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
555
574
};
556
575
@@ -583,30 +602,30 @@ static TParserStateActionItem actionTPS_InCommentEnd[] = {
583
602
{NULL ,0 ,A_BINGO |A_CLRALL ,TPS_Base ,TAG ,NULL }
584
603
};
585
604
586
- static TParserStateActionItem actionTPS_InHostFirstDomen []= {
605
+ static TParserStateActionItem actionTPS_InHostFirstDomain []= {
587
606
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
588
- {p_islatin ,0 ,A_NEXT ,TPS_InHostDomenSecond ,0 ,NULL },
607
+ {p_islatin ,0 ,A_NEXT ,TPS_InHostDomainSecond ,0 ,NULL },
589
608
{p_isdigit ,0 ,A_NEXT ,TPS_InHost ,0 ,NULL },
590
609
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
591
610
};
592
611
593
- static TParserStateActionItem actionTPS_InHostDomenSecond []= {
612
+ static TParserStateActionItem actionTPS_InHostDomainSecond []= {
594
613
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
595
- {p_islatin ,0 ,A_NEXT ,TPS_InHostDomen ,0 ,NULL },
614
+ {p_islatin ,0 ,A_NEXT ,TPS_InHostDomain ,0 ,NULL },
596
615
{p_isdigit ,0 ,A_PUSH ,TPS_InHost ,0 ,NULL },
597
616
{p_iseqC ,'-' ,A_PUSH ,TPS_InHostFirstAN ,0 ,NULL },
598
- {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomen ,0 ,NULL },
617
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomain ,0 ,NULL },
599
618
{p_iseqC ,'@' ,A_PUSH ,TPS_InEmail ,0 ,NULL },
600
619
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
601
620
};
602
621
603
- static TParserStateActionItem actionTPS_InHostDomen []= {
622
+ static TParserStateActionItem actionTPS_InHostDomain []= {
604
623
{p_isEOF ,0 ,A_BINGO |A_CLRALL ,TPS_Base ,HOST ,NULL },
605
- {p_islatin ,0 ,A_NEXT ,TPS_InHostDomen ,0 ,NULL },
624
+ {p_islatin ,0 ,A_NEXT ,TPS_InHostDomain ,0 ,NULL },
606
625
{p_isdigit ,0 ,A_PUSH ,TPS_InHost ,0 ,NULL },
607
626
{p_iseqC ,':' ,A_PUSH ,TPS_InPortFirst ,0 ,NULL },
608
627
{p_iseqC ,'-' ,A_PUSH ,TPS_InHostFirstAN ,0 ,NULL },
609
- {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomen ,0 ,NULL },
628
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomain ,0 ,NULL },
610
629
{p_iseqC ,'@' ,A_PUSH ,TPS_InEmail ,0 ,NULL },
611
630
{p_isdigit ,0 ,A_POP ,TPS_Null ,0 ,NULL },
612
631
{p_isstophost ,0 ,A_BINGO |A_CLRALL ,TPS_InURIStart ,HOST ,NULL },
@@ -640,7 +659,7 @@ static TParserStateActionItem actionTPS_InHost[] = {
640
659
{p_isdigit ,0 ,A_NEXT ,TPS_InHost ,0 ,NULL },
641
660
{p_islatin ,0 ,A_NEXT ,TPS_InHost ,0 ,NULL },
642
661
{p_iseqC ,'@' ,A_PUSH ,TPS_InEmail ,0 ,NULL },
643
- {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomen ,0 ,NULL },
662
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InHostFirstDomain ,0 ,NULL },
644
663
{p_iseqC ,'-' ,A_PUSH ,TPS_InHostFirstAN ,0 ,NULL },
645
664
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
646
665
};
@@ -652,14 +671,32 @@ static TParserStateActionItem actionTPS_InEmail[] = {
652
671
653
672
static TParserStateActionItem actionTPS_InFileFirst []= {
654
673
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
655
- {p_islatin ,0 ,A_CLEAR ,TPS_InFile ,0 ,NULL },
656
- {p_isdigit ,0 ,A_CLEAR ,TPS_InFile ,0 ,NULL },
657
- {p_iseqC ,'.' ,A_CLEAR , TPS_InFile ,0 ,NULL },
658
- {p_iseqC ,'_' ,A_CLEAR ,TPS_InFile ,0 ,NULL },
674
+ {p_islatin ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
675
+ {p_isdigit ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
676
+ {p_iseqC ,'.' ,A_NEXT , TPS_InPathFirst ,0 ,NULL },
677
+ {p_iseqC ,'_' ,A_NEXT ,TPS_InFile ,0 ,NULL },
659
678
{p_iseqC ,'?' ,A_PUSH ,TPS_InURIFirst ,0 ,NULL },
660
679
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
661
680
};
662
681
682
+ static TParserStateActionItem actionTPS_InPathFirst []= {
683
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
684
+ {p_islatin ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
685
+ {p_isdigit ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
686
+ {p_iseqC ,'_' ,A_NEXT ,TPS_InFile ,0 ,NULL },
687
+ {p_iseqC ,'.' ,A_NEXT ,TPS_InPathSecond ,0 ,NULL },
688
+ {p_iseqC ,'/' ,A_NEXT ,TPS_InFileFirst ,0 ,NULL },
689
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
690
+ };
691
+
692
+ static TParserStateActionItem actionTPS_InPathSecond []= {
693
+ {p_isEOF ,0 ,A_BINGO |A_CLEAR ,TPS_Base ,FILEPATH ,NULL },
694
+ {p_iseqC ,'/' ,A_NEXT |A_PUSH ,TPS_InFileFirst ,0 ,NULL },
695
+ {p_iseqC ,'/' ,A_BINGO |A_CLEAR ,TPS_Base ,FILEPATH ,NULL },
696
+ {p_isspace ,0 ,A_BINGO |A_CLEAR ,TPS_Base ,FILEPATH ,NULL },
697
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
698
+ };
699
+
663
700
static TParserStateActionItem actionTPS_InFile []= {
664
701
{p_isEOF ,0 ,A_BINGO ,TPS_Base ,FILEPATH ,NULL },
665
702
{p_islatin ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
@@ -894,6 +931,7 @@ static const TParserStateAction Actions[] = {
894
931
{TPS_InHTMLEntityNum ,actionTPS_InHTMLEntityNum },
895
932
{TPS_InHTMLEntityEnd ,actionTPS_InHTMLEntityEnd },
896
933
{TPS_InTagFirst ,actionTPS_InTagFirst },
934
+ {TPS_InXMLBegin ,actionTPS_InXMLBegin },
897
935
{TPS_InTagCloseFirst ,actionTPS_InTagCloseFirst },
898
936
{TPS_InTag ,actionTPS_InTag },
899
937
{TPS_InTagEscapeK ,actionTPS_InTagEscapeK },
@@ -906,15 +944,17 @@ static const TParserStateAction Actions[] = {
906
944
{TPS_InCloseCommentFirst ,actionTPS_InCloseCommentFirst },
907
945
{TPS_InCloseCommentLast ,actionTPS_InCloseCommentLast },
908
946
{TPS_InCommentEnd ,actionTPS_InCommentEnd },
909
- {TPS_InHostFirstDomen , actionTPS_InHostFirstDomen },
910
- {TPS_InHostDomenSecond , actionTPS_InHostDomenSecond },
911
- {TPS_InHostDomen , actionTPS_InHostDomen },
947
+ {TPS_InHostFirstDomain , actionTPS_InHostFirstDomain },
948
+ {TPS_InHostDomainSecond , actionTPS_InHostDomainSecond },
949
+ {TPS_InHostDomain , actionTPS_InHostDomain },
912
950
{TPS_InPortFirst ,actionTPS_InPortFirst },
913
951
{TPS_InPort ,actionTPS_InPort },
914
952
{TPS_InHostFirstAN ,actionTPS_InHostFirstAN },
915
953
{TPS_InHost ,actionTPS_InHost },
916
954
{TPS_InEmail ,actionTPS_InEmail },
917
955
{TPS_InFileFirst ,actionTPS_InFileFirst },
956
+ {TPS_InPathFirst ,actionTPS_InPathFirst },
957
+ {TPS_InPathSecond ,actionTPS_InPathSecond },
918
958
{TPS_InFile ,actionTPS_InFile },
919
959
{TPS_InFileNext ,actionTPS_InFileNext },
920
960
{TPS_InURIFirst ,actionTPS_InURIFirst },