From 3959cbbe4576609a1c4ac113521c84a5564c57bb Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 29 Jul 2020 21:11:36 +0000 Subject: [PATCH] fpspreadsheet: Add new metadata item "subject" git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7590 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/other/metadata/demo_metadata.lpr | 2 ++ .../fpspreadsheet/source/common/fpsopendocument.pas | 9 +++++++++ components/fpspreadsheet/source/common/fpstypes.pas | 5 ++++- components/fpspreadsheet/source/common/xlsxml.pas | 9 +++++++++ components/fpspreadsheet/source/common/xlsxooxml.pas | 6 ++++++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr b/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr index 4172f0a1e..50fb7ad07 100644 --- a/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr +++ b/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr @@ -66,6 +66,7 @@ begin book.MetaData.DateLastModified := Now(); book.MetaData.LastModifiedBy := 'Dagobert Duck'; book.MetaData.Title := 'Test of metadata äöü'; + book.Metadata.Subject := 'FPSpreadsheet demos'; book.MetaData.Comments.Add('This is a test of spreadsheet metadata.'); book.MetaData.Comments.Add('Assign the author to the field CreatedBy.'); book.MetaData.Comments.Add('Assign the creation date to the field CreatedAt.'); @@ -93,6 +94,7 @@ begin WriteLn('Modified by : ', book.MetaData.LastModifiedBy); WriteLn('Date last modified : ', DateTimeToStr(book.MetaData.DateLastModified)); WriteLn('Title : ', book.MetaData.Title); + WriteLn('Subject : ', book.MetaData.Subject); WriteLn('Keywords : ', book.MetaData.Keywords.CommaText); WriteLn('Comments: '); WriteLn(book.MetaData.Comments.Text); diff --git a/components/fpspreadsheet/source/common/fpsopendocument.pas b/components/fpspreadsheet/source/common/fpsopendocument.pas index 0074d7b7e..0d658a528 100644 --- a/components/fpspreadsheet/source/common/fpsopendocument.pas +++ b/components/fpspreadsheet/source/common/fpsopendocument.pas @@ -1990,6 +1990,8 @@ begin book.MetaData.Comments.Text := s; 'dc:title': book.MetaData.Title := s; + 'dc:subject': + book.Metadata.Subject := s; end; ANode := ANode.NextSibling; end; @@ -5868,6 +5870,13 @@ begin '%s', [s])); end; + if book.Metadata.Subject <> '' then + begin + s := book.Metadata.Subject; + AppendToStream(FSMeta, Format( + '%s', [s])); + end; + if book.Metadata.CreatedBy <> '' then AppendToStream(FSMeta, Format( '%s', [book.MetaData.CreatedBy])); diff --git a/components/fpspreadsheet/source/common/fpstypes.pas b/components/fpspreadsheet/source/common/fpstypes.pas index 4dcf80dce..20e6afb0b 100644 --- a/components/fpspreadsheet/source/common/fpstypes.pas +++ b/components/fpspreadsheet/source/common/fpstypes.pas @@ -973,6 +973,7 @@ type FDateLastModified: TDateTime; FLastModifiedBy: String; FTitle: String; + FSubject: String; FComments: TStrings; FKeywords: TStrings; public @@ -983,6 +984,7 @@ type property LastModifiedBy: String read FLastModifiedBy write FLastModifiedBy; property DateCreated: TDateTime read FDateCreated write FDateCreated; property DateLastModified: TDatetime read FDateLastModified write FDateLastModified; + property Subject: String read FSubject write FSubject; property Title: String read FTitle write FTitle; property Comments: TStrings read FComments write FComments; property Keywords: TStrings read FKeywords write FKeywords; @@ -1208,7 +1210,8 @@ end; function TsMetaData.IsEmpty: Boolean; begin - Result := (FCreatedBy = '') and (FLastModifiedBy = '') and (FTitle = '') and + Result := (FCreatedBy = '') and (FLastModifiedBy = '') and + (FTitle = '') and (FSubject = '') and (FComments.Count = 0) and (FKeywords.Count = 0) and (FDateCreated = 0) and (FDateLastModified = 0); end; diff --git a/components/fpspreadsheet/source/common/xlsxml.pas b/components/fpspreadsheet/source/common/xlsxml.pas index 35aeb6600..f43d6540e 100644 --- a/components/fpspreadsheet/source/common/xlsxml.pas +++ b/components/fpspreadsheet/source/common/xlsxml.pas @@ -1121,6 +1121,8 @@ begin case nodeName of 'Title': book.MetaData.Title := s; + 'Subject': + book.MetaData.Subject := s; 'Author': book.MetaData.CreatedBy := s; 'LastAuthor': @@ -2721,6 +2723,7 @@ const LE = LineEnding; var sTitle: String; + sSubject: String; sAuthor: String; sLastAuthor: String; sDateCreated: String; @@ -2744,6 +2747,11 @@ begin else sTitle := ''; + if book.MetaData.Subject <> '' then + sSubject := '' + book.MetaData.Subject + '' + LE + INDENT2 + else + sSubject := ''; + if book.MetaData.CreatedBy <> '' then sAuthor := '' + book.MetaData.CreatedBy + '' + LE + INDENT2 else @@ -2773,6 +2781,7 @@ begin AppendToStream(AStream, INDENT1 + '' + LE + INDENT2 + sTitle + + sSubject + sAuthor + sLastAuthor + sDateCreated + diff --git a/components/fpspreadsheet/source/common/xlsxooxml.pas b/components/fpspreadsheet/source/common/xlsxooxml.pas index 8b1318853..a9702d7ee 100644 --- a/components/fpspreadsheet/source/common/xlsxooxml.pas +++ b/components/fpspreadsheet/source/common/xlsxooxml.pas @@ -2716,6 +2716,8 @@ begin case nodeName of 'dc:title': book.MetaData.Title := s; + 'dc:subject': + book.MetaData.Subject := s; 'dc:creator': book.MetaData.CreatedBy := s; 'cp:lastModifiedBy': @@ -6197,6 +6199,10 @@ begin AppendToStream(AStream, Format( '%s', [UTF8TextToXMLText(book.MetaData.Title)])); + if book.MetaData.Subject <> '' then + AppendToStream(AStream, Format( + '%s', [UTF8TextToXMLText(book.Metadata.Subject)])); + if book.MetaData.CreatedBy <> '' then AppendToStream(AStream, Format( '%s', [UTF8TextToXMLText(book.MetaData.CreatedBy)]));