 #!/bin/bash
	  # lanco de la interpretatoro wish\
	  exec wish "$0" "${1+"$@"}"
	  
	  
	  #_______________________________________________________________________________
	  #									DICIONAREKO - Lenadi MOUCINA   
	  #  										versiono 1.0 julio 2009
	  # _______________________________________________________________________________
	  
	  # DICONARIKO es un editatoro de vortari por VORTEKO , skribatatoro por Ido-linguo, skribesas en TCL-TK
	  # autoro : Lenadi MOUCINA
	   
	  	 # ta editator bazigas sur la *kodo dil programo Tikeditor, plu anciena, da la autoro ipsa.
		 # TA PROGRAMO ES TOTE LIBERA : do vu povas uzar, kopiar, difuzar, chanjar ol se vu volas to.
		
		#===========================================================================
		
		# la unika laboro de DICIONAREKO es facar la vortari interna quan necesa VORTEKO.
		# To es por plurapidigar la kargo iniciala. 
		# DICIONAREKO salvas ta vortari en un failo quan VORTEKO kargas unesme.
		
		#------------------------------------------------------------------------------------------------------------------------------------------------------
		
		 #-------------------------------------------------------------------------------------------
	  
	# la lineo sequanta [package require Tk] uzesas por probar ta programo per Tcl, se vu ne uzas Wish. 
		package require Tk
		
		global Voyo
	
	 set Voyo(abs) [pwd]
	  set SkriboNomo [info script]
	  set Voyo(rel) [file dirname $SkriboNomo]
#<version>--------------------------------------------------------------------------
		set versiono "2.0  - Septembro 2009"	
#------------------------------------------------------------------------------------------

 global Radiki
 global DICI
 global Fichero
 global Kidi 
	
#listo de kodexi 
set kodexi "LISTO DE KODEXI \n\na  adjektivo \nar  verbo \narn  verbo ne tansitiva \ne  adverbo \nl   lando kun 'ia' \nn  nombro \no  nomo  \noe  nomo ento sexuoza \nou  nomo utensilo  \nx  nevarieblo"
	
#<GRID_interfacio>
wm title . "DICIONAREKO $versiono "
. configure  -background blue -borderwidth 0 -relief flat -cursor star

text .titulo  -height 10 -wrap word -font {helvetica 10 bold } -bg cyan -fg maroon  -cursor star

	
	set tikimg [image create photo -file  [ file join $Voyo(rel) imaji Couturat.gif ] ]
	.titulo image create end -image $tikimg -align center
	.titulo insert end  "  Dicionareko por Idolinguo." titulkoloro
	.titulo insert end " \n\nKrear vortari de Idala radiki  e krear dicionarii por Vorteko, skribo-programo por Idolinguo." 
	.titulo configure -state disabled
	
#tagi por kolorigar la titulo
.titulo tag configure titulkoloro -font {helvetica 20 bold italic} -foreground #000040   
	
label .l2 -text "Vortaro .dik " -font {courier 10 bold} -bg ivory -fg blue
		
button .bhelpo -bg yellow  -fg black -text " Helpo " -borderwidth  7 -relief raise -command { Dicionareko::Helpo } -cursor hand1 
	
text .hdik -fg white -width 10 -height 9 -font {helvetica 10 } -wrap word -bg blue -cursor star
	.hdik  insert end " 1) POR KREAR VORTARO DIK , vu devas :\n - unesme selektar arkivo .dik \n	 (o krear nova listo en la texto-fenestro infre) \n - duesme modifikar la listo de radiki e kodexi \n -  triesme salvar la nova listo en arkivo.dik "
	.hdik configure -state disabled 
	
label .kodexi -text $kodexi -cursor star -justify left -bg blue -fg white -font {helvetica 9 bold}
	
text .tdik -bg ivory  -wrap word -height 15 -width 25 -font {helvetica 12} -yscrollcommand ".yskrolo set"  -spacing1 3 
scrollbar .yskrolo -command ".tdik yview" -cursor hand1
	
button .bselektdik -text "selektar .dik" -cursor hand1 -bg blue -borderwidth  7 -relief raise -command { Dicionareko::AfishigarDik  }  -fg cyan -font {helvetica 10}
button .bsalvadik -text "salvar .dik" -cursor hand1 -bg blue -borderwidth  7 -relief raise -command { Dicionareko::SalvarDik }  -fg cyan -font {helvetica 10}
	
