Browse Source

fcl-res: STRINGTABLE resources

Reintegrate fpcres-rc branch by Martok

git-svn-id: trunk@46376 -
svenbarth 5 years ago
parent
commit
7e808124cc

+ 484 - 461
packages/fcl-res/src/rclex.inc

@@ -7,7 +7,7 @@ var
   strbuf: string;
 
 const
-  KeywordDefs: array [0..22] of TIdentMapEntry = (
+  KeywordDefs: array [0..23] of TIdentMapEntry = (
     // attribs
     (Value: _LANGUAGE;             Name: 'LANGUAGE'),
     (Value: _CHARACTERISTICS;      Name: 'CHARACTERISTICS'),
@@ -31,6 +31,7 @@ const
     (Value: _MANIFEST;             Name: 'MANIFEST'),
     (Value: _MESSAGETABLE;         Name: 'MESSAGETABLE'),
     (Value: _PLUGPLAY;             Name: 'PLUGPLAY'),
+    (Value: _STRINGTABLE;          Name: 'STRINGTABLE'),
     (Value: _RCDATA;               Name: 'RCDATA'),
     (Value: _VXD;                  Name: 'VXD')
   );
@@ -84,31 +85,27 @@ begin
   9:
                         return(_NUMHEX);
   10:
-                        return(_NUMDECIMALL);
-  11:
-                        return(_NUMHEXL);
-  12:
                         begin start(INSTRING); strbuf:= ''; end;
-  13:
+  11:
                         strbuf:= strbuf + '"';
-  14:
+  12:
                         begin
                           start(0);
                           yytext:= strbuf;
                           return(_QUOTEDSTR);
                         end;
-  15:
+  13:
                         ;
-  16:
+  14:
                         return(_ILLEGAL);
-  17:
+  15:
                         strbuf:= strbuf + yytext;
 
-  18:
+  16:
                         return(_BEGIN);
-  19:
+  17:
                         return(_END);
-  20:
+  18:
                         begin
                           if ypreproc.isdefine(yytext) then begin
                             unget_char(' ');
@@ -119,11 +116,11 @@ begin
                             else
                               return(_ID);
                          end;
-  21:
+  19:
                         ;
-  22:
+  20:
                         returnc(',');
-  23:
+  21:
                         return(_ILLEGAL);
   end;
 end(*yyaction*);
@@ -137,14 +134,16 @@ type YYTRec = record
 
 const
 
-yynmarks   = 50;
-yynmatches = 50;
-yyntrans   = 72;
-yynstates  = 48;
+yynmarks   = 56;
+yynmatches = 56;
+yyntrans   = 77;
+yynstates  = 49;
 
 yyk : array [1..yynmarks] of Integer = (
   { 0: }
+  8,
   { 1: }
+  8,
   { 2: }
   { 3: }
   { 4: }
@@ -154,98 +153,105 @@ yyk : array [1..yynmarks] of Integer = (
   { 8: }
   { 9: }
   { 10: }
-  23,
+  21,
   { 11: }
   8,
-  23,
+  21,
   { 12: }
-  23,
+  8,
+  18,
+  21,
   { 13: }
-  12,
-  23,
+  8,
+  21,
   { 14: }
-  20,
-  23,
+  10,
+  21,
   { 15: }
   18,
-  23,
+  21,
   { 16: }
-  20,
-  23,
+  16,
+  21,
   { 17: }
-  19,
-  23,
+  18,
+  21,
   { 18: }
-  20,
-  23,
+  17,
+  21,
   { 19: }
+  18,
   21,
   { 20: }
-  22,
-  23,
+  19,
   { 21: }
+  20,
   21,
-  23,
   { 22: }
-  23,
+  19,
+  21,
   { 23: }
-  2,
+  21,
   { 24: }
-  3,
+  2,
   { 25: }
-  5,
+  3,
   { 26: }
   5,
   { 27: }
-  7,
+  5,
   { 28: }
-  14,
-  17,
+  7,
   { 29: }
-  17,
+  12,
+  15,
   { 30: }
-  16,
+  15,
   { 31: }
-  17,
+  14,
   { 32: }
-  1,
+  15,
   { 33: }
-  4,
+  1,
   { 34: }
-  8,
+  4,
   { 35: }
-  10,
+  8,
   { 36: }
-  9,
+  8,
   { 37: }
-  20,
+  18,
   { 38: }
-  20,
+  9,
   { 39: }
-  20,
+  18,
   { 40: }
-  6,
+  18,
   { 41: }
-  13,
+  6,
   { 42: }
-  15,
-  { 43: }
   11,
+  { 43: }
+  13,
   { 44: }
-  20,
+  9,
   { 45: }
-  19,
-  20,
+  18,
   { 46: }
-  20,
+  17,
+  18,
   { 47: }
   18,
-  20
+  { 48: }
+  16,
+  18
 );
 
 yym : array [1..yynmatches] of Integer = (
 { 0: }
+  8,
 { 1: }
+  8,
 { 2: }
 { 3: }
 { 4: }
@@ -255,172 +261,182 @@ yym : array [1..yynmatches] of Integer = (
 { 8: }
 { 9: }
 { 10: }
-  23,
+  21,
 { 11: }
   8,
-  23,
+  21,
 { 12: }
-  23,
+  8,
+  18,
+  21,
 { 13: }
-  12,
-  23,
+  8,
+  21,
 { 14: }
-  20,
-  23,
+  10,
+  21,
 { 15: }
   18,
-  23,
+  21,
 { 16: }
-  20,
-  23,
+  16,
+  21,
 { 17: }
-  19,
-  23,
+  18,
+  21,
 { 18: }
-  20,
-  23,
+  17,
+  21,
 { 19: }
+  18,
   21,
 { 20: }
-  22,
-  23,
+  19,
 { 21: }
+  20,
   21,
-  23,
 { 22: }
-  23,
+  19,
+  21,
 { 23: }
-  2,
+  21,
 { 24: }
-  3,
+  2,
 { 25: }
-  5,
+  3,
 { 26: }
   5,
 { 27: }
-  7,
+  5,
 { 28: }
-  14,
-  17,
+  7,
 { 29: }
-  17,
+  12,
+  15,
 { 30: }
-  16,
+  15,
 { 31: }
-  17,
+  14,
 { 32: }
-  1,
+  15,
 { 33: }
-  4,
+  1,
 { 34: }
-  8,
+  4,
 { 35: }
-  10,
+  8,
 { 36: }
-  9,
+  8,
 { 37: }
-  20,
+  18,
 { 38: }
-  20,
+  9,
 { 39: }
-  20,
+  18,
 { 40: }
-  6,
+  18,
 { 41: }
-  13,
+  6,
 { 42: }
-  15,
-{ 43: }
   11,
+{ 43: }
+  13,
 { 44: }
-  20,
+  9,
 { 45: }
-  19,
-  20,
+  18,
 { 46: }
-  20,
+  17,
+  18,
 { 47: }
   18,
-  20
+{ 48: }
+  16,
+  18
 );
 
 yyt : array [1..yyntrans] of YYTrec = (
 { 0: }
   ( cc: [ #1..#8,#11,#13..#31,'!','#'..'+','-','.',
-            ':'..'@','['..'^','`','|','~'..#255 ]; s: 22),
-  ( cc: [ #9,#12,' ' ]; s: 21),
-  ( cc: [ #10 ]; s: 19),
-  ( cc: [ '"' ]; s: 13),
-  ( cc: [ ',' ]; s: 20),
+            ':'..'@','['..'^','`','|','~'..#255 ]; s: 23),
+  ( cc: [ #9,#12,' ' ]; s: 22),
+  ( cc: [ #10 ]; s: 20),
+  ( cc: [ '"' ]; s: 14),
+  ( cc: [ ',' ]; s: 21),
   ( cc: [ '/' ]; s: 10),
-  ( cc: [ '0' ]; s: 12),
+  ( cc: [ '0' ]; s: 13),
   ( cc: [ '1'..'9' ]; s: 11),
-  ( cc: [ 'A','C','D','F'..'Z','_','a'..'z' ]; s: 18),
-  ( cc: [ 'B' ]; s: 14),
-  ( cc: [ 'E' ]; s: 16),
-  ( cc: [ '{' ]; s: 15),
-  ( cc: [ '}' ]; s: 17),
+  ( cc: [ 'A','C','D','F'..'K','M'..'Z','_','a'..'z' ]; s: 19),
+  ( cc: [ 'B' ]; s: 15),
+  ( cc: [ 'E' ]; s: 17),
+  ( cc: [ 'L' ]; s: 12),
+  ( cc: [ '{' ]; s: 16),
+  ( cc: [ '}' ]; s: 18),
 { 1: }
   ( cc: [ #1..#8,#11,#13..#31,'!','#'..'+','-','.',
-            ':'..'@','['..'^','`','|','~'..#255 ]; s: 22),
-  ( cc: [ #9,#12,' ' ]; s: 21),
-  ( cc: [ #10 ]; s: 19),
-  ( cc: [ '"' ]; s: 13),
-  ( cc: [ ',' ]; s: 20),
+            ':'..'@','['..'^','`','|','~'..#255 ]; s: 23),
+  ( cc: [ #9,#12,' ' ]; s: 22),
+  ( cc: [ #10 ]; s: 20),
+  ( cc: [ '"' ]; s: 14),
+  ( cc: [ ',' ]; s: 21),
   ( cc: [ '/' ]; s: 10),
-  ( cc: [ '0' ]; s: 12),
+  ( cc: [ '0' ]; s: 13),
   ( cc: [ '1'..'9' ]; s: 11),
-  ( cc: [ 'A','C','D','F'..'Z','_','a'..'z' ]; s: 18),
-  ( cc: [ 'B' ]; s: 14),
-  ( cc: [ 'E' ]; s: 16),
-  ( cc: [ '{' ]; s: 15),
-  ( cc: [ '}' ]; s: 17),
+  ( cc: [ 'A','C','D','F'..'K','M'..'Z','_','a'..'z' ]; s: 19),
+  ( cc: [ 'B' ]; s: 15),
+  ( cc: [ 'E' ]; s: 17),
+  ( cc: [ 'L' ]; s: 12),
+  ( cc: [ '{' ]; s: 16),
+  ( cc: [ '}' ]; s: 18),
 { 2: }
-  ( cc: [ #1..#9,#11..#255 ]; s: 24),
-  ( cc: [ #10 ]; s: 23),
+  ( cc: [ #1..#9,#11..#255 ]; s: 25),
+  ( cc: [ #10 ]; s: 24),
 { 3: }
-  ( cc: [ #1..#9,#11..#255 ]; s: 24),
-  ( cc: [ #10 ]; s: 23),
+  ( cc: [ #1..#9,#11..#255 ]; s: 25),
+  ( cc: [ #10 ]; s: 24),
 { 4: }
-  ( cc: [ #0 ]; s: 27),
-  ( cc: [ #1..#9,#11..')','+'..#255 ]; s: 25),
-  ( cc: [ '*' ]; s: 26),
+  ( cc: [ #0 ]; s: 28),
+  ( cc: [ #1..#9,#11..')','+'..#255 ]; s: 26),
+  ( cc: [ '*' ]; s: 27),
 { 5: }
-  ( cc: [ #0 ]; s: 27),
-  ( cc: [ #1..#9,#11..')','+'..#255 ]; s: 25),
-  ( cc: [ '*' ]; s: 26),
+  ( cc: [ #0 ]; s: 28),
+  ( cc: [ #1..#9,#11..')','+'..#255 ]; s: 26),
+  ( cc: [ '*' ]; s: 27),
 { 6: }
-  ( cc: [ #1..#9,#11..'!','#'..'[',']'..#255 ]; s: 31),
-  ( cc: [ #10 ]; s: 30),
-  ( cc: [ '"' ]; s: 28),
-  ( cc: [ '\' ]; s: 29),
+  ( cc: [ #1..#9,#11..'!','#'..'[',']'..#255 ]; s: 32),
+  ( cc: [ #10 ]; s: 31),
+  ( cc: [ '"' ]; s: 29),
+  ( cc: [ '\' ]; s: 30),
 { 7: }
-  ( cc: [ #1..#9,#11..'!','#'..'[',']'..#255 ]; s: 31),
-  ( cc: [ #10 ]; s: 30),
-  ( cc: [ '"' ]; s: 28),
-  ( cc: [ '\' ]; s: 29),
+  ( cc: [ #1..#9,#11..'!','#'..'[',']'..#255 ]; s: 32),
+  ( cc: [ #10 ]; s: 31),
+  ( cc: [ '"' ]; s: 29),
+  ( cc: [ '\' ]; s: 30),
 { 8: }
 { 9: }
 { 10: }
-  ( cc: [ '*' ]; s: 33),
-  ( cc: [ '/' ]; s: 32),
+  ( cc: [ '*' ]; s: 34),
+  ( cc: [ '/' ]; s: 33),
 { 11: }
-  ( cc: [ '0'..'9' ]; s: 34),
-  ( cc: [ 'L' ]; s: 35),
+  ( cc: [ '0'..'9' ]; s: 35),
+  ( cc: [ 'L' ]; s: 36),
 { 12: }
-  ( cc: [ 'x' ]; s: 36),
+  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 37),
 { 13: }
+  ( cc: [ '0'..'9' ]; s: 35),
+  ( cc: [ 'L' ]; s: 36),
+  ( cc: [ 'x' ]; s: 38),
 { 14: }
-  ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'E' ]; s: 37),
 { 15: }
+  ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'E' ]; s: 39),
 { 16: }
-  ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'N' ]; s: 39),
 { 17: }
+  ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'N' ]; s: 40),
 { 18: }
-  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 38),
 { 19: }
+  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 37),
 { 20: }
 { 21: }
 { 22: }
@@ -428,351 +444,358 @@ yyt : array [1..yyntrans] of YYTrec = (
 { 24: }
 { 25: }
 { 26: }
-  ( cc: [ '/' ]; s: 40),
 { 27: }
+  ( cc: [ '/' ]; s: 41),
 { 28: }
-  ( cc: [ '"' ]; s: 41),
 { 29: }
-  ( cc: [ #10 ]; s: 42),
+  ( cc: [ '"' ]; s: 42),
 { 30: }
+  ( cc: [ #10 ]; s: 43),
 { 31: }
 { 32: }
 { 33: }
 { 34: }
-  ( cc: [ '0'..'9' ]; s: 34),
-  ( cc: [ 'L' ]; s: 35),
 { 35: }
+  ( cc: [ '0'..'9' ]; s: 35),
+  ( cc: [ 'L' ]; s: 36),
 { 36: }
-  ( cc: [ '0'..'9','A'..'F','a'..'f' ]; s: 36),
-  ( cc: [ 'L' ]; s: 43),
 { 37: }
-  ( cc: [ '0'..'9','A'..'F','H'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'G' ]; s: 44),
+  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 37),
 { 38: }
-  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 38),
+  ( cc: [ '0'..'9','A'..'F','a'..'f' ]; s: 38),
+  ( cc: [ 'L' ]; s: 44),
 { 39: }
-  ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'D' ]; s: 45),
+  ( cc: [ '0'..'9','A'..'F','H'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'G' ]; s: 45),
 { 40: }
+  ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'D' ]; s: 46),
 { 41: }
 { 42: }
 { 43: }
 { 44: }
-  ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'I' ]; s: 46),
 { 45: }
-  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 38),
+  ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'I' ]; s: 47),
 { 46: }
-  ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 38),
-  ( cc: [ 'N' ]; s: 47),
+  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 37),
 { 47: }
-  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 38)
+  ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 37),
+  ( cc: [ 'N' ]; s: 48),
+{ 48: }
+  ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 37)
 );
 
 yykl : array [0..yynstates-1] of Integer = (
 { 0: } 1,
-{ 1: } 1,
-{ 2: } 1,
-{ 3: } 1,
-{ 4: } 1,
-{ 5: } 1,
-{ 6: } 1,
-{ 7: } 1,
-{ 8: } 1,
-{ 9: } 1,
-{ 10: } 1,
-{ 11: } 2,
-{ 12: } 4,
-{ 13: } 5,
-{ 14: } 7,
-{ 15: } 9,
-{ 16: } 11,
-{ 17: } 13,
-{ 18: } 15,
-{ 19: } 17,
-{ 20: } 18,
-{ 21: } 20,
-{ 22: } 22,
-{ 23: } 23,
-{ 24: } 24,
-{ 25: } 25,
-{ 26: } 26,
-{ 27: } 27,
-{ 28: } 28,
-{ 29: } 30,
-{ 30: } 31,
-{ 31: } 32,
-{ 32: } 33,
-{ 33: } 34,
-{ 34: } 35,
-{ 35: } 36,
-{ 36: } 37,
-{ 37: } 38,
-{ 38: } 39,
-{ 39: } 40,
-{ 40: } 41,
-{ 41: } 42,
-{ 42: } 43,
-{ 43: } 44,
-{ 44: } 45,
-{ 45: } 46,
-{ 46: } 48,
-{ 47: } 49
+{ 1: } 2,
+{ 2: } 3,
+{ 3: } 3,
+{ 4: } 3,
+{ 5: } 3,
+{ 6: } 3,
+{ 7: } 3,
+{ 8: } 3,
+{ 9: } 3,
+{ 10: } 3,
+{ 11: } 4,
+{ 12: } 6,
+{ 13: } 9,
+{ 14: } 11,
+{ 15: } 13,
+{ 16: } 15,
+{ 17: } 17,
+{ 18: } 19,
+{ 19: } 21,
+{ 20: } 23,
+{ 21: } 24,
+{ 22: } 26,
+{ 23: } 28,
+{ 24: } 29,
+{ 25: } 30,
+{ 26: } 31,
+{ 27: } 32,
+{ 28: } 33,
+{ 29: } 34,
+{ 30: } 36,
+{ 31: } 37,
+{ 32: } 38,
+{ 33: } 39,
+{ 34: } 40,
+{ 35: } 41,
+{ 36: } 42,
+{ 37: } 43,
+{ 38: } 44,
+{ 39: } 45,
+{ 40: } 46,
+{ 41: } 47,
+{ 42: } 48,
+{ 43: } 49,
+{ 44: } 50,
+{ 45: } 51,
+{ 46: } 52,
+{ 47: } 54,
+{ 48: } 55
 );
 
 yykh : array [0..yynstates-1] of Integer = (
-{ 0: } 0,
-{ 1: } 0,
-{ 2: } 0,
-{ 3: } 0,
-{ 4: } 0,
-{ 5: } 0,
-{ 6: } 0,
-{ 7: } 0,
-{ 8: } 0,
-{ 9: } 0,
-{ 10: } 1,
-{ 11: } 3,
-{ 12: } 4,
-{ 13: } 6,
-{ 14: } 8,
-{ 15: } 10,
-{ 16: } 12,
-{ 17: } 14,
-{ 18: } 16,
-{ 19: } 17,
-{ 20: } 19,
-{ 21: } 21,
-{ 22: } 22,
-{ 23: } 23,
-{ 24: } 24,
-{ 25: } 25,
-{ 26: } 26,
-{ 27: } 27,
-{ 28: } 29,
-{ 29: } 30,
-{ 30: } 31,
-{ 31: } 32,
-{ 32: } 33,
-{ 33: } 34,
-{ 34: } 35,
-{ 35: } 36,
-{ 36: } 37,
-{ 37: } 38,
-{ 38: } 39,
-{ 39: } 40,
-{ 40: } 41,
-{ 41: } 42,
-{ 42: } 43,
-{ 43: } 44,
-{ 44: } 45,
-{ 45: } 47,
-{ 46: } 48,
-{ 47: } 50
+{ 0: } 1,
+{ 1: } 2,
+{ 2: } 2,
+{ 3: } 2,
+{ 4: } 2,
+{ 5: } 2,
+{ 6: } 2,
+{ 7: } 2,
+{ 8: } 2,
+{ 9: } 2,
+{ 10: } 3,
+{ 11: } 5,
+{ 12: } 8,
+{ 13: } 10,
+{ 14: } 12,
+{ 15: } 14,
+{ 16: } 16,
+{ 17: } 18,
+{ 18: } 20,
+{ 19: } 22,
+{ 20: } 23,
+{ 21: } 25,
+{ 22: } 27,
+{ 23: } 28,
+{ 24: } 29,
+{ 25: } 30,
+{ 26: } 31,
+{ 27: } 32,
+{ 28: } 33,
+{ 29: } 35,
+{ 30: } 36,
+{ 31: } 37,
+{ 32: } 38,
+{ 33: } 39,
+{ 34: } 40,
+{ 35: } 41,
+{ 36: } 42,
+{ 37: } 43,
+{ 38: } 44,
+{ 39: } 45,
+{ 40: } 46,
+{ 41: } 47,
+{ 42: } 48,
+{ 43: } 49,
+{ 44: } 50,
+{ 45: } 51,
+{ 46: } 53,
+{ 47: } 54,
+{ 48: } 56
 );
 
 yyml : array [0..yynstates-1] of Integer = (
 { 0: } 1,
-{ 1: } 1,
-{ 2: } 1,
-{ 3: } 1,
-{ 4: } 1,
-{ 5: } 1,
-{ 6: } 1,
-{ 7: } 1,
-{ 8: } 1,
-{ 9: } 1,
-{ 10: } 1,
-{ 11: } 2,
-{ 12: } 4,
-{ 13: } 5,
-{ 14: } 7,
-{ 15: } 9,
-{ 16: } 11,
-{ 17: } 13,
-{ 18: } 15,
-{ 19: } 17,
-{ 20: } 18,
-{ 21: } 20,
-{ 22: } 22,
-{ 23: } 23,
-{ 24: } 24,
-{ 25: } 25,
-{ 26: } 26,
-{ 27: } 27,
-{ 28: } 28,
-{ 29: } 30,
-{ 30: } 31,
-{ 31: } 32,
-{ 32: } 33,
-{ 33: } 34,
-{ 34: } 35,
-{ 35: } 36,
-{ 36: } 37,
-{ 37: } 38,
-{ 38: } 39,
-{ 39: } 40,
-{ 40: } 41,
-{ 41: } 42,
-{ 42: } 43,
-{ 43: } 44,
-{ 44: } 45,
-{ 45: } 46,
-{ 46: } 48,
-{ 47: } 49
+{ 1: } 2,
+{ 2: } 3,
+{ 3: } 3,
+{ 4: } 3,
+{ 5: } 3,
+{ 6: } 3,
+{ 7: } 3,
+{ 8: } 3,
+{ 9: } 3,
+{ 10: } 3,
+{ 11: } 4,
+{ 12: } 6,
+{ 13: } 9,
+{ 14: } 11,
+{ 15: } 13,
+{ 16: } 15,
+{ 17: } 17,
+{ 18: } 19,
+{ 19: } 21,
+{ 20: } 23,
+{ 21: } 24,
+{ 22: } 26,
+{ 23: } 28,
+{ 24: } 29,
+{ 25: } 30,
+{ 26: } 31,
+{ 27: } 32,
+{ 28: } 33,
+{ 29: } 34,
+{ 30: } 36,
+{ 31: } 37,
+{ 32: } 38,
+{ 33: } 39,
+{ 34: } 40,
+{ 35: } 41,
+{ 36: } 42,
+{ 37: } 43,
+{ 38: } 44,
+{ 39: } 45,
+{ 40: } 46,
+{ 41: } 47,
+{ 42: } 48,
+{ 43: } 49,
+{ 44: } 50,
+{ 45: } 51,
+{ 46: } 52,
+{ 47: } 54,
+{ 48: } 55
 );
 
 yymh : array [0..yynstates-1] of Integer = (
-{ 0: } 0,
-{ 1: } 0,
-{ 2: } 0,
-{ 3: } 0,
-{ 4: } 0,
-{ 5: } 0,
-{ 6: } 0,
-{ 7: } 0,
-{ 8: } 0,
-{ 9: } 0,
-{ 10: } 1,
-{ 11: } 3,
-{ 12: } 4,
-{ 13: } 6,
-{ 14: } 8,
-{ 15: } 10,
-{ 16: } 12,
-{ 17: } 14,
-{ 18: } 16,
-{ 19: } 17,
-{ 20: } 19,
-{ 21: } 21,
-{ 22: } 22,
-{ 23: } 23,
-{ 24: } 24,
-{ 25: } 25,
-{ 26: } 26,
-{ 27: } 27,
-{ 28: } 29,
-{ 29: } 30,
-{ 30: } 31,
-{ 31: } 32,
-{ 32: } 33,
-{ 33: } 34,
-{ 34: } 35,
-{ 35: } 36,
-{ 36: } 37,
-{ 37: } 38,
-{ 38: } 39,
-{ 39: } 40,
-{ 40: } 41,
-{ 41: } 42,
-{ 42: } 43,
-{ 43: } 44,
-{ 44: } 45,
-{ 45: } 47,
-{ 46: } 48,
-{ 47: } 50
+{ 0: } 1,
+{ 1: } 2,
+{ 2: } 2,
+{ 3: } 2,
+{ 4: } 2,
+{ 5: } 2,
+{ 6: } 2,
+{ 7: } 2,
+{ 8: } 2,
+{ 9: } 2,
+{ 10: } 3,
+{ 11: } 5,
+{ 12: } 8,
+{ 13: } 10,
+{ 14: } 12,
+{ 15: } 14,
+{ 16: } 16,
+{ 17: } 18,
+{ 18: } 20,
+{ 19: } 22,
+{ 20: } 23,
+{ 21: } 25,
+{ 22: } 27,
+{ 23: } 28,
+{ 24: } 29,
+{ 25: } 30,
+{ 26: } 31,
+{ 27: } 32,
+{ 28: } 33,
+{ 29: } 35,
+{ 30: } 36,
+{ 31: } 37,
+{ 32: } 38,
+{ 33: } 39,
+{ 34: } 40,
+{ 35: } 41,
+{ 36: } 42,
+{ 37: } 43,
+{ 38: } 44,
+{ 39: } 45,
+{ 40: } 46,
+{ 41: } 47,
+{ 42: } 48,
+{ 43: } 49,
+{ 44: } 50,
+{ 45: } 51,
+{ 46: } 53,
+{ 47: } 54,
+{ 48: } 56
 );
 
 yytl : array [0..yynstates-1] of Integer = (
 { 0: } 1,
-{ 1: } 14,
-{ 2: } 27,
-{ 3: } 29,
-{ 4: } 31,
-{ 5: } 34,
-{ 6: } 37,
-{ 7: } 41,
-{ 8: } 45,
-{ 9: } 45,
-{ 10: } 45,
-{ 11: } 47,
-{ 12: } 49,
-{ 13: } 50,
-{ 14: } 50,
-{ 15: } 52,
-{ 16: } 52,
-{ 17: } 54,
-{ 18: } 54,
-{ 19: } 55,
-{ 20: } 55,
-{ 21: } 55,
-{ 22: } 55,
-{ 23: } 55,
-{ 24: } 55,
-{ 25: } 55,
-{ 26: } 55,
-{ 27: } 56,
-{ 28: } 56,
-{ 29: } 57,
-{ 30: } 58,
-{ 31: } 58,
-{ 32: } 58,
-{ 33: } 58,
-{ 34: } 58,
-{ 35: } 60,
-{ 36: } 60,
-{ 37: } 62,
-{ 38: } 64,
-{ 39: } 65,
-{ 40: } 67,
-{ 41: } 67,
-{ 42: } 67,
-{ 43: } 67,
-{ 44: } 67,
-{ 45: } 69,
-{ 46: } 70,
-{ 47: } 72
+{ 1: } 15,
+{ 2: } 29,
+{ 3: } 31,
+{ 4: } 33,
+{ 5: } 36,
+{ 6: } 39,
+{ 7: } 43,
+{ 8: } 47,
+{ 9: } 47,
+{ 10: } 47,
+{ 11: } 49,
+{ 12: } 51,
+{ 13: } 52,
+{ 14: } 55,
+{ 15: } 55,
+{ 16: } 57,
+{ 17: } 57,
+{ 18: } 59,
+{ 19: } 59,
+{ 20: } 60,
+{ 21: } 60,
+{ 22: } 60,
+{ 23: } 60,
+{ 24: } 60,
+{ 25: } 60,
+{ 26: } 60,
+{ 27: } 60,
+{ 28: } 61,
+{ 29: } 61,
+{ 30: } 62,
+{ 31: } 63,
+{ 32: } 63,
+{ 33: } 63,
+{ 34: } 63,
+{ 35: } 63,
+{ 36: } 65,
+{ 37: } 65,
+{ 38: } 66,
+{ 39: } 68,
+{ 40: } 70,
+{ 41: } 72,
+{ 42: } 72,
+{ 43: } 72,
+{ 44: } 72,
+{ 45: } 72,
+{ 46: } 74,
+{ 47: } 75,
+{ 48: } 77
 );
 
 yyth : array [0..yynstates-1] of Integer = (
-{ 0: } 13,
-{ 1: } 26,
-{ 2: } 28,
-{ 3: } 30,
-{ 4: } 33,
-{ 5: } 36,
-{ 6: } 40,
-{ 7: } 44,
-{ 8: } 44,
-{ 9: } 44,
-{ 10: } 46,
-{ 11: } 48,
-{ 12: } 49,
-{ 13: } 49,
-{ 14: } 51,
-{ 15: } 51,
-{ 16: } 53,
-{ 17: } 53,
-{ 18: } 54,
-{ 19: } 54,
-{ 20: } 54,
-{ 21: } 54,
-{ 22: } 54,
-{ 23: } 54,
-{ 24: } 54,
-{ 25: } 54,
-{ 26: } 55,
-{ 27: } 55,
-{ 28: } 56,
-{ 29: } 57,
-{ 30: } 57,
-{ 31: } 57,
-{ 32: } 57,
-{ 33: } 57,
-{ 34: } 59,
-{ 35: } 59,
-{ 36: } 61,
-{ 37: } 63,
-{ 38: } 64,
-{ 39: } 66,
-{ 40: } 66,
-{ 41: } 66,
-{ 42: } 66,
-{ 43: } 66,
-{ 44: } 68,
-{ 45: } 69,
-{ 46: } 71,
-{ 47: } 72
+{ 0: } 14,
+{ 1: } 28,
+{ 2: } 30,
+{ 3: } 32,
+{ 4: } 35,
+{ 5: } 38,
+{ 6: } 42,
+{ 7: } 46,
+{ 8: } 46,
+{ 9: } 46,
+{ 10: } 48,
+{ 11: } 50,
+{ 12: } 51,
+{ 13: } 54,
+{ 14: } 54,
+{ 15: } 56,
+{ 16: } 56,
+{ 17: } 58,
+{ 18: } 58,
+{ 19: } 59,
+{ 20: } 59,
+{ 21: } 59,
+{ 22: } 59,
+{ 23: } 59,
+{ 24: } 59,
+{ 25: } 59,
+{ 26: } 59,
+{ 27: } 60,
+{ 28: } 60,
+{ 29: } 61,
+{ 30: } 62,
+{ 31: } 62,
+{ 32: } 62,
+{ 33: } 62,
+{ 34: } 62,
+{ 35: } 64,
+{ 36: } 64,
+{ 37: } 65,
+{ 38: } 67,
+{ 39: } 69,
+{ 40: } 71,
+{ 41: } 71,
+{ 42: } 71,
+{ 43: } 71,
+{ 44: } 71,
+{ 45: } 73,
+{ 46: } 74,
+{ 47: } 76,
+{ 48: } 77
 );
 
 

+ 4 - 5
packages/fcl-res/src/rclex.l

@@ -4,7 +4,7 @@ var
   strbuf: string;
 
 const
-  KeywordDefs: array [0..22] of TIdentMapEntry = (
+  KeywordDefs: array [0..23] of TIdentMapEntry = (
     // attribs
     (Value: _LANGUAGE;             Name: 'LANGUAGE'),
     (Value: _CHARACTERISTICS;      Name: 'CHARACTERISTICS'),
@@ -28,6 +28,7 @@ const
     (Value: _MANIFEST;             Name: 'MANIFEST'),
     (Value: _MESSAGETABLE;         Name: 'MESSAGETABLE'),
     (Value: _PLUGPLAY;             Name: 'PLUGPLAY'),
+    (Value: _STRINGTABLE;          Name: 'STRINGTABLE'),
     (Value: _RCDATA;               Name: 'RCDATA'),
     (Value: _VXD;                  Name: 'VXD')
   );
@@ -63,10 +64,8 @@ IDENT [a-zA-Z_]([a-zA-Z0-9_])*
 <INCOMMENT>"*/"         start(0);
 <INCOMMENT>\0           return(_ILLEGAL);
 
-[1-9]([0-9])*           return(_NUMDECIMAL);
-0x{H}*                  return(_NUMHEX);
-[1-9]([0-9])*L          return(_NUMDECIMALL);
-0x{H}*L                 return(_NUMHEXL);
+{D}*L?                  return(_NUMDECIMAL);
+0x{H}*L?                return(_NUMHEX);
 \"                      begin start(INSTRING); strbuf:= ''; end;
 <INSTRING>\"\"          strbuf:= strbuf + '"';
 <INSTRING>\"            begin

File diff suppressed because it is too large
+ 433 - 421
packages/fcl-res/src/rcparser.pas


+ 65 - 6
packages/fcl-res/src/rcparser.y

@@ -113,6 +113,18 @@ type
     long: boolean;
   end;
 
+function str_to_num(s:string): rcnumtype;
+begin
+  // this does not handle empty strings - should never get them from the lexer
+  Result.long:= s[Length(s)] = 'L';
+  if Result.Long then
+    setlength(s, Length(s) - 1);
+  if Copy(s, 1, 2) = '0x' then
+    Result.v:= StrToInt('$' + Copy(s, 2, Maxint))
+  else
+    Result.v:= StrToInt(s);
+end;
+
 var
   aktresource: TAbstractResource;
   language: TLangID;
@@ -147,13 +159,48 @@ begin
   create_resource(aId, nil, cls);
 end;
 
+procedure stringtable_begin();
+begin
+  // create dummy resource that we will use to capture suboptions
+  create_resource(TResourceDesc.create(1), TResourceDesc.create(1));
+  aktresources.Remove(aktresource);
+end;
+
+procedure stringtable_add(ident: Word; str: string);
+var
+  table: word;
+  r: TStringTableResource;
+begin
+  table:= (ident div 16) + 1;
+  try
+    { TODO : This is stupid }
+    r:= aktresources.Find(RT_STRING, table, aktresource.LangID) as TStringTableResource;
+  except
+    on e: EResourceNotFoundException do begin
+      r:= TStringTableResource.Create;
+      r.LangID:= aktresource.LangID;
+      r.MemoryFlags:= aktresource.MemoryFlags;
+      r.Characteristics:= aktresource.Characteristics;
+      r.Version:= aktresource.Version;
+      r.FirstID:= ident;
+      aktresources.Add(r);
+    end;
+  end;
+  r.Strings[ident]:= str;
+end;
+
+
+procedure stringtable_end();
+begin
+  FreeAndNil(aktresource);
+end;
 
 var
   yycapture: AnsiString;
 %}
 
 %token _ILLEGAL
-%token _NUMDECIMAL _NUMHEX _NUMDECIMALL _NUMHEXL _QUOTEDSTR
+%token _NUMDECIMAL _NUMHEX _QUOTEDSTR
 %token _BEGIN _END _ID
 %token _LANGUAGE _CHARACTERISTICS _VERSION _MOVEABLE _FIXED _PURE _IMPURE _PRELOAD _LOADONCALL _DISCARDABLE
 %token _BITMAP _CURSOR _ICON
@@ -179,7 +226,8 @@ defnstatement
     ;
 
 resourcedef
-    : res_bitmap
+    : res_stringtable
+    | res_bitmap
     | res_cursor
     | res_icon
     | res_rcdata
@@ -199,6 +247,19 @@ res_rcdata
     | resid rcdataid { create_resource($1, $2); } suboptions _BEGIN raw_data _END             { aktresource.SetCustomRawDataStream($6); }
     ;
 
+res_stringtable
+    : _STRINGTABLE { stringtable_begin(); } suboptions _BEGIN stringtable_data _END { stringtable_end(); }
+
+stringtable_data
+    : /* empty */
+    | stringtable_data stringtable_entry
+    ;
+
+stringtable_entry
+    : numeral ',' long_string                      { stringtable_add($1.v, $3); }
+    | numeral long_string                          { stringtable_add($1.v, $2); }
+    ;
+
 rcdataid
     : _ANICURSOR                                   { $$:= TResourceDesc.Create(RT_ANICURSOR); }
     | _ANIICON                                     { $$:= TResourceDesc.Create(RT_ANIICON); }
@@ -244,10 +305,8 @@ numpos
     ;
 
 numeral
-    : _NUMDECIMAL                                  { $$.v:= StrToInt(yytext); $$.long:= False; }
-    | _NUMDECIMALL                                 { $$.v:= StrToInt(Copy(yytext,1,length(yytext)-1)); $$.long:= True; }
-    | _NUMHEX                                      { $$.v:= StrToInt('$'+Copy(yytext,3,Maxint)); $$.long:= False; }
-    | _NUMHEXL                                     { $$.v:= StrToInt('$'+Copy(yytext,3,length(yytext)-3)); $$.long:= True; }
+    : _NUMDECIMAL                                  { $$:= str_to_num(yytext); }
+    | _NUMHEX                                      { $$:= str_to_num(yytext); }
     ;
 
 ident_string

+ 9 - 0
packages/fcl-res/src/yypreproc.pp

@@ -99,6 +99,15 @@ begin
         end;
         skip[level]:= (skip[level-1] or (isdefine(w)));
       end;
+      'if': begin
+        inc(Level);
+        if Level >= yp_maxlevels then begin
+          yyerror('Too many ifdef levels');
+          exit;
+        end;
+        { TODO : implement some expressions? for now, always returns false }
+        skip[level]:= (skip[level-1] or False);
+      end;
       'else': begin
         skip[level]:= skip[level-1] or (not skip[level]);
       end;

Some files were not shown because too many files changed in this diff