Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
#!/usr/bin/expectk
#!/usr/bin/wish

# (find-angg "LATEX/desenhos.014" "godement")
# (defun goto-block (s) (goto-position (format "«%s»" s)))
# (defun find-diag (s) (find-fline "~/LATEX/desenhos.014" (format "\nepsfile %s\n" s)))
# (find-diag "godement")
# (find-vldifile "tk8.0-dev.list")
#
# (find-es "tcl" "newdiaglib")
# (find-fline "~/LATEX/basiclib.013")
# (find-fline "~/LATEX/diaglib.013")
# (find-fline "~/LATEX/diaglib.013" "proc setdragvars")
# (find-man "3tk canvas" "pathName bind")
# (find-man "3tk bind" "BINDING SCRIPTS AND SUBSTITUTIONS")
# (find-fline "~/TK/freehand")
# (find-fline "~/LATEX/desenhos.013" "epsfile godement")
# (find-man "3tk canvas" "postscript")
# (find-man "3tk canvas" "bbox")
#
# Index:
# «.basic_window»	(to "basic_window")
# «.postscript»		(to "postscript")
# «.file_I/O»		(to "file_I/O")
# «.corners»		(to "corners")
# «.vector_math»	(to "vector_math")
# «.code_arrays»	(to "code_arrays")
# «.text_objects»	(to "text_objects")
# «.arrow_objects»	(to "arrow_objects")
# «.drag»		(to "drag")
# «.compatibility_hacks»  (to "compatibility_hacks")
# «.diagxy_hacks»	(to "diagxy_hacks")
# «.top_level»		(to "top_level")
#
# Code:

# «basic_window»  (to ".basic_window")

canvas .c -width 500 -height 350 -relief sunken -borderwidth 2
pack .c -expand yes -fill both -side top

frame  .buttons
button .buttons.beD -text {eval $OnDump} -command {eval_OnDump}
button .buttons.bD  -text {$OnDump} -command {mybigputs $OnDump}
button .buttons.bC  -text {$OnCreate} -command {mybigputs $OnCreate}
button .buttons.bU  -text {$OnUpdate} -command {mybigputs $OnUpdate}
button .buttons.bo  -text {>stdout} -command {toggle_output}
pack   .buttons.beD .buttons.bD .buttons.bC .buttons.bU .buttons.bo \
       -side left

frame  .buttons2
button .buttons2.bb -text {blackify} -command {blackify}
button .buttons2.ca -text {clear auxiliaries} -command {clear_auxiliaries}
button .buttons2.bp -text {>.eps} -command {save_eps}
button .buttons2.bq -text {quit} -command {exit}
pack   .buttons2.bb .buttons2.ca .buttons2.bp .buttons2.bq \
       -side left

pack .buttons .buttons2 -after .c





# «postscript»  (to ".postscript")
#
# epsfile: set the name of the .eps file and the window title
# blackify, clear_auxiliaries: prepare to save the .eps
# save_eps: do the save

proc epsfile {s} {
  global psfile
  set psfile "~/LATEX/eps/${s}.eps"
  tk appname "${s}.eps"
}
epsfile o

proc blackify {} {
  .c itemconfigure all -fill black
}
proc clear_auxiliaries {} {
  .c delete _aux_
}
proc save_eps {} {
  global psfile
  foreach {xl yu xr yd} [.c bbox all] {}
  .c postscript \
    -x $xl -y $yu -width [expr $xr-$xl] -height [expr $yd-$yu] \
     -pageanchor nw -file $psfile
}



# «file_I/O»  (to ".file_I/O")

set Output {}		;# meaning dump to stdout
proc toggle_output {} {
  global Output env
  if {$Output==""} {
    set Output $env(HOME)/o; .buttons.bo configure -text ">~/o"
  } else {
    set Output ""; .buttons.bo configure -text ">stdout"
  }
}
proc eval_OnDump {} {
  global OnDump BigStr
  set BigStr {}
  uplevel #0 $OnDump
  mybigputs $BigStr
}

proc myputs {args} {
  global Output BigStr
  if {$Output==""} {puts [join $args]} else {append BigStr "[join $args]\n"}
}
proc mybigputs {str} {
  global Output
  if {$Output==""} {puts $str} else {writefile $Output $str}
}

