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

View File

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

View File

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