fr.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. // Correction typographique francaise
  13. function typographie_fr($t) {
  14. static $trans;
  15. if (!isset($trans)) {
  16. $trans = array(
  17. "&nbsp;" => '~',
  18. "&raquo;" => '&#187;',
  19. "&laquo;" => '&#171;',
  20. "&rdquo;" => '&#8221;',
  21. "&ldquo;" => '&#8220;',
  22. "&deg;" => '&#176;',
  23. "'" => '&#8217;'
  24. );
  25. switch ($GLOBALS['meta']['charset']) {
  26. case 'utf-8':
  27. $trans["\xc2\xa0"] = '~';
  28. $trans["\xc2\xbb"] = '&#187;';
  29. $trans["\xc2\xab"] = '&#171;';
  30. $trans["\xe2\x80\x94"] = '--';
  31. $trans["\xe2\x80\x9d"] = '&#8221;';
  32. $trans["\xe2\x80\x9c"] = '&#8220;';
  33. $trans["\xc2\xb0"] = '&#176;';
  34. $trans["\xe2\x80\x89"] = '~'; # &finesp;
  35. break;
  36. default:
  37. $trans["\xa0"] = '~';
  38. $trans["\xab"] = '&#171;';
  39. $trans["\xbb"] = '&#187;';
  40. $trans["\xb0"] = '&#176;';
  41. break;
  42. }
  43. }
  44. # cette chaine ne peut pas exister,
  45. # cf. TYPO_PROTECTEUR dans inc/texte
  46. $pro = "-\x2-";
  47. $t = str_replace(array_keys($trans), array_values($trans), $t);
  48. # la typo du ; risque de clasher avec les entites &xxx;
  49. if (strpos($t, ';') !== false) {
  50. $t = str_replace(';', '~;', $t);
  51. $t = preg_replace(',(&#?[0-9a-z]+)~;,iS', '$1;', $t);
  52. }
  53. /* 2 ; ajout d'insecable */
  54. $t = preg_replace('/&#187;| --?,|(?::| %)(?:\W|$)/S', '~$0', $t);
  55. // {»} guillemet en italiques : ne pas doubler l'insecable
  56. $t = str_replace('~{~', '~{', $t);
  57. $t = str_replace('~}~', '}~', $t);
  58. /* 3 */
  59. $t = preg_replace('/[!?][!?\.]*/S', "$pro~$0", $t, -1, $c);
  60. if ($c) {
  61. $t = preg_replace("/([\[<\(!\?\.])$pro~/S", '$1', $t);
  62. $t = str_replace("$pro", '', $t);
  63. }
  64. /* 4 */
  65. $t = preg_replace('/&#171;|M(?:M?\.|mes?|r\.?|&#176;) |[nN]&#176; /S', '$0~', $t);
  66. if (strpos($t, '~') !== false)
  67. $t = preg_replace("/ *~+ */S", "~", $t);
  68. $t = preg_replace("/--([^-]|$)/S", "$pro&mdash;$1", $t, -1, $c);
  69. if ($c) {
  70. $t = preg_replace("/([-\n])$pro&mdash;/S", "$1--", $t);
  71. $t = str_replace($pro, '', $t);
  72. }
  73. $t = preg_replace(',(' ._PROTOCOLES_STD . ')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S', '$1$3$4', $t);
  74. $t = str_replace('~', '&nbsp;', $t);
  75. return $t;
  76. }