@@ -243,6 +243,15 @@ SpecialHyphen(TParser * prs)
243
243
prs -> state -> poschar -= prs -> state -> lencharlexeme ;
244
244
}
245
245
246
+ static void
247
+ SpecialVerVersion (TParser * prs )
248
+ {
249
+ prs -> state -> posbyte -= prs -> state -> lenbytelexeme ;
250
+ prs -> state -> poschar -= prs -> state -> lencharlexeme ;
251
+ prs -> state -> lenbytelexeme = 0 ;
252
+ prs -> state -> lencharlexeme = 0 ;
253
+ }
254
+
246
255
static int
247
256
p_isstophost (TParser * prs )
248
257
{
@@ -326,8 +335,9 @@ static TParserStateActionItem actionTPS_Base[] = {
326
335
{p_iseqC ,'-' ,A_PUSH ,TPS_InSignedIntFirst ,0 ,NULL },
327
336
{p_iseqC ,'+' ,A_PUSH ,TPS_InSignedIntFirst ,0 ,NULL },
328
337
{p_iseqC ,'&' ,A_PUSH ,TPS_InHTMLEntityFirst ,0 ,NULL },
338
+ {p_iseqC ,'~' ,A_PUSH ,TPS_InFileTwiddle ,0 ,NULL },
329
339
{p_iseqC ,'/' ,A_PUSH ,TPS_InFileFirst ,0 ,NULL },
330
- {p_iseqC ,'.' ,A_PUSH ,TPS_InPathFirst ,0 ,NULL },
340
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InPathFirstFirst ,0 ,NULL },
331
341
{NULL ,0 ,A_NEXT ,TPS_InSpace ,0 ,NULL }
332
342
};
333
343
@@ -429,11 +439,25 @@ static TParserStateActionItem actionTPS_InDecimalFirst[] = {
429
439
static TParserStateActionItem actionTPS_InDecimal []= {
430
440
{p_isEOF ,0 ,A_BINGO ,TPS_Base ,DECIMAL ,NULL },
431
441
{p_isdigit ,0 ,A_NEXT ,TPS_InDecimal ,0 ,NULL },
442
+ {p_iseqC ,'.' ,A_PUSH ,TPS_InVerVersion ,0 ,NULL },
432
443
{p_iseqC ,'e' ,A_PUSH ,TPS_InMantissaFirst ,0 ,NULL },
433
444
{p_iseqC ,'E' ,A_PUSH ,TPS_InMantissaFirst ,0 ,NULL },
434
445
{NULL ,0 ,A_BINGO ,TPS_Base ,DECIMAL ,NULL }
435
446
};
436
447
448
+ static TParserStateActionItem actionTPS_InVerVersion []= {
449
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
450
+ {p_isdigit ,0 ,A_RERUN ,TPS_InSVerVersion ,0 ,SpecialVerVersion },
451
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
452
+ };
453
+
454
+ static TParserStateActionItem actionTPS_InSVerVersion []= {
455
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
456
+ {p_isdigit ,0 ,A_BINGO ,TPS_InUnsignedInt ,SPACE ,NULL },
457
+ {NULL ,0 ,A_NEXT ,TPS_Null ,0 ,NULL }
458
+ };
459
+
460
+
437
461
static TParserStateActionItem actionTPS_InVersionFirst []= {
438
462
{p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
439
463
{p_isdigit ,0 ,A_CLEAR ,TPS_InVersion ,0 ,NULL },
@@ -537,6 +561,7 @@ static TParserStateActionItem actionTPS_InTag[] = {
537
561
{p_iseqC ,'&' ,A_NEXT ,TPS_Null ,0 ,NULL },
538
562
{p_iseqC ,'?' ,A_NEXT ,TPS_Null ,0 ,NULL },
539
563
{p_iseqC ,'%' ,A_NEXT ,TPS_Null ,0 ,NULL },
564
+ {p_iseqC ,'~' ,A_NEXT ,TPS_Null ,0 ,NULL },
540
565
{p_isspace ,0 ,A_NEXT ,TPS_Null ,0 ,SpecialTags },
541
566
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
542
567
};
@@ -676,6 +701,16 @@ static TParserStateActionItem actionTPS_InFileFirst[] = {
676
701
{p_iseqC ,'.' ,A_NEXT ,TPS_InPathFirst ,0 ,NULL },
677
702
{p_iseqC ,'_' ,A_NEXT ,TPS_InFile ,0 ,NULL },
678
703
{p_iseqC ,'?' ,A_PUSH ,TPS_InURIFirst ,0 ,NULL },
704
+ {p_iseqC ,'~' ,A_PUSH ,TPS_InFileTwiddle ,0 ,NULL },
705
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
706
+ };
707
+
708
+ static TParserStateActionItem actionTPS_InFileTwiddle []= {
709
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
710
+ {p_islatin ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
711
+ {p_isdigit ,0 ,A_NEXT ,TPS_InFile ,0 ,NULL },
712
+ {p_iseqC ,'_' ,A_NEXT ,TPS_InFile ,0 ,NULL },
713
+ {p_iseqC ,'/' ,A_NEXT ,TPS_InFileFirst ,0 ,NULL },
679
714
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
680
715
};
681
716
@@ -689,6 +724,13 @@ static TParserStateActionItem actionTPS_InPathFirst[] = {
689
724
{NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
690
725
};
691
726
727
+ static TParserStateActionItem actionTPS_InPathFirstFirst []= {
728
+ {p_isEOF ,0 ,A_POP ,TPS_Null ,0 ,NULL },
729
+ {p_iseqC ,'.' ,A_NEXT ,TPS_InPathSecond ,0 ,NULL },
730
+ {p_iseqC ,'/' ,A_NEXT ,TPS_InFileFirst ,0 ,NULL },
731
+ {NULL ,0 ,A_POP ,TPS_Null ,0 ,NULL }
732
+ };
733
+
692
734
static TParserStateActionItem actionTPS_InPathSecond []= {
693
735
{p_isEOF ,0 ,A_BINGO |A_CLEAR ,TPS_Base ,FILEPATH ,NULL },
694
736
{p_iseqC ,'/' ,A_NEXT |A_PUSH ,TPS_InFileFirst ,0 ,NULL },
@@ -920,6 +962,8 @@ static const TParserStateAction Actions[] = {
920
962
{TPS_InUDecimal ,actionTPS_InUDecimal },
921
963
{TPS_InDecimalFirst ,actionTPS_InDecimalFirst },
922
964
{TPS_InDecimal ,actionTPS_InDecimal },
965
+ {TPS_InVerVersion ,actionTPS_InVerVersion },
966
+ {TPS_InSVerVersion ,actionTPS_InSVerVersion },
923
967
{TPS_InVersionFirst ,actionTPS_InVersionFirst },
924
968
{TPS_InVersion ,actionTPS_InVersion },
925
969
{TPS_InMantissaFirst ,actionTPS_InMantissaFirst },
@@ -953,7 +997,9 @@ static const TParserStateAction Actions[] = {
953
997
{TPS_InHost ,actionTPS_InHost },
954
998
{TPS_InEmail ,actionTPS_InEmail },
955
999
{TPS_InFileFirst ,actionTPS_InFileFirst },
1000
+ {TPS_InFileTwiddle ,actionTPS_InFileTwiddle },
956
1001
{TPS_InPathFirst ,actionTPS_InPathFirst },
1002
+ {TPS_InPathFirstFirst ,actionTPS_InPathFirstFirst },
957
1003
{TPS_InPathSecond ,actionTPS_InPathSecond },
958
1004
{TPS_InFile ,actionTPS_InFile },
959
1005
{TPS_InFileNext ,actionTPS_InFileNext },