proc MsfToHtml {{FichierMsf ""} {FichierHtml ""}} { if {$FichierMsf==""} { set FichierMsf [ButineArborescence "All" "."] } if {$FichierMsf==""} { return "" } if {$FichierHtml=="-"} { set RetourNom 0 set RetourTexte 1 set FichierHtml "[TmpFile].html" } if {$FichierHtml==""} { set RetourNom 1 set RetourTexte 0 set FichierHtml [FichierPourSaveAs [TmpFile].html] } set FichierDump "[TmpFile].dumpordali" exec ordali -MSF $FichierMsf -Batch -NoCheckSeq -Groupe secator -Dump $FichierDump -Run -Exit if { ! [file exists $FichierDump]} { return "Problem" } HtmlOrdali $FichierDump $FichierHtml if {$RetourTexte} { return [ContenuDuFichier $FichierDump] } if {$RetourNom} { return $FichierHtml } return } proc HtmlOrdali {{FichierDump ""} {FichierHTML ""}} { if {$FichierDump==""} { FaireLire "Please browse for the DumpOrdali file" set FichierDump [ButineArborescence "All" [pwd]] } if {$FichierDump=="" || ![file exists $FichierDump]} { return "" } return [FromDumpOrdaliToCanvasOrHtml [ContenuDuFichier $FichierDump] $FichierHTML] } proc Tagon {Value Index K} { global CouleurTag set CouleurTag $Value } proc Tagoff {Value Index K} { global CouleurTag set CouleurTag "CouleurTagParDefaut" } proc CouleurOrdali {ActionOuFB {LesCouleurs ""} {aTexteHTML ""}} { global CouleurTag global CouleurOrdali global CodeSpanOrdali if {$aTexteHTML!=""} { upvar $aTexteHTML TexteHTML } Wup "Initializes Couleurs if LesCouleurs not empty" Wup "Returns the fg or bg colocouleurordr associated to the current Tag CouleurTag" Wup "Ordali uses Couleurs, Gscope uses Couleurs to create CouleurOrdali" if {$LesCouleurs!=""} { set LesTags [list CouleurTagParDefaut] set CouleurOrdali(CouleurTagParDefaut,fg) "black" set CouleurOrdali(CouleurTagParDefaut,bg) "white" foreach TexteCouleur $LesCouleurs { ScanLaListe [split $TexteCouleur " "] Tag Fore Back lappend LesTags $Tag if {$Fore==""} { set Fore [set CouleurOrdali(CouleurTagParDefaut,fg)] } if {$Back==""} { set Back [set CouleurOrdali(CouleurTagParDefaut,bg)] } set CouleurOrdali($Tag,fg) $Fore set CouleurOrdali($Tag,bg) $Back } } set CodeSpan "" if {$ActionOuFB=="CreateHTML"} { append TexteHTML "\n\n" return } set FB $ActionOuFB if {[info exists CouleurOrdali($CouleurTag,$FB)]} { return [set CouleurOrdali($CouleurTag,$FB)] } if {$FB=="fg"} { return "NoColor" } if {$FB=="bg"} { return "NoColor" } return "UnknownGround" } proc BelleGauche Texte { set BeauTexte [format "%-12s " $Texte] if {[regexp -nocase {[a-z]} $BeauTexte]} { set TexteHTML "$BeauTexte" } else { set TexteHTML $BeauTexte } return $TexteHTML } proc TextOnHTML {Value Index aTextOnHTML} { upvar $aTextOnHTML TextOnHTML global CouleurTag global CodeSpanOrdali global OldY global GaucheOrdali regsub -all {\{|\}} $Value "" Value regsub {\.} $Index " " XY scan $XY "%d %d" Y X if { ! [info exists OldY] || $Y!=$OldY} { append TextOnHTML "\n" set Gauche "" if {[info exists GaucheOrdali($Y)]} { set Gauche [set GaucheOrdali($Y)] } append TextOnHTML [BelleGauche $Gauche] } set OldY $Y set CodeSpan [set CodeSpanOrdali($CouleurTag)] append TextOnHTML "$Value" set PosY $Y set PosX [expr $X+[string length $Value]] return "$PosX $PosY" } proc TextOnCanva {Value Index K DecalX DecalY} { global CouleurTag regsub -all {\{|\}} $Value "" Value if {$Value == ""} { return "0 0"} Wup "Voir PrintOrdali ... pour compatibilite" set TailleFonte 10 set OffsetLettre [font measure [list CourierNew $TailleFonte] Z] set HauteurLettre 14 regsub {\.} $Index " " XY scan $XY "%d %d" Y X set x [expr ( $X + 2 + $DecalX)*$OffsetLettre ] set y [expr ( $Y + 1 + $DecalY)*$HauteurLettre] set FG [CouleurOrdali fg] set BG [CouleurOrdali bg] set fx [expr $x+[font measure [list CourierNew $TailleFonte] $Value]] set fy [expr $y+$HauteurLettre] if {$FG=="NoColor"} { set FG "black" } if {$BG!="NoColor"} { $K create rectangle $x $y $fx $fy -fill $BG -outline $BG } $K create text $x $y -text "$Value" -anchor nw -fill $FG -font [list CourierNew $TailleFonte] set PosX [expr round($fx/$OffsetLettre)] set PosY [expr round($fy/$HauteurLettre)] return "$PosX $PosY" } proc FromDumpOrdaliToCanvasOrHtml {Dump {KorH ""} {DecalX 0} {DecalY 0} {aExtremeX ""} {aExtremeY ""}} { global CouleurTag global GaucheOrdali if {$aExtremeX!=""} { upvar $aExtremeX ExtremeX } if {$aExtremeY!=""} { upvar $aExtremeY ExtremeY } set TexteHTML "" if {[regexp {^\.} $KorH] && ![regexp "/" $$KorH]} { set K $KorH set OnCanva 1 set OnHTML 0 } else { set FichierHTML $KorH set K "" if {$FichierHTML==""} { set FichierHTML "[TmpFile ordali].html" } set OnCanva 0 set OnHTML 1 } set CouleurTag "CouleurTagParDefaut" set LeDump [split $Dump "\n"] set Fonte [ValeurDeLaBalise "font" Dump "Rogner"] set Tags [ValeurDeLaBalise "tags" Dump "Rogner"] set Regle [ValeurDeLaBalise "regle" Dump "Rogner"] set Noms [ValeurDeLaBalise "noms" Dump "Rogner"] set Texte [ValeurDeLaBalise "texte" Dump "Rogner"] regsub -all "\n" $Regle "" Regle regsub -all "\n" $Noms "" Noms regsub -all "\n" $Texte "" Texte eval set LesCouleurs [list $Tags] if {$OnCanva} { CouleurOrdali "Create" $LesCouleurs } if {$OnHTML } { append TexteHTML "Ordali" CouleurOrdali "CreateHTML" $LesCouleurs TexteHTML append TexteHTML "\n
"
    }

    set AttendFermante 0
    set ExtremeX $DecalX
    set ExtremeY $DecalY
    
    foreach {Action TexteDesToken} [list \
	    "Nommer" $Noms  \
	    "RegleH" $Regle \
	    "Taguer" $Texte \
	    "RegleB" $Regle ] {
	foreach Token [split $TexteDesToken " "] {
	    if {[regexp {\}$} $Token]} {
		set AttendFermante 0
		if {[info exists Mot]} {
		    append Mot " $Token"
		} else {
		    set Mot $Token
		}
	    }
	    if {$AttendFermante} {
		append Mot " $Token"
		continue
	    }
	    if { ! [info exists Mot] && [regexp {^\{} $Token]} {
		set AttendFermante 1
		set Mot $Token
		continue
	    }
	    
	    if { ! [info exists Mot]} {
		set Mot $Token
	    }
	    
	    if { ! [info exists Key]} {
		set Key $Mot
		unset Mot
		continue
	    }
	    if { ! [info exists Value]} {
		set Value $Mot
		unset Mot
		continue
	    }
	    set Index $Mot
	    
	    switch $Key {
		"tagon"   { Tagon  $Value $Index $K } 
		"tagoff"  { Tagoff $Value $Index $K } 
		"text"    {
		    if {$OnCanva} { set LoinXY [TextOnCanva $Value $Index $K $DecalX $DecalY]}
		    if {$OnHTML } {
			if {$Action=="RegleH"} { set Index [expr -$Index] }
			if {$Action=="RegleB"} { set Index [expr  $Index + 9999.0] }
			if {$Action=="Nommer"} {
			    set Y [expr int($Index)]
			    regsub -all -nocase {[^a-z0-9_]} $Value "" Nom
			    set GaucheOrdali($Y) $Nom
			} else {
			    set LoinXY [TextOnHTML  $Value $Index TexteHTML]
			    scan $LoinXY "%d %d" LoinX LoinY
			    set ExtremeX [Maxi $ExtremeX $LoinX]
			    set ExtremeY [Maxi $ExtremeY $LoinY]
			}
		    }
		} 
		"default" { }
	    }
	    unset Key Value Index Mot
	}
    }
    incr ExtremeX 1
    incr ExtremeY 1
    if {$OnHTML} {
	append TexteHTML "\n
\n\n" if {$FichierHTML=="RetourneTexteHTML"} { return $TexteHTML } else { return [Sauve $TexteHTML dans $FichierHTML] } } return $K } proc PrintOrdali w { global LongueurTotale Sequences set NombreDeSequences [array size Sequences] scan [$w.lessequences.scrollxseq get] "%f %f" xMin xMax scan [$w.lessequences.scrolly get] "%f %f" yMin yMax set DebutX [Maxi 0 [expr int($LongueurTotale*$xMin)-1]] set FinX [expr round($LongueurTotale*$xMax)] set DebutY [expr int($NombreDeSequences*$yMin)+1] set FinY [expr round($NombreDeSequences*$yMax)+1] set DumpLesNoms [$w.lessequences.textnomseq dump -all $DebutY.0 $FinY.end] set DumpSequence {} for {set Y $DebutY} {$Y<=$FinY} {incr Y} { set DumpSequence [concat $DumpSequence [$w.lessequences.textsequence dump -all $Y.$DebutX $Y.$FinX]] } set DumpRegle {} foreach Y {1 2 3} { set DumpRegle [concat $DumpRegle [$w.lessequences.regle dump -all $Y.$DebutX $Y.$FinX]] } set K [UnCanva 1024 512] set DecalX 0 set DecalY [expr -$DebutY] set K [FromDumpOrdaliToCanvasOrHtml $DumpLesNoms $K $DecalX $DecalY RetDecalX RetDecalY] set DecalX [expr $RetDecalX-$DebutX+1] set K [FromDumpOrdaliToCanvasOrHtml $DumpSequence $K $DecalX $DecalY RetBidonX RetDecalY] set DecalY [expr $RetDecalY-2] set K [FromDumpOrdaliToCanvasOrHtml $DumpRegle $K $DecalX $DecalY RetMaximX RetMaximY] Wup "Voir Text ... pour compatibilite" set TailleFonte 10 set OffsetLettre [font measure [list Courier $TailleFonte] Z] set HauteurLettre 14 set SizeX [expr $RetMaximX*$OffsetLettre] set SizeY [expr $RetMaximY*$HauteurLettre] $K configure -scrollregion [list 0 0 $SizeX $SizeY] $K configure -width $SizeX -height $SizeY set Id [$K find withtag "Cadre"] $K coords $Id 0 0 $SizeX $SizeY $K configure -background "white" return $K }