--wip-- [skip ci]
This commit is contained in:
parent
748ea8c9c9
commit
8892b11dc7
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'pdflatex' => [
|
||||
'binary' => env('PDFLATEX_BIN', ''),
|
||||
],
|
||||
'xelatex' => [
|
||||
'binary' => env('XELATEX_BIN', ''),
|
||||
],
|
||||
];
|
|
@ -15,20 +15,24 @@ class Compiler implements Responsable
|
|||
$filename = $document->filename();
|
||||
$dir = Str::random(32);
|
||||
|
||||
$contents = view()->make($document->view(), get_object_vars($document))->render();
|
||||
$contents = $document->renderBody();
|
||||
|
||||
mkdir('/tmp/'.$dir);
|
||||
file_put_contents('/tmp/'.$dir.'/'.$document->filename().'.tex', $contents);
|
||||
|
||||
if ($document->template()) {
|
||||
$templatePath = resource_path("views/tex/templates/{$document->template()}");
|
||||
exec('cp '.$templatePath.'/* /tmp/'.$dir);
|
||||
$templatePath = $document->template()->fullPath();
|
||||
exec('rsync -av '.escapeshellarg($templatePath).'/ /tmp/'.escapeshellarg($dir));
|
||||
}
|
||||
|
||||
$command = 'cd /tmp/'.$dir;
|
||||
$command .= ' && '.$document->getEngine().' --halt-on-error '.$document->filename().'.tex';
|
||||
$command .= ' && '.$document->getEngine().' --halt-on-error '.$document->filename().'.tex';
|
||||
$command = collect([
|
||||
'cd /tmp/'.escapeshellarg($dir),
|
||||
$document->getEngine()->binary().' --halt-on-error '.$document->filename().'.tex',
|
||||
$document->getEngine()->binary().' --halt-on-error '.$document->filename().'.tex',
|
||||
])->implode(' && ');
|
||||
|
||||
exec($command, $output, $returnVar);
|
||||
dd($output);
|
||||
|
||||
if (file_exists('/tmp/'.$dir.'/'.$document->filename().'.pdf')) {
|
||||
$this->file = new File('/tmp/'.$dir.'/'.$document->filename().'.pdf');
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace Zoomyboy\Tex;
|
||||
|
||||
use Exception;
|
||||
|
||||
class CompilerException extends Exception
|
||||
{
|
||||
}
|
|
@ -10,9 +10,9 @@ abstract class Document
|
|||
|
||||
abstract public function view(): string;
|
||||
|
||||
abstract public function template(): ?string;
|
||||
abstract public function template(): ?Template;
|
||||
|
||||
abstract public function getEngine(): string;
|
||||
abstract public function getEngine(): Engine;
|
||||
|
||||
public function assertHasContent(string $content): void
|
||||
{
|
||||
|
@ -22,8 +22,10 @@ abstract class Document
|
|||
);
|
||||
}
|
||||
|
||||
protected function renderBody(): string
|
||||
public function renderBody(): string
|
||||
{
|
||||
return 'gggggMax';
|
||||
return view()
|
||||
->make($this->view(), get_object_vars($this))
|
||||
->render();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace Zoomyboy\Tex;
|
||||
|
||||
enum Engine: string
|
||||
{
|
||||
case PDFLATEX = 'pdflatex';
|
||||
case XELATEX = 'xelatex';
|
||||
|
||||
public function binary(): string
|
||||
{
|
||||
$configPath = 'tex.'.$this->value.'.binary';
|
||||
$binary = config($configPath);
|
||||
|
||||
throw_if(
|
||||
!$binary,
|
||||
CompilerException::class,
|
||||
'Binary for engine '.$this->value.' not found. Please specify a binary file via the config '.$configPath.'.',
|
||||
);
|
||||
|
||||
return config('tex.'.$this->value.'.binary');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace Zoomyboy\Tex;
|
||||
|
||||
final class Template
|
||||
{
|
||||
private function __construct(private string $resourcePath)
|
||||
{
|
||||
throw_unless(
|
||||
$this->exists(),
|
||||
CompilerException::class,
|
||||
'Path for template '.$this->resourcePath.' not found. Please make sure the template directory '.$this->fullPath().' exists'
|
||||
);
|
||||
}
|
||||
|
||||
public static function make(string $resourcePath): self
|
||||
{
|
||||
return new static($resourcePath);
|
||||
}
|
||||
|
||||
public function fullPath(): string
|
||||
{
|
||||
return resource_path('views/'.str_replace('.', '/', $this->resourcePath));
|
||||
}
|
||||
|
||||
public function exists(): bool
|
||||
{
|
||||
return is_dir($this->fullPath());
|
||||
}
|
||||
}
|
|
@ -15,12 +15,14 @@ class TexServiceProvider extends ServiceProvider
|
|||
public function register()
|
||||
{
|
||||
view()->addExtension('tex', 'tex', function () {
|
||||
$compiler = new TexCompiler(app('files'), config('view.compiled'));
|
||||
$compiler = new BladeCompiler(app('files'), config('view.compiled'));
|
||||
|
||||
return new CompilerEngine($compiler, app('files'));
|
||||
});
|
||||
|
||||
app()->bind('tex.compiler', Compiler::class);
|
||||
|
||||
$this->mergeConfigFrom(__DIR__.'/../config/tex.php', 'tex');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue