improve xmacro exporter

This commit is contained in:
2018-07-29 22:47:16 +02:00
parent 8f76ce3569
commit 7746d85e5f
4 changed files with 148 additions and 41 deletions
+52 -41
View File
@@ -22,7 +22,7 @@ class CStructArrayExporter extends BaseExporter
return 'c';
}
private function cify($name)
protected function cify($name)
{
$name = preg_replace('/[^a-z0-9_]/i', '_', $name);
if (ctype_digit($name[0])) {
@@ -79,49 +79,60 @@ class CStructArrayExporter extends BaseExporter
}
echo " { ";
$firstf = true;
foreach ($fields as $field) {
if ($firstf) {
$firstf = false;
} else {
echo ", ";
}
$val = 0;
switch ($field->type) {
case 'string':
$val = "";
break;
case 'bool':
$val = false;
break;
}
if (isset($row->{$field->name})) {
$val = $row->{$field->name};
}
// export to C format
switch ($field->type) {
case 'string':
echo '"' . addcslashes($val, "\0..\37!@\@\177..\377") . '"';
break;
case 'bool':
echo (int)$val;
break;
case 'int':
case 'float':
echo $val;
break;
}
}
$this->dumpRow($fields, $row);
echo " }";
}
echo "\n};\n";
}
protected function dumpRow($fields, $row, $noQuoteCols=[], $spaces = true)
{
$firstf = true;
foreach ($fields as $field) {
if ($firstf) {
$firstf = false;
} else {
if ($spaces)
echo ", ";
else
echo ",";
}
$val = 0;
switch ($field->type) {
case 'string':
$val = "";
break;
case 'bool':
$val = false;
break;
}
if (isset($row->{$field->name})) {
$val = $row->{$field->name};
}
// export to C format
switch ($field->type) {
case 'string':
if (in_array($field->name, $noQuoteCols)) {
echo $val;
} else {
echo '"' . addcslashes($val, "\0..\37!@\@\177..\377") . '"';
}
break;
case 'bool':
echo (int)$val;
break;
case 'int':
case 'float':
echo $val;
break;
}
}
}
}