proc readfile {fname} {
  set channel [open $fname r]; set bigstr [read $channel]; close $channel
  return $bigstr
}
proc writefile {fname bigstr} {
  set channel [open $fname w]; puts -nonewline $channel $bigstr; close $channel
}



# «corners»  (to ".corners")

proc bbcorner {tag rness upness} {
  foreach {xl yu xr yd} [.c bbox $tag] {}
  return "[expr ($xl+$xr)/2+$rness*($xr-$xl)/2]\
          [expr ($yd+$yu)/2-$upness*($yu-$yd)/2]"
}
foreach {dir xness yness} {
  nw  -1 -1    nnw -0.5 -1   n 0 -1   nne 0.5 -1   ne  1 -1
  nww -1 -0.5                                      nee 1 -0.5
  w   -1  0                  c 0  0                e   1  0  
  sww -1  0.5                                      see 1  0.5
  sw  -1  1    ssw -0.5  1   s 0  1   sse 0.5  1   se  1  1   } {
    set Xness($dir) $xness
    set Yness($dir) $yness
}
proc ^ {dir tag} {
  global Xness Yness
  bbcorner $tag $Xness($dir) $Yness($dir)
}



# «vector_math»  (to ".vector_math")

proc v+ {a b args} {
  forach {da db} $args {
    set a [expr $a+$da]
    set b [expr $b+$db]
  }
  return "$a $b"
}
proc v- {a b args} {
  forach {da db} $args {
    set a [expr $a-$da]
    set b [expr $b-$db]
  }
  return "$a $b"
}
proc v*v {a b c d} {
  return "[expr $a*$c] [expr $b*$d]"
}
proc s*v {s a b} {
  return "[expr $s*$a] [expr $s*$b]"
}

# aa--->bb
#   cc--->dd
#
proc vdif+ {aa bb cc} {
  foreach {a1 a2 b1 b2 c1 c2} "$aa $bb $cc" {}
  return "[expr $c1+$b1-$a1] [expr $c2+$b2-$a2]"
}



# «code_arrays»  (to ".code_arrays")

set Tags {}
set OnCreate ""
set OnUpdate ""
set OnDump ""
# ArrowOptions: array of "create line" options
# Drags: array of tags
# XY: array of pairs of numbers

proc codefor {tag} {
  global Tags
  if {[lsearch $Tags $tag]==-1} {
    lappend Tags $tag
  }
}
proc oncreate {args} {
  global OnCreate
  append OnCreate "[join $args]\n"
  # puts [join $args]
  uplevel #0 [join $args]
}
proc onupdate {args} {
  global OnUpdate
  append OnUpdate "[join $args]\n"
}

proc j {args} {
  uplevel #0 eval join $args
}



# «text_objects»  (to ".text_objects")

proc metatext {tag text code} {
  codefor  $tag
  oncreate .c create text [j $code] -text [list $text] -tag $tag -fill brown4
  onupdate eval .c coords $tag \$XY($tag)
}
proc freetext {args} {
  global XY Drags OnDump
  foreach {tag text x y} $args {
    set XY($tag) "$x $y"
    metatext $tag $text \$XY($tag)
    draggable $tag
    append OnDump "myputs \"freetext $tag [list $text] \$XY($tag)\"\n"
  }
}
proc deltatext {a b args} {
  foreach {c d dtxt drags} $args {
    codefor $d
    oncreate set XY($d) "\[vdif+ \$XY($a) \$XY($b) \$XY($c)\]"
    onupdate set XY($d) "\[vdif+ \$XY($a) \$XY($b) \$XY($c)\]"
    metatext $d $dtxt \$XY($d)
    draggable $d
  }
}

# For when we're too lazy to guess the coordinates
proc float {x y args} {
  foreach {tag text} $args {
    freetext $tag $text $x $y
    incr y 12
  }
}



# «arrow_objects»  (to ".arrow_objects")

set ArrowOptions(m) {-arrow last -width 2 -arrowshape {6 7 2} -smooth 1}
set ArrowOptions(bij) {-arrow both -width 2 -arrowshape {6 7 2} -smooth 1}
set ArrowOptions(R) {-arrow last -width 4 -arrowshape {8 8 3} -smooth 1}
set ArrowOptions(L) {-arrow last -width 4 -arrowshape {8 8 3} -smooth 1 \
  -stipple @gray50.bmp}
set ArrowOptions(T) {-arrow last -width 4 -arrowshape {8 8 3} -smooth 1 \
  -stipple @gray50xx.bmp}
set ArrowOptions(linha) {-width 2 -smooth 1}
set ArrowOptions(thin) {-arrow last -width 1 -arrowshape {3 4 1} -smooth 1}

proc metaarrow {tag code {type m}} {
  global ArrowOptions
  codefor  $tag
  oncreate eval .c create line $code -tag $tag \$ArrowOptions($type)
  onupdate eval .c coords $tag $code
}
proc metaarrow' {A e w B {mid ""} {type m}} {
  set tag $A$mid$B
  metaarrow $tag "\[^ $e $A\] \[^ $w $B\]" $type
}
proc doarrows {type Args} {
  foreach {a b dir dir2} $Args {
    metaarrow' $a $dir $dir2 $b {} $type
  }
}
proc morf  {args} { doarrows m $args }
proc bij   {args} { doarrows bij $args }
proc R     {args} { doarrows R $args }
proc L     {args} { doarrows L $args }
proc T     {args} { doarrows T $args }
proc linha {args} { doarrows linha $args }
proc thin  {args} { doarrows thin $args }

proc samedirs {e w morf args} {
  foreach {a b} $args {
    $morf $a $b $e $w
  }
}


# «drag»  (to ".drag")

proc draggable {tag {passives {}}} {
  global Drags
  set Drags($tag) "$tag $passives"
  .c bind $tag <1>         "set oldxy \"%x %y\""
  .c bind $tag <B1-Motion> "bigdrag {%x %y} $tag"
  .c bind $tag
}
proc bigdrag {newxy tag} {
  global Drags XY oldxy OnUpdate
  foreach passive $Drags($tag) {
    set XY($passive) [vdif+ $oldxy $newxy $XY($passive)]
  }
  set oldxy $newxy
  eval $OnUpdate
}

proc setdragxy {tag args} {
  global Drags
  set Drags($tag) "$tag $args"
}



# «compatibility_hacks»  (to ".compatibility_hacks")

proc aux {args} {
  foreach tag $args {
    oncreate .c addtag _aux_ withtag $tag
  }
}
proc auxiliary {args} {
  global OnDump
  set tags {}
  foreach {tag text x y} $args {
    freetext $tag $text $x $y
    lappend tags $tag
  }
  eval aux $tags
  append OnDump "myputs \"aux $tags\"\n"
}


# Pras adjunções quadradas:
#
proc vtorre' {x y at a bt b args} {
  set y [expr $y + 40]
  freetext $bt $b $x $y
  morf $at $bt s n
  if [llength $args] {eval vtorre' $x $y $bt $b $args}
}
proc vtorre {x y at a bt b args} {
  freetext $at $a $x $y
  eval vtorre' $x $y $at $a $bt $b $args
}
proc R' {at aRt args} {
  R $at $aRt e w
  if [llength $args] {eval R' $args}
}
proc L' {at aLt args} {
  L $at $aLt w e
  if [llength $args] {eval L' $args}
}

proc quadrado-adj {x y tag1 txt1 tag2 txt2 tag3 txt3 tag4 txt4} {
  freetext $tag1 $txt1 $x $y
  freetext $tag2 $txt2 [expr $x + 40] $y
  freetext $tag3 $txt3 $x [expr $y + 40]
  freetext $tag4 $txt4 [expr $x + 40] [expr $y + 40]
  R $tag1 $tag2 e w
  morf $tag1 $tag3 s n
  morf $tag2 $tag4 s n
  L $tag4 $tag3 w e
  auxiliary 1_$tag1$tag4 * [expr $x + 5] [expr $y + 20]
  auxiliary 2_$tag1$tag4 * [expr $x + 35] [expr $y + 20]
  bij 1_$tag1$tag4 2_$tag1$tag4 e w
  setdragxy $tag1 $tag2 $tag3 $tag4 1_$tag1$tag4 2_$tag1$tag4
}
proc hmorf {args} {
  eval samedirs e w morf $args
}
proc reflec {x y at a bt b {ct ""} {c ""}} {
  freetext $at $a $x $y
  freetext $bt $b $x [expr $y + 40]
  L $at $bt s n
  if {" $ct" != " "} {
    freetext $ct $c [expr $x + 20] [expr $y + 70]
    morf $ct $bt nw s
  }
}

# Pro caso invertido (com evs):
proc reflec' {x y at a bt b {ct ""} {c ""}} {
  freetext $at $a $x $y
  freetext $bt $b $x [expr $y + 50]
  R $at $bt s n
  if {" $ct" != " "} {
    freetext $ct $c [expr $x + 44] [expr $y + 80]
    morf $bt $ct sse nw
  }
}
proc hmorf' {args} {
  eval samedirs w e morf $args
}

proc quadrado {x y tag1 txt1 tag2 txt2 tag3 txt3 tag4 txt4} {
  freetext $tag1 $txt1 $x $y
  freetext $tag2 $txt2 [expr $x + 40] $y
  freetext $tag3 $txt3 $x [expr $y + 40]
  freetext $tag4 $txt4 [expr $x + 40] [expr $y + 40]
  morf $tag1 $tag2 e w
  morf $tag1 $tag3 s n
  morf $tag2 $tag4 s n
  morf $tag3 $tag4 e w
  setdragxy $tag1 $tag2 $tag3 $tag4
}

proc ^+ {xy args} {
  foreach {x y} $xy {}
  set xys {}
  foreach {dx dy} $args {
    lappend xys [expr $x + $dx] [expr $y + $dy]
  }
  return $xys
} 

set ArrowOptions(gmorf) {-arrow last -width 2 -arrowshape {6 7 2} \
  -smooth 1 -stipple @gray50.bmp}
set ArrowOptions(gbij) {-arrow both -width 2 -arrowshape {6 7 2} \
  -smooth 1 -stipple @gray50.bmp}
proc gmorf {args} {doarrows gmorf $args}
proc gbij  {args} {doarrows gbij  $args}

proc fibrado {x y tag1 txt1 tag2 txt2 tag3 txt3 tag4 txt4} {
  freetext $tag1 $txt1 $x $y
  freetext $tag2 $txt2 [expr $x + 40] $y
  freetext $tag3 $txt3 $x [expr $y + 40]
  freetext $tag4 $txt4 [expr $x + 40] [expr $y + 40]
  morf $tag2 $tag1 w e
  gbij $tag1 $tag3 s n
  gbij $tag2 $tag4 s n
  morf $tag4 $tag3 w e
  setdragxy $tag1 $tag2 $tag3 $tag4
}

proc kite {x y  a as  ar ars  arl arls  b bs  bl bls} {
  reflec $x $y  $ar $ars  $arl $arls  $a $as
  reflec [expr $x+40] $y  $b $bs  $bl $bls
  hmorf $ar $b  $arl $bl
  morf $a $bl  ne s
}

proc kleislirow {x y args} {
  foreach dx {0 40 78 122} t $args {
    if {$t != ""} {
      freetext $t $t [expr $x+$dx] $y
    }
  }
}

set ArrowOptions(thinlinha) {-width 1 -smooth 1}
proc thinlinha  {args} { doarrows thinlinha $args }




# «diagxy_hacks»  (to ".diagxy_hacks")
# (find-angg "LATEX/desenhos.014" "diagxy1")

proc dxybuttons {} {
  frame  .buttons3
  button .buttons3.bDxyD -text {$OnDxyDump} -command {mybigputs $OnDxyDump}
  button .buttons3.beDxyD -text {eval $OnDxyDump} \
            -command {mybigputs [eval $OnDxyDump]}
  button .buttons3.savetmpdiag -text {...>~/LATEX/tmpdiag.tex} \
	    -command { ;# Aaaargh! Hackish!
	      global env Output BigStr
	      set OldOutput $Output
	      set Output $env(HOME)/LATEX/tmpdiag.tex
	      set BigStr ""
	      mybigputs [eval $OnDxyDump]
	      set Output $OldOutput
            }
  pack   .buttons3.bDxyD .buttons3.beDxyD .buttons3.savetmpdiag -side left
  pack   .buttons3 -after .buttons2
}

set OnDxyDump ""
set dxyorigx 100
set dxyorigy 100
set dxyscale 5
# array: DxyTeX, tag -> TeXcode (the text of the node)