label .l3 -text " " -bg maroon
	
text .hdici -fg white -width 10 -height 9 -font {helvetica 10 } -wrap word -bg maroon -cursor star
	.hdici  insert end "2) POR KREAR DICIONARIO TCL, vu devas : \n - unesme selektar la arkivi .dik \n - duesme selektar inter Dici.tcl o altra vortaro .tcl (arkivo ye salvo) \n - triesme lansar la laboro \n"
	.hdici configure -state disabled 
text .t2 -height 8 -width 10 -font {helvetica 9 bold } -fg yellow -bg maroon -wrap word
	
label .l4 -text "Selektar inter la arkivi .dik " -bg maroon -fg white  -font {helvetica 10}  
radiobutton .rb0  -text "A-Z  .dik "  -bg maroon -fg cyan -variable Kidi -value a-z.dik  -command { Dicionareko::ApertarDik } -cursor hand1
radiobutton .rb1  -text "specala  .dik"  -bg maroon -fg cyan -variable Kidi -value "0" -command { Dicionareko::ApertarDik } -cursor hand1
	
label .l5 -text "Selektar la \narkivi de salvo >>" -bg maroon -fg white  -font {helvetica 10} 
button .b3 -text "selektar .tcl" -cursor hand1 -bg maroon -borderwidth  7 -relief raise -command {Dicionareko::SelektarDici }  -fg cyan -font {helvetica 10}
			
button .b5 -text "Lansar la genito de la dicionario" -cursor hand1 -bg maroon -fg cyan -borderwidth  7 -relief raise -command {Dicionareko::Afixaji}   -font {helvetica 10}
	
button .b6 -text "Livar " -cursor hand1 -bg red -borderwidth  7 -relief raise -command {exit}  -fg cyan -font {helvetica 10}

#================================================
		grid .titulo -column 1 -row 1 -columnspan 6 -sticky wens
		
		grid .tdik -column 1 -row 4 -rowspan 3 -columnspan 1
		grid .yskrolo -column 2 -row 4 -rowspan 3 -sticky wens
		
		grid .l2 -column 1 -row 3 -columnspan 2 -sticky wens
		grid .hdik -column 1 -row 2 -columnspan 2 -sticky wens -rowspan 1
		grid .kodexi -column 3 -row 4 -rowspan 3 -sticky wens
		
		grid .bselektdik -column 3 -row 2 -sticky we
		grid .bsalvadik -column 3 -row 3 -sticky wens

 		grid .l3 -column 4 -rowspan 8 -sticky wens -row 2

		grid .b6 -column 1 -row 7 -columnspan 1 -sticky wens
		grid .bhelpo -column 3 -row 7 -sticky wens -columnspan 1

		grid .hdici -column 5 -row 2 -columnspan 2 -sticky wens -rowspan 1
	grid .t2 -column 5 -row 5 -columnspan 2 -rowspan 1 -sticky wens
		grid .l4 -column 5 -row 3 -sticky we -columnspan 2 -sticky wens
		grid .rb0  -column 5 -row 4 -sticky wens
		grid .rb1 -column 6 -row 4 -sticky wens
		grid .l5 -column 5 -row 6 -sticky wens
		grid .b3 -column 6 -row 6 -sticky wesn
		grid .b5 -column 5 -row 7 -columnspan 2 -sticky we
		
		
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°	

namespace eval Dicionareko {}
global Radiki
 global DICI
 global Fichero
	set Fichero ""
 global Kidi 

# <krear_dik>
proc Dicionareko::AfishigarDik {} {
	global DICI
	global Voyo
	global Kidi
	global Fichero
	
	set textofenestro ".tdik"
	
	if { [string compare  [set selektajo [ tk_getOpenFile -title "Dicionareko : Apertar vortaro .dik "\
			-initialdir $Voyo(rel)] ] "" ]== 0} {
						tk_messageBox -message "Vu ne ja apertis fichero"
						; return
		}

	if [ catch { open $selektajo } FIC ] {
		  tk_messageBox -type ok -icon warning \
			  -message "Neposibla apertar la fichero $selektajo"
		  return 1
		} else {
		  $textofenestro delete 0.0 end
		  set contenu [ read -nonewline $FIC ]
		
		foreach {vorto kodexo} $contenu {			
			$textofenestro insert end "$vorto $kodexo \n"
			}
				  close $FIC
	 return 0
		}
}
	
