[TOOLS][DOCUMENTATION] Improvements to entity generation script
This commit is contained in:
parent
cbbdae6831
commit
06b5fe2cdf
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,4 +23,4 @@
|
|||||||
/file
|
/file
|
||||||
|
|
||||||
DOCUMENTATION/database/*
|
DOCUMENTATION/database/*
|
||||||
!DOCUMENTATION/database/diagram.pdf
|
!DOCUMENTATION/database/database.pdf
|
BIN
DOCUMENTATION/database/database.pdf
Normal file
BIN
DOCUMENTATION/database/database.pdf
Normal file
Binary file not shown.
Binary file not shown.
@ -11,30 +11,13 @@ use App\Util\HTML as H;
|
|||||||
use Functional as F;
|
use Functional as F;
|
||||||
|
|
||||||
$template = '
|
$template = '
|
||||||
\documentclass{article}
|
graph database {
|
||||||
|
|
||||||
\paperheight=120cm
|
|
||||||
\paperwidth=100cm
|
|
||||||
|
|
||||||
\usepackage[pdf]{graphviz}
|
|
||||||
|
|
||||||
\title{GNU social database diagram}
|
|
||||||
\author{Hugo Sales}
|
|
||||||
\date{\today}
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\maketitle
|
|
||||||
|
|
||||||
\neatograph{database}{
|
|
||||||
node [shape=plaintext]
|
|
||||||
|
|
||||||
%tables%
|
%tables%
|
||||||
|
|
||||||
%edges%
|
%edges%
|
||||||
|
|
||||||
}
|
}
|
||||||
\end{document}
|
|
||||||
';
|
';
|
||||||
|
|
||||||
$files = glob(INSTALL_DIR . '/src/Entity/*.php');
|
$files = glob(INSTALL_DIR . '/src/Entity/*.php');
|
||||||
@ -76,11 +59,9 @@ foreach ($files as $file) {
|
|||||||
F\map($fields, $cell)),
|
F\map($fields, $cell)),
|
||||||
];
|
];
|
||||||
|
|
||||||
$tables[] = Common::indent("{$table} [label=<\n" . Common::indent(H::html($html)) . "\n>]");
|
$tables[] = Common::indent("{$table} [shape=none, label=<\n" . Common::indent(H::html($html)) . "\n>]");
|
||||||
}
|
}
|
||||||
|
|
||||||
$outfile = INSTALL_DIR . '/DOCUMENTATION/database/diagram.tex';
|
|
||||||
|
|
||||||
$replace = [
|
$replace = [
|
||||||
'/%tables%/' => Common::indent(implode("\n", $tables)),
|
'/%tables%/' => Common::indent(implode("\n", $tables)),
|
||||||
'/%edges%/' => Common::indent(implode("\n", $edges)),
|
'/%edges%/' => Common::indent(implode("\n", $edges)),
|
||||||
@ -92,11 +73,11 @@ foreach ($replace as $from => $to) {
|
|||||||
$out = preg_replace($from, $to, $out);
|
$out = preg_replace($from, $to, $out);
|
||||||
}
|
}
|
||||||
|
|
||||||
file_put_contents($outfile, $out);
|
|
||||||
|
|
||||||
$path = dirname(__DIR__) . '/DOCUMENTATION/database';
|
$path = dirname(__DIR__) . '/DOCUMENTATION/database';
|
||||||
|
|
||||||
system("cd {$path} && pdflatex diagram.tex > /dev/null");
|
$outfile = $path . '/database.dot';
|
||||||
|
file_put_contents($outfile, $out);
|
||||||
|
|
||||||
system("neato -Goverlap=false -Gsplines=true -Tpdf {$path}/database.dot -o {$path}/database.pdf");
|
system("neato -Goverlap=false -Gsplines=true -Tpdf {$path}/database.dot -o {$path}/database.pdf");
|
||||||
|
|
||||||
echo "Generated database diagram. See {$path}/database.pdf\n";
|
echo "Generated database diagram. See {$path}/database.pdf\n";
|
||||||
|
@ -131,4 +131,23 @@ abstract class Common
|
|||||||
{
|
{
|
||||||
return implode('', F\map(preg_split('/[\b_]/', $str), self::arity('ucfirst', 1)));
|
return implode('', F\map(preg_split('/[\b_]/', $str), self::arity('ucfirst', 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indent $in, a string or array, $level levels
|
||||||
|
*
|
||||||
|
* @param array|string $in
|
||||||
|
*/
|
||||||
|
public static function indent($in, int $level = 1, int $count = 2): string
|
||||||
|
{
|
||||||
|
if (is_string($in)) {
|
||||||
|
return self::indent(explode("\n", $in), $level, $count);
|
||||||
|
} elseif (is_array($in)) {
|
||||||
|
$indent = str_repeat(' ', $count * $level);
|
||||||
|
return implode("\n", F\map(F\select($in,
|
||||||
|
self::arity(function ($s) { return $s != ''; }, 1)),
|
||||||
|
function ($val) use ($indent) {
|
||||||
|
return F\concat($indent . $val);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user