Browse Source

* Fixed some DFM parser bugs

sg 25 years ago
parent
commit
971e318cf0
1 changed files with 45 additions and 18 deletions
  1. 45 18
      fcl/inc/classes.inc

+ 45 - 18
fcl/inc/classes.inc

@@ -939,15 +939,23 @@ var
     stream: TMemoryStream;
   begin
     case parser.Token of
-      toInteger: WriteInteger(parser.TokenInt);
-      toFloat: begin
+      toInteger:
+        begin
+	  WriteInteger(parser.TokenInt);
+	  parser.NextToken;
+	end;
+      toFloat:
+        begin
           Output.WriteByte(Ord(vaExtended));
           flt := Parser.TokenFloat;
           Output.Write(flt, SizeOf(flt));
+	  parser.NextToken;
         end;
-      toString: begin
+      toString:
+        begin
           s := parser.TokenString;
-          while parser.NextToken = '+' do begin
+          while parser.NextToken = '+' do
+	  begin
             parser.NextToken;   // Get next string fragment
             parser.CheckToken(toString);
             s := s + parser.TokenString;
@@ -956,55 +964,71 @@ var
           WriteString(s);
         end;
       toSymbol:
+        begin
           if CompareText(parser.TokenString, 'True') = 0 then
             Output.WriteByte(Ord(vaTrue))
           else if CompareText(parser.TokenString, 'False') = 0 then
             Output.WriteByte(Ord(vaFalse))
           else if CompareText(parser.TokenString, 'nil') = 0 then
             Output.WriteByte(Ord(vaNil))
-          else begin
+          else
+	  begin
             Output.WriteByte(Ord(vaIdent));
             WriteString(parser.TokenString);
           end;
+	  Parser.NextToken;
+	end;
       // Set
-      '[': begin
+      '[':
+        begin
           parser.NextToken;
           Output.WriteByte(Ord(vaSet));
           if parser.Token <> ']' then
-            while True do begin
+            while True do
+	    begin
               parser.CheckToken(toSymbol);
               WriteString(parser.TokenString);
               parser.NextToken;
-              if parser.Token = ']' then break;
+              if parser.Token = ']' then
+	        break;
               parser.CheckToken(',');
               parser.NextToken;
             end;
           Output.WriteByte(0);
+	  parser.NextToken;
         end;
       // List
-      '(': begin
+      '(':
+        begin
           parser.NextToken;
           Output.WriteByte(Ord(vaList));
-          while parser.Token <> ')' do ProcessValue;
+          while parser.Token <> ')' do
+	    ProcessValue;
           Output.WriteByte(0);
+	  parser.NextToken;
         end;
       // Collection
-      '<': begin
+      '<':
+        begin
           parser.NextToken;
           Output.WriteByte(Ord(vaCollection));
-          while parser.Token <> '>' do begin
+          while parser.Token <> '>' do
+	  begin
             parser.CheckTokenSymbol('item');
             parser.NextToken;
             // ConvertOrder
             Output.WriteByte(Ord(vaList));
-            while not parser.TokenSymbolIs('end') do ProcessProperty;
+            while not parser.TokenSymbolIs('end') do
+	      ProcessProperty;
             parser.NextToken;   // Skip 'end'
             Output.WriteByte(0);
           end;
           Output.WriteByte(0);
+	  parser.NextToken;
         end;
       // Binary data
-      '{': begin
+      '{':
+        begin
           Output.WriteByte(Ord(vaBinary));
           stream := TMemoryStream.Create;
           try
@@ -1014,10 +1038,11 @@ var
           finally
             stream.Free;
           end;
+	  parser.NextToken;
         end;
-    else WriteLn('Token: "', parser.Token, '" ', Ord(parser.Token));
+      else
+        parser.Error(SInvalidProperty);
     end;
-    parser.NextToken;
   end;
 
   procedure ProcessProperty;
@@ -1034,7 +1059,6 @@ var
       parser.CheckToken(toSymbol);
       name := name + '.' + parser.TokenString;
     end;
-    // WriteLn(name);
     WriteString(name);
     parser.CheckToken('=');
     parser.NextToken;
@@ -1198,7 +1222,10 @@ end;
 
 {
   $Log$
-  Revision 1.2  2000-07-13 11:32:59  michael
+  Revision 1.3  2000-07-22 14:55:56  sg
+  * Fixed some DFM parser bugs
+
+  Revision 1.2  2000/07/13 11:32:59  michael
   + removed logs
  
 }