├── icons ├── artscript.gif ├── artscript_128x128.png ├── artscript_16x16.png ├── artscript_256x256.png └── artscript_48x48.png ├── lib ├── tkdnd │ ├── libtkdnd_x64-2.6.so │ ├── libtkdnd_x86-2.6.so │ ├── pkgIndex.tcl │ ├── README.txt │ ├── license.terms │ ├── tkdnd_compat.tcl │ ├── tkdnd_macosx.tcl │ ├── tkdnd_mime.tcl │ ├── tkdnd.tcl │ └── tkdnd_windows.tcl ├── tkpng0.9 │ ├── libtkpng_x64-0.9.so │ ├── libtkpng_x86-0.9.so │ └── pkgIndex.tcl └── md5 │ ├── pkgIndex.tcl │ ├── md5v1.bench │ ├── md5v2.bench │ ├── license.terms │ ├── md5.test │ ├── md5.h │ ├── md5c.tcl │ ├── md5.man │ ├── md5x.test │ ├── ChangeLog │ ├── md5.c │ └── md5.tcl ├── Services ├── artscript.nemo_action ├── artscript.desktop ├── Artscript └── README.md ├── util ├── poToMsg.tcl └── extractStrings.tcl ├── README.md ├── msg ├── es.msg └── fr.msg ├── presets.config.example ├── translate ├── default.pot ├── es.po └── fr.po └── CHANGELOG-v2 /icons/artscript.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/icons/artscript.gif -------------------------------------------------------------------------------- /icons/artscript_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/icons/artscript_128x128.png -------------------------------------------------------------------------------- /icons/artscript_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/icons/artscript_16x16.png -------------------------------------------------------------------------------- /icons/artscript_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/icons/artscript_256x256.png -------------------------------------------------------------------------------- /icons/artscript_48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/icons/artscript_48x48.png -------------------------------------------------------------------------------- /lib/tkdnd/libtkdnd_x64-2.6.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/lib/tkdnd/libtkdnd_x64-2.6.so -------------------------------------------------------------------------------- /lib/tkdnd/libtkdnd_x86-2.6.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/lib/tkdnd/libtkdnd_x86-2.6.so -------------------------------------------------------------------------------- /lib/tkpng0.9/libtkpng_x64-0.9.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/lib/tkpng0.9/libtkpng_x64-0.9.so -------------------------------------------------------------------------------- /lib/tkpng0.9/libtkpng_x86-0.9.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vanyossi/artscript/HEAD/lib/tkpng0.9/libtkpng_x86-0.9.so -------------------------------------------------------------------------------- /lib/tkpng0.9/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # Tcl package index file 3 | # 4 | package ifneeded tkpng 0.9 \ 5 | [list load [file join $dir libtkpng0.9.so] tkpng] 6 | -------------------------------------------------------------------------------- /lib/tkdnd/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | package ifneeded tkdnd 2.6 \ 2 | "source \{$dir/tkdnd.tcl\} ; \ 3 | tkdnd::initialise \{$dir\} libtkdnd2.6[info sharedlibextension] tkdnd" -------------------------------------------------------------------------------- /lib/md5/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | if {![package vsatisfies [package provide Tcl] 8.2]} {return} 2 | package ifneeded md5 2.0.7 [list source [file join $dir md5x.tcl]] 3 | package ifneeded md5 1.4.4 [list source [file join $dir md5.tcl]] 4 | -------------------------------------------------------------------------------- /Services/artscript.nemo_action: -------------------------------------------------------------------------------- 1 | [Nemo Action] 2 | Active=true 3 | Name=Artscript 4 | Comment=send file to artscript 5 | Exec=/path/to/artscriptk/artscript2.tcl %F 6 | Selection=any 7 | Extensions=ora;kra;png;jpg;jpeg;bmp;psd;tiff;xbm;xpm;bmp;pdf;svg; 8 | -------------------------------------------------------------------------------- /Services/artscript.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | ServiceTypes=KonqPopupMenu/Plugin 4 | MimeType=all/all; 5 | Type=Service 6 | X-KDE-Priority=TopLevel 7 | Actions=artscript 8 | TryExec=convert 9 | 10 | [Desktop Action artscript] 11 | Name=Artscript Tcl 12 | Icon=view-catalog 13 | Exec=/path/to/artscriptk/artscript2.tcl/ %F -------------------------------------------------------------------------------- /Services/Artscript: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Artscript right click context menu for Nautilus 3.10 3 | # version Nov2013 4 | 5 | # Check if we have selected any files... 6 | if [ -z "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then 7 | $ZENITY --error --text="No files selected" 8 | exit 0; 9 | fi 10 | 11 | /path/to/artscriptk/artscript2.tcl/ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 12 | -------------------------------------------------------------------------------- /lib/tkdnd/README.txt: -------------------------------------------------------------------------------- 1 | tkDND necessary libraries are contained in this folder for linux. 2 | If for some reason does not work you can attempt to download 3 | and install using the following instructions: 4 | 5 | To activate drag and drop. 6 | 7 | Go to tkDND homepage 8 | http://sourceforge.net/projects/tkdnd/ 9 | 10 | Donwload version binary 2.6 for your system 11 | 12 | Or alternatively get the sources and compile it. 13 | Download sources version 2.6 14 | http://sourceforge.net/projects/tkdnd/files/TkDND/TkDND%202.6/ 15 | 16 | Unpack downloaded file somewhere in your filesystem 17 | Place the contents inside the tkdnd folder 18 | 19 | Launch Artscript, it should accept droped files from the filemanager 20 | -------------------------------------------------------------------------------- /lib/md5/md5v1.bench: -------------------------------------------------------------------------------- 1 | # -*- tcl -*- 2 | # Tcl Benchmark File 3 | # 4 | # This file contains a number of benchmarks for the 'md5' module. 5 | # This allow developers to monitor/gauge/track package performance. 6 | # 7 | # (c) 2005 Andreas Kupries 8 | 9 | # We need at least version 8.2 for the package and thus the 10 | # benchmarks. 11 | 12 | if {![package vsatisfies [package provide Tcl] 8.2]} { 13 | return 14 | } 15 | 16 | # ### ### ### ######### ######### ######### ########################### 17 | ## Setting up the environment ... 18 | ## Here we are testing version 1. 19 | 20 | set moddir [file dirname [file dirname [info script]]] 21 | lappend auto_path $moddir 22 | 23 | package forget md5 24 | catch {namespace delete ::md5} 25 | source [file join [file dirname [info script]] md5.tcl] 26 | 27 | set key "01234567abcdefgh01234567abcdefgh01234567abcdefgh01234567abcdefgh==" 28 | 29 | # ### ### ### ######### ######### ######### ########################### 30 | ## Benchmarks. 31 | 32 | foreach n {1 10 100 1000 10000} { 33 | bench -desc "MD5 md5_ v1 $n" -pre { 34 | set str [string repeat " " $n] 35 | } -body { 36 | md5::md5 $str 37 | } 38 | 39 | bench -desc "MD5 hmac v1 $n" -pre { 40 | set str [string repeat " " $n] 41 | } -body { 42 | md5::hmac $key $str 43 | } 44 | } 45 | 46 | # ### ### ### ######### ######### ######### ########################### 47 | ## Complete 48 | -------------------------------------------------------------------------------- /lib/md5/md5v2.bench: -------------------------------------------------------------------------------- 1 | # -*- tcl -*- 2 | # Tcl Benchmark File 3 | # 4 | # This file contains a number of benchmarks for the 'md5' module. 5 | # This allow developers to monitor/gauge/track package performance. 6 | # 7 | # (c) 2005 Andreas Kupries 8 | 9 | # We need at least version 8.2 for the package and thus the 10 | # benchmarks. 11 | 12 | if {![package vsatisfies [package provide Tcl] 8.2]} { 13 | return 14 | } 15 | 16 | # ### ### ### ######### ######### ######### ########################### 17 | ## Setting up the environment ... 18 | ## Here we are testing version 2. 19 | 20 | set moddir [file dirname [file dirname [info script]]] 21 | lappend auto_path $moddir 22 | 23 | package forget md5 24 | catch {namespace delete ::md5} 25 | source [file join [file dirname [info script]] md5x.tcl] 26 | 27 | set key "01234567abcdefgh01234567abcdefgh01234567abcdefgh01234567abcdefgh==" 28 | 29 | # ### ### ### ######### ######### ######### ########################### 30 | ## Benchmarks. 31 | 32 | foreach n {1 10 100 1000 10000} { 33 | bench -desc "MD5 md5_ v2 $n" -pre { 34 | set str [string repeat " " $n] 35 | } -body { 36 | md5::md5 $str 37 | } 38 | 39 | bench -desc "MD5 hmac v2 $n" -pre { 40 | set str [string repeat " " $n] 41 | } -body { 42 | md5::hmac -key $key -- $str 43 | } 44 | } 45 | 46 | # ### ### ### ######### ######### ######### ########################### 47 | ## Complete 48 | -------------------------------------------------------------------------------- /util/poToMsg.tcl: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env tclsh 2 | # 3 | 4 | # For each file found in arguments run extraction of strings 5 | proc processArgs {} { 6 | foreach File [lsearch -inline -all $::argv *.po] { 7 | writeMsgFile [parsePo [file normalize $File] ] $File 8 | } 9 | } 10 | # Parse .po file into a list 11 | proc parsePo { File } { 12 | set i 0 13 | set data [open $File r] 14 | while {-1 != [gets $data line]} { 15 | if { $line eq {} } { 16 | incr i 17 | continue 18 | } 19 | dict lappend poparsed $i $line 20 | } 21 | close $data 22 | dict for {key value} $poparsed { 23 | if { [llength $value] > 6 } { 24 | set ::header $value 25 | continue 26 | } 27 | set vlist [join $value] 28 | lappend result $vlist 29 | incr i 30 | } 31 | return $result 32 | } 33 | # Prints list data from parsePo to a .msg format 34 | proc writeMsgFile { data name } { 35 | set lang [file tail [file root $name]] 36 | set dirname [file dirname [file normalize [info script]]] 37 | set filename [file join $dirname ${lang}.msg] 38 | 39 | set File [open $filename w] 40 | puts $File "# Translation file for $name\n" 41 | 42 | foreach line $::header { 43 | puts $File [format {# %s} $line] 44 | } 45 | puts -nonewline $File "\n" 46 | puts $File "::msgcat::mcmset $lang \{" 47 | set format_string {{%1$s} {%2$s}} 48 | set format_notrans {{%1$s} {%1$s}} 49 | foreach el $data { 50 | set orstring [lindex $el end-2] 51 | set transtring [lindex $el end] 52 | puts $File [format [expr {($transtring eq {}) ? $format_notrans : $format_string } ] $orstring $transtring] 53 | } 54 | puts $File \} 55 | 56 | close $File 57 | } 58 | 59 | processArgs -------------------------------------------------------------------------------- /Services/README.md: -------------------------------------------------------------------------------- 1 | artscript Services 2 | ========== 3 | 4 | ## Files 5 | ``` 6 | Artscript Nautilus >=3.10 context menu 7 | artscript.desktop Dolphin KDE desktop action service 8 | artscript.nemo_action Nemo context menu 9 | ``` 10 | 11 | ## How to install 12 | Thanks to David Revoy for making and testing the files for Nemo and Nautilus 13 | Up to date information: [Adding artscript as a context menu](https://github.com/vanyossi/artscriptk/wiki/Setting-a-context-menu) 14 | 15 | ### Nemo 16 | 1. Copy the file ```Artscript.nemo_action``` to ```~/.local/share/nemo/actions/``` 17 | 2. Open file and edit the line containing 18 | ``` 19 | Exec=/path/to/artscriptk/artscript2.tcl %F 20 | ``` 21 | 3. Change ```/path/to/artscript/``` to the actual path where you installed artscript2.tcl 22 | 4. From Cinnamon file explorer: right-click to view the new entry. 23 | 24 | ### Nautilus 3.10 25 | 1. Copy the file ```Artscript``` to ```~/.local/share/nautilus/scripts/``` 26 | 2. Open file and edit the last line 27 | ``` 28 | /path/to/artscriptk/artscript2.tcl/ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 29 | ``` 30 | 3. Change ```/path/to/artscript/``` to the actual path where you installed artscript2.tcl 31 | 4. After doing that in Nautilus: right click ( Script > Artscript ) 32 | 33 | ### Dolphin KDE 34 | 1. Copy the file ```artscript.desktop``` to ```~/.kde/share/kde4/services/ServiceMenus``` 35 | 2. Open file and edit the line containing 36 | ``` 37 | Exec=/path/to/artscriptk/artscript2.tcl %F 38 | ``` 39 | 3. Change ```/path/to/artscript/``` to the actual path where you installed artscript2.tcl 40 | 4. From Dolphin file explorer: right-click > Artscript. 41 | 42 | ### Thunar 43 | [Wiki page Xfce menu](https://github.com/vanyossi/artscriptk/wiki/Setting-a-context-menu#xfce) 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/md5/license.terms: -------------------------------------------------------------------------------- 1 | This software is copyrighted by Ajuba Solutions and other parties. 2 | The following terms apply to all files associated with the software unless 3 | explicitly disclaimed in individual files. 4 | 5 | The authors hereby grant permission to use, copy, modify, distribute, 6 | and license this software and its documentation for any purpose, provided 7 | that existing copyright notices are retained in all copies and that this 8 | notice is included verbatim in any distributions. No written agreement, 9 | license, or royalty fee is required for any of the authorized uses. 10 | Modifications to this software may be copyrighted by their authors 11 | and need not follow the licensing terms described here, provided that 12 | the new terms are clearly indicated on the first page of each file where 13 | they apply. 14 | 15 | IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 16 | FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 17 | ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 18 | DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 19 | POSSIBILITY OF SUCH DAMAGE. 20 | 21 | THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 22 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 24 | IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 25 | NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 26 | MODIFICATIONS. 27 | 28 | GOVERNMENT USE: If you are acquiring this software on behalf of the 29 | U.S. government, the Government shall have only "Restricted Rights" 30 | in the software and related documentation as defined in the Federal 31 | Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you 32 | are acquiring the software on behalf of the Department of Defense, the 33 | software shall be classified as "Commercial Computer Software" and the 34 | Government shall have only "Restricted Rights" as defined in Clause 35 | 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the 36 | authors grant the U.S. Government and others acting in its behalf 37 | permission to use and distribute the software in accordance with the 38 | terms specified in this license. 39 | -------------------------------------------------------------------------------- /lib/tkdnd/license.terms: -------------------------------------------------------------------------------- 1 | This software is copyrighted by: 2 | Georgios Petasis, Athens, Greece. 3 | e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 4 | 5 | Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 6 | kw@codebykevin.com 7 | 8 | The following terms apply to all files associated with the 9 | software unless explicitly disclaimed in individual files. 10 | 11 | The authors hereby grant permission to use, copy, modify, distribute, 12 | and license this software and its documentation for any purpose, provided 13 | that existing copyright notices are retained in all copies and that this 14 | notice is included verbatim in any distributions. No written agreement, 15 | license, or royalty fee is required for any of the authorized uses. 16 | Modifications to this software may be copyrighted by their authors 17 | and need not follow the licensing terms described here, provided that 18 | the new terms are clearly indicated on the first page of each file where 19 | they apply. 20 | 21 | IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 22 | FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 23 | ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 24 | DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 25 | POSSIBILITY OF SUCH DAMAGE. 26 | 27 | THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 28 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 29 | FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 30 | IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 31 | NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 32 | MODIFICATIONS. 33 | 34 | GOVERNMENT USE: If you are acquiring this software on behalf of the 35 | U.S. government, the Government shall have only "Restricted Rights" 36 | in the software and related documentation as defined in the Federal 37 | Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you 38 | are acquiring the software on behalf of the Department of Defense, the 39 | software shall be classified as "Commercial Computer Software" and the 40 | Government shall have only "Restricted Rights" as defined in Clause 41 | 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the 42 | authors grant the U.S. Government and others acting in its behalf 43 | permission to use and distribute the software in accordance with the 44 | terms specified in this license. 45 | -------------------------------------------------------------------------------- /lib/md5/md5.test: -------------------------------------------------------------------------------- 1 | # -*- tcl -*- 2 | # md5.test: tests for the md5 commands 3 | # 4 | # This file contains a collection of tests for one or more of the Tcl 5 | # built-in commands. Sourcing this file into Tcl runs the tests and 6 | # generates output for errors. No output means no errors were found. 7 | # 8 | # Copyright (c) 2001 by ActiveState Tool Corp. 9 | # All rights reserved. 10 | # 11 | # RCS: @(#) $Id: md5.test,v 1.11 2006/10/09 21:41:41 andreas_kupries Exp $ 12 | 13 | # ------------------------------------------------------------------------- 14 | 15 | source [file join \ 16 | [file dirname [file dirname [file join [pwd] [info script]]]] \ 17 | devtools testutilities.tcl] 18 | 19 | testsNeedTcl 8.2 20 | testsNeedTcltest 1.0 21 | 22 | testing { 23 | useLocal md5.tcl md5 24 | } 25 | 26 | # ------------------------------------------------------------------------- 27 | 28 | if {[catch {package present Trf}] || [catch {::md5 -- test}]} { 29 | puts "> pure Tcl" 30 | } else { 31 | puts "> Trf based" 32 | } 33 | 34 | # ------------------------------------------------------------------------- 35 | 36 | test md5-1.0 {md5} { 37 | catch {::md5::md5} result 38 | set result 39 | } [tcltest::wrongNumArgs "::md5::md5" "msg" 0] 40 | 41 | test md5-1.1 {md5} { 42 | catch {::md5::hmac} result 43 | set result 44 | } [tcltest::wrongNumArgs "::md5::hmac" "key text" 0] 45 | 46 | test md5-1.2 {md5} { 47 | catch {::md5::hmac key} result 48 | set result 49 | } [tcltest::wrongNumArgs "::md5::hmac" "key text" 1] 50 | 51 | 52 | foreach {n msg expected} { 53 | 1 "" 54 | "d41d8cd98f00b204e9800998ecf8427e" 55 | 2 "a" 56 | "0cc175b9c0f1b6a831c399e269772661" 57 | 3 "abc" 58 | "900150983cd24fb0d6963f7d28e17f72" 59 | 4 "message digest" 60 | "f96b697d7cb7938d525a2f31aaf161d0" 61 | 5 "abcdefghijklmnopqrstuvwxyz" 62 | "c3fcd3d76192e4007dfb496cca67e13b" 63 | 6 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 64 | "d174ab98d277d9f5a5611c2c9f419d9f" 65 | 7 "12345678901234567890123456789012345678901234567890123456789012345678901234567890" 66 | "57edf4a22be3c955ac49da2e2107b67a" 67 | } { 68 | test md5-2.$n {md5} { 69 | ::md5::md5 $msg 70 | } $expected ; # {} 71 | } 72 | 73 | foreach {n key text expected} { 74 | 1 "" "" "74e6f7298a9c2d168935f58c001bad88" 75 | 2 "foo" "hello" "ef2ac8901530db30aa56929adfe5e13b" 76 | 3 "bar" "world" "dfc05594b019ed51535922a1295446e8" 77 | 4 "key" "text" "d0ca6177c61c975fd2f8c07d8c6528c6" 78 | 5 "md5" "hmac" "d189f362daf86a5c8e14ba4aba91b260" 79 | 6 "hmac" "md5" "480343cf0f2d5931ec4923e81059fb84" 80 | 7 "md5" "md5" "92c5fb986e345f21f181047ab939ec77" 81 | 8 "hmac" "hmac" "08abbe58a55219789e3eede153808a56" 82 | 9 "01234567abcdefgh01234567abcdefgh01234567abcdefgh01234567abcdefgh==" "hello world" 83 | "cf0237466f9b3c773858a1892b474c9e" 84 | } { 85 | test md5-3.$n {hmac} { 86 | ::md5::hmac $key $text 87 | } $expected ; # {} 88 | } 89 | 90 | testsuiteCleanup 91 | -------------------------------------------------------------------------------- /lib/md5/md5.h: -------------------------------------------------------------------------------- 1 | #ifndef MD5_H 2 | #define MD5_H 3 | 4 | /* 5 | *********************************************************************** 6 | ** md5.h -- header file for implementation of MD5 ** 7 | ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** 8 | ** Created: 2/17/90 RLR ** 9 | ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** 10 | ** Revised (for MD5): RLR 4/27/91 ** 11 | ** -- G modified to have y&~z instead of y&z ** 12 | ** -- FF, GG, HH modified to add in last register done ** 13 | ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** 14 | ** -- distinct additive constant for each step ** 15 | ** -- round 4 added, working mod 7 ** 16 | *********************************************************************** 17 | */ 18 | 19 | /* 20 | * Edited 7 May 93 by CP to change the interface to match that 21 | * of the MD5 routines in RSAREF. Due to this alteration, this 22 | * code is "derived from the RSA Data Security, Inc. MD5 Message- 23 | * Digest Algorithm". (See below.) Also added argument names 24 | * to the prototypes. 25 | */ 26 | 27 | /* 28 | *********************************************************************** 29 | ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** 30 | ** ** 31 | ** License to copy and use this software is granted provided that ** 32 | ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** 33 | ** Digest Algorithm" in all material mentioning or referencing this ** 34 | ** software or this function. ** 35 | ** ** 36 | ** License is also granted to make and use derivative works ** 37 | ** provided that such works are identified as "derived from the RSA ** 38 | ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** 39 | ** material mentioning or referencing the derived work. ** 40 | ** ** 41 | ** RSA Data Security, Inc. makes no representations concerning ** 42 | ** either the merchantability of this software or the suitability ** 43 | ** of this software for any particular purpose. It is provided "as ** 44 | ** is" without express or implied warranty of any kind. ** 45 | ** ** 46 | ** These notices must be retained in any copies of any part of this ** 47 | ** documentation and/or software. ** 48 | *********************************************************************** 49 | */ 50 | 51 | /* typedef a 32-bit type */ 52 | typedef unsigned int UINT4; 53 | 54 | /* Data structure for MD5 (Message-Digest) computation */ 55 | typedef struct { 56 | UINT4 buf[4]; /* scratch buffer */ 57 | UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ 58 | unsigned char in[64]; /* input buffer */ 59 | } MD5_CTX; 60 | 61 | void MD5Init (MD5_CTX *mdContext); 62 | void MD5Update (MD5_CTX *mdContext, unsigned char *buf, unsigned int len); 63 | void MD5Final (unsigned char digest[16], MD5_CTX *mdContext); 64 | void Transform (UINT4 *buf, UINT4 *in); 65 | 66 | #endif 67 | -------------------------------------------------------------------------------- /lib/md5/md5c.tcl: -------------------------------------------------------------------------------- 1 | # md5c.tcl - 2 | # 3 | # Wrapper for RSA's Message Digest in C 4 | # 5 | # Written by Jean-Claude Wippler 6 | # 7 | # $Id: md5c.tcl,v 1.5 2009/05/06 22:46:10 patthoyts Exp $ 8 | 9 | package require critcl; # needs critcl 10 | # @sak notprovided md5c 11 | package provide md5c 0.12; # 12 | 13 | critcl::cheaders md5.h; # The RSA header file 14 | critcl::csources md5.c; # The RSA MD5 implementation. 15 | 16 | namespace eval ::md5 { 17 | 18 | critcl::ccode { 19 | #include "md5.h" 20 | #include 21 | 22 | static 23 | Tcl_ObjType md5_type; /* fast internal access representation */ 24 | 25 | static void 26 | md5_free_rep(Tcl_Obj *obj) 27 | { 28 | MD5_CTX *mp = (MD5_CTX *) obj->internalRep.otherValuePtr; 29 | Tcl_Free(mp); 30 | } 31 | 32 | static void 33 | md5_dup_rep(Tcl_Obj *obj, Tcl_Obj *dup) 34 | { 35 | MD5_CTX *mp = (MD5_CTX *) obj->internalRep.otherValuePtr; 36 | dup->internalRep.otherValuePtr = Tcl_Alloc(sizeof *mp); 37 | memcpy(dup->internalRep.otherValuePtr, mp, sizeof *mp); 38 | dup->typePtr = &md5_type; 39 | } 40 | 41 | static void 42 | md5_string_rep(Tcl_Obj *obj) 43 | { 44 | unsigned char buf[16]; 45 | Tcl_Obj *temp; 46 | char *str; 47 | MD5_CTX dup = *(MD5_CTX *) obj->internalRep.otherValuePtr; 48 | 49 | MD5Final(buf, &dup); 50 | 51 | /* convert via a byte array to properly handle null bytes */ 52 | temp = Tcl_NewByteArrayObj(buf, sizeof buf); 53 | Tcl_IncrRefCount(temp); 54 | 55 | str = Tcl_GetStringFromObj(temp, &obj->length); 56 | obj->bytes = Tcl_Alloc(obj->length + 1); 57 | memcpy(obj->bytes, str, obj->length + 1); 58 | 59 | Tcl_DecrRefCount(temp); 60 | } 61 | 62 | static int 63 | md5_from_any(Tcl_Interp* ip, Tcl_Obj* obj) 64 | { 65 | assert(0); 66 | return TCL_ERROR; 67 | } 68 | 69 | static 70 | Tcl_ObjType md5_type = { 71 | "md5c", md5_free_rep, md5_dup_rep, md5_string_rep, md5_from_any 72 | }; 73 | } 74 | 75 | critcl::ccommand md5c {dummy ip objc objv} { 76 | MD5_CTX *mp; 77 | unsigned char *data; 78 | int size; 79 | Tcl_Obj *obj; 80 | 81 | if (objc < 2 || objc > 3) { 82 | Tcl_WrongNumArgs(ip, 1, objv, "data ?context?"); 83 | return TCL_ERROR; 84 | } 85 | 86 | if (objc == 3) { 87 | if (objv[2]->typePtr != &md5_type && md5_from_any(ip, objv[2]) != TCL_OK) { 88 | return TCL_ERROR; 89 | } 90 | obj = objv[2]; 91 | if (Tcl_IsShared(obj)) { 92 | obj = Tcl_DuplicateObj(obj); 93 | } 94 | } else { 95 | mp = (MD5_CTX *)Tcl_Alloc(sizeof *mp); 96 | MD5Init(mp); 97 | obj = Tcl_NewObj(); 98 | Tcl_InvalidateStringRep(obj); 99 | obj->internalRep.otherValuePtr = mp; 100 | obj->typePtr = &md5_type; 101 | } 102 | 103 | mp = (MD5_CTX *) obj->internalRep.otherValuePtr; 104 | data = Tcl_GetByteArrayFromObj(objv[1], &size); 105 | MD5Update(mp, data, size); 106 | Tcl_SetObjResult(ip, obj); 107 | 108 | return TCL_OK; 109 | } 110 | } 111 | 112 | if {[info exists pkgtest] && $pkgtest} { 113 | 114 | proc md5c_try {} { 115 | foreach {msg expected} { 116 | "" 117 | "d41d8cd98f00b204e9800998ecf8427e" 118 | "a" 119 | "0cc175b9c0f1b6a831c399e269772661" 120 | "abc" 121 | "900150983cd24fb0d6963f7d28e17f72" 122 | "message digest" 123 | "f96b697d7cb7938d525a2f31aaf161d0" 124 | "abcdefghijklmnopqrstuvwxyz" 125 | "c3fcd3d76192e4007dfb496cca67e13b" 126 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 127 | "d174ab98d277d9f5a5611c2c9f419d9f" 128 | "12345678901234567890123456789012345678901234567890123456789012345678901234567890" 129 | "57edf4a22be3c955ac49da2e2107b67a" 130 | } { 131 | puts "testing: ::md5::md5c \"$msg\"" 132 | binary scan [::md5::md5c $msg] H* computed 133 | puts "computed: $computed" 134 | if {0 != [string compare $computed $expected]} { 135 | puts "expected: $expected" 136 | puts "FAILED" 137 | } 138 | } 139 | 140 | foreach len {10 50 100 500 1000 5000 10000} { 141 | set blanks [format %$len.0s ""] 142 | puts "input length $len: [time {md5c $blanks} 1000]" 143 | } 144 | } 145 | 146 | md5c_try 147 | } 148 | -------------------------------------------------------------------------------- /util/extractStrings.tcl: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env tclsh 2 | # 3 | # Call clock before rewritting msgcat creator to avoid having it set 4 | # extra strings 5 | set now [split [clock format [clock seconds] -format %Y/%m/%d/%u] "/"] 6 | package require msgcat 7 | namespace eval ::msgcat { 8 | 9 | variable msgdata 10 | 11 | proc mc {src args} { 12 | # Check for the src in each namespace starting from the local and 13 | # ending in the global. 14 | 15 | variable msgdata 16 | variable Msgs 17 | variable Loclist 18 | variable Locale 19 | 20 | set ns [uplevel 1 [list ::namespace current]] 21 | 22 | while {$ns != ""} { 23 | foreach loc $Loclist { 24 | lappend msgdata $src 25 | if {[dict exists $Msgs $loc $ns $src]} { 26 | if {[llength $args] == 0} { 27 | return [dict get $Msgs $loc $ns $src] 28 | } else { 29 | return [format [dict get $Msgs $loc $ns $src] {*}$args] 30 | } 31 | } 32 | } 33 | set ns [namespace parent $ns] 34 | } 35 | # we have not found the translation 36 | return [uplevel 1 [list [namespace origin mcunknown] \ 37 | $Locale $src {*}$args]] 38 | } 39 | } 40 | 41 | # For each file found in arguments run extraction of strings 42 | proc processArgs {} { 43 | foreach File [lsearch -inline -all $::argv *.tcl] { 44 | loadMagCatStrings [file normalize $File] 45 | getMsgCatStrings [file normalize $File] 46 | writeMsgCatTCL [lsort -uniq $::msgcat::msgdata] $File 47 | #loadMagCatStrings [file normalize $File] 48 | } 49 | } 50 | # Find all msgcat strings in tcl file 51 | # Return list 52 | proc getMsgCatStrings { File } { 53 | set data [open $File r] 54 | while {-1 != [gets $data line]} { 55 | set result [regexp -inline -all -- {\[(?:::msgcat::)??mc (?:.*?)\]} $line] 56 | if {$result ne {}} { 57 | foreach match $result { 58 | set parsed [lindex [string trim $match {\[\{\}\]}] 1] 59 | if {[string index $parsed 0] ne {$}} { 60 | lappend ::msgcat::msgdata $parsed 61 | } 62 | } 63 | } 64 | incr i 65 | } 66 | close $data 67 | } 68 | 69 | # Get all mc runtime strings on tcl script and append them to list 70 | proc loadMagCatStrings { File } { 71 | source $File 72 | } 73 | # Write Tcl file with only the strings for msgcat 74 | proc writeMsgCatTCL { strings name } { 75 | set dirname [file dirname [file normalize [info script]]] 76 | set filename [file join $dirname "msgcatSTR_[file tail $name]"] 77 | set File [open $filename w] 78 | puts $File "# Translation strings for $name" 79 | foreach find $strings { 80 | # set string [lindex $find 1] 81 | puts $File [format {::msgcat::mc "%s"} [string map {$ \\$} $find]] 82 | } 83 | close $File 84 | } 85 | processArgs 86 | 87 | #writeMsgCatTCL [getMsgCatStrings $string] 88 | # ]*>(.*?) 89 | # workflow 90 | # Script takes all trans strings from file to a "dict for making po" 91 | # dict used as source for gettext 92 | # po edited file (LANG.po) to new parser for .msg formatting 93 | 94 | set postring { 95 | msgid "" 96 | msgstr "" 97 | "Project-Id-Version: \n" 98 | "Report-Msgid-Bugs-To: \n" 99 | "POT-Creation-Date: 2013-12-20 18:56-0600\n" 100 | "PO-Revision-Date: 2013-12-20 18:56-0600\n" 101 | "Last-Translator: IvanYossi \n" 102 | "Language-Team: \n" 103 | "Language: \n" 104 | "MIME-Version: 1.0\n" 105 | "Content-Type: text/plain; charset=UTF-8\n" 106 | "Content-Transfer-Encoding: 8bit\n" 107 | "X-Poedit-KeywordsList: ::mc\n" 108 | "X-Poedit-Basepath: ../\n" 109 | "X-Poedit-SourceCharset: utf-8\n" 110 | "X-Poedit-SearchPath-0: .\n" 111 | "X-Poedit-SearchPath-1: ..\n" 112 | 113 | #: artscript2.tcl:48 114 | #: ../artscriptk/artscript2.tcl:48 115 | msgid "Tk drag and drop enabled" 116 | msgstr "Tk, arrastrar y soltar, habilitado" 117 | 118 | #: artscript2.tcl:157 119 | #: ../artscriptk/artscript2.tcl:157 120 | #, tcl-format 121 | msgid "%1$s not found" 122 | msgstr "%1$s no encontrado" 123 | 124 | #: artscript2.tcl:290 125 | #: ../artscriptk/artscript2.tcl:290 126 | #, tcl-format 127 | msgid "%s is not a valid ORA/KRA" 128 | msgstr "" 129 | 130 | } 131 | # puts $postring 132 | 133 | # Converts .po file into .msg format 134 | # returns list 135 | proc parsePo { postring {fileName 0} } { 136 | set i 0 137 | foreach line [split $postring \n] { 138 | if { $line eq {} } { 139 | incr i 140 | continue 141 | } 142 | dict lappend poparsed $i $line 143 | } 144 | dict for {key value} $poparsed { 145 | if { [llength $value] > 6 } { 146 | continue 147 | } 148 | set vlist [join $value] 149 | lappend result $vlist 150 | incr i 151 | } 152 | return $result 153 | } 154 | proc writeMsgFile { data } { 155 | foreach el $data { 156 | # set line [join [lrange $el 0 1]] 157 | set orstring [lindex $el end-2] 158 | set transtring [lindex $el end] 159 | puts [format {msgcat::mcset %s {%s} {%s}} $::LANG $orstring $transtring] 160 | } 161 | } 162 | # writeMsgFile [parsePo $postring] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | artscript 2 | ========== 3 | 4 | Artscript is, in essence, a small app (or big script) to easily convert production file images (KRA, XCF, PSD, ORA, SVG, PNG) to universal formats (JPG, PNG, GIF or WEBM). Made with digital designers and painters in mind the final images aim for high quality results, not speed processing. Careful control and tests were made to ensure the quality is best. 5 | 6 | In between the production file and the final image you can decide many aspects of the final image. The final image can be of any size (or multiple), have a watermark placed (image or text), or a collection or images can be ensembled together to form a tiled image file (For more details read "How to use it" section below). 7 | 8 | The script is configurable almost entirely and the last used settings are remembered between sessions making the usage the least intrusive as possible. This fastens deployment of several images made for a project at different moments in the preproduction stage. In the configuration file its possible to set more than one preset, so you can have a "personal" preset, with sizes tailored for your blog and a "Client work" with your personal information as a watermark label a proper size, or sizes, for the client needs. 9 | 10 | ![Loaded artscritp GUI](http://colorathis.files.wordpress.com/2013/12/2013-12-11_1386804177.png) 11 | 12 | ### How it works 13 | Artscript uses Imagemagick to output the final images. This creates a problem as imagemagick does not support XCF, PSD, SVG or AI fully or KRA, ORA at all. But, if the programs are available on the system, artscript will use Gimp, Inkscape or Krita (XCF, SVG , KRA, ORA…) to render the formats to PNG before converting to the final output. 14 | 15 | The resulting PNGs are then feed to Imagemagick to get the desired output. This has the great benefit of rendering the files exactly as you worked them. 16 | 17 | Other input images supported are: BMP, DNG EXR GIF JPG TGA TIF XPM WEBP 18 | 19 | ### Goal 20 | - Aid in the deploy of digital artwork for media with the best possible quality 21 | 22 | ### License 23 | GPL 3.0 24 | 25 | ### Credits 26 | Developer:**Ivan Yossi** (http://colorathis.wordpress.com/ , ghevan@gmail.com) 27 | Original idea:**David Revoy** (www.davidrevoy.com , info@davidrevoy.com) 28 | Other contributors: Vasco Alexander Basqué (Gui advices) 29 | 30 | Project page: https://github.com/vanyossi/artscriptk 31 | 32 | ### Disclamer 33 | I'm a developer in development. I have tested as much as possible but there might be some rough edges and bugs. I encourage you to report on the github project page. 34 | 35 | Ok so… what do I need? 36 | ---------------------- 37 | At the moment it only runs perfectly on Linux, as long as the dependencies are met. It has been tested to run ok on OSX but it will only convert imagemagick supported formats. 38 | 39 | ### Dependencies 40 | - **Tcl/Tk:** 41 | - **ImageMagick (6.7.5 and up):** Library for manipulating image formats. 42 | - **zip:** Get info from ORA and KRA files (width height and the likes) 43 | - **Krita (optional):** Handles the extraction from ORA and KRA files to PNG. (Also does PSD if gimp is not present) 44 | - **Inkscape (optional):** Handles mostly SVG and AI converts. If not found Imagemagick will perform SVG transforms 45 | - **GIMP (optional):** Handles XCF and PSD extraction to PNG. If not found Imagemagick will perform XCF transforms 46 | 47 | Detailed info: * [Installing Dependencies](https://github.com/vanyossi/artscriptk/wiki/Dependencies) 48 | 49 | 50 | How to use it 51 | ------------- 52 | The original idea was to have a small script to run from the file manager (dolphin, thunar nautilus) to quickly deploy the desired images. As such, that is the best way to use it, however it is posible to call it as standalone application. 53 | 54 | It can be used in the following ways 55 | * From the right click menu of your file manager (recommended) 56 | * From terminal. while it doesn't accept input from pipes you can feed the script using "xargs" 57 | * Standalone: the script can be launched as an application on it's own. adding files using the buttons or dragging and dropping files into the app window. 58 | 59 | ### How to run it 60 | * [In a context menu](https://github.com/vanyossi/artscriptk/wiki/Setting-a-context-menu) 61 | * [From the terminal](https://github.com/vanyossi/artscriptk/wiki/Using-from-command-line) 62 | * [As a standalone app](https://github.com/vanyossi/artscriptk/wiki/Using-as-Stand-alone-application) 63 | 64 | Artscript usage 65 | --------------- 66 | Below you will find the detailed instructions on how to use the script to add your watermarks, do multi-resize operations, making collages as well as the configuration options available. 67 | 68 | * [Managing images](https://github.com/vanyossi/artscriptk/wiki/Managing-images) 69 | * [Add watermarks](https ://github.com/vanyossi/artscriptk/wiki/Add-a-Watermark) 70 | * [Resizing](https://github.com/vanyossi/artscriptk/wiki/Resizing) 71 | * [Assembling a Collage](https://github.com/vanyossi/artscriptk/wiki/Assembling-a-Collage) 72 | * [Preparing the output](https://github.com/vanyossi/artscriptk/wiki/Preparing-the-output) 73 | * [Convert](https://github.com/vanyossi/artscriptk/wiki/Convert) 74 | 75 | 76 | Personalizing the script 77 | ------------------------ 78 | The file called **presets.config.example** in the root folder has all the information you need to configure the default values. 79 | 80 | Rename **presets.config.example** to **presets.config** to allow the script to find it. The file must be in the same directory as the script to be found. 81 | 82 | Artscript remembers 83 | ------------------- 84 | Artscript has an option to remember the choices you made the previous run. It is off by default. Activation is done in **presets.config** file. Search for the key remember_state and change the value to 1 85 | ``` 86 | remember_state=1 87 | ``` 88 | -------------------------------------------------------------------------------- /msg/es.msg: -------------------------------------------------------------------------------- 1 | # Translation file for ../translate/es.po 2 | 3 | # msgid "" 4 | # msgstr "" 5 | # "Project-Id-Version: Artscript v2.2\n" 6 | # "Report-Msgid-Bugs-To: \n" 7 | # "POT-Creation-Date: 2013-12-24 19:40-0600\n" 8 | # "PO-Revision-Date: 2013-12-24 19:45-0600\n" 9 | # "Last-Translator: IvanYossi \n" 10 | # "Language-Team: \n" 11 | # "Language: \n" 12 | # "MIME-Version: 1.0\n" 13 | # "Content-Type: text/plain; charset=UTF-8\n" 14 | # "Content-Transfer-Encoding: 8bit\n" 15 | # "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 16 | # "X-Poedit-Basepath: .\n" 17 | # "X-Poedit-SourceCharset: utf-8\n" 18 | # "X-Poedit-SearchPath-0: .\n" 19 | 20 | ::msgcat::mcmset es { 21 | {%f => file.ext, %e => ext, %G => WxH} {%f => archivo.ext, %e => ext, %G => WxH} 22 | {%s file format not supported} {Formato de archivo %s no soportado} 23 | {%s has no thumb} {%s no tiene miniatura} 24 | {%s has normal thumb} {%s tiene miniatura normal} 25 | {%s is not a valid ORA/KRA} {%s no es un archivo ORA/KRA válido} 26 | {%s not a valid PSD file} {%s no es un archivo PSD válido} 27 | {Add custom size. ratio : wxh} {Añadir tamaño personalizado: wxh} 28 | {Add files} {Añadir} 29 | {Add folder} {+Folder} 30 | {All} {Todo} 31 | {All collages assembled} {Todos los mosaicos armados} 32 | {Allow Overwrite} {Sobreescribir} 33 | {Artscript %1$s -- %2$s Files selected} {Artscript %1$s -- %2$s Archivos seleccionados} 34 | {Artscript %s} {Artscript %s} 35 | {Border} {Borde} 36 | {Bottom} {Abajo} 37 | {BottomLeft} {Abajo Iz.} 38 | {BottomRight} {Abajo Der.} 39 | {Center} {Centro} 40 | {Choose color} {Elige un color} 41 | {Collage} {Collage} 42 | {Collage Background Color} {Color de fondo} 43 | {Collage Border Color} {Color de borde} 44 | {Collage Label Color} {Color de etiqueta} 45 | {Collage file name:} {Nombre del Collage:} 46 | {Collections} {Colecciones} 47 | {Color} {Color} 48 | {Colors:} {Colores:} 49 | {Columns:} {Columnas:} 50 | {Compress:} {Comprimir:} 51 | {Concatenation} {Concatenar} 52 | {Configuration file found in %s} {Archivo de configuración encontrado en %s} 53 | {Convert} {Convertir} 54 | {Convert done.} {Conversión terminada} 55 | {Converting... %1$s to %2$s} {Convirtiendo... %1$s a %2$s} 56 | {Crop} {Cortar} 57 | {Error! %s} {¡Error! %s} 58 | {Estimate size} {Estimar tamaño} 59 | {Extracting file %s} {Extrayendo archivo %s} 60 | {File Conversions Done!} {Conversión de archivos terminada!} 61 | {File extractions finished} {Extracción de archivos terminada} 62 | {Format:} {Formato:} 63 | {Generating preview} {Generando pre visualización} 64 | {ID} {ID} 65 | {Image Strip h} {Tira de Imágenes h} 66 | {Image Strip v} {Tira de Imágenes v} 67 | {Image Style} {Estilo de imagen} 68 | {Image area is bigger} {El área de imagen es mayor:} 69 | {Input} {Entrada} 70 | {Inverse} {Invertir} 71 | {Keep format} {Mismo formato} 72 | {Label:} {Etiqueta:} 73 | {Layouts:} {Mapeo} 74 | {Left} {Izquierda} 75 | {Load preset:} {Cargar opciones:} 76 | {Make Collage} {Crear Collage} 77 | {Make Collage%s} {Crear Collage!} 78 | {Make Collage?} {Crear Collage?} 79 | {Make ORA} {Crear ORA:} 80 | {Mode} {Modo} 81 | {Mode:} {Modo:} 82 | {Need more data} {Necesito datos} 83 | {New} {Nuevo} 84 | {No Thumbnail} {Sin miniatura} 85 | {No images loaded!} {¡No hay imágenes en lista!} 86 | {None} {Nada} 87 | {ORA Image Files Ready!} {¡Imágenes Ora listas!} 88 | {OnlyGrow} {Agrandar solo} 89 | {OnlyShrink} {Reducir solo} 90 | {Opacity} {Opacidad} 91 | {Oraizing... %s} {Creando imágenes Ora... %s} 92 | {Output} {Salida} 93 | {Output & Quality} {Salida y Calidad} 94 | {Padding} {Margen} 95 | {Photo sheet} {Hoja de contactos} 96 | {Position} {Posición} 97 | {Powering up Collage Assembly line} {Encendiendo línea de ensamblaje de Collage} 98 | {Prefix and Suffix} {Prefijo y Sufijo} 99 | {Presets config name keys changed drastically from v2.0 to 2.1 If your presets does not load please review presets.config.example file to check the new names.} {Los nombres de las opciones de configuración cambiaron drásticamente de la versión 2.0 a la 2.1. Si tus opciones son ignoradas, no olvides revisar el archivo "presets.config.example" para conocer los nombres nuevos.} 100 | {Preview} {Pre visualizar} 101 | {Program %s not found} {Programa %s no encontrado} 102 | {Quality:} {Calidad:} 103 | {Range:} {Rango:} 104 | {Remove Alfa} {Remover Alfa} 105 | {Remove Selected} {Quitar} 106 | {Rename} {Renombrar} 107 | {Rename Images Done!} {¡Cambio de nombre terminado!} 108 | {Rename finished.} {Renombrado terminado.} 109 | {Renaming...} {Renombrando...} 110 | {Rendering Gimps} {Renderizando Gimps} 111 | {Rendering Ink Scapes} {Renderizando InkScapes} 112 | {Rendering Kriters} {Renderizando Kriters} 113 | {Resize} {Escalar} 114 | {Right} {Derecha} 115 | {Rotation} {Rotación} 116 | {Rows:} {Filas:} 117 | {Scale} {Escalar} 118 | {Select} {Escoger} 119 | {Select:} {Escoger:} 120 | {Size} {Tamaño} 121 | {Size out} {T. Salida} 122 | {Something went wrong, tmp png wasn't created} {Algo salio mal, no se pudo crear el archivo temporal png} 123 | {Square 3x3} {Cuadrado 3x3} 124 | {Starting Convert...} {Comenzando conversión...} 125 | {Starting File extractions...} {Comenzando extracción de archivos...} 126 | {Storyboard} {Storyboard} 127 | {Stretch} {Estirar} 128 | {Style:} {Estilo:} 129 | {Suported Images} {Imágenes soportadas} 130 | {Text Style} {Estilo del texto} 131 | {Thumbnail} {Miniatura} 132 | {Tile size. ratio : w x h} {Tamaño de tesela:} 133 | {Tk drag and drop enabled} {Tk, arrastrar y soltar habilitado} 134 | {Top} {Arriba} 135 | {TopLeft} {Arriba Iz.} 136 | {TopRight} {Arriba Der.} 137 | {Watermark} {Marca de agua} 138 | {Watermark Text Color} {Color de texto de marca de agua} 139 | {Wrap} {Repetir} 140 | {Zero geometry} {Geometría Cero} 141 | {Zoom} {Acercamiento} 142 | {all} {todo} 143 | {bright} {brillante} 144 | {clear} {limpiar} 145 | {dark} {oscuro} 146 | {darker} {negro} 147 | {default} {por defecto} 148 | {error: %s} {error: %s} 149 | {ext.} {ext.} 150 | {file %s found!} {archivo %s encontrado!} 151 | {icon} {ícono} 152 | {image} {imagen} 153 | {inv.} {inv.} 154 | {label} {etiqueta} 155 | {neutral} {neutral} 156 | {percentage} {porcentajes} 157 | {renaming... %s} {rebautizando... %s} 158 | {sels} {sels} 159 | {text} {texto} 160 | {texture} {textura} 161 | {wallpaper} {fondo de escritorio} 162 | {webp lossy} {webp con pérdida} 163 | } 164 | -------------------------------------------------------------------------------- /msg/fr.msg: -------------------------------------------------------------------------------- 1 | # Translation file for fr.po 2 | 3 | # msgid "" 4 | # msgstr "" 5 | # "Project-Id-Version: Artscript v2.2\n" 6 | # "Report-Msgid-Bugs-To: \n" 7 | # "POT-Creation-Date: 2014-01-23 19:40-0600\n" 8 | # "PO-Revision-Date: 2014-01-23 19:45-0600\n" 9 | # "Last-Translator: Deevad \n" 10 | # "Language-Team: \n" 11 | # "Language: \n" 12 | # "MIME-Version: 1.0\n" 13 | # "Content-Type: text/plain; charset=UTF-8\n" 14 | # "Content-Transfer-Encoding: 8bit\n" 15 | # "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 16 | # "X-Poedit-Basepath: .\n" 17 | # "X-Poedit-SourceCharset: utf-8\n" 18 | # "X-Poedit-SearchPath-0: .\n" 19 | 20 | ::msgcat::mcmset fr { 21 | {%f => file.ext, %e => ext, %G => WxH} {%f => fichier.ext, %e => ext, %G => WxH} 22 | {%s file format not supported} {Format de fichier %s non pris en charge} 23 | {%s has no thumb} {%s n'a pas de vignette} 24 | {%s has normal thumb} {%s a une vignette normale} 25 | {%s is not a valid ORA/KRA} {%s n'est pas un fichier ORA/KRA valide} 26 | {%s not a valid PSD file} {%s n'est pas un fichier PSD valide} 27 | {Add custom size. ratio : wxh} {Personnaliser la taille, le ratio: wxh} 28 | {Add files} {Ajouter} 29 | {Add folder} {+Dossier} 30 | {All} {Tout} 31 | {All collages assembled} {Tous les collages assemblé} 32 | {Allow Overwrite} {Permettre l'écrasement} 33 | {Artscript %1$s -- %2$s Files selected} {Artscript %1$s -- %2$s fichiers selectionnés} 34 | {Artscript %s} {Artscript %s} 35 | {Border} {Bordure} 36 | {Bottom} {Bas} 37 | {BottomLeft} {Bas-Gauche.} 38 | {BottomRight} {Bas-Droit} 39 | {Center} {Centre} 40 | {Choose color} {Choisir une couleur} 41 | {Collage} {Collage} 42 | {Collage Background Color} {Couleur du fond} 43 | {Collage Border Color} {Couleur de la bordure} 44 | {Collage Label Color} {Couleur de l'étiquette} 45 | {Collage file name:} {Nom du Collage:} 46 | {Collections} {Collections} 47 | {Color} {Couleur} 48 | {Colors:} {Couleurs:} 49 | {Columns:} {Colonnes:} 50 | {Compress:} {Compresser:} 51 | {Concatenation} {Concatener} 52 | {Configuration file found in %s} {Fichier de configuration trouvé dans %s} 53 | {Convert} {Convertir} 54 | {Convert done.} {Convertion terminé} 55 | {Converting... %1$s to %2$s} {Convertion... %1$s a %2$s} 56 | {Crop} {Recadrer} 57 | {Error! %s} {Erreur! %s} 58 | {Estimate size} {Taille estimée} 59 | {Extracting file %s} {Extraction du fichier %s} 60 | {File Conversions Done!} {Convertion de fichier terminé!} 61 | {File extractions finished} {Convertions de fichiers terminés!} 62 | {Format:} {Format:} 63 | {Generating preview} {Generation d'une prévisualisation} 64 | {ID} {ID} 65 | {Image Strip h} {Suite d'image h} 66 | {Image Strip v} {Suite d'image v} 67 | {Image Style} {style d'image} 68 | {Image area is bigger} {Zone de l'image est plus grande:} 69 | {Input} {Ajout} 70 | {Inverse} {Inverser} 71 | {Keep format} {Garder le format} 72 | {Label:} {Etiquette:} 73 | {Layouts:} {Disposition:} 74 | {Left} {Gauche} 75 | {Load preset:} {Charger la preconfiguration:} 76 | {Make Collage} {Faire le Collage} 77 | {Make Collage%s} {Créer le Collage!} 78 | {Make Collage?} {Créer le Collage?} 79 | {Make ORA} {Faire un ORA:} 80 | {Mode} {Mode} 81 | {Mode:} {Mode:} 82 | {Need more data} {Necessite plus de données} 83 | {New} {Nouveau} 84 | {No Thumbnail} {Sans vignettes} 85 | {No images loaded!} {Pas d'images listées!} 86 | {None} {Rien} 87 | {ORA Image Files Ready!} {Fichier ORA prêt!} 88 | {OnlyGrow} {Seulement Agrandir} 89 | {OnlyShrink} {Seulement rétrecir} 90 | {Opacity} {Opacité} 91 | {Oraizing... %s} {Cretion d'image Ora... %s} 92 | {Output} {Sortie} 93 | {Output & Quality} {Sortie et qualité} 94 | {Padding} {Marge} 95 | {Photo sheet} {Planche de contact} 96 | {Position} {Position} 97 | {Powering up Collage Assembly line} {Motorisation d'un assemblage de collage} 98 | {Prefix and Suffix} {Prefix et Suffix} 99 | {Presets config name keys changed drastically from v2.0 to 2.1 If your presets does not load please review presets.config.example file to check the new names.} {Les fichiers de configurations ont changés depuis v2.0 a 2.1. Si vos presets ne charge pas , merci de reconfigurer presets.config.example et verifier les nouveaux noms.} 100 | {Preview} {Prévisualisation} 101 | {Program %s not found} {Logiciel %s introuvable} 102 | {Quality:} {Qualité:} 103 | {Range:} {Etendu:} 104 | {Remove Alfa} {Supprimer la transparence} 105 | {Remove Selected} {Supprimer les selectionnés} 106 | {Rename} {Renommer} 107 | {Rename Images Done!} {Renommage d'image terminé!} 108 | {Rename finished.} {Renommage terminé.} 109 | {Renaming...} {Renommage...} 110 | {Rendering Gimps} {Rendu de Gimps} 111 | {Rendering Ink Scapes} {Rendu d'InkScapes} 112 | {Rendering Kriters} {Rendu de Krita} 113 | {Resize} {Redimensionner} 114 | {Right} {Droite} 115 | {Rotation} {Rotation} 116 | {Rows:} {Lignes:} 117 | {Scale} {Redimensionné} 118 | {Select} {Selectionné} 119 | {Select:} {Selection:} 120 | {Size} {Taille} 121 | {Size out} {Taille extérieur} 122 | {Something went wrong, tmp png wasn't created} {Quelquechose d'imprevu c'est passé ; et le png temporaire n'a pas pu être crée} 123 | {Square 3x3} {Carré 3x3} 124 | {Starting Convert...} {Début de la convertion...} 125 | {Starting File extractions...} {Début de l'extraction de fichier...} 126 | {Storyboard} {Storyboard} 127 | {Stretch} {Etirer} 128 | {Style:} {Style:} 129 | {Suported Images} {Images supportées} 130 | {Text Style} {Style de texte} 131 | {Thumbnail} {Vignette} 132 | {Tile size. ratio : w x h} {Tamaño de tesela:} 133 | {Tk drag and drop enabled} {Tk, glisser/déposer actif} 134 | {Top} {Haut} 135 | {TopLeft} {Haut-Gauche.} 136 | {TopRight} {Haut-Droit.} 137 | {Watermark} {Filigrane} 138 | {Watermark Text Color} {Couleur du text filigrané} 139 | {Wrap} {Enveloppé} 140 | {Zero geometry} {Dimmension zéro} 141 | {Zoom} {Zoom} 142 | {all} {tous} 143 | {bright} {brillance} 144 | {clear} {effacer} 145 | {dark} {obscurité} 146 | {darker} {plus sombre} 147 | {default} {par défaut} 148 | {error: %s} {erreur: %s} 149 | {ext.} {ext.} 150 | {file %s found!} {fichier %s trouvé!} 151 | {icon} {icone} 152 | {image} {image} 153 | {inv.} {inv.} 154 | {label} {étiquette} 155 | {neutral} {neutre} 156 | {percentage} {pourcentage} 157 | {renaming... %s} {renommage... %s} 158 | {sels} {sels} 159 | {text} {texte} 160 | {texture} {texture} 161 | {wallpaper} {fond d'écran} 162 | {webp lossy} {webp avec perte} 163 | } 164 | -------------------------------------------------------------------------------- /presets.config.example: -------------------------------------------------------------------------------- 1 | ######==============####### 2 | ## Artscript config file ## 3 | ######==============####### 4 | # 5 | # Use this file load diferent settings at loading. 6 | # Lines starting with "#" will be ignored 7 | # To use rename to presets.config (remove the "example") 8 | # Custom variables (only autor available v2.2) 9 | autor=Autor 10 | 11 | # Use above variables like the example (ex. autor > $autor) 12 | # Other variables available: $date (current date), $year, $month, $day. 13 | # ex (watxt=$autor $now) 14 | # Filling listboxes 15 | # ex (watermarks="http://example.wordpress.com" "example@example.com" "copyright (c) $year $autor") 16 | 17 | 18 | # Default options 19 | 20 | # Presets 21 | # If no preset value is defined any uncommented value will be loaded by default. 22 | # See end of file to view an example 23 | 24 | # Preset name, put next to the equal simbol, no quoting. Follow examples 25 | # Anything below "preset=" will be loaded when artscript is called with argument ":preset" 26 | # ex ( $sh ~ artscript :preset collage file1.jpg file2.png file3.kra ) 27 | # example above loads anything below "preset=collage" 28 | # preset= 29 | 30 | # Turn on remember last used settings. Default 0 (off) 1 = On 31 | # Settings will be saved in .artscriptrc file in the same directory the script is running 32 | # remember_state=1 33 | 34 | # Order and columns shown in file treeview 35 | # Options available: id, ext, name, size, output, osize, color, path 36 | # columns_only_show=id ext output osize 37 | 38 | #-==== Watermark options 39 | # watermark_text= 40 | 41 | # watermark default list, follow example to add your own [listbox] 42 | # watermark_text_list="http://example.site.com" "example@example.com" "copyright (c) $year $autor" 43 | 44 | # watermark text size in points 45 | # watermark_size=10 46 | 47 | # Text watermark position "TopLeft" "Top" "TopRight" "Left" "Center" "Right" "BottomLeft" "Bottom" "BottomRight" 48 | # watermark_position=BottomRight 49 | 50 | # Text color in hex value (#fff, #ffffff) or tk colors http://www.tcl.tk/man/tcl8.4/TkCmd/colors.htm (white) 51 | # watermark_color=#ff3456 52 | 53 | # text opacity. 0 invisible, 100 opaque 54 | # watermark_text_opacity=70 55 | 56 | # watermark swatches. colors are set as Name Value pairs. Value must be in hex or tk name covention 57 | # watermark_color_swatches=Black black English-red #D00000 "Dark crimson" #780422 Orange #FE8B00 58 | 59 | # Image path uri, "Name Path" pairs. path must be an absolute path 60 | # watermark_image_list="Image name" "/path/to/image.png" "Image name" "/path/to/image.png" 61 | 62 | # Image watermark position. "TopLeft" "Top" "TopRight" "Left" "Center" "Right" "BottomLeft" "Bottom" "BottomRight" 63 | # watermark_image_position="BottomLeft" 64 | 65 | # Image size relative to image. (Not used v2.1) 66 | # watermark_image_size="90" 67 | 68 | # Image blending option. ( "Bumpmap" "Burn" "Color_Burn" "Color_Dodge" "Colorize" "Copy_Black" "Copy_Blue" "Copy_Cyan" "Copy_Green" "Copy_Magenta" "Copy_Opacity" "Copy_Red" "Copy_Yellow" "Darken" "DarkenIntensity" "Difference" "Divide" "Dodge" "Exclusion" "Hard_Light" "Hue" "Light" "Lighten" "LightenIntensity" "Linear_Burn" "Linear_Dodge" "Linear_Light" "Luminize" "Minus" "ModulusAdd" "ModulusSubtract" "Multiply" "Overlay" "Pegtop_Light" "Pin_Light" "Plus" "Saturate" "Screen" "Soft_Light" "Vivid_Light") 69 | # watermark_image_style="Over" 70 | 71 | 72 | #-==== Size options 73 | # Sizes available in preset lists. Space separated values. Use name "default" to autload some values. 74 | # Example sizes_set(NAME_OF_PRESET) = "value1 value2 value3..." 75 | # sizes_set(default)=1920x1080 1680x1050 1280x1024 50% 1024x768 720x720 640x480 76 | 77 | # Resize scale operator. Scale Stretch OnlyGrow OnlyShrink Zoom 78 | # resize_operators=Zoom 79 | 80 | # Operator Zoom crop position. 81 | # resize_zoom_position=North 82 | 83 | 84 | #-==== Collage options 85 | # Set custom name for collage 86 | # collage_name= 87 | 88 | # Set aspect ratio for collage tile size 89 | # collage_ratio= 90 | 91 | # Tile width and height 92 | # collage_wid= 93 | # collage_hei= 94 | 95 | # Layout options, column and rows 96 | # collage_col= 97 | # collage_row= 98 | 99 | # Number of images for each collage. 100 | # collage_range= 101 | 102 | # Default label value: Substitution strings. http://www.imagemagick.org/script/escape.php 103 | # collage_label= 104 | 105 | # Control border around each tile. 106 | # collage_border= 107 | 108 | # Control tile spacing. 109 | # collage_padding= 110 | 111 | Collage Mode: Concatenation "Zero geometry" Crop 112 | # collage_mode= 113 | 114 | # Collage background color 115 | # collage_bg_color= 116 | 117 | # Tile border color 118 | # collage_border_color= 119 | 120 | # Label color 121 | # collage_label_color= 122 | 123 | # Preview image bg color (This is only for preview, its helpfull to set equal to background color) 124 | # collage_img_color= 125 | 126 | 127 | #-====Extension & output 128 | # Default output extension 129 | # format=jpg 130 | 131 | # Image quality 132 | # image_quality=95 133 | 134 | 135 | #-====Suffix options 136 | # Suffix list options 137 | # suffix_list=net arts read 138 | 139 | # Default selected suffix 140 | # out_suffix=net 141 | 142 | #Default selected prefix 143 | # out_prefix=net 144 | 145 | #-====Selected operations, default false 146 | # Controls watermark insert. (1 = true / 0 = false) 147 | # select_watermark=0 148 | # select_watermark_text=0 149 | # select_watermark_image=0 150 | 151 | # Controls suffix, collage. (1 = true / 0 = false) 152 | # select_suffix=0 153 | # select_collage=0 154 | 155 | # Controls if files should be overwritten if there is a name collision or not. 156 | # overwrite=0 157 | 158 | 159 | # ====::::: Presets 160 | 161 | # Preset name, put next to the equal simbol, no quoting. Follow examples 162 | # Anything below "preset=" will be loaded when artscript is called with argument ":preset" 163 | # By default setting no "preset" value means that all values go to "default" preset 164 | # ex ( $sh ~ artscript :preset collage file1.jpg file2.png file3.kra ) 165 | # example above loads anything below "preset=collage" 166 | # preset= 167 | 168 | # Any value defined after a preset will be loaded if artscript is called in the following form 169 | # $sh ~ artscript :preset strip file1.jpg file2.png ... 170 | 171 | # preset=strip 172 | # watermark_color_swatches= -------------------------------------------------------------------------------- /lib/md5/md5.man: -------------------------------------------------------------------------------- 1 | [manpage_begin md5 n 2.0.7] 2 | [moddesc {MD5 Message-Digest Algorithm}] 3 | [copyright {2003, Pat Thoyts }] 4 | [titledesc {MD5 Message-Digest Algorithm}] 5 | [category {Hashes, checksums, and encryption}] 6 | [require Tcl 8.2] 7 | [require md5 [opt 2.0.7]] 8 | [description] 9 | [para] 10 | 11 | This package is an implementation in Tcl of the MD5 message-digest 12 | algorithm as described in RFC 1321 (1). This algorithm takes 13 | an arbitrary quantity of data and generates a 128-bit message digest 14 | from the input. The MD5 algorithm is related to the MD4 algorithm (2) 15 | but has been strengthened against certain types of potential 16 | attack. MD5 should be used in preference to MD4 for new applications. 17 | 18 | [para] 19 | 20 | If you have [package critcl] and have built the [package tcllibc] 21 | package then the implementation of the hashing function will be 22 | performed by compiled code. Alternatively if you have either 23 | [package cryptkit] or [package Trf] then either of these can be used to 24 | accelerate the digest computation. If no suitable compiled package is 25 | available then the pure-Tcl implementation wil be used. The 26 | programming interface remains the same in all cases. 27 | 28 | [para] 29 | 30 | [emph "Note"] the previous version of this package always returned a 31 | hex encoded string. This has been changed to simplify the programming 32 | interface and to make this version more compatible with other 33 | implementations. To obtain the previous usage, either explicitly 34 | specify package version 1 or use the [arg "-hex"] option to the 35 | [cmd "md5"] command. 36 | 37 | [section {COMMANDS}] 38 | 39 | [list_begin definitions] 40 | 41 | [call [cmd "::md5::md5"] \ 42 | [opt "[arg -hex]"] \ 43 | [lb] [arg "-channel channel"] | \ 44 | [arg "-file filename"] | [arg "string"] [rb]] 45 | 46 | Calculate the MD5 digest of the data given in string. This is returned 47 | as a binary string by default. Giving the [arg "-hex"] option will 48 | return a hexadecimal encoded version of the digest. 49 | 50 | [para] 51 | 52 | The data to be hashed can be specified either as a string argument to 53 | the [cmd "md5"] command, or as a filename or a pre-opened channel. If the 54 | [arg "-filename"] argument is given then the file is opened, the data read 55 | and hashed and the file is closed. If the [arg "-channel"] argument is 56 | given then data is read from the channel until the end of file. The 57 | channel is not closed. 58 | 59 | [para] 60 | 61 | Only one of [arg "-file"], [arg "-channel"] or [arg "string"] should be given. 62 | 63 | [call [cmd "::md5::hmac"] \ 64 | [opt "[arg -hex]"] \ 65 | [arg "-key key"] \ 66 | [lb] [arg "-channel channel"] | \ 67 | [arg "-file filename"] | [arg "string"] [rb]] 68 | 69 | Calculate an Hashed Message Authentication digest (HMAC) using the MD5 70 | digest algorithm. HMACs are described in RFC 2104 (3) and provide an MD5 71 | digest that includes a key. All options other than [arg -key] are as 72 | for the [cmd "::md5::md5"] command. 73 | 74 | [list_end] 75 | 76 | [section {PROGRAMMING INTERFACE}] 77 | 78 | For the programmer, the MD5 hash can be viewed as a bucket into which 79 | one pours data. When you have finished, you extract a value that is 80 | derived from the data that was poured into the bucket. The programming 81 | interface to the MD5 hash operates on a token (equivalent to the 82 | bucket). You call [cmd "MD5Init"] to obtain a token and then call 83 | [cmd "MD5Update"] as many times as required to add data to the hash. To 84 | release any resources and obtain the hash value, you then call 85 | [cmd "MD5Final"]. An equivalent set of functions gives you a keyed digest 86 | (HMAC). 87 | 88 | [list_begin definitions] 89 | 90 | [call [cmd "::md5::MD5Init"]] 91 | 92 | Begins a new MD5 hash. Returns a token ID that must be used for the 93 | remaining functions. 94 | 95 | [call [cmd "::md5::MD5Update"] [arg "token"] [arg "data"]] 96 | 97 | Add data to the hash identified by token. Calling 98 | [emph {MD5Update $token "abcd"}] is equivalent to calling 99 | [emph {MD5Update $token "ab"}] followed by 100 | [emph {MD5Update $token "cb"}]. See [sectref {EXAMPLES}]. 101 | 102 | 103 | [call [cmd "::md5::MD5Final"] [arg "token"]] 104 | 105 | Returns the hash value and releases any resources held by this 106 | token. Once this command completes the token will be invalid. The 107 | result is a binary string of 16 bytes representing the 128 bit MD5 108 | digest value. 109 | 110 | [call [cmd "::md5::HMACInit"] [arg "key"]] 111 | 112 | This is equivalent to the [cmd "::md5::MD5Init"] command except that 113 | it requires the key that will be included in the HMAC. 114 | 115 | [call [cmd "::md5::HMACUpdate"] [arg "token"] [arg "data"]] 116 | [call [cmd "::md5::HMACFinal"] [arg "token"]] 117 | 118 | These commands are identical to the MD5 equivalent commands. 119 | 120 | [list_end] 121 | 122 | [section {EXAMPLES}] 123 | 124 | [example { 125 | % md5::md5 -hex "Tcl does MD5" 126 | 8AAC1EE01E20BB347104FABB90310433 127 | }] 128 | 129 | [example { 130 | % md5::hmac -hex -key Sekret "Tcl does MD5" 131 | 35BBA244FD56D3EDF5F3C47474DACB5D 132 | }] 133 | 134 | [example { 135 | % set tok [md5::MD5Init] 136 | ::md5::1 137 | % md5::MD5Update $tok "Tcl " 138 | % md5::MD5Update $tok "does " 139 | % md5::MD5Update $tok "MD5" 140 | % md5::Hex [md5::MD5Final $tok] 141 | 8AAC1EE01E20BB347104FABB90310433 142 | }] 143 | 144 | [section {REFERENCES}] 145 | 146 | [list_begin enumerated] 147 | 148 | [enum] 149 | Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, MIT and 150 | RSA Data Security, Inc, April 1992. 151 | ([uri http://www.rfc-editor.org/rfc/rfc1321.txt]) 152 | 153 | [enum] 154 | Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT, 155 | April 1992. ([uri http://www.rfc-editor.org/rfc/rfc1320.txt]) 156 | 157 | [enum] 158 | Krawczyk, H., Bellare, M. and Canetti, R. "HMAC: Keyed-Hashing for 159 | Message Authentication", RFC 2104, February 1997. 160 | ([uri http://www.rfc-editor.org/rfc/rfc2104.txt]) 161 | 162 | [list_end] 163 | 164 | [see_also md4 sha1] 165 | 166 | [section {BUGS, IDEAS, FEEDBACK}] 167 | 168 | This document, and the package it describes, will undoubtedly contain 169 | bugs and other problems. 170 | 171 | Please report such in the category [emph md5] of the 172 | [uri {http://sourceforge.net/tracker/?group_id=12883} {Tcllib SF Trackers}]. 173 | 174 | Please also report any ideas for enhancements you may have for either 175 | package and/or documentation. 176 | 177 | 178 | [keywords md5 hashing message-digest security {rfc 1320} {rfc 1321} {rfc 2104}] 179 | [manpage_end] 180 | -------------------------------------------------------------------------------- /lib/tkdnd/tkdnd_compat.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_compat.tcl -- 3 | # 4 | # This file implements some utility procedures, to support older versions 5 | # of the TkDND package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval compat { 40 | 41 | };# namespace compat 42 | 43 | # ---------------------------------------------------------------------------- 44 | # Command ::dnd 45 | # ---------------------------------------------------------------------------- 46 | proc ::dnd {method window args} { 47 | switch $method { 48 | bindtarget { 49 | switch [llength $args] { 50 | 0 {return [tkdnd::compat::bindtarget0 $window]} 51 | 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 52 | 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ 53 | [lindex $args 1]]} 54 | 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ 55 | [lindex $args 1] [lindex $args 2]]} 56 | 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ 57 | [lindex $args 1] [lindex $args 2] [lindex $args 3]]} 58 | } 59 | } 60 | cleartarget { 61 | return [tkdnd::compat::cleartarget $window] 62 | } 63 | bindsource { 64 | switch [llength $args] { 65 | 0 {return [tkdnd::compat::bindsource0 $window]} 66 | 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 67 | 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ 68 | [lindex $args 1]]} 69 | 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ 70 | [lindex $args 1] [lindex $args 2]]} 71 | } 72 | } 73 | clearsource { 74 | return [tkdnd::compat::clearsource $window] 75 | } 76 | drag { 77 | return [tkdnd::_init_drag $window "press" 0 0] 78 | } 79 | } 80 | error "invalid number of arguments!" 81 | };# ::dnd 82 | 83 | # ---------------------------------------------------------------------------- 84 | # Command compat::bindtarget 85 | # ---------------------------------------------------------------------------- 86 | proc compat::bindtarget0 {window} { 87 | return [bind $window <>] 88 | };# compat::bindtarget0 89 | 90 | proc compat::bindtarget1 {window type} { 91 | return [bindtarget2 $window $type ] 92 | };# compat::bindtarget1 93 | 94 | proc compat::bindtarget2 {window type event} { 95 | switch $event { 96 | {return [bind $window <>]} 97 | {return [bind $window <>]} 98 | {return [bind $window <>]} 99 | {return [bind $window <>]} 100 | } 101 | };# compat::bindtarget2 102 | 103 | proc compat::bindtarget3 {window type event script} { 104 | set type [normalise_type $type] 105 | ::tkdnd::drop_target register $window [list $type] 106 | switch $event { 107 | {return [bind $window <> $script]} 108 | {return [bind $window <> $script]} 109 | {return [bind $window <> $script]} 110 | {return [bind $window <> $script]} 111 | } 112 | };# compat::bindtarget3 113 | 114 | proc compat::bindtarget4 {window type event script priority} { 115 | return [bindtarget3 $window $type $event $script] 116 | };# compat::bindtarget4 117 | 118 | proc compat::normalise_type { type } { 119 | switch $type { 120 | text/plain - 121 | {text/plain;charset=UTF-8} - 122 | Text {return DND_Text} 123 | text/uri-list - 124 | Files {return DND_Files} 125 | default {return $type} 126 | } 127 | };# compat::normalise_type 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command compat::bindsource 131 | # ---------------------------------------------------------------------------- 132 | proc compat::bindsource0 {window} { 133 | return [bind $window <>] 134 | };# compat::bindsource0 135 | 136 | proc compat::bindsource1 {window type} { 137 | return [bindsource2 $window $type ] 138 | };# compat::bindsource1 139 | 140 | proc compat::bindsource2 {window type script} { 141 | ::tkdnd::drag_source register $window $type 2 142 | bind $window <> "list {copy} %t \[$script\]" 143 | };# compat::bindsource2 144 | 145 | proc compat::bindsource3 {window type script priority} { 146 | return [bindsource2 $window $type $script] 147 | };# compat::bindsource3 148 | 149 | # ---------------------------------------------------------------------------- 150 | # Command compat::cleartarget 151 | # ---------------------------------------------------------------------------- 152 | proc compat::cleartarget {window} { 153 | };# compat::cleartarget 154 | 155 | # ---------------------------------------------------------------------------- 156 | # Command compat::clearsource 157 | # ---------------------------------------------------------------------------- 158 | proc compat::clearsource {window} { 159 | };# compat::clearsource 160 | -------------------------------------------------------------------------------- /lib/tkdnd/tkdnd_macosx.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_macosx.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | 7 | # This software is copyrighted by: 8 | # Georgios Petasis, Athens, Greece. 9 | # e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 10 | # 11 | # Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 12 | # kw@codebykevin.com 13 | # 14 | # 15 | # The following terms apply to all files associated 16 | # with the software unless explicitly disclaimed in individual files. 17 | # 18 | # The authors hereby grant permission to use, copy, modify, distribute, 19 | # and license this software and its documentation for any purpose, provided 20 | # that existing copyright notices are retained in all copies and that this 21 | # notice is included verbatim in any distributions. No written agreement, 22 | # license, or royalty fee is required for any of the authorized uses. 23 | # Modifications to this software may be copyrighted by their authors 24 | # and need not follow the licensing terms described here, provided that 25 | # the new terms are clearly indicated on the first page of each file where 26 | # they apply. 27 | # 28 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 29 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 31 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 32 | # POSSIBILITY OF SUCH DAMAGE. 33 | # 34 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 35 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 36 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 37 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 38 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 39 | # MODIFICATIONS. 40 | # 41 | 42 | #basic API for Mac Drag and Drop 43 | 44 | #two data types supported: strings and file paths 45 | 46 | #two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget 47 | 48 | #data retrieval mechanism: text or file paths are copied from drag clipboard to system clipboard and retrieved via [clipboard get]; array of file paths is converted to single tab-separated string, can be split into Tcl list 49 | 50 | if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { 51 | error {TkAqua Cocoa required} 52 | } 53 | 54 | namespace eval macdnd { 55 | variable _dropped_data 56 | };# namespace macdnd 57 | 58 | # ---------------------------------------------------------------------------- 59 | # Command macdnd::_HandleEnter 60 | # ---------------------------------------------------------------------------- 61 | proc macdnd::_HandleEnter { path drag_source typelist } { 62 | return [::tkdnd::xdnd::_HandleXdndEnter $path $drag_source $typelist] 63 | };# macdnd::_HandleEnter 64 | 65 | # ---------------------------------------------------------------------------- 66 | # Command macdnd::_HandlePosition 67 | # ---------------------------------------------------------------------------- 68 | proc macdnd::_HandlePosition { drop_target rootX rootY } { 69 | return [::tkdnd::xdnd::_HandleXdndPosition $drop_target $rootX $rootY] 70 | };# macdnd::_HandlePosition 71 | 72 | # ---------------------------------------------------------------------------- 73 | # Command macdnd::_HandleLeave 74 | # ---------------------------------------------------------------------------- 75 | proc macdnd::_HandleLeave { args } { 76 | return [::tkdnd::xdnd::_HandleXdndLeave] 77 | };# macdnd::_HandleLeave 78 | 79 | # ---------------------------------------------------------------------------- 80 | # Command macdnd::_HandleDrop 81 | # ---------------------------------------------------------------------------- 82 | proc macdnd::_HandleDrop { drop_target data args } { 83 | variable _dropped_data 84 | set _dropped_data $data 85 | return [::tkdnd::xdnd::_HandleXdndDrop 0] 86 | };# macdnd::_HandleDrop 87 | 88 | # ---------------------------------------------------------------------------- 89 | # Command macdnd::_GetDroppedData 90 | # ---------------------------------------------------------------------------- 91 | proc macdnd::_GetDroppedData { time } { 92 | variable _dropped_data 93 | return $_dropped_data 94 | };# macdnd::_GetDroppedData 95 | proc xdnd::_GetDroppedData { time } { 96 | return [::tkdnd::macdnd::_GetDroppedData $time] 97 | };# xdnd::_GetDroppedData 98 | 99 | # ---------------------------------------------------------------------------- 100 | # Command macdnd::_GetDragSource 101 | # ---------------------------------------------------------------------------- 102 | proc macdnd::_GetDragSource { } { 103 | return [::tkdnd::xdnd::_GetDragSource] 104 | };# macdnd::_GetDragSource 105 | 106 | # ---------------------------------------------------------------------------- 107 | # Command macdnd::_GetDropTarget 108 | # ---------------------------------------------------------------------------- 109 | proc macdnd::_GetDropTarget { } { 110 | return [::tkdnd::xdnd::_GetDropTarget] 111 | };# macdnd::_GetDropTarget 112 | 113 | # ---------------------------------------------------------------------------- 114 | # Command macdnd::_supported_types 115 | # ---------------------------------------------------------------------------- 116 | proc macdnd::_supported_types { types } { 117 | return [::tkdnd::xdnd::_supported_types $types] 118 | }; # macdnd::_supported_types 119 | 120 | # ---------------------------------------------------------------------------- 121 | # Command macdnd::_platform_specific_types 122 | # ---------------------------------------------------------------------------- 123 | proc macdnd::_platform_specific_types { types } { 124 | return [::tkdnd::xdnd::_platform_specific_types $types] 125 | }; # macdnd::_platform_specific_types 126 | 127 | # ---------------------------------------------------------------------------- 128 | # Command macdnd::_normalise_data 129 | # ---------------------------------------------------------------------------- 130 | proc macdnd::_normalise_data { type data } { 131 | return [::tkdnd::xdnd::_normalise_data $type $data] 132 | }; # macdnd::_normalise_data 133 | 134 | # ---------------------------------------------------------------------------- 135 | # Command macdnd::_platform_specific_type 136 | # ---------------------------------------------------------------------------- 137 | proc macdnd::_platform_specific_type { type } { 138 | switch $type { 139 | DND_Text {return [list NSStringPboardType]} 140 | DND_Files {return [list NSFilenamesPboardType]} 141 | default {return [list $type]} 142 | } 143 | }; # macdnd::_platform_specific_type 144 | proc xdnd::_platform_specific_type { type } { 145 | return [::tkdnd::macdnd::_platform_specific_type $type] 146 | }; # xdnd::_platform_specific_type 147 | 148 | # ---------------------------------------------------------------------------- 149 | # Command macdnd::_platform_independent_type 150 | # ---------------------------------------------------------------------------- 151 | proc macdnd::_platform_independent_type { type } { 152 | switch $type { 153 | NSStringPboardType {return DND_Text} 154 | NSFilenamesPboardType {return DND_Files} 155 | default {return [list $type]} 156 | } 157 | }; # macdnd::_platform_independent_type 158 | proc xdnd::_platform_independent_type { type } { 159 | return [::tkdnd::macdnd::_platform_independent_type $type] 160 | }; # xdnd::_platform_independent_type 161 | 162 | # ---------------------------------------------------------------------------- 163 | # Command macdnd::_supported_type 164 | # ---------------------------------------------------------------------------- 165 | proc macdnd::_supported_type { type } { 166 | return 1 167 | }; # macdnd::_supported_type 168 | proc xdnd::_supported_type { type } { 169 | return [::tkdnd::macdnd::_supported_type $type] 170 | }; # xdnd::_supported_type 171 | -------------------------------------------------------------------------------- /lib/md5/md5x.test: -------------------------------------------------------------------------------- 1 | # -*- tcl -*- 2 | # md5.test: tests for the md5 commands 3 | # 4 | # This file contains a collection of tests for one or more of the Tcl 5 | # built-in commands. Sourcing this file into Tcl runs the tests and 6 | # generates output for errors. No output means no errors were found. 7 | # 8 | # Copyright (c) 2001 by ActiveState Tool Corp. 9 | # All rights reserved. 10 | # 11 | # RCS: @(#) $Id: md5x.test,v 1.17 2008/04/08 00:33:07 patthoyts Exp $ 12 | 13 | # ------------------------------------------------------------------------- 14 | 15 | source [file join \ 16 | [file dirname [file dirname [file join [pwd] [info script]]]] \ 17 | devtools testutilities.tcl] 18 | 19 | testsNeedTcl 8.2 20 | testsNeedTcltest 1.0 21 | 22 | testing { 23 | useLocal md5x.tcl md5 24 | } 25 | 26 | # ------------------------------------------------------------------------- 27 | 28 | if {[::md5::LoadAccelerator critcl]} { 29 | puts "> critcl based" 30 | } 31 | if {[::md5::LoadAccelerator cryptkit]} { 32 | puts "> cryptkit based" 33 | } 34 | if {[::md5::LoadAccelerator trf]} { 35 | puts "> Trf based" 36 | } 37 | puts "> pure Tcl" 38 | 39 | # ------------------------------------------------------------------------- 40 | # Handle multiple implementation testing 41 | # 42 | 43 | array set preserve [array get ::md5::accel] 44 | 45 | proc implementations {} { 46 | variable ::md5::accel 47 | foreach {a v} [array get accel] {if {$v} {lappend r $a}} 48 | lappend r tcl; set r 49 | } 50 | 51 | proc select_implementation {impl} { 52 | variable ::md5::accel 53 | foreach e [array names accel] { set accel($e) 0 } 54 | if {[string compare "tcl" $impl] != 0} { 55 | set accel($impl) 1 56 | } 57 | } 58 | 59 | proc reset_implementation {} { 60 | variable ::md5::accel 61 | array set accel [array get ::preserve] 62 | } 63 | 64 | # ------------------------------------------------------------------------- 65 | 66 | test md5-v2-1.0 {md5} { 67 | catch {::md5::md5} result 68 | set result 69 | } {wrong # args: should be "md5 ?-hex? -filename file | string"} 70 | # [tcltest::wrongNumArgs "md5" "?-hex? -filename file | string" 0] 71 | 72 | test md5-v2-1.1 {md5} { 73 | catch {::md5::hmac} result 74 | set result 75 | } {wrong # args: should be "hmac ?-hex? -key key -filename file | string"} 76 | # [tcltest::wrongNumArgs "hmac" "?-hex? -key key -filename file | string" 0] 77 | 78 | test md5-v2-1.2 {md5} { 79 | catch {::md5::hmac key} result 80 | set result 81 | } {wrong # args: should be "hmac ?-hex? -key key -filename file | string"} 82 | # [tcltest::wrongNumArgs "hmac" "?-hex? -key key -filename file | string" 1] 83 | 84 | 85 | set tests { 86 | 1 "" 87 | "D41D8CD98F00B204E9800998ECF8427E" 88 | 2 "a" 89 | "0CC175B9C0F1B6A831C399E269772661" 90 | 3 "abc" 91 | "900150983CD24FB0D6963F7D28E17F72" 92 | 4 "message digest" 93 | "F96B697D7CB7938D525A2F31AAF161D0" 94 | 5 "abcdefghijklmnopqrstuvwxyz" 95 | "C3FCD3D76192E4007DFB496CCA67E13B" 96 | 6 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 97 | "D174AB98D277D9F5A5611C2C9F419D9F" 98 | 7 "12345678901234567890123456789012345678901234567890123456789012345678901234567890" 99 | "57EDF4A22BE3C955AC49DA2E2107B67A" 100 | 8 "a\$apr1\$a" "020C3DD6931F7E94ECC99A1F4E4C53E2" 101 | } 102 | foreach impl [implementations] { 103 | select_implementation $impl 104 | foreach {n msg expected} $tests { 105 | test md5-v2-$impl-2.$n "md5 ($impl impl)" { 106 | list [catch {::md5::md5 -hex -- $msg} msg] $msg 107 | } [list 0 $expected] 108 | } 109 | reset_implementation 110 | } 111 | 112 | set vectors { 113 | 1 "" "" "74E6F7298A9C2D168935F58C001BAD88" 114 | 2 "\x01" "" "DFA55EFBE6ED07FA2E056E57E949930A" 115 | 3 "foo" "hello" "EF2AC8901530DB30AA56929ADFE5E13B" 116 | 4 "bar" "world" "DFC05594B019ED51535922A1295446E8" 117 | 5 "key" "text" "D0CA6177C61C975FD2F8C07D8C6528C6" 118 | 6 "md5" "hmac" "D189F362DAF86A5C8E14BA4ABA91B260" 119 | 7 "hmac" "md5" "480343CF0F2D5931EC4923E81059FB84" 120 | 8 "md5" "md5" "92C5FB986E345F21F181047AB939EC77" 121 | 9 "hmac" "hmac" "08ABBE58A55219789E3EEDE153808A56" 122 | 10 "01234567abcdefgh01234567abcdefgh01234567abcdefgh01234567abcdefgh==" "hello world" 123 | "CF0237466F9B3C773858A1892B474C9E" 124 | 11 "-" "a" "E3BA60E98ED812A68AEB04A8FF57AC8E" 125 | 12 "a" "-" "A9DD01C469578DCD4220600667DF6FFB" 126 | } 127 | 128 | foreach impl [implementations] { 129 | select_implementation $impl 130 | foreach {n key text expected} $vectors { 131 | test md5-v2-$impl-3.$n "hmac ($impl impl)" { 132 | list [catch {::md5::hmac -hex -key $key -- $text} msg] $msg 133 | } [list 0 $expected] 134 | } 135 | reset_implementation 136 | } 137 | 138 | # ------------------------------------------------------------------------- 139 | # RFC 2202 has a set of test vectors for HMAC-MD5 and HMAC-SHA1. 140 | # This is those test vectors... 141 | # ------------------------------------------------------------------------- 142 | 143 | set vectors \ 144 | [list \ 145 | 1 [string repeat \x0b 16] "Hi There" \ 146 | 9294727A3638BB1C13F48EF8158BFC9D \ 147 | 2 "Jefe" "what do ya want for nothing?" \ 148 | 750C783E6AB0B503EAA86E310A5DB738 \ 149 | 3 [string repeat \xaa 16] [string repeat \xdd 50] \ 150 | 56BE34521D144C88DBB8C733F0E8B3F6 \ 151 | 4 \ 152 | [binary format H* 0102030405060708090a0b0c0d0e0f10111213141516171819]\ 153 | [string repeat \xcd 50] \ 154 | 697EAF0ACA3A3AEA3A75164746FFAA79 \ 155 | 5 [string repeat \x0c 16] "Test With Truncation" \ 156 | 56461EF2342EDC00F9BAB995690EFD4C \ 157 | 6 [string repeat \xaa 80] \ 158 | "Test Using Larger Than Block-Size Key - Hash Key First" \ 159 | 6B1AB7FE4BD7BF8F0B62E6CE61B9D0CD \ 160 | 7 [string repeat \xaa 80] \ 161 | "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" \ 162 | 6F630FAD67CDA0EE1FB1F562DB3AA53E \ 163 | ] 164 | 165 | foreach impl [implementations] { 166 | select_implementation $impl 167 | foreach {n key msg hash} $vectors { 168 | test md5-v2-$impl-4.$n "RFC2202 test vectors for HMAC-MD5 ($impl)" { 169 | ::md5::hmac -hex -key $key -- $msg 170 | } $hash 171 | } 172 | } 173 | 174 | # ------------------------------------------------------------------------- 175 | 176 | test md5-v2-6.1 {Check hashing data that begins with hyphen} { 177 | list [catch {::md5::md5 -hex -hello} msg] $msg 178 | } {0 110CD19610AD6247F30263C882670CC1} 179 | 180 | test md5-v2-6.2 {Check hashing data that begins with hyphen} { 181 | list [catch {::md5::md5 -hex -- -hello} msg] $msg 182 | } {0 110CD19610AD6247F30263C882670CC1} 183 | 184 | test md5-v2-6.3 {Check hashing data that begins with hyphen} { 185 | list [catch {::md5::md5 -hex --} msg] $msg 186 | } {0 CFAB1BA8C67C7C838DB98D666F02A132} 187 | 188 | test md5-v2-6.4 {Check hashing data that begins with hyphen} { 189 | list [catch {::md5::md5 -hex -- --} msg] $msg 190 | } {0 CFAB1BA8C67C7C838DB98D666F02A132} 191 | 192 | test md5-v2-7.1 {Check hmac data that begins with hyphen} { 193 | list [catch {::md5::hmac -hex -key "" -hello} msg] $msg 194 | } {0 6C39C49DA482D110B72B72F24E082E0F} 195 | 196 | test md5-v2-7.2 {Check hmac data that begins with hyphen} { 197 | list [catch {::md5::hmac -hex -key "" -- -hello} msg] $msg 198 | } {0 6C39C49DA482D110B72B72F24E082E0F} 199 | 200 | test md5-v2-7.3 {Check hmac data that begins with hyphen} { 201 | list [catch {::md5::hmac -hex -key "" --} msg] $msg 202 | } {0 8EB61D377088779210AD82659AECD631} 203 | 204 | test md5-v2-7.4 {Check hmac data that begins with hyphen} { 205 | list [catch {::md5::hmac -hex -key "" -- --} msg] $msg 206 | } {0 8EB61D377088779210AD82659AECD631} 207 | 208 | # ------------------------------------------------------------------------- 209 | 210 | testsuiteCleanup 211 | 212 | # ------------------------------------------------------------------------- 213 | # Local Variables: 214 | # mode: tcl 215 | # indent-tabs-mode: nil 216 | # End: 217 | -------------------------------------------------------------------------------- /lib/tkdnd/tkdnd_mime.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_unix.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval mime { 40 | };# namespace mime 41 | 42 | ## =========================================================================== 43 | ## URL section 44 | ## =========================================================================== 45 | 46 | # ---------------------------------------------------------------------------- 47 | # Command mime::urls 48 | # ---------------------------------------------------------------------------- 49 | proc mime::urls {} { 50 | };# mime::urls 51 | 52 | # ---------------------------------------------------------------------------- 53 | # Command mime::setUrls 54 | # ---------------------------------------------------------------------------- 55 | proc mime::setUrls {urls {type "text/uri-list"}} { 56 | variable data 57 | variable transfer_format 58 | variable transfer_data 59 | 60 | set data($type) $url 61 | ## We transfer 62 | };# mime::setUrls 63 | 64 | # ---------------------------------------------------------------------------- 65 | # Command mime::hasUrls 66 | # ---------------------------------------------------------------------------- 67 | proc mime::hasUrls {{type "text/uri-list"}} { 68 | return [hasFormat $type] 69 | };# mime::hasUrls 70 | 71 | ## =========================================================================== 72 | ## Text section 73 | ## =========================================================================== 74 | 75 | # ---------------------------------------------------------------------------- 76 | # Command mime::text 77 | # ---------------------------------------------------------------------------- 78 | proc mime::text {} { 79 | };# mime::text 80 | 81 | # ---------------------------------------------------------------------------- 82 | # Command mime::setText 83 | # ---------------------------------------------------------------------------- 84 | proc mime::setText {} { 85 | };# mime::setText 86 | 87 | # ---------------------------------------------------------------------------- 88 | # Command mime::hasText 89 | # ---------------------------------------------------------------------------- 90 | proc mime::hasText {} { 91 | };# mime::hasText 92 | 93 | ## =========================================================================== 94 | ## Text section 95 | ## =========================================================================== 96 | 97 | # ---------------------------------------------------------------------------- 98 | # Command mime::html 99 | # ---------------------------------------------------------------------------- 100 | proc mime::html {} { 101 | };# mime::html 102 | 103 | # ---------------------------------------------------------------------------- 104 | # Command mime::setHtml 105 | # ---------------------------------------------------------------------------- 106 | proc mime::setHtml {} { 107 | };# mime::setHtml 108 | 109 | # ---------------------------------------------------------------------------- 110 | # Command mime::hasHtml 111 | # ---------------------------------------------------------------------------- 112 | proc mime::hasHtml {} { 113 | };# mime::hasHtml 114 | 115 | ## =========================================================================== 116 | ## Colour section 117 | ## =========================================================================== 118 | 119 | # ---------------------------------------------------------------------------- 120 | # Command mime::colorData 121 | # ---------------------------------------------------------------------------- 122 | proc mime::colorData {} { 123 | };# mime::colorData 124 | 125 | # ---------------------------------------------------------------------------- 126 | # Command mime::setColorData 127 | # ---------------------------------------------------------------------------- 128 | proc mime::setColorData {} { 129 | };# mime::setColorData 130 | 131 | # ---------------------------------------------------------------------------- 132 | # Command mime::hasColorData 133 | # ---------------------------------------------------------------------------- 134 | proc mime::hasColorData {} { 135 | };# mime::hasColorData 136 | 137 | ## =========================================================================== 138 | ## Image section 139 | ## =========================================================================== 140 | 141 | # ---------------------------------------------------------------------------- 142 | # Command mime::imageData 143 | # ---------------------------------------------------------------------------- 144 | proc mime::imageData {} { 145 | };# mime::imageData 146 | 147 | # ---------------------------------------------------------------------------- 148 | # Command mime::setImageData 149 | # ---------------------------------------------------------------------------- 150 | proc mime::setImageData {} { 151 | };# mime::setImageData 152 | 153 | # ---------------------------------------------------------------------------- 154 | # Command mime::hasImageData 155 | # ---------------------------------------------------------------------------- 156 | proc mime::hasImageData {} { 157 | };# mime::hasImageData 158 | 159 | ## =========================================================================== 160 | ## Binary section 161 | ## =========================================================================== 162 | 163 | # ---------------------------------------------------------------------------- 164 | # Command mime:: 165 | # ---------------------------------------------------------------------------- 166 | proc mime::data {} { 167 | };# mime::data 168 | 169 | # ---------------------------------------------------------------------------- 170 | # Command mime::setData 171 | # ---------------------------------------------------------------------------- 172 | proc mime::setData {format data} { 173 | variable data 174 | ## Remove previous data... 175 | array unset data $format 176 | set data($format) $data 177 | };# mime::setData 178 | 179 | # ---------------------------------------------------------------------------- 180 | # Command mime::hasData 181 | # ---------------------------------------------------------------------------- 182 | proc mime::hasData {} { 183 | };# mime::hasData 184 | 185 | ## =========================================================================== 186 | ## Utilities section 187 | ## =========================================================================== 188 | 189 | # ---------------------------------------------------------------------------- 190 | # Command mime::clear 191 | # ---------------------------------------------------------------------------- 192 | proc mime::clear {} { 193 | variable data 194 | array unset data * 195 | };# mime::clear 196 | 197 | # ---------------------------------------------------------------------------- 198 | # Command mime::hasFormat 199 | # ---------------------------------------------------------------------------- 200 | proc mime::hasFormat {mimetype} { 201 | variable data 202 | return [info exists data($mimetype)] 203 | };# mime::hasFormat 204 | 205 | # ---------------------------------------------------------------------------- 206 | # Command mime::formats 207 | # ---------------------------------------------------------------------------- 208 | proc mime::formats {} { 209 | };# mime::formats 210 | 211 | # ---------------------------------------------------------------------------- 212 | # Command mime::retrieveData 213 | # ---------------------------------------------------------------------------- 214 | proc mime::retrieveData {} { 215 | };# mime::retrieveData 216 | 217 | # ---------------------------------------------------------------------------- 218 | # Command mime::registerSelectionHandler 219 | # ---------------------------------------------------------------------------- 220 | proc mime::registerSelectionHandler {} { 221 | };# mime::registerSelectionHandler 222 | 223 | # ---------------------------------------------------------------------------- 224 | # Command mime::unregisterSelectionHandler 225 | # ---------------------------------------------------------------------------- 226 | proc mime::unregisterSelectionHandler {} { 227 | };# mime::unregisterSelectionHandler 228 | -------------------------------------------------------------------------------- /lib/md5/ChangeLog: -------------------------------------------------------------------------------- 1 | 2013-02-01 Andreas Kupries 2 | 3 | * 4 | * Released and tagged Tcllib 1.15 ======================== 5 | * 6 | 7 | 2011-12-13 Andreas Kupries 8 | 9 | * 10 | * Released and tagged Tcllib 1.14 ======================== 11 | * 12 | 13 | 2011-01-24 Andreas Kupries 14 | 15 | * 16 | * Released and tagged Tcllib 1.13 ======================== 17 | * 18 | 19 | 2009-12-07 Andreas Kupries 20 | 21 | * 22 | * Released and tagged Tcllib 1.12 ======================== 23 | * 24 | 25 | 2009-05-06 Pat Thoyts 26 | 27 | * md5c.tcl: The md5c command was leaking a Tcl_Obj on each call 28 | due to having one too many ref counts. Also use Tcl_Alloc rather 29 | than malloc. 30 | 31 | 2008-12-12 Andreas Kupries 32 | 33 | * 34 | * Released and tagged Tcllib 1.11.1 ======================== 35 | * 36 | 37 | 2008-10-16 Andreas Kupries 38 | 39 | * 40 | * Released and tagged Tcllib 1.11 ======================== 41 | * 42 | 43 | 2008-07-04 Andreas Kupries 44 | 45 | * md5.man: Fixed creative writing problem reported by 46 | * md5x.tcl: Julian Noble , 47 | * pkgIndex.tcl: as [Bug 2010798]. Bumped version to 2.0.7. 48 | 49 | 2008-04-29 Pat Thoyts 50 | 51 | * md5x.tcl: Clean up the MD5Hash_body once the proc defined. 52 | 53 | 2007-09-12 Andreas Kupries 54 | 55 | * 56 | * Released and tagged Tcllib 1.10 ======================== 57 | * 58 | 59 | 2007-03-21 Andreas Kupries 60 | 61 | * md5.man: Fixed all warnings due to use of now deprecated 62 | commands. Added a section about how to give feedback. 63 | 64 | 2006-10-03 Andreas Kupries 65 | 66 | * 67 | * Released and tagged Tcllib 1.9 ======================== 68 | * 69 | 70 | 2006-09-19 Andreas Kupries 71 | 72 | * md5.man: Bumped version to 2.0.5 73 | * md5x.tcl: 74 | * pkgIndex.tcl: 75 | 76 | 2006-01-28 Andreas Kupries 77 | 78 | * md5x.test: Fixed usage of duplicate test names. 79 | 80 | 2006-01-23 Andreas Kupries 81 | 82 | * md5.test: More boilerplate simplified via use of test support. 83 | * md5x.test: 84 | 85 | 2006-01-19 Andreas Kupries 86 | 87 | * md5.test: Hooked into the new common test support code. 88 | * md5x.test: 89 | 90 | 2005-10-24 Andreas Kupries 91 | 92 | * md5v1.bench: New file. Basic benchmarks for MD5 hashes. 93 | * md5v2.bench: 94 | 95 | 2005-10-17 Andreas Kupries 96 | 97 | * md5x.tcl: Trivial comment typo fix. 98 | 99 | 2005-10-17 Pat Thoyts 100 | 101 | * md5x.tcl: Performance fix for tcl8.5 integers. 102 | 103 | 2005-10-06 Andreas Kupries 104 | 105 | * 106 | * Released and tagged Tcllib 1.8 ======================== 107 | * 108 | 109 | 2005-02-24 Pat Thoyts 110 | 111 | * md5.tcl: Arranged to run all available implementations in 112 | * md5.test: the tests. 113 | 114 | 2005-02-23 Pat Thoyts 115 | 116 | * pkgIndex.tcl: Incremented version to 2.0.4 117 | * md5x.tcl: Rationalised the handling of accelerator packages and 118 | * md5x.test: added support for use of cryptkit. Updated the man 119 | * md5.man: page to note the available accelerators. 120 | 121 | 2005-02-20 Pat Thoyts 122 | 123 | * md5x.test: Added the RFC 2202 HMAC-MD5 test vectors. 124 | 125 | 2005-02-17 Pat Thoyts 126 | 127 | * md5x.tcl: Avoid raising an error if the string to be hashed 128 | * pkgIndex.tcl: begins with a hyphen. Use '--' as an _optional_ 129 | * md5.mac: end-of-args marker. 130 | * md5x.test: Added tests. 131 | 132 | 2004-12-02 Pat Thoyts 133 | 134 | * md5x.tcl: Replaced use of memchan null channel with the systems 135 | NUL device (NUL or /dev/null). This avoids problems with clashing 136 | names when memchan gets included. 137 | 138 | 2004-10-05 Andreas Kupries 139 | 140 | * 141 | * Released and tagged Tcllib 1.7 ======================== 142 | * 143 | 144 | 2004-07-01 Pat Thoyts 145 | 146 | * md5x.tcl: Try and fix up the use of Trf with Memchan for the 147 | new-style md5 package. Needs fixed recent versions of both 148 | packages. 149 | 150 | 2004-05-23 Andreas Kupries 151 | 152 | * md5x.tcl: Updated version number to sync with 1.6.1 153 | * md5.man: release. 154 | * pkgIndex.tcl: 155 | 156 | 2004-05-23 Andreas Kupries 157 | 158 | * 159 | * Released and tagged Tcllib 1.6.1 ======================== 160 | * 161 | 162 | 2004-05-23 Andreas Kupries 163 | 164 | * md5x.tcl: Rel. engineering. Updated version number 165 | * md5.man: of md5 v2 to reflect its changes, to 2.0.1. 166 | * pkgIndex.tcl: 167 | 168 | 2004-05-23 Andreas Kupries 169 | 170 | * 171 | * Released and tagged Tcllib 1.6.1 ======================== 172 | * 173 | 174 | 2004-05-23 Andreas Kupries 175 | 176 | * md5x.tcl: Rel. engineering. Updated version number 177 | * md5.man: of md5 v2 to reflect its changes, to 2.0.1. 178 | * pkgIndex.tcl: 179 | 180 | 2004-02-18 Pat Thoyts 181 | 182 | * md5x.tcl: Added -- to end options if using Trf's hex in case the 183 | hash begins with a - character (possible). Streamlined the <<< 184 | proc. 185 | 186 | 2004-02-15 Andreas Kupries 187 | 188 | * 189 | * Released and tagged Tcllib 1.6 ======================== 190 | * 191 | 192 | 2004-02-12 Andreas Kupries 193 | 194 | * md5x.test: Heh. What a surprise. The testsuite uses a command to 195 | generate the proper error message based on the version of Tcl, 196 | and what does md5 v2 ? It generates its own messages, and they 197 | are always in 8.4+ format. Hnn. Fixed the testsuite. 198 | 199 | 2003-07-27 Pat Thoyts 200 | 201 | * md5.man: Updated the manual page for md5 2.0 202 | 203 | 2003-07-26 Pat Thoyts 204 | 205 | * md5c.tcl: Brought in the critcl implementation of MD5 206 | * md5.c: originally by Jean-Claude Wippler 207 | * md5.h: with code from RFC 1321. 208 | 209 | * md5x.tcl: Version 2 md5 module. This is based upon the MD4 module 210 | * md5x.test: code and permits incremental updates into the hash. 211 | This version will use the critcl code if available. 212 | 213 | === VERSION INCOMPATABILITY === 214 | 215 | md5 1 returns data as a hex representation. 216 | md5 2 returns the data as a binary representation. If you want the 217 | hex rep, provide the -hex option to the md5 command. 218 | 219 | 2003-05-05 Andreas Kupries 220 | 221 | * 222 | * Released and tagged Tcllib 1.4 ======================== 223 | * 224 | 225 | 2003-04-11 Andreas Kupries 226 | 227 | * md5.tcl: 228 | * md5.man: 229 | * pkgIndex.tcl: Set version of the package to to 1.4.3. 230 | 231 | 2003-02-05 David N. Welton 232 | 233 | * md5.tcl (::md5::time): Used lindex instead of regexp to fish the 234 | number out of 'time' results. Not really a performance win here, 235 | but it's good style. 236 | 237 | 2003-01-06 Pat Thoyts 238 | 239 | * md5.tcl: Handle cases where Trf is available but the md5 command 240 | is not callable (like missing crypt.dll or libmd5crypt). 241 | 242 | 2002-03-25 Andreas Kupries 243 | 244 | * md5.man: Fixed formatting errors in the doctools manpage. 245 | 246 | 2002-02-07 Andreas Kupries 247 | 248 | * Version up to 1.4.2 to differentiate development from the 249 | version in the tcllib 1.2 release. 250 | 251 | * md5.tcl: Adding -- to hex/md5 commands to prevent 252 | misinterpretation of data if starting with -. 253 | 254 | 2001-10-16 Andreas Kupries 255 | 256 | * md5.n: 257 | * md5.tcl: 258 | * pkgIndex.tcl: Version up to 1.4.1 259 | 260 | 2001-08-20 Andreas Kupries 261 | 262 | * md5.test: Fixed broken error messages for 8.4. Using 263 | [tcltest::getErrorMessage] now to get the correct message for 264 | all versions of the core. Bug [440046] reported by Larry Virden. 265 | 266 | 2001-07-10 Andreas Kupries 267 | 268 | * md5.tcl: Frink 2.2 run, fixed dubious code. 269 | 270 | 2001-07-03 Miguel Sofer 271 | 272 | * md5.tcl: some more inlining, 10% faster 273 | 274 | 2001-06-21 Andreas Kupries 275 | 276 | * md5.tcl: Fixed dubious code reported by frink. 277 | 278 | 2001-06-19 Andreas Kupries 279 | 280 | * md5.n: Fixed nroff trouble. 281 | 282 | 2001-06-02 Miguel Sofer 283 | 284 | * md5.tcl: modified the pure Tcl code to run almost 5 times 285 | faster, by inlining (via regsub) function calls and using local 286 | variables instead of arrays. 287 | 288 | Bumped version number to 1.4 289 | 290 | 2001-04-25 Andreas Kupries 291 | 292 | * md5.test: Added tests of "md5::hmac". This allows us to test the 293 | two different implementations against each other. 294 | 295 | Note: The test file will now print which of the two variants 296 | (pure Tcl vs. Trf based) is active and under test. 297 | 298 | * md5.tcl: Added code to create a soft dependency on Trf. In other 299 | words, if Trf is present it will be loaded and used to speed up 300 | operations. Without Trf the original code in pure Tcl will be 301 | used. Note that the presence of Trf allows us to optimize the 302 | command "md5::hmac" too. 303 | 304 | 2001-04-24 Andreas Kupries 305 | 306 | * New module, 'md5'. The code Don Libes's 307 | md5pure, extended with a soft dependency on Trf to allow higher 308 | speed if the environment is right. 309 | -------------------------------------------------------------------------------- /lib/md5/md5.c: -------------------------------------------------------------------------------- 1 | /* 2 | *********************************************************************** 3 | ** md5.c -- the source code for MD5 routines ** 4 | ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** 5 | ** Created: 2/17/90 RLR ** 6 | ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version ** 7 | *********************************************************************** 8 | */ 9 | 10 | /* 11 | * Edited 7 May 93 by CP to change the interface to match that 12 | * of the MD5 routines in RSAREF. Due to this alteration, this 13 | * code is "derived from the RSA Data Security, Inc. MD5 Message- 14 | * Digest Algorithm". (See below.) 15 | */ 16 | 17 | /* 18 | *********************************************************************** 19 | ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** 20 | ** ** 21 | ** License to copy and use this software is granted provided that ** 22 | ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** 23 | ** Digest Algorithm" in all material mentioning or referencing this ** 24 | ** software or this function. ** 25 | ** ** 26 | ** License is also granted to make and use derivative works ** 27 | ** provided that such works are identified as "derived from the RSA ** 28 | ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** 29 | ** material mentioning or referencing the derived work. ** 30 | ** ** 31 | ** RSA Data Security, Inc. makes no representations concerning ** 32 | ** either the merchantability of this software or the suitability ** 33 | ** of this software for any particular purpose. It is provided "as ** 34 | ** is" without express or implied warranty of any kind. ** 35 | ** ** 36 | ** These notices must be retained in any copies of any part of this ** 37 | ** documentation and/or software. ** 38 | *********************************************************************** 39 | */ 40 | 41 | #include "md5.h" 42 | 43 | /* 44 | *********************************************************************** 45 | ** Message-digest routines: ** 46 | ** To form the message digest for a message M ** 47 | ** (1) Initialize a context buffer mdContext using MD5Init ** 48 | ** (2) Call MD5Update on mdContext and M ** 49 | ** (3) Call MD5Final on mdContext ** 50 | ** The message digest is now in the bugffer passed to MD5Final ** 51 | *********************************************************************** 52 | */ 53 | 54 | static unsigned char PADDING[64] = { 55 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 56 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 57 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 59 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 60 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 61 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 62 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 63 | }; 64 | 65 | /* F, G, H and I are basic MD5 functions */ 66 | #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) 67 | #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) 68 | #define H(x, y, z) ((x) ^ (y) ^ (z)) 69 | #define I(x, y, z) ((y) ^ ((x) | (~z))) 70 | 71 | /* ROTATE_LEFT rotates x left n bits */ 72 | #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) 73 | 74 | /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */ 75 | /* Rotation is separate from addition to prevent recomputation */ 76 | #define FF(a, b, c, d, x, s, ac) \ 77 | {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ 78 | (a) = ROTATE_LEFT ((a), (s)); \ 79 | (a) += (b); \ 80 | } 81 | #define GG(a, b, c, d, x, s, ac) \ 82 | {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ 83 | (a) = ROTATE_LEFT ((a), (s)); \ 84 | (a) += (b); \ 85 | } 86 | #define HH(a, b, c, d, x, s, ac) \ 87 | {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ 88 | (a) = ROTATE_LEFT ((a), (s)); \ 89 | (a) += (b); \ 90 | } 91 | #define II(a, b, c, d, x, s, ac) \ 92 | {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ 93 | (a) = ROTATE_LEFT ((a), (s)); \ 94 | (a) += (b); \ 95 | } 96 | 97 | /* The routine MD5Init initializes the message-digest context 98 | mdContext. All fields are set to zero. 99 | */ 100 | void MD5Init (mdContext) 101 | MD5_CTX *mdContext; 102 | { 103 | mdContext->i[0] = mdContext->i[1] = (UINT4)0; 104 | 105 | /* Load magic initialization constants. 106 | */ 107 | mdContext->buf[0] = (UINT4)0x67452301L; 108 | mdContext->buf[1] = (UINT4)0xefcdab89L; 109 | mdContext->buf[2] = (UINT4)0x98badcfeL; 110 | mdContext->buf[3] = (UINT4)0x10325476L; 111 | } 112 | 113 | /* The routine MD5Update updates the message-digest context to 114 | account for the presence of each of the characters inBuf[0..inLen-1] 115 | in the message whose digest is being computed. 116 | */ 117 | void MD5Update (mdContext, inBuf, inLen) 118 | register MD5_CTX *mdContext; unsigned char *inBuf; 119 | unsigned int inLen; 120 | { 121 | register int i, ii; 122 | int mdi; 123 | UINT4 in[16]; 124 | 125 | /* compute number of bytes mod 64 */ 126 | mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 127 | 128 | /* update number of bits */ 129 | if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0]) 130 | mdContext->i[1]++; 131 | mdContext->i[0] += ((UINT4)inLen << 3); 132 | mdContext->i[1] += ((UINT4)inLen >> 29); 133 | 134 | while (inLen--) { 135 | /* add new character to buffer, increment mdi */ 136 | mdContext->in[mdi++] = *inBuf++; 137 | 138 | /* transform if necessary */ 139 | if (mdi == 0x40) { 140 | for (i = 0, ii = 0; i < 16; i++, ii += 4) 141 | in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 142 | (((UINT4)mdContext->in[ii+2]) << 16) | 143 | (((UINT4)mdContext->in[ii+1]) << 8) | 144 | ((UINT4)mdContext->in[ii]); 145 | Transform (mdContext->buf, in); 146 | mdi = 0; 147 | } 148 | } 149 | } 150 | 151 | /* The routine MD5Final terminates the message-digest computation and 152 | ends with the desired message digest in mdContext->digest[0...15]. 153 | */ 154 | void MD5Final (digest, mdContext) 155 | unsigned char digest[16]; MD5_CTX *mdContext; 156 | { 157 | UINT4 in[16]; 158 | int mdi; 159 | unsigned int i, ii; 160 | unsigned int padLen; 161 | 162 | /* save number of bits */ 163 | in[14] = mdContext->i[0]; 164 | in[15] = mdContext->i[1]; 165 | 166 | /* compute number of bytes mod 64 */ 167 | mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 168 | 169 | /* pad out to 56 mod 64 */ 170 | padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); 171 | MD5Update (mdContext, PADDING, padLen); 172 | 173 | /* append length in bits and transform */ 174 | for (i = 0, ii = 0; i < 14; i++, ii += 4) 175 | in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 176 | (((UINT4)mdContext->in[ii+2]) << 16) | 177 | (((UINT4)mdContext->in[ii+1]) << 8) | 178 | ((UINT4)mdContext->in[ii]); 179 | Transform (mdContext->buf, in); 180 | 181 | /* store buffer in digest */ 182 | for (i = 0, ii = 0; i < 4; i++, ii += 4) { 183 | digest[ii] = (unsigned char) (mdContext->buf[i] & 0xFF); 184 | digest[ii+1] = (unsigned char)((mdContext->buf[i] >> 8) & 0xFF); 185 | digest[ii+2] = (unsigned char)((mdContext->buf[i] >> 16) & 0xFF); 186 | digest[ii+3] = (unsigned char)((mdContext->buf[i] >> 24) & 0xFF); 187 | } 188 | } 189 | 190 | /* Basic MD5 step. Transforms buf based on in. Note that if the Mysterious 191 | Constants are arranged backwards in little-endian order and decrypted with 192 | the DES they produce OCCULT MESSAGES! 193 | */ 194 | void Transform(buf, in) 195 | register UINT4 *buf; 196 | register UINT4 *in; 197 | { 198 | register UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; 199 | 200 | /* Round 1 */ 201 | #define S11 7 202 | #define S12 12 203 | #define S13 17 204 | #define S14 22 205 | FF ( a, b, c, d, in[ 0], S11, 0xD76AA478L); /* 1 */ 206 | FF ( d, a, b, c, in[ 1], S12, 0xE8C7B756L); /* 2 */ 207 | FF ( c, d, a, b, in[ 2], S13, 0x242070DBL); /* 3 */ 208 | FF ( b, c, d, a, in[ 3], S14, 0xC1BDCEEEL); /* 4 */ 209 | FF ( a, b, c, d, in[ 4], S11, 0xF57C0FAFL); /* 5 */ 210 | FF ( d, a, b, c, in[ 5], S12, 0x4787C62AL); /* 6 */ 211 | FF ( c, d, a, b, in[ 6], S13, 0xA8304613L); /* 7 */ 212 | FF ( b, c, d, a, in[ 7], S14, 0xFD469501L); /* 8 */ 213 | FF ( a, b, c, d, in[ 8], S11, 0x698098D8L); /* 9 */ 214 | FF ( d, a, b, c, in[ 9], S12, 0x8B44F7AFL); /* 10 */ 215 | FF ( c, d, a, b, in[10], S13, 0xFFFF5BB1L); /* 11 */ 216 | FF ( b, c, d, a, in[11], S14, 0x895CD7BEL); /* 12 */ 217 | FF ( a, b, c, d, in[12], S11, 0x6B901122L); /* 13 */ 218 | FF ( d, a, b, c, in[13], S12, 0xFD987193L); /* 14 */ 219 | FF ( c, d, a, b, in[14], S13, 0xA679438EL); /* 15 */ 220 | FF ( b, c, d, a, in[15], S14, 0x49B40821L); /* 16 */ 221 | 222 | /* Round 2 */ 223 | #define S21 5 224 | #define S22 9 225 | #define S23 14 226 | #define S24 20 227 | GG ( a, b, c, d, in[ 1], S21, 0xF61E2562L); /* 17 */ 228 | GG ( d, a, b, c, in[ 6], S22, 0xC040B340L); /* 18 */ 229 | GG ( c, d, a, b, in[11], S23, 0x265E5A51L); /* 19 */ 230 | GG ( b, c, d, a, in[ 0], S24, 0xE9B6C7AAL); /* 20 */ 231 | GG ( a, b, c, d, in[ 5], S21, 0xD62F105DL); /* 21 */ 232 | GG ( d, a, b, c, in[10], S22, 0x02441453L); /* 22 */ 233 | GG ( c, d, a, b, in[15], S23, 0xD8A1E681L); /* 23 */ 234 | GG ( b, c, d, a, in[ 4], S24, 0xE7D3FBC8L); /* 24 */ 235 | GG ( a, b, c, d, in[ 9], S21, 0x21E1CDE6L); /* 25 */ 236 | GG ( d, a, b, c, in[14], S22, 0xC33707D6L); /* 26 */ 237 | GG ( c, d, a, b, in[ 3], S23, 0xF4D50D87L); /* 27 */ 238 | GG ( b, c, d, a, in[ 8], S24, 0x455A14EDL); /* 28 */ 239 | GG ( a, b, c, d, in[13], S21, 0xA9E3E905L); /* 29 */ 240 | GG ( d, a, b, c, in[ 2], S22, 0xFCEFA3F8L); /* 30 */ 241 | GG ( c, d, a, b, in[ 7], S23, 0x676F02D9L); /* 31 */ 242 | GG ( b, c, d, a, in[12], S24, 0x8D2A4C8AL); /* 32 */ 243 | 244 | /* Round 3 */ 245 | #define S31 4 246 | #define S32 11 247 | #define S33 16 248 | #define S34 23 249 | HH ( a, b, c, d, in[ 5], S31, 0xFFFA3942L); /* 33 */ 250 | HH ( d, a, b, c, in[ 8], S32, 0x8771F681L); /* 34 */ 251 | HH ( c, d, a, b, in[11], S33, 0x6D9D6122L); /* 35 */ 252 | HH ( b, c, d, a, in[14], S34, 0xFDE5380CL); /* 36 */ 253 | HH ( a, b, c, d, in[ 1], S31, 0xA4BEEA44L); /* 37 */ 254 | HH ( d, a, b, c, in[ 4], S32, 0x4BDECFA9L); /* 38 */ 255 | HH ( c, d, a, b, in[ 7], S33, 0xF6BB4B60L); /* 39 */ 256 | HH ( b, c, d, a, in[10], S34, 0xBEBFBC70L); /* 40 */ 257 | HH ( a, b, c, d, in[13], S31, 0x289B7EC6L); /* 41 */ 258 | HH ( d, a, b, c, in[ 0], S32, 0xEAA127FAL); /* 42 */ 259 | HH ( c, d, a, b, in[ 3], S33, 0xD4EF3085L); /* 43 */ 260 | HH ( b, c, d, a, in[ 6], S34, 0x04881D05L); /* 44 */ 261 | HH ( a, b, c, d, in[ 9], S31, 0xD9D4D039L); /* 45 */ 262 | HH ( d, a, b, c, in[12], S32, 0xE6DB99E5L); /* 46 */ 263 | HH ( c, d, a, b, in[15], S33, 0x1FA27CF8L); /* 47 */ 264 | HH ( b, c, d, a, in[ 2], S34, 0xC4AC5665L); /* 48 */ 265 | 266 | /* Round 4 */ 267 | #define S41 6 268 | #define S42 10 269 | #define S43 15 270 | #define S44 21 271 | II ( a, b, c, d, in[ 0], S41, 0xF4292244L); /* 49 */ 272 | II ( d, a, b, c, in[ 7], S42, 0x432AFF97L); /* 50 */ 273 | II ( c, d, a, b, in[14], S43, 0xAB9423A7L); /* 51 */ 274 | II ( b, c, d, a, in[ 5], S44, 0xFC93A039L); /* 52 */ 275 | II ( a, b, c, d, in[12], S41, 0x655B59C3L); /* 53 */ 276 | II ( d, a, b, c, in[ 3], S42, 0x8F0CCC92L); /* 54 */ 277 | II ( c, d, a, b, in[10], S43, 0xFFEFF47DL); /* 55 */ 278 | II ( b, c, d, a, in[ 1], S44, 0x85845DD1L); /* 56 */ 279 | II ( a, b, c, d, in[ 8], S41, 0x6FA87E4FL); /* 57 */ 280 | II ( d, a, b, c, in[15], S42, 0xFE2CE6E0L); /* 58 */ 281 | II ( c, d, a, b, in[ 6], S43, 0xA3014314L); /* 59 */ 282 | II ( b, c, d, a, in[13], S44, 0x4E0811A1L); /* 60 */ 283 | II ( a, b, c, d, in[ 4], S41, 0xF7537E82L); /* 61 */ 284 | II ( d, a, b, c, in[11], S42, 0xBD3AF235L); /* 62 */ 285 | II ( c, d, a, b, in[ 2], S43, 0x2AD7D2BBL); /* 63 */ 286 | II ( b, c, d, a, in[ 9], S44, 0xEB86D391L); /* 64 */ 287 | 288 | buf[0] += a; 289 | buf[1] += b; 290 | buf[2] += c; 291 | buf[3] += d; 292 | } 293 | 294 | -------------------------------------------------------------------------------- /translate/default.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Artscript v2.2\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2013-12-24 19:40-0600\n" 6 | "PO-Revision-Date: 2013-12-24 19:40-0600\n" 7 | "Last-Translator: IvanYossi \n" 8 | "Language-Team: \n" 9 | "Language: \n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 14 | "X-Poedit-Basepath: .\n" 15 | "X-Poedit-SourceCharset: utf-8\n" 16 | "X-Poedit-SearchPath-0: .\n" 17 | 18 | #: msgcatSTR_artscript2.tcl:2 19 | #, tcl-format 20 | msgid "%f => file.ext, %e => ext, %G => WxH" 21 | msgstr "" 22 | 23 | #: msgcatSTR_artscript2.tcl:3 24 | #, tcl-format 25 | msgid "%s file format not supported" 26 | msgstr "" 27 | 28 | #: msgcatSTR_artscript2.tcl:4 29 | #, tcl-format 30 | msgid "%s has no thumb" 31 | msgstr "" 32 | 33 | #: msgcatSTR_artscript2.tcl:5 34 | #, tcl-format 35 | msgid "%s has normal thumb" 36 | msgstr "" 37 | 38 | #: msgcatSTR_artscript2.tcl:6 39 | #, tcl-format 40 | msgid "%s is not a valid ORA/KRA" 41 | msgstr "" 42 | 43 | #: msgcatSTR_artscript2.tcl:7 44 | #, tcl-format 45 | msgid "%s not a valid PSD file" 46 | msgstr "" 47 | 48 | #: msgcatSTR_artscript2.tcl:8 49 | msgid "Add custom size. ratio : wxh" 50 | msgstr "" 51 | 52 | #: msgcatSTR_artscript2.tcl:9 53 | msgid "Add files" 54 | msgstr "" 55 | 56 | #: msgcatSTR_artscript2.tcl:10 57 | msgid "Add folder" 58 | msgstr "" 59 | 60 | #: msgcatSTR_artscript2.tcl:11 61 | msgid "All" 62 | msgstr "" 63 | 64 | #: msgcatSTR_artscript2.tcl:12 65 | msgid "All collages assembled" 66 | msgstr "" 67 | 68 | #: msgcatSTR_artscript2.tcl:13 69 | msgid "Allow Overwrite" 70 | msgstr "" 71 | 72 | #: msgcatSTR_artscript2.tcl:14 73 | #, tcl-format 74 | msgid "Artscript %1$s -- %2$s Files selected" 75 | msgstr "" 76 | 77 | #: msgcatSTR_artscript2.tcl:15 78 | #, tcl-format 79 | msgid "Artscript %s" 80 | msgstr "" 81 | 82 | #: msgcatSTR_artscript2.tcl:16 83 | msgid "Border" 84 | msgstr "" 85 | 86 | #: msgcatSTR_artscript2.tcl:17 87 | msgid "Bottom" 88 | msgstr "" 89 | 90 | #: msgcatSTR_artscript2.tcl:18 91 | msgid "BottomLeft" 92 | msgstr "" 93 | 94 | #: msgcatSTR_artscript2.tcl:19 95 | msgid "BottomRight" 96 | msgstr "" 97 | 98 | #: msgcatSTR_artscript2.tcl:20 99 | msgid "Center" 100 | msgstr "" 101 | 102 | #: msgcatSTR_artscript2.tcl:21 103 | msgid "Choose color" 104 | msgstr "" 105 | 106 | #: msgcatSTR_artscript2.tcl:22 107 | msgid "Collage" 108 | msgstr "" 109 | 110 | #: msgcatSTR_artscript2.tcl:23 111 | msgid "Collage Background Color" 112 | msgstr "" 113 | 114 | #: msgcatSTR_artscript2.tcl:24 115 | msgid "Collage Border Color" 116 | msgstr "" 117 | 118 | #: msgcatSTR_artscript2.tcl:25 119 | msgid "Collage Label Color" 120 | msgstr "" 121 | 122 | #: msgcatSTR_artscript2.tcl:26 123 | msgid "Collage file name:" 124 | msgstr "" 125 | 126 | #: msgcatSTR_artscript2.tcl:27 127 | msgid "Collections" 128 | msgstr "" 129 | 130 | #: msgcatSTR_artscript2.tcl:28 131 | msgid "Color" 132 | msgstr "" 133 | 134 | #: msgcatSTR_artscript2.tcl:29 135 | msgid "Colors:" 136 | msgstr "" 137 | 138 | #: msgcatSTR_artscript2.tcl:30 139 | msgid "Columns:" 140 | msgstr "" 141 | 142 | #: msgcatSTR_artscript2.tcl:31 143 | msgid "Compress:" 144 | msgstr "" 145 | 146 | #: msgcatSTR_artscript2.tcl:32 147 | msgid "Concatenation" 148 | msgstr "" 149 | 150 | #: msgcatSTR_artscript2.tcl:33 151 | #, tcl-format 152 | msgid "Configuration file found in %s" 153 | msgstr "" 154 | 155 | #: msgcatSTR_artscript2.tcl:34 156 | msgid "Convert" 157 | msgstr "" 158 | 159 | #: msgcatSTR_artscript2.tcl:35 160 | msgid "Convert done." 161 | msgstr "" 162 | 163 | #: msgcatSTR_artscript2.tcl:36 164 | #, tcl-format 165 | msgid "Converting... %1$s to %2$s" 166 | msgstr "" 167 | 168 | #: msgcatSTR_artscript2.tcl:37 169 | msgid "Crop" 170 | msgstr "" 171 | 172 | #: msgcatSTR_artscript2.tcl:38 173 | #, tcl-format 174 | msgid "Error! %s" 175 | msgstr "" 176 | 177 | #: msgcatSTR_artscript2.tcl:39 178 | msgid "Estimate size" 179 | msgstr "" 180 | 181 | #: msgcatSTR_artscript2.tcl:40 182 | #, tcl-format 183 | msgid "Extracting file %s" 184 | msgstr "" 185 | 186 | #: msgcatSTR_artscript2.tcl:41 187 | msgid "File Conversions Done!" 188 | msgstr "" 189 | 190 | #: msgcatSTR_artscript2.tcl:42 191 | msgid "File extractions finished" 192 | msgstr "" 193 | 194 | #: msgcatSTR_artscript2.tcl:43 195 | msgid "Format:" 196 | msgstr "" 197 | 198 | #: msgcatSTR_artscript2.tcl:44 199 | msgid "Generating preview" 200 | msgstr "" 201 | 202 | #: msgcatSTR_artscript2.tcl:45 203 | msgid "ID" 204 | msgstr "" 205 | 206 | #: msgcatSTR_artscript2.tcl:46 207 | msgid "Image Strip h" 208 | msgstr "" 209 | 210 | #: msgcatSTR_artscript2.tcl:47 211 | msgid "Image Strip v" 212 | msgstr "" 213 | 214 | #: msgcatSTR_artscript2.tcl:48 215 | msgid "Image Style" 216 | msgstr "" 217 | 218 | #: msgcatSTR_artscript2.tcl:49 219 | msgid "Image area is bigger" 220 | msgstr "" 221 | 222 | #: msgcatSTR_artscript2.tcl:50 223 | msgid "Input" 224 | msgstr "" 225 | 226 | #: msgcatSTR_artscript2.tcl:51 227 | msgid "Inverse" 228 | msgstr "" 229 | 230 | #: msgcatSTR_artscript2.tcl:52 231 | msgid "Keep format" 232 | msgstr "" 233 | 234 | #: msgcatSTR_artscript2.tcl:53 235 | msgid "Label:" 236 | msgstr "" 237 | 238 | #: msgcatSTR_artscript2.tcl:54 239 | msgid "Layouts:" 240 | msgstr "" 241 | 242 | #: msgcatSTR_artscript2.tcl:55 243 | msgid "Left" 244 | msgstr "" 245 | 246 | #: msgcatSTR_artscript2.tcl:56 247 | msgid "Load preset:" 248 | msgstr "" 249 | 250 | #: msgcatSTR_artscript2.tcl:57 251 | msgid "Make Collage" 252 | msgstr "" 253 | 254 | #: msgcatSTR_artscript2.tcl:58 255 | #, tcl-format 256 | msgid "Make Collage%s" 257 | msgstr "" 258 | 259 | #: msgcatSTR_artscript2.tcl:59 260 | msgid "Make Collage?" 261 | msgstr "" 262 | 263 | #: msgcatSTR_artscript2.tcl:60 264 | msgid "Make ORA" 265 | msgstr "" 266 | 267 | #: msgcatSTR_artscript2.tcl:61 268 | msgid "Mode" 269 | msgstr "" 270 | 271 | #: msgcatSTR_artscript2.tcl:62 272 | msgid "Mode:" 273 | msgstr "" 274 | 275 | #: msgcatSTR_artscript2.tcl:63 276 | msgid "Need more data" 277 | msgstr "" 278 | 279 | #: msgcatSTR_artscript2.tcl:64 280 | msgid "New" 281 | msgstr "" 282 | 283 | #: msgcatSTR_artscript2.tcl:65 284 | msgid "No Thumbnail" 285 | msgstr "" 286 | 287 | #: msgcatSTR_artscript2.tcl:66 288 | msgid "No images loaded!" 289 | msgstr "" 290 | 291 | #: msgcatSTR_artscript2.tcl:67 292 | msgid "None" 293 | msgstr "" 294 | 295 | #: msgcatSTR_artscript2.tcl:68 296 | msgid "ORA Image Files Ready!" 297 | msgstr "" 298 | 299 | #: msgcatSTR_artscript2.tcl:69 300 | msgid "OnlyGrow" 301 | msgstr "" 302 | 303 | #: msgcatSTR_artscript2.tcl:70 304 | msgid "OnlyShrink" 305 | msgstr "" 306 | 307 | #: msgcatSTR_artscript2.tcl:71 308 | msgid "Opacity" 309 | msgstr "" 310 | 311 | #: msgcatSTR_artscript2.tcl:72 312 | #, tcl-format 313 | msgid "Oraizing... %s" 314 | msgstr "" 315 | 316 | #: msgcatSTR_artscript2.tcl:73 317 | msgid "Output" 318 | msgstr "" 319 | 320 | #: msgcatSTR_artscript2.tcl:74 321 | msgid "Output & Quality" 322 | msgstr "" 323 | 324 | #: msgcatSTR_artscript2.tcl:75 325 | msgid "Padding" 326 | msgstr "" 327 | 328 | #: msgcatSTR_artscript2.tcl:76 329 | msgid "Photo sheet" 330 | msgstr "" 331 | 332 | #: msgcatSTR_artscript2.tcl:77 333 | msgid "Position" 334 | msgstr "" 335 | 336 | #: msgcatSTR_artscript2.tcl:78 337 | msgid "Powering up Collage Assembly line" 338 | msgstr "" 339 | 340 | #: msgcatSTR_artscript2.tcl:79 341 | msgid "Prefix and Suffix" 342 | msgstr "" 343 | 344 | #: msgcatSTR_artscript2.tcl:80 345 | msgid "Presets config name keys changed drastically from v2.0 to 2.1 If your presets does not load please review presets.config.example file to check the new names." 346 | msgstr "" 347 | 348 | #: msgcatSTR_artscript2.tcl:81 349 | msgid "Preview" 350 | msgstr "" 351 | 352 | #: msgcatSTR_artscript2.tcl:82 353 | #, tcl-format 354 | msgid "Program %s not found" 355 | msgstr "" 356 | 357 | #: msgcatSTR_artscript2.tcl:83 358 | msgid "Quality:" 359 | msgstr "" 360 | 361 | #: msgcatSTR_artscript2.tcl:84 362 | msgid "Range:" 363 | msgstr "" 364 | 365 | #: msgcatSTR_artscript2.tcl:85 366 | msgid "Remove Alfa" 367 | msgstr "" 368 | 369 | #: msgcatSTR_artscript2.tcl:86 370 | msgid "Remove Selected" 371 | msgstr "" 372 | 373 | #: msgcatSTR_artscript2.tcl:87 374 | msgid "Rename" 375 | msgstr "" 376 | 377 | #: msgcatSTR_artscript2.tcl:88 378 | msgid "Rename Images Done!" 379 | msgstr "" 380 | 381 | #: msgcatSTR_artscript2.tcl:89 382 | msgid "Rename finished." 383 | msgstr "" 384 | 385 | #: msgcatSTR_artscript2.tcl:90 386 | msgid "Renaming..." 387 | msgstr "" 388 | 389 | #: msgcatSTR_artscript2.tcl:91 390 | msgid "Rendering Gimps" 391 | msgstr "" 392 | 393 | #: msgcatSTR_artscript2.tcl:92 394 | msgid "Rendering Ink Scapes" 395 | msgstr "" 396 | 397 | #: msgcatSTR_artscript2.tcl:93 398 | msgid "Rendering Kriters" 399 | msgstr "" 400 | 401 | #: msgcatSTR_artscript2.tcl:94 402 | msgid "Resize" 403 | msgstr "" 404 | 405 | #: msgcatSTR_artscript2.tcl:95 406 | msgid "Right" 407 | msgstr "" 408 | 409 | #: msgcatSTR_artscript2.tcl:96 410 | msgid "Rotation" 411 | msgstr "" 412 | 413 | #: msgcatSTR_artscript2.tcl:97 414 | msgid "Rows:" 415 | msgstr "" 416 | 417 | #: msgcatSTR_artscript2.tcl:98 418 | msgid "Scale" 419 | msgstr "" 420 | 421 | #: msgcatSTR_artscript2.tcl:99 422 | msgid "Select" 423 | msgstr "" 424 | 425 | #: msgcatSTR_artscript2.tcl:100 426 | msgid "Select:" 427 | msgstr "" 428 | 429 | #: msgcatSTR_artscript2.tcl:101 430 | msgid "Size" 431 | msgstr "" 432 | 433 | #: msgcatSTR_artscript2.tcl:102 434 | msgid "Size out" 435 | msgstr "" 436 | 437 | #: msgcatSTR_artscript2.tcl:103 438 | msgid "Something went wrong, tmp png wasn't created" 439 | msgstr "" 440 | 441 | #: msgcatSTR_artscript2.tcl:104 442 | msgid "Square 3x3" 443 | msgstr "" 444 | 445 | #: msgcatSTR_artscript2.tcl:105 446 | msgid "Starting Convert..." 447 | msgstr "" 448 | 449 | #: msgcatSTR_artscript2.tcl:106 450 | msgid "Starting File extractions..." 451 | msgstr "" 452 | 453 | #: msgcatSTR_artscript2.tcl:107 454 | msgid "Storyboard" 455 | msgstr "" 456 | 457 | #: msgcatSTR_artscript2.tcl:108 458 | msgid "Stretch" 459 | msgstr "" 460 | 461 | #: msgcatSTR_artscript2.tcl:109 462 | msgid "Style:" 463 | msgstr "" 464 | 465 | #: msgcatSTR_artscript2.tcl:110 466 | msgid "Suported Images" 467 | msgstr "" 468 | 469 | #: msgcatSTR_artscript2.tcl:111 470 | msgid "Text Style" 471 | msgstr "" 472 | 473 | #: msgcatSTR_artscript2.tcl:112 474 | msgid "Thumbnail" 475 | msgstr "" 476 | 477 | #: msgcatSTR_artscript2.tcl:113 478 | msgid "Tile size. ratio : w x h" 479 | msgstr "" 480 | 481 | #: msgcatSTR_artscript2.tcl:114 482 | msgid "Tk drag and drop enabled" 483 | msgstr "" 484 | 485 | #: msgcatSTR_artscript2.tcl:115 486 | msgid "Top" 487 | msgstr "" 488 | 489 | #: msgcatSTR_artscript2.tcl:116 490 | msgid "TopLeft" 491 | msgstr "" 492 | 493 | #: msgcatSTR_artscript2.tcl:117 494 | msgid "TopRight" 495 | msgstr "" 496 | 497 | #: msgcatSTR_artscript2.tcl:118 498 | msgid "Watermark" 499 | msgstr "" 500 | 501 | #: msgcatSTR_artscript2.tcl:119 502 | msgid "Watermark Text Color" 503 | msgstr "" 504 | 505 | #: msgcatSTR_artscript2.tcl:120 506 | msgid "Wrap" 507 | msgstr "" 508 | 509 | #: msgcatSTR_artscript2.tcl:121 510 | msgid "Zero geometry" 511 | msgstr "" 512 | 513 | #: msgcatSTR_artscript2.tcl:122 514 | msgid "Zoom" 515 | msgstr "" 516 | 517 | #: msgcatSTR_artscript2.tcl:123 518 | msgid "all" 519 | msgstr "" 520 | 521 | #: msgcatSTR_artscript2.tcl:124 522 | msgid "bright" 523 | msgstr "" 524 | 525 | #: msgcatSTR_artscript2.tcl:125 526 | msgid "clear" 527 | msgstr "" 528 | 529 | #: msgcatSTR_artscript2.tcl:126 530 | msgid "dark" 531 | msgstr "" 532 | 533 | #: msgcatSTR_artscript2.tcl:127 534 | msgid "darker" 535 | msgstr "" 536 | 537 | #: msgcatSTR_artscript2.tcl:128 538 | msgid "default" 539 | msgstr "" 540 | 541 | #: msgcatSTR_artscript2.tcl:129 542 | #, tcl-format 543 | msgid "error: %s" 544 | msgstr "" 545 | 546 | #: msgcatSTR_artscript2.tcl:130 547 | msgid "ext." 548 | msgstr "" 549 | 550 | #: msgcatSTR_artscript2.tcl:131 551 | #, tcl-format 552 | msgid "file %s found!" 553 | msgstr "" 554 | 555 | #: msgcatSTR_artscript2.tcl:132 556 | msgid "icon" 557 | msgstr "" 558 | 559 | #: msgcatSTR_artscript2.tcl:133 560 | msgid "image" 561 | msgstr "" 562 | 563 | #: msgcatSTR_artscript2.tcl:134 564 | msgid "inv." 565 | msgstr "" 566 | 567 | #: msgcatSTR_artscript2.tcl:135 568 | msgid "label" 569 | msgstr "" 570 | 571 | #: msgcatSTR_artscript2.tcl:136 572 | msgid "neutral" 573 | msgstr "" 574 | 575 | #: msgcatSTR_artscript2.tcl:137 576 | msgid "percentage" 577 | msgstr "" 578 | 579 | #: msgcatSTR_artscript2.tcl:138 580 | #, tcl-format 581 | msgid "renaming... %s" 582 | msgstr "" 583 | 584 | #: msgcatSTR_artscript2.tcl:139 585 | msgid "sels" 586 | msgstr "" 587 | 588 | #: msgcatSTR_artscript2.tcl:140 589 | msgid "text" 590 | msgstr "" 591 | 592 | #: msgcatSTR_artscript2.tcl:141 593 | msgid "texture" 594 | msgstr "" 595 | 596 | #: msgcatSTR_artscript2.tcl:142 597 | msgid "wallpaper" 598 | msgstr "" 599 | 600 | #: msgcatSTR_artscript2.tcl:143 601 | msgid "webp lossy" 602 | msgstr "" 603 | 604 | -------------------------------------------------------------------------------- /translate/es.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Artscript v2.2\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2013-12-24 19:40-0600\n" 6 | "PO-Revision-Date: 2013-12-24 19:45-0600\n" 7 | "Last-Translator: IvanYossi \n" 8 | "Language-Team: \n" 9 | "Language: \n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 14 | "X-Poedit-Basepath: .\n" 15 | "X-Poedit-SourceCharset: utf-8\n" 16 | "X-Poedit-SearchPath-0: .\n" 17 | 18 | #: msgcatSTR_artscript2.tcl:2 19 | #, tcl-format 20 | msgid "%f => file.ext, %e => ext, %G => WxH" 21 | msgstr "%f => archivo.ext, %e => ext, %G => WxH" 22 | 23 | #: msgcatSTR_artscript2.tcl:3 24 | #, tcl-format 25 | msgid "%s file format not supported" 26 | msgstr "Formato de archivo %s no soportado" 27 | 28 | #: msgcatSTR_artscript2.tcl:4 29 | #, tcl-format 30 | msgid "%s has no thumb" 31 | msgstr "%s no tiene miniatura" 32 | 33 | #: msgcatSTR_artscript2.tcl:5 34 | #, tcl-format 35 | msgid "%s has normal thumb" 36 | msgstr "%s tiene miniatura normal" 37 | 38 | #: msgcatSTR_artscript2.tcl:6 39 | #, tcl-format 40 | msgid "%s is not a valid ORA/KRA" 41 | msgstr "%s no es un archivo ORA/KRA válido" 42 | 43 | #: msgcatSTR_artscript2.tcl:7 44 | #, tcl-format 45 | msgid "%s not a valid PSD file" 46 | msgstr "%s no es un archivo PSD válido" 47 | 48 | #: msgcatSTR_artscript2.tcl:8 49 | msgid "Add custom size. ratio : wxh" 50 | msgstr "Añadir tamaño personalizado: wxh" 51 | 52 | #: msgcatSTR_artscript2.tcl:9 53 | msgid "Add files" 54 | msgstr "Añadir" 55 | 56 | #: msgcatSTR_artscript2.tcl:10 57 | msgid "Add folder" 58 | msgstr "+Folder" 59 | 60 | #: msgcatSTR_artscript2.tcl:11 61 | msgid "All" 62 | msgstr "Todo" 63 | 64 | #: msgcatSTR_artscript2.tcl:12 65 | msgid "All collages assembled" 66 | msgstr "Todos los mosaicos armados" 67 | 68 | #: msgcatSTR_artscript2.tcl:13 69 | msgid "Allow Overwrite" 70 | msgstr "Sobreescribir" 71 | 72 | #: msgcatSTR_artscript2.tcl:14 73 | #, tcl-format 74 | msgid "Artscript %1$s -- %2$s Files selected" 75 | msgstr "Artscript %1$s -- %2$s Archivos seleccionados" 76 | 77 | #: msgcatSTR_artscript2.tcl:15 78 | #, tcl-format 79 | msgid "Artscript %s" 80 | msgstr "Artscript %s" 81 | 82 | #: msgcatSTR_artscript2.tcl:16 83 | msgid "Border" 84 | msgstr "Borde" 85 | 86 | #: msgcatSTR_artscript2.tcl:17 87 | msgid "Bottom" 88 | msgstr "Abajo" 89 | 90 | #: msgcatSTR_artscript2.tcl:18 91 | msgid "BottomLeft" 92 | msgstr "Abajo Iz." 93 | 94 | #: msgcatSTR_artscript2.tcl:19 95 | msgid "BottomRight" 96 | msgstr "Abajo Der." 97 | 98 | #: msgcatSTR_artscript2.tcl:20 99 | msgid "Center" 100 | msgstr "Centro" 101 | 102 | #: msgcatSTR_artscript2.tcl:21 103 | msgid "Choose color" 104 | msgstr "Elige un color" 105 | 106 | #: msgcatSTR_artscript2.tcl:22 107 | msgid "Collage" 108 | msgstr "" 109 | 110 | #: msgcatSTR_artscript2.tcl:23 111 | msgid "Collage Background Color" 112 | msgstr "Color de fondo" 113 | 114 | #: msgcatSTR_artscript2.tcl:24 115 | msgid "Collage Border Color" 116 | msgstr "Color de borde" 117 | 118 | #: msgcatSTR_artscript2.tcl:25 119 | msgid "Collage Label Color" 120 | msgstr "Color de etiqueta" 121 | 122 | #: msgcatSTR_artscript2.tcl:26 123 | msgid "Collage file name:" 124 | msgstr "Nombre del Collage:" 125 | 126 | #: msgcatSTR_artscript2.tcl:27 127 | msgid "Collections" 128 | msgstr "Colecciones" 129 | 130 | #: msgcatSTR_artscript2.tcl:28 131 | msgid "Color" 132 | msgstr "" 133 | 134 | #: msgcatSTR_artscript2.tcl:29 135 | msgid "Colors:" 136 | msgstr "Colores:" 137 | 138 | #: msgcatSTR_artscript2.tcl:30 139 | msgid "Columns:" 140 | msgstr "Columnas:" 141 | 142 | #: msgcatSTR_artscript2.tcl:31 143 | msgid "Compress:" 144 | msgstr "Comprimir:" 145 | 146 | #: msgcatSTR_artscript2.tcl:32 147 | msgid "Concatenation" 148 | msgstr "Concatenar" 149 | 150 | #: msgcatSTR_artscript2.tcl:33 151 | #, tcl-format 152 | msgid "Configuration file found in %s" 153 | msgstr "Archivo de configuración encontrado en %s" 154 | 155 | #: msgcatSTR_artscript2.tcl:34 156 | msgid "Convert" 157 | msgstr "Convertir" 158 | 159 | #: msgcatSTR_artscript2.tcl:35 160 | msgid "Convert done." 161 | msgstr "Conversión terminada" 162 | 163 | #: msgcatSTR_artscript2.tcl:36 164 | #, tcl-format 165 | msgid "Converting... %1$s to %2$s" 166 | msgstr "Convirtiendo... %1$s a %2$s" 167 | 168 | #: msgcatSTR_artscript2.tcl:37 169 | msgid "Crop" 170 | msgstr "Cortar" 171 | 172 | #: msgcatSTR_artscript2.tcl:38 173 | #, tcl-format 174 | msgid "Error! %s" 175 | msgstr "¡Error! %s" 176 | 177 | #: msgcatSTR_artscript2.tcl:39 178 | msgid "Estimate size" 179 | msgstr "Estimar tamaño" 180 | 181 | #: msgcatSTR_artscript2.tcl:40 182 | #, tcl-format 183 | msgid "Extracting file %s" 184 | msgstr "Extrayendo archivo %s" 185 | 186 | #: msgcatSTR_artscript2.tcl:41 187 | msgid "File Conversions Done!" 188 | msgstr "Conversión de archivos terminada!" 189 | 190 | #: msgcatSTR_artscript2.tcl:42 191 | msgid "File extractions finished" 192 | msgstr "Extracción de archivos terminada" 193 | 194 | #: msgcatSTR_artscript2.tcl:43 195 | msgid "Format:" 196 | msgstr "Formato:" 197 | 198 | #: msgcatSTR_artscript2.tcl:44 199 | msgid "Generating preview" 200 | msgstr "Generando pre visualización" 201 | 202 | #: msgcatSTR_artscript2.tcl:45 203 | msgid "ID" 204 | msgstr "" 205 | 206 | #: msgcatSTR_artscript2.tcl:46 207 | msgid "Image Strip h" 208 | msgstr "Tira de Imágenes h" 209 | 210 | #: msgcatSTR_artscript2.tcl:47 211 | msgid "Image Strip v" 212 | msgstr "Tira de Imágenes v" 213 | 214 | #: msgcatSTR_artscript2.tcl:48 215 | msgid "Image Style" 216 | msgstr "Estilo de imagen" 217 | 218 | #: msgcatSTR_artscript2.tcl:49 219 | msgid "Image area is bigger" 220 | msgstr "El área de imagen es mayor:" 221 | 222 | #: msgcatSTR_artscript2.tcl:50 223 | msgid "Input" 224 | msgstr "Entrada" 225 | 226 | #: msgcatSTR_artscript2.tcl:51 227 | msgid "Inverse" 228 | msgstr "Invertir" 229 | 230 | #: msgcatSTR_artscript2.tcl:52 231 | msgid "Keep format" 232 | msgstr "Mismo formato" 233 | 234 | #: msgcatSTR_artscript2.tcl:53 235 | msgid "Label:" 236 | msgstr "Etiqueta:" 237 | 238 | #: msgcatSTR_artscript2.tcl:54 239 | msgid "Layouts:" 240 | msgstr "Mapeo" 241 | 242 | #: msgcatSTR_artscript2.tcl:55 243 | msgid "Left" 244 | msgstr "Izquierda" 245 | 246 | #: msgcatSTR_artscript2.tcl:56 247 | msgid "Load preset:" 248 | msgstr "Cargar opciones:" 249 | 250 | #: msgcatSTR_artscript2.tcl:57 251 | msgid "Make Collage" 252 | msgstr "Crear Collage" 253 | 254 | #: msgcatSTR_artscript2.tcl:58 255 | #, tcl-format 256 | msgid "Make Collage%s" 257 | msgstr "Crear Collage!" 258 | 259 | #: msgcatSTR_artscript2.tcl:59 260 | msgid "Make Collage?" 261 | msgstr "Crear Collage?" 262 | 263 | #: msgcatSTR_artscript2.tcl:60 264 | msgid "Make ORA" 265 | msgstr "Crear ORA:" 266 | 267 | #: msgcatSTR_artscript2.tcl:61 268 | msgid "Mode" 269 | msgstr "Modo" 270 | 271 | #: msgcatSTR_artscript2.tcl:62 272 | msgid "Mode:" 273 | msgstr "Modo:" 274 | 275 | #: msgcatSTR_artscript2.tcl:63 276 | msgid "Need more data" 277 | msgstr "Necesito datos" 278 | 279 | #: msgcatSTR_artscript2.tcl:64 280 | msgid "New" 281 | msgstr "Nuevo" 282 | 283 | #: msgcatSTR_artscript2.tcl:65 284 | msgid "No Thumbnail" 285 | msgstr "Sin miniatura" 286 | 287 | #: msgcatSTR_artscript2.tcl:66 288 | msgid "No images loaded!" 289 | msgstr "¡No hay imágenes en lista!" 290 | 291 | #: msgcatSTR_artscript2.tcl:67 292 | msgid "None" 293 | msgstr "Nada" 294 | 295 | #: msgcatSTR_artscript2.tcl:68 296 | msgid "ORA Image Files Ready!" 297 | msgstr "¡Imágenes Ora listas!" 298 | 299 | #: msgcatSTR_artscript2.tcl:69 300 | msgid "OnlyGrow" 301 | msgstr "Agrandar solo" 302 | 303 | #: msgcatSTR_artscript2.tcl:70 304 | msgid "OnlyShrink" 305 | msgstr "Reducir solo" 306 | 307 | #: msgcatSTR_artscript2.tcl:71 308 | msgid "Opacity" 309 | msgstr "Opacidad" 310 | 311 | #: msgcatSTR_artscript2.tcl:72 312 | #, tcl-format 313 | msgid "Oraizing... %s" 314 | msgstr "Creando imágenes Ora... %s" 315 | 316 | #: msgcatSTR_artscript2.tcl:73 317 | msgid "Output" 318 | msgstr "Salida" 319 | 320 | #: msgcatSTR_artscript2.tcl:74 321 | msgid "Output & Quality" 322 | msgstr "Salida y Calidad" 323 | 324 | #: msgcatSTR_artscript2.tcl:75 325 | msgid "Padding" 326 | msgstr "Margen" 327 | 328 | #: msgcatSTR_artscript2.tcl:76 329 | msgid "Photo sheet" 330 | msgstr "Hoja de contactos" 331 | 332 | #: msgcatSTR_artscript2.tcl:77 333 | msgid "Position" 334 | msgstr "Posición" 335 | 336 | #: msgcatSTR_artscript2.tcl:78 337 | msgid "Powering up Collage Assembly line" 338 | msgstr "Encendiendo línea de ensamblaje de Collage" 339 | 340 | #: msgcatSTR_artscript2.tcl:79 341 | msgid "Prefix and Suffix" 342 | msgstr "Prefijo y Sufijo" 343 | 344 | #: msgcatSTR_artscript2.tcl:80 345 | msgid "Presets config name keys changed drastically from v2.0 to 2.1 If your presets does not load please review presets.config.example file to check the new names." 346 | msgstr "Los nombres de las opciones de configuración cambiaron drásticamente de la versión 2.0 a la 2.1. Si tus opciones son ignoradas, no olvides revisar el archivo \"presets.config.example\" para conocer los nombres nuevos." 347 | 348 | #: msgcatSTR_artscript2.tcl:81 349 | msgid "Preview" 350 | msgstr "Pre visualizar" 351 | 352 | #: msgcatSTR_artscript2.tcl:82 353 | #, tcl-format 354 | msgid "Program %s not found" 355 | msgstr "Programa %s no encontrado" 356 | 357 | #: msgcatSTR_artscript2.tcl:83 358 | msgid "Quality:" 359 | msgstr "Calidad:" 360 | 361 | #: msgcatSTR_artscript2.tcl:84 362 | msgid "Range:" 363 | msgstr "Rango:" 364 | 365 | #: msgcatSTR_artscript2.tcl:85 366 | msgid "Remove Alfa" 367 | msgstr "Remover Alfa" 368 | 369 | #: msgcatSTR_artscript2.tcl:86 370 | msgid "Remove Selected" 371 | msgstr "Quitar" 372 | 373 | #: msgcatSTR_artscript2.tcl:87 374 | msgid "Rename" 375 | msgstr "Renombrar" 376 | 377 | #: msgcatSTR_artscript2.tcl:88 378 | msgid "Rename Images Done!" 379 | msgstr "¡Cambio de nombre terminado!" 380 | 381 | #: msgcatSTR_artscript2.tcl:89 382 | msgid "Rename finished." 383 | msgstr "Renombrado terminado." 384 | 385 | #: msgcatSTR_artscript2.tcl:90 386 | msgid "Renaming..." 387 | msgstr "Renombrando..." 388 | 389 | #: msgcatSTR_artscript2.tcl:91 390 | msgid "Rendering Gimps" 391 | msgstr "Renderizando Gimps" 392 | 393 | #: msgcatSTR_artscript2.tcl:92 394 | msgid "Rendering Ink Scapes" 395 | msgstr "Renderizando InkScapes" 396 | 397 | #: msgcatSTR_artscript2.tcl:93 398 | msgid "Rendering Kriters" 399 | msgstr "Renderizando Kriters" 400 | 401 | #: msgcatSTR_artscript2.tcl:94 402 | msgid "Resize" 403 | msgstr "Escalar" 404 | 405 | #: msgcatSTR_artscript2.tcl:95 406 | msgid "Right" 407 | msgstr "Derecha" 408 | 409 | #: msgcatSTR_artscript2.tcl:96 410 | msgid "Rotation" 411 | msgstr "Rotación" 412 | 413 | #: msgcatSTR_artscript2.tcl:97 414 | msgid "Rows:" 415 | msgstr "Filas:" 416 | 417 | #: msgcatSTR_artscript2.tcl:98 418 | msgid "Scale" 419 | msgstr "Escalar" 420 | 421 | #: msgcatSTR_artscript2.tcl:99 422 | msgid "Select" 423 | msgstr "Escoger" 424 | 425 | #: msgcatSTR_artscript2.tcl:100 426 | msgid "Select:" 427 | msgstr "Escoger:" 428 | 429 | #: msgcatSTR_artscript2.tcl:101 430 | msgid "Size" 431 | msgstr "Tamaño" 432 | 433 | #: msgcatSTR_artscript2.tcl:102 434 | msgid "Size out" 435 | msgstr "T. Salida" 436 | 437 | #: msgcatSTR_artscript2.tcl:103 438 | msgid "Something went wrong, tmp png wasn't created" 439 | msgstr "Algo salio mal, no se pudo crear el archivo temporal png" 440 | 441 | #: msgcatSTR_artscript2.tcl:104 442 | msgid "Square 3x3" 443 | msgstr "Cuadrado 3x3" 444 | 445 | #: msgcatSTR_artscript2.tcl:105 446 | msgid "Starting Convert..." 447 | msgstr "Comenzando conversión..." 448 | 449 | #: msgcatSTR_artscript2.tcl:106 450 | msgid "Starting File extractions..." 451 | msgstr "Comenzando extracción de archivos..." 452 | 453 | #: msgcatSTR_artscript2.tcl:107 454 | msgid "Storyboard" 455 | msgstr "" 456 | 457 | #: msgcatSTR_artscript2.tcl:108 458 | msgid "Stretch" 459 | msgstr "Estirar" 460 | 461 | #: msgcatSTR_artscript2.tcl:109 462 | msgid "Style:" 463 | msgstr "Estilo:" 464 | 465 | #: msgcatSTR_artscript2.tcl:110 466 | msgid "Suported Images" 467 | msgstr "Imágenes soportadas" 468 | 469 | #: msgcatSTR_artscript2.tcl:111 470 | msgid "Text Style" 471 | msgstr "Estilo del texto" 472 | 473 | #: msgcatSTR_artscript2.tcl:112 474 | msgid "Thumbnail" 475 | msgstr "Miniatura" 476 | 477 | #: msgcatSTR_artscript2.tcl:113 478 | msgid "Tile size. ratio : w x h" 479 | msgstr "Tamaño de tesela:" 480 | 481 | #: msgcatSTR_artscript2.tcl:114 482 | msgid "Tk drag and drop enabled" 483 | msgstr "Tk, arrastrar y soltar habilitado" 484 | 485 | #: msgcatSTR_artscript2.tcl:115 486 | msgid "Top" 487 | msgstr "Arriba" 488 | 489 | #: msgcatSTR_artscript2.tcl:116 490 | msgid "TopLeft" 491 | msgstr "Arriba Iz." 492 | 493 | #: msgcatSTR_artscript2.tcl:117 494 | msgid "TopRight" 495 | msgstr "Arriba Der." 496 | 497 | #: msgcatSTR_artscript2.tcl:118 498 | msgid "Watermark" 499 | msgstr "Marca de agua" 500 | 501 | #: msgcatSTR_artscript2.tcl:119 502 | msgid "Watermark Text Color" 503 | msgstr "Color de texto de marca de agua" 504 | 505 | #: msgcatSTR_artscript2.tcl:120 506 | msgid "Wrap" 507 | msgstr "Repetir" 508 | 509 | #: msgcatSTR_artscript2.tcl:121 510 | msgid "Zero geometry" 511 | msgstr "Geometría Cero" 512 | 513 | #: msgcatSTR_artscript2.tcl:122 514 | msgid "Zoom" 515 | msgstr "Acercamiento" 516 | 517 | #: msgcatSTR_artscript2.tcl:123 518 | msgid "all" 519 | msgstr "todo" 520 | 521 | #: msgcatSTR_artscript2.tcl:124 522 | msgid "bright" 523 | msgstr "brillante" 524 | 525 | #: msgcatSTR_artscript2.tcl:125 526 | msgid "clear" 527 | msgstr "limpiar" 528 | 529 | #: msgcatSTR_artscript2.tcl:126 530 | msgid "dark" 531 | msgstr "oscuro" 532 | 533 | #: msgcatSTR_artscript2.tcl:127 534 | msgid "darker" 535 | msgstr "negro" 536 | 537 | #: msgcatSTR_artscript2.tcl:128 538 | msgid "default" 539 | msgstr "por defecto" 540 | 541 | #: msgcatSTR_artscript2.tcl:129 542 | #, tcl-format 543 | msgid "error: %s" 544 | msgstr "" 545 | 546 | #: msgcatSTR_artscript2.tcl:130 547 | msgid "ext." 548 | msgstr "" 549 | 550 | #: msgcatSTR_artscript2.tcl:131 551 | #, tcl-format 552 | msgid "file %s found!" 553 | msgstr "archivo %s encontrado!" 554 | 555 | #: msgcatSTR_artscript2.tcl:132 556 | msgid "icon" 557 | msgstr "ícono" 558 | 559 | #: msgcatSTR_artscript2.tcl:133 560 | msgid "image" 561 | msgstr "imagen" 562 | 563 | #: msgcatSTR_artscript2.tcl:134 564 | msgid "inv." 565 | msgstr "" 566 | 567 | #: msgcatSTR_artscript2.tcl:135 568 | msgid "label" 569 | msgstr "etiqueta" 570 | 571 | #: msgcatSTR_artscript2.tcl:136 572 | msgid "neutral" 573 | msgstr "" 574 | 575 | #: msgcatSTR_artscript2.tcl:137 576 | msgid "percentage" 577 | msgstr "porcentajes" 578 | 579 | #: msgcatSTR_artscript2.tcl:138 580 | #, tcl-format 581 | msgid "renaming... %s" 582 | msgstr "rebautizando... %s" 583 | 584 | #: msgcatSTR_artscript2.tcl:139 585 | msgid "sels" 586 | msgstr "" 587 | 588 | #: msgcatSTR_artscript2.tcl:140 589 | msgid "text" 590 | msgstr "texto" 591 | 592 | #: msgcatSTR_artscript2.tcl:141 593 | msgid "texture" 594 | msgstr "textura" 595 | 596 | #: msgcatSTR_artscript2.tcl:142 597 | msgid "wallpaper" 598 | msgstr "fondo de escritorio" 599 | 600 | #: msgcatSTR_artscript2.tcl:143 601 | msgid "webp lossy" 602 | msgstr "webp con pérdida" 603 | 604 | -------------------------------------------------------------------------------- /translate/fr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: Artscript v2.2\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2014-01-23 19:40-0600\n" 6 | "PO-Revision-Date: 2014-01-23 19:45-0600\n" 7 | "Last-Translator: Deevad \n" 8 | "Language-Team: \n" 9 | "Language: \n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "X-Poedit-KeywordsList: _;gettext;gettext_noop\n" 14 | "X-Poedit-Basepath: .\n" 15 | "X-Poedit-SourceCharset: utf-8\n" 16 | "X-Poedit-SearchPath-0: .\n" 17 | 18 | #: msgcatSTR_artscript2.tcl:2 19 | #, tcl-format 20 | msgid "%f => file.ext, %e => ext, %G => WxH" 21 | msgstr "%f => fichier.ext, %e => ext, %G => WxH" 22 | 23 | #: msgcatSTR_artscript2.tcl:3 24 | #, tcl-format 25 | msgid "%s file format not supported" 26 | msgstr "Format de fichier %s non pris en charge" 27 | 28 | #: msgcatSTR_artscript2.tcl:4 29 | #, tcl-format 30 | msgid "%s has no thumb" 31 | msgstr "%s n'a pas de vignette" 32 | 33 | #: msgcatSTR_artscript2.tcl:5 34 | #, tcl-format 35 | msgid "%s has normal thumb" 36 | msgstr "%s a une vignette normale" 37 | 38 | #: msgcatSTR_artscript2.tcl:6 39 | #, tcl-format 40 | msgid "%s is not a valid ORA/KRA" 41 | msgstr "%s n'est pas un fichier ORA/KRA valide" 42 | 43 | #: msgcatSTR_artscript2.tcl:7 44 | #, tcl-format 45 | msgid "%s not a valid PSD file" 46 | msgstr "%s n'est pas un fichier PSD valide" 47 | 48 | #: msgcatSTR_artscript2.tcl:8 49 | msgid "Add custom size. ratio : wxh" 50 | msgstr "Personnaliser la taille, le ratio: wxh" 51 | 52 | #: msgcatSTR_artscript2.tcl:9 53 | msgid "Add files" 54 | msgstr "Ajouter" 55 | 56 | #: msgcatSTR_artscript2.tcl:10 57 | msgid "Add folder" 58 | msgstr "+Dossier" 59 | 60 | #: msgcatSTR_artscript2.tcl:11 61 | msgid "All" 62 | msgstr "Tout" 63 | 64 | #: msgcatSTR_artscript2.tcl:12 65 | msgid "All collages assembled" 66 | msgstr "Tous les collages assemblé" 67 | 68 | #: msgcatSTR_artscript2.tcl:13 69 | msgid "Allow Overwrite" 70 | msgstr "Permettre l'écrasement" 71 | 72 | #: msgcatSTR_artscript2.tcl:14 73 | #, tcl-format 74 | msgid "Artscript %1$s -- %2$s Files selected" 75 | msgstr "Artscript %1$s -- %2$s fichiers selectionnés" 76 | 77 | #: msgcatSTR_artscript2.tcl:15 78 | #, tcl-format 79 | msgid "Artscript %s" 80 | msgstr "Artscript %s" 81 | 82 | #: msgcatSTR_artscript2.tcl:16 83 | msgid "Border" 84 | msgstr "Bordure" 85 | 86 | #: msgcatSTR_artscript2.tcl:17 87 | msgid "Bottom" 88 | msgstr "Bas" 89 | 90 | #: msgcatSTR_artscript2.tcl:18 91 | msgid "BottomLeft" 92 | msgstr "Bas-Gauche." 93 | 94 | #: msgcatSTR_artscript2.tcl:19 95 | msgid "BottomRight" 96 | msgstr "Bas-Droit" 97 | 98 | #: msgcatSTR_artscript2.tcl:20 99 | msgid "Center" 100 | msgstr "Centre" 101 | 102 | #: msgcatSTR_artscript2.tcl:21 103 | msgid "Choose color" 104 | msgstr "Choisir une couleur" 105 | 106 | #: msgcatSTR_artscript2.tcl:22 107 | msgid "Collage" 108 | msgstr "Collage" 109 | 110 | #: msgcatSTR_artscript2.tcl:23 111 | msgid "Collage Background Color" 112 | msgstr "Couleur du fond" 113 | 114 | #: msgcatSTR_artscript2.tcl:24 115 | msgid "Collage Border Color" 116 | msgstr "Couleur de la bordure" 117 | 118 | #: msgcatSTR_artscript2.tcl:25 119 | msgid "Collage Label Color" 120 | msgstr "Couleur de l'étiquette" 121 | 122 | #: msgcatSTR_artscript2.tcl:26 123 | msgid "Collage file name:" 124 | msgstr "Nom du Collage:" 125 | 126 | #: msgcatSTR_artscript2.tcl:27 127 | msgid "Collections" 128 | msgstr "Collections" 129 | 130 | #: msgcatSTR_artscript2.tcl:28 131 | msgid "Color" 132 | msgstr "Couleur" 133 | 134 | #: msgcatSTR_artscript2.tcl:29 135 | msgid "Colors:" 136 | msgstr "Couleurs:" 137 | 138 | #: msgcatSTR_artscript2.tcl:30 139 | msgid "Columns:" 140 | msgstr "Colonnes:" 141 | 142 | #: msgcatSTR_artscript2.tcl:31 143 | msgid "Compress:" 144 | msgstr "Compresser:" 145 | 146 | #: msgcatSTR_artscript2.tcl:32 147 | msgid "Concatenation" 148 | msgstr "Concatener" 149 | 150 | #: msgcatSTR_artscript2.tcl:33 151 | #, tcl-format 152 | msgid "Configuration file found in %s" 153 | msgstr "Fichier de configuration trouvé dans %s" 154 | 155 | #: msgcatSTR_artscript2.tcl:34 156 | msgid "Convert" 157 | msgstr "Convertir" 158 | 159 | #: msgcatSTR_artscript2.tcl:35 160 | msgid "Convert done." 161 | msgstr "Convertion terminé" 162 | 163 | #: msgcatSTR_artscript2.tcl:36 164 | #, tcl-format 165 | msgid "Converting... %1$s to %2$s" 166 | msgstr "Convertion... %1$s a %2$s" 167 | 168 | #: msgcatSTR_artscript2.tcl:37 169 | msgid "Crop" 170 | msgstr "Recadrer" 171 | 172 | #: msgcatSTR_artscript2.tcl:38 173 | #, tcl-format 174 | msgid "Error! %s" 175 | msgstr "Erreur! %s" 176 | 177 | #: msgcatSTR_artscript2.tcl:39 178 | msgid "Estimate size" 179 | msgstr "Taille estimée" 180 | 181 | #: msgcatSTR_artscript2.tcl:40 182 | #, tcl-format 183 | msgid "Extracting file %s" 184 | msgstr "Extraction du fichier %s" 185 | 186 | #: msgcatSTR_artscript2.tcl:41 187 | msgid "File Conversions Done!" 188 | msgstr "Convertion de fichier terminé!" 189 | 190 | #: msgcatSTR_artscript2.tcl:42 191 | msgid "File extractions finished" 192 | msgstr "Convertions de fichiers terminés!" 193 | 194 | #: msgcatSTR_artscript2.tcl:43 195 | msgid "Format:" 196 | msgstr "Format:" 197 | 198 | #: msgcatSTR_artscript2.tcl:44 199 | msgid "Generating preview" 200 | msgstr "Generation d'une prévisualisation" 201 | 202 | #: msgcatSTR_artscript2.tcl:45 203 | msgid "ID" 204 | msgstr "ID" 205 | 206 | #: msgcatSTR_artscript2.tcl:46 207 | msgid "Image Strip h" 208 | msgstr "Suite d'image h" 209 | 210 | #: msgcatSTR_artscript2.tcl:47 211 | msgid "Image Strip v" 212 | msgstr "Suite d'image v" 213 | 214 | #: msgcatSTR_artscript2.tcl:48 215 | msgid "Image Style" 216 | msgstr "style d'image" 217 | 218 | #: msgcatSTR_artscript2.tcl:49 219 | msgid "Image area is bigger" 220 | msgstr "Zone de l'image est plus grande:" 221 | 222 | #: msgcatSTR_artscript2.tcl:50 223 | msgid "Input" 224 | msgstr "Ajout" 225 | 226 | #: msgcatSTR_artscript2.tcl:51 227 | msgid "Inverse" 228 | msgstr "Inverser" 229 | 230 | #: msgcatSTR_artscript2.tcl:52 231 | msgid "Keep format" 232 | msgstr "Garder le format" 233 | 234 | #: msgcatSTR_artscript2.tcl:53 235 | msgid "Label:" 236 | msgstr "Etiquette:" 237 | 238 | #: msgcatSTR_artscript2.tcl:54 239 | msgid "Layouts:" 240 | msgstr "Disposition:" 241 | 242 | #: msgcatSTR_artscript2.tcl:55 243 | msgid "Left" 244 | msgstr "Gauche" 245 | 246 | #: msgcatSTR_artscript2.tcl:56 247 | msgid "Load preset:" 248 | msgstr "Charger la preconfiguration:" 249 | 250 | #: msgcatSTR_artscript2.tcl:57 251 | msgid "Make Collage" 252 | msgstr "Faire le Collage" 253 | 254 | #: msgcatSTR_artscript2.tcl:58 255 | #, tcl-format 256 | msgid "Make Collage%s" 257 | msgstr "Créer le Collage!" 258 | 259 | #: msgcatSTR_artscript2.tcl:59 260 | msgid "Make Collage?" 261 | msgstr "Créer le Collage?" 262 | 263 | #: msgcatSTR_artscript2.tcl:60 264 | msgid "Make ORA" 265 | msgstr "Faire un ORA:" 266 | 267 | #: msgcatSTR_artscript2.tcl:61 268 | msgid "Mode" 269 | msgstr "Mode" 270 | 271 | #: msgcatSTR_artscript2.tcl:62 272 | msgid "Mode:" 273 | msgstr "Mode:" 274 | 275 | #: msgcatSTR_artscript2.tcl:63 276 | msgid "Need more data" 277 | msgstr "Necessite plus de données" 278 | 279 | #: msgcatSTR_artscript2.tcl:64 280 | msgid "New" 281 | msgstr "Nouveau" 282 | 283 | #: msgcatSTR_artscript2.tcl:65 284 | msgid "No Thumbnail" 285 | msgstr "Sans vignettes" 286 | 287 | #: msgcatSTR_artscript2.tcl:66 288 | msgid "No images loaded!" 289 | msgstr "Pas d'images listées!" 290 | 291 | #: msgcatSTR_artscript2.tcl:67 292 | msgid "None" 293 | msgstr "Rien" 294 | 295 | #: msgcatSTR_artscript2.tcl:68 296 | msgid "ORA Image Files Ready!" 297 | msgstr "Fichier ORA prêt!" 298 | 299 | #: msgcatSTR_artscript2.tcl:69 300 | msgid "OnlyGrow" 301 | msgstr "Seulement Agrandir" 302 | 303 | #: msgcatSTR_artscript2.tcl:70 304 | msgid "OnlyShrink" 305 | msgstr "Seulement rétrecir" 306 | 307 | #: msgcatSTR_artscript2.tcl:71 308 | msgid "Opacity" 309 | msgstr "Opacité" 310 | 311 | #: msgcatSTR_artscript2.tcl:72 312 | #, tcl-format 313 | msgid "Oraizing... %s" 314 | msgstr "Cretion d'image Ora... %s" 315 | 316 | #: msgcatSTR_artscript2.tcl:73 317 | msgid "Output" 318 | msgstr "Sortie" 319 | 320 | #: msgcatSTR_artscript2.tcl:74 321 | msgid "Output & Quality" 322 | msgstr "Sortie et qualité" 323 | 324 | #: msgcatSTR_artscript2.tcl:75 325 | msgid "Padding" 326 | msgstr "Marge" 327 | 328 | #: msgcatSTR_artscript2.tcl:76 329 | msgid "Photo sheet" 330 | msgstr "Planche de contact" 331 | 332 | #: msgcatSTR_artscript2.tcl:77 333 | msgid "Position" 334 | msgstr "Position" 335 | 336 | #: msgcatSTR_artscript2.tcl:78 337 | msgid "Powering up Collage Assembly line" 338 | msgstr "Motorisation d'un assemblage de collage" 339 | 340 | #: msgcatSTR_artscript2.tcl:79 341 | msgid "Prefix and Suffix" 342 | msgstr "Prefix et Suffix" 343 | 344 | #: msgcatSTR_artscript2.tcl:80 345 | msgid "Presets config name keys changed drastically from v2.0 to 2.1 If your presets does not load please review presets.config.example file to check the new names." 346 | msgstr "Les fichiers de configurations ont changés depuis v2.0 a 2.1. Si vos presets ne charge pas , merci de reconfigurer presets.config.example et verifier les nouveaux noms." 347 | 348 | #: msgcatSTR_artscript2.tcl:81 349 | msgid "Preview" 350 | msgstr "Prévisualisation" 351 | 352 | #: msgcatSTR_artscript2.tcl:82 353 | #, tcl-format 354 | msgid "Program %s not found" 355 | msgstr "Logiciel %s introuvable" 356 | 357 | #: msgcatSTR_artscript2.tcl:83 358 | msgid "Quality:" 359 | msgstr "Qualité:" 360 | 361 | #: msgcatSTR_artscript2.tcl:84 362 | msgid "Range:" 363 | msgstr "Etendu:" 364 | 365 | #: msgcatSTR_artscript2.tcl:85 366 | msgid "Remove Alfa" 367 | msgstr "Supprimer la transparence" 368 | 369 | #: msgcatSTR_artscript2.tcl:86 370 | msgid "Remove Selected" 371 | msgstr "Supprimer les selectionnés" 372 | 373 | #: msgcatSTR_artscript2.tcl:87 374 | msgid "Rename" 375 | msgstr "Renommer" 376 | 377 | #: msgcatSTR_artscript2.tcl:88 378 | msgid "Rename Images Done!" 379 | msgstr "Renommage d'image terminé!" 380 | 381 | #: msgcatSTR_artscript2.tcl:89 382 | msgid "Rename finished." 383 | msgstr "Renommage terminé." 384 | 385 | #: msgcatSTR_artscript2.tcl:90 386 | msgid "Renaming..." 387 | msgstr "Renommage..." 388 | 389 | #: msgcatSTR_artscript2.tcl:91 390 | msgid "Rendering Gimps" 391 | msgstr "Rendu de Gimps" 392 | 393 | #: msgcatSTR_artscript2.tcl:92 394 | msgid "Rendering Ink Scapes" 395 | msgstr "Rendu d'InkScapes" 396 | 397 | #: msgcatSTR_artscript2.tcl:93 398 | msgid "Rendering Kriters" 399 | msgstr "Rendu de Krita" 400 | 401 | #: msgcatSTR_artscript2.tcl:94 402 | msgid "Resize" 403 | msgstr "Redimensionner" 404 | 405 | #: msgcatSTR_artscript2.tcl:95 406 | msgid "Right" 407 | msgstr "Droite" 408 | 409 | #: msgcatSTR_artscript2.tcl:96 410 | msgid "Rotation" 411 | msgstr "Rotation" 412 | 413 | #: msgcatSTR_artscript2.tcl:97 414 | msgid "Rows:" 415 | msgstr "Lignes:" 416 | 417 | #: msgcatSTR_artscript2.tcl:98 418 | msgid "Scale" 419 | msgstr "Redimensionné" 420 | 421 | #: msgcatSTR_artscript2.tcl:99 422 | msgid "Select" 423 | msgstr "Selectionné" 424 | 425 | #: msgcatSTR_artscript2.tcl:100 426 | msgid "Select:" 427 | msgstr "Selection:" 428 | 429 | #: msgcatSTR_artscript2.tcl:101 430 | msgid "Size" 431 | msgstr "Taille" 432 | 433 | #: msgcatSTR_artscript2.tcl:102 434 | msgid "Size out" 435 | msgstr "Taille extérieur" 436 | 437 | #: msgcatSTR_artscript2.tcl:103 438 | msgid "Something went wrong, tmp png wasn't created" 439 | msgstr "Quelquechose d'imprevu c'est passé ; et le png temporaire n'a pas pu être crée" 440 | 441 | #: msgcatSTR_artscript2.tcl:104 442 | msgid "Square 3x3" 443 | msgstr "Carré 3x3" 444 | 445 | #: msgcatSTR_artscript2.tcl:105 446 | msgid "Starting Convert..." 447 | msgstr "Début de la convertion..." 448 | 449 | #: msgcatSTR_artscript2.tcl:106 450 | msgid "Starting File extractions..." 451 | msgstr "Début de l'extraction de fichier..." 452 | 453 | #: msgcatSTR_artscript2.tcl:107 454 | msgid "Storyboard" 455 | msgstr "Storyboard" 456 | 457 | #: msgcatSTR_artscript2.tcl:108 458 | msgid "Stretch" 459 | msgstr "Etirer" 460 | 461 | #: msgcatSTR_artscript2.tcl:109 462 | msgid "Style:" 463 | msgstr "Style:" 464 | 465 | #: msgcatSTR_artscript2.tcl:110 466 | msgid "Suported Images" 467 | msgstr "Images supportées" 468 | 469 | #: msgcatSTR_artscript2.tcl:111 470 | msgid "Text Style" 471 | msgstr "Style de texte" 472 | 473 | #: msgcatSTR_artscript2.tcl:112 474 | msgid "Thumbnail" 475 | msgstr "Vignette" 476 | 477 | #: msgcatSTR_artscript2.tcl:113 478 | msgid "Tile size. ratio : w x h" 479 | msgstr "Tamaño de tesela:" 480 | 481 | #: msgcatSTR_artscript2.tcl:114 482 | msgid "Tk drag and drop enabled" 483 | msgstr "Tk, glisser/déposer actif" 484 | 485 | #: msgcatSTR_artscript2.tcl:115 486 | msgid "Top" 487 | msgstr "Haut" 488 | 489 | #: msgcatSTR_artscript2.tcl:116 490 | msgid "TopLeft" 491 | msgstr "Haut-Gauche." 492 | 493 | #: msgcatSTR_artscript2.tcl:117 494 | msgid "TopRight" 495 | msgstr "Haut-Droit." 496 | 497 | #: msgcatSTR_artscript2.tcl:118 498 | msgid "Watermark" 499 | msgstr "Filigrane" 500 | 501 | #: msgcatSTR_artscript2.tcl:119 502 | msgid "Watermark Text Color" 503 | msgstr "Couleur du text filigrané" 504 | 505 | #: msgcatSTR_artscript2.tcl:120 506 | msgid "Wrap" 507 | msgstr "Enveloppé" 508 | 509 | #: msgcatSTR_artscript2.tcl:121 510 | msgid "Zero geometry" 511 | msgstr "Dimmension zéro" 512 | 513 | #: msgcatSTR_artscript2.tcl:122 514 | msgid "Zoom" 515 | msgstr "Zoom" 516 | 517 | #: msgcatSTR_artscript2.tcl:123 518 | msgid "all" 519 | msgstr "tous" 520 | 521 | #: msgcatSTR_artscript2.tcl:124 522 | msgid "bright" 523 | msgstr "brillance" 524 | 525 | #: msgcatSTR_artscript2.tcl:125 526 | msgid "clear" 527 | msgstr "effacer" 528 | 529 | #: msgcatSTR_artscript2.tcl:126 530 | msgid "dark" 531 | msgstr "obscurité" 532 | 533 | #: msgcatSTR_artscript2.tcl:127 534 | msgid "darker" 535 | msgstr "plus sombre" 536 | 537 | #: msgcatSTR_artscript2.tcl:128 538 | msgid "default" 539 | msgstr "par défaut" 540 | 541 | #: msgcatSTR_artscript2.tcl:129 542 | #, tcl-format 543 | msgid "error: %s" 544 | msgstr "erreur: %s" 545 | 546 | #: msgcatSTR_artscript2.tcl:130 547 | msgid "ext." 548 | msgstr "" 549 | 550 | #: msgcatSTR_artscript2.tcl:131 551 | #, tcl-format 552 | msgid "file %s found!" 553 | msgstr "fichier %s trouvé!" 554 | 555 | #: msgcatSTR_artscript2.tcl:132 556 | msgid "icon" 557 | msgstr "icone" 558 | 559 | #: msgcatSTR_artscript2.tcl:133 560 | msgid "image" 561 | msgstr "image" 562 | 563 | #: msgcatSTR_artscript2.tcl:134 564 | msgid "inv." 565 | msgstr "" 566 | 567 | #: msgcatSTR_artscript2.tcl:135 568 | msgid "label" 569 | msgstr "étiquette" 570 | 571 | #: msgcatSTR_artscript2.tcl:136 572 | msgid "neutral" 573 | msgstr "neutre" 574 | 575 | #: msgcatSTR_artscript2.tcl:137 576 | msgid "percentage" 577 | msgstr "pourcentage" 578 | 579 | #: msgcatSTR_artscript2.tcl:138 580 | #, tcl-format 581 | msgid "renaming... %s" 582 | msgstr "renommage... %s" 583 | 584 | #: msgcatSTR_artscript2.tcl:139 585 | msgid "sels" 586 | msgstr "" 587 | 588 | #: msgcatSTR_artscript2.tcl:140 589 | msgid "text" 590 | msgstr "texte" 591 | 592 | #: msgcatSTR_artscript2.tcl:141 593 | msgid "texture" 594 | msgstr "texture" 595 | 596 | #: msgcatSTR_artscript2.tcl:142 597 | msgid "wallpaper" 598 | msgstr "fond d'écran" 599 | 600 | #: msgcatSTR_artscript2.tcl:143 601 | msgid "webp lossy" 602 | msgstr "webp avec perte" 603 | -------------------------------------------------------------------------------- /lib/tkdnd/tkdnd.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | package require Tk 40 | 41 | namespace eval tkdnd { 42 | variable _topw ".drag" 43 | variable _tabops 44 | variable _state 45 | variable _x0 46 | variable _y0 47 | variable _platform_namespace 48 | variable _drop_file_temp_dir 49 | variable _auto_update 1 50 | 51 | variable _windowingsystem 52 | 53 | bind TkDND_Drag1 {tkdnd::_begin_drag press 1 %W %s %X %Y} 54 | bind TkDND_Drag1 {tkdnd::_begin_drag motion 1 %W %s %X %Y} 55 | bind TkDND_Drag2 {tkdnd::_begin_drag press 2 %W %s %X %Y} 56 | bind TkDND_Drag2 {tkdnd::_begin_drag motion 2 %W %s %X %Y} 57 | bind TkDND_Drag3 {tkdnd::_begin_drag press 3 %W %s %X %Y} 58 | bind TkDND_Drag3 {tkdnd::_begin_drag motion 3 %W %s %X %Y} 59 | 60 | # ---------------------------------------------------------------------------- 61 | # Command tkdnd::initialise: Initialise the TkDND package. 62 | # ---------------------------------------------------------------------------- 63 | proc initialise { dir PKG_LIB_FILE PACKAGE_NAME} { 64 | variable _platform_namespace 65 | variable _drop_file_temp_dir 66 | variable _windowingsystem 67 | global env 68 | 69 | switch [tk windowingsystem] { 70 | x11 { 71 | set _windowingsystem x11 72 | } 73 | win32 - 74 | windows { 75 | set _windowingsystem windows 76 | } 77 | aqua { 78 | set _windowingsystem aqua 79 | } 80 | default { 81 | error "unknown Tk windowing system" 82 | } 83 | } 84 | 85 | ## Get User's home directory: We try to locate the proper path from a set of 86 | ## environmental variables... 87 | foreach var {HOME HOMEPATH USERPROFILE ALLUSERSPROFILE APPDATA} { 88 | if {[info exists env($var)]} { 89 | if {[file isdirectory $env($var)]} { 90 | set UserHomeDir $env($var) 91 | break 92 | } 93 | } 94 | } 95 | 96 | ## Should use [tk windowingsystem] instead of tcl platform array: 97 | ## OS X returns "unix," but that's not useful because it has its own 98 | ## windowing system, aqua 99 | ## Under windows we have to also combine HOMEDRIVE & HOMEPATH... 100 | if {![info exists UserHomeDir] && 101 | [string equal $_windowingsystem windows] && 102 | [info exists env(HOMEDRIVE)] && [info exists env(HOMEPATH)]} { 103 | if {[file isdirectory $env(HOMEDRIVE)$env(HOMEPATH)]} { 104 | set UserHomeDir $env(HOMEDRIVE)$env(HOMEPATH) 105 | } 106 | } 107 | ## Have we located the needed path? 108 | if {![info exists UserHomeDir]} { 109 | set UserHomeDir [pwd] 110 | } 111 | set UserHomeDir [file normalize $UserHomeDir] 112 | 113 | ## Try to locate a temporary directory... 114 | foreach var {TKDND_TEMP_DIR TEMP TMP} { 115 | if {[info exists env($var)]} { 116 | if {[file isdirectory $env($var)] && [file writable $env($var)]} { 117 | set _drop_file_temp_dir $env($var) 118 | break 119 | } 120 | } 121 | } 122 | if {![info exists _drop_file_temp_dir]} { 123 | foreach _dir [list "$UserHomeDir/Local Settings/Temp" \ 124 | "$UserHomeDir/AppData/Local/Temp" \ 125 | /tmp \ 126 | C:/WINDOWS/Temp C:/Temp C:/tmp \ 127 | D:/WINDOWS/Temp D:/Temp D:/tmp] { 128 | if {[file isdirectory $_dir] && [file writable $_dir]} { 129 | set _drop_file_temp_dir $_dir 130 | break 131 | } 132 | } 133 | } 134 | if {![info exists _drop_file_temp_dir]} { 135 | set _drop_file_temp_dir $UserHomeDir 136 | } 137 | set _drop_file_temp_dir [file native $_drop_file_temp_dir] 138 | 139 | switch $_windowingsystem { 140 | x11 { 141 | source $dir/tkdnd_unix.tcl 142 | set _platform_namespace xdnd 143 | } 144 | win32 - 145 | windows { 146 | source $dir/tkdnd_windows.tcl 147 | set _platform_namespace olednd 148 | } 149 | aqua { 150 | source $dir/tkdnd_unix.tcl 151 | source $dir/tkdnd_macosx.tcl 152 | set _platform_namespace macdnd 153 | } 154 | default { 155 | error "unknown Tk windowing system" 156 | } 157 | } 158 | load $dir/$PKG_LIB_FILE $PACKAGE_NAME 159 | source $dir/tkdnd_compat.tcl 160 | };# initialise 161 | 162 | proc GetDropFileTempDirectory { } { 163 | variable _drop_file_temp_dir 164 | return $_drop_file_temp_dir 165 | } 166 | proc SetDropFileTempDirectory { dir } { 167 | variable _drop_file_temp_dir 168 | set _drop_file_temp_dir $dir 169 | } 170 | 171 | };# namespace tkdnd 172 | 173 | # ---------------------------------------------------------------------------- 174 | # Command tkdnd::drag_source 175 | # ---------------------------------------------------------------------------- 176 | proc tkdnd::drag_source { mode path { types {} } { event 1 } } { 177 | set tags [bindtags $path] 178 | set idx [lsearch $tags "TkDND_Drag*"] 179 | switch -- $mode { 180 | register { 181 | if { $idx != -1 } { 182 | bindtags $path [lreplace $tags $idx $idx TkDND_Drag$event] 183 | } else { 184 | bindtags $path [concat $tags TkDND_Drag$event] 185 | } 186 | set types [platform_specific_types $types] 187 | set old_types [bind $path <>] 188 | foreach type $types { 189 | if {[lsearch $old_types $type] < 0} {lappend old_types $type} 190 | } 191 | bind $path <> $old_types 192 | } 193 | unregister { 194 | if { $idx != -1 } { 195 | bindtags $path [lreplace $tags $idx $idx] 196 | } 197 | } 198 | } 199 | };# tkdnd::drag_source 200 | 201 | # ---------------------------------------------------------------------------- 202 | # Command tkdnd::drop_target 203 | # ---------------------------------------------------------------------------- 204 | proc tkdnd::drop_target { mode path { types {} } } { 205 | variable _windowingsystem 206 | set types [platform_specific_types $types] 207 | switch -- $mode { 208 | register { 209 | switch $_windowingsystem { 210 | x11 { 211 | _register_types $path [winfo toplevel $path] $types 212 | } 213 | win32 - 214 | windows { 215 | _RegisterDragDrop $path 216 | bind $path {+ tkdnd::_RevokeDragDrop %W} 217 | } 218 | aqua { 219 | macdnd::registerdragwidget [winfo toplevel $path] $types 220 | } 221 | default { 222 | error "unknown Tk windowing system" 223 | } 224 | } 225 | set old_types [bind $path <>] 226 | set new_types {} 227 | foreach type $types { 228 | if {[lsearch -exact $old_types $type] < 0} {lappend new_types $type} 229 | } 230 | if {[llength $new_types]} { 231 | bind $path <> [concat $old_types $new_types] 232 | } 233 | } 234 | unregister { 235 | switch $_windowingsystem { 236 | x11 { 237 | } 238 | win32 - 239 | windows { 240 | _RevokeDragDrop $path 241 | } 242 | aqua { 243 | error todo 244 | } 245 | default { 246 | error "unknown Tk windowing system" 247 | } 248 | } 249 | bind $path <> {} 250 | } 251 | } 252 | };# tkdnd::drop_target 253 | 254 | # ---------------------------------------------------------------------------- 255 | # Command tkdnd::_begin_drag 256 | # ---------------------------------------------------------------------------- 257 | proc tkdnd::_begin_drag { event button source state X Y } { 258 | variable _x0 259 | variable _y0 260 | variable _state 261 | 262 | switch -- $event { 263 | press { 264 | set _x0 $X 265 | set _y0 $Y 266 | set _state "press" 267 | } 268 | motion { 269 | if { ![info exists _state] } { 270 | # This is just extra protection. There seem to be 271 | # rare cases where the motion comes before the press. 272 | return 273 | } 274 | if { [string equal $_state "press"] } { 275 | if { abs($_x0-$X) > 3 || abs($_y0-$Y) > 3 } { 276 | set _state "done" 277 | _init_drag $button $source $state $X $Y 278 | } 279 | } 280 | } 281 | } 282 | };# tkdnd::_begin_drag 283 | 284 | # ---------------------------------------------------------------------------- 285 | # Command tkdnd::_init_drag 286 | # ---------------------------------------------------------------------------- 287 | proc tkdnd::_init_drag { button source state rootX rootY } { 288 | # Call the <> binding. 289 | set cmd [bind $source <>] 290 | if {[string length $cmd]} { 291 | set cmd [string map [list %W $source %X $rootX %Y $rootY \ 292 | %S $state %e <> %A \{\} \ 293 | %t [bind $source <>]] $cmd] 294 | set info [uplevel \#0 $cmd] 295 | if { $info != "" } { 296 | variable _windowingsystem 297 | foreach { actions types data } $info { break } 298 | set types [platform_specific_types $types] 299 | set action refuse_drop 300 | switch $_windowingsystem { 301 | x11 { 302 | set action [xdnd::_dodragdrop $source $actions $types $data $button] 303 | } 304 | win32 - 305 | windows { 306 | set action [_DoDragDrop $source $actions $types $data $button] 307 | } 308 | aqua { 309 | set action [macdnd::dodragdrop $source $actions $types $data] 310 | } 311 | default { 312 | error "unknown Tk windowing system" 313 | } 314 | } 315 | ## Call _end_drag to notify the widget of the result of the drag 316 | ## operation... 317 | _end_drag $button $source {} $action {} $data {} $state $rootX $rootY 318 | } 319 | } 320 | };# tkdnd::_init_drag 321 | 322 | # ---------------------------------------------------------------------------- 323 | # Command tkdnd::_end_drag 324 | # ---------------------------------------------------------------------------- 325 | proc tkdnd::_end_drag { button source target action type data result 326 | state rootX rootY } { 327 | set rootX 0 328 | set rootY 0 329 | # Call the <> binding. 330 | set cmd [bind $source <>] 331 | if {[string length $cmd]} { 332 | set cmd [string map [list %W $source %X $rootX %Y $rootY \ 333 | %S $state %e <> %A \{$action\}] $cmd] 334 | set info [uplevel \#0 $cmd] 335 | if { $info != "" } { 336 | variable _windowingsystem 337 | foreach { actions types data } $info { break } 338 | set types [platform_specific_types $types] 339 | switch $_windowingsystem { 340 | x11 { 341 | error "dragging from Tk widgets not yet supported" 342 | } 343 | win32 - 344 | windows { 345 | set action [_DoDragDrop $source $actions $types $data $button] 346 | } 347 | aqua { 348 | macdnd::dodragdrop $source $actions $types $data 349 | } 350 | default { 351 | error "unknown Tk windowing system" 352 | } 353 | } 354 | ## Call _end_drag to notify the widget of the result of the drag 355 | ## operation... 356 | _end_drag $button $source {} $action {} $data {} $state $rootX $rootY 357 | } 358 | } 359 | };# tkdnd::_end_drag 360 | 361 | # ---------------------------------------------------------------------------- 362 | # Command tkdnd::platform_specific_types 363 | # ---------------------------------------------------------------------------- 364 | proc tkdnd::platform_specific_types { types } { 365 | variable _platform_namespace 366 | return [${_platform_namespace}::_platform_specific_types $types] 367 | }; # tkdnd::platform_specific_types 368 | 369 | # ---------------------------------------------------------------------------- 370 | # Command tkdnd::platform_independent_types 371 | # ---------------------------------------------------------------------------- 372 | proc tkdnd::platform_independent_types { types } { 373 | variable _platform_namespace 374 | return [${_platform_namespace}::_platform_independent_types $types] 375 | }; # tkdnd::platform_independent_types 376 | 377 | # ---------------------------------------------------------------------------- 378 | # Command tkdnd::platform_specific_type 379 | # ---------------------------------------------------------------------------- 380 | proc tkdnd::platform_specific_type { type } { 381 | variable _platform_namespace 382 | return [${_platform_namespace}::_platform_specific_type $type] 383 | }; # tkdnd::platform_specific_type 384 | 385 | # ---------------------------------------------------------------------------- 386 | # Command tkdnd::platform_independent_type 387 | # ---------------------------------------------------------------------------- 388 | proc tkdnd::platform_independent_type { type } { 389 | variable _platform_namespace 390 | return [${_platform_namespace}::_platform_independent_type $type] 391 | }; # tkdnd::platform_independent_type 392 | 393 | # ---------------------------------------------------------------------------- 394 | # Command tkdnd::bytes_to_string 395 | # ---------------------------------------------------------------------------- 396 | proc tkdnd::bytes_to_string { bytes } { 397 | set string {} 398 | foreach byte $bytes { 399 | append string [binary format c $byte] 400 | } 401 | return $string 402 | };# tkdnd::bytes_to_string 403 | 404 | # ---------------------------------------------------------------------------- 405 | # Command tkdnd::urn_unquote 406 | # ---------------------------------------------------------------------------- 407 | proc tkdnd::urn_unquote {url} { 408 | set result "" 409 | set start 0 410 | while {[regexp -start $start -indices {%[0-9a-fA-F]{2}} $url match]} { 411 | foreach {first last} $match break 412 | append result [string range $url $start [expr {$first - 1}]] 413 | append result [format %c 0x[string range $url [incr first] $last]] 414 | set start [incr last] 415 | } 416 | append result [string range $url $start end] 417 | return $result 418 | };# tkdnd::urn_unquote 419 | -------------------------------------------------------------------------------- /lib/tkdnd/tkdnd_windows.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_windows.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval olednd { 40 | variable _types {} 41 | variable _typelist {} 42 | variable _codelist {} 43 | variable _actionlist {} 44 | variable _pressedkeys {} 45 | variable _action {} 46 | variable _common_drag_source_types {} 47 | variable _common_drop_target_types {} 48 | variable _unhandled_types {} 49 | };# namespace olednd 50 | 51 | # ---------------------------------------------------------------------------- 52 | # Command olednd::_HandleDragEnter 53 | # ---------------------------------------------------------------------------- 54 | proc olednd::_HandleDragEnter { drop_target typelist actionlist pressedkeys 55 | rootX rootY codelist } { 56 | variable _typelist; set _typelist $typelist 57 | variable _codelist; set _codelist $codelist 58 | variable _actionlist; set _actionlist $actionlist 59 | variable _pressedkeys; set _pressedkeys $pressedkeys 60 | variable _action; set _action {} 61 | variable _common_drag_source_types; set _common_drag_source_types {} 62 | variable _common_drop_target_types; set _common_drop_target_types {} 63 | # puts "olednd::_HandleDragEnter: drop_target=$drop_target,\ 64 | # typelist=$typelist, actionlist=$actionlist,\ 65 | # pressedkeys=$pressedkeys, rootX=$rootX, rootY=$rootY" 66 | focus $drop_target 67 | 68 | ## Does the new drop target support any of our new types? 69 | variable _types; set _types [bind $drop_target <>] 70 | if {[llength $_types]} { 71 | ## Examine the drop target types, to find at least one match with the drag 72 | ## source types... 73 | set supported_types [_supported_types $_typelist] 74 | foreach type $_types { 75 | foreach matched [lsearch -glob -all -inline $supported_types $type] { 76 | ## Drop target supports this type. 77 | lappend common_drag_source_types $matched 78 | lappend common_drop_target_types $type 79 | } 80 | } 81 | } 82 | 83 | set _action refuse_drop 84 | if {[info exists common_drag_source_types]} { 85 | set _action copy 86 | set _common_drag_source_types $common_drag_source_types 87 | set _common_drop_target_types $common_drop_target_types 88 | ## Drop target supports at least one type. Send a <>. 89 | set cmd [bind $drop_target <>] 90 | if {[string length $cmd]} { 91 | set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ 92 | %CST \{$_common_drag_source_types\} \ 93 | %CTT \{$_common_drop_target_types\} \ 94 | %ST \{$_typelist\} %TT \{$_types\} \ 95 | %A $_action %a \{$_actionlist\} \ 96 | %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ 97 | %D \{\} %e <> \ 98 | %L \{$_typelist\} %% % \ 99 | %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ 100 | %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ 101 | ] $cmd] 102 | set _action [uplevel \#0 $cmd] 103 | } 104 | } 105 | if {$::tkdnd::_auto_update} {update} 106 | # Return values: copy, move, link, ask, private, refuse_drop, default 107 | return $_action 108 | };# olednd::_HandleDragEnter 109 | 110 | # ---------------------------------------------------------------------------- 111 | # Command olednd::_HandleDragOver 112 | # ---------------------------------------------------------------------------- 113 | proc olednd::_HandleDragOver { drop_target pressedkeys rootX rootY } { 114 | variable _types 115 | variable _typelist 116 | variable _codelist 117 | variable _actionlist 118 | variable _pressedkeys 119 | variable _action 120 | variable _common_drag_source_types 121 | variable _common_drop_target_types 122 | # puts "olednd::_HandleDragOver: drop_target=$drop_target,\ 123 | # pressedkeys=$pressedkeys, rootX=$rootX, rootY=$rootY" 124 | 125 | if {![llength $_common_drag_source_types]} {return refuse_drop} 126 | set _pressedkeys $pressedkeys 127 | set cmd [bind $drop_target <>] 128 | if {[string length $cmd]} { 129 | set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ 130 | %CST \{$_common_drag_source_types\} \ 131 | %CTT \{$_common_drop_target_types\} \ 132 | %ST \{$_typelist\} %TT \{$_types\} \ 133 | %A $_action %a \{$_actionlist\} \ 134 | %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ 135 | %D \{\} %e <> \ 136 | %L \{$_typelist\} %% % \ 137 | %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ 138 | %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ 139 | ] $cmd] 140 | set _action [uplevel \#0 $cmd] 141 | } 142 | if {$::tkdnd::_auto_update} {update} 143 | # Return values: copy, move, link, ask, private, refuse_drop, default 144 | return $_action 145 | };# olednd::_HandleDragOver 146 | 147 | # ---------------------------------------------------------------------------- 148 | # Command olednd::_HandleDragLeave 149 | # ---------------------------------------------------------------------------- 150 | proc olednd::_HandleDragLeave { drop_target } { 151 | variable _types 152 | variable _typelist 153 | variable _codelist 154 | variable _actionlist 155 | variable _pressedkeys 156 | variable _action 157 | variable _common_drag_source_types 158 | variable _common_drop_target_types 159 | if {![llength $_common_drag_source_types]} {return} 160 | foreach var {_types _typelist _actionlist _pressedkeys _action 161 | _common_drag_source_types _common_drop_target_types} { 162 | set $var {} 163 | } 164 | 165 | set cmd [bind $drop_target <>] 166 | if {[string length $cmd]} { 167 | set cmd [string map [list %W $drop_target %X 0 %Y 0 \ 168 | %CST \{$_common_drag_source_types\} \ 169 | %CTT \{$_common_drop_target_types\} \ 170 | %ST \{$_typelist\} %TT \{$_types\} \ 171 | %A \{$_action\} %a \{$_actionlist\} \ 172 | %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ 173 | %D \{\} %e <> \ 174 | %L \{$_typelist\} %% % \ 175 | %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ 176 | %u \{$_codelist\} %C \{[lindex $_codelist 0]\} \ 177 | ] $cmd] 178 | set _action [uplevel \#0 $cmd] 179 | } 180 | if {$::tkdnd::_auto_update} {update} 181 | };# olednd::_HandleDragLeave 182 | 183 | # ---------------------------------------------------------------------------- 184 | # Command olednd::_HandleXdndDrop 185 | # ---------------------------------------------------------------------------- 186 | proc olednd::_HandleDrop { drop_target pressedkeys rootX rootY _type data } { 187 | variable _types 188 | variable _typelist 189 | variable _codelist 190 | variable _actionlist 191 | variable _pressedkeys 192 | variable _action 193 | variable _common_drag_source_types 194 | variable _common_drop_target_types 195 | set data [_normalise_data $_type $data] 196 | # puts "olednd::_HandleDrop: drop_target=$drop_target,\ 197 | # pressedkeys=$pressedkeys, rootX=$rootX, rootY=$rootY,\ 198 | # data=\"$data\"" 199 | 200 | if {![llength $_common_drag_source_types]} {return refuse_drop} 201 | set _pressedkeys $pressedkeys 202 | ## Try to select the most specific <> event. 203 | foreach type [concat $_common_drag_source_types $_common_drop_target_types] { 204 | set type [_platform_independent_type $type] 205 | set cmd [bind $drop_target <>] 206 | if {[string length $cmd]} { 207 | set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ 208 | %CST \{$_common_drag_source_types\} \ 209 | %CTT \{$_common_drop_target_types\} \ 210 | %ST \{$_typelist\} %TT \{$_types\} \ 211 | %A $_action %a \{$_actionlist\} \ 212 | %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ 213 | %D [list $data] %e <> \ 214 | %L \{$_typelist\} %% % \ 215 | %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ 216 | %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ 217 | ] $cmd] 218 | return [uplevel \#0 $cmd] 219 | } 220 | } 221 | set cmd [bind $drop_target <>] 222 | if {[string length $cmd]} { 223 | set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ 224 | %CST \{$_common_drag_source_types\} \ 225 | %CTT \{$_common_drop_target_types\} \ 226 | %ST \{$_typelist\} %TT \{$_types\} \ 227 | %A $_action %a \{$_actionlist\} \ 228 | %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ 229 | %D [list $data] %e <> \ 230 | %L \{$_typelist\} %% % \ 231 | %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ 232 | %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ 233 | ] $cmd] 234 | set _action [uplevel \#0 $cmd] 235 | } 236 | if {$::tkdnd::_auto_update} {update} 237 | # Return values: copy, move, link, ask, private, refuse_drop 238 | return $_action 239 | };# olednd::_HandleXdndDrop 240 | 241 | # ---------------------------------------------------------------------------- 242 | # Command olednd::_GetDropTypes 243 | # ---------------------------------------------------------------------------- 244 | proc olednd::_GetDropTypes { drop_target } { 245 | variable _common_drag_source_types 246 | return $_common_drag_source_types 247 | };# olednd::_GetDropTypes 248 | 249 | # ---------------------------------------------------------------------------- 250 | # Command olednd::_GetDroppedData 251 | # ---------------------------------------------------------------------------- 252 | proc olednd::_GetDroppedData { } { 253 | variable _drop_target 254 | return [selection get -displayof $_drop_target \ 255 | -selection XdndSelection -type STRING] 256 | };# olednd::_GetDroppedData 257 | 258 | # ---------------------------------------------------------------------------- 259 | # Command olednd::_GetDragSource 260 | # ---------------------------------------------------------------------------- 261 | proc olednd::_GetDragSource { } { 262 | variable _drag_source 263 | return $_drag_source 264 | };# olednd::_GetDragSource 265 | 266 | # ---------------------------------------------------------------------------- 267 | # Command olednd::_GetDropTarget 268 | # ---------------------------------------------------------------------------- 269 | proc olednd::_GetDropTarget { } { 270 | variable _drop_target 271 | return [winfo id $_drop_target] 272 | };# olednd::_GetDropTarget 273 | 274 | # ---------------------------------------------------------------------------- 275 | # Command olednd::_supported_types 276 | # ---------------------------------------------------------------------------- 277 | proc olednd::_supported_types { types } { 278 | set new_types {} 279 | foreach type $types { 280 | if {[_supported_type $type]} {lappend new_types $type} 281 | } 282 | return $new_types 283 | }; # olednd::_supported_types 284 | 285 | # ---------------------------------------------------------------------------- 286 | # Command olednd::_platform_specific_types 287 | # ---------------------------------------------------------------------------- 288 | proc olednd::_platform_specific_types { types } { 289 | set new_types {} 290 | foreach type $types { 291 | set new_types [concat $new_types [_platform_specific_type $type]] 292 | } 293 | return $new_types 294 | }; # olednd::_platform_specific_types 295 | 296 | # ---------------------------------------------------------------------------- 297 | # Command olednd::_platform_independent_types 298 | # ---------------------------------------------------------------------------- 299 | proc olednd::_platform_independent_types { types } { 300 | set new_types {} 301 | foreach type $types { 302 | set new_types [concat $new_types [_platform_independent_type $type]] 303 | } 304 | return $new_types 305 | }; # olednd::_platform_independent_types 306 | 307 | # ---------------------------------------------------------------------------- 308 | # Command olednd::_normalise_data 309 | # ---------------------------------------------------------------------------- 310 | proc olednd::_normalise_data { type data } { 311 | switch $type { 312 | CF_HDROP {return $data} 313 | DND_Text {return [list CF_UNICODETEXT CF_TEXT]} 314 | DND_Files {return [list CF_HDROP]} 315 | default {return $data} 316 | } 317 | }; # olednd::_normalise_data 318 | 319 | # ---------------------------------------------------------------------------- 320 | # Command olednd::_platform_specific_type 321 | # ---------------------------------------------------------------------------- 322 | proc olednd::_platform_specific_type { type } { 323 | switch $type { 324 | DND_Text {return [list CF_UNICODETEXT CF_TEXT]} 325 | DND_Files {return [list CF_HDROP]} 326 | default { 327 | # variable _unhandled_types 328 | # if {[lsearch -exact $_unhandled_types $type] == -1} { 329 | # lappend _unhandled_types $type 330 | # } 331 | return [list $type]} 332 | } 333 | }; # olednd::_platform_specific_type 334 | 335 | # ---------------------------------------------------------------------------- 336 | # Command olednd::_platform_independent_type 337 | # ---------------------------------------------------------------------------- 338 | proc olednd::_platform_independent_type { type } { 339 | switch $type { 340 | CF_UNICODETEXT - CF_TEXT {return DND_Text} 341 | CF_HDROP {return DND_Files} 342 | default {return [list $type]} 343 | } 344 | }; # olednd::_platform_independent_type 345 | 346 | # ---------------------------------------------------------------------------- 347 | # Command olednd::_supported_type 348 | # ---------------------------------------------------------------------------- 349 | proc olednd::_supported_type { type } { 350 | # return 1; 351 | switch $type { 352 | CF_UNICODETEXT - CF_TEXT - 353 | FileGroupDescriptor - FileGroupDescriptorW - 354 | CF_HDROP {return 1} 355 | } 356 | # Is the type in our known, but unhandled types? 357 | variable _unhandled_types 358 | if {[lsearch -exact $_unhandled_types $type] != -1} {return 1} 359 | return 0 360 | }; # olednd::_supported_type 361 | -------------------------------------------------------------------------------- /lib/md5/md5.tcl: -------------------------------------------------------------------------------- 1 | ################################################## 2 | # 3 | # md5.tcl - MD5 in Tcl 4 | # Author: Don Libes , July 1999 5 | # Version 1.2.0 6 | # 7 | # MD5 defined by RFC 1321, "The MD5 Message-Digest Algorithm" 8 | # HMAC defined by RFC 2104, "Keyed-Hashing for Message Authentication" 9 | # 10 | # Most of the comments below come right out of RFC 1321; That's why 11 | # they have such peculiar numbers. In addition, I have retained 12 | # original syntax, bugs in documentation (yes, really), etc. from the 13 | # RFC. All remaining bugs are mine. 14 | # 15 | # HMAC implementation by D. J. Hagberg and 16 | # is based on C code in RFC 2104. 17 | # 18 | # For more info, see: http://expect.nist.gov/md5pure 19 | # 20 | # - Don 21 | # 22 | # Modified by Miguel Sofer to use inlines and simple variables 23 | ################################################## 24 | 25 | # @mdgen EXCLUDE: md5c.tcl 26 | 27 | package require Tcl 8.2 28 | namespace eval ::md5 { 29 | } 30 | 31 | if {![catch {package require Trf 2.0}] && ![catch {::md5 -- test}]} { 32 | # Trf is available, so implement the functionality provided here 33 | # in terms of calls to Trf for speed. 34 | 35 | proc ::md5::md5 {msg} { 36 | string tolower [::hex -mode encode -- [::md5 -- $msg]] 37 | } 38 | 39 | # hmac: hash for message authentication 40 | 41 | # MD5 of Trf and MD5 as defined by this package have slightly 42 | # different results. Trf returns the digest in binary, here we get 43 | # it as hex-string. In the computation of the HMAC the latter 44 | # requires back conversion into binary in some places. With Trf we 45 | # can use omit these. 46 | 47 | proc ::md5::hmac {key text} { 48 | # if key is longer than 64 bytes, reset it to MD5(key). If shorter, 49 | # pad it out with null (\x00) chars. 50 | set keyLen [string length $key] 51 | if {$keyLen > 64} { 52 | #old: set key [binary format H32 [md5 $key]] 53 | set key [::md5 -- $key] 54 | set keyLen [string length $key] 55 | } 56 | 57 | # ensure the key is padded out to 64 chars with nulls. 58 | set padLen [expr {64 - $keyLen}] 59 | append key [binary format "a$padLen" {}] 60 | 61 | # Split apart the key into a list of 16 little-endian words 62 | binary scan $key i16 blocks 63 | 64 | # XOR key with ipad and opad values 65 | set k_ipad {} 66 | set k_opad {} 67 | foreach i $blocks { 68 | append k_ipad [binary format i [expr {$i ^ 0x36363636}]] 69 | append k_opad [binary format i [expr {$i ^ 0x5c5c5c5c}]] 70 | } 71 | 72 | # Perform inner md5, appending its results to the outer key 73 | append k_ipad $text 74 | #old: append k_opad [binary format H* [md5 $k_ipad]] 75 | append k_opad [::md5 -- $k_ipad] 76 | 77 | # Perform outer md5 78 | #old: md5 $k_opad 79 | string tolower [::hex -mode encode -- [::md5 -- $k_opad]] 80 | } 81 | 82 | } else { 83 | # Without Trf use the all-tcl implementation by Don Libes. 84 | 85 | # T will be inlined after the definition of md5body 86 | 87 | # test md5 88 | # 89 | # This proc is not necessary during runtime and may be omitted if you 90 | # are simply inserting this file into a production program. 91 | # 92 | proc ::md5::test {} { 93 | foreach {msg expected} { 94 | "" 95 | "d41d8cd98f00b204e9800998ecf8427e" 96 | "a" 97 | "0cc175b9c0f1b6a831c399e269772661" 98 | "abc" 99 | "900150983cd24fb0d6963f7d28e17f72" 100 | "message digest" 101 | "f96b697d7cb7938d525a2f31aaf161d0" 102 | "abcdefghijklmnopqrstuvwxyz" 103 | "c3fcd3d76192e4007dfb496cca67e13b" 104 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" 105 | "d174ab98d277d9f5a5611c2c9f419d9f" 106 | "12345678901234567890123456789012345678901234567890123456789012345678901234567890" 107 | "57edf4a22be3c955ac49da2e2107b67a" 108 | } { 109 | puts "testing: md5 \"$msg\"" 110 | set computed [md5 $msg] 111 | puts "expected: $expected" 112 | puts "computed: $computed" 113 | if {0 != [string compare $computed $expected]} { 114 | puts "FAILED" 115 | } else { 116 | puts "SUCCEEDED" 117 | } 118 | } 119 | } 120 | 121 | # time md5 122 | # 123 | # This proc is not necessary during runtime and may be omitted if you 124 | # are simply inserting this file into a production program. 125 | # 126 | proc ::md5::time {} { 127 | foreach len {10 50 100 500 1000 5000 10000} { 128 | set time [::time {md5 [format %$len.0s ""]} 100] 129 | set msec [lindex $time 0] 130 | puts "input length $len: [expr {$msec/1000}] milliseconds per interation" 131 | } 132 | } 133 | 134 | # 135 | # We just define the body of md5pure::md5 here; later we 136 | # regsub to inline a few function calls for speed 137 | # 138 | 139 | set ::md5::md5body { 140 | 141 | # 142 | # 3.1 Step 1. Append Padding Bits 143 | # 144 | 145 | set msgLen [string length $msg] 146 | 147 | set padLen [expr {56 - $msgLen%64}] 148 | if {$msgLen % 64 > 56} { 149 | incr padLen 64 150 | } 151 | 152 | # pad even if no padding required 153 | if {$padLen == 0} { 154 | incr padLen 64 155 | } 156 | 157 | # append single 1b followed by 0b's 158 | append msg [binary format "a$padLen" \200] 159 | 160 | # 161 | # 3.2 Step 2. Append Length 162 | # 163 | 164 | # RFC doesn't say whether to use little- or big-endian 165 | # code demonstrates little-endian 166 | # This step limits our input to size 2^32b or 2^24B 167 | append msg [binary format "i1i1" [expr {8*$msgLen}] 0] 168 | 169 | # 170 | # 3.3 Step 3. Initialize MD Buffer 171 | # 172 | 173 | set A [expr 0x67452301] 174 | set B [expr 0xefcdab89] 175 | set C [expr 0x98badcfe] 176 | set D [expr 0x10325476] 177 | 178 | # 179 | # 3.4 Step 4. Process Message in 16-Word Blocks 180 | # 181 | 182 | # process each 16-word block 183 | # RFC doesn't say whether to use little- or big-endian 184 | # code says little-endian 185 | binary scan $msg i* blocks 186 | 187 | # loop over the message taking 16 blocks at a time 188 | 189 | foreach {X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15} $blocks { 190 | 191 | # Save A as AA, B as BB, C as CC, and D as DD. 192 | set AA $A 193 | set BB $B 194 | set CC $C 195 | set DD $D 196 | 197 | # Round 1. 198 | # Let [abcd k s i] denote the operation 199 | # a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). 200 | # [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] 201 | set A [expr {$B + [<<< [expr {$A + [F $B $C $D] + $X0 + $T01}] 7]}] 202 | set D [expr {$A + [<<< [expr {$D + [F $A $B $C] + $X1 + $T02}] 12]}] 203 | set C [expr {$D + [<<< [expr {$C + [F $D $A $B] + $X2 + $T03}] 17]}] 204 | set B [expr {$C + [<<< [expr {$B + [F $C $D $A] + $X3 + $T04}] 22]}] 205 | # [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] 206 | set A [expr {$B + [<<< [expr {$A + [F $B $C $D] + $X4 + $T05}] 7]}] 207 | set D [expr {$A + [<<< [expr {$D + [F $A $B $C] + $X5 + $T06}] 12]}] 208 | set C [expr {$D + [<<< [expr {$C + [F $D $A $B] + $X6 + $T07}] 17]}] 209 | set B [expr {$C + [<<< [expr {$B + [F $C $D $A] + $X7 + $T08}] 22]}] 210 | # [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] 211 | set A [expr {$B + [<<< [expr {$A + [F $B $C $D] + $X8 + $T09}] 7]}] 212 | set D [expr {$A + [<<< [expr {$D + [F $A $B $C] + $X9 + $T10}] 12]}] 213 | set C [expr {$D + [<<< [expr {$C + [F $D $A $B] + $X10 + $T11}] 17]}] 214 | set B [expr {$C + [<<< [expr {$B + [F $C $D $A] + $X11 + $T12}] 22]}] 215 | # [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] 216 | set A [expr {$B + [<<< [expr {$A + [F $B $C $D] + $X12 + $T13}] 7]}] 217 | set D [expr {$A + [<<< [expr {$D + [F $A $B $C] + $X13 + $T14}] 12]}] 218 | set C [expr {$D + [<<< [expr {$C + [F $D $A $B] + $X14 + $T15}] 17]}] 219 | set B [expr {$C + [<<< [expr {$B + [F $C $D $A] + $X15 + $T16}] 22]}] 220 | 221 | # Round 2. 222 | # Let [abcd k s i] denote the operation 223 | # a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). 224 | # Do the following 16 operations. 225 | # [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] 226 | set A [expr {$B + [<<< [expr {$A + [G $B $C $D] + $X1 + $T17}] 5]}] 227 | set D [expr {$A + [<<< [expr {$D + [G $A $B $C] + $X6 + $T18}] 9]}] 228 | set C [expr {$D + [<<< [expr {$C + [G $D $A $B] + $X11 + $T19}] 14]}] 229 | set B [expr {$C + [<<< [expr {$B + [G $C $D $A] + $X0 + $T20}] 20]}] 230 | # [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] 231 | set A [expr {$B + [<<< [expr {$A + [G $B $C $D] + $X5 + $T21}] 5]}] 232 | set D [expr {$A + [<<< [expr {$D + [G $A $B $C] + $X10 + $T22}] 9]}] 233 | set C [expr {$D + [<<< [expr {$C + [G $D $A $B] + $X15 + $T23}] 14]}] 234 | set B [expr {$C + [<<< [expr {$B + [G $C $D $A] + $X4 + $T24}] 20]}] 235 | # [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] 236 | set A [expr {$B + [<<< [expr {$A + [G $B $C $D] + $X9 + $T25}] 5]}] 237 | set D [expr {$A + [<<< [expr {$D + [G $A $B $C] + $X14 + $T26}] 9]}] 238 | set C [expr {$D + [<<< [expr {$C + [G $D $A $B] + $X3 + $T27}] 14]}] 239 | set B [expr {$C + [<<< [expr {$B + [G $C $D $A] + $X8 + $T28}] 20]}] 240 | # [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] 241 | set A [expr {$B + [<<< [expr {$A + [G $B $C $D] + $X13 + $T29}] 5]}] 242 | set D [expr {$A + [<<< [expr {$D + [G $A $B $C] + $X2 + $T30}] 9]}] 243 | set C [expr {$D + [<<< [expr {$C + [G $D $A $B] + $X7 + $T31}] 14]}] 244 | set B [expr {$C + [<<< [expr {$B + [G $C $D $A] + $X12 + $T32}] 20]}] 245 | 246 | # Round 3. 247 | # Let [abcd k s t] [sic] denote the operation 248 | # a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). 249 | # Do the following 16 operations. 250 | # [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] 251 | set A [expr {$B + [<<< [expr {$A + [H $B $C $D] + $X5 + $T33}] 4]}] 252 | set D [expr {$A + [<<< [expr {$D + [H $A $B $C] + $X8 + $T34}] 11]}] 253 | set C [expr {$D + [<<< [expr {$C + [H $D $A $B] + $X11 + $T35}] 16]}] 254 | set B [expr {$C + [<<< [expr {$B + [H $C $D $A] + $X14 + $T36}] 23]}] 255 | # [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] 256 | set A [expr {$B + [<<< [expr {$A + [H $B $C $D] + $X1 + $T37}] 4]}] 257 | set D [expr {$A + [<<< [expr {$D + [H $A $B $C] + $X4 + $T38}] 11]}] 258 | set C [expr {$D + [<<< [expr {$C + [H $D $A $B] + $X7 + $T39}] 16]}] 259 | set B [expr {$C + [<<< [expr {$B + [H $C $D $A] + $X10 + $T40}] 23]}] 260 | # [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] 261 | set A [expr {$B + [<<< [expr {$A + [H $B $C $D] + $X13 + $T41}] 4]}] 262 | set D [expr {$A + [<<< [expr {$D + [H $A $B $C] + $X0 + $T42}] 11]}] 263 | set C [expr {$D + [<<< [expr {$C + [H $D $A $B] + $X3 + $T43}] 16]}] 264 | set B [expr {$C + [<<< [expr {$B + [H $C $D $A] + $X6 + $T44}] 23]}] 265 | # [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] 266 | set A [expr {$B + [<<< [expr {$A + [H $B $C $D] + $X9 + $T45}] 4]}] 267 | set D [expr {$A + [<<< [expr {$D + [H $A $B $C] + $X12 + $T46}] 11]}] 268 | set C [expr {$D + [<<< [expr {$C + [H $D $A $B] + $X15 + $T47}] 16]}] 269 | set B [expr {$C + [<<< [expr {$B + [H $C $D $A] + $X2 + $T48}] 23]}] 270 | 271 | # Round 4. 272 | # Let [abcd k s t] [sic] denote the operation 273 | # a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). 274 | # Do the following 16 operations. 275 | # [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] 276 | set A [expr {$B + [<<< [expr {$A + [I $B $C $D] + $X0 + $T49}] 6]}] 277 | set D [expr {$A + [<<< [expr {$D + [I $A $B $C] + $X7 + $T50}] 10]}] 278 | set C [expr {$D + [<<< [expr {$C + [I $D $A $B] + $X14 + $T51}] 15]}] 279 | set B [expr {$C + [<<< [expr {$B + [I $C $D $A] + $X5 + $T52}] 21]}] 280 | # [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] 281 | set A [expr {$B + [<<< [expr {$A + [I $B $C $D] + $X12 + $T53}] 6]}] 282 | set D [expr {$A + [<<< [expr {$D + [I $A $B $C] + $X3 + $T54}] 10]}] 283 | set C [expr {$D + [<<< [expr {$C + [I $D $A $B] + $X10 + $T55}] 15]}] 284 | set B [expr {$C + [<<< [expr {$B + [I $C $D $A] + $X1 + $T56}] 21]}] 285 | # [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] 286 | set A [expr {$B + [<<< [expr {$A + [I $B $C $D] + $X8 + $T57}] 6]}] 287 | set D [expr {$A + [<<< [expr {$D + [I $A $B $C] + $X15 + $T58}] 10]}] 288 | set C [expr {$D + [<<< [expr {$C + [I $D $A $B] + $X6 + $T59}] 15]}] 289 | set B [expr {$C + [<<< [expr {$B + [I $C $D $A] + $X13 + $T60}] 21]}] 290 | # [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] 291 | set A [expr {$B + [<<< [expr {$A + [I $B $C $D] + $X4 + $T61}] 6]}] 292 | set D [expr {$A + [<<< [expr {$D + [I $A $B $C] + $X11 + $T62}] 10]}] 293 | set C [expr {$D + [<<< [expr {$C + [I $D $A $B] + $X2 + $T63}] 15]}] 294 | set B [expr {$C + [<<< [expr {$B + [I $C $D $A] + $X9 + $T64}] 21]}] 295 | 296 | # Then perform the following additions. (That is increment each 297 | # of the four registers by the value it had before this block 298 | # was started.) 299 | incr A $AA 300 | incr B $BB 301 | incr C $CC 302 | incr D $DD 303 | } 304 | # 3.5 Step 5. Output 305 | 306 | # ... begin with the low-order byte of A, and end with the high-order byte 307 | # of D. 308 | 309 | return [bytes $A][bytes $B][bytes $C][bytes $D] 310 | } 311 | 312 | # 313 | # Here we inline/regsub the functions F, G, H, I and <<< 314 | # 315 | 316 | namespace eval ::md5 { 317 | #proc md5pure::F {x y z} {expr {(($x & $y) | ((~$x) & $z))}} 318 | regsub -all -- {\[ *F +(\$.) +(\$.) +(\$.) *\]} $md5body {((\1 \& \2) | ((~\1) \& \3))} md5body 319 | 320 | #proc md5pure::G {x y z} {expr {(($x & $z) | ($y & (~$z)))}} 321 | regsub -all -- {\[ *G +(\$.) +(\$.) +(\$.) *\]} $md5body {((\1 \& \3) | (\2 \& (~\3)))} md5body 322 | 323 | #proc md5pure::H {x y z} {expr {$x ^ $y ^ $z}} 324 | regsub -all -- {\[ *H +(\$.) +(\$.) +(\$.) *\]} $md5body {(\1 ^ \2 ^ \3)} md5body 325 | 326 | #proc md5pure::I {x y z} {expr {$y ^ ($x | (~$z))}} 327 | regsub -all -- {\[ *I +(\$.) +(\$.) +(\$.) *\]} $md5body {(\2 ^ (\1 | (~\3)))} md5body 328 | 329 | # bitwise left-rotate 330 | if {0} { 331 | proc md5pure::<<< {x i} { 332 | # This works by bitwise-ORing together right piece and left 333 | # piece so that the (original) right piece becomes the left 334 | # piece and vice versa. 335 | # 336 | # The (original) right piece is a simple left shift. 337 | # The (original) left piece should be a simple right shift 338 | # but Tcl does sign extension on right shifts so we 339 | # shift it 1 bit, mask off the sign, and finally shift 340 | # it the rest of the way. 341 | 342 | # expr {($x << $i) | ((($x >> 1) & 0x7fffffff) >> (31-$i))} 343 | 344 | # 345 | # New version, faster when inlining 346 | # We replace inline (computing at compile time): 347 | # R$i -> (32 - $i) 348 | # S$i -> (0x7fffffff >> (31-$i)) 349 | # 350 | 351 | expr { ($x << $i) | (($x >> [set R$i]) & [set S$i])} 352 | } 353 | } 354 | # inline <<< 355 | regsub -all -- {\[ *<<< +\[ *expr +({[^\}]*})\] +([0-9]+) *\]} $md5body {(([set x [expr \1]] << \2) | (($x >> R\2) \& S\2))} md5body 356 | 357 | # now replace the R and S 358 | set map {} 359 | foreach i { 360 | 7 12 17 22 361 | 5 9 14 20 362 | 4 11 16 23 363 | 6 10 15 21 364 | } { 365 | lappend map R$i [expr {32 - $i}] S$i [expr {0x7fffffff >> (31-$i)}] 366 | } 367 | 368 | # inline the values of T 369 | foreach \ 370 | tName { 371 | T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 372 | T11 T12 T13 T14 T15 T16 T17 T18 T19 T20 373 | T21 T22 T23 T24 T25 T26 T27 T28 T29 T30 374 | T31 T32 T33 T34 T35 T36 T37 T38 T39 T40 375 | T41 T42 T43 T44 T45 T46 T47 T48 T49 T50 376 | T51 T52 T53 T54 T55 T56 T57 T58 T59 T60 377 | T61 T62 T63 T64 } \ 378 | tVal { 379 | 0xd76aa478 0xe8c7b756 0x242070db 0xc1bdceee 380 | 0xf57c0faf 0x4787c62a 0xa8304613 0xfd469501 381 | 0x698098d8 0x8b44f7af 0xffff5bb1 0x895cd7be 382 | 0x6b901122 0xfd987193 0xa679438e 0x49b40821 383 | 384 | 0xf61e2562 0xc040b340 0x265e5a51 0xe9b6c7aa 385 | 0xd62f105d 0x2441453 0xd8a1e681 0xe7d3fbc8 386 | 0x21e1cde6 0xc33707d6 0xf4d50d87 0x455a14ed 387 | 0xa9e3e905 0xfcefa3f8 0x676f02d9 0x8d2a4c8a 388 | 389 | 0xfffa3942 0x8771f681 0x6d9d6122 0xfde5380c 390 | 0xa4beea44 0x4bdecfa9 0xf6bb4b60 0xbebfbc70 391 | 0x289b7ec6 0xeaa127fa 0xd4ef3085 0x4881d05 392 | 0xd9d4d039 0xe6db99e5 0x1fa27cf8 0xc4ac5665 393 | 394 | 0xf4292244 0x432aff97 0xab9423a7 0xfc93a039 395 | 0x655b59c3 0x8f0ccc92 0xffeff47d 0x85845dd1 396 | 0x6fa87e4f 0xfe2ce6e0 0xa3014314 0x4e0811a1 397 | 0xf7537e82 0xbd3af235 0x2ad7d2bb 0xeb86d391 398 | } { 399 | lappend map \$$tName $tVal 400 | } 401 | set md5body [string map $map $md5body] 402 | 403 | 404 | # Finally, define the proc 405 | proc md5 {msg} $md5body 406 | 407 | # unset auxiliary variables 408 | unset md5body tName tVal map 409 | } 410 | 411 | proc ::md5::byte0 {i} {expr {0xff & $i}} 412 | proc ::md5::byte1 {i} {expr {(0xff00 & $i) >> 8}} 413 | proc ::md5::byte2 {i} {expr {(0xff0000 & $i) >> 16}} 414 | proc ::md5::byte3 {i} {expr {((0xff000000 & $i) >> 24) & 0xff}} 415 | 416 | proc ::md5::bytes {i} { 417 | format %0.2x%0.2x%0.2x%0.2x [byte0 $i] [byte1 $i] [byte2 $i] [byte3 $i] 418 | } 419 | 420 | # hmac: hash for message authentication 421 | proc ::md5::hmac {key text} { 422 | # if key is longer than 64 bytes, reset it to MD5(key). If shorter, 423 | # pad it out with null (\x00) chars. 424 | set keyLen [string length $key] 425 | if {$keyLen > 64} { 426 | set key [binary format H32 [md5 $key]] 427 | set keyLen [string length $key] 428 | } 429 | 430 | # ensure the key is padded out to 64 chars with nulls. 431 | set padLen [expr {64 - $keyLen}] 432 | append key [binary format "a$padLen" {}] 433 | 434 | # Split apart the key into a list of 16 little-endian words 435 | binary scan $key i16 blocks 436 | 437 | # XOR key with ipad and opad values 438 | set k_ipad {} 439 | set k_opad {} 440 | foreach i $blocks { 441 | append k_ipad [binary format i [expr {$i ^ 0x36363636}]] 442 | append k_opad [binary format i [expr {$i ^ 0x5c5c5c5c}]] 443 | } 444 | 445 | # Perform inner md5, appending its results to the outer key 446 | append k_ipad $text 447 | append k_opad [binary format H* [md5 $k_ipad]] 448 | 449 | # Perform outer md5 450 | md5 $k_opad 451 | } 452 | } 453 | 454 | package provide md5 1.4.4 455 | -------------------------------------------------------------------------------- /CHANGELOG-v2: -------------------------------------------------------------------------------- 1 | 2 | 3 | V2.1.11 4 | ======= 5 | 18e4225 Update Readme files 6 | ef97b0d FIX: Dropdown presets loader styles small enhance 7 | 8 | 9 | V2.1.10 10 | ======= 11 | a8ea0a9 FIX #46 : Added new icon set 12 | ab9a6bc FIX Missing Keep format option 13 | 069f677 Enhance presets.config parsing 14 | ee7ef53 FIX: regression. No widget for preview size 15 | 3564213 FIX #34 : Added watermark wrap mode for easy image array creations 16 | 33500b1 FIX: Do not depend on md5 to calculate thumbnail location 17 | 4801b51 Created lib directory and moved tkdnd to lib/tkdnd 18 | f2956b4 FIX: Do not use a tmp file to generate and display Thumbnails 19 | 8c1beeb FIX: xcf psd and ai load inmediatly. header info to get size data 20 | 50a4de3 FIX: Delete preset file list before adding sets from the combobox 21 | 458b83a FIX #27 Add watermark offset and rotation FIX: Text color ignored if loaded from presets 22 | fef58ca CODE: Massive change of watermark gui constructors. Added: gui rotation and position offset 23 | 7195019 ADD: Collage custom name string. FIX: Minor fix on string match for label, prepCollage Minor GUI margin arrangement 24 | b1a8909 GUI: Change slider label to entry to allow quick set of quality GUI: Small UX improvements 25 | a949e88 GUI: Testing new behavior on editing text elements. Now when they have focus they are editable by default. 26 | 52ccc3a FIX: Read only the first lines of svg for parsing. 27 | fc39cfa FIX: Removed orphan checkbox at the bottom. 28 | 86ee303 FIX: Image watermark not working when loaded from any setting file 29 | 3ca21c0 FIX #23: Calculate best sharpeness. 30 | 284b302 FIX: Add tkDND licence (FreeBSD) 31 | ba8ea5a ADD: Artscript 2 icon 32 | 6f6f123 FIX: By default image watermark field is empty. Do not trow an error if field is empty FIX: Watermark choose value from updated text list. 33 | ea3996e Add Ctrl + q to exit application 34 | 47d7ce1 FIX Major regression. Resize didn't apply unnsharp method 35 | b342251 FIX: Loading of default sizes now works properly 36 | 20876ff FIX #45 : Organize and give more appeal to GUI 37 | 09e452c FIX: Overwrite check ignored for all files with tmp destination 38 | 9f816f4 FIX: Resize operator major flaw. Im surprised it worked at all 39 | c5981e9 ADD selection buttons for file list 40 | 7ea6a6b Minor style improvement 41 | dfb0e75 CODE: Minor code modification, removed all obsolete comments 42 | 668d853 FIX: Always initialize artscriptrc variable 43 | 11066bc FIX #36 Load presets from gui 44 | 5fa19a7 Renamed all presets key names. 45 | 800ca8b CODE: remove tab_ prefix from collage and resize widget array keys 46 | d957921 Renamed all globals to match widget names Move init functions Modularize set and get variables to catalogue 47 | fbd614a FIX: Size and watermark loading from artscriptrc do some checks to avoid errors 48 | 7f8f1ce Added info on documentation for tkDND 49 | b518710 FIX: tkDND adjustments to work better with files and text strings 50 | e3e4d1a FIX: Sizes not loading properly when remember settings on CODE: changed loading order for tkdnd 51 | 42985f5 DELETED: binary windows tkdnd files. They are not necessary, the script is not functional on windows yet 52 | 50b4a69 FIX #44 : First draft of saving presets between runs. 53 | 8777155 ADD experimental drag and drop support 54 | e27c494 FIX: Do not get img src on every call. Now it only gets consulted before rendering watermark images. 55 | 09171f7 FIX: If preset empty do not add to combobox 56 | 4e69fa1 FIX: error if size 0 or empty in any collage mode 57 | 7ccb3aa FIX: changed default wxh value for collage to 0. As the new function causes to always return bigger sizes. 58 | 0eb7de5 Small GUI tweaks 59 | 495cfe7 FIX: small typo caused error on wmsize 60 | 6ee3aef CODE clean up in the openFiles functions 61 | a29ae04 ADD: Image watermark selection on GUI 62 | 5fec689 Small code fixes 63 | f07e096 FIX #38: Keep GUI alive in long running calculations. 64 | 0c4722a FIX: Do not show collage unsupported output options if mode on 65 | 771a329 FIX: Add position to Resize Zoom mode. 66 | 30ce66d Version Bump to reflect add of resize operators 67 | d65a87b FIX #17 : Add resize operators and the hability to grow 68 | 72e71af FIX: Concatenate mode does not use image size. 69 | d26fec2 ADD Collage Crop mode. 70 | ace7305 FIX #37: Simple rename, using preffix suffix. 71 | d71d5dc ADD: Simple rename capabilities 72 | 8af784f ADD collage settings to artscirpt settings and modified default preset 73 | 38fa784 FIX: Alfa replace color selection broken 74 | 40881a8 FIX: Trim collage if zero_geometry or concatenate mode used Added png32 to output format in montage FIX: range wont update if keyboard used to set col and row this cause the progress bar to report wrong calculations 75 | 22d3f2c FIX: Error message if value padding or border was erased 76 | 6aa99bf FIX: sometimes zero geometry produces white space. We add trim at the end of montage when using any special mode. 77 | c6ab21b Quick FIX: If no concatenation or zero_geometry conform to square 78 | d8d3225 FIX: Allow zero geometry and concatenation to set size limit only on one dimension wid or height 79 | 5bc17ee FIX: Zero_geometry broken: + FIX: Label truncated if spaces present 80 | 3a431e6 FIX #30 : Collage mode activated 81 | 3f1c435 FIX: many bugs introduced by collage mode Added: concatenation mode to collage and Zero geometry 82 | 9f3efc2 Added Collage UI FIX: sizeToggleWidgetWxH allowed values in boxes to have a % symbol FIX: Sizes preview not displayin in list Code clean up for collage Change Convert text to Collage if make collage is selected Added collage first preprocess functions 83 | 56b7534 FIX merge inputfiles 84 | 671f248 ADD: Checkbox no indicator style 85 | 4ff1788 CODE: update setDictEntries 86 | 3d8f945 CODE: Implement better check for KRA and ORA file size. no more grep or head. And lookup separated into a function. 87 | 538b268 FIX: Use env path to find executable file to avoid usage of which 88 | d602086 FIX: Removed unsharp from convert to avoid sharping with no resize. This was fixed before but on a merge I reenabled it 89 | 7f49788 FIX: Preview not working with png,jpg,webm 90 | bf6c17c Merge branch 'master' into dev 91 | 044b275 FIX #35 : Now its possible to select the color to be used instead of the alpha channel. 92 | 1c281f1 FIX: Broken preview. check if id is imagemagick file, this only happens when providing an id to convert in preview. 93 | 0055128 FIX: Keep GUI alive while generating thumbnails 94 | 68b3b37 FIX: setColor error handling and settings. minor fix on return error codes 95 | 4881c28 Use update idletasks instead of vwait hack 96 | 7e12b25 FIX: Make Thumbnail preview responsive. No more stops while thumbnail is generated. 97 | 30bfa1e FIX: Use wmcol instead of txtcol, this probably means watermark text color hasn't been operational. Also setColor uses an argument less 98 | 3572bd0 FIX: normalize setColor to allow collage to use 99 | 093c2c5 FIX: normalize addSizeBox to allow reuse in collage tile size 100 | 4183961 Merge branch 'master' into dev 101 | 46d9abf FIX: Allow toggle size order in tag sorting with antitag 102 | 143af20 FIX: Apply unsharp only when resizing 103 | b675378 update documentation 104 | 578f938 Code minor cleanup and commenting 105 | dadf82b Renamed sizes array to sizes_set to allow coexistance of v1 and v2 106 | fecec5b Version bump v2.1.0pre because of massive GUI change in resize 107 | b83ac71 Fixes #33 Fixes #18 Now its posible to set sizes in many different forms Change sizes to sizes(default) in your preset file to load sizes by default Add sizes() . string corresponds to the preset name. 108 | ba02f0b ADD: treeSortByTagPair, to sort based on tags with antitag 109 | d0499d5 Minor style improvements and UX tweaks 110 | 4da6b11 FIX: Keep GUI alive when pressing convert. Fixes convert triggering before all extract files with vwait 111 | 953a3dc GUI fix: Keep GUI alive when converting files in imagemagick 112 | 9e99bb8 FIX: counter starts must start in -1 113 | 44377d7 FIX: Sometimes tmp files are not deleted. 114 | 4ca1955 FIX: Convert trows error. continue used outside loop. 115 | 7bc939b CODE: add processHandlerFiles to event loop + Add: counter progessbar calculations fix Add. Control print cmd 116 | d40f139 CODE: clean up old todo comments 117 | 1795f4a CODE: add makeOra to event loop 118 | 3929b1e DOC: Added funcionts comments, version bump 2.0.1 119 | bc34d07 Enhance; Migrating to less dependant update code. 120 | c5a6736 FIX: Set ouput size when adding to tree one element at a time 121 | 7b6dbc7 FIX: if wep lossy collision detected, extension uncorrectly set causing wrong format to output 122 | 9e0c709 Dirty fix to remove update from loops 123 | a2b6a0a FIX: typo on file instructions 124 | 3994f4c FIX: height cannot be set 125 | 691f5c1 FIX: Resize can't set more than 9 resize sizes. Changed tiff to tif in extensions lists 126 | 58dcfb5 FIX: Warning msg fails convert 127 | 128 | 129 | 130 | V2.0.0 131 | ======= 132 | f7d20f5 - 2013-10-22 : Small fixes for V2.0.0 release 133 | 8572084 - 2013-10-21 : FIX: Preview trows error if ora is selected as output format. 134 | 5abe180 - 2013-10-21 : FIX: Label size selected, shows 1 size as selected when starting up 135 | ed12dee - 2013-10-18 : FIX #15 : Horizontal GUI: Version bump to 2.0.0 136 | 4232f74 - 2013-10-18 : FIX #19 : Add Label fro sizes selected 137 | 4695769 - 2013-10-18 : FIX #31 : Refresh output size on file load 138 | e1fd550 - 2013-10-18 : UPDATE: webp lossless options updated 139 | fe8dc3b - 2013-10-17 : FIX: uncommented exec line for ORA output ADD: webp extension to read extensions 140 | c8e3c2f - 2013-10-17 : FIX #26 : Add preview button to finetune output before the final run 141 | 10172d7 - 2013-10-17 : FIX: Make height same as width if there is no equivalent size in list 142 | 586c294 - 2013-10-17 : FIX #24 : Make ORA and Webp output available 143 | c559650 - 2013-10-17 : ADD: ORA support New pBarControl, manages creation, update, text and forget operation of progress bar 144 | 562780e - 2013-10-16 : FIX #25 : Make slider values change depending on format 145 | 21aea82 - 2013-10-16 : FIX: error if no resize selected ADD: function to control quality depending on extension 146 | 8a96e38 - 2013-10-16 : FIX: convert uses same function to get sizes as the tree list, user will view exactly waht the convert function will use 147 | b78f024 - 2013-10-16 : FIX: final dimensions miss by a pixel FIX: Final size will NEVER be bigger than the width or height given by the user. Width and height are the limit. 148 | 9b95835 - 2013-10-15 : Alters #28 TreeAlterValue reorganized to read a value a write to another key in dict and treeview. FIX: getOutputName now returns a string 149 | fcd3069 - 2013-10-15 : FIX: #28 Add visual cue for overwrite files 150 | 02720f0 - 2013-10-15 : FIX #22 #15 Resize if selected folder tested. GUI horizontal Ok Fix: Total files not updating after adding files. 151 | f777d49 - 2013-10-15 : FIX #21 Use global array to keep widget names 152 | c6ea8e9 - 2013-10-14 : FIX: Always return size list in the order the user expects 153 | bef8601 - 2013-10-14 : FIX: Return sizes list with simple format. 154 | f0b95b7 - 2013-10-14 : FIX: Artscript does not ignore user supplied width and height 155 | 62e3c1d - 2013-10-14 : FIX: Add output size column. It is not complete honest at the time as it shows enlargments (not yet supported) 156 | d071b2c - 2013-10-11 : FIX: Correct display of swatches declared 157 | caf0d09 - 2013-10-11 : FIX: Ora width and height reversed. Id column resized 158 | 97dc4a5 - 2013-10-11 : FIX: Force range if tiles map is less than total of files 159 | f406e1b - 2013-10-10 : UX: improvements GUI appears as earlier as possible CODE: moved around some functions so improve speed 160 | aa584fe - 2013-10-10 : Recoded getFilesTotal and set fc counter as a global counter 161 | bfbaddf - 2013-10-10 : FIX: Filelist scrollbar trows error FIX: File filter would allow extensions ending in any character after the expected extension CODE cleanups 162 | 048e888 - 2013-10-10 : CODE: Move variables to a proc in preparation to using an array 163 | a790220 - 2013-10-10 : Small code cleanup. 164 | b43cd21 - 2013-10-10 : FINISH: moving gui constructs inside procs 165 | a23853d - 2013-10-10 : FIX: Status pane declared as proc 166 | b7698fe - 2013-10-10 : FIX: Output panel, suffix an prefix called as procs 167 | ed35a9c - 2013-10-10 : FIX: middle panel and tabs called as procs 168 | 8263e9e - 2013-10-10 : FIX: gui make watermark gui a function 169 | 00082a4 - 2013-10-10 : FIX: Set theme to clam only if supported 170 | be872b0 - 2013-10-10 : FIX: top panel to function 171 | 35568d1 - 2013-10-10 : FIX: Code clean up. write imagemagick functions only once 172 | ba0ebe5 - 2013-10-10 : FIX: TODO make identify a function 173 | 4976834 - 2013-10-10 : USe namespace prefix instead of global declaration for hasgimp* 174 | 97df074 - 2013-10-10 : Rename: namespace atku to artscript 175 | 438aa58 - 2013-10-10 : CODE FIX: Remake parse option code to be easier to understand Moved to a separate function also 176 | 4751ecc - 2013-10-09 : FIX: User presets are always called in global namespace FIX: Load another preset. # TODO Back to defaults 177 | ec50bbf - 2013-10-09 : FIX: Hide dot files in linux 178 | 00d8819 - 2013-10-09 : Tweak unsharp methods on artscript 1 (softer) 179 | 9fc2ba4 - 2013-10-09 : FIX: Artscript1 Crash if presets file present but empty or fully commented out 180 | 3919ac6 - 2013-10-09 : Fixes #16 : Check if list of presets its empty, return if it is 181 | 3bc0ae8 - 2013-10-09 : FIX: suffixes moved to the top to allow user settings FIX: Default suffix position is empty on the top, not the bottom as is unnatural FIX: SVGparser checks the firs 30 lines for the wxh values. 182 | 7022eb6 - 2013-10-08 : FIX: Correct output for files nested in folders FIX: parsing of files with spaces 183 | 977d791 - 2013-10-08 : FIX: Do not fail if file has svg ext but it is not one. 184 | 734d9c2 - 2013-10-08 : ADD: SVG parse instead of Inkscape call as it is unreliable to get the true sizes and really slow 185 | 622faf1 - 2013-10-08 : FIX: size counter does not reset after 1st image 186 | 03f250f - 2013-10-08 : added comment with future high quaility downscaling resize op It produces supreme quality at the cost of speed 187 | ccf6c0f - 2013-10-08 : Improved filter and unsharp methods. 188 | 9d27d27 - 2013-10-08 : FIX: Counter reset is -1 not 0. Now progress bar grows from none to fill 189 | 95d1e88 - 2013-10-08 : FIX: Output size now returned correctly 190 | f1643b9 - 2013-10-08 : FIX: Set suffix and prefix empt by default ADD: Control + Click to edit comboboxes. Also Right click works 191 | 86fcd80 - 2013-10-08 : FIX: Do not delete from tree, but detach. This fixed an error if one deleted a file and then altered the tree values. Also allows for later reinsertion of deleted files 192 | 791c74e - 2013-10-08 : FIX: Removed xcf thumbnail generation. its super SLOW 193 | 10c3dd0 - 2013-10-08 : FIX: Progress bar now counts properly tmp files 194 | caf77be - 2013-10-08 : ADD: unsharp and colorspace changes to Artscript 1 195 | 57f5e05 - 2013-10-08 : FIX: no size suffix for single resize FIX: Progress bar calculations 196 | fda9b2c - 2013-10-07 : FIX: Get final size ourselves instead of trusting imagemgick. this of course makes imposible to get dissorted images. 197 | b84ae8f - 2013-10-07 : FIXED small error that prevented convert to run. A typo 198 | 39e4ffe - 2013-10-07 : Added legacy preset file loader 199 | e23785d - 2013-10-07 : Updated Watermark generation command. Dropdown blur looks better now 200 | 4d603c0 - 2013-10-07 : Code organization a cleanup 201 | bfaa18a - 2013-10-07 : ADD: Convert functionality 202 | b424732 - 2013-10-07 : Added convert caligra inkscape and gimp function Moved parent/child checkboxes functions upper in the stack 203 | c194a69 - 2013-10-07 : Add. Get sizes for output function small check in getsizes from widget. 204 | 5178a0d - 2013-10-07 : Add: watermark function working Fixed blur values Fixed dimensions of tmp images Added margin fro image and text. Fixed image opacity and blending modes. 205 | b87a63c - 2013-10-06 : Remove "safe" variable 206 | 9750e6e - 2013-10-06 : FIX: outputname and suffix checkbox behaviour. Now output name column updates if suffix, prefix, format or allow rewrite are changed. 207 | 506bb2d - 2013-10-05 : FIXED borked push 208 | a3c2919 - 2013-10-05 : Merge branch 'dev' of https://github.com/vanyossi/artscriptk into dev 209 | 1a60f1e - 2013-10-05 : UPDATED: Readme files 210 | 1542bde - 2013-10-05 : UPDATED: Readme files 211 | fbd1b76 - 2013-10-05 : ADD: adapt width and height columns depending on type of size selection. If percentage remove height value 212 | 975ffbe - 2013-10-05 : FIX: validation to resize comboboxes 213 | 3b978d7 - 2013-10-05 : ADD: Allow overwrite option. Artscript by default tries to avoid overwritting adding a numbered suffix. FIX: Changing format extension now updates the output name column 214 | 113d1f9 - 2013-10-05 : FIX: Fixed function of add a suffix in case of collition 215 | 80b3795 - 2013-10-05 : FIXED Bugs in resize checkbox behavior Added GUI for quality settings Other code fixes for dealing with progressbars 216 | 4f7a08c - 2013-10-04 : ENHANCED/ FIX resize interface and value sets 217 | 095c924 - 2013-10-04 : ADD: Resize widget interface with behaivour for multiple sizes 218 | 752004c - 2013-10-04 : FIX: for checkbox proc to function, checkbox variable must be declared first 219 | f1f3131 - 2013-10-04 : FIX: Now itspossible to define a swatches list for wm 220 | a29f576 - 2013-10-04 : FIX: All watermark checkboxes in sync 221 | 509a178 - 2013-10-03 : ADD: Suffix and prefix select options FIX: Output function simplified. 222 | da782a5 - 2013-10-03 : FIX: Color selector uses one canvas, swatches function set and backdrop color gets calculated based on luma contrast 223 | 9b9a897 - 2013-10-03 : Added coments and TODO items 224 | cce4b9e - 2013-10-03 : Watermark paste from artscript 1 225 | 145ebd6 - 2013-10-02 : FIX: Watermark GUI usability improved. 226 | 7b84f48 - 2013-10-01 : FIX: watermark text scale steps ADD: window icon loader, place artscript icon in the same dir as the execution script to view the icon 227 | 042f864 - 2013-10-01 : FIX: Error when file generates a thumbnail. for jpg png original item value deleted. 228 | 3af9b3f - 2013-10-01 : GUI: added scale widgets for opacity 229 | 5a27081 - 2013-10-01 : ADD: WAtermark text combobox can be edited using right click 230 | 4beb26c - 2013-10-01 : Rename extension header to "ext" Add TODO items 231 | d9f0090 - 2013-10-01 : Added code comments 232 | 4a117f6 - 2013-10-01 : Now the user can edit the input file list. Add: use the button at the top Delete: select the entries you wish to remove. 233 | 00dcbd2 - 2013-10-01 : ADD: scroll trough tabs in notebook FIX: Canvas should react only to left button 234 | a6994b7 - 2013-10-01 : GUI: Watermark Style elements added 235 | 398a2d7 - 2013-10-01 : BUGFIX: Protect files with white space when inserting to main tree 236 | f1a1dcf - 2013-10-01 : BUGFIX: Image watermark list only create a pair {name} {path} list instead of creating 2 lists 237 | 622f59b - 2013-10-01 : Minor code reorganization 238 | 57d923e - 2013-10-01 : Validate function now accepts arguments to add files to main dict This allows to call it for example to add files from events 239 | 8f3d0ed - 2013-09-30 : GUI adjustments and organization 240 | 2ba163d - 2013-09-30 : GUI reorganization and cleanup 241 | 81c30fa - 2013-09-30 : BUGFIX: Don't call $program --version as it is very slow to load look for files in path using wich. 242 | 867d3a8 - 2013-09-30 : BUGFIX: Get canvas size by selecting the first layer on multilayer xcf 243 | 631c1ee - 2013-09-30 : FIX: Possible permanent loop if convert unable to make thumbnail FIX: Gimp caused infinite loop, path creation flawed was causing it FIX: Added complete gimp conversion to get preview. It's slow 244 | dd89a9b - 2013-09-30 : MINOR FIX: increase size of image frame to compensate margins 245 | 71a6348 - 2013-09-30 : ADDED. artscript2 test file 246 | 5cfea89 - 2013-09-30 : MINOR fix: checkbox ordering 247 | da2f031 - 2013-09-24 : BUGFIX: Image WM checkbox only available if image path is set 248 | 249 | 250 | 251 | 252 | --------------------------------------------------------------------------------