From 780cf0f19fed8adedf9d557e1c49d68e11c879aa Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Wed, 30 Jun 2010 23:21:28 +0000 Subject: [PATCH] Add support for exporting grids as Wiki table markup --- res/icons/wikipedia-icon.png | Bin 0 -> 381 bytes source/helpers.pas | 36 +++++++++++---- source/main.dfm | 84 ++++++++++++++++++++--------------- source/main.pas | 6 +++ 4 files changed, 82 insertions(+), 44 deletions(-) create mode 100644 res/icons/wikipedia-icon.png diff --git a/res/icons/wikipedia-icon.png b/res/icons/wikipedia-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..87205edee66c17deef1d191ea7c289970173b5eb GIT binary patch literal 381 zcmV-@0fPRCP)ub;-}+t*ip6ByC-|z2nIx-y2{|M+oA-<4<0NU|_Eac$^m3T!6n|MYE-Z6(^T&o-#Ufg0Q zIUpPNC_+Cr(24_nZ&D+V(X4WR+yguMq#9^V+EQR0wy}r?Or^R=b{`(}ONZdb8qV>F z6E*iSRe(d?9>5za5YauU)g|jpocvpWTO}-EQ180o*W$om0X8Odl9-;Yq#2CiBb|V> bN5%o)We!Jzgdgk100000NkvXXu0mjfFz}$= literal 0 HcmV?d00001 diff --git a/source/helpers.pas b/source/helpers.pas index 0dc12058..da38958a 100644 --- a/source/helpers.pas +++ b/source/helpers.pas @@ -67,7 +67,7 @@ type end; TSQLBatch = TObjectList; - TGridExportFormat = (efUnknown, efCSV, efHTML, efXML, efSQL, efLaTeX); + TGridExportFormat = (efUnknown, efCSV, efHTML, efXML, efSQL, efLaTeX, efWiki); {$I const.inc} @@ -644,6 +644,20 @@ begin end; Header := Header + '}' + CRLF; end; + + efWiki: begin + Header := '|| '; + Separator := ' || '; + Encloser := ''; + Terminator := ' ||'+CRLF; + Col := Grid.Header.Columns.GetFirstVisibleColumn; + while Col > NoColumn do begin + Header := Header + '*' + Grid.Header.Columns[Col].Text + '*' + Separator; + Col := Grid.Header.Columns.GetNextVisibleColumn(Col); + end; + Delete(Header, Length(Header)-Length(Separator)+1, Length(Separator)); + Header := Header + Terminator; + end; end; StreamWrite(S, Header); @@ -679,6 +693,8 @@ begin tmp := tmp + ') VALUES ('; end; + efWiki: tmp := TrimLeft(Separator); + else tmp := ''; end; @@ -704,17 +720,17 @@ begin tmp := tmp + ' ' + Data + '' + CRLF; end; - efCSV, efLaTeX: begin + efCSV, efLaTeX, efWiki: begin // Escape encloser characters inside data per de-facto CSV. Data := StringReplace(Data, Encloser, Encloser+Encloser, [rfReplaceAll]); // Special handling for NULL (MySQL-ism, not de-facto CSV: unquote value) - if GridData.IsNull(Col) then - Data := 'NULL' - else + if GridData.IsNull(Col) then begin + Data := 'NULL'; + if ExportFormat = efWiki then + Data := '_'+Data+'_'; + end else Data := Encloser + Data + Encloser; - // Add cell. - if tmp <> '' then tmp := tmp + Separator; - tmp := tmp + Data; + tmp := tmp + Data + Separator; end; efXML: begin @@ -746,8 +762,10 @@ begin case ExportFormat of efHTML: tmp := tmp + ' ' + CRLF; - efCSV, efLaTeX: + efCSV, efLaTeX, efWiki: begin + Delete(tmp, Length(tmp)-Length(Separator)+1, Length(Separator)); tmp := tmp + Terminator; + end; efXML: tmp := tmp + #9'' + CRLF; efSQL: begin diff --git a/source/main.dfm b/source/main.dfm index 22c2f522..e86f0f27 100644 --- a/source/main.dfm +++ b/source/main.dfm @@ -1853,6 +1853,9 @@ object MainForm: TMainForm object CopyselectedrowsasLaTeXtable1: TMenuItem Action = actCopyAsLaTeX end + object CopyselectedrowsasWikitable2: TMenuItem + Action = actCopyAsWiki + end object Exportdata1: TMenuItem Action = actExportData end @@ -2622,6 +2625,13 @@ object MainForm: TMainForm ImageIndex = 10 OnExecute = actDataSaveBlobToFileExecute end + object actCopyAsWiki: TAction + Category = 'Export/Import' + Caption = 'Copy selected rows as Wiki table' + Enabled = False + ImageIndex = 154 + OnExecute = actCopyDataExecute + end end object SaveDialog2: TSaveDialog DefaultExt = 'reg' @@ -2651,7 +2661,7 @@ object MainForm: TMainForm Left = 104 Top = 160 Bitmap = { - 494C01019A009C00040010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 + 494C01019B009C00040010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000007002000001002000000000000070 0200000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2674,96 +2684,96 @@ object MainForm: TMainForm 86FF1B5686FF1B5686FF1B5686FF1B5686FF0000000000000052FAFAF9FFF7F7 F7FFFAFAFAFFFBFBFBFFFCFCFCFFFEFEFEFFFCFCFCFFF1F1F1FFD4D4D4FF9A9A 9AE00000002F0000000100000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000800000001C0000000000000000000000060000008F0000 + 0005000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000002D76ACFF5198C7FF4D93C3FF4B90 C2FF4B8EC0FF4B8EC0FFC0E9EAFF76CDDFFF74CDDFFFABE1E7FF4783BAFF4580 B9FF437DB7FF437CB7FF467EB8FF1B5686FF0000000000000052F9F9F9FFF7F7 F7FFFAFAFAFFF7F7F7FFEFEFEFFFF8F8F8FFF9F9F9FFEEEEEEFFC9C9C9FFF5F5 F5FF9A9A9AE00000002E00000001000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 000000000030000000FD0000009300000000000000000000005B000000FE0000 + 004E000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000002F79AFFF5099C7FF3982B4FF296F A4FF286CA0FF26699CFF246598FF226294FF205F91FF1E5C8DFF1D5A8AFF1C58 88FF1B5686FF2B669AFF447DB7FF1B5686FF0000000000000052F9F9F9FFF6F6 F6FFF9F9F9FFFBFBFBFF9D9D9DFFAEAEAEFFA5A5A5FFCACACAFFEBEBEBFFD4D4 D4FFDBDBDBFF878787C900000029000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 00000000009C000000FE000000F50000001E00000000000000C7000000FE0000 + 00B0000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000317CB3FF519CC9FF2D76ACFF76E4 A1FF74E39FFF72E39EFF70E29CFF6EE29BFF6CE29AFF6BE199FF69E198FF67E1 96FF66E095FF1B5686FF447EB8FF1B5686FF0000000000000052F2F2F1FFF1F1 F0FFF7F7F7FFFAFAFAFF7D7D7DFFE3E3E3FFF1F1F1FF989898FFF8F8F8FFEAEA EAFFEEEEEEFFF8F8F8FE00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0017000000F7000000FD0000006B0000009B00000038000000FE000000FA0000 + 00BA0000001A0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000327EB6FF52A0CBFF2F79AFFF55DD 8AFF54DC88FF78E4A2FF76E4A1FF74E39FFF4EDA81FF4DDA7EFF4BD97CFF4AD9 7AFF49D879FF1C5888FF4582B9FF1B5686FF0000000000000052ECECECFFD7D7 D7FF545454FFC5C5C5FF828282FFCACACAFFADADADFF878787FFBBBBBBFFFAFA FAFF565656FFD0D0D0FF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 007D000000FE000000CB00000000000000AC000000C6000000FE000000AC0000 + 00410000007D0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003381B8FF55A4CDFF317CB3FF69C9 5AFF3BBA2FFF4ED572FF46CA58FF23CD58FF53BF46FFA8BD57FFE4A73AFFFC9F 2EFFFF9B2CFF1D5A8AFF4886BCFF1B5686FF0000000000000052EAEAE9FFF3F3 F3FF717171FFF8F8F8FF808080FFAEAEAEFFA2A2A2FFE4E4E4FFB3B3B3FF9B9B - 9BFFBCBCBCFFFEFEFEFF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 9BFFBCBCBCFFFEFEFEFF00000052000000000000000000000000000000050000 + 00E4000000FE0000005F0000000000000048000000FE000000FE0000003F0000 + 0001000000C00000000300000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF58A8CFFF327EB6FF6ECB 5EFF6CCB5DFF3AB926FF3CB92BFFD9BF63FFFFBA62FFFFB960FFFFB85EFFFFB7 5DFFFFB65BFF1E5C8DFF4A8ABEFF1C5888FF0000000000000052E8E8E8FFF2F2 F1FF717170FFF6F6F6FF727272FFDDDDDDFFE0E0E0FF9F9F9FFFD0D0D0FF6161 - 61FFFCFCFCFFFCFCFCFF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 61FFFCFCFCFFFCFCFCFF00000052000000000000000000000000000000580000 + 00FE000000E800000007000000000000008D000000FE000000CF000000000000 + 00000000007C0000005100000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF58AAD1FF3381B8FF72CE 62FF3DBD29FF3DBC29FFEFC169FFFFBF68FFFFBD66FFFFBC65FFE4C486FF98C8 AEFF61D9EBFF205F91FF4B8DBFFF1D5A8AFF0000000000000052AFAFAFFFF0F0 EFFF707070FFF4F4F4FF797979FFB0B0AFFFB1B1B1FFDDDDDDFF6A6A6AFFB8B8 - B8FFDDDDDDFFFCFCFCFF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + B8FFDDDDDDFFFCFCFCFF00000052000000000000000000000000000000C40000 + 00FE000000830000000000000009000000EC000000FE000000BC000000000000 + 00000000001B000000B600000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF58ACD1FF3483BAFF94BD 31FF93BC30FFD8C86BFFFFC36EFFFFC26CFFFFC16BFFFFC069FF9ECCB4FF5EDE F8FF85E5F9FF226294FF4B8FC1FF1E5C8DFF0000000000000052B1B1B1FF8C8C 8BFF707070FF949494FF949494FFECECECFFEFEFEEFF969696FF8D8D8DFFF6F6 - F6FF747474FFE7E7E7FF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + F6FF747474FFE7E7E7FF00000052000000000000000000000033000000FD0000 + 00FA0000001C0000000000000060000000FE000000E70000009C000000380000 + 000000000000000000B000000023000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF58ADD3FF3483BAFFFFC8 74FFFFC773FFFFC772FFFFC571FFFFC470FFFFC36FFFFFC36EFF6EDEEEFF8DE7 FAFF8BE7FAFF246598FF4C92C2FF205F91FF0000000000000052EAEAEAFFECEC EBFFEEEEEDFFEAEAE9FFF2F2F1FFF3F3F2FFF4F4F4FFF5F5F5FFF6F6F6FFF7F7 - F6FFEFEFEFFFFAFAFAFF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + F6FFEFEFEFFFFAFAFAFF000000520000000000000000000000A0000000FE0000 + 00B10000000000000000000000CD000000FE0000008800000020000000B30000 + 0000000000000000004F00000084000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF59B0D4FF4294C3FF3483 BAFF3483BAFF3381B8FF327EB6FF317CB3FF2F79AFFF2D76ACFF2B73A8FF296F A4FF286CA0FF367BADFF4E96C4FF226294FF0000000000000052EAEAE9FFE9E9 E8FFE8E8E7FFE6E6E5FFEFEFEFFFF1F1F0FFF2F2F1FFF3F3F2FFF3F3F3FFEEEE - EEFFE9E9E9FFF9F9F9FF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + EEFFE9E9E9FFF9F9F9FF000000520000000000000031000000F8000000FE0000 + 00730000000400000062000000FE000000FE000000420000000D000000CF0000 + 006F0000000D0000002D000000E4000000210000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF5DB3D6FF5AB0D4FF59AF D4FF58AED3FF5AADD3FF5AADD2FF5AAAD1FF59A9D0FF57A7CFFF55A3CDFF52A0 CBFF519EC9FF519CC9FF539CC8FF246598FF0000000000000052F0EFEFFFE4E4 E3FFE7E6E5FFEAEAE9FFEDEDECFFEEEEEDFFEFEFEEFFF0F0EFFFF0F0EFFFEEEE - EEFFEEEEEEFFF8F8F8FF00000052000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + EEFFEEEEEEFFF8F8F8FF00000052000000000000005D00000074000000710000 + 00790000002B000000760000006B0000006F0000007B0000004E0000007D0000 + 00730000003E0000006100000074000000500000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003483BAFF3483BAFF3483BAFF3483 BAFF3483BAFF3483BAFF3483BAFF3381B8FF327EB6FF317CB3FF2F79AFFF2D76 @@ -8162,6 +8172,9 @@ object MainForm: TMainForm object CopyselectedrowsasLaTeXtable2: TMenuItem Action = actCopyAsLaTeX end + object CopyselectedrowsasWikitable1: TMenuItem + Action = actCopyAsWiki + end end object Exportdata2: TMenuItem Action = actExportData @@ -8269,9 +8282,10 @@ object MainForm: TMainForm object SaveDialogExportData: TSaveDialog DefaultExt = 'csv' Filter = - 'CSV-Files (*.csv)|*.csv|Hypertext-Files (*.html)|*.html|XML-File' + - 's (*.xml)|*.xml|SQL script (*.sql)|*.sql|LaTeX table (*.latex)|*' + - '.latex' + 'Comma separated values (*.csv)|*.csv|Hypertext markup language (' + + '*.html)|*.html|Extensible markup language (*.xml)|*.xml|Structur' + + 'ed query language (*.sql)|*.sql|LaTeX table (*.latex)|*.latex|Wi' + + 'ki markup table (*.wiki)|*.wiki' Options = [ofOverwritePrompt, ofEnableSizing] OnTypeChange = SaveDialogExportDataTypeChange Left = 40 diff --git a/source/main.pas b/source/main.pas index d8183851..14570bad 100644 --- a/source/main.pas +++ b/source/main.pas @@ -488,6 +488,9 @@ type actCopyAsLaTeX: TAction; CopyselectedrowsasLaTeXtable1: TMenuItem; CopyselectedrowsasLaTeXtable2: TMenuItem; + actCopyAsWiki: TAction; + CopyselectedrowsasWikitable1: TMenuItem; + CopyselectedrowsasWikitable2: TMenuItem; procedure actCreateDBObjectExecute(Sender: TObject); procedure menuConnectionsPopup(Sender: TObject); procedure actExitApplicationExecute(Sender: TObject); @@ -2263,6 +2266,8 @@ begin ExportFormat := efSQL else if act = actCopyAsLaTeX then ExportFormat := efLaTeX + else if act = actCopyAsWiki then + ExportFormat := efWiki else ExportFormat := efUnknown; GridExport(ActiveGrid, S, ExportFormat); @@ -4182,6 +4187,7 @@ begin actCopyAsXML.Enabled := inDataOrQueryTabNotEmpty; actCopyAsSQL.Enabled := inDataOrQueryTabNotEmpty; actCopyAsLaTeX.Enabled := inDataOrQueryTabNotEmpty; + actCopyAsWiki.Enabled := inDataOrQueryTabNotEmpty; actExportData.Enabled := inDataOrQueryTabNotEmpty; actDataSetNull.Enabled := inDataOrQueryTab and Assigned(Results) and Assigned(Grid.FocusedNode);