mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Use custom tab width and tabs-to-spaces setting uniquely in all places where we generate code. Provides a new CodeIndent() helper. Closes #1330
This commit is contained in:
@ -681,47 +681,46 @@ begin
|
||||
case ExportFormat of
|
||||
efHTML: begin
|
||||
Header :=
|
||||
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ' + CRLF +
|
||||
' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF + CRLF +
|
||||
'<html>' + CRLF +
|
||||
' <head>' + CRLF +
|
||||
' <title>' + TableName + '</title>' + CRLF +
|
||||
' <meta name="GENERATOR" content="'+ APPNAME+' '+Mainform.AppVersion + '">' + CRLF +
|
||||
' <meta http-equiv="Content-Type" content="text/html; charset='+GetHTMLCharsetByEncoding(Encoding)+'" />' + CRLF +
|
||||
' <style type="text/css">' + CRLF +
|
||||
' th, td {vertical-align: top;}' + CRLF +
|
||||
' table, td {border: 1px solid silver; padding: 2px;}' + CRLF +
|
||||
' table {border-collapse: collapse;}' + CRLF;
|
||||
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ' + sLineBreak +
|
||||
CodeIndent + '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + sLineBreak + sLineBreak +
|
||||
'<html>' + sLineBreak +
|
||||
CodeIndent + '<head>' + sLineBreak +
|
||||
CodeIndent(2) + '<title>' + TableName + '</title>' + sLineBreak +
|
||||
CodeIndent(2) + '<meta name="GENERATOR" content="'+ APPNAME+' '+Mainform.AppVersion + '">' + sLineBreak +
|
||||
CodeIndent(2) + '<meta http-equiv="Content-Type" content="text/html; charset='+GetHTMLCharsetByEncoding(Encoding)+'" />' + sLineBreak +
|
||||
CodeIndent(2) + '<style type="text/css">' + sLineBreak +
|
||||
CodeIndent(3) + 'th, td {vertical-align: top;}' + sLineBreak +
|
||||
CodeIndent(3) + 'table, td {border: 1px solid silver; padding: 2px;}' + sLineBreak +
|
||||
CodeIndent(3) + 'table {border-collapse: collapse;}' + sLineBreak;
|
||||
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
|
||||
while Col > NoColumn do begin
|
||||
// Right-justify all cells to match the grid on screen.
|
||||
if Grid.Header.Columns[Col].Alignment = taRightJustify then
|
||||
Header := Header + ' .col' + IntToStr(Col) + ' {text-align: right;}' + CRLF;
|
||||
Header := Header + CodeIndent(3) + '.col' + IntToStr(Col) + ' {text-align: right;}' + sLineBreak;
|
||||
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
|
||||
end;
|
||||
Header := Header +
|
||||
' </style>' + CRLF +
|
||||
' </head>' + CRLF + CRLF +
|
||||
' <body>' + CRLF + CRLF;
|
||||
CodeIndent(2) + '</style>' + sLineBreak +
|
||||
CodeIndent + '</head>' + sLineBreak + sLineBreak +
|
||||
CodeIndent + '<body>' + sLineBreak + sLineBreak;
|
||||
if chkIncludeQuery.Checked then
|
||||
Header := Header + '<p style="font-family: monospace; white-space: pre;">' + GridData.SQL + '</p>' + CRLF + CRLF;
|
||||
Header := Header + ' <table caption="' + TableName + ' (' + inttostr(NodeCount) + ' rows)">' + CRLF;
|
||||
Header := Header + CodeIndent(2) + '<table caption="' + TableName + ' (' + inttostr(NodeCount) + ' rows)">' + sLineBreak;
|
||||
if chkIncludeColumnNames.Checked then begin
|
||||
Header := Header +
|
||||
' <thead>' + CRLF +
|
||||
' <tr>' + CRLF;
|
||||
CodeIndent(3) + '<thead>' + sLineBreak +
|
||||
CodeIndent(4) + '<tr>' + sLineBreak;
|
||||
Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
|
||||
while Col > NoColumn do begin
|
||||
if Col <> ExcludeCol then
|
||||
Header := Header + ' <th class="col' + IntToStr(Col) + '">' + Grid.Header.Columns[Col].Text + '</th>' + CRLF;
|
||||
Header := Header + CodeIndent(5) + '<th class="col' + IntToStr(Col) + '">' + Grid.Header.Columns[Col].Text + '</th>' + sLineBreak;
|
||||
Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
|
||||
end;
|
||||
Header := Header +
|
||||
' </tr>' + CRLF +
|
||||
' </thead>' + CRLF;
|
||||
CodeIndent(4) + '</tr>' + sLineBreak +
|
||||
CodeIndent(3) + '</thead>' + sLineBreak;
|
||||
end;
|
||||
Header := Header +
|
||||
' <tbody>' + CRLF;
|
||||
Header := Header + CodeIndent(3) + '<tbody>' + sLineBreak;
|
||||
end;
|
||||
|
||||
efExcel, efCSV: begin
|
||||
@ -847,10 +846,10 @@ begin
|
||||
// JavaScript Object Notation
|
||||
Header := '{' + CRLF;
|
||||
if chkIncludeQuery.Checked then
|
||||
Header := Header + #9 + '"query": '+FormatPhp(GridData.SQL)+',' + CRLF
|
||||
Header := Header + CodeIndent + '"query": '+FormatPhp(GridData.SQL)+',' + sLineBreak
|
||||
else
|
||||
Header := Header + #9 + '"table": '+FormatPhp(TableName)+',' + CRLF ;
|
||||
Header := Header + #9 + '"rows":' + CRLF + #9 + '[';
|
||||
Header := Header + CodeIndent + '"table": '+FormatPhp(TableName)+',' + sLineBreak ;
|
||||
Header := Header + CodeIndent + '"rows":' + sLineBreak + CodeIndent + '[';
|
||||
end;
|
||||
|
||||
end;
|
||||
@ -873,9 +872,9 @@ begin
|
||||
|
||||
// Row preamble
|
||||
case ExportFormat of
|
||||
efHTML: tmp := ' <tr>' + CRLF;
|
||||
efHTML: tmp := CodeIndent(4) + '<tr>' + sLineBreak;
|
||||
|
||||
efXML: tmp := #9'<row>' + CRLF;
|
||||
efXML: tmp := CodeIndent + '<row>' + sLineBreak;
|
||||
|
||||
efSQLUpdate: begin
|
||||
tmp := '';
|
||||
@ -891,7 +890,7 @@ begin
|
||||
if ExportFormat in [efSQLInsert, efSQLDeleteInsert] then
|
||||
tmp := tmp + 'INSERT'
|
||||
else if ExportFormat = efSQLInsertIgnore then
|
||||
tmp := tmp + 'INSERT IGNORE'
|
||||
tmp := tmp + 'INSERT IGNORE'
|
||||
else
|
||||
tmp := tmp + 'REPLACE';
|
||||
tmp := tmp + ' INTO '+GridData.Connection.QuoteIdent(Tablename);
|
||||
@ -912,15 +911,15 @@ begin
|
||||
|
||||
efTextile, efJiraTextile: tmp := TrimLeft(Separator);
|
||||
|
||||
efPHPArray: tmp := #9 + 'array('+CRLF;
|
||||
efPHPArray: tmp := CodeIndent + 'array(' + sLineBreak;
|
||||
|
||||
efMarkDown: tmp := '| ';
|
||||
|
||||
efJSON: begin
|
||||
if chkIncludeColumnNames.Checked then
|
||||
tmp := CRLF + #9#9 + '{' + CRLF
|
||||
tmp := sLineBreak + CodeIndent(2) + '{' + sLineBreak
|
||||
else
|
||||
tmp := CRLF + #9#9 + '[' + CRLF
|
||||
tmp := sLineBreak + CodeIndent(2) + '[' + sLineBreak
|
||||
end;
|
||||
|
||||
efJSONLines: begin
|
||||
@ -961,7 +960,7 @@ begin
|
||||
efHTML: begin
|
||||
// Escape HTML control characters in data.
|
||||
Data := HTMLSpecialChars(Data);
|
||||
tmp := tmp + ' <td class="col' + IntToStr(Col) + '">' + Data + '</td>' + CRLF;
|
||||
tmp := tmp + CodeIndent(5) + '<td class="col' + IntToStr(Col) + '">' + Data + '</td>' + sLineBreak;
|
||||
end;
|
||||
|
||||
efExcel, efCSV: begin
|
||||
@ -994,7 +993,7 @@ begin
|
||||
|
||||
efXML: begin
|
||||
// Print cell start tag.
|
||||
tmp := tmp + #9#9'<field';
|
||||
tmp := tmp + CodeIndent(2) + '<field';
|
||||
if chkIncludeColumnNames.Checked then
|
||||
tmp := tmp + ' name="' + HTMLSpecialChars(Grid.Header.Columns[Col].Text) + '"';
|
||||
if GridData.IsNull(ResultCol) then
|
||||
@ -1040,13 +1039,13 @@ begin
|
||||
end;
|
||||
|
||||
if chkIncludeColumnNames.Checked then
|
||||
tmp := tmp + #9#9 + FormatPhp(Grid.Header.Columns[Col].Text) + ' => ' + Data + ','+CRLF
|
||||
tmp := tmp + CodeIndent(2) + FormatPhp(Grid.Header.Columns[Col].Text) + ' => ' + Data + ',' + sLineBreak
|
||||
else
|
||||
tmp := tmp + #9#9 + Data + ','+CRLF;
|
||||
tmp := tmp + CodeIndent(2) + Data + ',' + sLineBreak;
|
||||
end;
|
||||
|
||||
efJSON: begin
|
||||
tmp := tmp + #9#9#9;
|
||||
tmp := tmp + CodeIndent(3);
|
||||
if chkIncludeColumnNames.Checked then
|
||||
tmp := tmp + FormatPhp(Grid.Header.Columns[Col].Text) + ': ';
|
||||
if GridData.IsNull(ResultCol) then
|
||||
@ -1087,13 +1086,13 @@ begin
|
||||
// Row epilogue
|
||||
case ExportFormat of
|
||||
efHTML:
|
||||
tmp := tmp + ' </tr>' + CRLF;
|
||||
tmp := tmp + CodeIndent(4) + '</tr>' + sLineBreak;
|
||||
efExcel, efCSV, efLaTeX, efTextile, efJiraTextile: begin
|
||||
Delete(tmp, Length(tmp)-Length(Separator)+1, Length(Separator));
|
||||
tmp := tmp + Terminator;
|
||||
end;
|
||||
efXML:
|
||||
tmp := tmp + #9'</row>' + CRLF;
|
||||
tmp := tmp + CodeIndent + '</row>' + sLineBreak;
|
||||
efSQLInsert, efSQLInsertIgnore, efSQLReplace, efSQLDeleteInsert: begin
|
||||
Delete(tmp, Length(tmp)-1, 2);
|
||||
tmp := tmp + ');' + CRLF;
|
||||
@ -1103,15 +1102,15 @@ begin
|
||||
tmp := tmp + ' WHERE' + GridData.GetWhereClause + ';' + sLineBreak;
|
||||
end;
|
||||
efPHPArray:
|
||||
tmp := tmp + #9 + '),' + CRLF;
|
||||
tmp := tmp + CodeIndent + '),' + sLineBreak;
|
||||
efMarkDown:
|
||||
tmp := tmp + Terminator;
|
||||
efJSON: begin
|
||||
Delete(tmp, length(tmp)-2,2);
|
||||
if chkIncludeColumnNames.Checked then
|
||||
tmp := tmp + #9#9 + '},'
|
||||
tmp := tmp + CodeIndent(2) + '},'
|
||||
else
|
||||
tmp := tmp + #9#9 + '],';
|
||||
tmp := tmp + CodeIndent(2) + '],';
|
||||
end;
|
||||
efJSONLines: begin
|
||||
Delete(tmp, length(tmp)-1,2);
|
||||
@ -1130,14 +1129,14 @@ begin
|
||||
case ExportFormat of
|
||||
efHTML: begin
|
||||
tmp :=
|
||||
' </tbody>' + CRLF +
|
||||
' </table>' + CRLF + CRLF +
|
||||
' <p>' + CRLF +
|
||||
' <em>generated ' + DateToStr(now) + ' ' + TimeToStr(now) +
|
||||
' by <a href="'+APPDOMAIN+'">' + APPNAME + ' ' + Mainform.AppVersion + '</a></em>' + CRLF +
|
||||
' </p>' + CRLF + CRLF +
|
||||
' </body>' + CRLF +
|
||||
'</html>' + CRLF;
|
||||
CodeIndent(3) + '</tbody>' + sLineBreak +
|
||||
CodeIndent(2) + '</table>' + sLineBreak + sLineBreak +
|
||||
CodeIndent(2) + '<p>' + sLineBreak +
|
||||
CodeIndent(3) + '<em>generated ' + DateToStr(now) + ' ' + TimeToStr(now) +
|
||||
CodeIndent(3) + 'by <a href="'+APPDOMAIN+'">' + APPNAME + ' ' + Mainform.AppVersion + '</a></em>' + sLineBreak +
|
||||
CodeIndent(2) + '</p>' + sLineBreak + sLineBreak +
|
||||
CodeIndent + '</body>' + sLineBreak +
|
||||
'</html>' + sLineBreak;
|
||||
end;
|
||||
efXML: begin
|
||||
if chkIncludeQuery.Checked then
|
||||
@ -1152,7 +1151,7 @@ begin
|
||||
end;
|
||||
efJSON: begin
|
||||
S.Size := S.Size - 1;
|
||||
tmp := CRLF + #9 + ']' + CRLF + '}';
|
||||
tmp := sLineBreak + CodeIndent + ']' + sLineBreak + '}';
|
||||
end;
|
||||
else
|
||||
tmp := '';
|
||||
|
Reference in New Issue
Block a user