# 
# $Id :            $
# $Date :          $
# $Revision :      $
# $Name :          $
# $Source :        $
# 
# modif 22/08/01 prise en compte des touches mortes ` et ^
#          pour la saisie des accents
#          i.e binding de dead_grave en plus de quoteleft, idem pour ^
# modif 21/08/00 rajout break dan les binding pour wish83
# modif 30/09/98 rajout du ugrave et Ugrave dans postaccentuation
# modif 17/09/98 amélioration importante de la postaccentuation
# modif 29/07/98 pour integrer la postaccentuation
# 
package provide stead 2.0

########################################################################
# Definit une variable globale de type liste-4
# 
proc accentsIsoInit {} {
    global accents
    
    
    # # # # asciicircum quotedbl quoteleft quoteright comma
    if {[info exists accents_Iso_InitDone]} {
        return 
    }
    # Le tableau suivant est ne version réduite du tableau présenté
    # à la fin de ce fichier dans lequel seules les caractères français 
    # ont été prévus, ceci de façon à limiter la pollution des binding
    # au minimum.
    # 
    # Modif diam 26/08/99 
    #    Ccedilla     307        <comma><C>    <C><underscore>
    #    ccedilla     347        <comma><c>    <c><underscore>
    # en
    #    Ccedilla     307        <comma><C>    <C><comma>
    #    ccedilla     347        <comma><c>    <c><comma>
    # 
    # Modif diam 04/11/99
    #    Remodif de la cedilla :
    #    <c><underscore> pour la post accentuation, et
    #    <comma><c>  pour la préaccentuation
    #    Ccedilla     307        <comma><C>    <C><underscore>
    #    ccedilla     347        <comma><c>    <c><underscore>
    
    
    # liste multiple de quatre elements de la forme :
    #  XwindowsName   isoOctalValue  parBindingPre  parBindingPost
    set accents(isolist4) {
    
     Agrave       300    <quoteleft><A>    <A><quoteleft>
      Agrave       300    <dead_grave><A>    <A><dead_grave>
     Acircumflex  302  <asciicircum><A>    <A><asciicircum>
      Acircumflex  302  <dead_circumflex><A>    <A><dead_circumflex>
     Atilde       303   <asciitilde><A>    <A><asciitilde>


     Ccedilla     307        <comma><C>    <C><underscore>
     Egrave       310    <quoteleft><E>    <E><quoteleft>
      Egrave       310    <dead_grave><E>    <E><dead_grave>
     Eacute       311   <quoteright><E>    <E><quoteright>
     Ecircumflex  312  <asciicircum><E>    <E><asciicircum>
      Ecircumflex  312  <dead_circumflex><E>    <E><dead_circumflex>
     Ediaeresis   313     <quotedbl><E>    <E><quotedbl>
     Icircumflex  316  <asciicircum><I>    <I><asciicircum>
      Icircumflex  316  <dead_circumflex><I>    <I><dead_circumflex>
     Idiaeresis   317     <quotedbl><I>    <I><quotedbl>

     Ocircumflex  324  <asciicircum><O>    <O><asciicircum>
      Ocircumflex  324  <dead_circumflex><O>    <O><dead_circumflex>


     Ugrave       331    <quoteleft><U>    <U><quoteleft>
      Ugrave       331    <dead_grave><U>    <U><dead_grave>
     Ucircumflex  333  <asciicircum><U>    <U><asciicircum>
      Ucircumflex  333  <dead_circumflex><U>    <U><dead_circumflex>
     Udiaeresis   334     <quotedbl><U>    <U><quotedbl>


     agrave       340    <quoteleft><a>    <a><quoteleft>
      agrave       340    <dead_grave><a>    <a><dead_grave>
     acircumflex  342  <asciicircum><a>    <a><asciicircum>
      acircumflex  342  <dead_circumflex><a>    <a><dead_circumflex>


     ccedilla     347        <comma><c>    <c><underscore>
     egrave       350    <quoteleft><e>    <e><quoteleft>
      egrave       350    <dead_grave><e>   <e><dead_grave>
     eacute       351   <quoteright><e>    <e><quoteright>
     ecircumflex  352  <asciicircum><e>    <e><asciicircum>
      ecircumflex  352  <dead_circumflex><e>    <e><dead_circumflex>
     ediaeresis   353     <quotedbl><e>    <e><quotedbl>
     icircumflex  356  <asciicircum><i>    <i><asciicircum>
      icircumflex  356  <dead_circumflex><i>    <i><dead_circumflex>
     idiaeresis   357     <quotedbl><i>    <i><quotedbl>

     ocircumflex  364  <asciicircum><o>    <o><asciicircum>
      ocircumflex  364  <dead_circumflex><o>    <o><dead_circumflex>


     ugrave       371    <quoteleft><u>    <u><quoteleft>
      ugrave       371    <dead_grave><u>    <u><dead_grave>
     ucircumflex  373  <asciicircum><u>    <u><asciicircum>
      ucircumflex  373  <dead_circumflex><u>    <u><dead_circumflex>
     udiaeresis   374     <quotedbl><u>    <u><quotedbl>
    
    }
    
    # Conversion d'une chaine de la forme "asciicircum" en caractere
    # de la forme "^". A COMPLETER POUR TOUS LES STRINGNAME POSSIBLES
    set accents(nameToCarPair) [list     \
        asciicircum  ^                   \
        dead_circumflex  ^               \
        quotedbl     \"                  \
        quoteleft    `                   \
          dead_grave   `                 \
        quoteright   '                   \
        comma        ,                   \
        asciitilde   ~                   \
        underscore   _                   \
    ]                                 
    
    if {[llength $accents(isolist4)] % 4} {
        error "La liste \"accents(isolist4)\" doit etre multiple de quatre"
    }
    set accents_Iso_InitDone 1
} ;# endproc accentsIsoInit

########################################################################
proc accents_IsoPreBind {{w .main.t}} {

    global accents
    accentsIsoInit
    
    foreach {accentName accentCar} $accents(nameToCarPair) {
        # Ce catch pour windows qui ne connait pas dead_grave...
        catch {
            bind $w <$accentName><space>  \
                "accentsReplacePreviousCarBy $w $accentCar ; break"
            # bind $w <$accentName><space>  \
            #     [list accentsReplacePreviousCarBy $w $accentCar ; break]
        }
    }
    
    # On explore la liste quadruple definisant les accents
    # (sera beaucoup simplifie' dans tcl7.6 avec la cmd foreach 'etendue
    # et les bintags)
    # 
    foreach {XwindowsName isoOctalValue parBindingPre parBindingPost} \
                                                        $accents(isolist4) {

        set iso8bitCar [format "%c" 0$isoOctalValue ]
    
        # puts "$XwindowsName $isoOctalValue $parBindingPre  "
        # puts "   0$isoOctalValue ->$iso8bitCar     $parBindingPre"
        
        # Ce catch pour windows qui ne connait pas dead_grave...
        catch {
            bind $w $parBindingPre  \
                "accentsReplacePreviousCarBy $w $iso8bitCar ; break"  
            # bind $w $parBindingPre  \
            #     [list accentsReplacePreviousCarBy $w $iso8bitCar ; break]
        }

        # Creation du binding d'annulation d'accent (dans le cas ou on veut
        # vraiment taper la chaine "e'" et non l'accent "é" : on doit taper 
        # la séquence "<e><'><BackSpace>"

        # on veut construire "^a" à partir de "<quoteleft><a>"
        regexp {<([a-zA-Z_]+)><([a-zA-Z])>} $parBindingPre all \
                  theAccentName thePrefix  
        
        # Si on ne trouve pas le nom theAccentName  (= <quoteleft>) du 
        # caractere <'> dans le tableau prévu (i.e ne doit jamais 
        # arriver :-), alors on insere ce "<a><quoteleft>" plutot que 
        # autre chose (pour dépistage)
        # 
        set theStringToInsert $parBindingPost
        foreach {accentName accentCar}  $accents(nameToCarPair) {      
           if {"x$accentName" == "x$theAccentName"} {
               # [list] n'est là que pour protéger des caracteres spéciaux
               set theStringToInsert [list $thePrefix$accentCar]
               # on a trouvé notre symbole accent 
               break
           }
        }
          
        # 
        # création du binding d'annulation :
        # On insère "^a" si on a tapé "^a" puis <BackSpace>
        # 
        #         EN COURS DE MEP !!!!!
        # 
        # Ce catch pour windows qui ne connait pas dead_grave...
        catch {
            bind $w $parBindingPre<BackSpace> \
                "accentsReplacePreviousCarBy $w $theStringToInsert ; break"   
            bind $w $parBindingPre<Delete> \
                "accentsReplacePreviousCarBy $w $theStringToInsert ; break"   
            # bind $w $parBindingPre<BackSpace> \
            #     [list accentsReplacePreviousCarBy $w $theStringToInsert ; break]
            # bind $w $parBindingPre<Delete> \
            #     [list accentsReplacePreviousCarBy $w $theStringToInsert ; break]
        }
    }
}

proc accents_IsoPreUnBind {{w .main.t}} {
    accentsIsoInit
    global accents
       
    # Ce catch pour windows qui ne connait pas dead_grave...
    catch {

        # On definit les bindings pour les caracteres de "type" accent
        # 
        foreach accent {
                asciicircum quotedbl quoteleft dead_grave quoteright comma}  {
           bind $w <$accent><$accent>  ""
           bind $w <$accent><space>    ""
        }
        
        # On explore la liste quadruple definisant les accents
        # (sera beaucoup simplifie' dans tcl7.6 avec la cmd foreach 'etendue
        # et les bintags)
        # 
        foreach {XwindowsName isoOctalValue parBindingPre parBindingPost} \
                                                          $accents(isolist4) {
            bind $w $parBindingPre ""
        }   
    }
}

########################################################################
########################################################################
########################################################################
proc accents_IsoPostBind {{w .main.t}} {

    global accents
    accentsIsoInit

    # On explore la liste quadruple definisant les accents
    # (sera beaucoup simplifie dans tcl7.6 avec la cmd foreach 'etendue
    # et les bintags)
    
    foreach {XwindowsName isoOctalValue parBindingPre parBindingPost} \
                                                        $accents(isolist4) {
    
        set iso8bitCar [format "%c" 0$isoOctalValue ]
   
        # puts -nonewline "$i  $XwindowsName $isoOctalValue $parBindingPost  "
        # puts "0$isoOctalValue ->$iso8bitCar     $parBindingPost"
        
        # Ce catch pour windows qui ne connait pas dead_grave...
        catch {
            bind $w $parBindingPost \
                "accentsReplacePreviousCarBy $w $iso8bitCar ; break"   
            # bind $w $parBindingPost \
            #     [list accentsReplacePreviousCarBy $w $iso8bitCar ; break]
        }     
        # Creation du binding d'annulation d'accent (dans le cas ou on veut
        # vraiment taper la chaine "e'" et non l'accent "é" : on doit taper 
        # la séquence "<e><'><BackSpace>"
        
        # on veut construire "a^" à partir de "<a><quoteleft>"
        regexp {<([a-zA-Z])><([a-zA-Z_]+)>} $parBindingPost all \
                  thePrefix   theAccentName
        
        # Si on ne trouve pas le nom theAccentName  (= <quoteleft>) du 
        # caractere <'> dans le tableau prévu (i.e ne doit jamais 
        # arriver :-), alors on insere ce "<a><quoteleft>" plutot que 
        # autre chose (pour dépistage)
        # 
        set theStringToInsert $parBindingPost
        foreach {accentName accentCar}  $accents(nameToCarPair) {      
           if {"x$accentName" == "x$theAccentName"} {
               # [list] n'est là que pour protéger des caracteres spéciaux
               set theStringToInsert [list $thePrefix$accentCar]
               # on a trouvé notre symbole accent 
               break
           }
        }
          
        # 
        # création du binding d'annulation :
        # On insère "a^" si on a tapé "a^" puis <BackSpace>
        # 
        # Ce catch pour windows qui ne connait pas dead_grave...
        catch {
            bind $w $parBindingPost<BackSpace> \
                "accentsReplacePreviousCarBy $w $theStringToInsert ; break"   
            bind $w $parBindingPost<Delete> \
                "accentsReplacePreviousCarBy $w $theStringToInsert ; break"   
            # bind $w $parBindingPost<BackSpace> \
            #     [list accentsReplacePreviousCarBy $w $theStringToInsert ; break]
            # bind $w $parBindingPost<Delete> \
            #     [list accentsReplacePreviousCarBy $w $theStringToInsert ; break]
        }
    } 
}



proc accents_IsoPostUnBind {{w .main.t}} {

  accentsIsoInit
  global accents
  
  
  # On explore la liste quadruple definisant les accents
  # (sera beaucoup simplifie' dans tcl7.6 avec la cmd foreach 'etendue
  # et les bindtags)
  
  foreach {XwindowsName isoOctalValue parBindingPre parBindingPost} \
                                                    $accents(isolist4) {
      bind $w $parBindingPost ""
      
      # on veut construire "a`" à partir de "<a><quoteleft>"
      regexp {<([a-zA-Z])><([a-zA-Z_]+)>} $parBindingPost all \
                    thePrefix   theAccentName
            
      set theStringToInsert $parBindingPost
      
      foreach {accentName accentCar}   $accents(nameToCarPair) {    
         if {"x$accentName" == "x$theAccentName"} {
             set theStringToInsert [list $thePrefix$accentCar]
             # on a trouvé notre symbole accent 
             break
         }
      }
        
      # ANNULATION du binding d'annulation du binfing !!! :     
      bind $w $parBindingPost<BackSpace> ""
      bind $w $parBindingPost<Delete>    ""
  }
}

## accentsReplacePreviousCarBy -
# 
proc accentsReplacePreviousCarBy {w car} {
    $w delete insert-1c 
    $w insert insert $car 
}

########################################################################
########################################################################
########################################################################
#     # Version complète du tableaux des caractères accentués :
#     set accents(isolist4) {
#     
#      Agrave       300    <quoteleft><A>    <A><quoteleft>
#      Aacute       301   <quoteright><A>    <A><quoteright>
#      Acircumflex  302  <asciicircum><A>    <A><asciicircum>
#      Atilde       303   <asciitilde><A>    <A><asciitilde>
#      Adiaeresis   304     <quotedbl><A>    <A><quotedbl>
# 
# 
#      Ccedilla     307        <comma><C>    <C><underscore>
#      Egrave       310    <quoteleft><E>    <E><quoteleft>
#      Eacute       311   <quoteright><E>    <E><quoteright>
#      Ecircumflex  312  <asciicircum><E>    <E><asciicircum>
#      Ediaeresis   313     <quotedbl><E>    <E><quotedbl>
#      Igrave       314    <quoteleft><I>    <I><quoteleft>
#      Iacute       315   <quoteright><I>    <I><quoteright>
#      Icircumflex  316  <asciicircum><I>    <I><asciicircum>
#      Idiaeresis   317     <quotedbl><I>    <I><quotedbl>
# 
#      Ntilde       321   <asciitilde><N>    <N><asciitilde>
#      Ograve       322    <quoteleft><O>    <O><quoteleft>
#      Oacute       323   <quoteright><O>    <O><quoteright>
#      Ocircumflex  324  <asciicircum><O>    <O><asciicircum>
#      Otilde       325   <asciitilde><O>    <O><asciitilde>
#      Odiaeresis   326     <quotedbl><O>    <O><quotedbl>
# 
# 
#      Ugrave       331    <quoteleft><U>    <U><quoteleft>
#      Uacute       332   <quoteright><U>    <U><quoteright>
#      Ucircumflex  333  <asciicircum><U>    <U><asciicircum>
#      Udiaeresis   334     <quotedbl><U>    <U><quotedbl>
#      Yacute       335   <quoteright><Y>    <Y><quoteright>
# 
# 
#      agrave       340    <quoteleft><a>    <a><quoteleft>
#      aacute       341   <quoteright><a>    <a><quoteright>
#      acircumflex  342  <asciicircum><a>    <a><asciicircum>
#      atilde       343   <asciitilde><a>    <a><asciitilde>
#      adiaeresis   344     <quotedbl><a>    <a><quotedbl>
# 
# 
#      ccedilla     347        <comma><c>    <c><underscore>
#      egrave       350    <quoteleft><e>    <e><quoteleft>
#      eacute       351   <quoteright><e>    <e><quoteright>
#      ecircumflex  352  <asciicircum><e>    <e><asciicircum>
#      ediaeresis   353     <quotedbl><e>    <e><quotedbl>
#      igrave       354    <quoteleft><i>    <i><quoteleft>
#      iacute       355   <quoteright><i>    <i><quoteright>
#      icircumflex  356  <asciicircum><i>    <i><asciicircum>
#      idiaeresis   357     <quotedbl><i>    <i><quotedbl>
# 
#      ntilde       361   <asciitilde><n>    <n><asciitilde>
#      ograve       362    <quoteleft><o>    <o><quoteleft>
#      oacute       363   <quoteright><o>    <o><quoteright>
#      ocircumflex  364  <asciicircum><o>    <o><asciicircum>
#      otilde       365   <asciitilde><o>    <o><asciitilde>
#      odiaeresis   366     <quotedbl><o>    <o><quotedbl>
# 
# 
#      ugrave       371    <quoteleft><u>    <u><quoteleft>
#      uacute       372   <quoteright><u>    <u><quoteright>
#      ucircumflex  373  <asciicircum><u>    <u><asciicircum>
#      udiaeresis   374     <quotedbl><u>    <u><quotedbl>
#      yacute       375   <quoteright><y>    <y><quoteright>
# 
#      ydiaeresis   377     <quotedbl><y>    <y><quotedbl>
#     
#     }
########################################################################
########################################################################
########################################################################
# Pour info : Extrait de la FAQ 8bit

# Table du clavier CFr2: (combinaison accent-lettre)
# 
# Lettres mortes :
# 
#  D    O   X     Nom francais           Nom Xt        taper
# 
# 034 \042 0x22 : guillemets           : quotedbl    : ""
# 039 \047 0x27 : apostrophe           : apostrophe  : ''
# 044 \054 0x2C : virgule              : comma       : ,,
# 094 \136 0x5E : accent circonflexe   : asciicircum : ^^
# 096 \140 0x60 : accent grave         : grave       : ``
# 126 \176 0x7E : tilde                : asciitilde  : ~~
# 
# Lettres composees a l'aide de ces lettres mortes :
# 
#  D    O   X     Nom francais           Nom Xt        taper
# 
# 192 \300 0xC0 : A accent grave       : Agrave      : `A
# 193 \301 0xC1 : A accent aigu        : Aacute      : 'A
# 194 \302 0xC2 : A accent circonflexe : Acircumflex : ^A
# 195 \303 0xC3 : A tilde              : Atilde      : ~A
# 196 \304 0xC4 : A trema              : Adiaeresis  : "A
# 197 \305 0xC5
# 198 \306 0xC6
# 199 \307 0xC7 : C cedille            : Ccedilla    : ,C
# 200 \310 0xC8 : E accent grave       : Egrave      : `E
# 201 \311 0xC9 : E accent aigu        : Eacute      : 'E
# 202 \312 0xCA : E accent circonflexe : Ecircumflex : ^E
# 203 \313 0xCB : E trema              : Ediaeresis  : "E
# 204 \314 0xCC : I accent grave       : Igrave      : `I
# 205 \315 0xCD : I accent aigu        : Iacute      : 'I
# 206 \316 0xCE : I accent circonflexe : Icircumflex : ^I
# 207 \317 0xCF : I trema              : Idiaeresis  : "I
# 208 \320 0xD0
# 209 \321 0xD1 : N tilde              : Ntilde      : ~N
# 210 \322 0xD2 : O accent grave       : Ograve      : `O
# 211 \323 0xD3 : O accent aigu        : Oacute      : 'O
# 212 \324 0xD4 : O accent circonflexe : Ocircumflex : ^O
# 213 \325 0xD5 : O tilde              : Otilde      : ~O
# 214 \326 0xD6 : O trema              : Odiaeresis  : "O
# 215 \327 0xD7
# 216 \330 0xD8
# 217 \331 0xD9 : U accent grave       : Ugrave      : `U
# 218 \332 0xDA : U accent aigu        : Uacute      : 'U
# 219 \333 0xDB : U accent circonflexe : Ucircumflex : ^U
# 220 \334 0xDC : U trema              : Udiaeresis  : "U
# 221 \335 0xDD : Y accent aigu        : Yacute      : 'Y
# 222 \336 0xDE
# 223 \337 0xDF
# 224 \340 0xE0 : a accent grave       : agrave      : `a
# 225 \341 0xE1 : a accent aigu        : aacute      : 'a
# 226 \342 0xE2 : a accent circonflexe : acircumflex : ^a
# 227 \343 0xE3 : a tilde              : atilde      : ~a
# 228 \344 0xE4 : a trema              : adiaeresis  : "a
# 229 \345 0xE5
# 230 \346 0xE6
# 231 \347 0xE7 : c cedille            : ccedilla    : ,c
# 232 \350 0xE8 : e accent grave       : egrave      : `e
# 233 \351 0xE9 : e accent aigu        : eacute      : 'e
# 234 \352 0xEA : e accent circonflexe : ecircumflex : ^e
# 235 \353 0xEB : e trema              : ediaeresis  : "e
# 236 \354 0xEC : i accent grave       : igrave      : `i
# 237 \355 0xED : i accent aigu        : iacute      : 'i
# 238 \356 0xEE : i accent circonflexe : icircumflex : ^i
# 239 \357 0xEF : i trema              : idiaeresis  : "i
# 240 \360 0xF0
# 241 \361 0xF1 : n tilde              : ntilde      : ~n
# 242 \362 0xF2 : o accent grave       : ograve      : `o
# 243 \363 0xF3 : o accent aigu        : oacute      : 'o
# 244 \364 0xF4 : o accent circonflexe : ocircumflex : ^o
# 245 \365 0xF5 : o tilde              : otilde      : ~o
# 246 \366 0xF6 : o trema              : odiaeresis  : "o
# 247 \367 0xF7
# 248 \370 0xF8
# 249 \371 0xF9 : u accent grave       : ugrave      : `u
# 250 \372 0xFA : u accent aigu        : uacute      : 'u
# 251 \373 0xFB : u accent circonflexe : ucircumflex : ^u
# 252 \374 0xFC : u trema              : udiaeresis  : "u
# 253 \375 0xFD : y accent aigu        : yacute      : 'y
# 254 \376 0xFE
# 255 \377 0xFF : y trema              : ydiaeresis  : "y

########################################################################
# Caractere ISO 8 bits (> 127) 
# ATTENTION EN CAS DE CORRUPTION DE CE FICHIER !!

# dec : 128 a  160  =>  ascii : { }

# dec : 161  hex : a1 oct 241 ascii : {¡}
# dec : 162  hex : a2 oct 242 ascii : {¢}
# dec : 163  hex : a3 oct 243 ascii : {£}
# dec : 164  hex : a4 oct 244 ascii : {¤}
# dec : 165  hex : a5 oct 245 ascii : {¥}
# dec : 166  hex : a6 oct 246 ascii : {¦}
# dec : 167  hex : a7 oct 247 ascii : {§}
# dec : 168  hex : a8 oct 250 ascii : {¨}
# dec : 169  hex : a9 oct 251 ascii : {©}
# dec : 170  hex : aa oct 252 ascii : {ª}
# dec : 171  hex : ab oct 253 ascii : {«}
# dec : 172  hex : ac oct 254 ascii : {¬}
# dec : 173  hex : ad oct 255 ascii : {­}
# dec : 174  hex : ae oct 256 ascii : {®}
# dec : 175  hex : af oct 257 ascii : {¯}
# dec : 176  hex : b0 oct 260 ascii : {°}
# dec : 177  hex : b1 oct 261 ascii : {±}
# dec : 178  hex : b2 oct 262 ascii : {²}
# dec : 179  hex : b3 oct 263 ascii : {³}
# dec : 180  hex : b4 oct 264 ascii : {´}
# dec : 181  hex : b5 oct 265 ascii : {µ}
# dec : 182  hex : b6 oct 266 ascii : {¶}
# dec : 183  hex : b7 oct 267 ascii : {·}
# dec : 184  hex : b8 oct 270 ascii : {¸}
# dec : 185  hex : b9 oct 271 ascii : {¹}
# dec : 186  hex : ba oct 272 ascii : {º}
# dec : 187  hex : bb oct 273 ascii : {»}
# dec : 188  hex : bc oct 274 ascii : {¼}
# dec : 189  hex : bd oct 275 ascii : {½}
# dec : 190  hex : be oct 276 ascii : {¾}
# dec : 191  hex : bf oct 277 ascii : {¿}
# dec : 192  hex : c0 oct 300 ascii : {À}
# dec : 193  hex : c1 oct 301 ascii : {Á}
# dec : 194  hex : c2 oct 302 ascii : {Â}
# dec : 195  hex : c3 oct 303 ascii : {Ã}
# dec : 196  hex : c4 oct 304 ascii : {Ä}
# dec : 197  hex : c5 oct 305 ascii : {Å}
# dec : 198  hex : c6 oct 306 ascii : {Æ}
# dec : 199  hex : c7 oct 307 ascii : {Ç}
# dec : 200  hex : c8 oct 310 ascii : {È}
# dec : 201  hex : c9 oct 311 ascii : {É}
# dec : 202  hex : ca oct 312 ascii : {Ê}
# dec : 203  hex : cb oct 313 ascii : {Ë}
# dec : 204  hex : cc oct 314 ascii : {Ì}
# dec : 205  hex : cd oct 315 ascii : {Í}
# dec : 206  hex : ce oct 316 ascii : {Î}
# dec : 207  hex : cf oct 317 ascii : {Ï}
# dec : 208  hex : d0 oct 320 ascii : {Ð}
# dec : 209  hex : d1 oct 321 ascii : {Ñ}
# dec : 210  hex : d2 oct 322 ascii : {Ò}
# dec : 211  hex : d3 oct 323 ascii : {Ó}
# dec : 212  hex : d4 oct 324 ascii : {Ô}
# dec : 213  hex : d5 oct 325 ascii : {Õ}
# dec : 214  hex : d6 oct 326 ascii : {Ö}
# dec : 215  hex : d7 oct 327 ascii : {×}
# dec : 216  hex : d8 oct 330 ascii : {Ø}
# dec : 217  hex : d9 oct 331 ascii : {Ù}
# dec : 218  hex : da oct 332 ascii : {Ú}
# dec : 219  hex : db oct 333 ascii : {Û}
# dec : 220  hex : dc oct 334 ascii : {Ü}
# dec : 221  hex : dd oct 335 ascii : {Ý}
# dec : 222  hex : de oct 336 ascii : {Þ}
# dec : 223  hex : df oct 337 ascii : {ß}
# dec : 224  hex : e0 oct 340 ascii : {à}
# dec : 225  hex : e1 oct 341 ascii : {á}
# dec : 226  hex : e2 oct 342 ascii : {â}
# dec : 227  hex : e3 oct 343 ascii : {ã}
# dec : 228  hex : e4 oct 344 ascii : {ä}
# dec : 229  hex : e5 oct 345 ascii : {å}
# dec : 230  hex : e6 oct 346 ascii : {æ}
# dec : 231  hex : e7 oct 347 ascii : {ç}
# dec : 232  hex : e8 oct 350 ascii : {è}
# dec : 233  hex : e9 oct 351 ascii : {é}
# dec : 234  hex : ea oct 352 ascii : {ê}
# dec : 235  hex : eb oct 353 ascii : {ë}
# dec : 236  hex : ec oct 354 ascii : {ì}
# dec : 237  hex : ed oct 355 ascii : {í}
# dec : 238  hex : ee oct 356 ascii : {î}
# dec : 239  hex : ef oct 357 ascii : {ï}
# dec : 240  hex : f0 oct 360 ascii : {ð}
# dec : 241  hex : f1 oct 361 ascii : {ñ}
# dec : 242  hex : f2 oct 362 ascii : {ò}
# dec : 243  hex : f3 oct 363 ascii : {ó}
# dec : 244  hex : f4 oct 364 ascii : {ô}
# dec : 245  hex : f5 oct 365 ascii : {õ}
# dec : 246  hex : f6 oct 366 ascii : {ö}
# dec : 247  hex : f7 oct 367 ascii : {÷}
# dec : 248  hex : f8 oct 370 ascii : {ø}
# dec : 249  hex : f9 oct 371 ascii : {ù}
# dec : 250  hex : fa oct 372 ascii : {ú}
# dec : 251  hex : fb oct 373 ascii : {û}
# dec : 252  hex : fc oct 374 ascii : {ü}
# dec : 253  hex : fd oct 375 ascii : {ý}
# dec : 254  hex : fe oct 376 ascii : {þ}
# dec : 255  hex : ff oct 377 ascii : {ÿ}
# ./
