Add support for exporting grids as Wiki table markup

This commit is contained in:
Ansgar Becker
2010-06-30 23:21:28 +00:00
parent f47eb39316
commit 780cf0f19f
4 changed files with 82 additions and 44 deletions

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

View File

@@ -67,7 +67,7 @@ type
end;
TSQLBatch = TObjectList<TSQLSentence>;
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 + ' <td class="col' + IntToStr(Col) + '">' + Data + '</td>' + 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 + ' </tr>' + CRLF;
efCSV, efLaTeX:
efCSV, efLaTeX, efWiki: begin
Delete(tmp, Length(tmp)-Length(Separator)+1, Length(Separator));
tmp := tmp + Terminator;
end;
efXML:
tmp := tmp + #9'</row>' + CRLF;
efSQL: begin

View File

@@ -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

View File

@@ -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);