From: <ou...@us...> - 2011-08-13 19:35:26
|
Revision: 3580 http://jcl.svn.sourceforge.net/jcl/?rev=3580&view=rev Author: outchy Date: 2011-08-13 19:35:19 +0000 (Sat, 13 Aug 2011) Log Message: ----------- several bug fixes and some new features: - do not encode single quotes when saving the modified MsBuild project file. - add new property as classical element to the first PropertyGroup. - do not parse imported files if neither the project file name nor the xml class is assigned. - do not attempt to save the reference to the xml element when the property value was null. Modified Paths: -------------- trunk/jcl/source/windows/JclMsBuild.pas Modified: trunk/jcl/source/windows/JclMsBuild.pas =================================================================== --- trunk/jcl/source/windows/JclMsBuild.pas 2011-08-13 19:25:52 UTC (rev 3579) +++ trunk/jcl/source/windows/JclMsBuild.pas 2011-08-13 19:35:19 UTC (rev 3580) @@ -23,7 +23,7 @@ { } {**************************************************************************************************} { } -{ Last modified: $Date:: $ } +{ Last modified: $Date:: $ } { Revision: $Rev:: $ } { Author: $Author:: $ } { } @@ -303,7 +303,7 @@ function EvaluateList(const Name: string): string; function EvaluateRegistryProperty(Root: HKEY; const Path, Name: string): string; function EvaluateString(const S: string): string; - function EvaluateTransform(ItemList: TStrings; const Transform: string): string; + function EvaluateTransform(ItemList: TStrings; const Transform: string): string; public // this function parses MsBuild condition as described at: // http://msdn.microsoft.com/en-us/library/7szfhaft.aspx @@ -332,6 +332,9 @@ procedure InitEnvironmentProperties; procedure InitReservedProperties; + // do not encode ' + procedure XMLEncodeValue(Sender: TObject; var Value: string); + property CurrentFileName: TFileName read FCurrentFileName; property ProjectFileName: TFileName read FProjectFileName; property Xml: TJclSimpleXml read FXml; @@ -806,7 +809,7 @@ XmlElem.Value := Value else if Assigned(Parser.FFirstPropertyGroup) then - Parser.FFirstPropertyGroup.Items.AddText(Name, Value) + Parser.FFirstPropertyGroup.Items.Add(Name, Value) else raise EJclMsBuildError.CreateResFmt(@RsELocateXmlElem, [Name]); end; @@ -819,6 +822,8 @@ begin AXml := TJclSimpleXML.Create; try + AXml.Options := AXml.Options - [sxoAutoEncodeValue,sxoAutoEncodeEntity]; + AXml.OnEncodeValue := XMLEncodeValue; AXml.LoadFromFile(AFileName, Encoding, CodePage); except AXml.Free; @@ -1779,10 +1784,13 @@ if Assigned(FOnImport) then FOnImport(Self, Project, SubXml, SubOwnsXml); + if (Project <> '') or (SubXml <> nil) then // abort if both are not assigned try if not Assigned(SubXml) then begin SubXml := TJclSimpleXML.Create; + SubXml.Options := SubXml.Options - [sxoAutoEncodeValue,sxoAutoEncodeEntity]; + SubXml.OnEncodeValue := XMLEncodeValue; SubXml.LoadFromFile(Project); SubOwnsXml := True; end; @@ -2289,7 +2297,8 @@ if CurrentFileName = ProjectFileName then begin Index := Properties.IndexOfName(XmlElem.Name); - Properties.Objects[Index] := XmlElem; + if Index >= 0 then + Properties.Objects[Index] := XmlElem; end; end; end; @@ -2595,6 +2604,12 @@ Xml.SaveToFile(ProjectFileName); end; +procedure TJclMsBuildParser.XMLEncodeValue(Sender: TObject; var Value: string); +begin + Value := SimpleXMLEncode(Value); + StrReplace(Value, ''', NativeSingleQuote, [rfReplaceAll]); +end; + {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |