Example #1
0
function extraire_multi($letexte, $lang = null, $echappe_span = false)
{
    if (preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) {
        if (!$lang) {
            $lang = $GLOBALS['spip_lang'];
        }
        foreach ($regs as $reg) {
            // chercher la version de la langue courante
            $trads = extraire_trads($reg[1]);
            if ($l = approcher_langue($trads, $lang)) {
                $trad = $trads[$l];
            } else {
                include_spip('inc/texte');
                // langue absente, prendre la premiere dispo
                // mais typographier le texte selon les regles de celle-ci
                // Attention aux blocs multi sur plusieurs lignes
                $l = key($trads);
                $trad = $trads[$l];
                $typographie = charger_fonction(lang_typo($l), 'typographie');
                $trad = $typographie($trad);
                include_spip('inc/texte');
                // Tester si on echappe en span ou en div
                // il ne faut pas echapper en div si propre produit un seul paragraphe
                $trad_propre = preg_replace(",(^<p[^>]*>|</p>\$),Uims", "", propre($trad));
                $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $trad_propre) ? 'div' : 'span';
                $trad = code_echappement($trad, 'multi', false, $mode);
                $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l));
                if (lang_dir($l) !== lang_dir($lang)) {
                    $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l)));
                }
                if (!$echappe_span) {
                    $trad = echappe_retour($trad, 'multi');
                }
            }
            $letexte = str_replace($reg[0], $trad, $letexte);
        }
    }
    return $letexte;
}
Example #2
0
function typo($letexte)
{
    global $lcm_lang, $lang_typo;
    // escape <html>...</html> code, etc.
    list($letexte, $les_echap) = echappe_html($letexte, "SOURCETYPO");
    // Call the function for pre-processing
    $letexte = spip_avant_typo($letexte);
    if (!($lang = $lang_typo)) {
        include_lcm('inc_lang');
        $lang = lang_typo($lcm_lang);
    }
    if ($lang == 'fr') {
        $letexte = typo_fr($letexte);
    } else {
        $letexte = typo_en($letexte);
    }
    // Call the post-processing function
    $letexte = spip_apres_typo($letexte);
    // reintegrate the escaped text
    $letexte = echappe_retour($letexte, $les_echap, "SOURCETYPO");
    return $letexte;
}
Example #3
0
/**
 * http://code.spip.net/@corriger_typo
 *
 * @param string $t
 * @param string $lang
 * @return string
 */
function corriger_typo($t, $lang = '')
{
    static $typographie = array();
    // Plus vite !
    if (!$t) {
        return $t;
    }
    $t = pipeline('pre_typo', $t);
    // Caracteres de controle "illegaux"
    $t = corriger_caracteres($t);
    // Proteger les caracteres typographiques a l'interieur des tags html
    if (preg_match_all(_TYPO_BALISE, $t, $regs, PREG_SET_ORDER)) {
        foreach ($regs as $reg) {
            $insert = $reg[0];
            // hack: on transforme les caracteres a proteger en les remplacant
            // par des caracteres "illegaux". (cf corriger_caracteres())
            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
            $t = str_replace($reg[0], $insert, $t);
        }
    }
    // trouver les blocs multi et les traiter a part
    $t = extraire_multi($e = $t, $lang, true);
    $e = $e === $t;
    // Charger & appliquer les fonctions de typographie
    $idxl = "{$lang}:" . (isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : $GLOBALS['spip_lang']);
    if (!isset($typographie[$idxl])) {
        $typographie[$idxl] = charger_fonction(lang_typo($lang), 'typographie');
    }
    $t = $typographie[$idxl]($t);
    // Les citations en une autre langue, s'il y a lieu
    if (!$e) {
        $t = echappe_retour($t, 'multi');
    }
    // Retablir les caracteres proteges
    $t = strtr($t, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
    // pipeline
    $t = pipeline('post_typo', $t);
    # un message pour abs_url - on est passe en mode texte
    $GLOBALS['mode_abs_url'] = 'texte';
    return $t;
}
Example #4
0
function changer_typo($lang = '', $source = '')
{
    global $lang_typo, $lang_dir, $dir_lang;
    if (preg_match("/^(article|rubrique|breve|auteur)([0-9]+)/", $source, $regs)) {
        $r = lcm_fetch_array(lcm_query("SELECT lang FROM spip_" . $regs[1] . "s WHERE id_" . $regs[1] . "=" . $regs[2]));
        $lang = $r['lang'];
    }
    if (!$lang) {
        $lang = read_meta('default_language');
    }
    $lang_typo = lang_typo($lang);
    $lang_dir = lang_dir($lang);
    $dir_lang = " dir='{$lang_dir}'";
}
/**
 * Retourne le contenu d'une puce avec changement de statut possible
 * si on en a l'autorisation, sinon simplement l'image de la puce
 *
 * @param int $id
 *     Identifiant de l'objet
 * @param string $statut
 *     Statut actuel de l'objet
 * @param int $id_rubrique
 *     Identifiant du parent, une rubrique
 * @param string $type
 *     Type d'objet
 * @param bool $ajax
 *     Indique s'il ne faut renvoyer que le coeur du menu car on est
 *     dans une requete ajax suite à un post de changement rapide
 * @param bool $menu_rapide
 *     Indique si l'on peut changer le statut, ou si on l'affiche simplement
 * @return string
 *     Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent)
 **/
function puce_statut_changement_rapide($id, $statut, $id_rubrique, $type = 'article', $ajax = false, $menu_rapide = _ACTIVER_PUCE_RAPIDE)
{
    $src = statut_image($type, $statut);
    if (!$src) {
        return $src;
    }
    if (!$id or !_SPIP_AJAX or !$menu_rapide) {
        $ajax_node = '';
    } else {
        $ajax_node = " class='imgstatut{$type}{$id}'";
    }
    $t = statut_titre($type, $statut);
    $inser_puce = http_img_pack($src, $t, $ajax_node, $t);
    if (!$ajax_node) {
        return $inser_puce;
    }
    $table = table_objet_sql($type);
    $desc = lister_tables_objets_sql($table);
    if (!isset($desc['statut_textes_instituer'])) {
        return $inser_puce;
    }
    if (!function_exists('autoriser')) {
        include_spip('inc/autoriser');
    }
    // cas ou l'on a un parent connu (devrait disparaitre au profit du second cas plus generique)
    if ($id_rubrique) {
        if (!autoriser('publierdans', 'rubrique', $id_rubrique)) {
            return $inser_puce;
        }
    } else {
        if (!autoriser('instituer', $type, $id, null, array('statut' => 'publie'))) {
            return $inser_puce;
        }
    }
    $coord = array_flip(array_keys($desc['statut_textes_instituer']));
    if (!isset($coord[$statut])) {
        return $inser_puce;
    }
    $unit = 8 + 4;
    $margin = 4;
    /* marge a gauche + droite */
    $zero = 1 + $margin / 2 + 2;
    $clip = $zero + $unit * $coord[$statut];
    if ($ajax) {
        $width = $unit * count($desc['statut_textes_instituer']) + $margin;
        $out = "<span class='puce_objet_fixe {$type}'>" . $inser_puce . "</span>" . "<span class='puce_objet_popup {$type} statutdecal{$type}{$id}' style='width:{$width}px;margin-left:-{$clip}px;'>";
        $i = 0;
        foreach ($desc['statut_textes_instituer'] as $s => $t) {
            $out .= afficher_script_statut($id, $type, -$zero - $i++ * $unit, statut_image($type, $s), $s, _T($t));
        }
        $out .= "</span>";
        return $out;
    } else {
        $nom = "puce_statut_";
        $action = generer_url_ecrire('puce_statut', "", true);
        $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '{$nom}', '{$type}', '{$id}', '{$action}'); }";
        $over = " onmouseover=\"{$action}\"";
        $lang_dir = lang_dir(lang_typo());
        return "<span class='puce_objet {$type}' id='{$nom}{$type}{$id}' dir='{$lang_dir}'{$over}>" . $inser_puce . '</span>';
    }
}
Example #6
0
function extraire_multi($letexte, $lang=null, $echappe_span=false) {
	if (strpos($letexte, '<multi>') === false) return $letexte; // perf
	if (preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) {
		if (!$lang) $lang = $GLOBALS['spip_lang'];

		foreach ($regs as $reg) {
			// chercher la version de la langue courante
			$trads = extraire_trads($reg[1]);
			if ($l = approcher_langue($trads, $lang)) {
				$trad = $trads[$l];
			} else {
				include_spip('inc/texte');
				// langue absente, prendre la premiere dispo
				// mais typographier le texte selon les regles de celle-ci
				// Attention aux blocs multi sur plusieurs lignes
				$l = key($trads);
				$trad = $trads[$l];
				$typographie = charger_fonction(lang_typo($l), 'typographie');
				$trad = traiter_retours_chariots($typographie($trad));
				$trad = explode("\n", $trad);
				foreach($trad as $i => $ligne) {
					if (strlen($ligne)) {
						$ligne = code_echappement($ligne, 'multi');
						$ligne = str_replace("'", '"', inserer_attribut($ligne, 'lang', $l));
						if (lang_dir($l) !== lang_dir($lang))
							$ligne = str_replace("'", '"', inserer_attribut($ligne, 'dir', lang_dir($l)));
						$trad[$i] = $ligne;
					}
				}
				$trad = join("\n", $trad);
				if (!$echappe_span)
					$trad = echappe_retour($trad, 'multi');
			}
			$letexte = str_replace($reg[0], $trad, $letexte);
		}
	}

	return $letexte;
}
Example #7
0
function extraire_multi($letexte, $lang = null, $options = array())
{
    if ($letexte and preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) {
        if (!$lang) {
            $lang = $GLOBALS['spip_lang'];
        }
        // Compatibilité avec le prototype de fonction précédente qui utilisait un boolean
        if (is_bool($options)) {
            $options = array('echappe_span' => $options, 'lang_defaut' => _LANGUE_PAR_DEFAUT);
        }
        if (!isset($options['echappe_span'])) {
            $options = array_merge($options, array('echappe_span' => false));
        }
        if (!isset($options['lang_defaut'])) {
            $options = array_merge($options, array('lang_defaut' => _LANGUE_PAR_DEFAUT));
        }
        include_spip('inc/lang');
        foreach ($regs as $reg) {
            // chercher la version de la langue courante
            $trads = extraire_trads($reg[1]);
            if ($l = approcher_langue($trads, $lang)) {
                $trad = $trads[$l];
            } else {
                if ($options['lang_defaut'] == 'aucune') {
                    $trad = '';
                } else {
                    // langue absente, prendre le fr ou une langue précisée (meme comportement que inc/traduire.php)
                    // ou la premiere dispo
                    // mais typographier le texte selon les regles de celle-ci
                    // Attention aux blocs multi sur plusieurs lignes
                    if (!($l = approcher_langue($trads, $options['lang_defaut']))) {
                        $l = key($trads);
                    }
                    $trad = $trads[$l];
                    $typographie = charger_fonction(lang_typo($l), 'typographie');
                    $trad = $typographie($trad);
                    // Tester si on echappe en span ou en div
                    // il ne faut pas echapper en div si propre produit un seul paragraphe
                    include_spip('inc/texte');
                    $trad_propre = preg_replace(",(^<p[^>]*>|</p>\$),Uims", "", propre($trad));
                    $mode = preg_match(',</?(' . _BALISES_BLOCS . ')[>[:space:]],iS', $trad_propre) ? 'div' : 'span';
                    $trad = code_echappement($trad, 'multi', false, $mode);
                    $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l));
                    if (lang_dir($l) !== lang_dir($lang)) {
                        $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l)));
                    }
                    if (!$options['echappe_span']) {
                        $trad = echappe_retour($trad, 'multi');
                    }
                }
            }
            $letexte = str_replace($reg[0], $trad, $letexte);
        }
    }
    return $letexte;
}
Example #8
0
function typo_exposants($texte){
	if (!$lang = $GLOBALS['lang_objet']) $lang = $GLOBALS['spip_lang'];
	if(!function_exists($fonction = 'typo_exposants_'.lang_typo($lang))) return $texte;
	// prudence : on protege les balises <a> et <img>
	if (strpos($texte, '<')!==false)
		$texte = preg_replace_callback('/(<(a|img) [^>]+>)/Ums', 'typo_exposants_echappe_balises_callback', $texte);
	$texte = cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', $fonction, $texte);
	return echappe_retour($texte, 'EXPO');
}