From d7af16ab5bc7b573f4b4a14564f4bd6a895b746e Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 25 Feb 2015 22:39:52 +0000 Subject: [PATCH] fpspreadsheet: Fix memory leak in reader. Write hyperlinks to ods file. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3966 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpsopendocument.pas | 47 ++++++++++++++++---- components/fpspreadsheet/fpspreadsheet.pas | 1 + components/fpspreadsheet/fpsreaderwriter.pas | 1 + 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index 37b3ba249..0ba958152 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -165,12 +165,12 @@ type procedure ListAllRowStyles; procedure ResetStreams; // Routines to write those files + procedure WriteContent; procedure WriteMimetype; procedure WriteMetaInfManifest; procedure WriteMeta; procedure WriteSettings; procedure WriteStyles; - procedure WriteContent; procedure WriteWorksheet(AStream: TStream; CurSheet: TsWorksheet); { Record writing methods } procedure WriteBlank(AStream: TStream; const ARow, ACol: Cardinal; @@ -181,6 +181,8 @@ type const AValue: TsErrorValue; ACell: PCell); override; procedure WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; ACell: PCell); override; + procedure WriteHyperlink(AStream: TStream; const ARow, ACol: Cardinal; + ACell: PCell); override; procedure WriteLabel(AStream: TStream; const ARow, ACol: Cardinal; const AValue: string; ACell: PCell); override; procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; @@ -1495,10 +1497,13 @@ begin end else begin hyperlink.Kind := hkURI; + hyperlink.Target := s; + { if IsAbsoluteUri(s) then hyperlink.Target := s else hyperlink.Target := FileNameToUri(s); + } end; hyperlink.Tooltip := ''; end; @@ -2877,6 +2882,7 @@ begin AppendToStream(FSContent, '%s'+ + '', [link, txt]); + end else + textp := '' + txt + ''; + // Write it ... AppendToStream(AStream, Format( '' + - comment+ - '%s'+ + comment + + textp + '', [ - lStyle, spannedStr, - str + lStyle, spannedStr ])); end; diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index b0ce83861..f84b24d86 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -1209,6 +1209,7 @@ begin FCols.Free; FComments.Free; FMergedCells.Free; + FHyperlinks.Free; inherited Destroy; end; diff --git a/components/fpspreadsheet/fpsreaderwriter.pas b/components/fpspreadsheet/fpsreaderwriter.pas index 95329bd90..8eb716c0e 100644 --- a/components/fpspreadsheet/fpsreaderwriter.pas +++ b/components/fpspreadsheet/fpsreaderwriter.pas @@ -205,6 +205,7 @@ end; destructor TsCustomSpreadReader.Destroy; begin FreeAndNil(FNumFormatList); + FreeAndNil(FCellFormatList); inherited Destroy; end;