proc Dicionareko::SalvarDik {} {

	set idf [open [ tk_getSaveFile -title "DICIONAREKO : Salvar kom ..." -defaultextension .dik] w]
	set YY [ .tdik get 1.0 end ]
	foreach {vorto kodexo} $YY {
		lappend ZZ $vorto 
		lappend ZZ $kodexo }
			
		  puts -nonewline $idf $ZZ
		  close $idf	
}

#<Krear_dici>

proc Dicionareko::ApertarDik {} {
	global DICI
	global Voyo
	global Kidi
	global Fichero
	
	switch $Kidi {
	a-z.dik { tk_messageBox -message "Atencez! vu selektis la dicionarii generala." ; .t2 delete 1.0 end ; .t2 insert  1.0 "\n La faili .dik selektita es : \n $Kidi" ; .t2 configure -bg cyan -fg #000040  }
	default {  global Kidi ; set Kidi [ tk_getOpenFile ] ;.t2 delete 1.0 end ; .t2 insert  1.0 " La failo .dik selektita es :  $Kidi" ; .t2 configure -bg maroon -fg yellow}
	}
	
}

proc Dicionareko::ApertarDici {} {
	global DICI
	global Voyo
	global Kidi
	global Fichero
	
	set Fichero [ tk_getOpenFile  ] 
		
	set DICI [open  $Fichero w ]
	
	switch $Kidi {
	a-z.dik {puts $DICI " \# dicionario por Vorteko" }
	default { puts $DICI " \# individuala dicionario por Vorteko" }
	}
	

	.t2 insert  end  "\n La failo .tcl selektita es :  $Fichero" 
}


proc Dicionareko::Afixaji { } {
	global Radiki
	global dico
	global Voyo
		variable  diko 
		global Kidi
		
		.t2 insert end "\n\Dicionareko generas dicionarii. Prego, vartez paciente kelka minuti\n"
		.t2 configure -bg red -foreground yellow
		update 
		
		.t2 tag configure init -background green -foreground black
	
# sufixi por irga kategorio gramatikala de vorti	
	set l	[list {} a ala ana ani anini anino ano anuli anulo ] 
	set ar  [list {} a abas abez abis abos abus achi acho adi ado aji ajo al ala anta ante anti anto ar as ata ate ati ato atora atorala atore atori atoro ayi ayo e ebla eble ebli eblo ema eme emo enda eri ero esabas esabez esabis esabos esabus esar esas esez esir esis eskanta eskante eskanti eskanto eskar eskas eskata eskato eskez eskinta eskinti eskinto eskir eskis eskita eskito eskonta eskonti eskonto eskor eskos eskota eskota eskus esor esi eso esos esus estri estro eyi eyo ez i iga igabas igabez igabis igabos iganta igante iganti iganto igar igas igata igati igato ige igez igi iginta iginti iginto igir igis igita igato igo igonta igonti igonto igor igos igota igoti igoto igus ili ilo inda inta inte inti into ir is ismi ismo ista iste isti isto ita ite iti ito iva ive ivo o onta onte onti onto or os ota ote oti oto oza oze ozi ozo uri uro us ]	; # verbi transitiva o mixta
	set arn  [list {}  abas abez abis abos abus achi acho adi ado aganta aginta agonta aji ajo al ala anta ante anti anto ar as ayi ayo ebla ebli eblo ema eme emi emo enda eri ero esabas esabez esabis esabos esabus esar esas esez esir esis eskanta eskanti eskanto eskar eskas eskez eskinta eskinti eskinto eskir eskis eskonta esonti eskonto eskor eskos eskus esi eso esor esos esus eyi eyo ez i iga igabas igabez igabis igabos igabus igar igas igata igati igato ige igez igir igis igita igiti igito igo igor igos igota igoti igoto igus ili ilo inda inta inte inti into ir is ismi ismo iste isti isto iva ive ivo o onta onte onti onto or os oza oze ozi ozo us ]	; # verbi netransitiva
	set oe [list {} a al ala ale aro e egi ego eti eto eyi eyo i ini ino ismi ismo isti isto o uli ulo  ] ; # nomi ento sexuizita
	set o [list {}  a acha ache achi acho aji ajo al ala ale ari aro atra ayi ayo e egi ego ema eri ero estri estro eti eto eyi eyo i if ifa ifanta ifante ifanti ifanto ifar ifas ifata ifati ifato ifez ifi ifinta ifinti ifinto ifir ifis ifita ifo ifonta ifonti ifonto ifor ifos ifota ifus iga igabas igabez igabis igabos iganta igante iganti iganto igar igas igata igati igato ige igez igi iginta igir igis igita igo igonta igor igos igota igus ismi ismo isti isto iza izabas izabez izabis izabos izabus izanta izante izar izas izata izi izinta izir izis izita izo izonta izor izos izota o oza oze ozo ] ; # nomi
	set ou [list {}  a achi acho agabas agabez agabis agabos agabus aganta agante aganti aganto agar agas agata agati agato agi aginta agir agis agita agiti agito ago agonta agonti agonto agor agos agota agoti agoto aji ajo al ala ale ari aro atra atre atri atro ayi ayo e egi ego ema eme emi emo eri ero estri estro eti eto i if ifa ifo ifi ifar ifir ifor ifas ifis ifos ifez ifus ifata ifita ifota ifato ifati ifanta ifinta ifonta ifanto ifante ifanti  ifinto ifinti ifonto ifonti ifisti ifisto iga igabas igabis igabos igabus iganta igante iganti iganto igar igas igata igati igato ige igez igi iginta iginti iginto igir igis igita igo igonta igonti igonto igor igos igota igoti igoto igus ismi ismo isti isto izabas izabez izabis izabos izabus izanta izante izanti izanto izar izas izata izinta izinti izinto izir izis izita izonta izonti izonto izor izos izota izoti izoto  o oza oze ozi ozo uyi uyo ] ; # nomi di instrumenti
	set a [list {} a achi achi aji ajo aro e ega ege egi ego eri ero eso esi eta eti eto i iga igabas igabez igabis igabos igabus iganta igante iganti iganto igar igas igata igati igato ige igez igi iginta iginti iginto igir igis igita igiti igito igo igonta igonti igonto igor igos igota igoti igoto igus ini ino ismi ismo isti isto o oza oze ozi ozo uli ulo  ] ; #adjektivo 
	set e [list  {} e a ] ; # adverbi
	set n [list {} acent adek amil esma esme esmi esmo foya foye ima ime imi imo opla ople opli oplo ] ; # nombri
	set x [list {} ]
	
# facar la vortari

	#<Alfabeto> slingo por konstruktar interne la dicionari kortata segun alfabeto

	switch $Kidi {
	a-z.dik {  set alfabeto [list a b c d e f g h i j k l m n o p q r s t u  v w x y z ]   ;
		catch {foreach {i}  $alfabeto {	
		set idik($i) [open [file join $Voyo(rel) radiki $i.dik]]
		set Radiki($i) [read $idik($i) ]
		}
	} }
	default { set perso  [file rootname [file tail $Kidi] ] ; set alfabeto [list $perso ] ; }
	} 
	
	# ta lineo sequanta nur bezonesas por *desbugizar la programo, nam kargar tote la alfabetala vortari necesas tro longatempo
#£  	 		 set alfabeto [list  w ]
# set alfabeto [list a b c d e f g h i j k l m n o p q r s t u  v w x y z ] 
 
# kargar la ficheri (?.dik) aden un tabelo ("array")  
	catch {foreach {i}  $alfabeto {	
		set idik($i) [open [file join $Voyo(rel) radiki $i.dik]]
		set Radiki($i) [read $idik($i) ]
		}
	}
	
	
# la tabulo de dicionari ya es kargita. 
# ni uzas la du unesmi literi di irga vorti por facar un parto sat mikra ube ni povos cherchar ka la vorto di la texto trovesos en ta listo.	
 		
	foreach {litero} $alfabeto {
	   	variable  diko 
				
		.t2  insert end " $litero " init 
		update
		
	foreach { radik reguli } $Radiki($litero)   {
		set radiko [string tolower $radik] 
		
	# ni difinas la du unesmi litero di irga vorto di la dicionario 
	set unesma [string index $radiko 0]
	set duesma [string index $radiko 1]
	set tab "$unesma$duesma"
	
		switch $reguli {
	l { set Listafixi  $l; Dicionareko::CikloAfixi $Listafixi $radiko $tab ; }
	ar {set Listafixi $ar ; Dicionareko::CikloAfixi $Listafixi $radiko $tab }
	arn {set Listafixi $arn ; Dicionareko::CikloAfixi $Listafixi $radiko $tab }
	oe { set Listafixi $oe; Dicionareko::CikloAfixi $Listafixi $radiko $tab }	
	ou { set Listafixi $ou ; Dicionareko::CikloAfixi $Listafixi $radiko $tab }	
	o { set Listafixi $o; Dicionareko::CikloAfixi $Listafixi $radiko $tab }	
	a { set Listafixi $a; Dicionareko::CikloAfixi $Listafixi $radiko $tab }
	e { set Listafixi $e; Dicionareko::CikloAfixi $Listafixi $radiko $tab ; }
	n { set Listafixi $n; Dicionareko::CikloAfixi $Listafixi $radiko $tab ; } 
	x { set Listafixi $x; Dicionareko::CikloAfixi $Listafixi $radiko $tab ; } 
	}
	}
	}

array unset diko
array unset Radiki

Dicionareko::KrearDici 
}



proc Dicionareko::CikloAfixi { Listafixi radiko tab} {
  	variable diko
	global dico
	global Kidi
	
	switch $Kidi {
		a-z.dik {foreach afixo $Listafixi  { 
		set vorto $radiko 
		set vorto [append vorto $afixo]
			lappend  diko($tab) $vorto} 
			set dico($tab) [lsort -dictionary $diko($tab) ]	
			return dico($tab)}
		default {foreach afixo $Listafixi  { 
		set vorto $radiko 
		set vorto [append vorto $afixo]
			lappend  diko($tab) $vorto} 
			set dico(P_$tab) [lsort -dictionary $diko($tab) ]
		}
} }


proc Dicionareko::KrearDici { } {
global DICI
global dico
global Kidi
global Fichero

	set tabulo [array names dico ]
	
 	foreach tab $tabulo  {
		switch $Kidi {
		a-z.dik {set diciKomando  "\n set dico($tab) { $dico($tab) }" }
		default {set diciKomando  "\n set dico($tab) { $dico($tab) }" }
		}

	catch {puts $DICI $diciKomando}
	}
	
	set totalVortari 0
 	foreach elemento [array names dico ] { set totalVortari [expr $totalVortari + [llength $dico($elemento) ] ] }
	.t2 delete 1.0 end
	.t2 configure -bg green -foreground black 
	.t2  insert 1.0 "\nLa diconario $Fichero por Vorteko \nnun esas komplete kreata\nNombro de vorti : $totalVortari " 

}


proc  Dicionareko::SelektarDici {} {
	set F [ tk_dialog  .apertarFichero  FICHERO "Apertar la failo ube vu volas salvar la dicionario por Vorteko"  ""  0  YES  Anular ]
	switch $F {
	0  {Dicionareko::ApertarDici } 
	1 { exit}
	}
}

proc Dicionareko::Helpo {} {
	global Voyo

	set helpo [ read [open [file join $Voyo(rel) dicionarekoHelpo.txt] ] ]
	
	if { [catch {raise .helpo } ] == 1} {
	toplevel .helpo 
	 wm   title  .helpo "Helpo pri Dicionareko" 
	
	text .helpo.t   -yscrollcommand ".helpo.yskrolo set" -wrap word -background yellow  
	pack .helpo.t -side left -expand true -fill both
	
	scrollbar .helpo.yskrolo -background yellow -highlightcolor red -activebackground green -troughcolor black -command ".helpo.t yview"  
	pack .helpo.yskrolo -side right -after .helpo.t  -expand false -fill y 
	
	.helpo.t insert 1.0 $helpo
	
	bind .helpo.t  <3> {destroy .helpo }
	}
	
	

}


#==============================================

# fino
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°))

	
	
	
		

