Commit 900ffb1c authored by Sergei Golovan's avatar Sergei Golovan

New upstream version 1.1.2+20170328

parent 741181de
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
......@@ -56,7 +56,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
......@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
......@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
......
This diff is collapsed.
......@@ -16,6 +16,7 @@ SUBDIRS = aniemoticons \
cyrillize \
debug \
ejabberd \
filters \
floatingcontact \
floatinglog \
georoster \
......@@ -63,6 +64,6 @@ install-doc:
# Update Tkabber plugins from Fossil repository
up:
test -f .fslckout -o -f _FOSSIL_ && fossil update
test -f .fslckout -o -f _FOSSIL_ && fossil pull && fossil update
.PHONY: install install-bin install-doc up
......@@ -4,7 +4,9 @@ To install the desired plugins copy the plugin directories to
$HOME/.tkabber/plugins (on UNIX), to %APPDATA%\Tkabber\plugins (on Windows),
or to $HOME/Library/Application Support/Tkabber (on MacOS X) directory.
Tkabber will automatically load the plugins when it's started.
Tkabber will automatically load the plugins when it's started. To actually
use them you'll have to enable the desired plugins in Tkabber plugins
management interface.
The plugins that you will surely want to try are: Chess, OTR,
and Whiteboard.
......@@ -67,6 +69,9 @@ debug
ejabberd
Utility to check your Ejabberd Jabber server remotely.
filters
Provides support for long time obsolete Jabberd 1.4 mod_filter rules.
floatingcontact
Allows roster items to float in separate small windows.
......@@ -179,4 +184,3 @@ unixkeys
whiteboard
Shared whiteboard, allows two contacts or a whole chatroom to draw
collaboratively.
# $Id$
# aniemoticons.tcl --
#
# This file is a part of Aniemoticons plugin for the Tkabber XMPP
# client. This plugin replaces the ::plugins::emoticons::create_image
# and ::plugins::emoticons::delete_image by the animated GIFs aware
# procedures. The plugin can be loaded and unloaded dynamically.
package require msgcat
......@@ -6,13 +11,15 @@ namespace eval aniemoticons {
::msgcat::mcload [file join [file dirname [info script]] msgs]
if {![::plugins::is_registered aniemoticons]} {
::plugins::register aniemoticons \
-namespace [namespace current] \
-source [info script] \
-description [::msgcat::mc "Whether the animated GIFs support plugin is loaded."] \
-loadcommand [namespace code load] \
-unloadcommand [namespace code unload]
return
::plugins::register aniemoticons \
-namespace [namespace current] \
-source [info script] \
-description [::msgcat::mc "Whether the animated\
GIFs support plugin\
is loaded."] \
-loadcommand [namespace code load] \
-unloadcommand [namespace code unload]
return
}
}
......@@ -21,20 +28,22 @@ namespace eval :: {
}
proc aniemoticons::load {} {
rename ::plugins::emoticons::create_image ::plugins::emoticons::create_image:anigif
rename ::plugins::emoticons::delete_image ::plugins::emoticons::delete_image:anigif
rename ::plugins::emoticons::create_image \
::plugins::emoticons::create_image:anigif
rename ::plugins::emoticons::delete_image \
::plugins::emoticons::delete_image:anigif
proc ::plugins::emoticons::create_image {name file} {
if {[catch {::anigif::anigif $name $file} res]} {
image create photo $name -file $file
return $name
} else {
return $res
}
if {[catch {::anigif::anigif $name $file} res]} {
image create photo $name -file $file
return $name
} else {
return $res
}
}
proc ::plugins::emoticons::delete_image {name} {
::anigif::destroy $name
::anigif::destroy $name
}
::plugins::emoticons::on_theme_changed
......@@ -42,20 +51,25 @@ proc aniemoticons::load {} {
}
proc aniemoticons::unload {} {
if {[llength [info procs ::plugins::emoticons::create_image:anigif]] == 0 || \
[llength [info procs ::plugins::emoticons::delete_image:anigif]] == 0} {
return
if {[llength [info procs \
::plugins::emoticons::create_image:anigif]] == 0 || \
[llength [info procs \
::plugins::emoticons::delete_image:anigif]] == 0} {
return
}
rename ::plugins::emoticons::create_image ""
rename ::plugins::emoticons::delete_image ""
rename ::plugins::emoticons::create_image:anigif ::plugins::emoticons::create_image
rename ::plugins::emoticons::delete_image:anigif ::plugins::emoticons::delete_image
rename ::plugins::emoticons::create_image:anigif \
::plugins::emoticons::create_image
rename ::plugins::emoticons::delete_image:anigif \
::plugins::emoticons::delete_image
foreach name [image names] {
::anigif::stop $name
::anigif::stop $name
}
namespace delete ::anigif
}
# vim:ts=8:sw=4:sts=4:et
......@@ -25,7 +25,7 @@
# A delay of 0 renders as fast as possible, per the GIF specification.
# This is currently set to 40 ms to approximate the IE default.
# If you experience a problem with a compressed gif, try uncompressing
# it. Search the web for gifsicle.
# it. Search the web for gifsicle.
#
# ############################## HISTORY #################################
#
......@@ -39,7 +39,7 @@
# You can no longer set the delay manually.
# 1.0: Moved all anigif variables to the anigif namespace
# 0.9: Initial release
#
#
namespace eval ::anigif {
variable image_number 0
......@@ -47,51 +47,52 @@ namespace eval ::anigif {
proc ::anigif::anigif2 {img list delay {idx 0}} {
if {$idx >= [llength $list]} {
set idx 0
if {$::anigif::img(repeat,$img) == 0} {
# Non-repeating GIF
::anigif::stop $img
return
}
set idx 0
if {$::anigif::img(repeat,$img) == 0} {
# Non-repeating GIF
::anigif::stop $img
return
}
}
set disposal_idx $idx
set disposal_idx $idx
incr disposal_idx -1
if {$disposal_idx <= 0} {
set disposal_idx 0
set disposal_idx 0
}
if {$idx == 0} {
set dispflag "010"
set dispflag "010"
} else {
set dispflag [lindex $::anigif::img(disposal,$img) $disposal_idx]
set dispflag [lindex $::anigif::img(disposal,$img) $disposal_idx]
}
switch -- "$dispflag" {
"000" {
# Do nothing
}
"100" {
# Do not dispose
}
"010" {
# Restore to background
$::anigif::img(curimage,$img) blank
}
"110" {
# Restore to previous - not supported
# As recommended, since this is not supported, it is set to blank
[set ::anigif::img(curimage,$img)] blank
}
default { puts "no match: $dispflag" }
"000" {
# Do nothing
}
"100" {
# Do not dispose
}
"010" {
# Restore to background
$::anigif::img(curimage,$img) blank
}
"110" {
# Restore to previous - not supported
# As recommended, since this is not supported, it is set to blank
[set ::anigif::img(curimage,$img)] blank
}
default { puts "no match: $dispflag" }
}
$::anigif::img(curimage,$img) copy [lindex $list $idx]
if {[lindex $delay $idx] == 0} {
::anigif::stop $img
return
::anigif::stop $img
return
}
# # # update
set ::anigif::img(asdf,$img) [list ::anigif::anigif2 $img $list]
set ::anigif::img(loop,$img) \
[after [lindex $delay $idx] \
[list eval $::anigif::img(asdf,$img) [list $delay [expr {$idx + 1}]]]]
[list eval $::anigif::img(asdf,$img) \
[list $delay [expr {$idx + 1}]]]]
set ::anigif::img(idx,$img) [incr idx]
}
......@@ -119,47 +120,47 @@ proc ::anigif::anigif {img fnam {idx 0}} {
set start [string first "\x21\xFF\x0B" $data]
if {$start < 0} {
set repeat 0
set repeat 0
} else {
set repeat 1
set repeat 1
}
# Find Control Records
set start [string first "\x21\xF9\x04" $data]
while {![catch {image create photo xpic$n$img \
-file $fnam \
-format [list gif89 -index $n]}]} {
set stop [expr $start + 7]
set record [string range $data $start $stop]
binary scan $record @4s thisdelay
if {[info exists thisdelay]} {
# Change to unsigned integer
#set thisdelay [expr {$thisdelay & 0xFF}];
binary scan $record @3b5 disposalval
set disposalval [string range $disposalval 2 end]
lappend images pic$n$img
image create photo pic$n$img
pic$n$img copy xpic$n$img
image delete xpic$n$img
lappend disposal $disposalval
# Convert hundreths to thousandths for after
set thisdelay [expr {$thisdelay * 10}]
# If 0, set to fastest (25 ms min to seem to match browser default)
if {$thisdelay == 0} {set thisdelay 40}
lappend delay $thisdelay
unset thisdelay
incr n
}
if {($start >= 0) && ($stop >= 0)} {
set start [string first "\x21\xF9\x04" $data [expr {$stop + 1}]]
} else {
break
}
-file $fnam \
-format [list gif89 -index $n]}]} {
set stop [expr $start + 7]
set record [string range $data $start $stop]
binary scan $record @4s thisdelay
if {[info exists thisdelay]} {
# Change to unsigned integer
#set thisdelay [expr {$thisdelay & 0xFF}];
binary scan $record @3b5 disposalval
set disposalval [string range $disposalval 2 end]
lappend images pic$n$img
image create photo pic$n$img
pic$n$img copy xpic$n$img
image delete xpic$n$img
lappend disposal $disposalval
# Convert hundreths to thousandths for after
set thisdelay [expr {$thisdelay * 10}]
# If 0, set to fastest (25 ms min to seem to match browser default)
if {$thisdelay == 0} {set thisdelay 40}
lappend delay $thisdelay
unset thisdelay
incr n
}
if {($start >= 0) && ($stop >= 0)} {
set start [string first "\x21\xF9\x04" $data [expr {$stop + 1}]]
} else {
break
}
}
set ::anigif::img(repeat,$img) $repeat
set ::anigif::img(delay,$img) $delay
......@@ -176,37 +177,39 @@ proc ::anigif::anigif {img fnam {idx 0}} {
proc ::anigif::stop {img} {
catch {
after cancel $::anigif::img(loop,$img)
after cancel $::anigif::img(loop,$img)
}
}
# TODO
proc ::anigif::restart {img {idx -1}} {
if {$idx == -1} {
if {[lindex $::anigif::img(delay,$img) $idx] < 0} {
set idx 0
} else {
set idx $::anigif::img(idx,$img)
}
if {[lindex $::anigif::img(delay,$img) $idx] < 0} {
set idx 0
} else {
set idx $::anigif::img(idx,$img)
}
}
catch {
::anigif::stop $img
eval $::anigif::img(asdf,$img) [list $::anigif::img(delay,$img) $idx]
::anigif::stop $img
eval $::anigif::img(asdf,$img) [list $::anigif::img(delay,$img) $idx]
}
}
proc ::anigif::destroy {img} {
catch {
::anigif::stop $img
foreach imagename [image names] {
if {[regexp {^pic\d+(.*)} $imagename -> tail] && [string equal $tail $img]} {
image delete $imagename
}
}
image delete $img
array unset ::anigif::img *,$img
::anigif::stop $img
foreach imagename [image names] {
if {[regexp {^pic\d+(.*)} $imagename -> tail] && \
[string equal $tail $img]} {
image delete $imagename
}
}
image delete $img
array unset ::anigif::img *,$img
}
}
package provide anigif 2.0
# vim:ts=8:sw=4:sts=4:et
# de.msg --
#
# German messages for Aniemoticons Tkabber plugin.
#
# Author: Roger Sondermann
# Last-Modified: 15.03.2009
# German messages file
# Roger Sondermann 15.03.2009
::msgcat::mcset de "Whether the animated GIFs support plugin is loaded." \
"Animierte-GIFs-Plugin laden."
::msgcat::mcset de "Whether the animated GIFs support plugin is loaded." "Animierte-GIFs-Plugin laden."
# vim:ft=tcl:ts=8:sw=4:sts=4:et
# ru.msg --
#
# Russian messages for Aniemoticons Tkabber plugin.
#
# Author: Sergei Golovan <sgolovan@nes.ru>
::msgcat::mcset ru "Whether the animated GIFs support plugin is loaded." \
"Загружено ли расширение обеспечивающее поддержку анимационных GIFов."
# vim:ft=tcl:ts=8:sw=4:sts=4:noet
# vim:ft=tcl:ts=8:sw=4:sts=4:et
# uk.msg --
#
# Ukrainian messages for Aniemoticons Tkabber plugin.
#
# Author: Sergei Golovan <sgolovan@nes.ru>
::msgcat::mcset uk "Whether the animated GIFs support plugin is loaded." \
"Чи завантажене розширення для підтримки анімаційних GIFів."
# vim:ft=tcl:ts=8:sw=4:sts=4:et
$Id$
"Attention line" -- chat plugin for Tkabber.
......@@ -92,7 +91,7 @@ parameters:
is added above and below the attention line by the text widget
which draws the attention line.)
The default value is 1.
* Chat.attentionLineColor -- color of the attention line. Can
be specified in any form described in [4].
The default value is "red".
......
$Id$
* Remove att. line when a buffer marked as read loses focus
instead of moving it to the bottom may be?
......
This diff is collapsed.
# de.msg --
#
# German messages for Attention line Tkabber plugin.
#
# Author: Roger Sondermann
# Last-Modified: 18.02.2009
# German messages file
# Roger Sondermann 18.02.2009
::msgcat::mcset de "Attention Line chat plugin options. This plugin draws\
horizontal line separating read and unread messages in chat\
windows." "Optionen für das Aufmerksamkeits-Linien-Plugin.\nDieses\
zeichnet in Chat-Fenstern eine horizontale Linie zur Trennung\
gelesener und ungelesener Nachrichten."
::msgcat::mcset de "Plugins options." "Optionen für Plugins."
::msgcat::mcset de "Remove the attention line after it was expired from its\
chat window." "Aufmerksamkeits-Linie entfernen, nachdem sie\
verfallen ist."
::msgcat::mcset de "Time (in milliseconds) after which unread messages in\
the currently active chat window are considered read and the attention\
line is considered expired." "Zeitraum nach dem ungelesene Nachrichten\
im aktiven Chat-Fenster als gelesen und die Aufmerksamkeits-Linie als\
verfallen betrachtet wird (in Millisekunden)."
::msgcat::mcset de "Whether the Attention Line plugin is loaded." \
"Aufmerksamkeits-Linien-Plugin laden."
::msgcat::mcset de "Attention Line chat plugin options. This plugin draws horizontal line separating read and unread messages in chat windows." "Optionen fr das Aufmerksamkeits-Linien-Plugin.\nDieses zeichnet in Chat-Fenstern eine horizontale Linie zur Trennung gelesener und ungelesener Nachrichten."
::msgcat::mcset de "Plugins options." "Optionen fr Plugins."
::msgcat::mcset de "Remove the attention line after it was expired from its chat window." "Aufmerksamkeits-Linie entfernen, nachdem sie verfallen ist."
::msgcat::mcset de "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Zeitraum nach dem ungelesene Nachrichten im aktiven Chat-Fenster als gelesen und die Aufmerksamkeits-Linie als verfallen betrachtet wird (in Millisekunden)."
::msgcat::mcset de "Whether the Attention Line plugin is loaded." "Aufmerksamkeits-Linien-Plugin laden."
# vim:ft=tcl:ts=8:sw=4:sts=4:et
::msgcat::mcset es "Attention Line chat plugin options. This plugin draws horizontal line separating read and unread messages in chat windows." "Opciones del plugin de charla Attention Line. Este plugin dibuja una línea horizontal que separa los mensajes viejos leídos de los nuevos mensajes aún no leídos en la ventana de charla."
# es.msg --
#
# Spanish messages for Attention line Tkabber plugin.
#
# Author: Badlop
::msgcat::mcset es "Attention Line chat plugin options. This plugin draws\
horizontal line separating read and unread messages in chat windows." \
"Opciones del plugin de charla Attention Line. Este plugin dibuja una\
línea horizontal que separa los mensajes viejos leídos de los nuevos\
mensajes aún no leídos en la ventana de charla."
::msgcat::mcset es "Plugins options." "Opciones de plugins."
::msgcat::mcset es "Remove the attention line after it was expired from its chat window." "Borra la línea de atención de la ventana de charla cuando expire."
::msgcat::mcset es "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Tiempo (en milisegundos) desde que un mensaje no leído en la ventana de charla activa se considera leído y se borra la línea de atención se considera expirada."
::msgcat::mcset es "Whether the Attention Line plugin is loaded." "Cargar el plugin Attention Line."
::msgcat::mcset es "Remove the attention line after it was expired from its\
chat window." "Borra la línea de atención de la ventana de charla\
cuando expire."
::msgcat::mcset es "Time (in milliseconds) after which unread messages in the\
currently active chat window are considered read and the attention\
line is considered expired." "Tiempo (en milisegundos) desde que un\
mensaje no leído en la ventana de charla activa se considera leído y\
se borra la línea de atención se considera expirada."
::msgcat::mcset es "Whether the Attention Line plugin is loaded." \
"Cargar el plugin Attention Line."
# vim:ft=tcl:ts=8:sw=4:sts=4:et
# Polish messages file for attline plugin
# Author: Irek Chmielowiec
# Contact: xmpp:irek@chrome.pl :: mailto:irek.ch@gmail.com
# Please notify me of errors or incoherencies
# pl.msg --
#
# Polish messages for Attention line Tkabber plugin.
#
# Author: Irek Chmielowiec <irek.ch@gmail.com>
::msgcat::mcset pl "Attention Line chat plugin options. This plugin draws horizontal line separating read and unread messages in chat windows." "Ustawienia wtyczki separatora aktywności. Wtyczka ta wstawia wstawia poziomą linię oddzielającą przeczytane i nieprzeczytane wiadomości w rozmowie."
::msgcat::mcset pl "Attention Line chat plugin options. This plugin draws\
horizontal line separating read and unread messages in chat windows." \
"Ustawienia wtyczki separatora aktywności. Wtyczka ta wstawia wstawia\
poziomą linię oddzielającą przeczytane i nieprzeczytane wiadomości w\
rozmowie."
::msgcat::mcset pl "Plugins options." "Ustawienia wtyczek."
::msgcat::mcset pl "Remove the attention line after it was expired from its chat window." "Usuń separator nieaktywności po tym jak stracił ważność w oknie rozmowy."
::msgcat::mcset pl "Time (in milliseconds) after which unread messages in the currently active chat window are considered read and the attention line is considered expired." "Czas (w milisekundach), po którym nieprzeczytane wiadomości w aktywnym oknie rozmowy zostaną uznane za przeczytane i separator starci ważność."
::msgcat::mcset pl "Whether the Attention Line plugin is loaded." "Załaduj wtyczkę separatora nieaktywności."
::msgcat::mcset pl "Remove the attention line after it was expired from its\
chat window." "Usuń separator nieaktywności po tym jak stracił ważność\
w oknie rozmowy."
::msgcat::mcset pl "Time (in milliseconds) after which unread messages in the\
currently active chat window are considered read and the attention\
line is considered expired." "Czas (w milisekundach), po którym\
nieprzeczytane wiadomości w aktywnym oknie rozmowy zostaną uznane za\
przeczytane i separator starci ważność."
::msgcat::mcset pl "Whether the Attention Line plugin is loaded." \
"Załaduj wtyczkę separatora nieaktywności."
# vim:ft=tcl:ts=8:sw=4:sts=4:et
# ru.msg --
#
# Russian messages for Attention line Tkabber plugin.
#
# Author: Sergei Golovan <sgolovan@nes.ru>
::msgcat::mcset ru \
"Attention Line chat plugin options. This plugin draws horizontal\
line separating read and unread messages in chat windows." \
"Настройки расширения Attention Line. Это расширение отделяет непрочитанные\
сообщения в окнах разговора от прочитанных горизонтальной линией."
"Attention Line chat plugin options. This plugin draws horizontal\
line separating read and unread messages in chat windows." \
"Настройки расширения Attention Line. Это расширение отделяет\
непрочитанные сообщения в окнах разговора от прочитанных\
горизонтальной линией."
::msgcat::mcset ru "Plugins options." "Параметры расширений."
::msgcat::mcset ru "Remove the attention line after it was expired from its chat window." \
"Удалять линию, разделяющую сообщения по истечении времени её действия."
::msgcat::mcset ru "Remove the attention line after it was expired from its\
chat window." "Удалять линию, разделяющую сообщения по истечении\
времени её действия."
::msgcat::mcset ru \
"Time (in milliseconds) after which unread messages in the currently\
active chat window are considered read and the attention line is considered expired." \
"Время (в миллисекундах) по истечении которого сообщения в активном окне разговора\
считаются прочитанными, и разделительная линия считается недействующей."
"Time (in milliseconds) after which unread messages in the currently\
active chat window are considered read and the attention line is\
considered expired." "Время (в миллисекундах) по истечении которого\
сообщения в активном окне разговора считаются прочитанными, и\
разделительная линия считается недействующей."
::msgcat::mcset ru "Whether the Attention Line plugin is loaded." \
"Загружено ли расширение Attention Line."
# vim:ft=tcl:ts=8:sw=4:sts=4:noet
# vim:ft=tcl:ts=8:sw=4:sts=4:et
::msgcat::mcset uk \
"Attention Line chat plugin options. This plugin draws horizontal\
line separating read and unread messages in chat windows." \
"Налаштування плагіну Attention Line. Цей плагін відділяє непрочитані\