proc dxytext {tag text tex x y {nodump {}}} {
  global XY Drags OnDump OnDxyDump DxyTeX
  set XY($tag) "$x $y"
  set DxyTeX($tag) $tex
  metatext $tag $text \$XY($tag)
  draggable $tag
  if {$nodump==""} {
    append OnDump "myputs dxytext $tag [list $text] \[[list list $tex]\] \$XY($tag)\n"
  }
}
proc tktodxy {tkxy} {
  global dxyorigx dxyorigy dxyscale
  foreach {x y} $tkxy {}
  return "[expr $dxyscale*($x-$dxyorigx)],[expr -$dxyscale*($y-$dxyorigy)]"
}
proc tktodxydelta {tkxy1 tkxy2} {
  global dxyscale
  foreach {x1 y1 x2 y2} "$tkxy1 $tkxy2" {}
  return "[expr $dxyscale*($x2-$x1)],[expr -$dxyscale*($y2-$y1)]"
}
# (find-diagxyfile "diaxydoc.tex" "learn mainly by example")
# (find-diagxyfile "diaxydoc.tex" "\\morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]")
#
proc putsdxymorphism {tag1 tag2 arrowname placeshape} {
  global XY DxyTeX
  set start [tktodxy $XY($tag1)]
  set delta [tktodxydelta $XY($tag1) $XY($tag2)]
  myputs "  \\morphism($start)$placeshape<$delta>\[$DxyTeX($tag1)`$DxyTeX($tag2);$arrowname\]"
}
proc dxymorf {tag1 tag2 {arrowname {}} {placeshape {}}} {
  global OnDxyDump
  append OnDxyDump "[list putsdxymorphism $tag1 $tag2 $arrowname $placeshape]\n"
}

set tmptagcounter 0
# example: dxyfloatmorf <1 1>   f |a|/|->/ 100 100 120 120
proc dxyfloatmorf {text1 text2 tex1 tex2 arrowname placeshape x1 y1 x2 y2} {
  global tmptagcounter OnDump
  set tag1 _tmp$tmptagcounter; incr tmptagcounter
  set tag2 _tmp$tmptagcounter; incr tmptagcounter
  dxytext $tag1 $text1 "\\phantom{$tex1}" $x1 $y1 nodump
  dxytext $tag2 $text2 "\\phantom{$tex2}" $x2 $y2 nodump
  dxymorf $tag1 $tag2 $arrowname $placeshape
  set stuff [concat [list $text1] [list $text2] [list $tex1] [list $tex2] \
	               [list $arrowname] [list $placeshape] \
                    \$XY($tag1) \$XY($tag2)
            ]
  append OnDump "myputs dxyfloatmorf $stuff\n"
}

proc putsdxyplace {tag} {
  global XY DxyTeX
  myputs "  \\place([tktodxy $XY($tag)])\[{$DxyTeX($tag)}\]"
}
proc dxyplace {tag text tex x y} {
  global OnDump OnDxyDump
  dxytext $tag $text $tex $x $y nodump
  append OnDxyDump "putsdxyplace $tag\n"
  append OnDump "myputs dxyplace $tag $text [list $tex] \$XY($tag)\n"
}


