pax_global_header 0000666 0000000 0000000 00000000064 13767676466 0014546 g ustar 00root root 0000000 0000000 52 comment=fcb6d58d6539d25d0d66ad7af03d1bc661303da1
php-text-template-2.0.4/ 0000775 0000000 0000000 00000000000 13767676466 0015133 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/.github/ 0000775 0000000 0000000 00000000000 13767676466 0016473 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/.github/FUNDING.yml 0000664 0000000 0000000 00000000032 13767676466 0020303 0 ustar 00root root 0000000 0000000 github: sebastianbergmann
php-text-template-2.0.4/.github/workflows/ 0000775 0000000 0000000 00000000000 13767676466 0020530 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/.github/workflows/ci.yml 0000664 0000000 0000000 00000005244 13767676466 0021653 0 ustar 00root root 0000000 0000000 # https://help.github.com/en/categories/automating-your-workflow-with-github-actions
on:
- "pull_request"
- "push"
name: "CI"
jobs:
coding-guidelines:
name: "Coding Guidelines"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
- name: "Run friendsofphp/php-cs-fixer"
run: "php7.4 ./tools/php-cs-fixer fix --diff-format=udiff --dry-run --show-progress=dots --using-cache=no --verbose"
type-checker:
name: "Type Checker"
runs-on: "ubuntu-latest"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
- name: "Update dependencies with composer"
run: "php7.4 ./tools/composer update --no-ansi --no-interaction --no-progress"
- name: "Run vimeo/psalm"
run: "php7.4 ./tools/psalm --config=.psalm/config.xml --no-progress --shepherd --show-info=false --stats"
backward-compatibility:
name: Backward Compatibility
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
coverage: none
extensions: intl
- name: Run roave/backward-compatibility-check
run: ./tools/roave-backward-compatibility-check --from=2.0.0
tests:
name: "Tests"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
php-version:
- "7.3"
- "7.4"
- "8.0"
- "8.1"
steps:
- name: "Checkout"
uses: "actions/checkout@v2"
- name: "Install PHP with extensions"
uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
coverage: "pcov"
- name: "Cache dependencies installed with composer"
uses: "actions/cache@v1"
with:
path: "~/.composer/cache"
key: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}"
restore-keys: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-"
- name: "Install dependencies with composer"
run: "./tools/composer update --no-ansi --no-interaction --no-progress"
- name: "Run tests with phpunit/phpunit"
run: "vendor/bin/phpunit --coverage-clover=coverage.xml"
- name: "Send code coverage report to Codecov.io"
env:
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
run: "bash <(curl -s https://codecov.io/bash) || true"
php-text-template-2.0.4/.gitignore 0000664 0000000 0000000 00000000104 13767676466 0017116 0 ustar 00root root 0000000 0000000 /.idea
/composer.lock
/vendor
/.php_cs.cache
/.phpunit.result.cache
php-text-template-2.0.4/.phive/ 0000775 0000000 0000000 00000000000 13767676466 0016324 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/.phive/phars.xml 0000664 0000000 0000000 00000000667 13767676466 0020174 0 ustar 00root root 0000000 0000000
php-text-template-2.0.4/.php_cs.dist 0000664 0000000 0000000 00000020632 13767676466 0017355 0 ustar 00root root 0000000 0000000
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
EOF;
$finder = PhpCsFixer\Finder::create()
->files()
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests');
return PhpCsFixer\Config::create()
->setFinder($finder)
->setRiskyAllowed(true)
->setRules([
'align_multiline_comment' => true,
'array_indentation' => true,
'array_syntax' => ['syntax' => 'short'],
'binary_operator_spaces' => [
'operators' => [
'=' => 'align_single_space_minimal',
'=>' => 'align_single_space_minimal',
],
],
'blank_line_after_namespace' => true,
'blank_line_before_statement' => [
'statements' => [
'break',
'continue',
'declare',
'default',
'die',
'do',
'exit',
'for',
'foreach',
'goto',
'if',
'include',
'include_once',
'require',
'require_once',
'return',
'switch',
'throw',
'try',
'while',
'yield',
],
],
'braces' => true,
'cast_spaces' => true,
'class_attributes_separation' => ['elements' => ['const', 'method', 'property']],
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'compact_nullable_typehint' => true,
'concat_space' => ['spacing' => 'one'],
'constant_case' => true,
'declare_equal_normalize' => ['space' => 'none'],
'declare_strict_types' => true,
'dir_constant' => true,
'elseif' => true,
'encoding' => true,
'explicit_indirect_variable' => true,
'explicit_string_variable' => true,
'full_opening_tag' => true,
'fully_qualified_strict_types' => true,
'function_declaration' => true,
'global_namespace_import' => [
'import_classes' => true,
'import_constants' => true,
'import_functions' => true,
],
'header_comment' => ['header' => $header, 'separate' => 'none'],
'heredoc_to_nowdoc' => true,
'increment_style' => [
'style' => PhpCsFixer\Fixer\Operator\IncrementStyleFixer::STYLE_POST,
],
'indentation_type' => true,
'is_null' => true,
'line_ending' => true,
'list_syntax' => ['syntax' => 'short'],
'logical_operators' => true,
'lowercase_keywords' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'method_argument_space' => ['ensure_fully_multiline' => true],
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'multiline_whitespace_before_semicolons' => true,
'native_constant_invocation' => false,
'native_function_casing' => false,
'native_function_invocation' => false,
'native_function_type_declaration_casing' => true,
'new_with_braces' => false,
'no_alias_functions' => true,
'no_alternative_syntax' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_blank_lines_before_namespace' => true,
'no_closing_tag' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => true,
'no_homoglyph_names' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'print'],
'no_multiline_whitespace_around_double_arrow' => true,
'no_null_property_initialization' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_short_echo_tag' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => true,
'no_spaces_inside_parenthesis' => true,
'no_superfluous_elseif' => true,
'no_superfluous_phpdoc_tags' => [
'allow_mixed' => true,
],
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unneeded_final_method' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_on_property' => true,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'non_printable_character' => true,
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'ordered_class_elements' => [
'order' => [
'use_trait',
'constant_public',
'constant_protected',
'constant_private',
'property_public_static',
'property_protected_static',
'property_private_static',
'property_public',
'property_protected',
'property_private',
'method_public_static',
'construct',
'destruct',
'magic',
'phpunit',
'method_public',
'method_protected',
'method_private',
'method_protected_static',
'method_private_static',
],
],
'ordered_imports' => [
'imports_order' => [
PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST,
PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION,
PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS,
]
],
'ordered_interfaces' => [
'direction' => 'ascend',
'order' => 'alpha',
],
'phpdoc_add_missing_param_annotation' => false,
'phpdoc_align' => true,
'phpdoc_annotation_without_dot' => true,
'phpdoc_indent' => true,
'phpdoc_no_access' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => true,
'phpdoc_order' => true,
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_separation' => true,
'phpdoc_single_line_var_spacing' => true,
'phpdoc_summary' => true,
'phpdoc_to_comment' => true,
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => ['groups' => ['simple', 'meta']],
'phpdoc_types_order' => true,
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
'protected_to_private' => true,
'return_assignment' => true,
'return_type_declaration' => ['space_before' => 'none'],
'self_accessor' => true,
'self_static_accessor' => true,
'semicolon_after_instruction' => true,
'set_type_to_cast' => true,
'short_scalar_cast' => true,
'simple_to_complex_string_variable' => true,
'simplified_null_return' => false,
'single_blank_line_at_eof' => true,
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'single_quote' => true,
'standardize_not_equals' => true,
'strict_param' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'visibility_required' => [
'elements' => [
'const',
'method',
'property',
],
],
'void_return' => true,
'whitespace_after_comma_in_array' => true,
]);
php-text-template-2.0.4/.psalm/ 0000775 0000000 0000000 00000000000 13767676466 0016325 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/.psalm/baseline.xml 0000664 0000000 0000000 00000000157 13767676466 0020634 0 ustar 00root root 0000000 0000000
php-text-template-2.0.4/.psalm/config.xml 0000664 0000000 0000000 00000000753 13767676466 0020321 0 ustar 00root root 0000000 0000000
php-text-template-2.0.4/ChangeLog.md 0000664 0000000 0000000 00000002243 13767676466 0017305 0 ustar 00root root 0000000 0000000 # ChangeLog
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [2.0.4] - 2020-10-26
### Fixed
* `SebastianBergmann\Template\Exception` now correctly extends `\Throwable`
## [2.0.3] - 2020-09-28
### Changed
* Changed PHP version constraint in `composer.json` from `^7.3 || ^8.0` to `>=7.3`
## [2.0.2] - 2020-06-26
### Added
* This component is now supported on PHP 8
## [2.0.1] - 2020-06-15
### Changed
* Tests etc. are now ignored for archive exports
## [2.0.0] - 2020-02-07
### Changed
* The `Text_Template` class was renamed to `SebastianBergmann\Template\Template`
### Removed
* Removed support for PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, PHP 7.0, PHP 7.1, and PHP 7.2
[2.0.4]: https://github.com/sebastianbergmann/php-text-template/compare/2.0.3...2.0.4
[2.0.3]: https://github.com/sebastianbergmann/php-text-template/compare/2.0.2...2.0.3
[2.0.2]: https://github.com/sebastianbergmann/php-text-template/compare/2.0.1...2.0.2
[2.0.1]: https://github.com/sebastianbergmann/php-text-template/compare/2.0.0...2.0.1
[2.0.0]: https://github.com/sebastianbergmann/php-text-template/compare/1.2.1...2.0.0
php-text-template-2.0.4/LICENSE 0000664 0000000 0000000 00000003030 13767676466 0016134 0 ustar 00root root 0000000 0000000 phpunit/php-text-template
Copyright (c) 2009-2020, Sebastian Bergmann .
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of Sebastian Bergmann nor the names of his
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
php-text-template-2.0.4/README.md 0000664 0000000 0000000 00000000634 13767676466 0016415 0 ustar 00root root 0000000 0000000 # Text_Template
## Installation
You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
composer require phpunit/php-text-template
If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
composer require --dev phpunit/php-text-template
php-text-template-2.0.4/build.xml 0000664 0000000 0000000 00000002063 13767676466 0016755 0 ustar 00root root 0000000 0000000
php-text-template-2.0.4/composer.json 0000664 0000000 0000000 00000001674 13767676466 0017665 0 ustar 00root root 0000000 0000000 {
"name": "phpunit/php-text-template",
"description": "Simple template engine.",
"type": "library",
"keywords": [
"template"
],
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"license": "BSD-3-Clause",
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues"
},
"config": {
"platform": {
"php": "7.3.0"
},
"optimize-autoloader": true,
"sort-packages": true
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"autoload": {
"classmap": [
"src/"
]
},
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
}
}
php-text-template-2.0.4/phpunit.xml 0000664 0000000 0000000 00000001512 13767676466 0017343 0 ustar 00root root 0000000 0000000
tests
src
php-text-template-2.0.4/src/ 0000775 0000000 0000000 00000000000 13767676466 0015722 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/src/Template.php 0000664 0000000 0000000 00000004727 13767676466 0020220 0 ustar 00root root 0000000 0000000
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Template;
use function array_merge;
use function file_exists;
use function file_get_contents;
use function file_put_contents;
use function sprintf;
use function str_replace;
final class Template
{
/**
* @var string
*/
private $template = '';
/**
* @var string
*/
private $openDelimiter;
/**
* @var string
*/
private $closeDelimiter;
/**
* @var array
*/
private $values = [];
/**
* @throws InvalidArgumentException
*/
public function __construct(string $file = '', string $openDelimiter = '{', string $closeDelimiter = '}')
{
$this->setFile($file);
$this->openDelimiter = $openDelimiter;
$this->closeDelimiter = $closeDelimiter;
}
/**
* @throws InvalidArgumentException
*/
public function setFile(string $file): void
{
$distFile = $file . '.dist';
if (file_exists($file)) {
$this->template = file_get_contents($file);
} elseif (file_exists($distFile)) {
$this->template = file_get_contents($distFile);
} else {
throw new InvalidArgumentException(
sprintf(
'Failed to load template "%s"',
$file
)
);
}
}
public function setVar(array $values, bool $merge = true): void
{
if (!$merge || empty($this->values)) {
$this->values = $values;
} else {
$this->values = array_merge($this->values, $values);
}
}
public function render(): string
{
$keys = [];
foreach ($this->values as $key => $value) {
$keys[] = $this->openDelimiter . $key . $this->closeDelimiter;
}
return str_replace($keys, $this->values, $this->template);
}
/**
* @codeCoverageIgnore
*/
public function renderTo(string $target): void
{
if (!file_put_contents($target, $this->render())) {
throw new RuntimeException(
sprintf(
'Writing rendered result to "%s" failed',
$target
)
);
}
}
}
php-text-template-2.0.4/src/exceptions/ 0000775 0000000 0000000 00000000000 13767676466 0020103 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/src/exceptions/Exception.php 0000664 0000000 0000000 00000000560 13767676466 0022553 0 ustar 00root root 0000000 0000000
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Template;
use Throwable;
interface Exception extends Throwable
{
}
php-text-template-2.0.4/src/exceptions/InvalidArgumentException.php 0000664 0000000 0000000 00000000626 13767676466 0025570 0 ustar 00root root 0000000 0000000
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Template;
final class InvalidArgumentException extends \InvalidArgumentException implements Exception
{
}
php-text-template-2.0.4/src/exceptions/RuntimeException.php 0000664 0000000 0000000 00000000654 13767676466 0024123 0 ustar 00root root 0000000 0000000
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Template;
use InvalidArgumentException;
final class RuntimeException extends InvalidArgumentException implements Exception
{
}
php-text-template-2.0.4/tests/ 0000775 0000000 0000000 00000000000 13767676466 0016275 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/tests/TemplateTest.php 0000664 0000000 0000000 00000003307 13767676466 0021424 0 ustar 00root root 0000000 0000000
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Template;
use PHPUnit\Framework\TestCase;
/**
* @covers \SebastianBergmann\Template\Template
*/
final class TemplateTest extends TestCase
{
public function testRendersFromGivenTemplateFileToString(): void
{
$template = new Template(__DIR__ . '/_fixture/one.txt');
$template->setVar(
[
'foo' => 'baz',
'bar' => 'barbara',
]
);
$this->assertSame("baz barbara\n", $template->render());
}
public function testRendersFromFallbackTemplateFileToString(): void
{
$template = new Template(__DIR__ . '/_fixture/two.txt');
$template->setVar(
[
'foo' => 'baz',
'bar' => 'barbara',
]
);
$this->assertSame("baz barbara\n", $template->render());
}
public function testVariablesCanBeMerged(): void
{
$template = new Template(__DIR__ . '/_fixture/one.txt');
$template->setVar(
[
'foo' => 'baz',
]
);
$template->setVar(
[
'bar' => 'barbara',
]
);
$this->assertSame("baz barbara\n", $template->render());
}
public function testCannotRenderTemplateThatDoesNotExist(): void
{
$this->expectException(InvalidArgumentException::class);
new Template('does_not_exist.html');
}
}
php-text-template-2.0.4/tests/_fixture/ 0000775 0000000 0000000 00000000000 13767676466 0020122 5 ustar 00root root 0000000 0000000 php-text-template-2.0.4/tests/_fixture/one.txt 0000664 0000000 0000000 00000000014 13767676466 0021437 0 ustar 00root root 0000000 0000000 {foo} {bar}
php-text-template-2.0.4/tests/_fixture/two.txt.dist 0000664 0000000 0000000 00000000014 13767676466 0022431 0 ustar 00root root 0000000 0000000 {foo} {bar}