Browse Source

Rector sur Textwheel avec config PHP 7.4

pull/4840/head
Matthieu Marcillaud 11 months ago
parent
commit
df7852b39c
  1. 24
      engine/textwheel.php
  2. 6
      engine/textwheelruleset.php
  3. 4
      inc/autoliens.php
  4. 43
      inc/lien.php
  5. 10
      inc/notes.php
  6. 18
      inc/texte.php
  7. 4
      tests/simpletest/nettoyer_raccourcis_typo.php
  8. 2
      typographie/en.php
  9. 2
      typographie/fr.php
  10. 1
      wheels/spip/spip-listes.php
  11. 2
      wheels/spip/spip-paragrapher.php

24
engine/textwheel.php

@ -22,7 +22,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
require_once dirname(__FILE__) . '/textwheelruleset.php';
require_once __DIR__ . '/textwheelruleset.php';
class TextWheel {
protected $ruleset;
@ -70,7 +70,7 @@ class TextWheel {
return $t;
}
private function export($x) {
private static function export($x) {
return addcslashes(var_export($x, true), "\n\r\t");
}
@ -218,7 +218,9 @@ class TextWheel {
// DEPRECATED : rule->create_replace, on ne peut rien faire de mieux ici
// mais c'est voue a disparaitre
$compile = $rule->replace . '($t)';
$rule->replace = create_function('$m', $rule->replace);
$rule->replace = function ($m) use ($rule) {
eval($rule->replace);
};
$this->compiled[$this->ruleCompiledEntryName($rule->replace)] = $compile;
$rule->create_replace = false;
$rule->is_callback = true;
@ -228,16 +230,12 @@ class TextWheel {
TextWheel::$subwheel[] = $this->createSubWheel($rule->replace);
$cname = 'compiled_' . str_replace('-', '_', $rule->name ?? '') . '_' . substr(md5(spl_object_hash($rule)), 0, 7);
if ($rule->type == 'all' or $rule->type == 'str' or $rule->type == 'split' or !isset($rule->match)) {
$rule->replace = function ($m) use ($rule_number) {
return TextWheel::getSubWheel($rule_number)->text($m);
};
$rule->replace = fn($m) => TextWheel::getSubWheel($rule_number)->text($m);
$rule->compilereplace = "'$cname'";
}
else {
$pick_match = intval($rule->pick_match);
$rule->replace = function ($m) use ($rule_number, $pick_match) {
return TextWheel::getSubWheel($rule_number)->text($m[$pick_match]);
};
$rule->replace = fn($m) => TextWheel::getSubWheel($rule_number)->text($m[$pick_match]);
$rule->compilereplace = 'function ($m) { return ' . $cname . '($m[' . $pick_match . ']) }';
}
$rule->is_wheel = false;
@ -319,11 +317,11 @@ class TextWheel {
$this->initRule($rule);
}
if (isset($rule->if_str) and strpos($t, $rule->if_str) === false) {
if (isset($rule->if_str) and strpos($t, (string) $rule->if_str) === false) {
return;
}
if (isset($rule->if_stri) and stripos($t, $rule->if_stri) === false) {
if (isset($rule->if_stri) and stripos($t, (string) $rule->if_stri) === false) {
return;
}
@ -410,7 +408,7 @@ class TextWheel {
* @param int $count
*/
protected static function replace_str_cb(&$match, &$replace, &$t, &$count) {
if (strpos($t, $match) !== false) {
if (strpos($t, (string) $match) !== false) {
if (count($b = explode($match, $t)) > 1) {
$t = join($replace($match), $b);
}
@ -642,7 +640,7 @@ class TextWheelDebug extends TextWheel {
*/
if (!function_exists('stripos')) {
function stripos($haystack, $needle) {
return strpos($haystack, stristr($haystack, $needle));
return strpos($haystack, (string) stristr($haystack, (string) $needle));
}
}

6
engine/textwheelruleset.php

@ -28,7 +28,7 @@ if (!defined('_WHEELS_FORMAT_DEFAUT')) {
define('_WHEELS_FORMAT_DEFAUT', 'json');
}
require_once dirname(__FILE__) . '/textwheelrule.php';
require_once __DIR__ . '/textwheelrule.php';
abstract class TextWheelDataSet {
# list of data
@ -57,7 +57,7 @@ abstract class TextWheelDataSet {
// textwheel default path ?
if (!$default_path) {
$default_path = dirname(__FILE__) . '/../wheels/';
$default_path = __DIR__ . '/../wheels/';
}
if (file_exists($f = $default_path . $file)) {
return $f;
@ -97,7 +97,7 @@ abstract class TextWheelDataSet {
defined('_YAML_EVAL_PHP') || define('_YAML_EVAL_PHP', false);
if ($format == 'json') {
$dataset = json_decode(file_get_contents($file), true);
$dataset = json_decode(file_get_contents($file), true, 512, JSON_THROW_ON_ERROR);
} elseif (defined('_DIR_PLUGIN_YAML')) {
include_spip('inc/yaml');
$dataset = yaml_decode(file_get_contents($file));

4
inc/autoliens.php

@ -15,10 +15,10 @@ function tw_autoliens($t) {
// callback pour la fonction autoliens()
// https://code.spip.net/@autoliens_callback
function tw_traiter_autoliens($r) {
if (count($r) < 2) {
if ((is_countable($r) ? count($r) : 0) < 2) {
return reset($r);
}
list($tout, $l) = $r;
[$tout, $l] = $r;
if (!$l) {
return $tout;
}

43
inc/lien.php

@ -44,6 +44,7 @@ function inc_lien_dist(
$connect = '',
$env = []
) {
$mime = null;
static $u = null;
if (!$u) {
$u = url_de_base();
@ -59,7 +60,7 @@ function inc_lien_dist(
$hlang
and $match = typer_raccourci($lien)
) {
@list($type, , $id, , $args, , $ancre) = $match;
@[$type, , $id, , $args, , $ancre] = $match;
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table(table_objet($type, $connect), $connect);
if (
@ -95,7 +96,7 @@ function inc_lien_dist(
if (!$class and isset($lien['class'])) {
$class = $lien['class'];
}
$lang = isset($lien['lang']) ? $lien['lang'] : '';
$lang = $lien['lang'] ?? '';
$mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : '';
$lien = $lien['url'];
}
@ -147,7 +148,7 @@ function inc_lien_dist(
$lang_objet_prev = '';
if ($hlang and $hlang !== $GLOBALS['spip_lang']) {
$lang_objet_prev = isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : null;
$lang_objet_prev = $GLOBALS['lang_objet'] ?? null;
$GLOBALS['lang_objet'] = $hlang;
}
@ -159,7 +160,7 @@ function inc_lien_dist(
'"',
'&quot;',
$lien
) . "\"$class$lang$title$rel" . (isset($mime) ? $mime : '') . ">$texte</a>";
) . "\"$class$lang$title$rel" . ($mime ?? '') . ">$texte</a>";
if ($lang_objet_prev !== '') {
if ($lang_objet_prev) {
$GLOBALS['lang_objet'] = $lang_objet_prev;
@ -326,7 +327,7 @@ function expanser_un_lien($reg, $quoi = 'echappe', $env = null) {
$sources[$k] = $reg[0];
#$titre=$reg[1];
list($titre, $bulle, $hlang) = traiter_raccourci_lien_atts($reg[1]);
[$titre, $bulle, $hlang] = traiter_raccourci_lien_atts($reg[1]);
$r = end($reg);
// la mise en lien automatique est passee par la a tort !
// corrigeons pour eviter d'avoir un <a...> dans un href...
@ -343,10 +344,10 @@ function expanser_un_lien($reg, $quoi = 'echappe', $env = null) {
return $inserts[$k++];
break;
case 'reinsert':
if (count($inserts)) {
if (is_countable($inserts) ? count($inserts) : 0) {
$reg = str_replace($inserts, $regs, $reg);
}
list($inserts, $sources, $regs, $connect, $k) = array_pop($pile);
[$inserts, $sources, $regs, $connect, $k] = array_pop($pile);
return $reg;
break;
@ -384,18 +385,18 @@ function nettoyer_raccourcis_typo($texte, $connect = '') {
if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {
include_spip('inc/texte');
foreach ($regs as $reg) {
list($titre, , ) = traiter_raccourci_lien_atts($reg[1]);
[$titre, , ] = traiter_raccourci_lien_atts($reg[1]);
if (!$titre) {
$match = typer_raccourci($reg[count($reg) - 1]);
$match = typer_raccourci($reg[(is_countable($reg) ? count($reg) : 0) - 1]);
if (!isset($match[0])) {
$match[0] = '';
}
@list($type, , $id, , , , ) = $match;
@[$type, , $id, , , , ] = $match;
if ($type) {
$url = generer_url_entite($id, $type, '', '', true);
if (is_array($url)) {
list($type, $id) = $url;
[$type, $id] = $url;
}
$titre = traiter_raccourci_titre($id, $type, $connect);
}
@ -541,8 +542,8 @@ function virtuel_redirige($virtuel, $url = false) {
// https://code.spip.net/@calculer_url
function calculer_url($ref, $texte = '', $pour = 'url', $connect = '', $echappe_typo = true) {
$r = traiter_lien_implicite($ref, $texte, $pour, $connect, $echappe_typo);
$r = ($r ? $r : traiter_lien_explicite($ref, $texte, $pour, $connect, $echappe_typo));
$r = traiter_lien_implicite($ref, $texte, $pour, $connect);
$r = ($r ?: traiter_lien_explicite($ref, $texte, $pour, $connect, $echappe_typo));
return $r;
}
@ -625,12 +626,12 @@ function liens_implicite_glose_dist($texte, $id, $type, $args, $ancre, $connect
* @return array|bool|string
*/
function traiter_lien_implicite($ref, $texte = '', $pour = 'url', $connect = '') {
$cible = ($connect ? $connect : (isset($GLOBALS['lien_implicite_cible_public']) ? $GLOBALS['lien_implicite_cible_public'] : null));
$cible = ($connect ?: $GLOBALS['lien_implicite_cible_public'] ?? null);
if (!($match = typer_raccourci($ref))) {
return false;
}
@list($type, , $id, , $args, , $ancre) = $match;
@[$type, , $id, , $args, , $ancre] = $match;
# attention dans le cas des sites le lien doit pointer non pas sur
# la page locale du site, mais directement sur le site lui-meme
@ -648,7 +649,7 @@ function traiter_lien_implicite($ref, $texte = '', $pour = 'url', $connect = '')
}
if (is_array($url)) {
@list($type, $id) = $url;
@[$type, $id] = $url;
$url = generer_url_entite($id, $type, $args, $ancre, $cible);
}
@ -819,7 +820,7 @@ function traiter_modeles($texte, $doublons = false, $echap = '', $connect = '',
// Recuperer l'appel complet (y compris un eventuel lien)
foreach ($matches as $match) {
$a = strpos($texte, $match[0]);
$a = strpos($texte, (string) $match[0]);
preg_match(_RACCOURCI_MODELE_DEBUT, substr($texte, $a), $regs);
// s'assurer qu'il y a toujours un 5e arg, eventuellement vide
@ -827,7 +828,7 @@ function traiter_modeles($texte, $doublons = false, $echap = '', $connect = '',
$regs[] = '';
}
list(, $mod, $type, $id, $params, $fin) = $regs;
[, $mod, $type, $id, $params, $fin] = $regs;
if (
$fin
@ -900,7 +901,7 @@ function traiter_modeles($texte, $doublons = false, $echap = '', $connect = '',
// hack pour tout l'espace prive
if (((!_DIR_RESTREINT) or ($doublons)) and ($id)) {
foreach ($doublons ? $doublons : ['documents' => ['doc', 'emb', 'img']] as $quoi => $modeles) {
foreach ($doublons ?: ['documents' => ['doc', 'emb', 'img']] as $quoi => $modeles) {
if (in_array(strtolower($type), $modeles)) {
$GLOBALS["doublons_{$quoi}_inclus"][] = $id;
}
@ -960,7 +961,7 @@ function traiter_raccourci_glossaire($texte) {
$_n = intval($m[2]);
$gloss = $m[1] ? ('#' . $m[1]) : '';
$t = $r[1] . $r[2] . $r[5];
list($t, $bulle, $hlang) = traiter_raccourci_lien_atts($t);
[$t, $bulle, $hlang] = traiter_raccourci_lien_atts($t);
if ($bulle === false) {
$bulle = $m[1];
@ -981,7 +982,7 @@ function glossaire_std($terme) {
static $pcre = null;
if ($pcre === null) {
$pcre = isset($GLOBALS['meta']['pcre_u']) ? $GLOBALS['meta']['pcre_u'] : '';
$pcre = $GLOBALS['meta']['pcre_u'] ?? '';
if (strpos($url_glossaire_externe, '%s') === false) {
$url_glossaire_externe .= '%s';

10
inc/notes.php

@ -101,7 +101,7 @@ function inc_notes_dist($arg, $operation = 'traiter', $ignorer_autobr = false) {
$next_marqueur--;
}
// on redepile tout suite a une fin d'inclusion ou d'un affichage des notes
list($les_notes, $compt_note, $notes_vues, $marqueur) = array_pop($pile);
[$les_notes, $compt_note, $notes_vues, $marqueur] = array_pop($pile);
#$les_notes .= $prev_notes;
// si pas de marqueur attribue, on le fait
if (!$marqueur) {
@ -118,7 +118,7 @@ function inc_notes_dist($arg, $operation = 'traiter', $ignorer_autobr = false) {
break;
case 'restaurer_etat':
if ($arg and is_array($arg)) { // si qqchose a restaurer
list($les_notes, $compt_note, $notes_vues, $marqueur, $next_marqueur) = $arg;
[$les_notes, $compt_note, $notes_vues, $marqueur, $next_marqueur] = $arg;
}
break;
case 'contexter_cache':
@ -157,7 +157,7 @@ function traiter_raccourci_notes($letexte, $marqueur_notes) {
$mn = !$marqueur_notes ? '' : ($marqueur_notes . '-');
$mes_notes = [];
foreach ($m as $r) {
list($note_source, $note_all, $ref, $nom, $note_texte) = $r;
[$note_source, $note_all, $ref, $nom, $note_texte] = $r;
// reperer une note nommee, i.e. entre chevrons
// On leve la Confusion avec une balise en regardant
@ -198,7 +198,7 @@ function traiter_raccourci_notes($letexte, $marqueur_notes) {
$nom = _NOTES_OUVRE_REF . "<a href='#nb$ancre' class='spip_note' rel='appendix'$title$att>$nom</a>" . _NOTES_FERME_REF;
}
$pos = strpos($letexte, $note_source);
$pos = strpos($letexte, (string) $note_source);
$letexte = rtrim(substr($letexte, 0, $pos), ' ')
. code_echappement($nom)
. substr($letexte, $pos + strlen($note_source));
@ -214,7 +214,7 @@ function traiter_les_notes($notes, $ignorer_autobr) {
if ($notes) {
$title = _T('info_notes');
foreach ($notes as $r) {
list($ancre, $nom, $texte) = $r;
[$ancre, $nom, $texte] = $r;
$atts = " href='#nh$ancre' class='spip_note' title='$title $ancre' rev='appendix'";
$mes_notes .= "\n\n"
. "<div id='nb$ancre'><p" . ($GLOBALS['class_spip'] ? " class='spip_note'" : '') . '>'

18
inc/texte.php

@ -247,7 +247,7 @@ function typo($letexte, $echapper = true, $connect = null, $env = []) {
// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
// cf. inc/lien
$letexte = traiter_modeles($mem = $letexte, false, $echapper ? $echapper : '', $connect, null, $env);
$letexte = traiter_modeles($mem = $letexte, false, $echapper ?: '', $connect, null, $env);
if (!$echapper and $letexte != $mem) {
$echapper = '';
}
@ -333,7 +333,7 @@ function corriger_typo($t, $lang = '') {
$em = ($em !== $t);
// Charger & appliquer les fonctions de typographie
$idxl = "$lang:" . (isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : $GLOBALS['spip_lang']);
$idxl = "$lang:" . ($GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang']);
if (!isset($typographie[$idxl])) {
$typographie[$idxl] = charger_fonction(lang_typo($lang), 'typographie');
}
@ -541,7 +541,7 @@ function traiter_tableau($bloc) {
$attr .= " rowspan='$x'";
}
$b = ($c == 0 and isset($hl[$l])) ? 'th' : 'td';
$h = (isset($hc[$c]) ? $hc[$c] : '') . ' ' . (($b == 'td' and isset($hl[$l])) ? $hl[$l] : '');
$h = ($hc[$c] ?? '') . ' ' . (($b == 'td' and isset($hl[$l])) ? $hl[$l] : '');
if ($h = trim($h)) {
$attr .= " headers='$h'";
}
@ -658,11 +658,11 @@ function personnaliser_raccourcis(&$ruleset) {
return implode(
'/',
[
isset($GLOBALS['debut_intertitre']) ? $GLOBALS['debut_intertitre'] : '',
isset($GLOBALS['debut_gras']) ? $GLOBALS['debut_gras'] : '',
isset($GLOBALS['debut_italique']) ? $GLOBALS['debut_italique'] : '',
isset($GLOBALS['ligne_horizontale']) ? $GLOBALS['ligne_horizontale'] : '',
isset($GLOBALS['toujours_paragrapher']) ? $GLOBALS['toujours_paragrapher'] : 1,
$GLOBALS['debut_intertitre'] ?? '',
$GLOBALS['debut_gras'] ?? '',
$GLOBALS['debut_italique'] ?? '',
$GLOBALS['ligne_horizontale'] ?? '',
$GLOBALS['toujours_paragrapher'] ?? 1,
]
);
}
@ -717,7 +717,7 @@ function traiter_raccourcis($t, $show_autobr = false) {
}
// Gerer les notes (ne passe pas dans le pipeline)
list($t, $mes_notes) = $notes($t);
[$t, $mes_notes] = $notes($t);
try {
$t = $wheel[$key]->text($t);

4
tests/simpletest/nettoyer_raccourcis_typo.php

@ -23,7 +23,7 @@ class Test_nettoyer_raccourcis_typo extends SpipTest {
protected function _printTest(array $data, $nettoyer, $couper) {
$titre = isset($data['titre']) ? $data['titre'] : '';
$titre = $data['titre'] ?? '';
if (!$this->assertEqual($nettoyer, $data['nettoyer'])) {
$this->reporter->paintFormattedMessage("Nettoyer_raccourcis_typo | $titre. Texte -> Attendu -> Reçu");
$this->reporter->paintFormattedMessage($data['texte']);
@ -194,4 +194,4 @@ Après
'nettoyer' => 'Lien et note ratée [[note lien] ]',
]]);
}
}
}

2
typographie/en.php

@ -24,7 +24,7 @@ function typographie_en($t) {
'&nbsp;' => '~',
"'" => '&#8217;'
];
$charset = isset($GLOBALS['meta']['charset']) ? $GLOBALS['meta']['charset'] : '';
$charset = $GLOBALS['meta']['charset'] ?? '';
switch ($charset) {
case 'utf-8':
$trans["\xc2\xa0"] = '~';

2
typographie/fr.php

@ -30,7 +30,7 @@ function typographie_fr($t) {
'&deg;' => '&#176;',
"'" => '&#8217;'
];
$charset = isset($GLOBALS['meta']['charset']) ? $GLOBALS['meta']['charset'] : '';
$charset = $GLOBALS['meta']['charset'] ?? '';
switch ($charset) {
case 'utf-8':
$trans["\xc2\xa0"] = '~';

1
wheels/spip/spip-listes.php

@ -16,6 +16,7 @@ function tw_liste_close($t) {
}
function tw_liste_item($t, $quoi = 'item') {
$nouv_type = null;
global $class_spip, $class_spip_plus;
static $niveau;
static $pile_li;

2
wheels/spip/spip-paragrapher.php

@ -60,7 +60,7 @@ function fermer_para_mano($t) {
$r
)
) {
$pos = strpos($pi, $r[0]);
$pos = strpos($pi, (string) $r[0]);
$t .= $cut . str_replace(
"\n",
_AUTOBR . "\n",

Loading…
Cancel
Save