2
0
Эх сурвалжийг харах

* Better fix for 35660: Introduced TMissingNameValueSeparatorAction

git-svn-id: trunk@42170 -
michael 6 жил өмнө
parent
commit
7c36912eb0

+ 7 - 2
rtl/objpas/classes/classesh.inc

@@ -602,10 +602,14 @@ type
   end;
   end;
 
 
 { TStrings class }
 { TStrings class }
+  TMissingNameValueSeparatorAction = (mnvaValue,mnvaName,mnvaEmpty,mnvaError);
+  TMissingNameValueSeparatorActions = set of TMissingNameValueSeparatorAction;
+
   TStrings = class(TPersistent)
   TStrings = class(TPersistent)
   private
   private
     FDefaultEncoding: TEncoding;
     FDefaultEncoding: TEncoding;
     FEncoding: TEncoding;
     FEncoding: TEncoding;
+    FMissingNameValueSeparatorAction: TMissingNameValueSeparatorAction;
     FSpecialCharsInited : boolean;
     FSpecialCharsInited : boolean;
     FAlwaysQuote: Boolean;
     FAlwaysQuote: Boolean;
     FQuoteChar : Char;
     FQuoteChar : Char;
@@ -617,9 +621,9 @@ type
     FSkipLastLineBreak : Boolean;
     FSkipLastLineBreak : Boolean;
     FStrictDelimiter : Boolean;
     FStrictDelimiter : Boolean;
     FLineBreak : String;
     FLineBreak : String;
-    FPreferValuesToNames,
     FWriteBOM: Boolean;
     FWriteBOM: Boolean;
     function GetCommaText: string;
     function GetCommaText: string;
+    function GetMissingNameValueSeparatorAction: TMissingNameValueSeparatorAction;
     function GetName(Index: Integer): string;
     function GetName(Index: Integer): string;
     function GetValue(const Name: string): string;
     function GetValue(const Name: string): string;
     Function GetLBS : TTextLineBreakStyle;
     Function GetLBS : TTextLineBreakStyle;
@@ -628,6 +632,7 @@ type
     Procedure SetLBS (AValue : TTextLineBreakStyle);
     Procedure SetLBS (AValue : TTextLineBreakStyle);
     procedure ReadData(Reader: TReader);
     procedure ReadData(Reader: TReader);
     procedure SetCommaText(const Value: string);
     procedure SetCommaText(const Value: string);
+    procedure SetMissingNameValueSeparatorAction(AValue: TMissingNameValueSeparatorAction);
     procedure SetStringsAdapter(const Value: IStringsAdapter);
     procedure SetStringsAdapter(const Value: IStringsAdapter);
     procedure SetValue(const Name, Value: string);
     procedure SetValue(const Name, Value: string);
     procedure SetDelimiter(c:Char);
     procedure SetDelimiter(c:Char);
@@ -736,7 +741,7 @@ type
     property StringsAdapter: IStringsAdapter read FAdapter write SetStringsAdapter;
     property StringsAdapter: IStringsAdapter read FAdapter write SetStringsAdapter;
     Property SkipLastLineBreak : Boolean Read GetSkipLastLineBreak Write SetSkipLastLineBreak;
     Property SkipLastLineBreak : Boolean Read GetSkipLastLineBreak Write SetSkipLastLineBreak;
     property WriteBOM: Boolean read FWriteBOM write FWriteBOM;
     property WriteBOM: Boolean read FWriteBOM write FWriteBOM;
-    Property PreferValuesToNames : Boolean Read FPreferValuesToNames Write FPreferValuesToNames;
+    Property MissingNameValueSeparatorAction : TMissingNameValueSeparatorAction Read GetMissingNameValueSeparatorAction Write SetMissingNameValueSeparatorAction;
   end;
   end;
 
 
 { TStringList class }
 { TStringList class }

+ 24 - 5
rtl/objpas/classes/stringl.inc

@@ -193,6 +193,12 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TStrings.GetMissingNameValueSeparatorAction: TMissingNameValueSeparatorAction;
+begin
+  CheckSpecialChars;
+  Result:=FMissingNameValueSeparatorAction;
+end;
+
 
 
 Function TStrings.GetDelimitedText: string;
 Function TStrings.GetDelimitedText: string;
 
 
@@ -241,6 +247,7 @@ procedure TStrings.GetNameValue(Index : Integer; Out AName,AValue : String);
 Var L : longint;
 Var L : longint;
 
 
 begin
 begin
+  aName:='';
   CheckSpecialChars;
   CheckSpecialChars;
   AValue:=Strings[Index];
   AValue:=Strings[Index];
   L:=Pos(FNameValueSeparator,AValue);
   L:=Pos(FNameValueSeparator,AValue);
@@ -249,12 +256,18 @@ begin
     AName:=Copy(AValue,1,L-1);
     AName:=Copy(AValue,1,L-1);
     System.Delete(AValue,1,L);
     System.Delete(AValue,1,L);
     end
     end
-  else if PreferValuesToNames then
-    AName:=''
   else
   else
-    begin
-    aName:=aValue;
-    aValue:='';
+    case FMissingNameValueSeparatorAction of
+      mnvaValue : ;
+      mnvaName :
+        begin
+        aName:=aValue;
+        aValue:='';
+        end;
+      mnvaEmpty :
+        aValue:='';
+      mnvaError :
+        Raise EStringListError.CreateFmt(SErrNoNameValuePairAt,[Index]);
     end;
     end;
 end;
 end;
 
 
@@ -451,6 +464,12 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TStrings.SetMissingNameValueSeparatorAction(AValue: TMissingNameValueSeparatorAction);
+begin
+  CheckSpecialChars;
+  FMissingNameValueSeparatorAction:=aValue;
+end;
+
 
 
 Procedure TStrings.SetStringsAdapter(const Value: IStringsAdapter);
 Procedure TStrings.SetStringsAdapter(const Value: IStringsAdapter);