proc dxysquare {prefix x1 x2 y1 y2
    la ta lb tb lc tc ld td
    tab psab tac psac tbd psbd tcd pscd } {
  dxytext ${prefix}a $la $ta $x1 $y1
  dxytext ${prefix}b $lb $tb $x2 $y1
  dxytext ${prefix}c $lc $tc $x1 $y2
  dxytext ${prefix}d $ld $td $x2 $y2
  dxymorf ${prefix}a ${prefix}b $tab $psab
  dxymorf ${prefix}a ${prefix}c $tac $psac
  dxymorf ${prefix}b ${prefix}d $tbd $psbd
  dxymorf ${prefix}c ${prefix}d $tcd $pscd
}
proc dxy2squares {prefix x1 x2 x3 y1 y2
    la ta lb tb lc tc  ld td le te lf tf
    tab psab tbc psbc  tad psad tbe psbe tcf pscf  tde psde tef psef } {
  dxytext ${prefix}a $la $ta $x1 $y1
  dxytext ${prefix}b $lb $tb $x2 $y1
  dxytext ${prefix}c $lc $tc $x3 $y1
  dxytext ${prefix}d $ld $td $x1 $y2
  dxytext ${prefix}e $le $te $x2 $y2
  dxytext ${prefix}f $lf $tf $x3 $y2
  dxymorf ${prefix}a ${prefix}b $tab $psab
  dxymorf ${prefix}b ${prefix}c $tbc $psbc
  dxymorf ${prefix}a ${prefix}d $tad $psad
  dxymorf ${prefix}b ${prefix}e $tbe $psbe
  dxymorf ${prefix}c ${prefix}f $tcf $pscf
  dxymorf ${prefix}d ${prefix}e $tde $psde
  dxymorf ${prefix}e ${prefix}f $tef $psef
}
proc dxy4squares {prefix x1 x2 x3 x4 x5 y1 y2
    la ta lb tb lc tc ld td le te   lf tf lg tg lh th li ti lj tj
    tab psab tbc psbc tcd pscd tde psde
    taf psaf tbg psbg tch psch tdi psdi tej psej
    tfg psfg tgh psgh thi pshi tij psij } {
  dxytext ${prefix}a $la $ta $x1 $y1
  dxytext ${prefix}b $lb $tb $x2 $y1
  dxytext ${prefix}c $lc $tc $x3 $y1
  dxytext ${prefix}d $ld $td $x4 $y1
  dxytext ${prefix}e $le $te $x5 $y1
  dxytext ${prefix}f $lf $tf $x1 $y2
  dxytext ${prefix}g $lg $tg $x2 $y2
  dxytext ${prefix}h $lh $th $x3 $y2
  dxytext ${prefix}i $li $ti $x4 $y2
  dxytext ${prefix}j $lj $tj $x5 $y2
  dxymorf ${prefix}a ${prefix}b $tab $psab
  dxymorf ${prefix}b ${prefix}c $tbc $psbc
  dxymorf ${prefix}c ${prefix}d $tcd $pscd
  dxymorf ${prefix}d ${prefix}e $tde $psde
  dxymorf ${prefix}a ${prefix}f $taf $psaf
  dxymorf ${prefix}b ${prefix}g $tbg $psbg
  dxymorf ${prefix}c ${prefix}h $tch $psch
  dxymorf ${prefix}d ${prefix}i $tdi $psdi
  dxymorf ${prefix}e ${prefix}j $tej $psej
  dxymorf ${prefix}f ${prefix}g $tfg $psfg
  dxymorf ${prefix}g ${prefix}h $tgh $psgh
  dxymorf ${prefix}h ${prefix}i $thi $pshi
  dxymorf ${prefix}i ${prefix}j $tij $psij
}
proc dxytriangle {prefix xa ya xb yb xc yc
    la ta  lb tb  lc tc
    tab psab tac psac tbc psbc } {
  dxytext ${prefix}a $la $ta $xa $ya
  dxytext ${prefix}b $lb $tb $xb $yb
  dxytext ${prefix}c $lc $tc $xc $yc
  dxymorf ${prefix}a ${prefix}b $tab $psab
  dxymorf ${prefix}a ${prefix}c $tac $psac
  dxymorf ${prefix}b ${prefix}c $tbc $psbc
}
proc dxynttriangle {prefix xa ya xb yb xc yc xd yd
    la ta  lb tb  lc tc  ld td
    tab psab  tac psac  tbc psbc  tad psad } {
  if {$xd==""} { set xd [expr ($xb+$xc)/2] }
  if {$yd==""} { set yd [expr ($yb+$yc)/2] }
  dxytext ${prefix}a $la $ta $xa $ya
  dxytext ${prefix}b $lb $tb $xb $yb
  dxytext ${prefix}c $lc $tc $xc $yc
  dxytext ${prefix}d $ld $td $xd $yd
  dxymorf ${prefix}a ${prefix}b $tab $psab
  dxymorf ${prefix}a ${prefix}c $tac $psac
  dxymorf ${prefix}b ${prefix}c $tbc $psbc
  dxymorf ${prefix}a ${prefix}d $tad $psad
}

  

# «top_level»  (to ".top_level")

if {$argv!=""} {
  uplevel #0 $argv
} else {
  # I always use this anyway
  # source ~/tmp/ee.diag
  # source $env(EEVTMPDIR)/ee.diag
}





# Local Variables:
# coding:               no-conversion
# ee-delimiter-hash:    "\n#*\n"
# ee-anchor-format:     "«%s»"
# ee-charset-indicator: "Ñ"
# End: