parent
8f76ce3569
commit
7746d85e5f
@ -0,0 +1,84 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
|
||||||
|
namespace App\Tables; |
||||||
|
|
||||||
|
|
||||||
|
class CXMacroExporter extends CStructArrayExporter |
||||||
|
{ |
||||||
|
private $noQuoteCols = true; |
||||||
|
|
||||||
|
public function noQuotesAround($cols) |
||||||
|
{ |
||||||
|
$this->noQuoteCols = $cols; |
||||||
|
return $this; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string - mime type for the downloaded file |
||||||
|
*/ |
||||||
|
protected function getMimeType() |
||||||
|
{ |
||||||
|
return $this->wantDownload ? 'text/x-chdr' : 'text/plain'; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return string - file extension for the downloaded file |
||||||
|
*/ |
||||||
|
protected function getFileExtension() |
||||||
|
{ |
||||||
|
return 'h'; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Write the document to stdout ('php://output') |
||||||
|
*/ |
||||||
|
protected function writeDocument() |
||||||
|
{ |
||||||
|
$table = $this->table; |
||||||
|
|
||||||
|
$any_bool = false; |
||||||
|
$colnames = []; |
||||||
|
$fields = array_map(function (Column $c) use (&$any_bool, &$colnames) { |
||||||
|
if ($c->type == 'bool') $any_bool = true; |
||||||
|
$cname = $this->cify($c->name); |
||||||
|
$colnames[] = $cname; |
||||||
|
return (object)['name' => $c->name, 'type' => $c->type, 'cname' => $cname]; |
||||||
|
}, $this->columns); |
||||||
|
|
||||||
|
$ctablename = 'X_' .strtoupper($this->cify($table->name)); |
||||||
|
|
||||||
|
echo "#ifndef {$ctablename}_H\n". |
||||||
|
"#define {$ctablename}_H\n\n"; |
||||||
|
|
||||||
|
echo "/*\n" . $this->getHeaderComment(' ') . "\n"; |
||||||
|
|
||||||
|
echo |
||||||
|
" Example X macro processing the table: \n". |
||||||
|
" \n"; |
||||||
|
echo " #undef X\n"; |
||||||
|
echo " #define X(".implode(', ', $colnames) .") \\\n". |
||||||
|
" ...do something with the args\n". |
||||||
|
" \n". |
||||||
|
" Then run it by putting $ctablename somewhere in your C or H file.\n"; |
||||||
|
echo "*/\n\n"; |
||||||
|
|
||||||
|
// Now the table itself |
||||||
|
echo "#define ".$ctablename." \\\n"; |
||||||
|
|
||||||
|
$first = true; |
||||||
|
foreach ($this->iterateRows() as $row) { |
||||||
|
if ($first) { |
||||||
|
$first = false; |
||||||
|
} else { |
||||||
|
echo " \\\n"; |
||||||
|
} |
||||||
|
|
||||||
|
echo " X("; |
||||||
|
$this->dumpRow($fields, $row, $this->noQuoteCols, false); |
||||||
|
echo ")"; |
||||||
|
} |
||||||
|
|
||||||
|
echo "\n\n#endif /* {$ctablename}_H */\n"; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue