
Ne lisez pas ce fichier : c'est un pense bete pour moi (diam@ensta.fr)
########################################################################



Gestion des modes :
-------------------

Revoir entierement les electric alias :

- Commencer par refaire quelques procedures d'alias en se passant des 
  electric alias existant,

- puis redfinir une couche de haut niveau

- enfin la construire...

########################################################################
########################################################################
Remplacement des electricAlias actuel : qq ides
------------------------------------------------

Imaginer une proc du style :

    stead:DabbrevDef Java while  \
            -linestart 1  \
            -help "Boucle while ... do (avec indentation auto.) \
            -postcommand {
       # des commandes TCL avec quelques variables prdfinies
       # du style "Chaine de l'abbreviation" position du curseur
       # ... 
       MarkPos "templateString"
    } 

Prvoir pour cette commande une version dense du genre des electricAlias
mais en utilisant le caractere % pour dclenchement.

    stead:DabbrevDef Java while -posttext {if %M$bb\n[i]%M$eb\;\n%M}

########################################################################
########################################################################
# Introduire des file set pour la recherche de procedure, methode, 
# .. d'un meme projet

Puis smodifier cette procedure :

# te:tcl:cmd:go_to_node - selectionne la procedure $p dans le texte $t

proc te:tcl:cmd:go_to_node {p {t .main.t}} {

  global  auto_index
  set methodPat "\n\[ \t\]*(public|private)\[^\n\]+"

  te:alert -text "Searching procedure $p" -title "Tcl"
  set text [$t get 1.0 end]
  if {[regexp -indices "$methodPat" $text n]} {
    te:alert -text "procedure $p found." -title "Tcl"
    $t mark set insert "1.0 + [lindex $n 1] chars"
    catch {$t tag remove sel sel.first sel.last}    
    $t tag add sel "1.0 + [lindex $n 1] chars linestart" \
    "1.0 + [lindex $n 1] chars lineend"
    $t yview -pickplace insert
    te:cmd:set_cursor
    # A FAIRE :
    # te:highlight "1.0 + [lindex $n 1] chars" \
    #              "1.0 + [lindex $n 1] chars lineend"

  } else {
    te:alert -text "procedure $p not found" -title "Tcl"
    set file {}
    catch {set file [lindex $auto_index($p) 1]}
    if {"x$file" != "x"} {
      te:short_msg "Opening file $file"
      exec $stead(exe) $file -command "te:tcl:cmd:go_to_node $p" &
    }
  }
}






########################################################################
########################################################################
###########################################################################
# les procedures d'insertion de template --
# 
# 
proc fortranTempl_block {} {
global EDITPREFS
   
   # On mmorise l'tat de l'diteur en vu d'un undo ventuel
   jedit:cmd:save_checkpoint
   
   # On cherche la colonne courante du point d'insertion
   set ins [.main.t index insert]    ;# retourne par exemple 53.6
   set lin [lindex [split $ins .] 0] ;# retourne la ligne courante : 53
   set col [lindex [split $ins .] 1] ;# retourne la colonne courante : 6
   
   # On place le point d'insertion en fin de la ligne courante
   .main.t mark set insert "insert lineend"
   
   # On recupere le texte de la ligne courante :
   set currentIndent [.main.t get "insert linestart" "insert lineend"]
   
   # Si la ligne courante contient autre chose que des espaces :
   # on commence une nouvelle ligne avec indentation :
   if {![regexp "\[ \t\]*" $currentIndent]} {
      .main.t insert insert "\n[i]"
      set currentIndent [i]
   }

   # On insert un morceau de text :
   .main.t insert insert "block data\n$currentIndent[i]"
   
   # on mmorise cette position pour y revenir plus tard (par <Control-Tab>)
   set stopRing {}
   .main.t mark set stopRing1 [.main.t index insert]
   lappend stopRing stopRing1
   
   # On continue l'insertion d'un morceau de texte :
   .main.t insert insert "\n${currentIndent}end\n${currentIndent}"
   
   # on mmorise cette position pour y revenir plus tard (par <Control-Tab>)
   .main.t mark set stopRing2 [.main.t index insert]
   lappend stopRing stopRing2
    
   # On prcise que l'diteur vient d'tre modifier (pour faire 
   # confirmer si l'on veut quitter), 
   te:tb:mark_dirty .main.t
   # On s'assure que le point d'insertion est visible
   .main.t yview -pickplace insert
   # on met a jour le label (en bas a gauche de stead) qui indique 
   # la position courante
   te:cmd:show_position

} ;# endproc separator

########################################################################
COLORISATION : 

Envisager analyse du fichier (par morceau eventuellement)

########################################################################
Sortir cette procedure du mode asmTMS (apres verif)

# Regexp_definePatternFromList -
# 
# retourne une liste patterne rgulire en fonction d'une liste de mot 
# cls
#
proc Regexp_definePatternFromList {wordSepPat keylist} {

   return (^|${wordSepPat})([join $keylist |])(${wordSepPat}|$)
   
}
########################################################################
