Tkabber

Artifact [1ecb4e6f3e]
Login

Artifact 1ecb4e6f3e1baffce6c4676b82221bf593d496ca:


# $Id$

namespace eval emoteicons {
    array set emoteicons {}
}

proc emoteicons::add {word image} {
    variable emoteicons
    set emoteicons($word) $image
}

proc emoteicons::get {word} {
    variable emoteicons

    if {[info exists emoteicons($word)]} {
	return $emoteicons($word)
    } else {
	return ""
    }
}


#image create photo facestartled -file [fullpath gnus-smilies/FaceStartled.gif]
#image create photo facestraight -file [fullpath gnus-smilies/FaceStraight.gif]
#image create photo faceironic   -file [fullpath gnus-smilies/FaceIronic.gif]
#image create photo facehappy    -file [fullpath jajc-bitmaps/facehappy.gif]
#image create photo facesad      -file [fullpath jajc-bitmaps/facesad.gif]
#image create photo facegrinning -file [fullpath jajc-bitmaps/facegrinning.gif]
#image create photo faceyukky    -file [fullpath jajc-bitmaps/faceyukky.gif]
#image create photo facewinking  -file [fullpath jajc-bitmaps/facewinking.gif]
#image create photo beer         -file [fullpath jajc-bitmaps/beer.gif]
#
#
#
#emoteicons::add :)     facehappy
#emoteicons::add :-)    facehappy
#emoteicons::add :(     facesad
#emoteicons::add :-(    facesad
#emoteicons::add :-O    facestartled
#emoteicons::add :-|    facestraight
#emoteicons::add :-/    faceironic
#emoteicons::add :-D    facegrinning
#emoteicons::add ";)"   facewinking
#emoteicons::add ";-)"  facewinking
#emoteicons::add :-P    faceyukky
#emoteicons::add :P     faceyukky
#emoteicons::add :beer: beer
#emoteicons::add (B)    beer


proc emoteicons::load_dir {dir} {
    set icondef_path [file join $dir icondef.xml]
    if {![file isfile $icondef_path]} {
	### TODO: some error messages
	return
    }
    set f [open $icondef_path]
    set icondef [read $f]
    close $f

    set parser [jlib::wrapper:new "#" "#" \
		    [list emoteicons::parse_icondef $dir]]
    jlib::wrapper:elementstart $parser stream:stream {} {}
    jlib::wrapper:parser $parser parse $icondef
    jlib::wrapper:parser $parser configure -final 0
}

proc emoteicons::parse_icondef {dir xmldata} {
    jlib::wrapper:splitxml $xmldata tag vars isempty chdata children

    if {$tag != "icondef"} {
	# TODO: error message
	return
    }

    foreach child $children {
	parse_item $dir $child
    }

}

proc emoteicons::parse_item {dir item} {
    jlib::wrapper:splitxml $item tag vars isempty chdata children

    switch -- $tag {
	name {}
	version {}
	description {}
	author {}
	creation {}
	icon {
	    parse_icon $dir $children
	}
    }
}

proc emoteicons::parse_icon {dir items} {
    set txts {}
    set graphic ""
    foreach item $items {
	jlib::wrapper:splitxml $item tag vars isempty chdata children
	switch -- $tag {
	    text {
		lappend txts $chdata
	    }
	    graphic {
		switch -- [jlib::wrapper:getattr $vars type] {
		    image/gif {set graphic $chdata}
		}
	    }
	    sound {}
	}
    }
    #puts "E: $graphic; $txts"
    if {$graphic != ""} {
	set img $dir/$graphic
	image create photo $img -file [file join $dir $graphic]
	foreach txt $txts {
	    emoteicons::add $txt $img
	}
    }    
}

emoteicons::load_dir [fullpath emoticons-tkabber]