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_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_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" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
"psr-4": {
|
||||
"nulib\\": "php/src_base",
|
||||
"nulib\\ref\\": "php/src_ref",
|
||||
"nulib\\sys\\": "php/src_sys",
|
||||
"nulib\\php\\": "php/src_php",
|
||||
"nulib\\output\\": "php/src_output",
|
||||
"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
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
namespace nulib\sys;
|
||||
namespace nulib\php\content;
|
||||
|
||||
/**
|
||||
* Interface IContent: un objet capable de produire du contenu à afficher. le
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
namespace nulib\sys;
|
||||
namespace nulib\php\content;
|
||||
|
||||
/**
|
||||
* Interface IPrintable: un objet qui écrit du contenu sur la sortie standard
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
namespace nulib\sys;
|
||||
namespace nulib\php\content;
|
||||
|
||||
/**
|
||||
* Interface IStaticContent: comme {@link IContent} mais la liste retournée est
|
|
@ -1,7 +1,8 @@
|
|||
<?php
|
||||
namespace nulib\sys;
|
||||
namespace nulib\php\content;
|
||||
|
||||
use nulib\cl;
|
||||
use nulib\php\func;
|
||||
|
||||
/**
|
||||
* Class content: gestionnaire de contenu (statique ou dynamique)
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
namespace nulib\sys;
|
||||
namespace nulib\php;
|
||||
|
||||
use Closure;
|
||||
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
|
||||
namespace nulib\ref\sys;
|
||||
namespace nulib\ref\php;
|
||||
|
||||
class ref_func {
|
||||
const CALL_ALL_PARAMS_SCHEMA = [
|
|
@ -1,7 +1,8 @@
|
|||
<?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;
|
||||
|
||||
class contentTest extends TestCase {
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
namespace nulib\sys\impl;
|
||||
namespace nulib\php\content\impl;
|
||||
|
||||
use nulib\sys\IContent;
|
||||
use nulib\php\content\IContent;
|
||||
|
||||
class AContent implements IContent {
|
||||
function getContent(): iterable {
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
namespace nulib\sys\impl;
|
||||
namespace nulib\php\content\impl;
|
||||
|
||||
use nulib\sys\IPrintable;
|
||||
use nulib\php\content\IPrintable;
|
||||
|
||||
class APrintable implements IPrintable {
|
||||
function print(): void {
|
|
@ -1,7 +1,8 @@
|
|||
<?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 {
|
||||
function getContent(): iterable {
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
namespace nulib\sys\impl;
|
||||
namespace nulib\php\content\impl;
|
||||
|
||||
use nulib\sys\content;
|
||||
use nulib\sys\IStaticContent;
|
||||
use nulib\php\content\content;
|
||||
use nulib\php\content\IStaticContent;
|
||||
|
||||
class ATag implements IStaticContent {
|
||||
function __construct(string $tag, $contents=null) {
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
namespace nulib\sys\impl;
|
||||
namespace nulib\php\content\impl;
|
||||
|
||||
use nulib\php\content\impl\ATag;
|
||||
|
||||
class html {
|
||||
const H1 = [self::class, "h1"];
|
|
@ -12,7 +12,7 @@ namespace {
|
|||
function func_o1v($b=9, ...$c): array { return [$b, ...$c]; }
|
||||
}
|
||||
|
||||
namespace nulib\sys {
|
||||
namespace nulib\php {
|
||||
use nulib\tests\TestCase;
|
||||
|
||||
class funcTest extends TestCase {
|
Loading…
Reference in New Issue