fpvectorial: Fix svg reader memory leaks related to BrushDefs and tokenizer. Declare package as runtime package.

git-svn-id: trunk@51060 -
This commit is contained in:
wp 2015-12-27 23:33:57 +00:00
parent 42e68fd86d
commit c689e1582c
3 changed files with 24 additions and 20 deletions

View File

@ -8,9 +8,6 @@
<SearchPaths> <SearchPaths>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths> </SearchPaths>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions> </CompilerOptions>
<Files Count="21"> <Files Count="21">
<Item1> <Item1>
@ -98,7 +95,6 @@
<UnitName Value="htmlvectorialreader"/> <UnitName Value="htmlvectorialreader"/>
</Item21> </Item21>
</Files> </Files>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="2"> <RequiredPkgs Count="2">
<Item1> <Item1>
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
@ -114,5 +110,8 @@
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
</PublishOptions> </PublishOptions>
<CustomOptions Items="ExternHelp" Version="2">
<_ExternHelp Items="Count"/>
</CustomOptions>
</Package> </Package>
</CONFIG> </CONFIG>

View File

@ -13,14 +13,8 @@ uses
lazvectorialreader, mathmlvectorialreader, odgvectorialreader, lazvectorialreader, mathmlvectorialreader, odgvectorialreader,
rawvectorialreadwrite, svgvectorialreader, svgvectorialwriter, rawvectorialreadwrite, svgvectorialreader, svgvectorialwriter,
svgzvectorialreader, odtvectorialwriter, docxvectorialwriter, svgzvectorialreader, odtvectorialwriter, docxvectorialwriter,
htmlvectorialreader, LazarusPackageIntf; htmlvectorialreader;
implementation implementation
procedure Register;
begin
end;
initialization
RegisterPackage('fpvectorialpkg', @Register);
end. end.

View File

@ -67,13 +67,15 @@ type
{ TSVGPathTokenizer } { TSVGPathTokenizer }
TSVGPathTokenizer = class TSVGPathTokenizer = class
protected
Tokens: TSVGTokenList;
public public
FPointSeparator, FCommaSeparator: TFormatSettings; FPointSeparator, FCommaSeparator: TFormatSettings;
Tokens: TSVGTokenList;
ExtraDebugStr: string; ExtraDebugStr: string;
constructor Create; constructor Create;
Destructor Destroy; override; destructor Destroy; override;
procedure AddToken(AStr: string); procedure AddToken(AStr: string);
procedure ClearTokens;
procedure TokenizePathString(AStr: string); procedure TokenizePathString(AStr: string);
procedure TokenizeFunctions(AStr: string); procedure TokenizeFunctions(AStr: string);
function DebugOutTokensAsString: string; function DebugOutTokensAsString: string;
@ -208,13 +210,9 @@ begin
end; end;
destructor TSVGPathTokenizer.Destroy; destructor TSVGPathTokenizer.Destroy;
var
i: Integer;
begin begin
for i:=Tokens.Count-1 downto 0 do ClearTokens;
Tokens[i].Free;
Tokens.Free; Tokens.Free;
inherited Destroy; inherited Destroy;
end; end;
@ -278,6 +276,15 @@ begin
Tokens.Add(lToken); Tokens.Add(lToken);
end; end;
procedure TSVGPathTokenizer.ClearTokens;
var
i: Integer;
begin
for i := Tokens.Count-1 downto 0 do
Tokens[i].Free;
Tokens.Clear;
end;
procedure TSVGPathTokenizer.TokenizePathString(AStr: string); procedure TSVGPathTokenizer.TokenizePathString(AStr: string);
const const
Str_Space: Char = ' '; Str_Space: Char = ' ';
@ -1954,7 +1961,7 @@ var
lDebugStr: String; lDebugStr: String;
lTmpTokenType: TSVGTokenType; lTmpTokenType: TSVGTokenType;
begin begin
FSVGPathTokenizer.Tokens.Clear; FSVGPathTokenizer.ClearTokens;
FSVGPathTokenizer.TokenizePathString(AStr); FSVGPathTokenizer.TokenizePathString(AStr);
//lDebugStr := FSVGPathTokenizer.DebugOutTokensAsString(); //lDebugStr := FSVGPathTokenizer.DebugOutTokensAsString();
CurX := 0; CurX := 0;
@ -2325,7 +2332,7 @@ var
X, Y: Double; X, Y: Double;
FirstPtX, FirstPtY, CurX, CurY: Double; FirstPtX, FirstPtY, CurX, CurY: Double;
begin begin
FSVGPathTokenizer.Tokens.Clear; FSVGPathTokenizer.ClearTokens;
FSVGPathTokenizer.TokenizePathString(AStr); FSVGPathTokenizer.TokenizePathString(AStr);
CurX := 0; CurX := 0;
CurY := 0; CurY := 0;
@ -3059,9 +3066,13 @@ begin
end; end;
destructor TvSVGVectorialReader.Destroy; destructor TvSVGVectorialReader.Destroy;
var
i: Integer;
begin begin
FLayerStylesKeys.Free; FLayerStylesKeys.Free;
FLayerStylesValues.Free; FLayerStylesValues.Free;
for i:=FBrushDefs.Count-1 downto 0 do TObject(FBrushDefs[i]).Free;
FBrushDefs.Free; FBrushDefs.Free;
FSVGPathTokenizer.Free; FSVGPathTokenizer.Free;