modifs.mineures sans commentaires
This commit is contained in:
parent
48d2c4aabf
commit
2964153e54
|
@ -7,7 +7,7 @@
|
||||||
<sourceFolder url="file://$MODULE_DIR$/php/src_output" isTestSource="false" packagePrefix="nulib\output\" />
|
<sourceFolder url="file://$MODULE_DIR$/php/src_output" isTestSource="false" packagePrefix="nulib\output\" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/php/src_web" isTestSource="false" packagePrefix="nulib\web\" />
|
<sourceFolder url="file://$MODULE_DIR$/php/src_web" isTestSource="false" packagePrefix="nulib\web\" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/php/src_ref" isTestSource="false" packagePrefix="nulib\ref\" />
|
<sourceFolder url="file://$MODULE_DIR$/php/src_ref" isTestSource="false" packagePrefix="nulib\ref\" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/php/src_sys" isTestSource="false" packagePrefix="nulib\sys\" />
|
<sourceFolder url="file://$MODULE_DIR$/php/src_php" isTestSource="false" packagePrefix="nulib\php\" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"nulib\\": "php/src_base",
|
"nulib\\": "php/src_base",
|
||||||
"nulib\\ref\\": "php/src_ref",
|
"nulib\\ref\\": "php/src_ref",
|
||||||
"nulib\\sys\\": "php/src_sys",
|
"nulib\\php\\": "php/src_php",
|
||||||
"nulib\\output\\": "php/src_output",
|
"nulib\\output\\": "php/src_output",
|
||||||
"nulib\\web\\": "php/src_web"
|
"nulib\\web\\": "php/src_web"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
namespace nulib\php;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface ICloseable: un objet que l'on peut fermer
|
||||||
|
*/
|
||||||
|
interface ICloseable {
|
||||||
|
/** fermer l'objet et libérer les resources */
|
||||||
|
function close(): void;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
# nulib\sys
|
# nulib\php
|
||||||
|
|
||||||
Ce package contient des services généraux spécifiques à PHP
|
Ce package contient des services généraux spécifiques à PHP
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php\content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface IContent: un objet capable de produire du contenu à afficher. le
|
* Interface IContent: un objet capable de produire du contenu à afficher. le
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php\content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface IPrintable: un objet qui écrit du contenu sur la sortie standard
|
* Interface IPrintable: un objet qui écrit du contenu sur la sortie standard
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php\content;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface IStaticContent: comme {@link IContent} mais la liste retournée est
|
* Interface IStaticContent: comme {@link IContent} mais la liste retournée est
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php\content;
|
||||||
|
|
||||||
use nulib\cl;
|
use nulib\cl;
|
||||||
|
use nulib\php\func;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class content: gestionnaire de contenu (statique ou dynamique)
|
* Class content: gestionnaire de contenu (statique ou dynamique)
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use nulib\cl;
|
use nulib\cl;
|
|
@ -0,0 +1,148 @@
|
||||||
|
<?php
|
||||||
|
namespace nulib\php\iter;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Iterator;
|
||||||
|
use nulib\os\EOFException;
|
||||||
|
use nulib\php\ICloseable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AbstractIterator: implémentation de base d'un itérateur
|
||||||
|
*/
|
||||||
|
abstract class AbstractIterator implements Iterator, ICloseable {
|
||||||
|
/**
|
||||||
|
* initialiser les ressources nécessaires à l'itération.
|
||||||
|
*
|
||||||
|
* les exceptions lancées par cette méthode sont ignorées.
|
||||||
|
*/
|
||||||
|
protected function _setup(): void {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lancer un traitement avant de commencer l'itération.
|
||||||
|
*
|
||||||
|
* cette méthode est appelée après {@link _setup()} et l'objet est garanti
|
||||||
|
* d'être dans un état valide.
|
||||||
|
*
|
||||||
|
* cette méthode est prévue pour être surchargée par l'utilisateur, mais il
|
||||||
|
* doit gérer lui-même les exceptions éventuelles.
|
||||||
|
*/
|
||||||
|
protected function beforeIter() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retourner le prochain élément. lancer l'exception {@link EOFException} pour
|
||||||
|
* indiquer que plus aucun élément n'est disponible
|
||||||
|
*
|
||||||
|
* le cas échéant, initialiser $key
|
||||||
|
*
|
||||||
|
* @throws EOFException
|
||||||
|
*/
|
||||||
|
abstract protected function _next(&$key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* modifier l'élement retourné par {@link _next()} avant de le retourner.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* cette méthode est prévue pour être surchargée par l'utilisateur, mais il
|
||||||
|
* doit gérer lui-même les exceptions éventuelles.
|
||||||
|
*/
|
||||||
|
protected function cook(&$item) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lancer un traitement avant de terminer l'itération et de libérer les
|
||||||
|
* resources
|
||||||
|
*
|
||||||
|
* cette méthode est appelée avant {@link _teardown()} et l'objet est garanti
|
||||||
|
* d'être dans un état valide.
|
||||||
|
*
|
||||||
|
* cette méthode est prévue pour être surchargée par l'utilisateur, mais il
|
||||||
|
* doit gérer lui-même les exceptions éventuelles.
|
||||||
|
*/
|
||||||
|
protected function beforeClose(): void {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* libérer les ressources allouées.
|
||||||
|
*
|
||||||
|
* les exceptions lancées par cette méthode sont ignorées.
|
||||||
|
*/
|
||||||
|
protected function _teardown(): void {}
|
||||||
|
|
||||||
|
function close(): void {
|
||||||
|
$this->rewind();
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################################################################
|
||||||
|
# Implémentation par défaut
|
||||||
|
|
||||||
|
private $setup = false;
|
||||||
|
private $valid = false;
|
||||||
|
private $toredown = true;
|
||||||
|
|
||||||
|
private $index = 0;
|
||||||
|
protected $key;
|
||||||
|
protected $item = null;
|
||||||
|
|
||||||
|
function key() {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
function current() {
|
||||||
|
return $this->item;
|
||||||
|
}
|
||||||
|
|
||||||
|
function next(): void {
|
||||||
|
if ($this->toredown) return;
|
||||||
|
$this->valid = false;
|
||||||
|
try {
|
||||||
|
$item = $this->_next($key);
|
||||||
|
} catch (EOFException $e) {
|
||||||
|
$this->beforeClose();
|
||||||
|
try {
|
||||||
|
$this->_teardown();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
}
|
||||||
|
$this->toredown = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->cook($item);
|
||||||
|
$this->item = $item;
|
||||||
|
if ($key !== null) {
|
||||||
|
$this->key = $key;
|
||||||
|
} else {
|
||||||
|
$this->index++;
|
||||||
|
$this->key = $this->index;
|
||||||
|
}
|
||||||
|
$this->valid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rewind(): void {
|
||||||
|
if ($this->setup) {
|
||||||
|
if (!$this->toredown) {
|
||||||
|
$this->beforeClose();
|
||||||
|
try {
|
||||||
|
$this->_teardown();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->setup = false;
|
||||||
|
$this->valid = false;
|
||||||
|
$this->toredown = true;
|
||||||
|
$this->index = 0;
|
||||||
|
$this->key = null;
|
||||||
|
$this->item = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function valid(): bool {
|
||||||
|
if (!$this->setup) {
|
||||||
|
try {
|
||||||
|
$this->_setup();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
}
|
||||||
|
$this->setup = true;
|
||||||
|
$this->toredown = false;
|
||||||
|
$this->beforeIter();
|
||||||
|
$this->next();
|
||||||
|
}
|
||||||
|
return $this->valid;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
namespace nulib\php\json;
|
||||||
|
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
|
class JsonException extends RuntimeException {
|
||||||
|
static final function json_last_error(?string $prefix=null): ?self {
|
||||||
|
$json_last_error = json_last_error();
|
||||||
|
if ($json_last_error === JSON_ERROR_NONE) return null;
|
||||||
|
$message = json_last_error_msg()." ($json_last_error)";
|
||||||
|
if ($prefix) $message = "$prefix: $message";
|
||||||
|
return new static($message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static final function ensure_json_value($value, ?string $prefix=null) {
|
||||||
|
$exception = self::json_last_error($prefix);
|
||||||
|
if ($exception === null) return $value;
|
||||||
|
else throw $exception;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\ref\sys;
|
namespace nulib\ref\php;
|
||||||
|
|
||||||
class ref_func {
|
class ref_func {
|
||||||
const CALL_ALL_PARAMS_SCHEMA = [
|
const CALL_ALL_PARAMS_SCHEMA = [
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys;
|
namespace nulib\php\content;
|
||||||
|
|
||||||
use nulib\sys\impl\html;
|
use nulib\php\content\content;
|
||||||
|
use nulib\php\content\impl\html;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class contentTest extends TestCase {
|
class contentTest extends TestCase {
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys\impl;
|
namespace nulib\php\content\impl;
|
||||||
|
|
||||||
use nulib\sys\IContent;
|
use nulib\php\content\IContent;
|
||||||
|
|
||||||
class AContent implements IContent {
|
class AContent implements IContent {
|
||||||
function getContent(): iterable {
|
function getContent(): iterable {
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys\impl;
|
namespace nulib\php\content\impl;
|
||||||
|
|
||||||
use nulib\sys\IPrintable;
|
use nulib\php\content\IPrintable;
|
||||||
|
|
||||||
class APrintable implements IPrintable {
|
class APrintable implements IPrintable {
|
||||||
function print(): void {
|
function print(): void {
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys\impl;
|
namespace nulib\php\content\impl;
|
||||||
|
|
||||||
use nulib\sys\IStaticContent;
|
use nulib\php\content\IStaticContent;
|
||||||
|
use nulib\php\content\impl\html;
|
||||||
|
|
||||||
class AStaticContent implements IStaticContent {
|
class AStaticContent implements IStaticContent {
|
||||||
function getContent(): iterable {
|
function getContent(): iterable {
|
|
@ -1,8 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys\impl;
|
namespace nulib\php\content\impl;
|
||||||
|
|
||||||
use nulib\sys\content;
|
use nulib\php\content\content;
|
||||||
use nulib\sys\IStaticContent;
|
use nulib\php\content\IStaticContent;
|
||||||
|
|
||||||
class ATag implements IStaticContent {
|
class ATag implements IStaticContent {
|
||||||
function __construct(string $tag, $contents=null) {
|
function __construct(string $tag, $contents=null) {
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nulib\sys\impl;
|
namespace nulib\php\content\impl;
|
||||||
|
|
||||||
|
use nulib\php\content\impl\ATag;
|
||||||
|
|
||||||
class html {
|
class html {
|
||||||
const H1 = [self::class, "h1"];
|
const H1 = [self::class, "h1"];
|
|
@ -12,7 +12,7 @@ namespace {
|
||||||
function func_o1v($b=9, ...$c): array { return [$b, ...$c]; }
|
function func_o1v($b=9, ...$c): array { return [$b, ...$c]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace nulib\sys {
|
namespace nulib\php {
|
||||||
use nulib\tests\TestCase;
|
use nulib\tests\TestCase;
|
||||||
|
|
||||||
class funcTest extends TestCase {
|
class funcTest extends TestCase {
|
Loading…
Reference in New Issue