Browse Source

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

svn/root/tags/plugins/porte_plume/1.15.11
cedric@yterium.com 7 years ago
parent
commit
71ed277b48
  1. 9
      action/porte_plume_previsu.php
  2. 562
      barre_outils/edition.php
  3. 40
      barre_outils/forum.php
  4. 281
      porte_plume_fonctions.php
  5. 14
      porte_plume_ieconfig.php
  6. 91
      porte_plume_pipelines.php
  7. 28
      porte_plume_start.js_fonctions.php
  8. 11
      prive/porte_plume_preview_fonctions.php
  9. 190
      tests/barre_outil_markitup.php
  10. 5
      tests/lanceur_spip.php

9
action/porte_plume_previsu.php

@ -1,13 +1,15 @@
<?php
/**
* Gestion de l'action porte_plume_previsu
*
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package SPIP\PortePlume\Actions
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
* Action affichant la prévisualisation de porte plume
@ -28,8 +30,9 @@ function action_porte_plume_previsu_dist() {
// mais il faut avoir le droit de previsualiser
// (par defaut le droit d'aller dans ecrire/)
if (!autoriser('previsualiser','porteplume'))
if (!autoriser('previsualiser', 'porteplume')) {
$contexte = array();
}
echo recuperer_fond('prive/porte_plume_preview', $contexte);
}

562
barre_outils/edition.php

@ -1,12 +1,14 @@
<?php
/**
* Déclaration de la barre d'outil d'édition de SPIP
*
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package SPIP\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
@ -14,102 +16,102 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
*
* @return Barre_outils La barre d'outil
*/
function barre_outils_edition(){
function barre_outils_edition() {
$set = new Barre_outils(array(
'nameSpace' => 'edition',
'nameSpace' => 'edition',
#'previewAutoRefresh'=> true,
#'previewParserPath' => url_absolue(generer_url_public('preview')),
'onShiftEnter' => array('keepDefault'=>false, 'replaceWith'=>"\n_ "),
'onCtrlEnter' => array('keepDefault'=>false, 'replaceWith'=>"\n\n"),
'onShiftEnter' => array('keepDefault' => false, 'replaceWith' => "\n_ "),
'onCtrlEnter' => array('keepDefault' => false, 'replaceWith' => "\n\n"),
// garder les listes si on appuie sur entree
'onEnter' => array('keepDefault'=>false, 'selectionType'=>'return', 'replaceWith'=>"\n"),
'onEnter' => array('keepDefault' => false, 'selectionType' => 'return', 'replaceWith' => "\n"),
// Utile quand on saisi du code, mais pas accessible !
#'onTab' => array('keepDefault'=>false, 'replaceWith'=>"\t"),
'markupSet' => array(
'markupSet' => array(
// H1 - {{{
array(
"id" => 'header1',
"name" => _T('barreoutils:barre_intertitre'),
"key" => "H",
"className" => "outil_header1",
"openWith" => "\n{{{",
"id" => 'header1',
"name" => _T('barreoutils:barre_intertitre'),
"key" => "H",
"className" => "outil_header1",
"openWith" => "\n{{{",
"closeWith" => "}}}\n",
"display" => true,
"display" => true,
"selectionType" => "line",
),
// Bold - {{
array(
"id" => 'bold',
"name" => _T('barreoutils:barre_gras'),
"key" => "B",
"className" => "outil_bold",
"id" => 'bold',
"name" => _T('barreoutils:barre_gras'),
"key" => "B",
"className" => "outil_bold",
"replaceWith" => "function(h){ return espace_si_accolade(h, '{{', '}}');}",
//"openWith" => "{{",
//"closeWith" => "}}",
"display" => true,
"display" => true,
"selectionType" => "word",
),
// Italic - {
array(
"id" => 'italic',
"name" => _T('barreoutils:barre_italic'),
"key" => "I",
"className" => "outil_italic",
"id" => 'italic',
"name" => _T('barreoutils:barre_italic'),
"key" => "I",
"className" => "outil_italic",
"replaceWith" => "function(h){ return espace_si_accolade(h, '{', '}');}",
//"openWith" => "{",
//"closeWith" => "}",
"display" => true,
"display" => true,
"selectionType" => "word",
),
// montrer une suppression
array(
"id" => 'stroke_through',
"name" => _T('barreoutils:barre_barre'), // :-)
"className" => "outil_stroke_through",
"openWith" => "<del>",
"id" => 'stroke_through',
"name" => _T('barreoutils:barre_barre'), // :-)
"className" => "outil_stroke_through",
"openWith" => "<del>",
"closeWith" => "</del>",
"display" => true,
"display" => true,
"selectionType" => "word",
),
// listes -*
array(
"id" => 'liste_ul',
"name" => _T('barreoutils:barre_liste_ul'),
"className" => "outil_liste_ul",
"replaceWith" => "function(h){ return outil_liste(h, '*');}",
"display" => true,
"id" => 'liste_ul',
"name" => _T('barreoutils:barre_liste_ul'),
"className" => "outil_liste_ul",
"replaceWith" => "function(h){ return outil_liste(h, '*');}",
"display" => true,
"selectionType" => "line",
"forceMultiline" => true,
"dropMenu" => array(
"dropMenu" => array(
// liste -#
array(
"id" => 'liste_ol',
"name" => _T('barreoutils:barre_liste_ol'),
"className" => "outil_liste_ol",
"replaceWith" => "function(h){ return outil_liste(h, '#');}",
"display" => true,
"id" => 'liste_ol',
"name" => _T('barreoutils:barre_liste_ol'),
"className" => "outil_liste_ol",
"replaceWith" => "function(h){ return outil_liste(h, '#');}",
"display" => true,
"selectionType" => "line",
"forceMultiline" => true,
),
// desindenter
array(
"id" => 'desindenter',
"name" => _T('barreoutils:barre_desindenter'),
"className" => "outil_desindenter",
"replaceWith" => "function(h){return outil_desindenter(h);}",
"display" => true,
"id" => 'desindenter',
"name" => _T('barreoutils:barre_desindenter'),
"className" => "outil_desindenter",
"replaceWith" => "function(h){return outil_desindenter(h);}",
"display" => true,
"selectionType" => "line",
"forceMultiline" => true,
),
// indenter
array(
"id" => 'indenter',
"name" => _T('barreoutils:barre_indenter'),
"className" => "outil_indenter",
"replaceWith" => "function(h){return outil_indenter(h);}",
"display" => true,
"id" => 'indenter',
"name" => _T('barreoutils:barre_indenter'),
"className" => "outil_indenter",
"replaceWith" => "function(h){return outil_indenter(h);}",
"display" => true,
"selectionType" => "line",
"forceMultiline" => true,
),
@ -121,81 +123,81 @@ function barre_outils_edition(){
array(
"id" => "sepLink", // trouver un nom correct !
"separator" => "---------------",
"display" => true,
"display" => true,
),
// lien spip
array(
"id" => 'link',
"name" => _T('barreoutils:barre_lien'),
"key" => "L",
"className" => "outil_link",
"openWith" => "[",
"closeWith" => "->[!["._T('barreoutils:barre_lien_input')."]!]]",
"display" => true,
"id" => 'link',
"name" => _T('barreoutils:barre_lien'),
"key" => "L",
"className" => "outil_link",
"openWith" => "[",
"closeWith" => "->[![" . _T('barreoutils:barre_lien_input') . "]!]]",
"display" => true,
),
// note en bas de page spip
array(
"id" => 'notes',
"name" => _T('barreoutils:barre_note'),
"className" => "outil_notes",
"openWith" => "[[",
"closeWith" => "]]",
"display" => true,
"id" => 'notes',
"name" => _T('barreoutils:barre_note'),
"className" => "outil_notes",
"openWith" => "[[",
"closeWith" => "]]",
"display" => true,
"selectionType" => "word",
),
// separation
array(
"id" => "sepGuillemets",
"separator" => "---------------",
"display" => true,
"display" => true,
),
// quote spip
// (affichee dans forum)
array(
"id" => 'quote',
"name" => _T('barreoutils:barre_quote'),
"key" => "Q",
"className" => "outil_quote",
"openWith" => "\n<quote>",
"closeWith" => "</quote>\n",
"display" => true,
"id" => 'quote',
"name" => _T('barreoutils:barre_quote'),
"key" => "Q",
"className" => "outil_quote",
"openWith" => "\n<quote>",
"closeWith" => "</quote>\n",
"display" => true,
"selectionType" => "word",
"dropMenu" => array(
"dropMenu" => array(
// poesie spip
array(
"id" => 'barre_poesie',
"name" => _T('barreoutils:barre_poesie'),
"className" => "outil_poesie",
"openWith" => "\n&lt;poesie&gt;",
"closeWith" => "&lt;/poesie&gt;\n",
"display" => true,
"id" => 'barre_poesie',
"name" => _T('barreoutils:barre_poesie'),
"className" => "outil_poesie",
"openWith" => "\n&lt;poesie&gt;",
"closeWith" => "&lt;/poesie&gt;\n",
"display" => true,
"selectionType" => "line",
),
),
),
// guillemets
array(
"id" => 'guillemets',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets",
"openWith" => "&laquo;",
"closeWith" => "&raquo;",
"display" => true,
"lang" => array('fr','eo','cpf','ar','es'),
"id" => 'guillemets',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets",
"openWith" => "&laquo;",
"closeWith" => "&raquo;",
"display" => true,
"lang" => array('fr', 'eo', 'cpf', 'ar', 'es'),
"selectionType" => "word",
"dropMenu" => array(
"dropMenu" => array(
// guillemets internes
array(
"id" => 'guillemets_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_simples",
"openWith" => "&ldquo;",
"closeWith" => "&rdquo;",
"display" => true,
"lang" => array('fr','eo','cpf','ar','es'),
"id" => 'guillemets_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_simples",
"openWith" => "&ldquo;",
"closeWith" => "&rdquo;",
"display" => true,
"lang" => array('fr', 'eo', 'cpf', 'ar', 'es'),
"selectionType" => "word",
),
)
@ -203,24 +205,24 @@ function barre_outils_edition(){
// guillemets de
array(
"id" => 'guillemets_de',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets_de",
"openWith" => "&bdquo;",
"closeWith" => "&ldquo;",
"display" => true,
"lang" => array('bg','de','pl','hr','src'),
"id" => 'guillemets_de',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets_de",
"openWith" => "&bdquo;",
"closeWith" => "&ldquo;",
"display" => true,
"lang" => array('bg', 'de', 'pl', 'hr', 'src'),
"selectionType" => "word",
"dropMenu" => array(
"dropMenu" => array(
// guillemets de, simples
array(
"id" => 'guillemets_de_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_de_simples",
"openWith" => "&sbquo;",
"closeWith" => "&lsquo;",
"display" => true,
"lang" => array('bg','de','pl','hr','src'),
"id" => 'guillemets_de_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_de_simples",
"openWith" => "&sbquo;",
"closeWith" => "&lsquo;",
"display" => true,
"lang" => array('bg', 'de', 'pl', 'hr', 'src'),
"selectionType" => "word",
),
)
@ -228,24 +230,24 @@ function barre_outils_edition(){
// guillemets autres langues
array(
"id" => 'guillemets_autres',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets_simples",
"openWith" => "&ldquo;",
"closeWith" => "&rdquo;",
"display" => true,
"lang_not" => array('fr','eo','cpf','ar','es','bg','de','pl','hr','src'),
"id" => 'guillemets_autres',
"name" => _T('barreoutils:barre_guillemets'),
"className" => "outil_guillemets_simples",
"openWith" => "&ldquo;",
"closeWith" => "&rdquo;",
"display" => true,
"lang_not" => array('fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'),
"selectionType" => "word",
"dropMenu" => array(
"dropMenu" => array(
// guillemets simples, autres langues
array(
"id" => 'guillemets_autres_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_uniques",
"openWith" => "&lsquo;",
"closeWith" => "&rsquo;",
"display" => true,
"lang_not" => array('fr','eo','cpf','ar','es','bg','de','pl','hr','src'),
"id" => 'guillemets_autres_simples',
"name" => _T('barreoutils:barre_guillemets_simples'),
"className" => "outil_guillemets_uniques",
"openWith" => "&lsquo;",
"closeWith" => "&rsquo;",
"display" => true,
"lang_not" => array('fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'),
"selectionType" => "word",
),
)
@ -256,165 +258,165 @@ function barre_outils_edition(){
array(
"id" => "sepCaracteres",
"separator" => "---------------",
"display" => true,
"display" => true,
),
// icones clavier
array(
"id" => 'grpCaracteres',
"name" => _T('barreoutils:barre_inserer_caracteres'),
"className" => 'outil_caracteres',
"display" => true,
"dropMenu" => array(
"id" => 'grpCaracteres',
"name" => _T('barreoutils:barre_inserer_caracteres'),
"className" => 'outil_caracteres',
"display" => true,
"dropMenu" => array(
// A majuscule accent grave
array(
"id" => 'A_grave',
"name" => _T('barreoutils:barre_a_accent_grave'),
"className" => "outil_a_maj_grave",
"replaceWith" => "&Agrave;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"id" => 'A_grave',
"name" => _T('barreoutils:barre_a_accent_grave'),
"className" => "outil_a_maj_grave",
"replaceWith" => "&Agrave;",
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// E majuscule accent aigu
array(
"id" => 'E_aigu',
"name" => _T('barreoutils:barre_e_accent_aigu'),
"className" => "outil_e_maj_aigu",
"replaceWith" => "&Eacute;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"id" => 'E_aigu',
"name" => _T('barreoutils:barre_e_accent_aigu'),
"className" => "outil_e_maj_aigu",
"replaceWith" => "&Eacute;",
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// E majuscule accent grave
array(
"id" => 'E_grave',
"name" => _T('barreoutils:barre_e_accent_grave'),
"className" => "outil_e_maj_grave",
"id" => 'E_grave',
"name" => _T('barreoutils:barre_e_accent_grave'),
"className" => "outil_e_maj_grave",
"replaceWith" => "&Egrave;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// e dans le a
array(
"id" => 'aelig',
"name" => _T('barreoutils:barre_ea'),
"className" => "outil_aelig",
"id" => 'aelig',
"name" => _T('barreoutils:barre_ea'),
"className" => "outil_aelig",
"replaceWith" => "&aelig;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// e dans le a majuscule
array(
"id" => 'AElig',
"name" => _T('barreoutils:barre_ea_maj'),
"className" => "outil_aelig_maj",
"id" => 'AElig',
"name" => _T('barreoutils:barre_ea_maj'),
"className" => "outil_aelig_maj",
"replaceWith" => "&AElig;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// oe
array(
"id" => 'oe',
"name" => _T('barreoutils:barre_eo'),
"className" => "outil_oe",
"replaceWith" => "&oelig;",
"display" => true,
"lang" => array('fr'),
"id" => 'oe',
"name" => _T('barreoutils:barre_eo'),
"className" => "outil_oe",
"replaceWith" => "&oelig;",
"display" => true,
"lang" => array('fr'),
),
// OE
array(
"id" => 'OE',
"name" => _T('barreoutils:barre_eo_maj'),
"className" => "outil_oe_maj",
"replaceWith" => "&OElig;",
"display" => true,
"lang" => array('fr'),
"id" => 'OE',
"name" => _T('barreoutils:barre_eo_maj'),
"className" => "outil_oe_maj",
"replaceWith" => "&OElig;",
"display" => true,
"lang" => array('fr'),
),
// c cedille majuscule
array(
"id" => 'Ccedil',
"name" => _T('barreoutils:barre_c_cedille_maj'),
"className" => "outil_ccedil_maj",
"id" => 'Ccedil',
"name" => _T('barreoutils:barre_c_cedille_maj'),
"className" => "outil_ccedil_maj",
"replaceWith" => "&Ccedil;",
"display" => true,
"lang" => array('fr','eo','cpf'),
"display" => true,
"lang" => array('fr', 'eo', 'cpf'),
),
// Transformation en majuscule
array(
"id" => 'uppercase',
"name" => _T('barreoutils:barre_gestion_cr_changercassemajuscules'),
"className" => "outil_uppercase",
"id" => 'uppercase',
"name" => _T('barreoutils:barre_gestion_cr_changercassemajuscules'),
"className" => "outil_uppercase",
"replaceWith" => 'function(markitup) { return markitup.selection.toUpperCase() }',
"display" => true,
"lang" => array('fr','en'),
"display" => true,
"lang" => array('fr', 'en'),
),
// Transformation en minuscule
array(
"id" => 'lowercase',
"name" => _T('barreoutils:barre_gestion_cr_changercasseminuscules'),
"className" => "outil_lowercase",
"id" => 'lowercase',
"name" => _T('barreoutils:barre_gestion_cr_changercasseminuscules'),
"className" => "outil_lowercase",
"replaceWith" => 'function(markitup) { return markitup.selection.toLowerCase() }',
"display" => true,
"lang" => array('fr','en'),
"display" => true,
"lang" => array('fr', 'en'),
),
),
),
// Groupe de Codes informatiques.
array(
"id" => "sepCode",
"separator" => "---------------",
"display" => true,
"id" => "sepCode",
"separator" => "---------------",
"display" => true,
),
array(
// groupe code et bouton <code>
"id" => 'grpCode',
"name" => _T('barreoutils:barre_inserer_code'),
"className" => 'outil_code',
"openWith" => "<code>",
"closeWith" => "</code>",
"display" => true,
"dropMenu" => array(
// bouton <cadre>
// groupe code et bouton <code>
"id" => 'grpCode',
"name" => _T('barreoutils:barre_inserer_code'),
"className" => 'outil_code',
"openWith" => "<code>",
"closeWith" => "</code>",
"display" => true,
"dropMenu" => array(
// bouton <cadre>
array(
"id" => 'cadre',
"name" => _T('barreoutils:barre_inserer_cadre'),
"className" => 'outil_cadre',
"openWith" => "<cadre>\n",
"closeWith" => "\n</cadre>",
"display" => true,
),
),
),
/* inutile (origine de markitup et non de spip)
// separation
array(
"id" => "sepPreview", // trouver un nom correct !
"separator" => "---------------",
"display" => true,
),
// clean
array(
"id" => 'cadre',
"name" => _T('barreoutils:barre_inserer_cadre'),
"className" => 'outil_cadre',
"openWith" => "<cadre>\n",
"closeWith" => "\n</cadre>",
"id" => 'clean',
"name" => _T('barreoutils:barre_clean'),
"className" => "outil_clean",
"replaceWith" => 'function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") }',
"display" => true,
),
),
),
// preview
array(
"id" => 'preview',
"name" => _T('barreoutils:barre_preview'),
"className" => "outil_preview",
"call" => "preview",
"display" => true,
),
*/
/* inutile (origine de markitup et non de spip)
// separation
array(
"id" => "sepPreview", // trouver un nom correct !
"separator" => "---------------",
"display" => true,
),
// clean
array(
"id" => 'clean',
"name" => _T('barreoutils:barre_clean'),
"className" => "outil_clean",
"replaceWith" => 'function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") }',
"display" => true,
),
// preview
array(
"id" => 'preview',
"name" => _T('barreoutils:barre_preview'),
"className" => "outil_preview",
"call" => "preview",
"display" => true,
),
*/
),
'functions' => "
'functions' => "
// remplace ou cree -* ou -** ou -# ou -##
function outil_liste(h, c) {
if ((s = h.selection) && (r = s.match(/^-([*#]+) (.*)\$/))) {
@ -475,68 +477,68 @@ function barre_outils_edition(){
}
",
));
$set->cacher(array(
'stroke_through',
'clean', 'preview',
'clean',
'preview',
));
return $set;
}
/**
* Définitions des liens entre css et icones
*
* @return array
* Couples identifiant de bouton => nom de l'image (ou tableau nom, position haut, position bas)
*/
function barre_outils_edition_icones(){
function barre_outils_edition_icones() {
return array(
//'outil_header1' => 'text_heading_1.png',
'outil_header1' => array('spt-v1.png','-10px -226px'), //'intertitre.png'
'outil_bold' => array('spt-v1.png','-10px -478px'), //'text_bold.png'
'outil_italic' => array('spt-v1.png','-10px -586px'), //'text_italic.png'
'outil_header1' => array('spt-v1.png', '-10px -226px'), //'intertitre.png'
'outil_bold' => array('spt-v1.png', '-10px -478px'), //'text_bold.png'
'outil_italic' => array('spt-v1.png', '-10px -586px'), //'text_italic.png'
'outil_stroke_through' => array('spt-v1.png', '-10px -946px'), //'text_strikethrough.png'
'outil_stroke_through' => array('spt-v1.png','-10px -946px'), //'text_strikethrough.png'
'outil_liste_ul' => array('spt-v1.png', '-10px -622px'), //'text_list_bullets.png'
'outil_liste_ol' => array('spt-v1.png', '-10px -658px'), //'text_list_numbers.png'
'outil_indenter' => array('spt-v1.png', '-10px -514px'), //'text_indent.png'
'outil_desindenter' => array('spt-v1.png', '-10px -550px'), //'text_indent_remove.png'
'outil_liste_ul' => array('spt-v1.png','-10px -622px'), //'text_list_bullets.png'
'outil_liste_ol' => array('spt-v1.png','-10px -658px'), //'text_list_numbers.png'
'outil_indenter' => array('spt-v1.png','-10px -514px'), //'text_indent.png'
'outil_desindenter' => array('spt-v1.png','-10px -550px'), //'text_indent_remove.png'
//'outil_quote' => 'text_indent.png',
'outil_quote' => array('spt-v1.png','-10px -442px'), //'quote.png'
'outil_poesie' => array('spt-v1.png','-10px -1050px'), //'poesie.png'
'outil_quote' => array('spt-v1.png', '-10px -442px'), //'quote.png'
'outil_poesie' => array('spt-v1.png', '-10px -1050px'), //'poesie.png'
//'outil_link' => 'world_link.png',
'outil_link' => array('spt-v1.png','-10px -298px'), //'lien.png'
'outil_notes' => array('spt-v1.png','-10px -334px'), //'notes.png'
'outil_guillemets' => array('spt-v1.png','-10px -910px'), //'guillemets.png'
'outil_guillemets_simples' => array('spt-v1.png','-10px -802px'), //'guillemets-simples.png'
'outil_guillemets_de' => array('spt-v1.png','-10px -766px'), //'guillemets-de.png'
'outil_guillemets_de_simples' => array('spt-v1.png','-10px -838px'), //'guillemets-uniques-de.png'
'outil_guillemets_uniques' => array('spt-v1.png','-10px -874px'), //'guillemets-uniques.png'
'outil_caracteres' => array('spt-v1.png','-10px -262px'), //'keyboard.png'
'outil_a_maj_grave' => array('spt-v1.png','-10px -82px'), //'agrave-maj.png'
'outil_e_maj_aigu' => array('spt-v1.png','-10px -154px'), //'eacute-maj.png'
'outil_e_maj_grave' => array('spt-v1.png','-10px -190px'), //'eagrave-maj.png'
'outil_aelig' => array('spt-v1.png','-10px -46px'), //'aelig.png'
'outil_aelig_maj' => array('spt-v1.png','-10px -10px'), //'aelig-maj.png'
'outil_oe' => array('spt-v1.png','-10px -406px'), //'oelig.png'
'outil_oe_maj' => array('spt-v1.png','-10px -370px'), //'oelig-maj.png'
'outil_ccedil_maj' => array('spt-v1.png','-10px -118px'), //'ccedil-maj.png'
'outil_uppercase' => array('spt-v1.png','-10px -730px'), //'text_uppercase.png'
'outil_lowercase' => array('spt-v1.png','-10px -694px'), //'text_lowercase.png'
'outil_code' => array('spt-v1.png','-10px -1086px'),
'outil_cadre' => array('spt-v1.png','-10px -1122px'),
'outil_clean' => array('spt-v1.png','-10px -982px'), //'clean.png'
'outil_preview' => array('spt-v1.png','-10px -1018px'), //'eye.png'
'outil_link' => array('spt-v1.png', '-10px -298px'), //'lien.png'
'outil_notes' => array('spt-v1.png', '-10px -334px'), //'notes.png'
'outil_guillemets' => array('spt-v1.png', '-10px -910px'), //'guillemets.png'
'outil_guillemets_simples' => array('spt-v1.png', '-10px -802px'), //'guillemets-simples.png'
'outil_guillemets_de' => array('spt-v1.png', '-10px -766px'), //'guillemets-de.png'
'outil_guillemets_de_simples' => array('spt-v1.png', '-10px -838px'), //'guillemets-uniques-de.png'
'outil_guillemets_uniques' => array('spt-v1.png', '-10px -874px'), //'guillemets-uniques.png'
'outil_caracteres' => array('spt-v1.png', '-10px -262px'), //'keyboard.png'
'outil_a_maj_grave' => array('spt-v1.png', '-10px -82px'), //'agrave-maj.png'
'outil_e_maj_aigu' => array('spt-v1.png', '-10px -154px'), //'eacute-maj.png'
'outil_e_maj_grave' => array('spt-v1.png', '-10px -190px'), //'eagrave-maj.png'
'outil_aelig' => array('spt-v1.png', '-10px -46px'), //'aelig.png'
'outil_aelig_maj' => array('spt-v1.png', '-10px -10px'), //'aelig-maj.png'
'outil_oe' => array('spt-v1.png', '-10px -406px'), //'oelig.png'
'outil_oe_maj' => array('spt-v1.png', '-10px -370px'), //'oelig-maj.png'
'outil_ccedil_maj' => array('spt-v1.png', '-10px -118px'), //'ccedil-maj.png'
'outil_uppercase' => array('spt-v1.png', '-10px -730px'), //'text_uppercase.png'
'outil_lowercase' => array('spt-v1.png', '-10px -694px'), //'text_lowercase.png'
'outil_code' => array('spt-v1.png', '-10px -1086px'),
'outil_cadre' => array('spt-v1.png', '-10px -1122px'),
'outil_clean' => array('spt-v1.png', '-10px -982px'), //'clean.png'
'outil_preview' => array('spt-v1.png', '-10px -1018px'), //'eye.png'
);
}

40
barre_outils/forum.php

@ -1,13 +1,14 @@
<?php
/**
* Déclaration de la barre d'outil de forum de SPIP
*
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package SPIP\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
@ -15,20 +16,35 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
*
* @return Barre_outils La barre d'outil
*/
function barre_outils_forum(){
function barre_outils_forum() {
// on modifie simplement la barre d'edition
$edition = charger_fonction('edition','barre_outils');
$edition = charger_fonction('edition', 'barre_outils');
$barre = $edition();
$barre->nameSpace = 'forum';
$barre->cacherTout();
$barre->afficher(array(
'bold','italic',
'sepLink','link',
'sepGuillemets', 'quote',
'sepCaracteres','guillemets', 'guillemets_simples',
'guillemets_de', 'guillemets_de_simples',
'guillemets_autres', 'guillemets_autres_simples',
'A_grave', 'E_aigu', 'E_grave', 'aelig', 'AElig', 'oe', 'OE', 'Ccedil',
'bold',
'italic',
'sepLink',
'link',
'sepGuillemets',
'quote',
'sepCaracteres',
'guillemets',
'guillemets_simples',
'guillemets_de',
'guillemets_de_simples',
'guillemets_autres',
'guillemets_autres_simples',
'A_grave',
'E_aigu',
'E_grave',
'aelig',
'AElig',
'oe',
'OE',
'Ccedil',
));
return $barre;
}

281
porte_plume_fonctions.php

@ -7,7 +7,9 @@
* @package SPIP\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
* Objet contenant les différents paramètres definissant une barre d'outils
@ -18,105 +20,147 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
*
* @package SPIP\PortePlume\BarreOutils
*/
class Barre_outils{
class Barre_outils {
/**
* Identifiant HTML de la barre
*
* @todo À supprimer car non utilisé !
* @var string */
* @var string
*/
public $id = "";
/**
* Nom de la barre d'outil
* @var string */
*
* @var string
*/
public $nameSpace = "";
/**
* Langue
*
* @todo À supprimer car non utilisé !
* @var string */
* @var string
*/
public $lang = "";
/**
* Option de markitup : rafraîchir la prévisu ?
*
* @todo À supprimer car non utilisé !
* @var bool */
* @var bool
*/
public $previewAutoRefresh = false;
/**
* Option de markitup : nom de la fonction de prévisu
*
* @todo À supprimer car on le redéfini dans l'appel javascript !
* @var bool */
* @var bool
*/
public $previewParserPath = "";
/**
* Option de markitup : que faire sur l'appuie de Entrée ?
* @var array */
*
* @var array
*/
public $onEnter = array();
/**
* Option de markitup : que faire sur l'appuie de Shift+Entrée ?
*
* @example array('keepDefault'=>false, 'replaceWith'=>"\n_ ")
* @var array */
* @var array
*/
public $onShiftEnter = array();
/**
* Option de markitup : que faire sur l'appuie de Control+Entrée ?
* @var array */
*
* @var array
*/
public $onCtrlEnter = array();
/**
* Option de markitup : que faire sur l'appuie d'une tabulation ?
* @var array */
*
* @var array
*/
public $onTab = array();
/**
* Option de markitup : Code JS à exécuter avant une insertion
* @var string */
*
* @var string
*/
public $beforeInsert = "";
/**
* Option de markitup : Code JS à exécuter après une insertion
* @var string */
*
* @var string
*/
public $afterInsert = "";
/**
* Description des outils/boutons et leurs sous boutons éventuels
* @var array */
*
* @var array
*/
public $markupSet = array();
/**
* Fonctions JS supplémentaires à écrire après la déclaration JSON
* des outils. Ces fonctions peuvent servir aux boutons.
* @var string */
*
* @var string
*/
public $functions = "";
/**
* Liste des paramètres valides pour une description d'outils (markupSet)
* @var array */
*
* @var array
*/
private $_liste_params_autorises = array(
'replaceWith',
'openWith',
'closeWith',
'openBlockWith', // sur multiline, avant les lignes selectionnees
'closeBlockWith', // sur multiline, apres les lignes selectionnees
'placeHolder', // remplace par ce texte lorsqu'il n'y a pas de selection
'beforeInsert', // avant l'insertion
'afterInsert', // apres l'insertion
'openBlockWith',
// sur multiline, avant les lignes selectionnees
'closeBlockWith',
// sur multiline, apres les lignes selectionnees
'placeHolder',
// remplace par ce texte lorsqu'il n'y a pas de selection
'beforeInsert',
// avant l'insertion
'afterInsert',
// apres l'insertion
'beforeMultiInsert',
'afterMultiInsert',
'dropMenu', // appelle un sous menu
'name', // nom affiche au survol
'key', // raccourcis clavier
'className', // classe css utilisee
'lang', // langues dont le bouton doit apparaitre - array
'lang_not', // langues dont le bouton ne doit pas apparaitre - array
'selectionType', // '','word','line' : type de selection (normale, aux mots les plus proches, a la ligne la plus proche)
'multiline', // open/close sur chaque ligne (mais replace est applique sur l'ensemble de la selection)
'forceMultiline', // pour faire comme si on faisait systematiquement un control+shift (et replace est applique sur chaque ligne de la selection)
'dropMenu',
// appelle un sous menu
'name',
// nom affiche au survol
'key',
// raccourcis clavier
'className',
// classe css utilisee
'lang',
// langues dont le bouton doit apparaitre - array
'lang_not',
// langues dont le bouton ne doit pas apparaitre - array
'selectionType',
// '','word','line' : type de selection (normale, aux mots les plus proches, a la ligne la plus proche)
'multiline',
// open/close sur chaque ligne (mais replace est applique sur l'ensemble de la selection)
'forceMultiline',
// pour faire comme si on faisait systematiquement un control+shift (et replace est applique sur chaque ligne de la selection)
'separator',
@ -139,12 +183,12 @@ class Barre_outils{
* @param array $params Paramètres de la barre d'outil
* @return void
*/
function __construct($params = array()){
foreach ($params as $p=>$v) {
function __construct($params = array()) {
foreach ($params as $p => $v) {
if (isset($this->$p)) {
// si tableau, on verifie les entrees
if (is_array($v)) {
$v = $this->verif_params($p,$v);
$v = $this->verif_params($p, $v);
}
$this->$p = $v;
}
@ -165,19 +209,19 @@ class Barre_outils{
*/
function verif_params($nom, $params = array()) {
// si markupset, on boucle sur les items
if (stripos($nom, 'markupSet')!==false) {
foreach ($params as $i=>$v) {
if (stripos($nom, 'markupSet') !== false) {
foreach ($params as $i => $v) {
$params[$i] = $this->verif_params($i, $v);
}
}
// sinon on teste la validite
} // sinon on teste la validite
else {
foreach ($params as $p=>$v) {
foreach ($params as $p => $v) {
if (!in_array($p, $this->_liste_params_autorises)) {
unset($params[$p]);
}
}
}
return $params;
}
@ -211,18 +255,21 @@ class Barre_outils{
* Paramètres de l'élément modifié ou paramètres ajoutés
* False si l'identifiant cherché n'est pas trouvé
*/
function affecter(&$tableau, $identifiant, $params = array(), $lieu = 'dedans', $plusieurs = false){
function affecter(&$tableau, $identifiant, $params = array(), $lieu = 'dedans', $plusieurs = false) {
static $cle_de_recherche = 'id'; // ou className ?
if ($tableau === null) // utile ?
{
$tableau = &$this->markupSet;
}
if (!in_array($lieu, array('dedans','avant','apres')))
if (!in_array($lieu, array('dedans', 'avant', 'apres'))) {
$lieu = 'dedans';
}
// present en premiere ligne ?
$trouve = false;
foreach ($tableau as $i => $v){
foreach ($tableau as $i => $v) {
if (isset($v[$cle_de_recherche]) and ($v[$cle_de_recherche] == $identifiant)) {
$trouve = $i;
break;
@ -233,36 +280,39 @@ class Barre_outils{
if ($params) {
// verifier que les insertions sont correctes
$les_params = ($plusieurs ? $params : array($params));
foreach ($les_params as $i=>$un_params) {
foreach ($les_params as $i => $un_params) {
$les_params[$i] = $this->verif_params($identifiant, $un_params);
}
// dedans on merge ($params uniquement tableau cle/valeur)
if ($lieu == 'dedans' && !$plusieurs) {
return $tableau[$trouve] = array_merge($tableau[$trouve], $les_params[0]);
}
// avant ou apres, on insere ($params peut etre tableau cle/valeur ou tableau de tableaux cle/valeur)
} // avant ou apres, on insere ($params peut etre tableau cle/valeur ou tableau de tableaux cle/valeur)
elseif ($lieu == 'avant') {
array_splice($tableau, $trouve, 0, $les_params);
return $params;
}
elseif ($lieu == 'apres') {
} elseif ($lieu == 'apres') {
array_splice($tableau, $trouve+1, 0, $les_params);
return $params;
}
}
return $tableau[$trouve];
}
// recursivons sinon !
foreach ($tableau as $i => $v){
foreach ($tableau as $i => $v) {
if (is_array($v)) {
foreach ($v as $m => $n) {
if (is_array($n) AND ($r = $this->affecter($tableau[$i][$m], $identifiant, $params, $lieu, $plusieurs)))
if (is_array($n) AND ($r = $this->affecter($tableau[$i][$m], $identifiant, $params, $lieu, $plusieurs))) {
return $r;
}
}
}
}
return false;
}
@ -281,17 +331,19 @@ class Barre_outils{
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function affecter_a_tous(&$tableau, $params = array(), $ids = array()){
if (!$params)
function affecter_a_tous(&$tableau, $params = array(), $ids = array()) {
if (!$params) {
return false;
}
if ($tableau === null)
if ($tableau === null) {
$tableau = &$this->markupSet;
}
$params = $this->verif_params('divers', $params);
// merge de premiere ligne
foreach ($tableau as $i => &$v){
foreach ($tableau as $i => &$v) {
if (!$ids OR in_array($v['id'], $ids)) {
$tableau[$i] = array_merge($tableau[$i], $params);
}
@ -300,6 +352,7 @@ class Barre_outils{
$this->affecter_a_tous($tableau[$i]['dropMenu'], $params, $ids);
}
}
return true;
}
@ -320,14 +373,16 @@ class Barre_outils{
*/
function set($identifiant, $params = array()) {
// prudence tout de meme a pas tout modifier involontairement (si array)
if (!$identifiant) return false;
if (!$identifiant) {
return false;
}
if (is_string($identifiant)) {
return $this->affecter($this->markupSet, $identifiant, $params);
}
elseif (is_array($identifiant)) {
} elseif (is_array($identifiant)) {
return $this->affecter_a_tous($this->markupSet, $params, $identifiant);
}
return false;
}
@ -345,6 +400,7 @@ class Barre_outils{
if ($a = $this->affecter($this->markupSet, $identifiant)) {
return $a;
}
return false;
}
@ -360,8 +416,8 @@ class Barre_outils{
* true si plusieurs identifiants,
* array sinon : description de l'identifiant cherché.
*/
function afficher($identifiant){
return $this->set($identifiant,array('display'=>true));
function afficher($identifiant) {
return $this->set($identifiant, array('display' => true));
}
@ -376,8 +432,8 @@ class Barre_outils{
* true si plusieurs identifiants,
* array sinon : description de l'identifiant cherché.
*/
function cacher($identifiant){
return $this->set($identifiant, array('display'=>false));
function cacher($identifiant) {
return $this->set($identifiant, array('display' => false));
}
@ -388,8 +444,8 @@ class Barre_outils{
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function afficherTout(){
return $this->affecter_a_tous($this->markupSet, array('display'=>true));
function afficherTout() {
return $this->affecter_a_tous($this->markupSet, array('display' => true));
}
/**
@ -399,8 +455,8 @@ class Barre_outils{
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function cacherTout(){
return $this->affecter_a_tous($this->markupSet, array('display'=>false));
function cacherTout() {
return $this->affecter_a_tous($this->markupSet, array('display' => false));
}
@ -417,7 +473,7 @@ class Barre_outils{
* Paramètres ajoutés avant
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterAvant($identifiant, $params){
function ajouterAvant($identifiant, $params) {
return $this->affecter($this->markupSet, $identifiant, $params, 'avant');
}
@ -434,7 +490,7 @@ class Barre_outils{
* Paramètres ajoutés avant
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterPlusieursAvant($identifiant, $tableau_params){
function ajouterPlusieursAvant($identifiant, $tableau_params) {
return $this->affecter($this->markupSet, $identifiant, $tableau_params, 'avant', true);
}
@ -451,7 +507,7 @@ class Barre_outils{
* Paramètres ajoutés après
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterApres($identifiant, $params){
function ajouterApres($identifiant, $params) {
return $this->affecter($this->markupSet, $identifiant, $params, 'apres');
}
@ -468,7 +524,7 @@ class Barre_outils{
* Paramètres ajoutés après
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterPlusieursApres($identifiant, $tableau_params){
function ajouterPlusieursApres($identifiant, $tableau_params) {
return $this->affecter($this->markupSet, $identifiant, $tableau_params, 'apres', true);
}
@ -479,8 +535,8 @@ class Barre_outils{
* @param string $fonction Code de la fonction JS
* @return void
*/
function ajouterFonction($fonction){
if (false === strpos($this->functions, $fonction)){
function ajouterFonction($fonction) {
if (false === strpos($this->functions, $fonction)) {
$this->functions .= "\n" . $fonction . "\n";
}
}
@ -492,7 +548,7 @@ class Barre_outils{
* @param array $tableau Tableau de description des outils
* @return void
*/
function enlever_elements_non_affiches(&$tableau){
function enlever_elements_non_affiches(&$tableau) {
if ($tableau === null) { // utile ?
$tableau = &$this->markupSet;
}
@ -501,8 +557,7 @@ class Barre_outils{
if (isset($v['display']) AND !$v['display']) {
unset($tableau[$p]);
$tableau = array_values($tableau); // remettre les cles automatiques sinon json les affiche et ça plante.
}
// sinon, on lance une recursion sur les sous-menus
} // sinon, on lance une recursion sur les sous-menus
else {
if (isset($v['dropMenu']) and is_array($v['dropMenu'])) {
$this->enlever_elements_non_affiches($tableau[$p]['dropMenu']);
@ -527,7 +582,7 @@ class Barre_outils{
* @param array $tableau
* Tableau de description des outils
* @return void
**/
**/
function enlever_separateurs(&$tableau) {
if ($tableau === null) { // utile ?
$tableau = &$this->markupSet;
@ -550,8 +605,7 @@ class Barre_outils{
}
unset($tableau[$p]);
$tableau = array_values($tableau); // remettre les cles automatiques sinon json les affiche et ça plante.
}
// sinon, on lance une recursion sur les sous-menus
} // sinon, on lance une recursion sur les sous-menus
else {
if (isset($v['dropMenu']) and is_array($v['dropMenu'])) {
#$this->enlever_separateurs($tableau[$p]['dropMenu']);
@ -569,7 +623,7 @@ class Barre_outils{
* (id, display, icone)
*/
function enlever_parametres_inutiles() {
foreach($this as $p=>$v){
foreach ($this as $p => $v) {
if (!$v) {
if (is_array($v) or is_string($v)) {
unset($this->$p);
@ -578,8 +632,8 @@ class Barre_outils{
unset($this->$p);
}
}
foreach($this->markupSet as $p=>$v) {
foreach ($v as $n=>$m) {
foreach ($this->markupSet as $p => $v) {
foreach ($v as $n => $m) {
if (in_array($n, array('id', 'display'))) {
unset($this->markupSet[$p][$n]);
}
@ -594,7 +648,7 @@ class Barre_outils{
*
* @return string Déclaration json de la barre
*/
function creer_json(){
function creer_json() {
$barre = $this;
$type = $barre->nameSpace;
$fonctions = $barre->functions;
@ -610,7 +664,8 @@ class Barre_outils{
// lorsqu'on clique sur l'icone
include_spip('inc/charsets');
$json = unicode2charset(html2unicode($json));
return "\n\nbarre_outils_$type = ".$json . "\n\n $fonctions";
return "\n\nbarre_outils_$type = " . $json . "\n\n $fonctions";
}
/**
@ -631,14 +686,16 @@ class Barre_outils{
case is_null($var) :
return 'null';
case is_string($var) :
if (strtolower(substr(ltrim($var),0,8))=='function')
if (strtolower(substr(ltrim($var), 0, 8)) == 'function') {
return $var;
}
return '"' . addcslashes($var, "\"\\\n\r") . '"';
case is_bool($var) :
return $var ? 'true' : 'false';
case is_scalar($var) :
return $var;
case is_object( $var) :
case is_object($var) :
$var = get_object_vars($var);
$asso = true;
case is_array($var) :
@ -654,16 +711,19 @@ class Barre_outils{
$ret .= $sep . '"' . $key . '":' . Barre_outils::json_export($elt);
$sep = ',';
}
return $ret ."}\n";
return $ret . "}\n";
} else {
$ret = '[';
foreach ($var as $elt) {
$ret .= $sep . Barre_outils::json_export($elt);
$sep = ',';
}
return $ret ."]\n";
return $ret . "]\n";
}
}
return false;
}
@ -682,13 +742,14 @@ class Barre_outils{
*
* @return string Déclaration CSS des icones
*/
function barre_outils_css_icones(){
function barre_outils_css_icones() {
// recuperer la liste, extraire les icones
$css = "";
// liste des barres
if (!$barres = barre_outils_liste())
if (!$barres = barre_outils_liste()) {
return null;
}
// liste des classes css et leur correspondance avec une icone
$classe2icone = array();
@ -716,18 +777,20 @@ function barre_outils_css_icones(){
$classe2icone = pipeline('porte_plume_lien_classe_vers_icone', $classe2icone);
// passage en css
foreach ($classe2icone as $n=>$i) {
$pos="";
if (is_array($i)){
$pos = "background-position:".end($i);
$i = reset($i);
foreach ($classe2icone as $n => $i) {
$pos = "";
if (is_array($i)) {
$pos = "background-position:" . end($i);
$i = reset($i);
}
if (file_exists($i))
if (file_exists($i)) {
$file = $i;
else
} else {
$file = find_in_path("icones_barre/$i");
if ($file)
$css .= "\n.markItUp .$n>a>em {background-image:url(".protocole_implicite(url_absolue($file)).");$pos}";
}
if ($file) {
$css .= "\n.markItUp .$n>a>em {background-image:url(" . protocole_implicite(url_absolue($file)) . ");$pos}";
}
}
return $css;
@ -746,11 +809,12 @@ function barre_outils_css_icones(){
* @return Barre_Outils|bool
* La barre d'outil si la fonction a été trouvée, false sinon
*/
function barre_outils_initialiser($set){
function barre_outils_initialiser($set) {
if ($f = charger_fonction($set, 'barre_outils')) {
// retourne une instance de l'objet Barre_outils
return $f();
}
return false;
}
@ -761,22 +825,26 @@ function barre_outils_initialiser($set){
* Tableau des noms de barres d'outils trouvées
* False si on ne trouve aucune barre.
*/
function barre_outils_liste(){
function barre_outils_liste() {
static $sets = -1;
if ($sets !== -1)
if ($sets !== -1) {
return $sets;
}
// on recupere l'ensemble des barres d'outils connues
if (!$sets = find_all_in_path('barre_outils/','.*[.]php')
or !is_array($sets)) {
if (!$sets = find_all_in_path('barre_outils/', '.*[.]php')
or !is_array($sets)
) {
spip_log("[Scandale] Porte Plume ne trouve pas de barre d'outils !");
$sets = false;
return $sets;
}
foreach($sets as $fichier=>$adresse) {
$sets[$fichier] = substr($fichier,0,-4); // juste le nom
foreach ($sets as $fichier => $adresse) {
$sets[$fichier] = substr($fichier, 0, -4); // juste le nom
}
return $sets;
}
@ -813,8 +881,7 @@ function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect
global $table_des_traitements;
if (!strlen($nom_champ) || !isset($table_des_traitements[$nom_champ])) {
$texte = propre($texte, $connect);
}
else {
} else {
include_spip('base/abstract_sql');
$table = table_objet($type_objet);
$ps = $table_des_traitements[$nom_champ];
@ -826,7 +893,7 @@ function traitements_previsu($texte, $nom_champ = '', $type_objet = '', $connect
} else {