pdftract/templates/sdk-skeleton/php/src/Codegen/Methods.php.tera
jedarden e3c7b2eec0 fix(pdftract-l993m): fix Tera template syntax in Methods templates
Fix incorrect Tera template syntax in per-language Methods templates:
- Change `elsif` to `elif` (correct Tera conditional syntax)
- Fix inline ternary-like syntax to use proper `{% if %}...{% else %}...{% endif %}`
- Fix truncated package name in Java template (codegen → codegen)

Affected templates:
- PHP: Methods.php.tera
- Python: methods.py.tera
- Ruby: methods.rb.tera
- Swift: Methods.swift.tera
- Java: Methods.java.tera

All 8 subprocess SDK templates now render correctly with the codegen
command. Verified via `pdftract sdk codegen --lang <lang> --out /tmp/sdk-<lang>`.

Co-Authored-By: Claude Code <noreply@anthropic.com>
Bead-Id: pdftract-l993m
2026-05-18 02:29:21 -04:00

201 lines
5.5 KiB
Text

<?php
namespace Pdftract\Codegen;
/**
* This file is auto-generated. Do not edit manually.
*/
class Client
{
private string $binaryPath;
private string $version;
public function __construct(string $binaryPath = 'pdftract')
{
$this->binaryPath = $binaryPath;
$this->version = '{{ version }}';
}
private function exec(array $args): string
{
$cmd = escapeshellcmd($this->binaryPath);
foreach ($args as $arg) {
$cmd .= ' ' . escapeshellarg($arg);
}
$output = [];
$exitCode = 0;
exec($cmd . ' 2>&1', $output, $exitCode);
if ($exitCode !== 0) {
throw $this->mapError(implode("\n", $output), $exitCode);
}
return implode("\n", $output);
}
private function mapError(string $stderr, int $exitCode): PdftractException
{
return match ($exitCode) {
{% for error in errors %}
{% if error.exit_code != 0 %}
{{ error.exit_code }} => new {{ error.exception_name }}($stderr, $exitCode),
{% endif %}
{% endfor %}
default => new PdftractException($stderr, $exitCode),
};
}
{% for method in methods %}
{% if method.name == 'extract_stream' %}
/**
* {{ method.description }}
*
* @return \Generator<{{ method.return_type }}>
*/
public function {{ method.camel_name }}(Source $source, ?{{ method.options_type }} $options = null): \Generator
{
$args = array_merge(['{{ method.cli_flag }}'], $source->toArgs());
if ($options !== null) {
$args = array_merge($args, $options->toArgs());
}
$cmd = escapeshellcmd($this->binaryPath);
foreach ($args as $arg) {
$cmd .= ' ' . escapeshellarg($arg);
}
$descriptorspec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$process = proc_open($cmd, $descriptorspec, $pipes);
if (!is_resource($process)) {
throw new PdftractException('Failed to start process', -1);
}
fclose($pipes[0]);
while (!feof($pipes[1])) {
$line = fgets($pipes[1]);
if ($line === false || trim($line) === '') {
continue;
}
$data = json_decode($line, true);
if ($data !== null) {
yield $data;
}
}
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$exitCode = proc_close($process);
if ($exitCode !== 0) {
throw $this->mapError($stderr, $exitCode);
}
}
{% elif method.name == 'search' %}
/**
* {{ method.description }}
*
* @return \Generator<{{ method.return_type }}>
*/
public function {{ method.camel_name }}(Source $source, string $pattern, ?{{ method.options_type }} $options = null): \Generator
{
$args = array_merge(['grep', $pattern], $source->toArgs());
if ($options !== null) {
$args = array_merge($args, $options->toArgs());
}
$cmd = escapeshellcmd($this->binaryPath);
foreach ($args as $arg) {
$cmd .= ' ' . escapeshellarg($arg);
}
$descriptorspec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$process = proc_open($cmd, $descriptorspec, $pipes);
if (!is_resource($process)) {
throw new PdftractException('Failed to start process', -1);
}
fclose($pipes[0]);
while (!feof($pipes[1])) {
$line = fgets($pipes[1]);
if ($line === false || trim($line) === '') {
continue;
}
$data = json_decode($line, true);
if ($data !== null) {
yield $data;
}
}
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$exitCode = proc_close($process);
if ($exitCode !== 0) {
throw $this->mapError($stderr, $exitCode);
}
}
{% elif method.name == 'verify_receipt' %}
public function {{ method.camel_name }}(string $path, string $receipt): bool
{
$output = $this->exec(['{{ method.cli_flag }}', $path, $receipt]);
return trim($output) === 'true';
}
{% else %}
public function {{ method.camel_name }}(Source $source{% if method.has_options %}, ?{{ method.options_type }} $options = null{% endif %}): {% if method.return_type == 'string' %}string{% else %}array{% endif %}
{
$args = array_merge(['{{ method.cli_flag }}'], $source->toArgs());
{% if method.has_options %}
if ($options !== null) {
$args = array_merge($args, $options->toArgs());
}
{% endif %}
{% if method.name == 'extract_text' %}
$args[] = '--text';
{% elif method.name == 'extract_markdown' %}
$args[] = '--md';
{% elif method.name == 'get_metadata' %}
$args[] = '--metadata-only';
{% endif %}
$output = $this->exec($args);
{% if method.returns_string %}
return $output;
{% else %}
$result = json_decode($output, true);
if ($result === null) {
throw new PdftractException('Failed to decode JSON output', -1);
}
return $result;
{% endif %}
}
{% endif %}
{% endfor %}
}