1# 2# 3# Mod�le "texte" 4# 5# Historique 6# 1998/06/15 : pda : conception 7# 1999/06/20 : pda : s�paration du langage HTML 8# 1999/07/02 : pda : simplification 9# 1999/07/25 : pda : int�gration des tableaux de droopy 10# 2007/03/14 : pda/moindrot : cr�ation du mod�le news 11# 2007/03/21 : pda/moindrot : g�n�ration fichier interm�diaire dans les news 12# 2007/04/05 : pda/moindrot : v�rification de l'unicit� du couple date/auteur 13# pour la g�n�ration de la balise guid du RSS 14# 2008/02/22 : pda/moindrot : int�gration dans le mod�le texte standard 15# 16 17# 18# Inclure les directives de formattage de base 19# 20 21inclure-tcl include/html/base.tcl 22 23# 24# Fichier interm�diaire servant � stocker les news pour la g�n�ration 25# - du fichier index.html global 26# - du fichier rss.xml 27# 28 29set fichiernews "/tmp/news.txt" 30 31# 32# Tableau global servant � d�tecter des doublons de news � l'int�rieur 33# d'un fichier htgt 34# 35 36array set tnews {} 37 38############################################################################### 39# Proc�dures de conversion HTML sp�cifiques au mod�le 40############################################################################### 41 42proc htg_titre {} { 43 if [catch {set niveau [htg getnext]} v] then {error $v} 44 check-int $niveau 45 if [catch {set texte [htg getnext]} v] then {error $v} 46 switch $niveau { 47 1 { 48 if {[dans-contexte "rarest"]} then { 49 set r [helem H2 "<br>$texte"] 50 } else { 51 set logo [helem TD \ 52 [helem IMG \ 53 "" \ 54 SRC /images/logo_osiris_print.jpeg ALT "logo" \ 55 ] \ 56 ALIGN center VALIGN top \ 57 ID image-a-imprimer-seulement \ 58 ] 59 set titre [helem TD [helem H2 $texte] ALIGN center VALIGN middle] 60 set r [helem TABLE \ 61 [helem TR "$logo$titre"] \ 62 CELLPADDING 0 CELLSPACING 0 BORDER 0 WIDTH 100% \ 63 ] 64 } 65 66 } 67 default { 68 incr niveau 69 set r [helem H$niveau $texte] 70 } 71 } 72 return $r 73} 74 75# une actu : son contenu est ajout� � un fichier dans /tmp, qui sera 76# r�cup�r�, tri�, d�doublonn� apr�s la compilation du serveur Web. 77 78proc htg_news {} { 79 global fichiernews 80 global tnews 81 82 if [catch {set date [htg getnext]} v] then {error $v} 83 if [catch {set titre [htg getnext]} v] then {error $v} 84 if [catch {set theme [htg getnext]} v] then {error $v} 85 if [catch {set contenu [htg getnext]} v] then {error $v} 86 if [catch {set lien [htg getnext]} v] then {error $v} 87 if [catch {set auteur [htg getnext]} v] then {error $v} 88 89 regsub -all "\n\n" $contenu "<br /><br />" contenu 90 91 # 92 # V�rifier le format de la date et de l'heure 93 # 94 95 if {! [regexp {^[0-9]{2}/[0-9]{2}/[0-9]{4}\s+[0-9]{2}:[0-9]{2}$} $date]} then { 96 error "date et heure '$date' invalides (jj/mm/aaaa hh:mm)" 97 } 98 99 # 100 # V�rifier que toutes les News on une date/heure/Auteur unique 101 # 102 103 if {[info exists tnews($date$auteur)]} { 104 error "Une news ayant une date '$date' et un auteur '$auteur' identique a �t� trouv�e" 105 } 106 set tnews($date$auteur) "" 107 108 # 109 # Recopier la nouvelle dans le fichier news.txt 110 # 111 112 set fd [open $fichiernews "a"] 113 puts $fd [list $date $titre $theme $contenu $lien $auteur] 114 close $fd 115 116 # 117 # G�n�rer le code HTML : 118 # 119 # <div class="texte-news"> 120 # <a name="$date_ancre/$auteur"> 121 # <h3> 122 # <span class="news-date">[$date]</span> 123 # <span class="news-titre">$titre</span> 124 # <span class="news-theme">($theme)</span> 125 # </h3> 126 # </a> 127 # <p>$contenu <span class="news-qui">[$auteur]</span></p> 128 # <p>Voir aussi : <a href="$lien">$lien</a></p> 129 # </div> 130 # 131 132 regsub -all " " $date "/" date_ancre 133 134 set r1 "" 135 append r1 [helem SPAN "\[$date\]" CLASS news-date] 136 append r1 "\n" 137 append r1 [helem SPAN $titre CLASS news-titre] 138 append r1 "\n" 139 append r1 [helem SPAN "($theme)" CLASS news-theme] 140 141 set r2 [helem A [helem H3 $r1] NAME "$date_ancre/$auteur"] 142 143 set r3 $contenu 144 append r3 " " 145 append r3 [helem SPAN "\[$auteur\]" CLASS news-qui] 146 147 set r4 [helem P $r3] 148 149 if {[string equal [string trim $lien] ""]} then { 150 set r6 "" 151 } else { 152 set r5 [helem A $lien HREF $lien] 153 set r6 [helem P "Voir aussi : $r5"] 154 } 155 156 set r [helem DIV "$r2\n$r4\n$r6\n" CLASS texte-news] 157 158 return $r 159} 160 161proc htg_greytab {} { 162 set r [helem TABLE \ 163 [helem TR \ 164 [helem TD "" ALIGN center VALIGN middle] \ 165 ] \ 166 CLASS tab_middle \ 167 BORDER 0 CELLPADDING 5 CELLSPACING 0 WIDTH 100% \ 168 ] 169 return $r 170} 171 172proc htg_partie {} { 173 global partie 174 175 if [catch {set id [htg getnext]} v] then {error $v} 176 if [catch {set texte [htg getnext]} v] then {error $v} 177 set texte [nettoyer-html $texte] 178 179 switch -exact $id { 180 banniere - 181 titrepage { 182 regsub -all "\n" $texte "<br>\n" texte 183 } 184 default { 185 regsub -all "\n\n+" $texte "<p>" texte 186 } 187 } 188 189 set partie($id) $texte 190 return {} 191} 192