xournal-0.4.8/0000755000175000017500000000000012353734664012660 5ustar aurouxaurouxxournal-0.4.8/depcomp0000755000175000017500000005601612177675036014246 0ustar aurouxauroux#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xournal-0.4.8/ChangeLog0000644000175000017500000002000612353733120014412 0ustar aurouxaurouxVersion 0.4.8 (June 30, 2014): * Features: - option to auto-save documents and recover auto-saves (after Edward Yang, Aiwarrior, Timo Kluck) - new Export to PDF code using cairo (and config option to enable legacy code) - horizontal view mode - improved touchscreen handling - pencil cursor option (patch by Luciano Siqueira) - added "new pages duplicate background" option (new default is false) - updated Windows build and packaging instructions * XInput device handling: - ignore events from non-drawing devices by default (ignore_other_devices) - "touchscreen as hand tool" option (after Rumen Zarev and Daniel German) - "pen disables touchscreen" option; dialog box to designate touch device - tweaks to xinput event processing for touchscreens * Bugfixes: - generate cursors from pixbufs (fixes a Win32 bug) - work around Win32 bug: refuse paste if mismatched format - fix configure.in for automake-1.13 (Florian Bruhin, Andreas Huettel) - smoother icons for eraser and shapes buttons (by Colin Macdonald) - fix a cross-platform g_basename() issue (after Daniel German) - bugfix for file paths with non-English characters in Win32 - add some margin around lasso selection rectangle (after Niklas Beisert) - warn for fontconfig cache generation in Win32 * Translations: - Chinese (simplified) translation (by Mutse) - updated German translation (Stefan Holtzhauer) - Polish translation (by Mis Uszatek) - Chinese (traditional) translation (William Chao) - Japanese translation (by Hiroshi Saito) Version 0.4.7 (July 4, 2012): - insert image tool (based on patches by Victor Saase and Simon Guest) - renamed "Journal" menu to "Page" - paste images and text directly from and to other applications - lasso tool (based on patch by Ian Woo Kim) Version 0.4.6 (May 22, 2012): - win32 portability code (contributed by Dirk Gerrits) - fix bug in PDF export code on 64-bit systems (patch by Robert Buchholz) - fix hand tool bug when exiting canvas (#2905711) - Italian translation (Marco Poletti), German translation (Stefan Lembach) - Spanish translation (Alvaro), Brazil Portuguese translation (Marco Souza) - fix save bug with text boxes containing > 4095 characters - Czech translation (David Kolibac), Dutch translation (Timo Kluck) - fix crash upon unplugging input devices - change close dialog box default to "save" (patch by Kit Barnes) - option to force PDF background rendering via cairo (slower but nicer) - wrapper for missing GdkPixbuf rendering function in newest poppler - disable GTK+ XInput bugfix by default (#3429416) - fix linker flags (#3208984); evdev coordinate fix (#3244118) (Timo Kluck) - specify license version: GPL v2 or later - fix 1.#J coordinates from win32 xoj files Version 0.4.5 (Oct 2, 2009): - bugfixes for GTK+ 2.16/2.17 issues with xinput events - various minor UI bugfixes - gettext internationalization (contributed by David Planella) - Catalan translation (by David Planella), French translation - use poppler instead of pdftoppm to render PDF backgrounds (after patches by Mike Ter Louw and Bob McElrath) - various improvements to UI and to key bindings (including patches by Bob McElrath and Lu Zhihe) - use gtk-print instead of libgnomeprint for printing - custom color chooser (patch contributed by Alex Ray) - option to have tablet buttons toggle the mapping rather than draw - paper color chooser (after a patch by Ole Joergen Broenner) - remove binary installer (due to binary incompatibilities) - UPDATED DEPENDENCIES: need gtk+ 2.10, poppler-glib 0.5.4 Version 0.4.2.1 (Mar 27, 2008): - bugfix for #1926757 (crash upon pasting variable-width stroke) - bugfix: set ruler/recognizer setting to default upon switching tools Version 0.4.2 (Mar 25, 2008): - bugfixes for X.org 7.3; allow XInput and core events in reverse order - resize selection (patch contributed by Andy Neitzke) - pressure sensitive pen (variable stroke width) (patch by Andy Neitzke) - geometric shape recognizer (after an idea by Lukasz Kaiser) (see manual) - clean up compiler warnings (patch contributed by Danny Kukawka) Version 0.4.1 (Sep 15, 2007): - bugfix: compatibility with new versions of pdftoppm (thanks to V. Ciancia) - GTK+ 2.11 event processing bugfix - minor bugfixes: hand tool, handling of filenames containing '&' - desktop and MIME files (thanks to Mathieu Bouchard) + updated installer - config options: left-handed scrollbar (contributed by Uwe Winter), hide some menu items (customizable in config file), auto-save preferences Version 0.4.0.1 (Sep 3, 2007): - bugfixes for GTK+ 2.11 behavior (thanks to everyone who reported bugs) Version 0.4 (Aug 15, 2007): - text tool (handles most TrueType and Type1 fonts) - font selection dialog and button - keyboard mappings (arrow keys) - menu mnemonics and shortcuts (suggestions by Jean-Baptiste Rouquier) - more responsive hand tool - bugfix for GTK+ 2.11 XInput behavior (thanks to Robert Gerlach) - various minor bugfixes and enhancements Version 0.3.3 (Jan 31, 2007): - bugfix: upon loading a new file, zoom is set to default startup zoom - config option to allow input from a mouse or other core pointer device - config file entry to specify a default location for open/save (patch contributed by Andy Neitzke) - config file entries to customize visibility and position of toolbars - icon (thanks to Michele Codutti) Version 0.3.2 (Nov 25, 2006): - preferences file and Save Preferences command - extra customization (via preferences file) - minor UI changes (patch contributed by Eduardo de Barros Lima) - hand tool (partially contributed by Vincenzo Ciancia) - a few bugfixes in rendering of bitmap backgrounds Version 0.3.1 (Aug 3, 2006): - fixed a file format bug on systems with non-standard numeric locale (bug reported by Gert Renckens) Version 0.3 (Jul 23, 2006): - new PDF rendering engine: export to PDF generates optimized files (smaller and more accurate) - export to PDF handles PDF backgrounds (up to PDF-1.4) natively (without conversion to bitmap) - default thickness of erasers and highlighters slightly increased - zoom dialog box with input box and "fit to page height" option - file format documentation added to the user's manual Version 0.2.2 (Jun 5, 2006): - mapping of tools to stylus buttons (the options menu has new entries to allow the mapping of buttons 2 and 3 to arbitrary tools; the tools menu and toolbar affect the settings for button 1) (see manual) - moving selection by drag-and-drop works across page boundaries - vertical space tool can move items to next page (only when the entire block being moved has crossed the page boundary; items on the new page are not moved) - "apply to all pages" is now a toggle button affecting the behavior of paper size, color, and style commands - change in the behavior of the selection upon switching between tools Version 0.2.1 (Jun 3, 2006): - recently used files listed in file menu - can change color or thickness of pen strokes in selection - function to apply paper style to all pages - can specify on command line a PDF file to annotate - suggest a derived file name for PDF annotation - speed up switching between pages - fixed a bug in XInput initialization (thanks to Luca de Cicco) - fixed a bug in print ranges (thanks to Mathieu Bouchard) - fixed a refresh bug in rescaling bitmap backgrounds Version 0.2 (Jan 29, 2006): - PDF file annotation using xpdf's pdftoppm (PDF backgrounds updated asynchronously at all resolutions) - PS/PDF backgrounds (as bitmaps at fixed resolution) using ghostscript - option to antialias and filter bitmap backgrounds when zooming - option to emulate eraser tip with right mouse button - binary installer allows non-root installation without compiling - full-screen mode (patch contributed by Luca De Cicco) Version 0.1.1 (Jan 5, 2006): - two bugfixes - backward compatibility with GTK+ 2.4 Version 0.1 (Jan 2, 2006): initial release xournal-0.4.8/BUILD-NOTES.win320000664000175000017500000000740412341721545015267 0ustar aurouxaurouxWin32 compilation/installation/packaging notes ============================================== (Thanks to Dirk Gerrits for initial instructions on which these are based) This briefly describes the main steps needed to build and package Xournal on Windows, for developers. For end users, downloading a pre-built binary package is recommended; see README.win32 for end user instructions. 1. Download the development tools and libraries needed: - Download and install MSys and MinGW. (https://sourceforge.net/projects/mingw/files/) If using the MinGW installer, make sure to include development tools like autoconf, automake, libtool, and libraries gettext and zlib. If the installer doesn't place MinGW in the right location, edit \msys\1.0\etc\fstab to add a line mounting the MinGW installation directory under /mingw (e.g. "c:/mingw /mingw") or adjust instructions below as appropriate. Builds and installs of source code below are done within MSys, usually with configure --prefix=/mingw; make; make install - Download and install (in your MinGW directory) the GTK+ 2.x win32 all-in-one bundle (runtime + developer files + dependencies) (http://www.gtk.org/download/win32.php) - Download and install (in your MinGW directory) the libart_lgpl and libgnomecanvas libraries (binary + dev packages) (http://ftp.gnome.org/pub/gnome/binaries/win32/) - Download Poppler source (http://poppler.freedesktop.org/), build and install it (configure --prefix=/mingw, make, make install) This is the trickiest step. Make sure poppler-glib is built successfully. (compile with prefix=/c/mingw/ or as needed for install) Various side packages may be needed (I had to build and install libjpeg, libpng, libtiff, and libopenjpeg-1.5.0) to enable all poppler features, though may not be crucial for xournal. 2. Build a custom version of the libgdk-win32 library (optional) Building a custom version of the GDK library alleviates a bug where the drawing area becomes unresponsive to touch/mouse/... immediately after a pen stroke (until the user clicks somewhere outside of the drawing area), because GDK discards core pointer events sent to an xinput-aware window, but non-tablet devices do not generate any other events. Download the latest GTK+ 2.x sources, e.g. http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.23.tar.xz In gdk/win32/gdkinput.c, comment out (add // in front) or delete line 434: _gdk_display->ignore_core_events = new_proximity; Then configure --prefix=/mingw; make; make install 3. Compile Xournal: - run autogen.sh, then configure. If you need internationalization, make sure it is set in config.h (ENABLE_NLS = 1). If you want the language files to be found directly in a "flat" directly structure, also set PACKAGE_LOCALE_DIR to "share/locale/" in src/Makefile. - compile (make) and install (make install). 4. The distribution tree for a self-contained binary package consists of: - xournal.exe, pkg-readme.win32 (renamed to readme.txt) - the pixmaps/ and html-doc/ directories - all DLLs needed (test on a clean system to make sure all are there) (probably: freetype, intl, libart_lgpl, libatk, libcairo, libfontconfig, libgdk_pixbuf, libgdk-win32, libgio, libglib, libgmodule, libgnomecanvas, libgobject, libgthread, libgtk-win32, libjpeg, libpango, libpangocairo, libpangoft2, libpangowin32, libpng, libpoppler, libpoppler-glib, zlib; most likely also libexpat, libgailutil, libtiff, ...) - the locale files in share/locale/ (share/locale/.../LC_MESSAGES/*.mo) (package the .mo files for gdk-pixbuf, glib20, gtk20, and xournal) - gtk files: lib/gtk-2.0/* - fontconfig files: etc/fonts/* Test on a clean system: all DLLs are found; icons for the toolbar are found; translations work; text fonts work. xournal-0.4.8/xournal.glade0000664000175000017500000047762112353616655015370 0ustar aurouxauroux True Xournal GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-new True True Annotate PD_F True True gtk-open 1 0.5 0.5 0 0 True gtk-open True True gtk-save True True gtk-save-as True True True Recent Doc_uments True True 0 True True 1 True True 2 True True 3 True True 4 True True 5 True True 6 True True 7 True True True Print Options True True gtk-preferences 1 0.5 0.5 0 0 True gtk-print True True _Export to PDF True True True gtk-quit True True _Edit True True gtk-undo True True gtk-redo True True True gtk-cut True True gtk-copy True True gtk-paste True True gtk-delete True True _View True True _Continuous True True True Horizontal True True viewContinuous True _One Page True True viewContinuous True True Full Screen True False True True _Zoom True True gtk-zoom-in True True gtk-zoom-out True True gtk-zoom-100 True True Page _Width True True gtk-zoom-fit 1 0.5 0.5 0 0 True _Set Zoom True True True _First Page True True gtk-goto-first 1 0.5 0.5 0 0 True _Previous Page True True gtk-go-back 1 0.5 0.5 0 0 True _Next Page True True gtk-go-forward 1 0.5 0.5 0 0 True _Last Page True True gtk-goto-last 1 0.5 0.5 0 0 True True _Show Layer True True gtk-add 1 0.5 0.5 0 0 True _Hide Layer True True gtk-remove 1 0.5 0.5 0 0 True _Page True True New Page _Before True True New Page _After True True New Page At _End True True New Pages Keep Background True True _Delete Page True True True _New Layer True True Delete La_yer True True _Flatten True True True Paper Si_ze True True Paper _Color True True _white paper True True True _yellow paper True True papercolorWhite True _pink paper True True papercolorWhite True _orange paper True True papercolorWhite True _blue paper True True papercolorWhite True _green paper True True papercolorWhite True other... True NA True True papercolorWhite True Paper _Style True True _plain True True True _lined True True paperstylePlain True _ruled True True paperstylePlain True _graph True True paperstylePlain NA True True paperstylePlain True Apply _To All Pages True False True True _Load Background True True gtk-open 1 0.5 0.5 0 0 True Background Screens_hot True True True Default _Paper True True Set As De_fault True True _Tools True True _Pen True True True _Eraser True True toolsPen True _Highlighter True True toolsPen True _Text True True toolsPen True _Image True True toolsPen True True _Shape Recognizer True False True Ru_ler True False True True Select Re_gion True True toolsPen True Select _Rectangle True True toolsPen True _Vertical Space True True toolsPen True H_and Tool True False toolsPen True True _Color True True gtk-select-color 1 0.5 0.5 0 0 True blac_k True True True _blue True True colorBlack True _red True True colorBlack True _green True True colorBlack True gr_ay True True colorBlack True True light bl_ue True True colorBlack True light gr_een True True colorBlack True _magenta True True colorBlack True _orange True True colorBlack True _yellow True True colorBlack True _white True True colorBlack True other... True NA True True colorBlack True Pen _Options True True _very fine True True True _fine True True penthicknessVeryFine True _medium True True penthicknessVeryFine True _thick True True penthicknessVeryFine True ver_y thick True True penthicknessVeryFine True Eraser Optio_ns True True _fine True True True _medium True True eraserFine True _thick True True eraserFine True True _standard True True True _whiteout True True eraserStandard True _delete strokes True True eraserStandard True Highlighter Opt_ions True True _fine True True True _medium True True highlighterFine True _thick True True highlighterFine True Text _Font... True True gtk-select-font 1 0.5 0.5 0 0 True True _Default Pen True True Default Eraser True True Default Highlighter True True Default Te_xt True True Set As Default True True _Options True True Use _XInput True False True _Pen and Touch True True _Eraser Tip True False True _Pressure sensitivity True False True Buttons Switch Mappings True False True _Touchscreen as Hand Tool True False True Pen disables Touch True False True Designate as Touchscreen... True False True Button _2 Mapping True True _Pen True True True _Eraser True True button2Pen True _Highlighter True True button2Pen True _Text True True button2Pen True _Image True True button2Pen True Select Re_gion True True button2Pen True Select _Rectangle True True button2Pen True _Vertical Space True True button2Pen True H_and Tool True False button2Pen True True _Link to Primary Brush True True True _Copy of Current Brush True True button2LinkBrush NA True True button2LinkBrush True Button _3 Mapping True True _Pen True True True _Eraser True True button3Pen True _Highlighter True True button3Pen True _Text True True button3Pen True _Image True True button3Pen True Select Re_gion True True button3Pen True Select _Rectangle True True button3Pen True _Vertical Space True True button3Pen True H_and Tool True False button3Pen True True _Link to Primary Brush True True True _Copy of Current Brush True True button3LinkBrush NA True True button3LinkBrush True True Progressive _Backgrounds True False True Print Paper _Ruling True False True Legacy PDF Export True False True Autoload pdf.xoj True False True Auto-Save Files True False True Left-Handed Scrollbar True False True Shorten _Menus True False True Pencil Cursor True False True True A_uto-Save Preferences True False True _Save Preferences True True _Help True True gtk-index True True _About True 0 False False True GTK_ORIENTATION_HORIZONTAL GTK_TOOLBAR_ICONS True True True Save gtk-save True True False False True True New gtk-new True True False False True True Open gtk-open True True False False True True True True False True False False True Cut gtk-cut True True False False True True Copy gtk-copy True True False False True True Paste gtk-paste True True False False True True True True False True False False True Undo gtk-undo True True False False True True Redo gtk-redo True True False False True True True True False True False False True First Page gtk-goto-first True True False False True True Previous Page gtk-go-back True True False False True True Next Page gtk-go-forward True True False False True True Last Page gtk-goto-last True True False False True True True True False True False False True Zoom Out gtk-zoom-out True True False False True True Page Width gtk-zoom-fit True False False False True True Zoom In gtk-zoom-in True True False False True True Normal Size gtk-zoom-100 True True False False True True Set Zoom gtk-find True True False False True True Toggle Fullscreen True fullscreen.png True True False False False True 0 False False True GTK_ORIENTATION_HORIZONTAL GTK_TOOLBAR_ICONS True True True Pen Pencil True pencil.png True True False False False True True Eraser Eraser True eraser.png True True False False buttonPen False True True Highlighter Highlighter True highlighter.png True True False False buttonPen False True True Text Text True text-tool.png True True False False buttonPen False True True Image Image True gtk-orientation-portrait True True False False buttonPen False True True Shape Recognizer Shape Recognizer True shapes.png True True False False False True True Ruler Ruler True ruler.png True True False False False True True True True False True False False True Select Region Select Region True lasso.png True True False False buttonPen False True True Select Rectangle Select Rectangle True rect-select.png True True False False buttonPen False True True Vertical Space Vertical Space True stretch.png True True False False buttonPen False True True Hand Tool True hand.png True True False False buttonPen False True True True True False True False False True Default Default True recycled.png True True False False False True Default Pen Default Pen True default-pen.png True True False False True True True True False True False False 24 True Fine Fine True thin.png True True False False False False 24 True Medium Medium True medium.png True True False False buttonFine False False 24 True Thick Thick True thick.png True True False False buttonFine False False True True True False False buttonFine False True True True True False True False False True Black Black True black.png True True False False False False True Blue Blue True blue.png True True False False buttonBlack False False True Red Red True red.png True True False False buttonBlack False False True Green Green True green.png True True False False buttonBlack False False True Gray Gray True gray.png True True False False buttonBlack False False True Light Blue Light Blue True lightblue.png True True False False buttonBlack False False True Light Green Light Green True lightgreen.png True True False False buttonBlack False False True Magenta Magenta True magenta.png True True False False buttonBlack False False True Orange Orange True orange.png True True False False buttonBlack False False True Yellow Yellow True yellow.png True True False False buttonBlack False False True White White True white.png True True False False buttonBlack False False True True True False False buttonBlack False True True True True False 2 34 32 True False True False False True True True False True False False True True True False True True True True True False False False False 0 False False True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT 0 True True True False 0 True Page False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True Set page number True 1 0 True GTK_UPDATE_ALWAYS True False 1 1 1 1 0 0 0 False True True of n False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 6 False True True Layer: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False True 4 False True True False 0 True True 0 False False True Set Paper Size GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 True Standard paper sizes: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 10 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True A4 A4 (landscape) US Letter US Letter (landscape) Custom False True 5 True True 10 True True True False 0 True Width: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 10 False False True True True True 0 True * False 5 0 True True True Height: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 10 False False True True True True 0 True * False 5 0 True True True cm in pixels points False True 8 False True 8 True True True About Xournal GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END True xournal.png 0.5 0.5 0 0 12 False True True Xournal False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 False False True Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ False False GTK_JUSTIFY_CENTER False False 0.5 0.5 20 10 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True Set Zoom GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-apply True GTK_RELIEF_NORMAL True -10 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 8 True False 2 True False 0 4 True True Zoom: True GTK_RELIEF_NORMAL True False False True 0 False False True True 1 0 True GTK_UPDATE_ALWAYS False False 100 10 1500 5 0 0 5 False True True % False False GTK_JUSTIFY_LEFT False False 0.479999989271 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False True 0 False False 4 True True Normal size (100%) True GTK_RELIEF_NORMAL True False False True radioZoom 0 False False 4 True True Page Width True GTK_RELIEF_NORMAL True False False True radioZoom 0 False False 4 True True Page Height True GTK_RELIEF_NORMAL True False False True radioZoom 0 False False 0 False False xournal-0.4.8/html-doc/0000775000175000017500000000000012353741677014373 5ustar aurouxaurouxxournal-0.4.8/html-doc/screenshot.png0000664000175000017500000013414311773657534017267 0ustar aurouxauroux‰PNG  IHDRƒa„h7ÍgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœì½y¼&Euÿÿ9§–î~žç.3w†EYâ"«¢¸ ¸ Ƹ€ò5_Kb”¯n?¾Qã1ˆ5¿£FAD DP\@Ã2û½÷Yº»ªÎùýñÜ{¹Ü¹Ã,0 0ý~ÍëÎÓÝÕuNõSO:§ª«è ƒBCCCCCCøú;_ÛÑj<ü¸µ²[˜ò_~tûvÕ¤¡¡¡¡áa†*ˆ†¿zΫìÏ~ö3m{×6gH³Ùm$iÑ‹\PÈüì `ˆŠ I3–H¤0 µIa!`#¢ÄI GÇS‘˜Ô° ¤ˆŠèm ™•éÄŨ¢²31̴ֽ§ª~Œ‘¬€¸œ\ßbP©xfË„¾SK)dœ§’=¦ÛåDg„MOGF¼ë³8­*5”\-ÕAVF×ëßÕ·ý=¤ÏÅT’dU{©ç*—Š`u)I/ºŽ¯¶ŸJ—œ’'î˜\|®£ƒkg®…©É:[“"Õ4 ­’±™ô¢NcOÖÛÐØ~Pß/c–BmÅ&[¨êÜ·S+L"5jUjËÚÓ”§”Ø´\>h´íGE8²osŒ ±°é˜-¥*S¹¥Ò—±V‹¡}õÁ†¢êƒSJ¢\M‡;‹l²¬Ä^=˜î¦´$£2ˆXkÅfŒ5¨qNb$""‚…snP&K‘:÷vrÀÌìX,’*E`0A UH"b(@ €jŒµ*†E"¨U£H)‘¨TED$€ÌV9%@ªª¤HUYU¬„áE¢35U ÀðVJ !-¬öá>-v¶Ú+æ×z˜ý‘ê= ;Cë°Õÿ•7ÿø÷sÐA½òôSü³B ªÊJBjhÆ3vf¡sìlÎ?¾¯EcŒvN¶£Oü«s^°%~¦ª>þœ¯nÿô÷J9c‰u¦ã¿0—¡eUUM1N¯uhôQó³ÄÐǤ Nlг]f4 Á( ‚*Š!Áˆ’Z1P©ER6F(Åá4EJ6ù"QM‹ )Z#õ€Œ´œâŒ­1̪BTGuEá]&bwÚ¡ZWÙBI\G«$D×[æƒ1(=4´¹m}ŒÔŽƒ²H1Tª.ó2J#©ò%¦RB(Æ—W=ÕzùÒ¢ÔukÄäÖ–©ï«å•K„ÇØ–A`“[j‡X'iw:JÞmS ÛN±Ô‘=sÜ)ž%ƾØêÜÕZŽYORyã˜F4P &Òàž¼*¥˜eI2h÷,¨©asP"ëÆhÓwuŸ0FÉI–'ÊjÍM¥•IQÊçÝ:[ZŒÔ†úð#F–4jŒ-üÔt9hkaÚ¦bŸÜ*3èÔƒ,[Q®Xeûû¶LÝ\Ìû:ì;εl5UœŒD 18Ê´aM"6Y_ÎQå¤bRP0sQ†e¶–P¥ †,D؉”ØF'&EmdÇÙ" Jª–HY‰¥¨R)„Á”hèÿ’ªÐÐd3X‚€@ÃÐõ0J}1ÆFÁj·mƸ1à ;-Û±òQû¤s6›¬÷…sVÞ|ýûº½ÓÏ/ìœ%€  £Ó3–2øí/è–ð~‡Â.å"'⹫ó ñ½­2€Å¬ntyƇf© °"1±€ 2 )&C$‘„•UDIÊU˜ ÌC—\ê(.J´ÎDTˆÞ$!© %µ‰V0kçdQSÝ*˜´Yk|¿^ªUÅÝ:UÆš)A«î%M¶”S)¡_íVL'¡f›ÈˆÏƒadë°.ç‘‘Ñ ¦Öó€¬vüÒdXm;‚!Évr)uàÍÝbÛR 4ë¸ÌZêdÛ¹°¦ã—»’`mbåruÈÛû{´¬j¯M½Ú`¼†µR+'O¤6qŠª4õÚjgCUz*™È´ÄÌRБτŽ(HU‰†$NSÊŒ™ˆ1dÈÛ¹‰ÁשG¦¿¡j/é}í¦èÙÃGq ‚©Õ:nb°lr[Bå踇o¥‰~ÖM18E;›rØÓØ)WU½±¼§‰ƒ¬7j¥^fûýþ2´j[f‘ÄK¦f’*†ÕBŽª … Z0ªŒ1„0“&1P'NÄN’l©É±6E2†8©’pI€„ 2¤P$ÐpzX'-4)ˆTÀP) Ê AAD–™‘d¦{FŽuŽ7kŒ-üBcܰs²}â¡MØc¿Ãéó‰ ›Ð{ÒöïüŸÁµWÜÒØêîÄx—5Ù<'2ØâåM3÷ÜÈ7÷ü?ŒrA¬š†=Ë„$L¤ÿû/Þ}à~ù«×½<"ª: !¨Z¦dɦˆZS &q2Qk–PpÊ6Sª56‘ WA|ŒÖ{¯¡ÈÒ4…1W±¤vpI.µS•úGÂhg²ÛM” ¢ÍŒé-‹"-åuwºqËýš[¥­Áº1cë"iál°Ý¤RÆeÄÒÊTbaÛŠ>n­ð±'­d:¨Œæí‘”*Î×KŸ2¸„ɲè"óz[¦$™u•‰4H(8Ôí˜u‡Ð·ˆÞW¼aomLbœŒÖ°É )S «õjºA[ÉjJ«½oW¦J•‹ˆV9î$æ k¼Õ¾.mÉx°“erlã¸/ûeê ¤Ý´]4Õ¾í©ËÝxeY™âž9¼©[j»¶°ª\"š("Q— u½v°]ÖD“™¡Úe Ôeäh•\2Øc,jÄÀ•N(¨gÑÊIP"Q-×Aœ«MôBa CI( V†QRPRIÁ”š”y8-K™€Ð0H­sCÇJÀPÔ°ãHU ï«·ÁßË Ï F74ì”l_Ÿx RéܳéõW眰ñ½sAéEÓ˜‚žÉ¡}Ò9{ìwèlú{u¸yž’RÐp2‰®ýÝoÖýäªÁO¿Ñ¿þb½å‚ 7…TëWw×­ õÀÇÌñuU½ü[×dKŸüÔg¿*ÖI“~㲎íúŒŸÿüךô¾'§¨ÎºÂóUAJ@ÀL;§Ð¨ (3³1,jâgÿùëWýàºZT™T$J‚H‚$£l2¯ìybo´bveœRU±ÑhÙpŠÌ‘Y¡Î)iˆØmu:YýˆOÞçÞºÕ®®5D2Æ™RÊZRǾs-cÐ5‰xZ(Ô0 ³ÄŽÔc>ŽÐônÔî¤Ìi°06öÉ[<2jGöÌGöÎÝ8«1²ÄpËjîu¬]´3k;£>/FÂÈÒ|é„ëX3ÒÊ?¾ç¾­‘]Ù×JáÌM»ÖfµvË ¶­¶OývL5x꨸ŽÙ%¸QFá]È%Él¨È—’ÕIjÉU¬—ÒÛ±@¾´UæÖHìj¬EI7˜zƒŠTX+t÷´ûmoúצúÝ`ê¿ûõ*”«7ô:Õ“-ØHœ#ç|—‘v^ØQÏR»íÆG8óíåFv#Z&¼kNíŽkÊ3t Œv"d+òÎXÇ,·}jI$j™|e“¤ !‘!8aØ2qœ1’EtFUSK£s6ÔΨ&ë&i"#Æh$¨²X ƒ@ …2`þš ¨!” %U@H…‰À (c8okf †Ô0©ž›9Þ"¶fD§¡áÅ}Œû™õM]šžIO‹šp"Zyóõ‹å?œóI¿:ç„aq5ä‹ûÄ Ù7‰fí4.¹õ¿û‹}FzÅÞ¿5)—M_?5}÷†~9¹ä1»>á˜Î²=çryÎ1O:ù%Ϲäÿ}ócüËË_úÜW¿þ=çüÍÿ>pÿ}æMóš_¼TÚh2˜ ”Ê4|mDAd€¤ÊÄD ±B0¤D2Ìy&\NêÕ O”„†!ȨBÔ¤DF`:̽Âf<joaJ‘Rì³uIÔxø˜Ê¢Õ U-œgTf#¶2)ÕÌ-”†9H$Ûre탑S@¿ŠÕz^‘ï^I>µaEËt´;Út ªJÇZ¶´q—\jʬ…‹¶BlŠMJ™¦¶µ)tÙµGëC1ŒyH9é„àvAk²^?¢\µGÑ—=L ½¢-h•+ ¹;uÄù¬UH¡+6ZMíDuʳLúZ8’Ü×I-®Ê$HDÔê±' ì8OU¯tÆ&¯S©ïêÂÞ ¦8¦r0™¹Nâ.LTñ ˆFYÛª½Œ$_U«XsǹÂ2#ŽE¸tðàT*KêŠÍ}^æ½qñ®º¾¬¦A¶âà•7Ô¾-¦24BÙ$'[Õðv}ЉÙ:±]!Ë]7èÚÙe£BI‚eUZº™M51«[9õ•™:èà™ˆ°*2F ¬$LÄ@€‹Ìú¼ÉXH" #3ÃyÔÃÉÓ43Æ<Öaš òÌãùþñœ1ÞL¼ºñ‰vZ*>ñ¼ôªª“ß± ]ï çl"mŸtNï çÑ-ï8qîê|‡xVÐFãÄHC;ÌsjŒ•ûò«žþ׺ß<~Íž¡Ë5ÇZ(«5¿Yù‹¥>|’*Ô® gDlm‘bê íâh•‰ã¥Å˜§*DˆeNÜUÑj{®”™Qý´OE–˜¬"…£Ê˜— KÁ˜b«ä#—Ô ‹`Œ–š™£h†¤¤AÔ°a …R]›bë!Õ¹Ú©# ")…0ˆ$ VK&© X8ª‚ Æ HDÃA¡dÀ*ÃßèÌl¯{½¿´ L¶Ð3nƉvZ¶û8ñæØ¤O¼Ùà¹ô{ìwèÐÏ]š5ÃóËu¯2òl÷ŒNéìÑŠÝw{âáýþ í•+VV ⮚ï³üÈW?ú¹oÜíÀ'¹qá—ßö޽â¤ãîþÝ7OyÙsßú·ýÔ?ýÛ¢EzÊ?ºîgxâÑO:â†%¿ò»×†Þûž×¯^½þ^ÊŒ·üÕéÿsËeÿùýÏýçù‘D4,‚c…L€!UƒL4*ÁÆÄ’Ö¤6l%Ä(1„¨j-bŽ,ÏHUB@æ ¤V )H´¶%RgyîÛÆÎeâòΨ·­Ì‚ÏZì’Z²YrV"± Š,Šn ƒ ά®Ó€ 䣲dd´0~ltyîǘs®`7 ˜Ì8,gʹèÄŠ\azÌ,Í58'0ªI*ZqtÔzïØI¶œ‹%© ¶\6âWŒwVø|E«ØÛ·÷Ê‹=Ú#+ÚiO×™(m«cíhÇhVG°Fq8g"rDY4DÉó1F±Âމ,IƧû2•b°®éI¨Crj°ºLI䄾–wO÷dz®š–j:úƒzzî®Óqp[wzU7NK¸c}w}ßôjÓ×8-Œ§U/qb«ªù¨ C[LËpnxÂe£Ì{Z,Ëð(g:ζ ÊrÓah¶mœ$8XŽPKš‚-”lÁ̽SQ šZa"*kTUÊrgI©J4cMLL@ĉEœ(A ›¤BÇŒeoÈD¬¤`e&Ñð};‚ò¬·<üY°x˜z8`¼ùÙÔnØiÙ~ïo‘O¬›ð‰7J¶ðýó§=ö;tî.U3úø­÷Œcf¦Í> ‘jíÚ5ß¿ìÖªøÅ`ü×Xr§Y‘(OýµíÑÑ‘¥† ù§í´U5Æô£koæ÷¯_þ6€7¼æåEž¿á5§3gÂÃÈ žùôÃÿÏ_~à¿7TᘣŸøwï~ýŸ¼âƒ²È½ª¼óÜà#èv &šqJHfVH )$&2)TdªáÛ¡€w^Z£0¹„h Oœ:gÉ$g…(ubbªêJÒ€HE<u?);ã Z¹Œ£Ž±™Í2‹ä ŽIΟi*CY–v$9kÒÖ½Ö\$é8,ie-¨CKP—Y_câš\rÑúÌeˆâ²±:eL±'Q·¸,ZÙ0pýõE¢6ÈfÚòÂìvÍZ†²€±-·¤p˜iïmÜ£Šöž¸Ï²lÏA|Lnöj뻌Žg~ù’ÖXÌFÁR%J¬­€:)ŠiÆv]ñø'²®««¦Sor½¦¾ŠÖÓëc*çt[½fÝkÿ꽯ÍÉíVñ×g}xÍÚ ª23ÁTDE$¥ùêŠèÐlcÞº"ÆÌêCÀY óÌÉ >sé _ö¦ñ±ÎË_úÜyYÍúÄIA ä† Fщ!c8Î{­Sò¢¹“¹“ªëT3.¨6iPÖ¨cDf¤¬„I uQX [eVX›±sÖ¹Ls‡–ù˜úVAeß²¶‹ä³Ü Ê8=ˆ­*ã¢:â¬%YfH«N˲+³èóÄIT¼9¦Ü¢]ŒŒA¬£µm“‰M)SËE•ÕÂV³œ´Rãsää Ÿüˆ4-ulPY_hemÞÊ–xÓzÔHçqË:»ùÑNgt/oFr·¬ŒÅ)ë.Öt m&ñœáØ‘Së2vV™rêˆ*¯#rTbBwP±ÖU©‰Öq”~Iq°Vè6¢u!Öe¹²;ý;­CÝ»©·¾¯ëB?m²¶?9Õwƒî˜®W–½[§z·N¥•Óú»îÔm¬«úrw¬‘r¸`%›*°eË1ïäu Iu>ʘð#ä¢Ú"ÓLÉö¦GN(7I-6uB´p¾Ÿ”E²ÄѱŠ$6†‘Œr!)Ó j!uTB`±FR`a”YTVMއƒ½F@–l"CJ 6d‰,%å™ÁÒ{ÂH («.èzÏ7Æ[ôzqã7ì´ì`ŸxSãÄ[“ÿ=f¸}Ò9Ã7Œ‡cÆ+oþñ&Üiܳ1«ÈœÄɵkì®Ë~ï]m±ttbwbÚeÙ®×ûª5“q|jºÏlV͇‰Eä/þê}û?~ïsÏù‹=w[~æßþÃ[Ïþèù›?:ñ™Wÿà†ìŸÿú§~ä/ð¢ކªwö׿¹íüOþ¿ï~ïÇ‹•ç^³ºæ>ÿä§·xÚS !X½v}Y•E^Ì\6‰¢"IJê˜KUÆ V)EfNlTaˆÙdÉ…¨I%@˜¼1B&F¶A£e™êÁÛÄNÅ‹Zïª[Þ%¸$Á© \æ&w!ö}?ÂZêRײA+gÊ{©»ÄCx R&Ò¾+r˜SÑr&*[ËbŠlÀ2ÐÚ0 uȵ$M×Õˆ·•&oLE*6±:µÜN›T2$q2˜öÆȘñgòä #)T-7²6tc–í«ºT'×γ»LISUÖv²–CÉ¢vH=ŠÁ¶Sˆ)jK:#‰«Pf6:ʴΘ©,jeáó#¢V<°!°c¤*š)Kãðkɤ:Ô•DS¹ ªÝÐ7ƺПâVnExõ”Z÷¶SÅÀaùt`o—FÔœ ˜ ú9s çÓÒéºçM;9mùvhÇT¥ ŽKB$ 1¼`¡98˜àˆŒ˜ZbîXȦ`2£UJä5SfQ˜5……* ²)²+,H– %ˆ‚ƒDU¶Š„ÈÃ!… „”†³¼A{½µÎò¹&ã³_øÆw¿÷ãë®þ'6ôšW¿ô‹_¾ò³—|ãä—>÷OÏxQ·7øø§¿ôÞ]¼ç»¾çì×¼êô?Ñé§žø™‹¿rÝùô£¹ò»×ÍxãÎÇ\GæÏ_õ’ïÿð†ç½èu¯8é¸øÌ¯üûU—}ó‡/zá3gÒ „Ø(„%ZŠQ”MÊQTÊʉrf&X bX—$«ÈZ&Ds‹%¤,·‚#V1Ä1&““©Y‹X÷Um&®R:Ï ˜¼UUeÌ3®„½‰å¨w¡fµS<ȦRíhRÀ‰S[ú5[2Jš©F|2Æ%Žy,Œç }޾ |àú–¡*d[AmÈ+˜Åj¨<·bFå3f¶Ẩ…jï ûÜšdóq—ò˜ Æ.i Ê*#±UXB£·É†Žºµiš\f½¢/®m gGjtPÎD%0ûLm²É'%Y‚¤!+³~¬ª®*eF*Í…ªÐ“ÂçýÊVÕ5{¦@š)gÖE–žxÏÌÀ’hºë’S;¡2e6EíUt@’åòŽ]—ص¬TÉŒµs‰ÖÇé itÔò~Q»¥VãM4¬˜Ñ –È e‹Vâà‰môDuÔ^Ò¡v.—”×I ï»ut€eª'"–M„IEFǾTƒUk5¤¤6‘F$†ÖXáÈJFihŠ(©…c¬ÌÃ%³-Y³1à ;-ÆÜéÇýÕ•7/âØ}Þôæ-I¿Xþ:ôƒçMÑÒÅÖÞZlî´’Btöí^€ÀÆ0íŽPõ–ŽNðøŠ¹E1gV½N{ùñ§ò‚¡*lùûW|r~éý†SõÞo è½oúÐ{ßtê úk~0?zP­ÿ¹Vë4Œsÿìº/Ì+ò0ª¨åú”ˆˆ’&‚uEÈXfQcPŠ1™Ø¢‚’r_cÁ™CbPªØ²iP1†ÄXIJ¾â¤È¬slµ1vbàD5JïXE Á¹Œ½Š(KH¶p&&RP&(9wuT9“‹–¨R“w͸º~„:ã²2U6Aºž °Z3`r×+¹ÊG€E&™4BYP$‚$œÕ±œ0®ëQ•Tm+«}È KPëRÍ$yžõË~·4ó]…ĴįwÏü IDATèxÑY™Ë¨›˜:îÂÚ¢B7K.ÔˆYLîG4sÔ‹" 1¥äØÄ¬¶›lAUBNë¢x–¢ pÙº$¶`’h•‚2¼Ouµ¸Š‰jsáÊ@3.+¶ÓRr@ÁTU-#ƒî’‘¢[Möt—ÆÛ“FÎ;u(3±KÇ󮯵ˆBPë7¤89-&w•TÖ3bäȈ¬©DI¹¢˜àTMµNzTp`æA+Ö½ù¨V¤ÎÈÛR!Db ¬)¤hm"dQa)$5VYX"‹Mˆ4\Z .QPUÏìê„apsï%cž1¾o·˜Ÿ¸a§åAš;="ôŒûnUzZ0ËZA»o<ïzÎö¸Ç'Öáw¸ð%_Ÿuæç ¼ÑÆMó¶xÜ]‡»fv¢xF™ÙÉf³mÛ½'{+T“ˆˆ0ÁXîøÈ¤Ô8J!ñL1"0{xDr6$ jâH€’’J2Æ@’q^‰b‚7¬ª*ɤ˜J(š`­Ô•µÖ‚ZЂ‹’›„€ Öt1q'…àØf>©Iu ÎbL5Z6N¥êªÈMÒ§ÂE©ŒkG$5•a“ŠÔ·™Išç$S fãmôb%'cƒÖ–,\¤Ôêp¤68Ø6(rÍ–«éÄ¢ô=|m\–¸$”Tå­vi«6Ú¡¬{Ôõ59WŒõ]™•ý̵ŭÍCÙU'ƒ’\–ÂÐnÀz§6#§ÒÖùT˜²o} (¬šhK`’#LY 4Ej­±‰8'SÕ }ï=€äCDˆj¥W{B̬RòBeJ¾î–ÄXۛ亠¢L¶é$xô(Ido:Æõw‰Ü*F¦¤´–¸ôÎ…5ý:™œ)´ŒJ00N£a£RbÀ{!Fh™£¸ƒ.C˜ë †¥‡è$“êÈ•ެˆ ”Æ‘¥1ycç‰"AEɈz°HJJä@P1A•͘ª{íʤÞPo£ð,]÷p£™£Ö0Ãöõ‰·$È<§ÈöM?4p³Åµ÷:ixØ‚lòÆ-É|žf[šÃÌj `¸“ÞÓ)3;ËÞÅVUˆÊpBkxfU$† O!Ä «'ªÙ·µ­AZ‰2ÈH"oSòÐh3—©&G]žÅi{CÄÒãZé¶  `&$2ƒñ¬ˆXdƒ¥¼¤äB‰ ³>ÅDª•±ìT»-k{eK(–"Æ!:ÛŠyÐj ê ÷l'«‹c²Ñ±w1øÂ™¾ÄákߥÕ‰¤f²åS¯²1El@Þ¢>µl‹ò$5Ô„"ÖùXaEÚ#¡êé¸óSÈ'yà3¯¢Y»_•®ÖDm›­QW8µ‚®µ¦ŽhÁ&¢@Et<$°hU'@²ˆš- ¾[ŠQI4–19§¤œRb§0Æ2«Š ƒÄ°ÎnSÌ ¶šD¡Ð‚i°ÑfÅnöïbÆxáÔë†ÁÃã;xƶïƒßý€-ÝÎaû§_t-"wüîW[%µá¾™ØeWcŒÃ¥D‰ Ä‰$£$Ê@‚0³b§:ÌøòÚóõº’vÉ@F%\â òìX£j™4˜Æ¼þ”L¨0³•r„ýÀŸ|ØaÏxÿûÿ!„¸è£›«ª:W-4&&ö¹îºëç4™˜Øç†_±n®cÔtS°è[›å¢‹Î?âˆCçcL¿üå̪n´iñ6±@Ê|îµó»¥ßqÇO|â1kÖüfË¥Ÿ~ú)Çó‚U«V/_¾Ë0Û‹.ºäüó?0Ìó)Å}³@Ä5×\wæ™›’,[6qÞyïßcÝþçn?ôЧ¯]û[·ÞzÛ¡‡>}Íšß Ožyæ/»ìÊÏ|æ¼C}ú%—|úíoÏwÞõªWýÉYgý5€O~ò¢/|áKwݵê©O=òcûûm+Ë׿þEªºlÙ¾]tþᇲåùÌïßÜŸ'©ªo{Û»®½ö?¿ò•KöØc·•+ï|Å+^µfÍÚÿûÏÙ81ÍUƒá—ø@ÕÆ­R˜æöÛsWdÝšlctz¾-\¹òŽxÒÜá°q¹è¢KŽ>úøc=ñÄO¾í¶•÷_Êðð·¿½õe/;ýÔS_ý§úúÒßúÖs}ôñ[žÿ<þðÃùìgÿeØt^{íõyžÿÁ8ÌSU‡¶y~ATõÏxþe—]©ª\páî»ï7 Tõä“ϸꪭŽýÎ/`]‡3Îxí[Þò†ïÿ²C9è-oyûüd;OÖš+®˜Y5í_ÿõ+—_þ¥ÏþSûØ'‡e9á„ã¾ùÍK¯ºêë_üâ—W­Z½µŠÍgÙPÕk®¹îéOÞQG=÷…/<åöÛg¶Xôäyó›ÿöˆ#žù´§÷ö·¿g«¤¯Y³ö3Ÿùì{Þóö=÷܈öØc·w¿û¬Oú³kÖ¬z½Ÿþôg÷Ý÷ ‡~ô7þ\UçªÁW|û€ž4ÔynsóW|çÈ#Ÿµ×^¾ë]ïSÕû£ç‚Ç5ÿûZ´Í]Ú¸Û&·¡¡áá˶XâW¾òµ‡þÌÃ;ú°ÃŽþÅ/n^pUUo¸áÆw¿û}—^ú¹o}ëßžô¤#Þõ®÷ÞO)ï|ç{Ñ«^õºç?ÿ9_üñO|â# ÒŸ{î9¾ûÝßrªzú鯸袎1©êÅ_rê©'ÍoCò“Ÿm\£Ž:òškþÀ×¾vùòåË~øÃk˲¼á†<òˆ­-ã|—è–[þ{ÕªÕÇû ÇûŒ«¯¾f~²§7¼áÏ™g¾¾øïFGGV¬X^×õÐlçy~É%ÿú‰O\ ªê­Ul>ó̀₃ªÞG7ÀªU«?ýé‹/¿üKW_ýsÎù?[’ýùÏo‘C}Âð.":ì°ƒSJ?ÿùMÃÿõ_¿¾é¦ëžù̧½õ­ïÀ¼jpÀû u¾Ýæ÷`î§žCN;íφ1üCyÚÜÉEkÑ”¢¡¡a§b[¢ÓŸùÌyó•·ÞzÛ‚W]õf¶)·ÝvûÚµ‹ï\»UR¬Y³ö'?ùÙ…þã}ܵUᾡïø7óÎ+®øÎ“Ÿ|ÄW|ûÜsÏžŸÃ¢9ê¨'}àç­]»~ýúõ§vòw¾ó=9òÈ#¼w[[ÆMµõÄçŸ4ÆÌ}Î2ye¯ëúØcO|Ýë^ýÊW¾â}ï[ØeÙZøÄ z ŸüäÅ›:9DzeË?ü¼à¤—½ìE§žzòÄÄ’-—n Ï—¾qtà]ï:Ë>á„ã>ûÙ/,šÃ}èöáÿ÷n؃¹Ÿz™R†ô‡'·äç°ÙR444<‚ÙKŒÍ<ïÝî»ïö–·¼aF†}`¤ %€¡#("‹Þ²µã‚Y–ýñŸtá…Ÿ[¹òŽãŽ{öèèÈü«‹äÉO~âÏþÚ/~ñÒç=ïÙÇûŒ?ÿó7…žõ¬£·aÌoþ-{Üc–/ßå;ßùÞóž÷ì+¯¼êiO{2fMì]wÝMDgžyö‚’.úÀm·­üÝïþ焞755`0Øì½÷Å}ŒønjÚÔ‚3Æð×¾ö/ßþöÕ_|ÉEýó5×\‘eÙJ?à€ý1?þñOŽ:êÈalàúëbŒ9ðÀý{½>fMµˆnIž tvžæ uôœ/bA cK~[UІ††GÀ8ñÆwܳn¹å¿ï¸ãÎ}÷Ý{ß}÷^²dü‘²Ûn+vÙeÙÕWÿ %ùà?¶ ñ°U-ËrkE ýÚ~ô‚¡iÌ+È>ûìµÏ>{-Y2NDK—.Ùo¿Çýýßô/8îÀX·ný¥—~íÙÏ>z‚™ªcrÎpÎ~êS=÷Ü<õ©ÇÝpÃï}ï;,_¾Ë‹_|âGsòÉgœzêÉóïßÜ/hú÷Þ{¯ãŽ{Ö‘Gûœ÷âŸxòÉgÜŸ9º |â¹€¹â'ç ““SÏyÎ3?ô¡so½õ¶õë7l¹ôeË–žqÆ¿ímïºóλUuåÊ;Ï:ëݧŸþЉ‰¥siTõ+_ùú³žu4«÷¡Û‚çvôœŸ'î]u7®E‹Þ8¿ ;ÛÅ'ÞgŸ½.¼ðcgõî~Pùþû?þüó?¸µ"N;íφá3Ï|ãË_þ’øïÞüæ³Î?ÿÓ'žøüéwÝuùqÇûŒgíµßÞr)D´×^:昧ß~ûÊÃ;x~¹ˆhß}÷^PüÇ8ê¨#/¿üÊÜŸˆŽ9æé7ÝtË®».ß*Ÿø—¿üÕ²eKÇÇǯ¼òªÃ?d(î)Oyâ÷¾wÙõ.¸àÃs‡ÃIÔ{íõ¨á‡Ÿ÷ÝwïágkÍç>÷‰ç§Ü*øÄÞ»O}ê£gžù·ïyÏßOL,9_Çl7bÁÉ9z½þ‹_|ªˆ”euæ™oÜu×å[%ý]ï:ëƒ<ï/xYŒÑZ{òÉ/þË¿|íÜÓ>ä§µÛí}öÙëC:óªÁE?Lpº-è Ü=çç¹ÀÀoªÍgA)v*è ƒºú;_븻Wþö¦N}ÿ7Þ¸~ý­;Z«G>Ÿÿüßÿþè÷|й瞽Ï>{íh~ _ëÚ¶îÅC‡GF)¶k®¹ôøãÿò ƒ:áœO~ñ§w¯¼ùÇ¿wÓ—¶Ú'^ºtïgÖ­ûÝ¢ß}K!¢¼µÚXÊíQ¢œrÊKO9å¥Û[Êýd>ŸÍê@D×_5¸÷×ï?‹®sßÏêz뺡¡áaÍV[â§~$IY”ùf{t2vàóÙRJ·Þúó‡ŽÛ†/‘ˆöÜs÷‡T)|¶qœ¸á~òP0rwŒ1N{Gkqyd”¢¡¡áþÐìÅÔÐÐÐÐа#i,qCCCCCÃŽd‘èô5×\úàëÑÐÐÐÐаs²Ð73GLZâfÃÔ††††††íÇÆï"Ñéfe††††††íÁ¢ã¿;rÆÖ5×\ÚŒIo¼çöÈ+Ñ#‰æÛihØÞìà¹ÓÏþw¬SyÏí‘W¢GÍ·Óа]iÞbjhhhhhØ‘lÆe|`ÿ6444444̱K<\”ñüÛㆆ††††ùl‘Oü€¼Ú4Ìd³ë-?€²jRTõßþíë}ì¡ûïÿÄ}öùƒG?ú÷¿ýí«(UIÏíÁ”õ0’²ò0úvš¯¸áþ°™ æ ç—¿üïgœñÚm“qÁ~á 7†‰héÒ½·aóUUUæÅû "²`oö-ášk®?þø?:ûì³ßñŽwÜÇߺo|ãk˜iSÒïƒï|ç{/yÉi N^~ùåÏ~ö³CguÖÆW/¾øãÇû ç3?P«¬ ŸÞðó6”â!+kgc³;'> [+na& ’©êõ×ßø­o]õ“ŸülåÊ;SJ+V,?è žûÜcŽ<òðMe¸µ o›”­åÁ‘ÒÐ0ŸÍXâ9ÃyƯýÞMÝ;ú“ÿyÉyó‡ÏdcTDú}°1*ˈ¡bG_|à«WýŠ¿X79ý'ÇðÜç›ç93o­VÕ|äÂ×¾ö4"iE\ºtïÕ«c´ÖéVÙããÿ£›o¾ù¿øE]×_ýêW7þ[UÕ?øASSS£££Û`V^ò’Óz½»æŸyå+ÿü9ÏyÎ?ýÓ?MOOgYö²—½è oxÍÁ4¼zËO/;ä)§ßtÓµcc£Þû¤Uˆ¶±×²Uˆ(¥”ˆ¶¥³µƒêÿgï¼Ã£(Þ8>[®—$—’„¡KPªÒAéé ¡Di‚Êq JSPº"E:¡~(5†Nè!½·»\ÝÝùý1°©WI`>Ï=ûÌíÍÎ;³·»ß}§J¥â—jåeŸ7[L”i½¤z½Q"Ù˜y¢%$$-_þãw:uê4tèpwwwŽã222._¾>ë­·êÏ›÷ihhˆÃ¶ÂÄÄä2­Ô¨ìÌôj¬`0E±Õ'¡î飸Œô켋ÿ¹€ŒÙ DÎ`0Kd€±˜ €¢ôù:ȱ9ŒÛ­;·bþ½Ðëõ4M ´½>ñõëw5M×®í¼¼Tr¹ Âguáï¿ÿ¡V«×®Ý}úÝîÞ½;<<\¡P|ôQ?£Ñ(•J{Çß;‡wbŸäg¢££!„ï¾ûîÙÓQ7®žb´¼¼T€?Žläåå‹Åb@`¯¡¢ fYÎǧfRÒ]’¤(Š"É—2§)/ùžž!ii†¥iÐ ƒº»óõÓ¦*šŽÁ`ò÷{y«Lrçá’žþB ¼¬UDUª ääX’¤hš*éÝÅ1ŸBèï–˜[¬ÿý/| :‡öúÄW®Ä|òÉç-[¶üꫯ¼¼¼AÇy{{‡††¶oß~ÇŽ½z Y¿~eÛ¶­í-ÏÕ«×¶b;¯Æ S›Ú‰ˉEâT›af˜9„,×Bä déyF–ÔYVê¢ËÕA–3ˆTBÈl„‹…á8›Ú‰ ѱc÷øøøV­:RŸ¯ƒp‡¯’‚ƒY–ÎÊÊ&’a,v5Õh4š^½zÍ™3' `âĉÁÁÁ‘‘‘-Z´˜8qbŸ>}&NœØ¢E‹ÈÈHµZššJÓ´Ãí@™Y¹™Y¹±÷âÖnÚyøtnnîСC§L™R§N¶z¬ß|àâÕ[±÷â²²sÍ&#Àl¶pç˜-!Çq†ññ© 0Œf³™eŽƒü9,-$à cQ«ÕÞÞ5!ƒBˆ~q8qµZÝ Aƒ””FSÔ®^oô÷S«ÕΕ xP¹<q\\ü”)³{ôèññÇW¯^ÝÍÍÍÇǧzõê5kÖ ­W¯^DDD—.]Æ›{ßÞ¡LÚkÅÿèÕXÁ`JŸ˜á8Hs2ÕrþW¶$}bæL’$9Æ ¬º3Øë«Õê¿ÏŸßºuëÞ½‘ôA¾)àñãøë×þýôÓO]\\FŽì›““ãååa{²(å#GŽ,]º422rýúõ‘‘‘}úôáÃëÖ­;xðà‡~¨T*‡ýW¯×»¸¸X7‚›ŸY%Ë·j­Ü¿?@(Þ¼y“ ™L¦òð?wþZhH€»Êpx±©Õa²,ãë[;'é¤[µÎz±X! !EÑ$Ið”‹-€Åb&R£Ñ\¾|¹Zµ°„„;z½A*•pÀAÏX£ÑètºÅ?}UTn‘7œššêãã3}úh'KQ¡‡GH|||``àÈ‘}õz½R©xVÐß½lçš5ß¿­PÈQG¢1ó‰5M||¼¿`!ωô®}»>èúA5Ð9´Ý',^¼¢E‹ƒ ’ÉdJ¥ÒÕÕù‘è­…¦i™Læââ2nܸ¤¤¤ –ìܹ¹Pë²-¶x+óæÍèäìÞ½B8hÐ t-ËgŸ}Æ[)3ÍR¬Ø^¬`0Åb‡OLÀ™ìöÕX–±þj¯O¬Ñh>øðÃcGêtLff&IR !lÞ¼ÝÎ]{~ýe£Z­NOO—Ëå&“ÙÞ”{õêÕ·o_‰D©R©x?øÑ£GJ¥mÕjuíÚM¶m;èé²zõ¯϶·o?°X˜²ÍŸ¯ËÌÊmûÎ[šùŸ®X¶hñW_,˜?{õ÷KXµdçŽÍÙ™‰mßy‹$ˆœ\-W/Ù¼7üL†S쵩]»Ù×_/‹}`2™†aYg=0¶ßxkŸ˜÷†u:ÝÏ;.wŸ˜÷†ÓÓÓÞõ³Z­NII‰D茱,ËqÚ:–>:þ,@ÍZõçü:­V­¦%yÆÎøÄÿûçÜ?ÿüSÈ3F"Ý·wßÍû7Úë.\¸råJÌÈ‘#¥R©«««‡‡‡P(¤(Š$I5„PI’2™,$$dÒ¤I/^=uꬽï²ÖV„B¡H$B‘þõŽ¢(k+6¡Ì²tïÞ½G%•Å^+LIØ4žø9Ïn¢˜˜˜ËâÌ™3MH{Çÿúë¦={vi~sêÔZ­!;;› ˆcÇNþþûïì{§mǸ¸ûùùùB¡Ð®”‘O|àÀƒÁЧOŸìììõë×_¾|ùÑ£GÇq×´iÓ’¶iiiíÚuaYÖCJ¥ÜÃݵw÷¶}zw3²÷ä ¬?Çö}»Yý°ÚAn®ÿù[T‡ìÀ³þo8ñÌù }gAö·Ñë­¤Ž{mÚô«Á`d ‡õ5BÇÅ%†…5;wÖ&&&zT“|ÔoúÉöDGGÖ£(ŠclYK¿yÃ:nÕÆ•ƒzÒh4ßÿ‹JThëL¹ ¯þuõˆ~#4ÍüS­ZØO?móðY³f+Úêõ†aí²!T©‚<\¨Jã`\\bË–ícccO?:müì½G~íÛcÄÏ{VŒè3u[äêK—.Ö‹¿­×¤R©½£V€•O\£FiÓF¡žÒH†WnX1¢ïÈ_÷oyúôéo‡KII9|üpNNΖ]¿\¾|¹E‹Ó¦²Ëᥛ} IDAT_.$Ã?n]3vÀX”þ¶ÈmOŸ>Ýv`k||ü¦ÝQú£Fõç»òÙ˜>׳wN1¬…$(ë6[›#¤D­uë@óVm®\ø»P5µ-VÐU}àн^¿çàîüüüßìHIIY¿mÝø7ìYîܹZa ïÇÞHDàÅÊôïØ^–Ë—£çÌ™+  ªÅµþŸ÷àƒ|æß{ï½o¿]bÇ[—/GÏžýo¼X§]´Á¨S§Nß}·ÔÆ"”d¥Ì²8fƒ) ;Ú‰9#Ç’œ«««í©C!÷‚ãho;q·nï{x„˜L¦%_/زe˾}ß~ûíß™3gÎwKuëÞK$¢===M&“R©´=YP\;1ÚªÕꨨ¨   ñãÇ;vÊ”)kÖ¬Y¶lÙ;ï¼åáá±lÙ²™3göîÝ{øðm1¤TÊ­¿^¼rkÊôÏôìYúQwïÞíÔ©ã™3QJ¥ÂF%æ¾¾µÎDÎ($Ã<µÙbh?jÙàÁýžWñ9Ò%=˜Z¶lñâÅSÿ‹øáG»"7Øm/ÃhX/11Öb1 …"{ŸP;ñÞð¦•ÃûŒØ¼wóè~£7ìZ?ªïè~]5¦ß¸e¾ÕwtÄüéŽUYó2¼ò—N´NÝΟÆô·~ç:>ýää”  @^/²r2%`¡…7ÊŽ$(ŠÍë¿ã²Ì¥V­¦…ÚŒm1¤V«ýmKÇw;-Z½pl¿q߬]<¶ß¸U¿®ß¦½›Æö·aïºSœå{S[¿èØÕN HLLö÷÷‰DHºzôè¬Ä•W¯½{÷¢@5’’Rìm'NLL@V¶oßNQ/м‰­[·Z,£Ñ! MJJ±%ÿ%Y)Z–nݺ*‹cV0˜’°Ã'6‘€ãX@LLL™ÕJF£\h§Ú‰ ‚¸råì¤I×®]7tÈ€ ›Œ5鯛6üT¿Q³nzyyêt://O‚°Ï±CÞC=&L˜Ð£G£G4hæÌ™¼O¼qãÆ¨¨¨5kÖDEEÍœ9“÷†QX­V§¥¥»»»•i(..ÙÌüwró´=Ë’a@:uÌfs~¾V,‹D"ÛË!LH¸Pw]¸¨UÂC¡\j´WVoæ[£>Ç·mÛ5fÌp@@’Apv=!ÄÑ£ÇÕjõïœ:~æçߎÖsö¬Åý&YöÙÒh;¨óÜÆ?zt]§ÓºººrGQö /V«ÕûîER1~ü6mºäåå}·þÛ‘~´iφÑýÆnÞ·it¿1¿ìÿyÜ€ [öý<¦ÿØŸ÷oþtÜŒN:Ùå£'lÓ¦222Vý²r\ÿñe¦?lXŒÑh‰ìkÍF˜d!Ë»¡ ‚`¡…@DKk†Ö_5ªÛègee-Û´lLß±÷­×o¦ýÆ÷ŸðóMcúŽÛ¼Óį۽öôéÓHŒ5V«ýfí×øÄ,Ë’$IÓ4jðF‡[7B#X–µX, Ã0 SÈ×´Å•Î[áçå›í‘‹Å¾1ÅZ)³,ŽYÁ`JŸ˜@!ô©©6ÖN8p€a9–±Xït`Ž­àà€ÀÀêG^½f]ûöíÖ¬Y³jÕÊÖ®]ûþý˜¼¼<Ǫ=Q;qddäÑ£G###wïÞ}àÀäSÕ¥K—'NôïßæÌ™Èæ=ãž={öîÝ{ذ[ ùY}ü$ °k×®ÔÔT€D"™8q"àÂ… —.]ŠˆˆXµjUË–-[µj•““k2™mlæ!‚$‰û÷ÿ­U«ÉÊq°ã[/èDÞ£3É×|[;´ºÝS¿6l P(¤ég]©í2Ä0L\\Úý„˜å_­ûta¿qýý´sæä!ËømÿN³ûôésïÞ¿¹¹¹ÞÞÞ,Ë…v¼R 4ÍíÛ·#¾ž‚†â$$$ÌúvƤ~“¿Ú¸hêÀi_oújêÀi_oZ4uàôg{6. 05bÁT|bëׯÏZ6cÚ [ÒOKK ràÚ»“óÈR«:8¼7¬~­ZM<ˆQ(äl.µZ½ôûÅ]Úuÿô›iŸ Ÿ…¶Ÿ,žÊo#¾žòÉðY+¶.ýí·ßаùß}Þ«ý‡;v´×'ööö|üøqµjÕ, A@-©ày—7†aX–5‹Ål6ÇÆÆúúzÛë{{{>yòÄßßßb±Œ3† ˆ;v²‚ÞžW­Ze6›ïÝ»çëëmKþK²b]–^½z*êèàÁƒwíÚ…d8;;Ë××—ãX±Xhï\N%µôÑGÈ'>qâDTTÔ¾}ûx?ØÚ3V«ÕeûÄñ‰iFã'5<¸P´V­ZµjÕ ñßZ°vuqBç B–$)¡PpçÎ¥ºu[®:¾%l4E‡â¬ µª“›÷ôrµÐ†œµX, ÃBÈÙÕÄ€R‰dò›Ÿ"Æõ_ôå·ãÚ7Ò¶m[µZd¸ÿþ±±ÑùùyÞÞ^ c‘J¥@‚°Û'^óË÷û†÷ìÙ311Öß?`Û¶m3¾š:cÌÜ’¶3¿ž6uDÄÀíõ‰ÓÒx{×´=ý¡CÿuÌ'Öóóµ¹¥ÇI‹øçŽ[gÎDF©TLÓ”>ñÍ›7§©'Í3wÑš/KÚŽï>tèÐÄÄXÿ°ÿýwÆWSð‰›6}ë?þhÞ¼9x.ŠEñM¹Bä; “Éd2™Nž<Ù¬Yc{}bk+È 7›Í…¬ ŸØÚŠE(³,¨]ßl6[{­`0%a‡O -Ðdb®þ¤*PN ˱„Ò)4YRÒ ’$- ë+Lš"Ó µÓŽÍ;MÄäÉ#~úi[^·aÆڵk<¸'33ÃÇLJa, …#£<Õjõ¡C‡Êl'FmÃãÇŸ?~TT”Ïøñã7nÜh»Oèÿ»s“·ÂÓ¦MÓëõ›6mš3gޝ¯/ùÁ¼g puuq \¨“§H$„Þ¾}±^½·×…€“'#£¢ŽOúaýñ…”Ø=1¤Q ˲r/öz±ÕŠÙlV«ÕNþ< ó”ï6LkßtÈ;ï4¾{÷j:ÍÐàl$Ã>>Þ,ËÊdR`ÏFÃK…D"Bâ±mÛ¶å?3cÌÜ’¶š•_Úë!°+ýôôtÇ|b–ÉðÉ“‘b±X,Sm£ µZ½ù· ¥ä|ùÏßð2ŒÚ‰7þ¶nƘ¹={ö´×'îÕ«ëèÑá  µX,hØ:– T¶ÇY[±%ÿ¶”)±^¯/¶,öZÁ`JŸ˜´pÙùz’$¯ßBÊÕMåêáŲ,ËZ8–ãXh1šÒŒ,—“ÑnÀ¤`_wÀ9Õwšçúõ»¿ý¶}ܸ ‹4šM›6Κ5÷÷ß÷ëõzwÁÞY5M\\?¡Ú¢©<¬Û‰‘\4l»O|óÎS caÌÏÜâìœ<À?ü€¾.]úBLÞ3ŽNèOIh±¤RéàÁýa×ù«¯¯yÌ›°n ³§0¤iÃÏ–lRãƒìì”ÀÀrr²ÕjuŸ>}îßyQ† ~Îp»dßZ*¦MUTŒ5+¿œúÑ'³ÎølÊçüöóéó‡ foßiš¦ äïúû×±%}‡}bc.È×Ú)SJQ€—a…B®R¹ÉåRb€F£9{öìgKfÌ?ïëðÛbe¼ø¢c¯O\»vÍ-š|óÍ7ßÿ½P(4h²t”jpE© –/_ÞªUónÝÞ·NÁ[ÖVPš¨É\§Ó!+ðÙ v6??YéÚõ=‹PfYÞ-‹V0˜’°Ç'Žedï=<°[Û®Ý{Ó4-–HÂ67/Çl4ܸöïWî¨=|x¯I£ºçT;ñùóW‡=gΜ£G3vÅŠå_|1oîܹíÛwŸ4éã¥K—nßþKÓ¦õ„BA@Ûüœ9s<((H­V+ ~‹¦òàÛ‰ÃÃ㢢D"ï7jÔÈ^Ÿ¸AÝF:©Ü\€U;1jF?!·xýúõƒ!""®Ç"Ïó£8^ŒïÞ½\§N ™LJQÔˆƒ–/_-TÝ{˜nùÙvY±XµZ½tõŸŽ^Ó¢E‹K—Îäççùøøh4š'Onæçç{{{1 Ã˰e/J²+•Š­ÅxÖĹT«Õ#GŽä·Ã† sÀ'&B `±ãRÒÏÌÌt¬ïôFõö¢;? ï,SJ­eØÝ]å@ßévíÚ©Õê¾}ûZo8PH†QRÎøÄÕ,ø¬[·_ýõ'Ÿ|"hšF§¹’,ËšÍf½^¿|ùò;wîlÛ¶¡Pâ¶Ø²¶òå—_òV´Z-Çq_}õoeÉ’%ÈŠ-™w¾,XÁ`J‚hРÁ¹¿¢ä‚´¤'w{XvãÆœœ§üÏH8!„îîÁ{.==÷÷߀ãný±{Ã÷‹J—ê/2ÒÓß,Yža2è½wµÀ™ó¿“Ô#…‚qÃÏŸ95æÜïׯÿ­R¹¡*Jž "»w°6¬nNáÕ«7»téýûïO:%“©~üqõîÝÛ\\d‰‰é'N™4écŠbÞzë­Þ½DE V(ähX(KW „ ò,›‘‘©P(²²²T*Uff¦X,iÔ¨µ-㉣££ß¿uݺµK±¢R¤ž<²]o4ó>ñ¸É_™m›œ‹ ˆÿý︟Ÿ›Û #ÇJ?oüWø|гÙb±XÐúHÇÖ®ÝìÖ¡cž _Ÿ|2Y©TÊåRþq_æyCP‡UoïšQQQ¿Ÿßæ! {ï½VþþÕ,³L&C“\2 #‘ˆ­½áb³ZJ‰?ü°%½ ¥GûÞ={öÌÊzÂ_h8Ó¶mÛ~ز¢û;½Kší²Ìg}±çÍb±°,‡Ä¥ßªUà ê™^^^ééé^^^™™™~~¾EÚ²4ˆõy3ŒYYÙz½ÁzâŽwßíúaxg]nrI2ì ßÿËÉËG§Žø´ £û½è´mð^± l€þD||â;±£G‡×­[wÒ¤I!!!$Iòuf³ùþýû7n¼wïžD"†j4óFjû‹ J*!!É^+£G³N¤ÌçXÁ`.DöèñIƒ z-Ø´÷zZRlt»ì˜c‹ƒB ¤@,‘J$ÿɪN›o1›*wO…\)–HÐ%)*’¼]slMš4õС½µjMŸþqRRÜÌ™3ÝÝ]ÜÝÝëÔ ™={Ö•+†à³{÷öÉ“§ …B®B[+?)Ф(ÊÇÇ‹¦)ÿj4M(2ëvb¾¸Q£F|;qÏž=5———-†Âj6iÚ¢Y=ôQ(d€iÓ¦70gΜU«V­ZµêÂ… € .ð.2:iû鲆x6 AQ´P(”HÄR©X$ž9s ô«3bÚž®];¡YüìíE…Òç8îÖ­K={öœ>f‘F£ñööÖjµ2™ŒeY¥R”H$ÎxÃF3~è¤å?cíãòžñˆ#fMœ[tq‡AçM P™˜x—O?(¨ºÙl¢i2$$ˆ¦ÉààêEŠÅb»JG’¤P(twWùúzûùù 7 L.ób(6„P£Ñ•að|Ž-äÛ;ÇŠè_·nØñãûd2ÑäÉ“/^|êÔ©Ç?~üø?þX¼xqDD„««ü?"ÝÜ\I’œ?qãÆï?~ÊÆ¡L:`å­·Þá­ØÂ«±‚Á”„íÄ Ãr˱œÑ çXÖbaÒÓRŸ÷-4r,#“+¼|üÄb)ÃX(hæX"ÍE„ãíÄ#GŽòðp‰Dz½~Ö¬éµk76ìN~~¾J¥š1cÖéÓÇôz½»»*5õŸÑ£Ç ™Lf±˜m}‹¼gŽãÐ’ !T(¦|Û‰oÜyb63ü\cÕ}€míÄί7€ÚŒ ‚‚bYfâĈKQá{\Ô¬YC(ü¯ÎÞÄ)Š–Ë¥jµúÓy“®_¿^«V£'On …BÎqP( §×'V«Õ?ü¼|âÀ©ƒ.ÔîË·—û¼Ó…ª©ÕjuffVppuš¦Åb%„uˆ ö¶|! hú…w,4ïôŸ;nýùç!™LZ’7\æTl$·Ee<é‹/†6ÁÞvb>Z` @@µ5k–ݾ}÷Сc¿ý¶=11àïï×¢EÓ;6ªTnnnn‡ï2d<àÉ“''Nß³gKË–Íl¿êýý°Ò¢ESM¼2+LQìh'¾ù÷ (`8‹ÙdÐëõz=û|Ò]“Ñà¦òðôö‰Ä&“‘ãX³É,à ÇAÈ:>ÇÖÖ­[7®çá¡’Ëåß|³bÅŠeh.-†aV¬XöÝw+Ö¯ÿÞ`0×X¹òÓñã‡ètÚB¹eRÈ瀪Õêµk×~üñÇ¥TM·lÙ²wïÞÇ—ÝN¬ÏOmX7ØzÏËn'¶Æª¡ ’$éë[÷À¦áÑ7g,<ö÷ß'…B¡@ ,eAÜ2‘HÄÆ}vÍ’ÙÿüóOppƒÄÄ»f³E$z&ÃÎ×סÕs\Tn­ÛŒËw-¦¢mÆ#G^7™L"‘Ðùw P䪀\¾|àêêò2Öb*v}b$Òo¿ý6ZŸØÞµ˜¬}k¤aõêÕ)3   !!)--uðà!®®®7oÞèÓgøÅ‹T³ë qØŠí&^™ Æ[}â?ÿ<ôaŸ‘û S¸ªükÔŠ¾zÉßßòÇ“<¼|2¹R¡p¡iAnNÖƒû÷LF£P¬Ùh&9^˜‘À.ŸxýúÕ;÷>rdÿ_ýåîž$‹ \]]rsÓ[´h3oÞ ÆöîÝÿ÷ßèär9Ã0vÍÒ\”¼¼ I’jµºwïÞ%mÜ£ÕjËœc+%þöµ 23ÓÍ,gÔêŒ&&þÉSðâxbëÄ4Ñ¢\Äìy ðçŸì;&pùòiŠ¢¤R‰X,B+$:àÛ‘$` Pȇ é v‚Ö­[ïÛ·S§Ó¡¹´œxk+è‚)Eh‘g줡’¬?ãX­6ßÍ­ìúǬ‘pG§ÓÑ´ÀºÍ¾hÌ2“*vg±2Œ˜>}4:·ü¶×'¶&0п¤øÕNŸ>Ò¦M—éÓ§SÓºuçþ9YÊ!%QÊ!þUË ƒ°Õ'nР޾½?wíÚ}=´ãç²R>x|ãߨÏ­]»B  I’vúÄMšÔ?|xïС}öÙgOŸ>üòËÙZ­V©Trœ6mÒÂ…KëÔiн{Ÿv…„øK¥R“É䨨bz&~þùL­V;zô€ÌÌÌ‘#ûfeeq-33sĈkÇǠ=¨opé îÛ·µaËaE÷ß½{·NbÞ¸ ÅQ*åÛ¤sçĘÍ&@@‹D"Ô êp‚4MY,—¡C{3P§ÓÊå †±ˆDârÌvé Ïø%¥ŒÄ˜ Xww„Àùw‹bAÇ..J’¤JyƒqÌ'Øu~ð‰mEþûï-[v;v\rr2ªz¼NV0o¶úÄE6nÜ(.î¦Á`@ëòÚè?!ÐR©”¦ÀŸ=[µjòðaŒV«‰DJ¥(ÐAÌŸ?Çd2Õu2 …ÜÞÙ§‹³  …Édô÷¯f2™üM&S``€Édª^=…Íf³ŸŸo™IuèðnLÌÿŒF#ZSí¼|9zìØîÝ{ˆžeF£‰a,ES#IrÒ¤1"‘ÐIß*A‚¢h±Ð4 i­òä˜ÛÍ×{Ó´€aƒÁàææÆ²,ªšà5éGJ’¤PH¢Ñê/ÏŠ@@SYúá˜Ol/ÎøÄ¥èŸxéÒéÎûdff:ô›ý¹+›€€j I¯‡Ì›ƒ­>1AEJ$¡PÀ²ö-šKQ$EÑÈ÷²w<1ò”J¥Åbvsså¸g2Œ‰D ãææÊ0ŒR©$€tË™ÉÙ‘E±X  i)xÞ™K(Xom#OOw‹…±ž´òƒztëö¾Ñh4›Í¨«ßSÆ:=‚ „B¡\.C¶œÁJ5)4e?xÖap²Õ“ ôbIJê5ºË•K¥z¥â%yÃv™pØ'¶‹—ä#Ÿ< ž·¹–;¨Ñúõ°‚ys°É'&žÏ`G’¤@àÈ zo˜ªEñJüøI\ o‰ì¿µ~9ξõ—¬1õ$E‹E…«{hÔäD‡“Â`ª4ŽÝYoòä̳èM>o˜ªEñU=IYîžÞ€ ³ŸÞÊ~zË Í)=•K×î4î>†ÿÄ'§Yÿʲ,„B(–Ê=}ªåä:ÜÉ¡S>òêÕäÿe[yKqöìß*Uÿyü8ÎÉì9ÍÞ; Q^wP…ß)PèŒu¹¶‹V#-å¼a0•„â}b“Ù‚ºEd&>DWsIí+èBŸ4oÙñ?ßþçr@vŠœ"»›»çÇ…~Þx¶.I)‹%R“…}‰ÂTIˆÔüì )W/$^Ê4f6÷nÖÆ§e˜OˆÐ¶eKBÈq\Ÿ>ÃÎ=}üd@vŠ˜&›5kßqqÇwëµéܶ\¬ØŽíw–5oòTèŒÙuì›|Þ0U §F\Œ¹Ó¦MmF}þøCŽèV#¯+P¹)Å"A:ØEi¼Ùl&´°î K‚ès>ÿ˜ …:üàø/w·Srªš5ïZÞ>”O‚1ñû´èäËÉ]«¿ß«z—g œ9s¾M›6žX_ŸÕüªÅIâ¿Oû©¼¬`0ŒÃ8«ÄÂð/WüõÛ–­Ÿ}ÚÒÛ½m€¯G×ÁsF“™aX!v‹%„Ðd2­XñãÕËѱwîAJ…œ"‘€ôîÕmä¤Ñr¹\$¢øå(É7nToßž¨œ«7BÝ݃ÁójFTj[ÂYYO*Cú…l±\xjÉxqI×%ÍTͤ””&è,s–‚V°€M6$uç«1¿‡ïéµÃËU €#5«Ç ðÑáí"ç}f}}vwëÞ¼vsŸj>åbå5ÃÞEÄK¿YÊ7µÆÝÇØ•Úýó¥Í¢_™KŠS{ýR+g•9ĺœœÞ.ÉfF^¿É–{ñ=¦ío”‚²,ÇqÜÖMÛh½yÙô©žR1A4€c³tº·îÞÿÆ&ñööX, ’d'Þ¸QýìYÀ•*(+ëIåô¹Ïœ9qöìI”>rd_¯^ýmL™ ˆìì8a¡t“‘‘»‹M¿M›fÀž6ÈgN æTß—>8Úù¨·Ð›ƒÃ1hI6$Ck*j†ÊBmñë®?¾ý˻LJ©éíoóúÏÊ™³Ú´iCäº>³LYóúøù8i¥²î »wïåç燅ÕV©\+Ã5Ü´éUcFG7+3Ží›J¾Àæälˆ¹`­ÉÙóŒÍemoCYËõÄA›“#lH.°11@ØÓvå±åæ°ýÉæÌ½æ¸£Úãð/W<½w÷aôåœ!wÌN“Ô ûrøø)¼'(Šr gþúólnbòèz X Ôë zvC tS(¾ïÛgÔÚ o÷뉔Ø`0”‹ß¼tö,,X ^°¸»WBϘã¸sçþÈÌL+;*€‚‚ŽãìºÁ:ýôôŒ¥KP«Õ}ú Ú¼y‹‹²Púv¥Œ iÑæ ; $úƒ]ÊHYbAbº)=ל ,` €É†äV­Ü„nãCÇÓ#è…}³kÐ kŸ-’ è?üñýÛO®^µ¾>ÇîÃ夘SΦŸ-j…áô”¨ÂA¼xñ²mÛvgee£­Zµüæ› „U=Æ`0%áÔ”c†±Ô¥V=¯º ç œÏ IDAT½†=™kÔ­©”KE"·NNîík×;4k&¶0ÀbH†Ÿm! GSÒü£Å’““‡1Δ!¼~=ðÌ™ÿö,X ¶ýð¯¿ÿvãЯ>çÀÖÞÚWÏäÉ3xüøqÀرSÊ%ÍÌíü«êi­¦Q:”x(2!òŸôbócïåßKÒ'%ë“ãtqÇ’ŽY£€L¬9x‚³w.„}/އ~?J‰ä…®O®‘§^¤Ï†ÙÅZ)—:ÆÍØGWoÞ»ûÈNÎz½¡{÷þ«V­åepáÂ¥÷ÞëuÂ*ÙqƒyCpÊ'ÿrÅ…ß7é/ŒKÔ·íØ.Ž3eꔾ2©‹R. IÒ>¥·X˜„„$}V~˜¯4 ÈðLŒ9š’L ¹¹˳ég9ÎÙG ï ó,X ±ýð…³»Æ?ügÑœnlï?eìÊ*I’¨rØ®ChÇåÙ·o+à»ï¾Cç!Izÿõ=ámÃe”lÍÝ5zVO÷F˜“Ž<&è)M§Œÿqü™É'T ™ívF {æø:Ãűq ÿ]Ÿ me CP:ª¨•›Ÿý].Å´‹„äôÏ–®»ó }mX¯Î÷_ÏuXl÷eçÍ[xõjLÑý ćOoØðt` gyåƒÁ”/ŽûÄcîtêÔÉ ËäŸÛ¶mԮ᪔ˤš²;q³Ù|òÄéÞ%ÌF‚$ä’>Û)Ê=)#« À¿q^æ©x+ê ƒg2¼Àvõ²˜u‹YëÀö D(”]˾޳vÏ-÷¶<Ê”Zš\Œ>IIIº¤ä‚ä´‚4†eúõ£ ÐÄ»I’"ézü-Û­œ?¥S§Nœö¿á§èúÔÖ–h…Ú,•jL-ÖŠ%JNNݹs߉§ð;!„f³%|þ ^†7nß1ežÃvIÛ’fJJÚ¶m»JúU§Ó­Y³ž¢Ê¡ƒÁ¼ Qb4F3üË_}ò÷ç­}ÛŽí.u¾ùæ›ãûÊ¥…L,:Ð4e4oE_÷÷ô‚, -–çÞ0$ ¨X(¢-ìéGƒ«‹D"tM;îÙß¼töì ùD2œg{þ³Îá­½80Ù™3ó£½ hZÂÌ/w¹•u+E›’¬MFŸÄüD–a Ã܇·³o­5VH>ëï!ðx+ô­D}Š-éCY–ýàƒþE¯ÏÞã[çÿ•ÄkiíÄ·&&i“J²boq–/_Íw[Û¶mGbb–½)ÜŒ}Tìþ‹/º†‘dÙ$'—ñŽ’ššJÓ"{3†Á`^ Žx“€ð/WÜ:ÿ ›´9Šàó¾¨;}t7¹Lêæ¢ˆìn!@·nÙ¹râ8—Ë1,A ä H@…BÑ””ë"÷ññ’Ëåè@Ç:N«TOè€,«Õ@£ù϶7)‹YËûÏ¥×9;_#ýêÛ‰Ë!ä`†6COëÑX¡—ÔëǶ?†ÊB-&ˆ¶üi³ÙÌBd¾>lª¥€ðQÑë³Þ@¯|!±¸íâzõ S¢;1_xbìk÷‰D\ì~¹\N’-’0¦2^AÜÝU¥Gpu­Ù0L±8âÇ'¥vêÔÉEéÇïYñÃf€ŸO›‹B!“ÒM˜””¬ÍÌ"ŒFÀA‚ä>ÛÊåÿ?¨^˜T*•J%è@š¶Ï'FÞ0íŸï €£Þ0‚1kѧº¿’ýýÕ[¯cQ T³!« +» ;[›m6š7YÜÀ¥cb~lýc-y-½IozŽÑdLÈM8{Z%t³%ýGž{}>’æOo1½E@ ‚#J±boq¦L™À·tíÚµ^½Úö¦ðÞ;Å¢íß¿?„c.»â¤S§v¥GèÙ³'ü‰0L•ÀŸøÔßÿÖ«WïÔ¾Ÿ}½k*$@<âsuÝ飻)dRW¥Ü±bÀ±c'?6‚Ë&ê5M±rˆ¹!ÒôLÒÂ<É̬ٱµB!‹Ÿy¤jZyÃÏ@MŶ˜u¨Ä‡Õ±”Üú[ú¯6‚ÆÛ{ˆ3KÁ÷ï?rÖ¬Y-[¶ìß$xÞ•ÚŒÆo7ÔBÔžê*pÝÑqG ÷Z½à+ôÕÿs @Èò×VèSôÕ”>¶¤u¼èõY·ŸçÐVÓ;wb!K±T)Vì* Ao¿ÝìÏ?ïÝZsüø±z}vÙ‡½˜B³µ{¿×æðŸ/ôÙX)æ;ÐBŒ¸u%ƽk*uíNñ? ÀÛûd\\@ûÖ‰D"‘ð•Ò¶?øTªâeØÉ¹´>zòÊ”˜$É#GöÙ>³•Á`r Ø:}™L>vöìù«WKÓT!ÓƒÝuž°½öXzö[=¡§Åôé§§_]üqÝŒ@‚ „¤0رñÁÆMw7 µƒÖ*%RZÊH¼¸ë³ñˆÀ[º[»’v}ø Ã0¥[±·8V¦9‡Ûb)ŠÒ«ãÐÞ﹆)<ü’J½k{š*•ë©S‡fÏÖ8pyÞXíïï¿zõê®]; öyê æUâ€C@†–ñªìX«~»%³†J¤n. ™Ôa‡ 0&5µ™‹ 0ŠùÙb9qý:ëêâà§T*$1e¿­ìì'nnÁq€3´wÞFŒÑ8<µˆ‹»»ÝÇôêÕßÞl¤” fÏž?uêìbÓŸ4)ÂÞsè&•-~ñ§g?­æ_­@\°ææ ÂpÌåìËZF›oÎO3¥ÅäÆ$èÓË£g£ Ú&KÙ-ëE¯Ï÷G‡=”™|\|~ûÕÃÝchèÐÒ­˜g[B.óȩ́%¼Œ– AJ¥bíÚï¾ývÑ… WõzSXXXÓ¦Ìæ½þ™§Ž§ÙÂ`*'ŽÄ½~?©‘ܯgývKg$+½5 æºúÕˆhÑ¡Æýë­gDL}ïú¥[°rÍ‚òz`Ë K¶Sί Ê51›×b² [VX²rN¬<“³e…%;R+ß’¾’Y•xÇÎ=‡õö÷öñTy¨\¥1MS¤s9®Y³ÆO?­ÈÌÌÒétf³=s÷í;DD“&(Вɤžžr¹Üªi‚ 5ŠËÆ g Aš>í2±Q`½]7öº~ @pNyŽ ˆ¤œ¤LCf Ïó6ºå0•\nï²Á;vî™={ZXZÕªùy{{Ì©3µÕÃæ»oî/_+¯+å»Yù¦sìgÛ#—Ùg¥2—§öú¥V v+1zA= {ðP/7O•«L"&)§jô8Ž3›ÍF£I$úøxCèÅÿ4~X!ë$I F‚"‘ˆ¢¸Œ©‹Þôó†© VâªØ»ƒÁ`0˜ªKa%ÆsÄ;‹™='GTt>0 ór)iéwƒ>3;û>ØIŠÐß–…"´k×Ëú«ƒ³]b0 ƒáACìXÖ”šp/+3#O[À± €3Rθ»»ûUoÀG+t,Vb ƒÁ`Êœœ‡IqIùZ—§ÊÓË[(†1 RRRòóskקرc0 ã,,kJ~šÌXÌ ê7 ÅðùrUA¸¸B•Ê+)ééÃ;Bë¶*z,žûƒÁ`0gIM¸——¯­ZÛ7 ©»w=¡HîØœ±9Ž#B*sõÑëõ© ·‹‹•ƒÁ`0§0è3³23¼¼s!´n«¢âvb ƒÁ`œ…†®yùÚ¡µ}šº{×K”ŒÅÈXŒÇQ%•¹ú„èõúÔ„ÛEÅJŒÁ`0Œ³defxyª„B1¿‡ã8ŽãXÆÄqIÑb±ÜÓË;//§è±X‰1 ƒq–|^.W‚,Ð&h“Ì&=ÚÏq@N ).½¡è±¸ƒÁ`0§€r,ƒºhéòÓ9Žã»R“$I H‚„"´Tb!°OŒÁ`0LE‚•ƒÁ`0˜Š+1ƒÁ`0 Vb ƒÁ`œÄ­ÁJŒÁ`0LE‚•ƒÁ`0˜Š+1ƒÁ`0 Vb ƒÁ`œÂþ%‰_+1ƒÁ`0 Vb ƒÁ`œ…†!‚¢E$IH’$I’¢E$IDz¬P (æØWž[ ƒÁ`^7r™^¯SºxPEbІAH’&)š$…kÖis¥2iÑc±OŒÁ`0Œ³¸»»geå˜Mz‚ B‰@ ¢bZ ¦hE‰àÌf}vv¦BáRôX¬ÄŒãDGG7N¥R¹¹¹uíÚ:ÙmƒÁTY, [.—&%=5´,c!Iš¢D%"IšcÍFC~Râ‘Hâí_·è±¸vƒq„ôôô©S§îÝ»—Wß'N?~¼[·n›1 SQÈ\}õøa¬§—·\®E–e tyÙÙ™B¡8¤vóbÄJŒ©$%%U«V­¢sñ ŽãÖ®];wî\­Vk½ßÍÍ­~ýú•+ Sá¡ô)-®yy9i©)hD¡@ “ËT*ä [s†•S©Ñétï½÷Þ•+W¦OŸ¾|ùrÔ¢ÉÌÌ6lØÉ“'ù=ADDD´hÑ¢Aƒ˜7 Sa@H¢§„rWŸ€z%E,ö!†•S©Ñét—.]¬\¹²V­Z“&MªÀÌ<~ü¸C‡ñññüžÖ­[oذ¡^½ï: óæa·Ã€{la*5ÞÞÞžžž(Üd2¡=­[·Ž‰‰4hÐ+Î ƒ©üØ'Ƽ~ :T£Ñ 0Çqƒ>qâÄ+³n±X °dÉ~Ï”)SΜ9SyzaÊ£ÑøÓO?M˜0áÉ“'LûĘגùóç«Õj6›Íýúõ»}ûö+°k4ûöí»ÿ~ô•¢¨íÛ·¯^½ZPÜ|u˜×ƒ„„„àààððð7†„„¼Ê×>LUZ°c^S,X0wî\.((èß¿¿Åby©u:]=¢¢¢ÐW¥RyüøñaƽT£˜ŠE§ÓµlÙ255•ß³xñâ ̦*âÀ¬Ä˜*ÃâÅ‹û÷ï±±±üñ˳e0:vìxúôiôU¡Pœ;wî½÷Þ{y1•#F¤¤¤Xï¹ÿ~EeS5Á>1æuç·ß~«[÷Ù\q›7o~I½· C=®\¹‚¾úûû_¾|¹Q£F/æòðÇíœ/‹+$3˜ªA oûĘ×@°{÷n‰D‚¾~ôÑG…<ç1™L;wþ믿Ð×   ˜˜˜°°°òµ‚©„|ñÅ( “ÉøÚ¥RYq9ÂTE`ÿôóX‰1UŒúõë/]º…µZíÈ‘#9Ž+¯Ä†2dÈùóçÑ×€€€Ó§O{xx”Wú˜J˹sç._¾ŒÂÓ§O§ég³¹ººV\¦0U‚pDU±cªS¦Li×® ÿùçŸü€c'Ž?ž¯ñöõõ=uêTppp¹$Ž©älذD"ѬY³233ÑWü†±Gfä-<ÛeÄñòÈÉ Å€ ™`->/¢ÖÄ]—¯54äeæÌûò†koW¿P'=».âÚ¡-(,’¹¾¿ð¯ÕœLS0äþ¶s ×h;tÁE×ëŸ)ñ}ƒ~*bJBÝÒúj$vÄ¿-¬Ä«º:œ% 3?àÓø ðéï¾½K—.Ƥß>aËó~ÎŽ±zõêïý€Â …âÔ©“Í›×.‡lbª;wþ¾ŽcQxã‚q­[ƒÃ0/@†nKðíŒ)œœ"»Z¥×Ncª*;wŒ~~~­Zµäçç£= …¢Â²…©‚©*VbLfýúõîîî(˜ûĘ7#FtëÖ …###:dû±,Ë4ˆŸåРAóçÏ/ÿ,b*7/^äèj://߃•c'Ø'Ƽ‘¬_¿^*•¢ðäÉ“u:~þùç|µd³fÍvìØáÀä8˜ª¯ÄÁÁÁÞÞÞ­VËÿŠk§1váØ3+1¦Ê°páBNNNægJ*cÇŽñ3„xyy8p€¢¨—•EL%æÖ­[(ÀwÓ3 ü¯ü„nŒm`%Ƽ©DDDÔ«W…׬YÃO]÷îÝãû] ‚½{÷¼Ü,b*+±±±(ÀOin4ù_±cìûĘ7Š¢~ùåäÔ²,;räHÔºX ÃÀùÈ•+W¶mÛöeSÉHNNæ[…ùÙÅ­}b¼ÆN°cÞ`š7oÎ÷Žýá‡JŠ9uêÔ7n ð!CÂÃÃ_Eþ0•’{÷îña^‰­{lávbŒ]`Ÿó¦³dÉ^°`AbbbÑ8{÷îݼy3 ×®]{ýúõ¯.˜ÊßsP£F °Vb¼ÆN°cÞlÄb1ï kµÚˆˆˆBîÝ»7fÌ–J¥{÷îÅ3(½áÄÅÅ¡€§§§\.Ga~x±P(ÄíĘWVbÌkEŸ>}zöì‰Âû÷ï?vìÿ“Ñhüã?¢5kÖ\·n]…åS™HOOG4§¢  d2Yä óæ•ó2cÆŒ:uê ðwß}=nÜ8ôU$íÚµ 7ciii(àååÅïä•ûÄp û4VbÌkˆP(ܰaºL&S·nÝ22Ðj³`ñâÅMš4©ÐÜa* ,Ëfgg£°µó}§q;1ÆfˆÂ6•ózòÎ;ï 2…yîÔ©SÑÕ˜7–œœŽãPØÃÃßÏ÷ÆC˜0€}b æ?¾ýö[ëÚE•JµeË’Ä×<æ%­¹”““ƒX‰1¯üT¼¶xyy©T*þk=øy?0P²'''£€u•5c3Ø'Æ`ž³páBëi¶Ž9’™™YùÁT6Š]ýÐ`0¤¦¦¢ppppd Sy^# !t vš.ïì`0•‚+W® ñK<¹¹¹fõêÕ•¥ªÇq'NœxúôiJJŠL&S©TuêÔiÔ¨?Õk€ÅbáÞ>} !Daëé>0Û€øÄX‰1¯!&“iÔ¨Q¨3I’ 4¸~ý:`ýúõ³fÍ ¬è V^,ËÑ£G7oÞ|ìØ1¾7AmÛ¶íÓ§ÏÈ‘#ÝÜÜ*$‡åˆuùÕ©oÞ¼Éï yÕyÂTyQb\;y Y´hÑ;wPø“O>Ùºu+ª/²X,Ó¦M«Ð¬UjNŸ>]§N>}úDEE•a„ðìÙ³îîîÖcê(,Ëòa^‰ÿùçpwwÇJŒ±‡j§±c^7bbb¾ýö[®Y³æ¢E‹6lÈh:tèÐÙ³g+.w¯ëzW[ÈÎÎ1bD§N=zTè'???¥ ° IDATRYèá!<~üx½zõø‰!_x%nݺµc+ÜaÞd €…•óZÁ²ìرc‘‘$¹iÓ&´–ÎâÅ‹ù%ßg̘Q‘Y|Éäää4hÐ@"‘,_¾ÜÆCÒÓÓ›4i²}ûv~L&›;wîéÓ§ÍfsRRR^^žÅb9wîÜüùó===ùhU}©"ë!mÈ?NKK‹ŽŽF{Z·n]1ÙÂTi°OŒÁ¬Zµ*&&…'MšÔ¶m[®^½úôéÓQ8::z÷îÝ“?ûÞ¿ßöø3gμuë˲sæÌ±î\©©©õë×úô)ú*‘H-Z”••µxñâ:ðý˜(Šz÷Ýw5MzzzBBœ9s¦M›¶{÷në‡NlllVV–=…«`øið\‰÷ïßÏWY÷èÑ£b²…©Úà[˜7›¸¸8µZÂþþþK–,±þuîܹ?ýô§/¾ø¢oß¾¼Ì¼$ŒFãµk×Ο?¯Õj=<<<==›5kj{ û÷ïþÿöÎ;°©ªýãϹ™Ý{ÑIé€Ò2«ì!Dd¼¯²T(Š"C*‚P^E} 8°¢¾€2Tý±ZºWhº÷HšÜûûã†ÓÕ$M÷óñOnÎ=÷ä6É÷>ç<çyæÎU(Ï=÷Ü{ï½×hX’œœœO>ù„/«ÕêÂÂBÓ¶ËÊÊÆŒC§{ûöí{úôéÀÀ@ÓgÑ¿¶0qâD†anܸ¥ójAAÁ7®\¹" cccØ|°µ?ü8Ê‘#Gø§QQQ˜4± Tb¤s³dÉ»÷îÝ:"äââ²aÆ+V@jjêþýûŸþùfêIBBÂñãÇ=Js2R¼¼¼æÏŸ/6òíS*• ,¨««€ìÞ½»Ñónܸ‘št ÑH&³fͺuë_îß¿ÿùóç­È7˲ûöíÛ¹s'ÝŸ°sçγgÏj»€9;;¯]»véÒ¥b±ØºÓÙº†ÊËË/_¾|éÒ%þéã?ÞJBÚ+t|G§‘ÎË?üðí·ßòåéÓ§?úè£úu/^LÓÐnܸQ¡Pؼ¿ýö[ïÞ½'NœøÑGéË0nÞ¼¹W¯^)))¦›ºzõ* €|8!!/GGGŸ={Öj®¯¯ÿóÏ?ù2k&“ɦM›6qâÄ„„O슊ŠU«V5J©TZt¢šššÓ§OÇÇÇoذáèÑ£4“’uhÇÕª¨¨ˆçËR©táÂ…MiéÄXãå‡JŒtT*õò³³3¾C"‘ð¦Ø<ÊÇ_|1dÈëׯ뿤££‰‰‰Ã† »s玉Ö~ÿýw¾ ‰´%Öï½÷ž¶ËôÈ‘#MT...^¾|9_vttù¤™§¨««[¶l™««ëÔ©S×­[÷ÆoÌž=Ûßßÿ±ÇKMMµ®ÛÚJüå—_Òû’ùóçûùùY×&ÒéA%F:+ûöí££¬«W¯îÒ¥‹±šsæÌÑN]LG³›ÎÅ‹üqƒËp`íÚµååå ¾Çùùù#Gެ¨¨0Öàµk×øBdd$uü6Fmmí‡~¨½gèСÆ*ÿõ×_/¾ø"Þ¾}{£sæÑ^ûùÍ7ß >¼  €ß# /^œ’’²l]]Ý… èèóÏ?ÿî»ïm?55522rçÎ:«³ÔjõñãÇ|ðÁ´´´×_ýã?¶ÈÈvww§SÅûöíã ‰dõêÕæ7‚ ÷aÕÊ7Tb¤ÝS\\¼nÝ:¾¸råJ•­\PP°gÏ[uC{>J¥ÒÙÙyþüùYYYT#årùŽ;Œ’‘‘ÁzõêÕèÙwîÜI‡²y† b°æü1lØ0êš4lذ 4Ú¾iøfàââòçŸΘ1C¥Rñ{F%—Ë÷ìÙûªñQº~ÿýw:¾bÅ ]Ò ·nÝ0`@vv6ÝCñðð OKKK{ôè±iÓ¦gžyæõ×_7¿Û„¯½öZïKÎ A›霬[·Žæ{ß¼y³v&Dƒ<öØcÔ¹÷wÞ©ªªjzjkk¯\¹¢³ÓÙÙy̘1sçÎ]¹rå[o½Åï´³³;þ<õËݲe ÍÁ§ÕÓg¯©©Ù²e‹öžÈÈH}áÙ´i“öö{ï½×ôøT‰…BáôéÓ©åºdÉ’³gÏj«&O@@À+¯¼Â—“““é³>ãǧß°°°ï¿ÿ^¥R%&&N:•ßOÏxüøq‹z®ãÔÖ£G4ˆ‘¦JŒt>nß¾½wï^¾wúåŸîûûÖU–œ»ü—öžZ».濣´¿¿:ù-}:4nǧý>Å//b6ëèï³…¿;ÁšÞ (váel!Î;·óê¾üôÓó¾ÐÏìC™ÛÞ˜1cÔU–t¹½Ë¢ùEJYYÙ°ac© GEE%$$˜9˨š1‰Ÿ¥.¹ý?ýÌùów©·ô¦©z¡2ؾýƒšR¹ÎÎmOõíÙÓ@eï'„' àÔºÉM¬üóÏï»ϤI“¾ùæ@£Ö)÷}ï]7.€°,ÕàWfêÔ Àq  /~w¸[7ݾ>ñÄÒê’<í=C£üÌüö¥§§?8wl]e ÝónÜ0[  í™%„ÇŠvpti¯°,KXÚÙÙmذÁ¢Ã§M›ÖóžX½ûî»&|˜¡V«§OŸ~óæMþillìÅ‹Íwöéß¿?_())Ñ_ÙLÀÛÛÛX#•••úᮤRi÷îÝõ+'''kgOš6mšM2Ð@Í<ÁÁÁŸþ¹9£Äݺuã ÙÙÙú>ç¹¹¹ß|ó _^°`­L9uꔾ—œ‰k¥ÍåË—ûõë§›ó?þ0çX±cΉ¨ÄH{åàÁƒ4•ì‹/¾Øh<)!4’CII‰NÔ7n}¨‹rll¬ÁúEEEÚOm’kˆeÙóçÏÓ§³gÏ3fŒ™ÇjÇûÔž½æ¡ºØ«W/}Ÿµ Ð[mÛ¶QSÃÕÕÕôI·oß>tèPê0?{ölªè?þø£¥Ù$D—F¨Ñ&F:›7o¦ZµyófíÂæCY»v-_...~ÿý÷Í<ã8š{‘rúôi+B2i뢾%GCŽ˜°/ׯ_O³--[¶,/O3cÚ¯ŸáùríåRaaaM ªE¹víýC8;;›ŸŠèÚ$m£–BÇŠÇŽ«óÒŽ;hdÓÑ£G/Y²„*¨D"1vºêêê™3g¾ôÒKt$|æÌ™Ÿ}ö] UQQÑŽ’t!m‚61ÒiÉdtéQÿþý͘¨ÏŒ3hÈ-óÍâ'NÐ%°qqq&¢Y™ 77—/H¥R}¹å?ð¯<ü¯¿þ:xð _=z´ö༱…IÚÅúöíkEŸõÑ^µ~ýz___ó¥×]ºtÑNÏËË£#ö:7W®\¡Ã!...‡Ö6AŒÍÃ<˜ -Ã0[¶l9zô(Ã0cÇŽ¥Woûöíæ÷Aô €JŒtâããilŠ·ß~»)nG ìY³†/Ëd²O?ýÔœ£h 77·ÿüç?Öúÿû_èiÈË™ 0•dmêêêæÎ˯ÜeæwÞ¡9ŒAttt£g·(9£1*++ß}÷]¾¸dÉ‹§În]»vÕyI;µƒö«‰‰‰“'Oæß8!äСC|z¹ fÝ8pà@`` ]ð-‹¿þúëU«VñOÍ÷ð÷ßSkA¬ 1÷iF:iii}ô_?~¼±æ3gÎêð¼mÛ6c£)üñõ^¹r¥~)s¨¬¬¼pá_?~¼~j%tê~饗’’’øòòåËûôéC}­=<<Œå]ÖŽºe¦±ivîÜIG˜/^li¾ç«W¯òýátmóÝÁÁ/äææŽ7ŽžqÕªUt`™Nkûœ@RRÒ<°páB:ÚÑ£Gëׯ?üðÃÚÕ–,YB'8ž}öYF#G:h#ƒøøx:Akµ=ª@ xùå—ùò;wèÊc;vŒ/H$«3öÙgtjsâĉúh¢ˆªª*;ïÔ©StJ»{÷î¼8Õ'wÚ.ZI`åååÚc¹=ö˜E‡_½z•Δ¨×C;·4ÿÖrssL‡ôg̘ñæ›oÒ:Ôħîô¹¹¹‹-ŠŽŽÖ¥ùÔSOýþûï‘‘‘:§sss£&²L&›?>}I¥R½ÿþû¯¿þz£·hBˆ•KŠQ‰‘öDzzúáÇùòôéÓé’Ü&2þ|ê¾d"%õé?~¼užbÇíÞ½›/GFFLÕ ½.™Ž<ÀÕ«Wç̙×%ɱcÇììì@ËÛ„÷oŸ>}vìØ?hÐ +z®Í¨ Ø<jÑá_ý5_‰Dúë©‚ƒƒ©ÇøîÝ»×­[L畇~ìØ1m—òx€/œ={vÛ¶mÓ§OÞ¿? ½)•J¿úê«C‡ik¼6«W¯¦‹°?ÿüóyóæñÇN™2åùçŸß´i“EÎhHçÃTM Ž#® ¨ÄH{">>ž_îB±.*–Až}öY¾|áÂEY…BA‡…GeÝé¶lÙ’˜˜È—/^lðZ{òøâÅ‹|!55uòäÉ555üÓwß}—:gñz F&J)Ë–-»~ý:õ·ŽãhAxüñÇ-mÆš>|¸þÒ#:€|âĉøøxj’:ôûï¿×^3gÎä *•êå—_>yò¤¶ ;kÖ¬üüüiÓ¦™èP(C¬ÍŒ3¨’mݺÕàRWW×'NPù¹xñbPPМ9sÎ;GWÉd²_ýuÍš5áááÏ>û¬\Þ?8..îüùóæy„±cÇÎ;wäÈ‘mÄ}755•/øøøX½¢A *1ÒÖ¹ví]ñòÔSOYšýÐ"´£|¤¤¤œ8qÂ`µ±cÇž>}š:[±,{äÈ‘Q£F‰Åb†a† >|ø–-[ÒÒÒèQnnn_}õÕ¾}ûLd)hðA<$ÉÁƒùO!H§¢Ñ{dŽã8à8Nß¿•iëÐuÃ"‘hÆ Í}º ÐøV+V¬ÐvÖfòäÉ™™™3fÌÐÙÏq¾fR©ôµ×^“Ë妗´¶V®\yéÒ¥ŠŠ ˜‘‚XêP‰‘6Nff& ­§¿¼ÄæØÛÛ¯X±‚/Ëd²åË—ÓµC:xzzž8qâòåËK–,18Ú, 'L˜°cÇŽŠŠŠM›6YävÔÆ¹ÍÌ„ädS3Ù‰îÄ-¿õìÙ^g²¤Bˆ•_7Tb¤ýóÓOðçŸémwñ÷YÒÒàÎHJ‚Œ HJ‚´4ÈÎ6gŠaÀߺukØBB $¼½[¼ß‚ècårSÒ!@À ›˜¤F%Fæã %þùÒÓ!9Y³\ª¸Ø@M†ðpˆŒ„îÝÔ7(–¤a,+Î#HóÃq–·oÃÍ›pëܺ‰‰ T¨éé ±±Ð¥ DF6¨o»sCD8OŒ -‰\×®ARܼ 7oÂPW§[‡4üü ""#!"zögçÖè.‚ Í)›Ø¨Äbõõð÷ߎq®^5°L™èÝ[³VªgOèÙ""@$2Ô‚  ¢1ê³E€àÿÓwÇD%F=ø°\ü–™ ¿ÿYYªõî þþÑÑ QQ˜Ap΄g5*1Òé),„¤$¸~ÒÓ5~U ÖË(,ÁÈ‘ 11Ыôí ŽŽ­Ñ]A:¨ÄH§áÎÈχÂBMZC>ÅPJŠù]‹¡O¥={‚?fËEÄ:L9N*1Ò)(-…¡Cáöm£|| G ^½ {wˆˆha¹i· #€ÂB¸}„BðòGGè×üý!, üü (ºv…”#s‡IDAT7·Öî"‚ ´‰$"T*¨ª—Öî ‚ ˆ.Äé(´ØÄ¨Ä‚ Òš #‚ H“ &£kÐäˆ |=½Ð¨Ä‚ bˆu‰Q‰AʶŒM€JŒ ‚ 6˜'ƺ£Ó¸Š AAl!FG§‰æÁð«h#‚ ˆM°Ò&F%FA€óÄ‚ ÒºXé;óÄ‚ bôÍbŽãá ŒÍh#‚ ˆMàp=1‚ ‚´"¨Ä‚ Ò:Ž3ä´ÕHú@%FA¦Â ±Qѵ0?ñ[›Þ£N þ]Çð2"‚ttžíI‹„ãXÞ&–e^/.*,¯¬fÕ*ŠÄÎNŽ!ÀqF°u•ø™>ÍÜñŽQ‚«#^FAN@ý}Ï8ŽMºqµ¢²ÊÛËÝËÛG,€J¥ª­­ÎËË«¨(‹êõ Áft•ØÇ±yºÛyPñ2"‚t|JKï{*Ï-VÕ+c¢cÄb)wÏð%„¸¸rîîÞ2YÖ›Eôì§ßÎ#‚ H“ „põå•ÝÂ"ýû{øô”HŠ‹òTõu,ËBì\Ckjjîf§êŽJŒ ‚ M¥¸¨ÐÛË],–¾°d¹XâàáÝ=¦ß” nÃüƒ\¿Ÿ¥RG/oŸòòRýcQ‰A¤©TTÕ8::aÞÚ´Bç¥õ¯-މ$NN.µ5µúÇ¢#‚ HSaÕ*ÞEënnr\\ÝWVZ„!ŒH$–¨ÔjýcQ‰A¤I­Ã..nóæ £OÎãæîcúpTbAi*B‘X¥RB„"i``WÞ,Ž‹‹óõ b!!€U«Õb‘HÿXTbAi¾~œjjªX–B‘tÝ«ó`Ãëqb±”F̪UU•eööÀHtG%FA¦âááQ\\ªTÔ"‰í$»BùM¡H*ŠD";V©¬)))rrrÑ?•AAšJ—àGG{™,«¶¶R­ªg¡@ $ #dÕÊºÚ Yn†Dbçí©¬nŒ-AA¬ ¢ç”[—ÓS“¼¼}Eb ¨Õêêªò’’"±XÕW­èˆJŒ ‚ 6€=Džs«¼¼4_žÇ/X‹DŽîîžÞþ‘,+0˜— •AAš ÍLìØÓ7ðÞ^NœZÛEËPc=%.-ÍjŽ.v.>xA"Ҹŋ[‚ Òš #‚ HkÒˆÕ\§È/-¿m]Óg`^Ú&4W»Í‰É«¡ûgü¥Æµ]e„ÇФN;¡þÞ–\ bIm‹*[F;ü j÷˜ã8C3‹&Þ”©÷Kiކ¡kLŒ–‰yÕ4-7ןϢv…;pwíÓL1 Äô/˼^\TX^YͪU ‰=<<Ô"9Ü“¾&£ô¡5›ïÂ!H[Fû47B‘ØÉÑÁÝÝØ•˜sÍÛá](×P0ù-úÀÒbW‚3Rà,è2g´21ðÔ¨ÆÚcäªRTU:è)`™‡‡G—à0z‡d%†mâòÊĜԂŠÊ*o/w/o>¿„J¥ª­­ÎËËsp°sòRÒÊ¥yŠÊZ‰Î *qK¢R©jjªär¹££½›ŸšF¸giiÿ(kýÉîí'Ú/Ñ':í´ÈßšÐ_üûO§Õç†ýwšØßî0ò¦îÿ{~é¾ý¦þ|ü939«¢²Ä VT”EFmÚÑŰ禪ê•1Ñ1b±”Ó%pqåÜݽe²¬šb;'€â\•ª^¡]³ÿ¥ÄJP‰[Bˆ³‹'ÿsT–G‚»¢íõÒrÚ£5ñdÌ ä¬« ÷”˜†7Òð¨‘Bî{Ú°SçÆ¢åî – Þ1Üë•Ñ[þ ÅqÜíÿûÕ´¦Þ¾5Ȇ'5 Ä²Ìëå•1Ñ1~ý ²<çnn²³³ë¶þwÃëqö®‚ôÔ$Ç_µZ]^‘KkVUäVUà/Ò9A%nIB‰@  ?GerßÀž­Ý©fÁ¶£ H£Pô è·äÅomZq77ÙÅÅM ”0 C?ròœ[~AѶ:©®×)ò‹‹ ½½ÜÅb)¿çÖßÿûù¥ýû÷Àú׈ÄB©ÔÑËÛ§¼¼TQ§Ð® ,Ëâ‡霠·(*!R‘XBŽb) HÐVÀýû÷ïß¿?..nÞœaþþÁB‘T[ýlwRÝUL¥å·+ªj0•å9/,Y>|ôS¼ kàX‘HâääR[SKkVWʪ+eJEí:† b–eîû9jí!ªkU¹üžýû÷ñĶþ ¹>rº6±J¥bÕ*~‚Úû»Î«e¥>~] #‰%*µšÖ¬ª(`Y¶ù–-!‚hÃ0 !CŽZ»GHêÚÝÜdíý¼}\”«9>rº6±@Ðà…˜•úK\\œö«nî>6<7‚ ‚´Mœ]µŸÆÅÅÝ;z%Ø]›X*qŠjT*!D$¶{}Í“ÏÌñÑ/ðÔ #$„°jµZ,)Ej¾¦@(•B­VknT¤óóÄ-‰@(Ñù9jí!¡HÌëšP¤qŠ‹‹[8oŒ_—`½œÍÌb]%vwíãäXZSSåìâ)‘‡/{Þõµ ߨô!#2Œ˜U+«*Ëìì #Ю)r„ü%B:'¨Ä- Ãu~ŽZ»G6G{½“þÄgü©E•Mœ×¢—LW0¸ß¼Ê–}Ÿ, sbp¯“£Õµ¸¸¸õ¯-(/+ts÷a!a÷äì,êœ ¬bòððËåîîÞö®"±„cÕ^>ÁðfüR@À*•5%%Ennööjš@Ð&F:)¨Ä- !„aÄôçÈÝݳ±# .ämtE•MœÔ¢—ôûÐè‡ÊlbIe‹Zn¼²æUC_£6ß÷ÉØWU[ߌ_J¢£€6ìŒ%îSUU!“e ¤RG¡PL~ä‡eÕJ¥²F–›!‘ØùD€~Mü%B:'¨Ä-KÃÏ‘X,õöïÖØ¤¥!5ּ̨æš~´K#7äþ§ú´Ûmžgó}è›1î´‘–ƒÂ‚ÍSÀ0vÆpŒ­ˆžCRn]NOMòòöqtt‰% V«««ÊKJŠÄbihäÆjâ/Ò9A%nIÔjuUeYII‘Db×­{ ÛØM±íŒe)hzË&ª™¶‰ÚÑ{ÍÔ)šéÓÙòzÙ¬Dõ‰Iüç¦ ŒŒ‰ªWŠmxFÃJL‰ˆ"ϹU^^š/ÏãݵÅ"‘ƒ£ƒ»»'o ÓßšøK„tNP‰[±Hdï`ïææáfž¾Xd³MgóÑ ‰ÜXe}%Öé¡f^ê6íS´ÔÊÒv¸„ÕÄW•Õ7&7=Lj†©êŶ½¶”˜öÏ7°§‰°5ÚoÃtMAÖ¦æ‰[F}¸Ææ‰-éF3u™Óù¿Å'o‹Bk .Z¶½çn$?1bW®œ€Aƒ¦µvGÌÂ`ÌÎiÛÑ\{]‚c:çè¸L?ÐÀag•¸¹˜4iYiiVk÷Â\8Ž»õÏ/Úy0;§Ñ\{UU6O|† b6¤Äõ‡MÚ¡A7ÍÑ’§§?h““¶wô³€uN%Öε—|óRxÏÁó: Ò’´!%æ8î½M«lÕZffæöƒÇwů4]§™­Í‡NÌΜÝR'×^~î펚kA¶CRbþ§?33³éM%¦ËxËØDkIw›~¢ŽNLèÌÙ-1ׂ -NRb¦r¢A7 š¼÷”0P­†Šª_?>»%t°ì–7ïü5iÒ²ì´_Í©¬“k¯ _Þ¼CiSJlC#Œã8]ww€’’L[¢#Ù-)˜kA–G7+b+Ò61‚ ‚´q:¾MÌ[ÃÚåââ [AAšÚĦà8îÌ™³&Ìxï½ýMo Aé丹ëïl\‰9Žóðèڣǃ½{éÑãÁðð~ë׿©ql±):ÚyêÔ©yóæEDD¤¤¤X*ÒÚ6qII&Ö.›ÉK/­]½zÙ“OΤ-Ÿ9svñâ—bcG¦§gÚäîÁãëիךގm qíï[Í}–³?þºbÕ›#ÇÌÎÈÌmîs!‚´.nnÁgμ«¿ßÜÑéO?ÝÛ~ûíÏÉ“û÷¿§EG÷°eõlbggç•+WÆÄÄ€å×6œ'.(( pvv¢{œœ_|qÑ!ãmÒ~'ÇÑÑáÙ…³ÆMš×bg n쥬Ô_Z¬‚t6ŒÉ0X1:Ý«WO¨®®æ8îÃ?3æÑèèAÏ>»œZÉŸ~zlÊ”™óæ-îßÄܹq¼yúé§ÇFŽ|xôè)S¦ÌÌÉ‘lYG;GÅ—­¶‰¯\9Éoß}·ã»ïvðåß~;ÅÇ…ÖáÊ•«Ã‡O2dü£ÎÎͽËqܼy‹`Μ…þù7íä°aƒ##Ã-ê¥è_[ŽãfÎ|f÷îéõ\ºtþ…å8.++ÇãëÖ­;GšÂgdeåØÄvç8îЧ_N™¾hàÐË_ÞÄ÷êé«÷8Æ÷êèç߬~u+_˜4eþ”éqÏY*“ås—“›>âÝ÷=2m¡v›ƒõ‹ïÚô¾™1¹EF¤ù 2l0JÌq\IIÙ¦MoûøxózüÈ#Ξ=yá™ãÇOr÷Ï?7Ö¯ó“Oö~üñžyóæðþóÏM›Þ>yòðO?0àøø­ÆÚ×ÙCµÙj›xâ„%Æ6S+•õÏ<óüªUK/^LèÛ7fÕª×àС÷àÈ‘üx@K¢smà±Ç¦?®¹8tèÈSOÍ2qa…BÁ?ž€Û·÷÷ïb«^Mœ0âÔ‰Î|óÑÉÓ?•Àô©ãNž>Ë¿zäØ×³g>rýÆ··8òÙŽÓ_î{ 6fË;ûz%œ:±ÏpÓ-ˆ¾è¢ #Ò|˜–a0tzΜb±ÄÞÞ®oß^_}T*•€T*=vìËìì\P(”pùòïÝ»G¸ººh{áÂ%†a^yeäää—<…¾ÜRm¦É‚Ì„ÚÄÉ—N­0PûYrrjAAáèÑ#`ôè|fþéšýk;qâ˜+^½u+I¥R±,Û§OÌ®]ûŒ]Ø¥KŸã—ÆúøxÛ²WÉ—'rså TÖÀ˜ÑC^yý¤;iõõj–åb¢#÷}x”aÈw€L&/)-§‡?·hô‰ÕeY©¿Ðaj”aAšvs Ö9e®>| 6¶¯¶*ŠÑ£§,Y²èé§ç¼ýö.~§]I‰Fd2M8I±XÔ¥‹ßªUK5§>isØÄÖÑê¡-”J¥Îµ%„ØÙÙMúð_œ¬¬¬|ê©Y„V 4C¯ê™·há¬9³ݹû“{½’Nž4ê«Sg«ªªgÏ|„"‰ü|½–.™Ç%i÷ª ùêóbŒ2Œ Hó¡/Ãgμ«o[ÿ˘“#ËÌÌ~䑉55µP[[ ãÆ’ÉòvìØóÖ[Û~âåp„1ÉÉ©wïæuíܵk°››«ÁMÛÄõM'ÆVve¡öfðˆˆ0oo¯sç~€Ÿ¾0lØ ‹Îh[ ^[xì±é_|q2!áçýëQк°¡¡!¡¡!ú–ã¸üü•Jm“{ ™LžswℵµuÀ?½êŸ~¾üè#c`ô¨Á©©Yrya×€®!®.N¦mUP†i> ʰÁšÖGö ž0aÌÀ£'L3cÆ”™3Ÿ¹ví—.]|OŸ>òùç'ÃÃCçÎ}<==ºv >tèýµk7ÕÔÔÚÙI{ôˆÜ»w‡~ƒ:jñâ‹/þúë¯ðè£FEE8qÂü¾éØÄAN^T€ÇNZw~ýJ§¾X,:xp÷êÕëþóŸmn{öl3Ø2ÇqkÖ¼ñÛoW`öì‘‘áŸ|òù3Æ“O>+‘ˆùò† ¯>üðxýkK0 ¿ô¡‡†9::BBCCt.ìl×i9*jÀµk¿XÑ«E‹×Š%šèܯ®^<~ܰ1£‡Œ7wÌè!S&~záê_ÿwŒÒ¿_ŒT">ì{BH×€vÇÇ¿¹»¶N!•ˆ##Bw¼óš±S¬ß¸ó«ÿ ½²wO¼ýDik“aƒSÅ+1!Ä`P*¡Ppøð‡Ú{8Ž+..‰éÙ¯_ïššÚ©SgÏœ9oa̘‘cÆŒlôDÚOwíÚÕhߌ¡wšcƒ2L<øÁ_MÐÙ©óÞ ![¶l°ºc1xyu®-J¥V*ëŸzjÝ£aƒƒiƒÆþvæ™rAç½oêïT«Uõõõ³„î9bÀÈ´ëølpú¥ÖuA¤Íb‘ ƒÍ£]^¾üûÆ[D"Q]]ݸq£žxbVãÇÜ£¹cl9yqnœ<ù¯¯wïÞ1­Ý‘ûøæÛŸ}| Xournal User's manual

Xournal User's Manual

Version 0.4.8


Xournal is an application for notetaking, sketching, keeping a journal using a stylus. It is free software (GNU GPL) and runs on Linux (recent distributions) and other GTK+/Gnome platforms. It is similar to Microsoft Windows Journal or to other alternatives such as Jarnal and Gournal.

Xournal can be downloaded at http://xournal.sourceforge.net/ or http://math.berkeley.edu/~auroux/software/xournal/

Xournal aims to provide superior graphical quality (subpixel resolution) and overall functionality; however various advanced features have not been implemented yet.

Table of contents


Getting started

Xournal's user interface is (hopefully) intuitive, and if you don't run into installation or tablet calibration issues, you'll probably be able to start taking notes without referring to this manual.
Here is a screenshot of the user interface (click to enlarge):

Refer to the next few sections of this manual for more information about the various functionalities.


The drawing and selection tools

The pen

The pen is the default drawing tool in Xournal. It comes in a variety of colors (see the color toolbar buttons and the Color submenu of the Tools menu) and thicknesses (see the thickness toolbar buttons and the Pen Options submenu of the Tools menu).

The eraser

The eraser lets you erase what you have drawn. By default, stylus buttons 2 and 3 (mouse middle or right buttons) are mapped to the eraser tool.
The eraser comes in three different thicknesses (selected using the thickness toolbar buttons), and can operate in three different modes (Eraser Options submenu of the Tools menu):

  • Standard mode (default): the eraser deletes portions of strokes previously drawn using the pen or the highlighter. In this mode, if you erase in the middle of a stroke, the remaining portions of the stroke are automatically split into shorter strokes. The background of the page (and the lower layers) are not erased.
  • Whiteout: the eraser is actually a thick white pen, and simply covers whatever lies underneath, including the background of the page.
  • Delete strokes: whenever the eraser comes in contact with a previously drawn stroke, the entire stroke is deleted.

The highlighter

Like the pen, the highlighter comes in a variety of colors (the default is yellow) and thicknesses. Use the color and thickness toolbar buttons to change these settings.

The text tool

To insert a new text item, click at the location where the text is to be inserted on the page, then type it in or paste it using the contextual menu (note: no wrapping is performed). To modify a text item, click inside it. The font and point size can be modified using the "Text Font" command in the Tools menu (or the toolbar button). The color is the same as that currently selected for the pen (and can be modified using the toolbar buttons).

Text items can contain arbitrary Unicode characters, provided that a suitable font is installed on your system. However, languages written in a direction other than left-to-right might not be handled properly. If a journal contains some items in a font that is unavailable on your system, another one will be substituted. (Also, text items will be lost if the document is opened in a version of Xournal prior to 0.4). Finally, note that the printing and PDF export features only accept TrueType and Type 1 scalable fonts (do not use any bitmap fonts), and that the typesetting of the text may be slightly different in the printout.

The image tool

To insert a new image (from a file on disk), click at the location where the upper-left corner is to be located. A file selection dialog box pops up. Alternatively, images can be pasted directly from the clipboard (without having to select the image tool). In both cases, the newly inserted image is selected, and can be easily moved or resized as with any selection.

The ruler

The ruler is not a tool by itself, but rather a special operating mode of the pen and highlighter tools. When it is enabled, these tools paint line segments instead of curvy strokes. For simplicity, selecting the ruler when not in pen or highlighter mode automatically selects the pen.

The shape recognizer

The shape recognizer is also a special operating mode of the pen and highlighter tools. When it is enabled, Xournal attempts to recognize geometric shapes as they are drawn, and if successful will replace the drawn strokes accordingly. The shapes that can be recognized are: line segments, circles, rectangles, arrows, triangles and quadrilaterals. Polygonal shapes can be drawn in a single stroke or in a sequence of consecutive strokes.

The recognizer is set to be as unobtrusive as possible, and should not interfere too much with handwriting. (It differs in this and other ways from another shape recognizer written for Xournal by Lukasz Kaiser). As a result, it may only recognize shapes if you draw them carefully and deliberately. Specific tips for better recognition: (1) for circles, a closed curve that isn't quite round works better than a rounder curve that doesn't close; (2) for arrows, it is better to lift the pen before drawing the tip of the arrow, and make sure the tip consists of two straight line segments; (3) for very elongated rectangles, recognition tends to be better if you lift the pen between consecutive sides.

Default tools

Each tool (pen, eraser, highlighter, text) has a default setting (color, thickness, ... for the drawing tools, font and size for the text tool) associated to it. The "Default Pen", "Default Eraser", "Default Highlighter", and "Default Text" entries of the Tools menu select the appropriate tool and reset its settings to the defaults. The toolbar also includes a "Default" button which resets the currently selected tool to its default settings, and a "Default Pen" button.
The "Set As Default" entry of the Tools menu takes the current settings of the currently selected tool and makes them the new default.

Thickness buttons

These three buttons control the thickness of the current drawing tool (pen, eraser, or highlighter). The thickness can also be adjusted using the appropriate sub-menu of the Tools menu.

Rectangle selection

This tool lets you select a rectangular region of the current layer. All the strokes which are entirely contained within the rectangular region are selected. The selection can be moved within its page by clicking inside the selection rectangle and dragging the cursor. If the cursor is dragged to a different page, the selection will be moved to the topmost layer of that page.

The selection can be cut, duplicated, etc. (including to a different page or to a different journal) using the copy-paste toolbar buttons or the corresponding entries of the Edit menu.

Lasso selection

This tool lets you select an irregular shaped region of the current layer. All the items which are entirely contained within the given region are selected. As with the rectangle selection tool, the selection can be moved, resized, copied and pasted.

Vertical space

This tool lets you insert or remove vertical space within the page: all the items of the current layer which lie entirely between the cursor position and the end of the page are moved up or down.

Note that the background, and items on other layers, are not affected. Also, if you insert too much vertical space, some items may fall below the bottom of the page and become invisible. These items are not lost: to retrieve them, either use the vertical space tool again to remove the excess vertical space, or change the page height to an appropriate value (using the "Paper Size" entry in the Journal menu).

If you drag the cursor below the bottom of the page (so that the entire block being moved has become invisible), the items will be moved to the next page (topmost layer); however, any items that were already present on the next page are left unchanged. Similarly, dragging the cursor above the top of the page so that the entire block being moved becomes invisible results in the items being moved to the previous page.

Hand tool

This tool lets you browse the journal; dragging the cursor scrolls the view.

Undo and redo

All operations performed on the currently open journal (drawing, erasing, cut-and-paste; adding, deleting, and reformatting pages; etc.) can be undone and redone at will using the Undo and Redo toolbar buttons or the corresponding entries in the Edit menu.
There is no limit to the depth of the undo/redo stack. It is cleared only when you quit the application or open a new journal.

Button mappings

Stylus buttons 2 and 3 (mouse middle and right buttons) can be mapped to different tools using the appropriate submenus in the Options menu (whereas the Tools menu and the toolbar buttons affect the primary tool assigned to button 1). The default mapping is the eraser.

Advanced configuration: if a secondary button is mapped to a drawing tool (pen, eraser, or highlighter), the default is to "dynamically link" its settings to those of the primary tool, which means that each drawing tool has common settings (color, thickness, etc.) for all buttons. Dynamic linking of brush settings can be disabled by selecting the "Copy of current brush" option in the "Button mapping" submenu. The settings of the tool for button 2 or 3 are copied from the button 1 settings at the time when you select the option, and afterwards they are no longer updated when the button 1 settings are modified, thus making it possible to assign pens of different colors or thicknesses to different buttons.

Another option that affects button mappings is the "Eraser tip" option. If this option is turned on and the XInput extensions are enabled, then the eraser tip of your tablet's stylus will automatically be remapped to the eraser tool. This behavior, which overrides all other button mappings, is most useful if your X server is configured to map the eraser tip of your tablet's stylus to button 1.

Also note the "Buttons switch mappings" option, which may be useful to users of external tablets: when this option is turned on, buttons 2 and 3 only switch the tool mapping, and drawing is still done with button 1.


Pages, layers, and backgrounds

A journal is composed of one or more pages, whose characteristics can be modified independently of each other. Each page consists of a background and one or more layers stacked on top of the background. All drawing operations take place within a single layer, and do not affect the background or the other layers. You can think of the layers as transparent overlays: drawing and erasing always takes place on the topmost visible overlay.
Layers are a convenient mechanism to add temporary annotations on top of a journal page: because of the logical separation between layers, erasing in the top layer will not affect the contents of the other layers, and the top layer can be easily discarded.

Navigating the journal

The user interface either displays all pages in the journal below each other ("continuous mode") or a single page ("one-page mode"). You can switch between the two modes by using the "Continuous" and "One page" entries in the View menu. The default is the continuous mode, best adapted to note-taking on multiple pages. The one-page mode is more appropriate if your journal is a scrapbook in which the pages have different characteristics (in particular, if you are annotating a series of pictures of different sizes).

You can navigate the journal pages in several different ways:

  • using the navigation toolbar buttons (or the corresponding entries in the View menu) to go back or forward one page, or to jump to the first or last page of the journal;
  • in continuous mode, scrolling down to the desired page;
  • entering a value or using the +/- buttons in the page selection box at the lower-left corner of the Xournal window.
As a convenient shortcut, going forward one page (or pressing the + button in the selection box) when already at the end of the journal creates a new page at the end of the journal.

Note: jumping to a page automatically selects the top-most layer in that page.

To navigate the layers of a page, either use the layer selection box at the bottom of the Xournal window, or use the "Show Layer" and "Hide Layer" entries in the View menu. The basic rule to remember is that the display shows all the layers underneath the currently select one, and while those above it are hidden.

Note: the background layer cannot be drawn on; any attempt to draw on the background will generate an error message and switch back to the first layer.

Managing pages and layers

Pages can be added to the journal by using the "New Page ..." entries in the Journal menu. The newly created page has the same format and background as the current page (for the "New Page Before" and "New Page After" commands), or as the last page of the journal (for "New Page At End"). Additionally, jumping to the next page when already on the last page creates a new page at the end of the journal.

The "Delete Page" entry in the Journal menu removes the current page from the journal. (Remember that you can always undo this operation if you deleted a page by accident).

The "New Layer" entry in the Journal menu creates a new layer immediately above the current one, while "Delete Layer" removes the current layer and its contents (if you attempt to delete the only layer of a page, a new empty layer will be automatically created).

Paper formats and backgrounds

The size of the current page can be modified using the "Paper Size" entry in the Journal menu. Standard and custom sizes are available.

The background is either one of several kinds of standard paper types, or a bitmap image, or a page of a PDF file.

To select a standard paper type as background for the current page, use the "Paper Style" submenu of the Journal menu. The paper color can also be changed using the "Paper Color" submenu of the Journal menu.

To use a PDF file as the background for a journal, see the paragraph on PDF annotation below.

To load a bitmap image file for use as background for the current page, use the "Load Background" entry of the Journal menu. This automatically resizes the current page according to the size of the bitmap image, and resets the zoom level to 100%. If ghostscript is installed on your system, you can also use this method to import a fixed-resolution bitmap version of a Postscript or PDF file; in that case, all pages will be imported sequentially as backgrounds into consecutive pages (this is not the recommended method; PDF annotation is better in every respect).

To capture a screenshot of a window or the entire screen and make it the background of the current page, use the "Background Screenshot" entry of the Journal menu. This will iconify the Xournal window; click in any window (after ensuring it is fully visible) to capture its contents, or click on the desktop (or screen background) to capture the entire screen.

Important note: by default, bitmap images loaded using the "Load Background" command will not be saved with the journal; instead, the journal file will contain a reference to the absolute location of the image file. This means that the background will become unavailable if the image file is moved or deleted. To avoid this, check the option "Attach file to the journal" at the bottom of the file selection dialog box.
This option only applies to bitmap image files loaded from disk; screenshot backgrounds (and bitmaps converted from PS/PDF files using ghostscript) are automatically "attached" to the journal file: when the journal is saved, they will be saved (in PNG format) along with it (using file names of the form *.xoj.bg_*.png).

PDF annotation

Xournal can be used to annotate PDF files, by loading the pages of a PDF file as backgrounds for a journal. As of version 0.4.5 this is done using the poppler library (previous versions used the pdftoppm converter, which is part of the xpdf utilities or the poppler utilities depending on distributions).

The "Annotate PDF" command in the File menu can be used to load a PDF file into a new (empty) journal. The page backgrounds and page sizes correspond to the contents of the PDF file. (Most unencrypted PDF files should be supported).

By default, the PDF file used to generate the backgrounds will not be saved with the journal; instead, the journal file will contain a reference to the absolute location of this file. This means that all backgrounds will become unavailable if the PDF file is moved or deleted (although Xournal will let you specify the updated location of the PDF file when opening the journal file). To avoid this, check the option "Attach file to the journal" at the bottom of the dialog box when opening the PDF file. The PDF file will then be saved along with the journal (using a file name of the form *.xoj.bg.pdf).

Upon zooming, the page backgrounds are asynchronously updated to fit the current display resolution. Since this process is quite slow and memory-intensive, the pages are normally updated only as needed, when they become visible on the screen (unless you disable the "Progressive Backgrounds" option in the Options menu). This means that you will occasionally notice the page backgrounds being updated while you are scrolling inside the document (at large zoom levels, it can take a while for the updated background to appear).

It is strongly recommended that you do not resize PDF pages (using the "Paper Size" command). This will result in extremely ugly rendering, as the PDF converter is unable to render bitmaps with non-standard aspect ratios.

While you can perform all sorts of page operations on a journal file that was created from a PDF file (such as duplicating or deleting pages, inserting pages with blank or bitmapped backgrounds, ...), it is not possible to include pages from more than one PDF file into a single journal document. If you need to annotate two or more PDF files inside a same journal document, please consider using an external utility for merging PDF files (for example pdfmerge).

Note: the PDF backgrounds are rescaled and/or regenerated as needed when the zoom level is changed. Because this consumes a lot of memory and CPU resources, by default this rescaling is performed on-demand as each page becomes visible. This means that you will occasionally notice backgrounds being generated while you are scrolling inside the document (at large zoom levels, this can slow down the screen refresh rate noticeably). If you'd prefer all backgrounds to be loaded in advance and rescaled immediately upon changing the zoom level, disable the "Progressive Backgrounds" option in the Options menu. Be aware that this increases the memory consumption and will cause out-of-memory crashes when viewing long documents.


Printing

As of version 0.4.5, Xournal uses the gtk-print architecture for printing (previous versions used gnome-print). Xournal also includes a native PDF printing feature.

Printing via gtk-print

The print dialog box lets you select a printer (either one of the printers installed on your system, or the "Print to File" virtual printer), and a range of pages to print (the default is to print the entire journal). Each page of the journal is automatically rescaled so as to fit the paper size.

Unlike the older gnome-print architecture, gtk-print and poppler make it possible to efficiently print files that annotate PDF backgrounds. (Prior to version 0.4.5, PDF backgrounds had to be converted to bitmaps upon printing, resulting in huge print jobs and low printout quality).

The settings are currently not saved properly from one print job to the next, so make sure to verify the settings.

Exporting to PDF

As of version 0.4.8, the "Export to PDF" command uses the poppler and cairo libraries to produce a PDF version of the currently loaded document. The pages of the resulting PDF file have the same size as in Xournal. Highlighter strokes are rendered in a partially transparent manner. Text items are rendered by embedding TrueType subsets or Type 1 fonts into the PDF document as appropriate.

Xournal still provides its own PDF rendering engine, which was the default up to version 0.4.7 and continues to be used if "Legacy PDF Export" is checked in the Options menu. This code includes a PDF file parser compatible with PDF format version 1.4; the compression features of PDF 1.5 are not supported. When exporting a document that uses PDF backgrounds, Xournal attempts to preserve most of the structure of the original PDF file (however, auxiliary data such as thumbnails, hyperlinks, and annotations are lost). If Xournal is unable to parse the PDF file, the poppler/cairo renderer is used instead to generate a new PDF file from scratch.


Configuration file

Xournal's configuration settings are saved to the file ~user/.xournal/config by using the "Save Preferences" command in the Options menu. The settings saved in the configuration file include in particular:

  • general display preferences: zoom level, window size, ...
  • default paper settings (as set by the "Set As Default" command in the Journal menu)
  • default settings for the pen, eraser, highlighter, and text tools (as set by the "Set As Default" command in the Tools menu)
  • mappings for buttons 2 and 3
  • the various preferences set in the Options menu
The configuration file also gives access to additional customization options which cannot be set from the user interface, such as: the display resolution in pixels per inch, the step increment in zoom factors, the tool selected at startup, the thickness of the various drawing tools, the default directory for opening and saving files, the visibility and position of the menu and toolbars, ...

Here is a partial list of configuration file settings:

  • Display settings (in the [general] section):

    • display_dpi: the display resolution in pixels per inch
    • initial_zoom: the initial zoom level, in percent
    • window_maximize: whether to start with a maximized window
    • window_fullscreen: whether to start in fullscreen mode
    • window_width, window_height: the preferred window size (if not maximized)
    • zoom_step_factor: the (multiplicative) factor by which the zoom in/zoom out buttons change the zoom level
    • view_continuous: whether to start in continuous or single-page view mode (see also View menu)
    • highlighter_opacity: the opacity level of highlighter strokes (from 0 to 1; 1 is fully opaque). Note that .xoj files do not store the opacity level of strokes, so if you change from the default value of 0.5 your files will look different when opened on another machine.

  • User interface settings (in the [general] section):

    • autosave_prefs: whether to automatically save preferences upon exiting Xournal.
    • interface_order: the position of the various toolbars relative to the drawing area, from top to bottom. The default order is: menu main_toolbar pen_toolbar drawarea statusbar. Switching elements around rearranges the interface. Removing elements from the list hides them.
    • interface_fullscreen: the same thing, but in fullscreen mode. For example, drawarea main_toolbar pen_toolbar would position the toolbars below the drawing area, and hide the menu and status bar. interface.
    • shorten_menus: whether to hide some little-used menu or toolbar items (see also "Shorten Menus" in Options menu)
    • shorten_menu_items: the list of interface items to hide when shorten_menus is enabled. Virtually everything in the interface can be hidden. A complete list of interface item ID names can be obtained by running the command grep id= xournal.glade in the base directory of the source code distribution.
    • default_path: the default path for the open/save dialog boxes (leave blank to use the current directory)
    • autoload_pdf_xoj: whether to load filename.pdf.xoj (if it exists) when the user opens filename.pdf (see also "Autoload .pdf.xoj" in Options menu)

  • Input device settings (in the [general] section):

    • use_xinput: whether to enable XInput extensions for high-resolution tablet input (see also "Use XInput" in Options menu)
    • discard_corepointer: whether to discard Core events when XInput extensions are enabled. Setting this to "false" should be safe.
    • use_erasertip: whether to always map the eraser tip of a stylus to the eraser (see also "Eraser Tip" in Options menu)
    • buttons_switch_mappings: whether to have buttons 2 and 3 switch the tool mapping instead of actually drawing (useful with some external tablets; see also "Buttons Switch Mappings" in Options menu)
    • pressure_sensitivity: whether to use stylus pressure to control stroke width (see also "Pressure Sensitivity" in Options menu)
    • width_minimum_multiplier, width_maximum_multiplier: the minimum and maximum width multipliers for pressure-sensitive strokes

  • Paper settings (in the [paper] section):

    • width, height: the default paper size, in points (1 point = 1/72 in = 0.353 mm)
    • color: the default paper color (named color or #rrggbbaa)
    • style: the default paper style (plain, lined, ruled, or graph)
    • apply_all: whether paper style changes get applied to all pages (see also "Apply to all pages" in Journal menu)
    • print_ruling: whether to include the paper ruling lines when printing (see also "Print Paper Ruling" in Options menu)
    • progressive_bg: whether to generate PDF backgrounds just-in-time as pages become visible (rather than immediately upon opening the document or changing the zoom level, which is more memory-intensive); see also "Progressive Backgrounds" in Options menu
    • gs_bitmap_dpi: resolution (in dpi) of bitmap backgrounds generated from PS/PDF files when using "Load Background" in Journal menu; higher values mean higher quality but larger memory usage
    • pdftoppm_printing_dpi: resolution (in dpi) of bitmaps generated from PDF backgrounds when exporting to PDF (only used if the PDF parser is unable to process the background PDF file); higher values mean higher quality but larger output files

  • Tool settings (in the [tools] section):

    • startup_tool: the tool selected at startup (one of: pen, eraser, highlighter, selectrect, vertspace, hand)
    • pen_color, pen_thickness, pen_ruler, pen_recognizer: the default pen settings: color (a named color or #rrggbbaa), thickness (fine = 1, medium = 2, thick = 3), ruler mode, recognizer mode
    • highlighter_color, highlighter_thickness, highlighter_ruler, highlighter_recognizer: the default highlighter settings
    • eraser_thickness, eraser_mode: the default eraser settings: thickness (fine = 1, medium = 2, thick = 3) and operating mode (standard = 0, whiteout = 1, delete strokes = 2)
    • btn2_tool, btn3_tool: the tools mapped to buttons 2 and 3 (can be: pen, eraser, highlighter, selectrect, vertspace, hand)
    • btn2_linked, btn3_linked: whether the settings of the tools for buttons 2 and 3 are linked to those of the corresponding primary tools
    • btn2_color, btn2_thickness, btn2_ruler, btn2_recognizer, btn2_erasermode: if the settings are not linked to the primary tool (btn2_linked is false), the settings of the tool mapped to button 2. Not all entries are applicable, depending on the value of btn2_tool.
    • btn3_color, btn3_thickness, btn3_ruler, btn3_recognizer, btn3_erasermode: similarly for the button 3 tool.
    • pen_thicknesses, eraser_thicknesses, highlighter_thicknesses: the widths in points (1 pt = 1/72 in = 0.353 mm) of the various pens (5 values from 'very fine' to 'very thick'), erasers (3 values from 'fine' to 'thick') and highlighters (3 values from 'fine' to 'thick')
    • default_font, default_font_size: the name and point size of the default text font.


Author information, license, bug-reports

Xournal is written by Denis Auroux (auroux@math.berkeley.edu).

The source code includes contributions by the following people: Alvaro, Kit Barnes, Eduardo de Barros Lima, Mathieu Bouchard, Ole Jørgen Brønner, Robert Buchholz, William Chao, Vincenzo Ciancia, Luca de Cicco, Michele Codutti, Robert Gerlach, Daniel German, Dirk Gerrits, Simon Guest, Andreas Huettel, Lukasz Kaiser, Ian Woo Kim, Timo Kluck, David Kolibac, Danny Kukawka, Stefan Lembach, Bob McElrath, Mutse, Andy Neitzke, David Planella, Marco Poletti, Alex Ray, Jean-Baptiste Rouquier, Victor Saase, Hiroshi Saito, Luciano Siqueira, Marco Souza, Mike Ter Louw, Mis Uszatek, Uwe Winter, Edward Z. Yang, Lu Zhihe.

(Let me know if you are missing from this list or if your name is mis-spelled)

Xournal is distributed under the GNU General Public License (version 2, or at your option any later version).

Note: most of the code of version 0.4.2.1 (excluding graphics and a few portions of the code) has also been released under the MIT License. Please contact the main developer if you need an MIT License version of the 0.4.2.1 code. Later versions are not available under MIT License.

Feel free to contact me with bug reports and suggestions; I apologize in advance if I am unable to respond properly to some requests. If you find a sequence of operations which crashes Xournal in a reproducible manner, please send detailed instructions on how to reproduce the crash. A core file may also be helpful.

Bug reports and suggestions can also be submitted on Xournal's SourceForge page.


Version history

Version 0.4.8 (June 30, 2014):

  • Features:
    • option to auto-save documents and recover auto-saves (after Edward Yang, Aiwarrior, Timo Kluck)
    • new Export to PDF code using cairo (and config option to enable legacy code)
    • horizontal view mode
    • improved touchscreen handling
    • pencil cursor option (patch by Luciano Siqueira)
    • added "new pages duplicate background" option (new default is false)
    • updated Windows build and packaging instructions
  • XInput device handling:
    • ignore events from non-drawing devices by default (ignore_other_devices)
    • "touchscreen as hand tool" option (after Rumen Zarev and Daniel German)
    • "pen disables touchscreen" option; dialog box to designate touch device
    • tweaks to xinput event processing for touchscreens
  • Bugfixes:
    • generate cursors from pixbufs (fixes a Win32 bug)
    • work around Win32 bug: refuse paste if mismatched format
    • fix configure.in for automake-1.13 (Florian Bruhin, Andreas Huettel)
    • smoother icons for eraser and shapes buttons (by Colin Macdonald)
    • fix a cross-platform g_basename() issue (after Daniel German)
    • bugfix for file paths with non-English characters in Win32
    • add some margin around lasso selection rectangle (after Niklas Beisert)
    • warn for fontconfig cache generation in Win32
  • Translations:
    • Chinese (simplified) translation (by Mutse)
    • updated German translation (Stefan Holtzhauer)
    • Polish translation (by Mis Uszatek)
    • Chinese (traditional) translation (William Chao)
    • Japanese translation (by Hiroshi Saito)

Version 0.4.7 (July 4, 2012):

  • insert image tool (based on patches by Victor Saase and Simon Guest)
  • renamed "Journal" menu to "Page"
  • paste images and text directly from and to other applications
  • lasso tool (based on patch by Ian Woo Kim)

Version 0.4.6 (May 22, 2012):

  • win32 portability code (contributed by Dirk Gerrits)
  • fix bug in PDF export code on 64-bit systems (patch by Robert Buchholz)
  • fix hand tool bug when exiting canvas (#2905711)
  • Italian translation (Marco Poletti), German translation (Stefan Lembach)
  • Spanish translation (Alvaro), Brazil Portuguese translation (Marco Souza)
  • fix save bug with text boxes containing > 4095 characters
  • Czech translation (David Kolibac), Dutch translation (Timo Kluck)
  • fix crash upon unplugging input devices
  • change close dialog box default to "save" (patch by Kit Barnes)
  • option to force PDF background rendering via cairo (slower but nicer)
  • wrapper for missing GdkPixbuf rendering function in newest poppler
  • disable GTK+ XInput bugfix by default (#3429416)
  • fix linker flags (#3208984); evdev coordinate fix (#3244118) (Timo Kluck)
  • specify license version: GPL v2 or later
  • fix 1.#J coordinates from win32 xoj files

Version 0.4.5 (Oct 2, 2009):

  • bugfixes for GTK+ 2.16/2.17 issues with xinput events
  • various minor UI bugfixes
  • gettext internationalization (contributed by David Planella)
  • Catalan translation (by David Planella), French translation
  • use poppler instead of pdftoppm to render PDF backgrounds (after patches by Mike Ter Louw and Bob McElrath)
  • various improvements to UI and to key bindings (including patches by Bob McElrath and Lu Zhihe)
  • use gtk-print instead of libgnomeprint for printing
  • custom color chooser (patch contributed by Alex Ray)
  • option to have tablet buttons toggle the mapping rather than draw
  • paper color chooser (after a patch by Ole Joergen Broenner)
  • remove binary installer (due to binary incompatibilities)
  • UPDATED DEPENDENCIES: need gtk+ 2.10, poppler-glib 0.5.4

Version 0.4.2.1 (Mar 27, 2008):

  • bugfix for #1926757 (crash upon pasting variable-width stroke)
  • bugfix: set ruler/recognizer setting to default upon switching tools

Version 0.4.2 (Mar 25, 2008):

  • bugfixes for X.org 7.3; allow XInput and core events in reverse order
  • resize selection (patch contributed by Andy Neitzke)
  • pressure sensitive pen (variable stroke width) (patch by Andy Neitzke)
  • geometric shape recognizer (after an idea by Lukasz Kaiser) (see here)
  • clean up compiler warnings (patch contributed by Danny Kukawka)

Version 0.4.1 (Sep 15, 2007):

  • bugfix: compatibility with new versions of pdftoppm (thanks to Vincenzo Ciancia)
  • GTK+ 2.11 event processing bugfix
  • minor bugfixes: hand tool, handling of filenames containing '&'
  • desktop and MIME files (thanks to Mathieu Bouchard) + updated installer
  • config options: left-handed scrollbar (contributed by Uwe Winter), hide some menu items (customizable in config file), auto-save preferences

Version 0.4.0.1 (September 3, 2007):

  • bugfixes for GTK+ 2.11 behavior (thanks to everyone who reported bugs)

Version 0.4 (August 15, 2007):

  • text tool (handles most TrueType and Type1 fonts)
  • font selection dialog and button
  • keyboard mappings (arrow keys)
  • menu mnemonics and shortcuts (suggestions by Jean-Baptiste Rouquier)
  • more responsive hand tool
  • bugfix for GTK+ 2.11 XInput behavior (thanks to Robert Gerlach)
  • various minor bugfixes and enhancements

Version 0.3.3 (January 31, 2007):

  • bugfix: upon loading a new file, zoom is set to default startup zoom
  • config option to allow input from a mouse or other core pointer device
  • config file entry to specify a default location for open/save (patch contributed by Andy Neitzke)
  • config file entries to customize visibility and position of toolbars
  • icon (thanks to Michele Codutti)

Version 0.3.2 (November 25, 2006):

  • preferences file and Save Preferences command
  • extra customization (via preferences file)
  • minor UI changes (patch contributed by Eduardo de Barros Lima)
  • hand tool (partially contributed by Vincenzo Ciancia)
  • a few bugfixes in rendering of bitmap backgrounds

Version 0.3.1 (August 3, 2006):

  • fixed a file format bug on systems with non-standard numeric locale (bug reported by Gert Renckens)

Version 0.3 (July 23, 2006):

  • new PDF rendering engine: export to PDF generates optimized files (smaller and more accurate)
  • export to PDF handles PDF backgrounds (up to PDF-1.4) natively (without conversion to bitmap)
  • default thickness of erasers and highlighters slightly increased
  • zoom dialog box with input box and "fit to page height" option
  • file format documentation added to the user's manual

Version 0.2.2 (June 5, 2006):

  • mapping of tools to stylus buttons (the options menu has new entries to allow the mapping of buttons 2 and 3 to arbitrary tools; the tools menu and toolbar affect the settings for button 1) (see here)
  • moving selection by drag-and-drop works across page boundaries
  • vertical space tool can move items to next page (only when the entire block being moved has crossed the page boundary; items on the new page are not moved)
  • "apply to all pages" is now a toggle button affecting the behavior of paper size, color, and style commands
  • change in the behavior of the selection upon switching between tools

Version 0.2.1 (June 3, 2006):

  • recently used files listed in file menu
  • can change color or thickness of pen strokes in selection
  • function to apply paper style to all pages
  • can specify on command line a PDF file to annotate
  • suggest a derived file name for PDF annotation
  • speed up switching between pages
  • fixed a bug in XInput initialization (thanks to Luca de Cicco)
  • fixed a bug in print ranges (thanks to Mathieu Bouchard)
  • fixed a refresh bug in rescaling bitmap backgrounds

Version 0.2 (January 29, 2006):

  • PDF file annotation using xpdf's pdftoppm (PDF backgrounds updated asynchronously at all resolutions)
  • PS/PDF backgrounds (as bitmaps at fixed resolution) using ghostscript
  • option to antialias and filter bitmap backgrounds when zooming
  • option to emulate eraser tip with right mouse button
  • binary installer allows non-root installation without compiling
  • full-screen mode (patch contributed by Luca De Cicco)

Version 0.1.1 (January 5, 2006):

  • two bugfixes
  • backward compatibility with GTK+ 2.4

Version 0.1 (January 2, 2006): initial release.


The file format

Overall structure

Xournal stores its data in gzipped XML-like files. The gzipped data consists of a succession of XML tags describing the document. By convention, the file header and trailer look like this:

<?xml version="1.0" standalone="no"?>
<xournal version="...">
<title>Xournal document - see http://math.mit.edu/~auroux/software/xournal/</title>
... sequence of pages ...
</xournal>
The <title> and <xournal> tags may only appear within the file header (not within the pages of the document). The version attribute of the <xournal> tag indicates which version of Xournal was used to create the document; it is currently ignored, but may be used in a later release if the file format changes in an incompatible manner. (Following a suggestion of Matteo Abrate, starting with version 0.4 the <xournal> tag is the document's root tag, and encloses all other tags).

The rest of the file is a sequence of pages, specified by a <page> tag, whose attributes width and height specify the physical size of the page in points (1/72 in). The width and height parameters are floating point values. The format of a page is therefore:

<page width="..." height="...">
... page contents ...
</page>

Page background

The first entry within a page describes the page background. It consists of a <background> tag followed by several mandatory XML attributes. The first attribute is always type, which can take three possible values: "solid" for a solid background, "pixmap" for a bitmap background, and "pdf" if the background is a page of a PDF document. The rest of the attributes depends on the type of background.

  • Solid background: <background type="solid" color="..." style="..." />
    The color attribute takes one of the standard values "white", "yellow", "pink", "orange", "blue", "green", or can specify a hexadecimal RGBA value in the format "#rrggbbaa". The style attribute takes one of the standard values "plain", "lined", "ruled", or "graph".

  • Bitmap background: <background type="pixmap" domain="..." filename="..." />
    The domain attribute takes one of the standard values "absolute", "attach", or "clone". A value of "absolute" indicates that the bitmap is found in the file specified by filename. The bitmap can be in any format recognized by the gdk-pixbuf library; this includes most of the common bitmap formats (JPEG, PNG, BMP, GIF, PCX, PNM, TIFF, ...).
    A value of "attach" indicates that the bitmap is an attachment to the Xournal file. The bitmap is in PNG format, and resides in a file whose name is derived from that of the main Xournal file by appending to it a dot and the contents of the filename attribute. For example, if the Xournal file is in file.xoj and the filename attribute is "bg_1.png" then the bitmap file is file.xoj.bg_1.png (Xournal saves attached bitmaps sequentially in files ...bg_1.png, ...bg_2.png, etc.)
    A value of "clone" indicates that the bitmap is identical to the background of a previous page of the journal; the filename attribute then specifies the page number, starting with 0 for the first page. For example, if a filename value of "1" indicates that the background bitmap is identical to that of the second page.

  • PDF background: <background type="pdf" domain="..." filename="..." pageno="..." /> or <background type="pdf" pageno="..." />
    The domain and filename attributes must be specified for the first page of the journal that uses a PDF background, and must be omitted subsequently for every other page that uses a PDF background. The domain attribute takes one of the standard values "absolute" and "attach"; the PDF document is to be found in the file specified by filename (if domain is "absolute"), or in the file whose name is obtained by appending a dot and the contents of the filename attribute to the name of the main Xournal file (if domain is "attach"). The pageno attribute specifies which page of the PDF file is used as background, starting with 1 for the first page of the PDF file.

Layers and strokes

After the line specifying the background, the remainder of a <page> section is occupied by one or more layer sections

<layer> ... </layer>
describing the various items within a layer. Every page must contain at least one layer; a layer may be empty. The successive layers are listed in their stacking order, from bottom to top.

A layer consists of a collection of items, listed in the order in which they should be drawn (from bottom-most to top-most). Up to version 0.3.3, the only legal contents within a layer are strokes. The format of a stroke is:

<stroke tool="..." color="..." width="...">
... list of coordinates ...
</stroke>
The tool attribute can take the values "pen", "highlighter", or "eraser" depending on the tool used to create the stroke (pen, highlighter, or whiteout eraser); a value of "highlighter" indicates that the stroke should be painted in a partially transparent manner (Xournal uses an alpha coefficient of 0.5).

The color attribute can take one of the standard values "black", "blue", "red", "green", "gray", "lightblue", "lightgreen", "magenta", "orange", "yellow", "white", or can specify a hexadecimal RGBA value in the format "#rrggbbaa".

The width attribute is a floating-point number (or a sequence of floating-point numbers starting with version 0.4.2), and specifies the width of the stroke in points (1/72 in). (For a variable-width stroke, the width attribute contains a whitespace-separated succession of floating-point values: first the nominal brush width, and then the width of each successive segment forming the stroke.)

The list of coordinates is simply a succession of floating-point values, separated by whitespace. The number of given values must be even; consecutive pairs of values give the x and y coordinates of each point along the stroke. These values are expressed in points (1/72 in). The coordinates (0,0) represent the top-left corner of the page: hence x is measured from the left of the page, and y is measured from the top of the page.

Every stroke must contain at least two points (four floating point values). Moreover, two consecutive points on the stroke should be spaced no more than 5 units apart or so; longer line segments should be subdivided as appropriate (otherwise the eraser tool will not interact properly with the stroke). The default precision used by Xournal for the x,y coordinates is 0.01 unit (1/7200 in).

Starting with version 0.4, layers also contain text items. The format of a text item is:

<text font="..." size="..." x="..." y="..." color="...">... text ...</text>
The font attribute contains the font name, for example "Serif Bold Italic"; if the font is not available, another font will be substituted. The size attribute specifies the font size in points. The x and y attributes specify the coordinates of the top-left corner of the text box in page coordinates (measured in points from the top-left corner of the page). Finally, the color attribute contains either the name of a standard color or a hexadecimal RGBA value (see above).

The contents of the text are encoded in UTF-8, with the characters '&', '<', '>' replaced by &amp;, &lt;, &gt;. Whitespace and linefeeds are preserved (in particular, no extraneous whitespace should be inserted between the enclosing tags and the text itself).

Starting with version 0.4.7, layers can also contain image items. The format of an image item is:

<image left="..." top="..." right="..." bottom="...">... data ...</image>
The left, top, right and bottom attributes specify the bounding box to which the image is scaled, in page coordinates (measured in points from the top-left corner). The data is in base64-encoded PNG format (though any other base64-encoded format that can be loaded by gdk-pixbuf is currently accepted).

Installation issues

Dependencies

The following libraries are required to run Xournal (they are standard on modern Linux distributions such as Fedora 6 or later, RHEL 5 or later, Ubuntu 6.10 or later, etc.):

  • the gtk+ libraries, version 2.10 or later (package gtk2 and dependencies)
  • libgnomecanvas version 2.4 or later   (package libgnomecanvas and dependencies)
  • poppler-glib version 0.5.4 or later   (package poppler-glib and dependencies)

Optional:

  • ghostscript (optional: used to import PS/PDF files as bitmap backgrounds)

To compile Xournal, you also need the development packages for the above libraries (packages gtk2-devel, libgnomecanvas-devel, poppler-glib-devel, and dependencies), as well as autoconf and automake.

Compilation and installation procedure

Download the Xournal distribution tar.gz file, and any needed dependencies.

Compilation and installation in /usr/local:

./autogen.sh
make
(as root) make install
(as root) make desktop-install

Compilation and installation in $HOME:

./autogen.sh
./configure --prefix=$HOME
make
make install
make home-desktop-install

Configure error message:
If configure generates the error message     configure: error: Package requirements (gtk+-2.0 >= 2.10.0 libgnomecanvas-2.0 >= 2.4.0 poppler-glib >= 0.5.4) not met     even though you have sufficiently recent versions of these libraries on your system, then you need to install some missing development packages.


Tablet calibration issues

Configuring the tablet devices properly is unfortunately not as simple as it ought to be. This is a subject worthy of a detailed how-to document; meanwhile, here are some hints about how to configure your tablet.

Basics

Xournal uses the XInput extension to obtain high-resolution coordinates for strokes drawn using the stylus. If you decide that getting just the right XInput configuration isn't worth the effort, you can disable XInput features by unsetting the "Use XInput" option in the Options menu. The price to pay is a lower graphics quality, as the resolution of all strokes then drops to 1 pixel (instead of the native resolution of the tablet device, which can be higher by several orders of magnitude).

The configuration of tablet devices is controlled in the X server's configuration file (usually /etc/X11/xorg.conf depending on your distribution). The latest X servers can detect a tablet automatically and do not require the presence of xorg.conf to work properly; so recent distributions typically no longer includde such a file. However, if auto-configuration fails, you can always create a xorg.conf that explicitly specifies tablet devices.

Assuming you do have a xorg.conf, the ServerLayout section should contain lines like:

Section "ServerLayout"
        ...
        InputDevice    "cursor" "SendCoreEvents"
        InputDevice    "stylus" "SendCoreEvents"
        InputDevice    "eraser" "SendCoreEvents"
EndSection
(the last one only if your stylus has an eraser tip), and your configuration file should include sections such as
Section "InputDevice"
        Identifier "cursor"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "cursor"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection

Section "InputDevice"
        Identifier "stylus"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "stylus"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection

Section "InputDevice"
        Identifier "eraser"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "eraser"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection
The actual settings will depend on your hardware; look on the web for Linux installation instructions specific to your model: for example, the "Device" settings above correspond to a serial port protocol, many tablets use USB instead; the BottomX and BottomY values correspond to the physical resolution of the tablet and will vary from one model to another.

For historical reasons, most X servers do not allow the input device designated as the "core pointer" in the X server's configuration file to be used as an XInput extension device. Thus, your tablet input devices should not be designated as the core pointer device. Instead, they should be configured with the "SendCoreEvents" option, which enables them to simultaneously generate XInput extension events and move the cursor on the screen.

If you have a newer X server and no xorg.conf file, the input devices can be configured using the xinput command.

Note: with older X servers, only tablet devices are XInput devices, while a built-in pointing device or an external mouse would only act as the core pointer. In newer X servers, all devices are handled through XInput (even though without advanced capabilities), though mice and touchpads typically send invalid event data. Xournal tries to work around the most common bugs in input device drivers and GTK+ input event processing.

The cursor doesn't appear in the right place...

If the mouse pointer does not follow accurately the position of the stylus, this is an indication that your tablet is not properly calibrated. If you have the linuxwacom package, you can try modifying the tablet calibration using xsetwacom. The relevant parameters are named TopX, BottomX, TopY, BottomY, and need to be set separately for the stylus and for the eraser. For example:

    xsetwacom set stylus TopX 270
    xsetwacom set stylus BottomX 28510
    ...
(the TopX and TopY parameters default to 0 if you haven't set them in your X server's configuration file). Experiment with these parameters until you find the right calibration settings for your tablet (i.e., the mouse pointer appears right under the tip of the stylus).

Once you have found the perfect settings for your tablet, update your X server's configuration file or startup scripts.

Important: on older systems, the TopX and TopY values should always be kept at 0 to avoid calibration bugs.

The cursor is in the right place, but strokes aren't drawn under the cursor...

If you experience this while trying to draw with a mouse, touchpad, or other non-tablet device:

  • If you don't have a tablet, simply disable "Use XInput" in the Options menu, this is the fastest way of fixing the problem.
  • Upgrade to a recent version of Xournal (0.4.5 or later). Older versions of Xournal are not compatible with the event handling code of recent X server and GTK+ library versions.
  • Check that the "Discard Core Events" option is disabled (discard_corepointer should be set to false in ~/.xournal/config).
If you experience this while trying to draw with a tablet pen:
  • If you are using an obsolete version of the linuxwacom driver (before 0.7.6) or of GTK+, please upgrade your system.
  • If you are using GTK+ 2.17 or newer, please upgrade to Xournal 0.4.5 or later. The input event processing behavior of GTK+ has changed and is no longer compatible with older versions of Xournal.
  • The display geometry might have changed since the beginning of your session in Xournal (resolution changed, external monitor connected, display rotated, etc.). You need to exit Xournal and re-start it each time your display configuration changes.
  • Your tablet devices might be incorrectly calibrated or configured.
If all else fails, you can disable XInput support in Xournal (in the Options menu), at a price of a severe loss of resolution (and the eraser tip won't be detected anymore).

One of the workarounds used by Xournal to bypass a calibration bug in old versions of GTK+ seems to be more harmful than helpful with modern distributions. If you miss the old behavior or are having XInput issues, try recompiling after uncommenting the line

#define ENABLE_XINPUT_BUGFIX
near the beginning of src/xournal.h.

On-the-fly display rotation

You need an X server that supports the RANDR extension, and a sufficiently recent (0.7.6 or later) version of the linuxwacom driver to support on-the-fly rotation.

To set the tablet in portrait mode:

  xrandr -o 3
  xsetwacom set stylus Rotate cw
To return to landscape mode:
  xrandr -o 0
  xsetwacom set stylus Rotate none
Note #1: you should not rotate the display while Xournal is running, otherwise the tablet calibration in Xournal may (and most likely will) become incorrect. (Less likely to occur with modern distributions and ENABLE_XINPUT_BUGFIX disabled). Exit Xournal and restart it after the display has been rotated.

Note #2: the syntax of xrandr commands has changed in newer X servers. Consult the xrandr manual page for the new syntax. xournal-0.4.8/html-doc/pixmaps/0000775000175000017500000000000012247261233016037 5ustar aurouxaurouxxournal-0.4.8/html-doc/pixmaps/lightgreen.png0000664000175000017500000000020111773657534020706 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ $!GÚ¡ IDAT(Ïc` 02000ü'A9©6ŒjÕ@- $Â}C’IEND®B`‚xournal-0.4.8/html-doc/pixmaps/medium.png0000664000175000017500000000047611773657534020054 0ustar aurouxauroux‰PNG  IHDRÄ´l;gAMA± üa pHYs  šœtIMEÕ 6!?„ˆ1ÍIDAT8Ë픿 ‚P‡? *ÈÅ©@¡‡¨­µGð ê zŒÝ\ÛÚ!{ƒ„þ¿ƒÓF?8Û½ßß9÷BKË'FÅsS`\ý?O€ W9ŽsŽ¢hÙDÚŽïÒ7¹Ò4ÝIÖ/‹¤¯ ‚@’6ß.wJij²®I’¬$õ_ÊĦi’tükó²(â8–¤GÝœÃ"©çyÊ ënFײ¬µmÛw@®ëÊ÷}eY&I'I£F$Ð X=` †aÜÚ?¦¥:O^édך>g–IEND®B`‚xournal-0.4.8/html-doc/pixmaps/ruler.png0000664000175000017500000000047511773657534017724 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ 8„mô›ÊIDAT8Ëí’¡ ÂP†¿Í›l6aMð=ܬ‰Å2“Å(FƒM›X|‹á( ‚Q…±Ýq-ÆPv…;Ó¾òqàç‡s8PñÂËßsŒÀHdˆI0tTËÊ”Àó3"IDAT(Ïc` 020004­¼‰TF5Œj –’òÝ…¤‡rIEND®B`‚xournal-0.4.8/html-doc/pixmaps/magenta.png0000664000175000017500000000020311773657534020174 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ í<ª"IDAT(Ïc` 0200ügøO´jF&RmÕ0ªZHá¶HÜ–lIEND®B`‚xournal-0.4.8/html-doc/pixmaps/default-pen.png0000664000175000017500000000271511773657534020776 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ *}hÓZIDAT8Ë•{l“eÆßeÝ::ºµ»_ÊJÛ!íÂ`²Å1Y•Êxã”èd‹‡"AÑ/ñ ó’8#„ˆ$êTÔ842!CL¦"êpŠ a¢cÅu·~]·vßÅ?€)jˆñINò&ïû>ç9ç}Ï9piãoææ?@¸Äžh­ÍÛ?íùêKÁà¯$‰h‹w¶JWm¸J›åšÕ[–[¶NÞœ-Å®âoþíò?0XXYYI|xÐ/w´Ñsä; F‡$€‚¼iÄ62ý½ø{w®ødÅWuïÖulúxSí%C8Ýú‚Cc÷k¯¨Ë6cK™Ç8|S•Ñ·µÑŒ–Ö£§·Çˆ¨ã¸rܨ;TgÌhœ1ÚÙÝÙ‹¥L*?½]×V†Éµç «×¬~¼²²a$*]ee8®b).eǧˆ ÐîÜSÜ4•5±æº5É ÞXP»§kOc4%€‡î `­`cûFJóKçÝ¸äÆæOÛÛBqΤÌáÀ6ÃË …"+Ü5û.‚Jáð0ÛýÛ)L.dbbbÒÐÁkóžK…p޹í¥'—¡_ŸT›â¬åáG½ø–f6 4T5àK÷¡N¨l­ÚJ¾œO<¿¸â‘p4Œ¬Æ€¢@ €uj.£Á?5n|€Ÿ’ì/_OyA9‚.°yÞf\ÑXô"RƒñöÛ<Üäóùhg9YRÌâ¬å‘ǽx«3¨©¸€3€fhHšDŽ)‡èxôoMGÀ’`¡ñÛF¢g¢ÈE×|" Kæ99y"@UÍšIµI9ÌŸ6Á$ i±Xìm@$ttvtï ¥«…Y)³Î—õc·\ë'Íš‚=3E—¹ù¶ÕÌ©uðƒzSš‰ªiUh††¦i sÎ 0a"4bÓÑM4v5"މ¼}ëÛÈZg¿¢’™çÄêvPTìgáòËè™#ÛšMÓ/M¤ÛÓ©q× ê*‡¡¨ áx˜³±³>L_¤uLe‘mQ¼ÜSþ„|!œ®ãAJ,¹\_ìçÑûnÿì;I¹<8ЖTzY)Wd]Áב¯q¹©°W°«oÁ± ÖD+¶dãÆ8gBgX‘´‚™Sf¾yìıç'Sáv»X¿áù9>Ø÷ù›ëîX×ë,pÎÝÛ·×$šE¦Û§3"Ž—’‡9ÙLº%I’èþ½›ÎŸ;)1—ÄæÀîµ÷¬]™•5.20qîò”npè~ý-ø[é[]oÝÝÑ×±ä`ÿA 2§f"HÁ¡ ¡±ee†'ÅóM}Eý«W_¹å¯£ITàYàp8(€Ö?Пpràdº(ˆ«=p]ïPo‘ª«‰©æÔSó=ó;\Ù®í2ò!W®kLã¯Ä"äœwð;>¿þßøõË,ªc%žoIEND®B`‚xournal-0.4.8/html-doc/pixmaps/lasso.png0000664000175000017500000000152411773657534017710 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDùC» IDATxÚÕÕ_L–eÇñÏ‹  ˜(adŽQ¤…†ÑXѲÕP®V´U³-bIÎþ8·¶Øô ´ô]ÔüÓŠé:±3-󷼤"†š8ְ€RïN¶Wçfb']ÛµgÏžçùÞ¿û¾~×õð‹Ø$ÞOIºIy]àîÇräáù¤g_¡pƒ¸t-p:šª««žYYW7{ÁÂ…ÒÒ¦—.êïëB0>6*;gžï[ÛÄãñ}‰Db7>Ç9„ØUÞµté#=ñøVÙssôööعc§cÇû œ244dÖÌL99ÙræÞjñ¢•ÕOúäÓíš6mn@cÉÐ)ÈYöøcáäÀÏ¡¥å›PXX8˜žž¾k±O¡¯âi¼…¶%÷- _ïÙ°·aj2xFeå²ÐÑÑjk_ø5(C1ò1ï*YWZZ:tà»o'ŠX‚›“Á{º»;Ú×W¬Ã£(Â-ȈT¤&eqVVÖ†U«VMôt…-[6Byô ‘…BoOçĪ˱ Z95©È1¼XQQ±¿¾¾~ §§kìDÿñðækÂü‚¼€W®Tœ‚¦ ëCQáüŸwÇ vanÂsùùùÛú·oßN ô‡3§O†Õ¯Õ‡¢¢Â 1/áá‰3Ž%ËÑšH–1}:â…%**T]UmqÉ=ædÍÒÑÞ®ióV‡;†÷p#8³MÞâ©Çûr‡=ãƒãjjžõ×…‹š››ÝY8_ËÞ}Z¶ E€µøâ(G¢ë8.¥&;Ï ŸÍm;ô£)©1/¬¨ÕôþF;v~?¡¿D€óø|äÙq\ˆ:ï²öNÁ̲²²°~Ý;¡¼¬4ll|7ddd¼*,AæFÅ™y?åZfnÇ_îú, Oàî¨ÿv¥êtäÕ¯¬=vôHw@7Bvd»IGJfffבDg(((ÁǸ7ÚzÊÎçL´c5@?ÙA?³1#²ÓpTùp£àÒ¢3½€¿¯ú_ÿ¶.‹S:zJIEND®B`‚xournal-0.4.8/html-doc/pixmaps/highlighter.png0000664000175000017500000000035011773657534021061 0ustar aurouxauroux‰PNG  IHDRóÿa¯IDATxœ•ÒÝ Ã FÑë¨KÀ2e³ÍÈ `ÆphC”’ü†ÄùdDU©œ… ¨ªL£8%€ˆ÷Þäi ׊qâ³€#n!r?Â9^€›\㈪ÊiÀ|ÚsÙÞo˜çkÜ p. Þù…ô0ž±á}"} ðºÆ°®Õôð6‚sõWýcáˆé{l<ÁS)* ¦!¼°Á°[b)*9{ÁQŸÆÔ£IEND®B`‚xournal-0.4.8/html-doc/pixmaps/red.png0000664000175000017500000000020011773657534017327 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ 3X{·ìIDAT(Ïc` 0200ü'E5©6ŒjÕ@- $‘Û+IEND®B`‚xournal-0.4.8/html-doc/pixmaps/hand.png0000664000175000017500000000115211773660334017466 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÖ  ªç÷IDAT8˵•±ªA†ÿ³jŒ(iÔ‘4Á"ऋÁÎæTRXD@Q„pñlâ;$]ÀXX‹x- Šd#"6b,Ö îþi¼rñî긦93ÿÇáÌùg’xŠxæöœeYÏü%éõx<:㬂乥 ­V«Z>Ÿg4¥”’óùü+É·‡}[í9¨º^¯s­V‹Åb‘RJÞG:æp8¤®ë·$½v9‚7›Í‡l6K)%¥”,•JGp©T:æG£‘fN-B°Óé@Ó4hšöhÿ>ßl6%€›Gz'®ßï¿qs«ãñ~œo·Û×ûýþ€ÏÓé4å¼X,à—㸑D¡Pø9›Í‡‹Å\Ϭaðù|Žà—½^ïØÏx<ª`Ú‚ ÃH^Î)¼\.Û‚MÓT„öY.—j&“¹}8¯ÇË)'¥¤®ëŠ£A,ËÂd2 çr9^RJîv;å¢óºÝî'»ª*?œU/‚7› ’ɤæTá)ü~uÑy@•Jåc<ÿ}Å+9wå¼T*õ½ÑhÜ]1r{×ϦišÞjµúÅ©ß$Ùn·5’ïìôʹIJ¬7ƒÁà®^¯£ßï#‰ ‘H  ! ¢V«½ðÍN«\øšT’ìI !„ïÐÂm \‚ÿ;ž(þÉÊ’$v×IEND®B`‚xournal-0.4.8/html-doc/pixmaps/fullscreen.png0000664000175000017500000000150411773657534020727 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIME֢ΧÑIDAT8˵•Ík$UÀÓÝÓ=Ȱì°Ñ‹·…E„ÜÓêÍ,ž–eÁ„ܼy›ƒ,9FCÌ^Ä7˜C@T–€oÊÞ½­Â.óÑ=ýÞ«*ý‘L2ºAHAñ^¯UÕUõºcf\…$w¾øõ›¥¬»ž%1Á‚(âï!8Å—BÓ5”¡²{AœB@¼Õç'„r²Ÿ,eÝõ·ß¼Ž÷FYÖê W*¥3Ê™1›)¥7ŠÂp3¥p†+ªµ,ŒŽWâ:q-&Œþúe=YJ»øÒðÁðÎPi bˆj<˜A«U ÔŸîéD]¢8!y-íðƵ>¦F U*µÍû Ú:ð΢híÌÌWòíAJ²Ò‹yëzÿÈÌPUD¬»ÒóÓqJÒtÅ`0h_ˆã˜­­­KA···Éóï=ŸlafD&óíÖív/©ôþýôz=’$©Šg†Y‡¨‰8Š"Ò4%Ë2vww_ UUÌŒƒƒïé÷ûdYFÇ­=€,ËØØØ ßï³¼¼ÌáááBž=ûÕÕUVVV¸wïiš¶`>ýî7;/Ãáð‚MUÍ{1ç‚•¥·¢(m:-ìääÄF£Ü^¾œØ‹c{þüo{o}Ï¢E#½¶¶¶0Ò¦òªÚFvãÆëíþ¬Fj\ªP‹ ªÌAÛÏADÐ °ápxièññÏsçT“37}¼³³Ãx<æèèh”9èÓ§?2xòä1fÆ£G_7½@Ôáô[ òßÿì»¶ÚCD/¨ÄKû|a­÷º ›ùãÏ1«úçE\‘üà2:uxY_"IEND®B`‚xournal-0.4.8/html-doc/pixmaps/white.png0000664000175000017500000000020411773657534017701 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ /~L‰!#IDAT(Ïc` 0200üÿÿŸXÕŒŒL¤Ú0ªaTµ4 »¹JÜyIEND®B`‚xournal-0.4.8/html-doc/pixmaps/xoj.svg0000664000175000017500000005435711773660334017406 0ustar aurouxauroux image/svg+xml xournal-0.4.8/html-doc/pixmaps/pencil.png0000664000175000017500000000133111773657534020035 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ŽIDATxÚ•”ÝKÓQÇ?ikâ [ó¦ “^,»Ø ‰_¢RPF½Ýuô„‚Tt¡]HÐi¸AE‚$Sð"0-B!«L+3ßæÚ–ÆFîåtÑO˜ÃÍýøÝ<Ïï|Ïç|ÏóP >óf?ªˆªè‹î®WS®·5…¾vD£þOûõÀ>à;ðGÞ µáZ›ÍÆZÀW£v25ñãÚŠ^®éÌx=µZgËëß^¶Þ!C£¥aO!¹õ§×ëÛm¼j%´Á€¯ôXŽÀZ„¬Ê*þo©J©Çj :;5šÍœ[\¢Â·„±¢Ó¥kTçë.¿ pË@@“­Ùl&¦ÍÈÔ•[ç_\ÄàÐ.¿ð¡õ‹K×[1êìð|zv\ô´Z…gü–p»ÝGŒ¹v (¶%.LI+I¡Uo^|Òn·06ïí~+@Dm»ˆ§õOw @4ÖWu@q"íVĵ’$‘›Û|øä#½NWàSJ«ÄÄp×Úÿ¿·Ö*ƒ]¦-2’w³(—$ ÝNã†äýöGŒŒ/ôÉ­ÂJ„ÏX,†z:™ñ–‘¹ŸìÒË45·a­28dA/bé «»§¬¥„µ»8záf"í– Nöâƒ! M&rvïeúë MÍmÔÙÊÈÃ’6¥ðòj„Hv :óA*5p¥ñ°càõ—`Q¶"²U¯nï'çðüþKye WÏÚ½ïž?eá”´ÉBˆ‹çÏ @™ ·“À OU:ýº™p@­¢%&xÌ Àª\éÐ%Æú¢{1Áˆ|üyY4šî ¦Jâ»0ÈäQ:¶ÿ¬Cÿ»ÿÕ|ðIEND®B`‚xournal-0.4.8/html-doc/pixmaps/rect-select.png0000664000175000017500000000030411773657534020774 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“yIDATxÚí”1 À ×&àgíò„TêÏòˆ{ÈZåRæ‚E‚‚r0,{ 0¹pêN Y®Žž¾›ó&N)íÖ„"‚ãÑœk·’È9#„pÝždO¾Œê¸‹UGö…)ÇøÄm»oÐŽÙñ_:ðƳ鎇}B“Sµ;Wÿ~4>IEND®B`‚xournal-0.4.8/html-doc/pixmaps/stretch.png0000664000175000017500000000047711773657534020251 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ ,V^ÐÌIDAT8Ëí”1‚@Ev&–Rq n ÔPJ<ƒ`Mbc-……ÖìQ¨¹€&ök›²!šh«öÏdÿþL& Œ§³RÖ £nuÕÊÓh¾”$ɶY+Ërš¦é& Ãiš7]ªªˆãx¯K¬˜7ô̲¬Ì÷}¢(ð€‹æÞ8+1zc\™ëºE¡ô©ëŒÛ+°xáÕ9q/ãß0AÛ¶ÕfˆO¯ò<Çq¥½¾{¼ÔÔLà¬k‹×8~ýøcî<«@ÿHn„’IEND®B`‚xournal-0.4.8/html-doc/pixmaps/blue.png0000664000175000017500000000020511773657534017511 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ :‘mÊ$IDAT(Ïc` 0200Ÿ!RõÙ³&L¤Ú0ªaTµ4 pkÈ5IEND®B`‚xournal-0.4.8/html-doc/pixmaps/lightblue.png0000664000175000017500000000020411773657534020540 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ ™ú®#IDAT(Ïc` 02000øO¬rF&RmÕ0ªZHÖ`¥m£IEND®B`‚xournal-0.4.8/html-doc/pixmaps/orange.png0000664000175000017500000000020311773657534020033 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ !©ÔÀ"IDAT(Ïc` 0200üo Zu©6ŒjÕ@- $Íàk4¿ûIEND®B`‚xournal-0.4.8/html-doc/pixmaps/yellow.png0000664000175000017500000000020311773657534020073 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ .؉þ"IDAT(Ïc` 0200üÿO´jF&RmÕ0ªZHâ¶ÄIEND®B`‚xournal-0.4.8/html-doc/pixmaps/gray.png0000664000175000017500000000020511773657534017524 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ tÕ.W$IDAT(Ïc` 0200444©º¡¡‰TF5Œj –’}7¶ÝIEND®B`‚xournal-0.4.8/html-doc/pixmaps/xournal.svg0000664000175000017500000014254111773660334020267 0ustar aurouxauroux image/svg+xml Jakub Steiner http://jimmac.musichall.cz Text Editor xournal-0.4.8/html-doc/pixmaps/xournal.png0000664000175000017500000000563311773660334020254 0ustar aurouxauroux‰PNG  IHDR00Wù‡sBIT|dˆtEXtSoftwarewww.inkscape.org›î< -IDAThÕY}pTÕÿ½¯ûÞÛìn’G6 ùFH@‚Œ±A ¨T!޵¤LPÉtÀ`ÇŠRf‘2*)Z‹H¨ŒUœü#8£8 („*#á+‰ CI‚!Ù}÷öì{îÛdDÛ3sçí9÷Ý{~¿{Ϲ÷ì.ÇÃÿ³ð?7€ë•> ¼¶\^SùáêkËå5?‡~ÝtÝxú¡Å]7žþ9ô¾DŒgܰaÃBÈ{¡Ph¥ ™~PÊÄ×_ýÔº,˧‚Áௗ,Yr2é „¬7®`dáä‰.û¤Â .}ÂÄ[]úø[ǹôq·ŒuécÇå»ôü‚Ñ.}ô˜Q.}Ôè‘ÈÍÍ%Ëò³ñp&$ÀqÜhA¹³gÏ‚D´_¸^ÑØÐàÒNºô“§N¸ô'¹ôcÇë]zý±£.ýhýº€Ó§›@á8ŽgB”Ò4Žã`šüf¡fËøúÏeÞì{P³å¼ÙwƒRŠ”¬»Q³åªÅ#7‰)¥ž99¸å–ñz&’Ý×ÕÕ…†SÞDïÆ„Ðúõëý’$YŒÀ+‚ˆ•Žj7ºÏëõ‚çyaýúõrR,ËÒE1n$Ð`0ˆŽŽŽ¸}ºaá½=§ñ·'›¢(!˲â†P I’4UU­ÞÀtuuáñÇÇÈ‘#1fÌÔÖÖ&E¢¥¥sçÎ…¦i0`vìØáwðT+æýéC|}¡uÇÏ;}ªªš’$%—”RMUUgp<Ù¼y36nÜèèóæÍÃ;#’’’„cÚÚÚPTT„ÖÖVÇæóùÀ¥ ë¶Aã7(ž‹¬4NŸ»äÌ¥ª*£”&·<Ïk‡K´šŒ1Ü~ûíðx<Î˲P^^ŽcÇŽ9Ä£Û²eË\àKJJPTT„n≠Ÿ íJ7R}_»ŒÝG΢à&-2„8žç“#ÀÓTU#ô˜6vìXÔÔÔ@gÜÕ«WQVV†®®®˜qŸ~ú)¶mÛæ¼›››‹ 6àû.¬ý¼PÙ?2Ó½ÐR$äþ€ÇãcÉP…ô• ³fÍr…444`ÅŠ®q/^Dyy¹cóûý¨­­…e/~-•€2Zj 2Ò<èèì†, ¸íæ¬È’& IR–¢(|2§LYY{ì1×øªª*ìܹ3Û ,@KK €‚wß}rÚ”W~Œ€&Œôäd¦âàÑs˜U˜ƒñÃ2€ˆ‹M–eI„Œ¤‚M¥4©£rÍš5˜4i’kŽ… ¢¥¥Ë—/Ç®]»ìyQ]]ŒÜ,ùë^¤§J% Í‹›²ÓñQݬ,]ÿúÓÆtüQJA(ŠýãˆwgJ’ä)Ñ6QQ]]É“'£³³péÒ%ãüùž£ã8TUU¡`b1*^Û‹´T ^‚L͇›ú§ããÃ͘3%ÿ ÷ß1¢À¹Žã2“Úý!×t1åææbíÚµ®IlðPYY‰;fÜ‹EÙÕÃAó{Õχ™~ì;ڊἨÚqi^‚QƒÒbüB ¹bŒ¥I’ho$ÊÊÊP\\ã ¤¤¥eàÙ͇À UŠ;'ЦŒ±ÔxâÕB)á½&ot_ss3Ö­[ã`ðôßÃäeû1(àÃ}¿†ã_¶!/`éý£ÁƒWIìÏÞJiÜŠÔEàÕW_UEQäxžOê²û(¥¨¨¨p’xĈ>|8r§”aàˆñ2PCNÀ?>;u¥ScÙo ’Ñ0²jÕª˜ˆqTUÕdYÖcj2'-o¼ñöïßoÏ·Þz ¿ìÄöýÍ18 9r~|°÷8yƒ¸gR¾ h"‰|G–e]Ó´tm ˜¦©©ªj&:Bã9ljjÂêÕ«}ÅŠèâûá£cßàæƒzV>ÇÚ?á÷7áÒW‡pÛbÚ´i}.ŒÝ¾ÍÎÎN-šõ²&Ë2K´µÑÛkš&/^ŒP(˜0aî{ð!üyûôÏô#'àC¶æÅ¶ñÉÖ—p¡i ÃÀÃ?ŒÃ‡_Sž)ŠÂDQŒ9‰\LÓÔdYæ’tãÆ8r䀞ËjíÚµxþ‘ÑχœL?2ÓRP÷ÅYäûþƒŽs'?ÝÝݘ7oš››“"&€x%µ‹€eY!DLfÒ3gÎàÅ_tÆ–––"//÷æ ° ‘P÷Å×Xöà,âw¨¨¨p9¾|ù2ÊËË …ú$.'„xßÊ\t]×!Rd”hÒ¥K—" è¹)Ÿyæ:tÓ‹&à®a!4þ»ÏÏ¿TŒ1¬\¹¥¥¥.çõõõؾ}{R'ž,Ë¢a1¢“8½¶Dêµµµ8pà€£áí·ßF~~>öìÙƒÂÂBÜ5-#fÜ+¯¼غu+`È!˜2eJÜ$Ž´…w@2 £_¯(¥ý#ë x“vwwã…^pÙwïÞÖÖV(Š‚ŠŠ ‚๲•••˜1c|> !,ËÏÇ–e‘ãDQäc1i4ÌÈR:žlÚ´ ß~û­Ë–••…Å‹ãÇýPIRJaLÓ„a°, –eaâĉ`Œ¡££Ççy‚A I$IrEä,ËÊê•€®ë½í@(›o¾é²ÍŸ?Ï=÷¼^¯ã1]×fš&t]w‘°Å žâ4{A$I‚a^ †‘Þ}ûö¡½½ÝÑgÏž—_~ÙIT×uƒA‡„m³w„1Žãà„çiY–SLÚx!Ðu=½WÁ`Ðo‡P4(®Ð‘$ O=õTÌ;”RPJaš&,Ër­¾MÄ&&IdYvüE‡“išv!BB¡P̼.ÝÝÝ^B È[«Ìž=­­­¸rå æÌ™ƒ¡C‡Æ°AD6»<·sK(Šâ€•$ ¢(Bˆ¢èŒ³¿Ú‚Á /!E‹Iº®K¢(:¥-6È””<ùä“1öh’$ã8G·IH’EQœ°ÉØ`EQ!²,;ñoç@0TV­Zů\¹’Æ8þ¼–žž"„¨ÇàzÄ>‰ìd¶Ù.“íU·“V„¸¾MÓÏóFSSS*€K1xžWyž·NŸ>úúúü)à8ކáú•Ú! a‚Á ìïÄÿKÒÝÝ Ë²põêU—Ý!ÀqÜÅööv! !//ï'Ø—PJqñâE˜¦ù}¤ÝõÓÌ™3ɲüGÓ4ÓþwŠ1\Ô3Q_â8å8ŽÅ³ÛŸí~A¾ …B«wíÚµ9!xÂqœ@ 7 7)â)†ŸBø3‡žJ×&ݘáfD4=ü è 7õ°Oqñ@£ ˆá>±¿x°0h›€~ÚÀ ´/À×Màš&ç8îZ]³<ÿ —ÿŸ•õ"ßõj¨IEND®B`‚xournal-0.4.8/html-doc/pixmaps/thin.png0000664000175000017500000000037211773657534017531 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 1b4é‡IDAT8Ëc`£`èf"ÕI300100È000ܦ–åÚŒŒŒ_þ300ü÷öö~ôÿÿqj¼f( Ÿ:uj?!MLDÌ.ÀÊÊjK [333ÿƒ¹ÖÃÃãÿÿÿÿ÷S%‚ÞL˜0áÿ·oß®üÿÿ_ªIˆZ‘6 F•t–*cªa ‹IEND®B`‚xournal-0.4.8/html-doc/pixmaps/thick.png0000664000175000017500000000060511773657534017670 0ustar aurouxauroux‰PNG  IHDRÄ´l;gAMA± üa pHYs  šœtIMEÕ 7 ý$p¦IDAT8ËíÔ=JÄ@ð7ÎAS !`ª4 [Á"¹@š{©¼B* Û€å6Ëbg“RI#!’;XX¥±,DžU`…]3m–ýÃk†™ß ólê¿Kjö9pà Àû_Lz!¥|À>¾ï?eY6ù-º+„hÁÅ(¥˜çù5I9ž®Bû˜¦Éªª.Ç ûChŸ4M?Iºð©.ìº.Iž/C¶–´yº+èºNtág]ز,ØÑ…otá8ŽàAûôlÛ¾Ú_¥›¦!Éã17cÏqœ×Ÿà¢(Hr6ú…$IâDQô¨”úzžÇ²,IrNr{Õx14A]ד¶mÏ Ã8‚à# Ã;WBˆÛÍW»¦õªg‚ð0]»IEND®B`‚xournal-0.4.8/html-doc/pixmaps/eraser.png0000644000175000017500000000156512247261233020033 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ  4cqíIDAT8ËÕ•OhUÇ?ïÍÌÎîd·»ZkÓ­Á¦H%þA¢1’*Úƒ"TDiÅSÁ›…"ôâÅ«B ½Š B</Áƒ×^¬¶lYljË&i1ÙU¶›îŸ7ó~vÒn'›¥^<æ=æÍ‡/ß÷û}þoC=ä™ ñ^zÞE€ý×à´ïv”¼“Ëæ>±"Wë?<×ñ²Au]'Èùþñòï7ÎÕšMûPàé—^xÿàä‹3ï½>Í® R]­Ònu5Ûˆj£ÁÙof¸³¶~âûRét¯zÝúô¾±ÑƒÏ?7óñ[‡yÔÓÈݶÑ@wÀ”1¨0â‘\ŽÓïÁŠ|ø½Œ~`=6R®‰øéúuÚQt w¼=õJZL¥48N¬4.ÕµA´æ±›·ÑÖòãâ"À5Àl Þ;<|òÈ«/£Ú-$ QÖ¢b¨Š½íªMáµ:ür떖ε$¸×cï™§ÆOÑl‚”ÞTºÕc•Íâ„!ó‹‹Ü¬×:ÉìUüìGEy)TÊC 8Ö¢#Á‰,:Šp" ££»hrc}Ng h'Á›ŠuÚó¦_Fí)âø>(öÁPaˆ÷g•¬¸|{ñ"¥µµ/Öb¤/x¸P8µsyçRyp$yìÞÍB¥Âµju!¶!ÚÒe›‹ô¯««É ÃÂåËüWþn6+ýlè[ßu?û­\ƤÓt …{mˆÖt€ÐZ¬"ÂÏ¥Êå¯ê1Xi €3ÀÕøàv³ |Œùí‚,›n&Cñ:˜˜˜ÈLMM•J¥z>ŸgnnîJÜe •¬ß¾£R© ÍÎÎ1tsz‰½;???´²²’oµZ;þóÞ?ÃÐOë%‹IEND®B`‚xournal-0.4.8/html-doc/pixmaps/recycled.png0000664000175000017500000000256011773657534020362 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ "[¿87ýIDAT8˽•}L•eÆï{ÎáðÍ9† B¢â™!G3Ñ«\3Vær¦N‹5M7Ëì¿f:G[[Ö&lZˬ´ÕˆféœÅ@cN…Èð3•ƒÀÃ÷|½Ïûñô‡Ér-«?êÚ{×s]»ï]7üGPî÷hYVJKg˦ssÏ] \œÒC‰…ÞÂ[¥¥Íç<¼»¤ äü¿" >²£yÇk­Öå®t—#''‡ì¤l‰ Ň à¿å—³¼³ÎøR}{6.Ùxðo-ôzW­9¸&0÷˹òDÿ 9"F¤néÒ²-9”13&ÃfX^Õ®ÊUgWÉÂ…‘ —.|ªÇô´?‘Å{ë±m[ i¡çW~±rlñ‘Ų_ï—RJiÙ–ÔM]ÆÍ¸li—mÁ66ÂÒ¶m)¥”uWê¤çmllmü8Žª/<™ €À2ãó÷œÜ³ÏL3Ó—4’¢¦ÐéeP$$BH$3‚DÒëcAæ¼ ^j¦×àZå¢þ‡ú—ž.yúàCåuOðÝÑfOw|=ïÀ¼ê¯ž (½ˆã·ÓëGAAUÕßrg$I†+ƒê©Õ¸U7Š¢°ô›¥¬Ÿ¼žÊâÊÒäô䟕ȭ÷IšúzníÑÚ‹Zº–±¢dGºµ¢¨¨½1Ò¢ØS̲‡–áTë>FM} +¶ÎŸ=»ÓIðrçXgÆ:ß:ö_ÙOÈ«» ‰ Š¢àÀÇí¡:¿‡â ,» ºŸó·Î?lwš" Peª&û.í£7Ü;Þ|¶´™”< a ú"}˜Òdïc{IPî|*%™®LæLŸÃ(£…NSh(ŠRt-x âIðÜQwײmáR]l+ÛÆ›gÞD‹i|õÌWä%çaÆxŸCuP4¡KX™NChH)iKZ€¨3:N,¥$+9‹úÅõLO™Ž¡|´ø#r¹!îq¥**cÑ1§¢¨¦ÐÀâò×b"Æpd˜`$HP "â‚Ú²ZfgÌÆÔMê­gfêL¢z]×Ç+®Çé õÐt¹‰5e@5D¡‹ï³]ÙHSb›6¶i“îHçpåa*¨@‹jX†Åä„ÉDã÷’ ]à¶ÝìlßI´/Š×í½6®Ø´Í}Ù>QpJ'°0s!™hqí¢?–)Lt¡S×QÇ¡ŸQšVŠï!_3€zý×›4Èëª*­jÊ1sHSÒ˜˜8‘¦®&jÏÕ¢Z*B„X†…mØHSâ²] G†y¯ý=¶žÝгÙýân¦eOk¸'ÝlÝ^´ÿÔþ£[NnI’;…ˆ¡/ÔÇæÙ›Y>m9¦mÒlC35ÆÄúm¡6zÂ=ܼI•·J4¬oxÇ™è|À°w«ƒó6÷ÌÍŸÛ=4<ôÔ±Îc …¹…”ç”s#|¯ÛK~j>\þ€–@ ~Ýá0êA®ß¾Îj÷jÊ=åŸ{R¾ëÇ]Nuz¶5ÐêÀ†¬ô,‡‚ÄÏPlßDŸœ‘6ã|Í‚šO*J*vÿãÓ$ܾ‘©*êºæÎæ¥]#]3MÛt{’<Ý‹f,:]0©`ŸçÙ‚ bŠªHþ/ü•™ŸƒÒQvIEND®B`‚xournal-0.4.8/html-doc/pixmaps/shapes.png0000644000175000017500000000055312247261233020031 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ ,% Hü(øIDAT8ËÝÔ¿JC1ÇñO¥ºy¡£ƒ“àR*hÿ¼‚ÏâêìRp Ö©£hu𴃈¯àì¬K†ËåÒ$·tÐBøæwÎINÂ_S«4ÿ™cïLåGÙ¥EEªq˜â+¬¡Û´¼e 1Á.ÖÐ ì1np"Çx/8­¹¨2»×0Éx„“D¶‡§ã.î2m€Ã< %æoà6OöñG¬Ý¾çmßöŒLš<ñv]Æ­Òc½²VUmá9ýç™_c'œ Ÿhºø$xÃQ„Û \‘SÞ*p‰Íš×v…Ç\Ó²úáÃyÇgè×QÈöŸè׉0x{·IEND®B`‚xournal-0.4.8/html-doc/pixmaps/black.png0000664000175000017500000000016111773657534017637 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ X•¹IDAT(Ïc`£`Àh‘mÃIEND®B`‚xournal-0.4.8/html-doc/pixmaps/text-tool.png0000664000175000017500000000103311773657534020521 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ÐIDATxÚÕÕ»jTAÇñÏÙÍî²—ÄHbñ‚Ic#¦°´²Òðl|ŸÁÂÞN°Sð D´MÒb‘B" !FsÛs²g,2›÷‚Ç ‚æpfæËoþ—ùó¿Y2æ_RXKJpÂÀ:”<r/_Z^³±¹£›j5ëºiO¯×“æÚÍúµZI<{¹r;èöáE«<|p+`Ÿ°„W§¦azª‘áMï‘EÐ"fQ…‰AÅÛ_÷2¬Dèë¨âÃÞ^ æçÒ¥•µÇøˆË¸»˜D£ï…A°n·WÃ#ìc=Îêµ ÙaÖß–aoñ.‚÷‘_}0O_,Ï` ø‚¨×‡4ôâÚgœÇfôo>JqˆWÏÆùÈgÕʨ,è«ß \e8ÃnG·Ó©KÓ<w öñ€šc›l5Êä±q>kNíȱyÞ,S8¥Áífã—Ε'IˆUVÙ/³¿4¸õ£âüo€áâ…Ó'abþOÁ‹¸sóÆ%3Ó-pöª¸ë1«’ßyRµ…¹pò}6\½2&Ûµuœ+¾?{‹·iÇóè V(¢o±ì×cq„²à$‚:QU¥°?Ä Vœ’Ýa\7 #:Ç¿±ï™ ªn"IEND®B`‚xournal-0.4.8/NEWS0000644000175000017500000000031012353733224013340 0ustar aurouxaurouxVersion 0.4.8 (June 30, 2014) Installation: see INSTALL User's manual: see html-doc/manual.html Updates: see http://xournal.sourceforge.net/ See also: http://sourceforge.net/projects/xournal xournal-0.4.8/config.guess0000755000175000017500000012746312177675036015216 0ustar aurouxauroux#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2012-12-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xournal-0.4.8/README0000644000175000017500000000031012353733240013517 0ustar aurouxaurouxVersion 0.4.8 (June 30, 2014) Installation: see INSTALL User's manual: see html-doc/manual.html Updates: see http://xournal.sourceforge.net/ See also: http://sourceforge.net/projects/xournal xournal-0.4.8/Makefile.am0000664000175000017500000001135111773660334014714 0ustar aurouxauroux## Process this file with automake to produce Makefile.in SUBDIRS = src po EXTRA_DIST = \ autogen.sh \ xournal.glade xournal.gladep \ xournal.xml x-xoj.desktop xournal.desktop install-data-local: @$(NORMAL_INSTALL) if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ fi \ done \ fi; \ if test -d $(srcdir)/html-doc; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/html-doc; \ for docfile in $(srcdir)/html-doc/*; do \ if test -f $$docfile; then \ $(INSTALL_DATA) $$docfile $(DESTDIR)$(pkgdatadir)/html-doc; \ fi \ done; \ if test ! -e $(DESTDIR)$(pkgdatadir)/html-doc/pixmaps; then \ ln -s ../pixmaps $(DESTDIR)$(pkgdatadir)/html-doc/pixmaps; \ fi \ fi; \ echo "*** Desktop files, icons, MIME types not installed. Run 'make desktop-install'"; \ echo "*** (or 'make home-desktop-install' for installation in a home directory)." desktop-install: if test "$(datadir)" = "/usr/share"; then \ desktopdir=/usr/share; \ else \ desktopdir=/usr/local/share; \ fi; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/mime/packages; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/applications; \ $(mkinstalldirs) $(DESTDIR)/usr/share/mimelnk/application; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xournal.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ if test ! -e $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; then \ ln -s xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; \ fi; \ $(INSTALL_DATA) $(srcdir)/xournal.xml $(DESTDIR)$$desktopdir/mime/packages; \ $(INSTALL_DATA) $(srcdir)/xournal.desktop $(DESTDIR)$$desktopdir/applications; \ $(INSTALL_DATA) $(srcdir)/x-xoj.desktop $(DESTDIR)/usr/share/mimelnk/application; \ if test -z "$(DESTDIR)"; then \ echo "Updating desktop, mime, and icon databases."; \ update-desktop-database; \ update-mime-database $$desktopdir/mime; \ gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor; \ else \ echo "*** Not updating desktop, mime, and icon databases. After install, run:"; \ echo "*** update-desktop-database"; \ echo "*** update-mime-database $$desktopdir/mime"; \ echo "*** gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor"; \ fi home-desktop-install: desktopdir=$(HOME)/.local/share; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/mime/packages; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/applications; \ $(mkinstalldirs) $(DESTDIR)$(HOME)/.kde/share/mimelnk/application; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xournal.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ if test ! -e $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; then \ ln -s xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; \ fi; \ $(INSTALL_DATA) $(srcdir)/xournal.xml $(DESTDIR)$$desktopdir/mime/packages; \ $(INSTALL_DATA) $(srcdir)/xournal.desktop $(DESTDIR)$$desktopdir/applications; \ $(INSTALL_DATA) $(srcdir)/x-xoj.desktop $(DESTDIR)$(HOME)/.kde/share/mimelnk/application; \ if test -z "$(DESTDIR)"; then \ echo "Updating desktop, mime, and icon databases."; \ XDG_DATA_DIRS=$(HOME)/.local/share update-desktop-database; \ update-mime-database $$desktopdir/mime; \ gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor; \ else \ echo "*** Not updating desktop, mime, and icon databases. After install, run:"; \ echo "*** update-desktop-database"; \ echo "*** update-mime-database $$desktopdir/mime"; \ echo "*** gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor"; \ fi dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi; \ if test -d html-doc; then \ mkdir $(distdir)/html-doc; \ for docfile in html-doc/*; do \ if test -f $$docfile; then \ cp -p $$docfile $(distdir)/html-doc; \ fi \ done; \ if test ! -e $(distdir)/html-doc/pixmaps; then \ ln -s ../pixmaps $(distdir)/html-doc/pixmaps; \ fi \ fi xournal-0.4.8/config.sub0000755000175000017500000010550312177675036014650 0ustar aurouxauroux#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013 Free Software Foundation, Inc. timestamp='2012-12-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xournal-0.4.8/aclocal.m40000644000175000017500000017267412353733737014541 0ustar aurouxauroux# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])# PKG_CHECK_VAR # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.13.4], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.13.4])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) ]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR xournal-0.4.8/xournal.desktop0000664000175000017500000000053211773660334015742 0ustar aurouxauroux[Desktop Entry] Encoding=UTF-8 Type=Application Name=Xournal Comment=Take handwritten notes Name[fr]=Xournal Comment[fr]=Prise de notes manuscrites Name[ca]=Xournal Comment[ca]=Preneu notes a mà Exec=xournal %f Terminal=false StartupNotify=true MimeType=application/x-xoj;application/pdf; Icon=xournal Categories=GNOME;GTK;Utility;TextEditor; xournal-0.4.8/mkinstalldirs0000775000175000017500000000672211773660334015474 0ustar aurouxauroux#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xournal-0.4.8/autogen.sh0000755000175000017500000001063010344143004014635 0ustar aurouxauroux#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. DIE=0 if [ -n "$GNOME2_DIR" ]; then ACLOCAL_FLAGS="-I $GNOME2_DIR/share/aclocal $ACLOCAL_FLAGS" LD_LIBRARY_PATH="$GNOME2_DIR/lib:$LD_LIBRARY_PATH" PATH="$GNOME2_DIR/bin:$PATH" export PATH export LD_LIBRARY_PATH fi (test -f $srcdir/configure.in) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level package directory" exit 1 } (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AC_PROG_INTLTOOL" $srcdir/configure.in >/dev/null) && { (intltoolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`intltool' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.in >/dev/null) && { (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`xml-i18n-toolize' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 } } (grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.in >/dev/null) && { (grep "sed.*POTFILES" $srcdir/configure.in) > /dev/null || \ (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`glib' installed." echo "You can get it from: ftp://ftp.gtk.org/pub/gtk" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -path $srcdir/CVS -prune -o -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" if grep "^AM_GLIB_GNU_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running glib-gettextize... Ignore non-fatal messages." echo "no" | glib-gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AC_PROG_INTLTOOL" configure.in >/dev/null; then echo "Running intltoolize..." intltoolize --copy --force --automake fi if grep "^AM_PROG_XML_I18N_TOOLS" configure.in >/dev/null; then echo "Running xml-i18n-toolize..." xml-i18n-toolize --copy --force --automake fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then if test -z "$NO_LIBTOOLIZE" ; then echo "Running libtoolize..." libtoolize --force --copy fi fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done conf_flags="--enable-maintainer-mode" if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile. || exit 1 else echo Skipping configure process. fi xournal-0.4.8/xournal.xml0000664000175000017500000000036311773660334015073 0ustar aurouxauroux Xournal note file xournal-0.4.8/COPYING0000664000175000017500000004311011773657534013721 0ustar aurouxauroux GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xournal-0.4.8/PKG-README.win320000664000175000017500000001114612347705676015131 0ustar aurouxaurouxXournal 0.4.8 -- Win32 binary distribution (unstable) ----------------------------------------------------- Xournal is written by Denis Auroux and other contributors. More information can be found at http://xournal.sourceforge.net Installation instructions: see below. This is a binary distribution of Xournal 0.4.8 for the Win32 platform, including all necessary libraries, compiled using the MinGW system. Special thanks to Dirk Gerrits for detailed instructions on how to compile Xournal for Win32. Please note this Win32 port is still unstable. Some features do not work properly. Stability and data integrity have not been checked carefully (use at your own risk); and there is no installer. INSTALLATION INSTRUCTIONS: -------------------------- * STEP 1 - INSTALL XOURNAL Unzip the entire distribution into a directory of your choice, and create a shortcut to xournal.exe on your desktop. (Note that conflicts may arise if you already have other versions of the relevant libraries installed in your Windows directory). * STEP 2 - DISABLE WINDOWS FEATURES THAT INTERFERE WITH PEN INPUT Disable all the pen stroke/gesture detection features of your version of Windows that interfere with proper pen input in xournal. In Windows 8, open the Control Panel, go to "Pen and Touch", and disable the "Flicks" feature entirely. To avoid blurry display and/or Wacom tablet calibration issues with multiple monitors, consider disabling the display scaling features of Windows 7 and 8 if you have a high pixel density display: right-click on the xournal.exe shortcut, go to Properties -> Compatibility -> check "Disable display scaling on high DPI settings". (Or disable display scaling system-wide: open the Control Panel, go to Display, and set the "make text and other items smaller" feature to the "smaller" or "100%" setting.) * STEP 3 - INSTALL THE WACOM TABLET DRIVER If you have a Wacom tablet (or Tablet PC using a Wacom digitizer), you are strongly encouraged to install the Wacom tablet driver, available at http://us.wacom.com/en/feeldriver/ for Tablet PCs (http://us.wacom.com/en/support/drivers/ for standalone tablets). This will make stroke smoothing and pressure sensitivity available. If your tablet pen has an eraser tip, you should enable the "Eraser tip" option in the Options menu. This should work under all recent versions of Windows (XP or later); however on many systems, it is necessary to use the pen to start xournal for these features to be available in xournal, or at least tap the pen to the screen before starting xournal. (Check that Options -> Use XInput is available and checked; if it is grayed out the wacom driver is not active). * STEP 4 - OTHER LANGUAGES If you would like to use a language other than English (among the limited number of available translations), arrange for the LANG environment variable to be set to the appropriate two-letter code. (For instance, set LANG=fr) Note that there may be issues with accessing files located in folders whose path contains non-English characters (accents etc.); if you encounter difficulties, move the files to a different folder before editing them. * KNOWN ISSUES There are various known issues; the worst ones relate to text items, fonts and printing. - If xournal seems to hang the first time you create a text item, just be patient: the fontconfig library on which xournal maintains a cache of system fonts, and on Windows the creation of the cache can take several minutes. Once the cache is created, things should run smoothly. - Some fonts may not print well or export to PDF well. If you have trouble with File -> Print, try Export to PDF instead; and vice-versa. If neither works well, try using different fonts. - Copy-paste: when copy-pasting items from other windows applications to xournal, sometimes xournal receives an old item rather than the one most recently copied into the clipboard. LICENSE AND SOURCE CODE ----------------------- Xournal is free software, available under the GNU General Public License. (This means in particular that you may redistribute Xournal freely, but must make the source code available as well). The source code is available from the following locations: - Xournal: http://xournal.sourceforge.net - GTK+ & friends: http://www.gtk.org/download/win32.php see also http://ftp.gnome.org/pub/gnome/sources/ - libgnomecanvas: http://ftp.gnome.org/pub/gnome/sources/libgnomecanvas/ libart_lgpl: http://ftp.gnome.org/pub/gnome/sources/libart_lgpl/ - poppler: http://poppler.freedesktop.org/releases.html xournal-0.4.8/x-xoj.desktop0000664000175000017500000000031411773660334015315 0ustar aurouxauroux[Desktop Entry] Encoding=UTF-8 Type=MimeType MimeType=application/x-xoj Icon=xoj Patterns=*.xoj;*.XOJ;*.Xoj; Comment=Xournal note file Comment[fr]=Fichier Xournal Comment[ca]=Fitxers de nota del Xournal xournal-0.4.8/install-sh0000755000175000017500000003325512177675036014675 0ustar aurouxauroux#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xournal-0.4.8/configure0000755000175000017500000066253112353733740014576 0ustar aurouxauroux#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="configure.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS GETTEXT_PACKAGE WIN32_FALSE WIN32_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build PACKAGE_LIBS PACKAGE_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG EGREP GREP CPP ac_ct_AR AR RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PACKAGE_CFLAGS PACKAGE_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path PACKAGE_CFLAGS C compiler flags for PACKAGE, overriding pkg-config PACKAGE_LIBS linker flags for PACKAGE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.13' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=xournal VERSION=0.4.8 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi LDFLAGS="$LDFLAGS -lz -lm" pkg_modules="gtk+-2.0 >= 2.10.0 libgnomecanvas-2.0 >= 2.4.0 poppler-glib >= 0.5.4 pangoft2 >= 1.0" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PACKAGE" >&5 $as_echo_n "checking for PACKAGE... " >&6; } if test -n "$PACKAGE_CFLAGS"; then pkg_cv_PACKAGE_CFLAGS="$PACKAGE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PACKAGE_LIBS"; then pkg_cv_PACKAGE_LIBS="$PACKAGE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_LIBS=`$PKG_CONFIG --libs "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PACKAGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$pkg_modules" 2>&1` else PACKAGE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$pkg_modules" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PACKAGE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($pkg_modules) were not met: $PACKAGE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PACKAGE_CFLAGS=$pkg_cv_PACKAGE_CFLAGS PACKAGE_LIBS=$pkg_cv_PACKAGE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows environment" >&5 $as_echo_n "checking for Windows environment... " >&6; } case "$host" in *-*-mingw*) os_win32=yes;; *) os_win32=no;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $os_win32" >&5 $as_echo "$os_win32" >&6; } if test "$os_win32" = "yes"; then WIN32_TRUE= WIN32_FALSE='#' else WIN32_TRUE='#' WIN32_FALSE= fi GETTEXT_PACKAGE=xournal cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ac_config_files="$ac_config_files Makefile src/Makefile src/ttsubset/Makefile po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then as_fn_error $? "conditional \"WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/ttsubset/Makefile") CONFIG_FILES="$CONFIG_FILES src/ttsubset/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi xournal-0.4.8/AUTHORS0000644000175000017500000000137012353536201013714 0ustar aurouxaurouxMain author: Denis Auroux (auroux@math.berkeley.edu) The source code includes contributions by the following people: Alvaro, Kit Barnes, Eduardo de Barros Lima, Mathieu Bouchard, Ole Joergen Broenner, Robert Buchholz, William Chao, Vincenzo Ciancia, Luca de Cicco, Michele Codutti, Robert Gerlach, Daniel German, Dirk Gerrits, Simon Guest, Andreas Huettel, Lukasz Kaiser, Ian Woo Kim, Timo Kluck, David Kolibac, Danny Kukawka, Stefan Lembach, Bob McElrath, Mutse, Andy Neitzke, David Planella, Marco Poletti, Alex Ray, Jean-Baptiste Rouquier, Victor Saase, Hiroshi Saito, Luciano Siqueira, Marco Souza, Mike Ter Louw, Mis Uszatek, Uwe Winter, Edward Z. Yang, Lu Zhihe. (Let me know if you are missing from this list or if your name is mis-spelled) xournal-0.4.8/config.h.in0000664000175000017500000000372611773660334014712 0ustar aurouxauroux/* config.h.in. Generated from configure.in by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Gettext package. */ #undef GETTEXT_PACKAGE /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION xournal-0.4.8/xournal.gladep0000664000175000017500000000123311773660334015524 0ustar aurouxauroux Xournal xournal FALSE TRUE xo-interface.c xo-interface.h xo-callbacks.c xo-callbacks.h xo-support.c xo-support.h xournal-0.4.8/configure.in0000644000175000017500000000202612353733200015152 0ustar aurouxaurouxdnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) AM_INIT_AUTOMAKE(xournal, 0.4.8) AC_CONFIG_HEADERS(config.h) AM_MAINTAINER_MODE AC_ISC_POSIX AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR AC_HEADER_STDC LDFLAGS="$LDFLAGS -lz -lm" pkg_modules="gtk+-2.0 >= 2.10.0 libgnomecanvas-2.0 >= 2.4.0 poppler-glib >= 0.5.4 pangoft2 >= 1.0" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) dnl detect Windows environment... AC_CANONICAL_HOST AC_MSG_CHECKING([for Windows environment]) case "$host" in *-*-mingw*) os_win32=yes;; *) os_win32=no;; esac AC_MSG_RESULT([$os_win32]) AM_CONDITIONAL(WIN32, test "$os_win32" = "yes") GETTEXT_PACKAGE=xournal AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.]) dnl Add the languages which your application supports here. ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" AM_GLIB_GNU_GETTEXT AC_OUTPUT([ Makefile src/Makefile src/ttsubset/Makefile po/Makefile.in ]) xournal-0.4.8/pixmaps/0000775000175000017500000000000012247261233014330 5ustar aurouxaurouxxournal-0.4.8/pixmaps/lightgreen.png0000664000175000017500000000020111773657534017177 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ $!GÚ¡ IDAT(Ïc` 02000ü'A9©6ŒjÕ@- $Â}C’IEND®B`‚xournal-0.4.8/pixmaps/medium.png0000664000175000017500000000047611773657534016345 0ustar aurouxauroux‰PNG  IHDRÄ´l;gAMA± üa pHYs  šœtIMEÕ 6!?„ˆ1ÍIDAT8Ë픿 ‚P‡? *ÈÅ©@¡‡¨­µGð ê zŒÝ\ÛÚ!{ƒ„þ¿ƒÓF?8Û½ßß9÷BKË'FÅsS`\ý?O€ W9ŽsŽ¢hÙDÚŽïÒ7¹Ò4ÝIÖ/‹¤¯ ‚@’6ß.wJij²®I’¬$õ_ÊĦi’tükó²(â8–¤GÝœÃ"©çyÊ ënFײ¬µmÛw@®ëÊ÷}eY&I'I£F$Ð X=` †aÜÚ?¦¥:O^édך>g–IEND®B`‚xournal-0.4.8/pixmaps/ruler.png0000664000175000017500000000047511773657534016215 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ 8„mô›ÊIDAT8Ëí’¡ ÂP†¿Í›l6aMð=ܬ‰Å2“Å(FƒM›X|‹á( ‚Q…±Ýq-ÆPv…;Ó¾òqàç‡s8PñÂËßsŒÀHdˆI0tTËÊ”Àó3"IDAT(Ïc` 020004­¼‰TF5Œj –’òÝ…¤‡rIEND®B`‚xournal-0.4.8/pixmaps/magenta.png0000664000175000017500000000020311773657534016465 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ í<ª"IDAT(Ïc` 0200ügøO´jF&RmÕ0ªZHá¶HÜ–lIEND®B`‚xournal-0.4.8/pixmaps/default-pen.png0000664000175000017500000000271511773657534017267 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ *}hÓZIDAT8Ë•{l“eÆßeÝ::ºµ»_ÊJÛ!íÂ`²Å1Y•Êxã”èd‹‡"AÑ/ñ ó’8#„ˆ$êTÔ842!CL¦"êpŠ a¢cÅu·~]·vßÅ?€)jˆñINò&ïû>ç9ç}Ï9piãoææ?@¸Äžh­ÍÛ?íùêKÁà¯$‰h‹w¶JWm¸J›åšÕ[–[¶NÞœ-Å®âoþíò?0XXYYI|xÐ/w´Ñsä; F‡$€‚¼iÄ62ý½ø{w®ødÅWuïÖulúxSí%C8Ýú‚Cc÷k¯¨Ë6cK™Ç8|S•Ñ·µÑŒ–Ö£§·Çˆ¨ã¸rܨ;TgÌhœ1ÚÙÝÙ‹¥L*?½]×V†Éµç «×¬~¼²²a$*]ee8®b).eǧˆ ÐîÜSÜ4•5±æº5É ÞXP»§kOc4%€‡î `­`cûFJóKçÝ¸äÆæOÛÛBqΤÌáÀ6ÃË …"+Ü5û.‚Jáð0ÛýÛ)L.dbbbÒÐÁkóžK…p޹í¥'—¡_ŸT›â¬åáG½ø–f6 4T5àK÷¡N¨l­ÚJ¾œO<¿¸â‘p4Œ¬Æ€¢@ €uj.£Á?5n|€Ÿ’ì/_OyA9‚.°yÞf\ÑXô"RƒñöÛ<Üäóùhg9YRÌâ¬å‘ǽx«3¨©¸€3€fhHšDŽ)‡èxôoMGÀ’`¡ñÛF¢g¢ÈE×|" Kæ99y"@UÍšIµI9ÌŸ6Á$ i±Xìm@$ttvtï ¥«…Y)³Î—õc·\ë'Íš‚=3E—¹ù¶ÕÌ©uðƒzSš‰ªiUh††¦i sÎ 0a"4bÓÑM4v5"މ¼}ëÛÈZg¿¢’™çÄêvPTìgáòËè™#ÛšMÓ/M¤ÛÓ©q× ê*‡¡¨ áx˜³±³>L_¤uLe‘mQ¼ÜSþ„|!œ®ãAJ,¹\_ìçÑûnÿì;I¹<8ЖTzY)Wd]Áב¯q¹©°W°«oÁ± ÖD+¶dãÆ8gBgX‘´‚™Sf¾yìıç'Sáv»X¿áù9>Ø÷ù›ëîX×ë,pÎÝÛ·×$šE¦Û§3"Ž—’‡9ÙLº%I’èþ½›ÎŸ;)1—ÄæÀîµ÷¬]™•5.20qîò”npè~ý-ø[é[]oÝÝÑ×±ä`ÿA 2§f"HÁ¡ ¡±ee†'ÅóM}Eý«W_¹å¯£ITàYàp8(€Ö?Пpràdº(ˆ«=p]ïPo‘ª«‰©æÔSó=ó;\Ù®í2ò!W®kLã¯Ä"äœwð;>¿þßøõË,ªc%žoIEND®B`‚xournal-0.4.8/pixmaps/lasso.png0000664000175000017500000000152411773657534016201 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDùC» IDATxÚÕÕ_L–eÇñÏ‹  ˜(adŽQ¤…†ÑXѲÕP®V´U³-bIÎþ8·¶Øô ´ô]ÔüÓŠé:±3-󷼤"†š8ְ€RïN¶Wçfb']ÛµgÏžçùÞ¿û¾~×õð‹Ø$ÞOIºIy]àîÇräáù¤g_¡pƒ¸t-p:šª««žYYW7{ÁÂ…ÒÒ¦—.êïëB0>6*;gžï[ÛÄãñ}‰Db7>Ç9„ØUÞµté#=ñøVÙssôööعc§cÇû œ244dÖÌL99ÙræÞjñ¢•ÕOúäÓíš6mn@cÉÐ)ÈYöøcáäÀÏ¡¥å›PXX8˜žž¾k±O¡¯âi¼…¶%÷- _ïÙ°·aj2xFeå²ÐÑÑjk_ø5(C1ò1ï*YWZZ:tà»o'ŠX‚›“Á{º»;Ú×W¬Ã£(Â-ȈT¤&eqVVÖ†U«VMôt…-[6Byô ‘…BoOçĪ˱ Z95©È1¼XQQ±¿¾¾~ §§kìDÿñðækÂü‚¼€W®Tœ‚¦ ëCQáüŸwÇ vanÂsùùùÛú·oßN ô‡3§O†Õ¯Õ‡¢¢Â 1/áá‰3Ž%ËÑšH–1}:â…%**T]UmqÉ=ædÍÒÑÞ®ióV‡;†÷p#8³MÞâ©Çûr‡=ãƒãjjžõ×…‹š››ÝY8_ËÞ}Z¶ E€µøâ(G¢ë8.¥&;Ï ŸÍm;ô£)©1/¬¨ÕôþF;v~?¡¿D€óø|äÙq\ˆ:ï²öNÁ̲²²°~Ý;¡¼¬4ll|7ddd¼*,AæFÅ™y?åZfnÇ_îú, Oàî¨ÿv¥êtäÕ¯¬=vôHw@7Bvd»IGJfffבDg(((ÁǸ7ÚzÊÎçL´c5@?ÙA?³1#²ÓpTùp£àÒ¢3½€¿¯ú_ÿ¶.‹S:zJIEND®B`‚xournal-0.4.8/pixmaps/highlighter.png0000664000175000017500000000035011773657534017352 0ustar aurouxauroux‰PNG  IHDRóÿa¯IDATxœ•ÒÝ Ã FÑë¨KÀ2e³ÍÈ `ÆphC”’ü†ÄùdDU©œ… ¨ªL£8%€ˆ÷Þäi ׊qâ³€#n!r?Â9^€›\㈪ÊiÀ|ÚsÙÞo˜çkÜ p. Þù…ô0ž±á}"} ðºÆ°®Õôð6‚sõWýcáˆé{l<ÁS)* ¦!¼°Á°[b)*9{ÁQŸÆÔ£IEND®B`‚xournal-0.4.8/pixmaps/red.png0000664000175000017500000000020011773657534015620 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ 3X{·ìIDAT(Ïc` 0200ü'E5©6ŒjÕ@- $‘Û+IEND®B`‚xournal-0.4.8/pixmaps/hand.png0000664000175000017500000000115211773660334015757 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÖ  ªç÷IDAT8˵•±ªA†ÿ³jŒ(iÔ‘4Á"ऋÁÎæTRXD@Q„pñlâ;$]ÀXX‹x- Šd#"6b,Ö îþi¼rñî긦93ÿÇáÌùg’xŠxæöœeYÏü%éõx<:㬂乥 ­V«Z>Ÿg4¥”’óùü+É·‡}[í9¨º^¯s­V‹Åb‘RJÞG:æp8¤®ë·$½v9‚7›Í‡l6K)%¥”,•JGp©T:æG£‘fN-B°Óé@Ó4hšöhÿ>ßl6%€›Gz'®ßï¿qs«ãñ~œo·Û×ûýþ€ÏÓé4å¼X,à—㸑D¡Pø9›Í‡‹Å\Ϭaðù|Žà—½^ïØÏx<ª`Ú‚ ÃH^Î)¼\.Û‚MÓT„öY.—j&“¹}8¯ÇË)'¥¤®ëŠ£A,ËÂd2 çr9^RJîv;å¢óºÝî'»ª*?œU/‚7› ’ɤæTá)ü~uÑy@•Jåc<ÿ}Å+9wå¼T*õ½ÑhÜ]1r{×ϦišÞjµúÅ©ß$Ùn·5’ïìôʹIJ¬7ƒÁà®^¯£ßï#‰ ‘H  ! ¢V«½ðÍN«\øšT’ìI !„ïÐÂm \‚ÿ;ž(þÉÊ’$v×IEND®B`‚xournal-0.4.8/pixmaps/fullscreen.png0000664000175000017500000000150411773657534017220 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIME֢ΧÑIDAT8˵•Ík$UÀÓÝÓ=Ȱì°Ñ‹·…E„ÜÓêÍ,ž–eÁ„ܼy›ƒ,9FCÌ^Ä7˜C@T–€oÊÞ½­Â.óÑ=ýÞ«*ý‘L2ºAHAñ^¯UÕUõºcf\…$w¾øõ›¥¬»ž%1Á‚(âï!8Å—BÓ5”¡²{AœB@¼Õç'„r²Ÿ,eÝõ·ß¼Ž÷FYÖê W*¥3Ê™1›)¥7ŠÂp3¥p†+ªµ,ŒŽWâ:q-&Œþúe=YJ»øÒðÁðÎPi bˆj<˜A«U ÔŸîéD]¢8!y-íðƵ>¦F U*µÍû Ú:ð΢híÌÌWòíAJ²Ò‹yëzÿÈÌPUD¬»ÒóÓqJÒtÅ`0h_ˆã˜­­­KA···Éóï=ŸlafD&óíÖív/©ôþýôz=’$©Šg†Y‡¨‰8Š"Ò4%Ë2vww_ UUÌŒƒƒïé÷ûdYFÇ­=€,ËØØØ ßï³¼¼ÌáááBž=ûÕÕUVVV¸wïiš¶`>ýî7;/Ãáð‚MUÍ{1ç‚•¥·¢(m:-ìääÄF£Ü^¾œØ‹c{þüo{o}Ï¢E#½¶¶¶0Ò¦òªÚFvãÆëíþ¬Fj\ªP‹ ªÌAÛÏADÐ °ápxièññÏsçT“37}¼³³Ãx<æèèh”9èÓ§?2xòä1fÆ£G_7½@Ôáô[ òßÿì»¶ÚCD/¨ÄKû|a­÷º ›ùãÏ1«úçE\‘üà2:uxY_"IEND®B`‚xournal-0.4.8/pixmaps/white.png0000664000175000017500000000020411773657534016172 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ /~L‰!#IDAT(Ïc` 0200üÿÿŸXÕŒŒL¤Ú0ªaTµ4 »¹JÜyIEND®B`‚xournal-0.4.8/pixmaps/xoj.svg0000664000175000017500000005435711773660334015677 0ustar aurouxauroux image/svg+xml xournal-0.4.8/pixmaps/pencil.png0000664000175000017500000000133111773657534016326 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ŽIDATxÚ•”ÝKÓQÇ?ikâ [ó¦ “^,»Ø ‰_¢RPF½Ýuô„‚Tt¡]HÐi¸AE‚$Sð"0-B!«L+3ßæÚ–ÆFîåtÑO˜ÃÍýøÝ<Ïï|Ïç|ÏóP >óf?ªˆªè‹î®WS®·5…¾vD£þOûõÀ>à;ðGÞ µáZ›ÍÆZÀW£v25ñãÚŠ^®éÌx=µZgËëß^¶Þ!C£¥aO!¹õ§×ëÛm¼j%´Á€¯ôXŽÀZ„¬Ê*þo©J©Çj :;5šÍœ[\¢Â·„±¢Ó¥kTçë.¿ pË@@“­Ùl&¦ÍÈÔ•[ç_\ÄàÐ.¿ð¡õ‹K×[1êìð|zv\ô´Z…gü–p»ÝGŒ¹v (¶%.LI+I¡Uo^|Òn·06ïí~+@Dm»ˆ§õOw @4ÖWu@q"íVĵ’$‘›Û|øä#½NWàSJ«ÄÄp×Úÿ¿·Ö*ƒ]¦-2’w³(—$ ÝNã†äýöGŒŒ/ôÉ­ÂJ„ÏX,†z:™ñ–‘¹ŸìÒË45·a­28dA/bé «»§¬¥„µ»8záf"í– Nöâƒ! M&rvïeúë MÍmÔÙÊÈÃ’6¥ðòj„Hv :óA*5p¥ñ°càõ—`Q¶"²U¯nï'çðüþKye WÏÚ½ïž?eá”´ÉBˆ‹çÏ @™ ·“À OU:ýº™p@­¢%&xÌ Àª\éÐ%Æú¢{1Áˆ|üyY4šî ¦Jâ»0ÈäQ:¶ÿ¬Cÿ»ÿÕ|ðIEND®B`‚xournal-0.4.8/pixmaps/rect-select.png0000664000175000017500000000030411773657534017265 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“yIDATxÚí”1 À ×&àgíò„TêÏòˆ{ÈZåRæ‚E‚‚r0,{ 0¹pêN Y®Žž¾›ó&N)íÖ„"‚ãÑœk·’È9#„pÝždO¾Œê¸‹UGö…)ÇøÄm»oÐŽÙñ_:ðƳ鎇}B“Sµ;Wÿ~4>IEND®B`‚xournal-0.4.8/pixmaps/stretch.png0000664000175000017500000000047711773657534016542 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ ,V^ÐÌIDAT8Ëí”1‚@Ev&–Rq n ÔPJ<ƒ`Mbc-……ÖìQ¨¹€&ök›²!šh«öÏdÿþL& Œ§³RÖ £nuÕÊÓh¾”$ɶY+Ërš¦é& Ãiš7]ªªˆãx¯K¬˜7ô̲¬Ì÷}¢(ð€‹æÞ8+1zc\™ëºE¡ô©ëŒÛ+°xáÕ9q/ãß0AÛ¶ÕfˆO¯ò<Çq¥½¾{¼ÔÔLà¬k‹×8~ýøcî<«@ÿHn„’IEND®B`‚xournal-0.4.8/pixmaps/blue.png0000664000175000017500000000020511773657534016002 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ :‘mÊ$IDAT(Ïc` 0200Ÿ!RõÙ³&L¤Ú0ªaTµ4 pkÈ5IEND®B`‚xournal-0.4.8/pixmaps/lightblue.png0000664000175000017500000000020411773657534017031 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ ™ú®#IDAT(Ïc` 02000øO¬rF&RmÕ0ªZHÖ`¥m£IEND®B`‚xournal-0.4.8/pixmaps/orange.png0000664000175000017500000000020311773657534016324 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ !©ÔÀ"IDAT(Ïc` 0200üo Zu©6ŒjÕ@- $Íàk4¿ûIEND®B`‚xournal-0.4.8/pixmaps/yellow.png0000664000175000017500000000020311773657534016364 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ .؉þ"IDAT(Ïc` 0200üÿO´jF&RmÕ0ªZHâ¶ÄIEND®B`‚xournal-0.4.8/pixmaps/gray.png0000664000175000017500000000020511773657534016015 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ tÕ.W$IDAT(Ïc` 0200444©º¡¡‰TF5Œj –’}7¶ÝIEND®B`‚xournal-0.4.8/pixmaps/xournal.svg0000664000175000017500000014254111773660334016560 0ustar aurouxauroux image/svg+xml Jakub Steiner http://jimmac.musichall.cz Text Editor xournal-0.4.8/pixmaps/xournal.png0000664000175000017500000000563311773660334016545 0ustar aurouxauroux‰PNG  IHDR00Wù‡sBIT|dˆtEXtSoftwarewww.inkscape.org›î< -IDAThÕY}pTÕÿ½¯ûÞÛìn’G6 ùFH@‚Œ±A ¨T!޵¤LPÉtÀ`ÇŠRf‘2*)Z‹H¨ŒUœü#8£8 („*#á+‰ CI‚!Ù}÷öì{îÛdDÛ3sçí9÷Ý{~¿{Ϲ÷ì.ÇÃÿ³ð?7€ë•> ¼¶\^SùáêkËå5?‡~ÝtÝxú¡Å]7žþ9ô¾DŒgܰaÃBÈ{¡Ph¥ ™~PÊÄ×_ýÔº,˧‚Áௗ,Yr2é „¬7®`dáä‰.û¤Â .}ÂÄ[]úø[ǹôq·ŒuécÇå»ôü‚Ñ.}ô˜Q.}Ôè‘ÈÍÍ%Ëò³ñp&$ÀqÜhA¹³gÏ‚D´_¸^ÑØÐàÒNºô“§N¸ô'¹ôcÇë]zý±£.ýhýº€Ó§›@á8ŽgB”Ò4Žã`šüf¡fËøúÏeÞì{P³å¼ÙwƒRŠ”¬»Q³åªÅ#7‰)¥ž99¸å–ñz&’Ý×ÕÕ…†SÞDïÆ„Ðúõëý’$YŒÀ+‚ˆ•Žj7ºÏëõ‚çyaýúõrR,ËÒE1n$Ð`0ˆŽŽŽ¸}ºaá½=§ñ·'›¢(!˲â†P I’4UU­ÞÀtuuáñÇÇÈ‘#1fÌÔÖÖ&E¢¥¥sçÎ…¦i0`vìØáwðT+æýéC|}¡uÇÏ;}ªªš’$%—”RMUUgp<Ù¼y36nÜèèóæÍÃ;#’’’„cÚÚÚPTT„ÖÖVÇæóùÀ¥ ë¶Aã7(ž‹¬4NŸ»äÌ¥ª*£”&·<Ïk‡K´šŒ1Ü~ûíðx<Î˲P^^ŽcÇŽ9Ä£Û²eË\àKJJPTT„n≠Ÿ íJ7R}_»ŒÝG΢à&-2„8žç“#ÀÓTU#ô˜6vìXÔÔÔ@gÜÕ«WQVV†®®®˜qŸ~ú)¶mÛæ¼›››‹ 6àû.¬ý¼PÙ?2Ó½ÐR$äþ€ÇãcÉP…ô• ³fÍr…444`ÅŠ®q/^Dyy¹cóûý¨­­…e/~-•€2Zj 2Ò<èèì†, ¸íæ¬È’& IR–¢(|2§LYY{ì1×øªª*ìܹ3Û ,@KK €‚wß}rÚ”W~Œ€&Œôäd¦âàÑs˜U˜ƒñÃ2€ˆ‹M–eI„Œ¤‚M¥4©£rÍš5˜4i’kŽ… ¢¥¥Ë—/Ç®]»ìyQ]]ŒÜ,ùë^¤§J% Í‹›²ÓñQݬ,]ÿúÓÆtüQJA(ŠýãˆwgJ’ä)Ñ6QQ]]É“'£³³péÒ%ãüùž£ã8TUU¡`b1*^Û‹´T ^‚L͇›ú§ããÃ͘3%ÿ ÷ß1¢À¹Žã2“Úý!×t1åææbíÚµ®IlðPYY‰;fÜ‹EÙÕÃAó{Õχ™~ì;ڊἨÚqi^‚QƒÒbüB ¹bŒ¥I’ho$ÊÊÊP\\ã ¤¤¥eàÙ͇À UŠ;'ЦŒ±ÔxâÕB)á½&ot_ss3Ö­[ã`ðôßÃäeû1(àÃ}¿†ã_¶!/`éý£ÁƒWIìÏÞJiÜŠÔEàÕW_UEQäxžOê²û(¥¨¨¨p’xĈ>|8r§”aàˆñ2PCNÀ?>;u¥ScÙo ’Ñ0²jÕª˜ˆqTUÕdYÖcj2'-o¼ñöïßoÏ·Þz ¿ìÄöýÍ18 9r~|°÷8yƒ¸gR¾ h"‰|G–e]Ó´tm ˜¦©©ªj&:Bã9ljjÂêÕ«}ÅŠèâûá£cßàæƒzV>ÇÚ?á÷7áÒW‡pÛbÚ´i}.ŒÝ¾ÍÎÎN-šõ²&Ë2K´µÑÛkš&/^ŒP(˜0aî{ð!üyûôÏô#'àC¶æÅ¶ñÉÖ—p¡i ÃÀÃ?ŒÃ‡_Sž)ŠÂDQŒ9‰\LÓÔdYæ’tãÆ8r䀞ËjíÚµxþ‘ÑχœL?2ÓRP÷ÅYäûþƒŽs'?ÝÝݘ7oš››“"&€x%µ‹€eY!DLfÒ3gÎàÅ_tÆ–––"//÷æ ° ‘P÷Å×Xöà,âw¨¨¨p9¾|ù2ÊËË …ú$.'„xßÊ\t]×!Rd”hÒ¥K—" è¹)Ÿyæ:tÓ‹&à®a!4þ»ÏÏ¿TŒ1¬\¹¥¥¥.çõõõؾ}{R'ž,Ë¢a1¢“8½¶Dêµµµ8pà€£áí·ßF~~>öìÙƒÂÂBÜ5-#fÜ+¯¼غu+`È!˜2eJÜ$Ž´…w@2 £_¯(¥ý#ë x“vwwã…^pÙwïÞÖÖV(Š‚ŠŠ ‚๲•••˜1c|> !,ËÏÇ–e‘ãDQäc1i4ÌÈR:žlÚ´ ß~û­Ë–••…Å‹ãÇýPIRJaLÓ„a°, –eaâĉ`Œ¡££Ççy‚A I$IrEä,ËÊê•€®ë½í@(›o¾é²ÍŸ?Ï=÷¼^¯ã1]×fš&t]w‘°Å žâ4{A$I‚a^ †‘Þ}ûö¡½½ÝÑgÏž—_~ÙIT×uƒA‡„m³w„1Žãà„çiY–SLÚx!Ðu=½WÁ`Ðo‡P4(®Ð‘$ O=õTÌ;”RPJaš&,Ër­¾MÄ&&IdYvüE‡“išv!BB¡P̼.ÝÝÝ^B È[«Ìž=­­­¸rå æÌ™ƒ¡C‡Æ°AD6»<·sK(Šâ€•$ ¢(Bˆ¢èŒ³¿Ú‚Á /!E‹Iº®K¢(:¥-6È””<ùä“1öh’$ã8G·IH’EQœ°ÉØ`EQ!²,;ñoç@0TV­Zů\¹’Æ8þ¼–žž"„¨ÇàzÄ>‰ìd¶Ù.“íU·“V„¸¾MÓÏóFSSS*€K1xžWyž·NŸ>úúúü)à8ކáú•Ú! a‚Á ìïÄÿKÒÝÝ Ë²põêU—Ý!ÀqÜÅööv! !//ï'Ø—PJqñâE˜¦ù}¤ÝõÓÌ™3ɲüGÓ4ÓþwŠ1\Ô3Q_â8å8ŽÅ³ÛŸí~A¾ …B«wíÚµ9!xÂqœ@ 7 7)â)†ŸBø3‡žJ×&ݘáfD4=ü è 7õ°Oqñ@£ ˆá>±¿x°0h›€~ÚÀ ´/À×Màš&ç8îZ]³<ÿ —ÿŸ•õ"ßõj¨IEND®B`‚xournal-0.4.8/pixmaps/thin.png0000664000175000017500000000037211773657534016022 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ 1b4é‡IDAT8Ëc`£`èf"ÕI300100È000ܦ–åÚŒŒŒ_þ300ü÷öö~ôÿÿqj¼f( Ÿ:uj?!MLDÌ.ÀÊÊjK [333ÿƒ¹ÖÃÃãÿÿÿÿ÷S%‚ÞL˜0áÿ·oß®üÿÿ_ªIˆZ‘6 F•t–*cªa ‹IEND®B`‚xournal-0.4.8/pixmaps/thick.png0000664000175000017500000000060511773657534016161 0ustar aurouxauroux‰PNG  IHDRÄ´l;gAMA± üa pHYs  šœtIMEÕ 7 ý$p¦IDAT8ËíÔ=JÄ@ð7ÎAS !`ª4 [Á"¹@š{©¼B* Û€å6Ëbg“RI#!’;XX¥±,DžU`…]3m–ýÃk†™ß ólê¿Kjö9pà Àû_Lz!¥|À>¾ï?eY6ù-º+„hÁÅ(¥˜çù5I9ž®Bû˜¦Éªª.Ç ûChŸ4M?Iºð©.ìº.Iž/C¶–´yº+èºNtág]ز,ØÑ…otá8ŽàAûôlÛ¾Ú_¥›¦!Éã17cÏqœ×Ÿà¢(Hr6ú…$IâDQô¨”úzžÇ²,IrNr{Õx14A]ד¶mÏ Ã8‚à# Ã;WBˆÛÍW»¦õªg‚ð0]»IEND®B`‚xournal-0.4.8/pixmaps/eraser.png0000644000175000017500000000156512247261233016324 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ  4cqíIDAT8ËÕ•OhUÇ?ïÍÌÎîd·»ZkÓ­Á¦H%þA¢1’*Úƒ"TDiÅSÁ›…"ôâÅ«B ½Š B</Áƒ×^¬¶lYljË&i1ÙU¶›îŸ7ó~vÒn'›¥^<æ=æÍ‡/ß÷û}þoC=ä™ ñ^zÞE€ý×à´ïv”¼“Ëæ>±"Wë?<×ñ²Au]'Èùþñòï7ÎÕšMûPàé—^xÿàä‹3ï½>Í® R]­Ònu5Ûˆj£ÁÙof¸³¶~âûRét¯zÝúô¾±ÑƒÏ?7óñ[‡yÔÓÈݶÑ@wÀ”1¨0â‘\ŽÓïÁŠ|ø½Œ~`=6R®‰øéúuÚQt w¼=õJZL¥48N¬4.ÕµA´æ±›·ÑÖòãâ"À5Àl Þ;<|òÈ«/£Ú-$ QÖ¢b¨Š½íªMáµ:ür떖ε$¸×cï™§ÆOÑl‚”ÞTºÕc•Íâ„!ó‹‹Ü¬×:ÉìUüìGEy)TÊC 8Ö¢#Á‰,:Šp" ££»hrc}Ng h'Á›ŠuÚó¦_Fí)âø>(öÁPaˆ÷g•¬¸|{ñ"¥µµ/Öb¤/x¸P8µsyçRyp$yìÞÍB¥Âµju!¶!ÚÒe›‹ô¯««É ÃÂåËüWþn6+ýlè[ßu?û­\ƤÓt …{mˆÖt€ÐZ¬"ÂÏ¥Êå¯ê1Xi €3ÀÕøàv³ |Œùí‚,›n&Cñ:˜˜˜ÈLMM•J¥z>ŸgnnîJÜe •¬ß¾£R© ÍÎÎ1tsz‰½;???´²²’oµZ;þóÞ?ÃÐOë%‹IEND®B`‚xournal-0.4.8/pixmaps/recycled.png0000664000175000017500000000256011773657534016653 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÕ "[¿87ýIDAT8˽•}L•eÆï{ÎáðÍ9† B¢â™!G3Ñ«\3Vær¦N‹5M7Ëì¿f:G[[Ö&lZˬ´ÕˆféœÅ@cN…Èð3•ƒÀÃ÷|½Ïûñô‡Ér-«?êÚ{×s]»ï]7üGPî÷hYVJKg˦ssÏ] \œÒC‰…ÞÂ[¥¥Íç<¼»¤ äü¿" >²£yÇk­Öå®t—#''‡ì¤l‰ Ň à¿å—³¼³ÎøR}{6.Ùxðo-ôzW­9¸&0÷˹òDÿ 9"F¤néÒ²-9”13&ÃfX^Õ®ÊUgWÉÂ…‘ —.|ªÇô´?‘Å{ë±m[ i¡çW~±rlñ‘Ų_ï—RJiÙ–ÔM]ÆÍ¸li—mÁ66ÂÒ¶m)¥”uWê¤çmllmü8Žª/<™ €À2ãó÷œÜ³ÏL3Ó—4’¢¦ÐéeP$$BH$3‚DÒëcAæ¼ ^j¦×àZå¢þ‡ú—ž.yúàCåuOðÝÑfOw|=ïÀ¼ê¯ž (½ˆã·ÓëGAAUÕßrg$I†+ƒê©Õ¸U7Š¢°ô›¥¬Ÿ¼žÊâÊÒäô䟕ȭ÷IšúzníÑÚ‹Zº–±¢dGºµ¢¨¨½1Ò¢ØS̲‡–áTë>FM} +¶ÎŸ=»ÓIðrçXgÆ:ß:ö_ÙOÈ«» ‰ Š¢àÀÇí¡:¿‡â ,» ºŸó·Î?lwš" Peª&û.í£7Ü;Þ|¶´™”< a ú"}˜Òdïc{IPî|*%™®LæLŸÃ(£…NSh(ŠRt-x âIðÜQwײmáR]l+ÛÆ›gÞD‹i|õÌWä%çaÆxŸCuP4¡KX™NChH)iKZ€¨3:N,¥$+9‹úÅõLO™Ž¡|´ø#r¹!îq¥**cÑ1§¢¨¦ÐÀâò×b"Æpd˜`$HP "â‚Ú²ZfgÌÆÔMê­gfêL¢z]×Ç+®Çé õÐt¹‰5e@5D¡‹ï³]ÙHSb›6¶i“îHçpåa*¨@‹jX†Åä„ÉDã÷’ ]à¶ÝìlßI´/Š×í½6®Ø´Í}Ù>QpJ'°0s!™hqí¢?–)Lt¡S×QÇ¡ŸQšVŠï!_3€zý×›4Èëª*­jÊ1sHSÒ˜˜8‘¦®&jÏÕ¢Z*B„X†…mØHSâ²] G†y¯ý=¶žÝгÙýân¦eOk¸'ÝlÝ^´ÿÔþ£[NnI’;…ˆ¡/ÔÇæÙ›Y>m9¦mÒlC35ÆÄúm¡6zÂ=ܼI•·J4¬oxÇ™è|À°w«ƒó6÷ÌÍŸÛ=4<ôÔ±Îc …¹…”ç”s#|¯ÛK~j>\þ€–@ ~Ýá0êA®ß¾Îj÷jÊ=åŸ{R¾ëÇ]Nuz¶5ÐêÀ†¬ô,‡‚ÄÏPlßDŸœ‘6ã|Í‚šO*J*vÿãÓ$ܾ‘©*êºæÎæ¥]#]3MÛt{’<Ý‹f,:]0©`ŸçÙ‚ bŠªHþ/ü•™ŸƒÒQvIEND®B`‚xournal-0.4.8/pixmaps/shapes.png0000644000175000017500000000055312247261233016322 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÝ ,% Hü(øIDAT8ËÝÔ¿JC1ÇñO¥ºy¡£ƒ“àR*hÿ¼‚ÏâêìRp Ö©£hu𴃈¯àì¬K†ËåÒ$·tÐBøæwÎINÂ_S«4ÿ™cïLåGÙ¥EEªq˜â+¬¡Û´¼e 1Á.ÖÐ ì1np"Çx/8­¹¨2»×0Éx„“D¶‡§ã.î2m€Ã< %æoà6OöñG¬Ý¾çmßöŒLš<ñv]Æ­Òc½²VUmá9ýç™_c'œ Ÿhºø$xÃQ„Û \‘SÞ*p‰Íš×v…Ç\Ó²úáÃyÇgè×QÈöŸè׉0x{·IEND®B`‚xournal-0.4.8/pixmaps/black.png0000664000175000017500000000016111773657534016130 0ustar aurouxauroux‰PNG  IHDR‘h6 pHYs  šœtIMEÕ X•¹IDAT(Ïc`£`Àh‘mÃIEND®B`‚xournal-0.4.8/pixmaps/text-tool.png0000664000175000017500000000103311773657534017012 0ustar aurouxauroux‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ÐIDATxÚÕÕ»jTAÇñÏÙÍî²—ÄHbñ‚Ic#¦°´²Òðl|ŸÁÂÞN°Sð D´MÒb‘B" !FsÛs²g,2›÷‚Ç ‚æpfæËoþ—ùó¿Y2æ_RXKJpÂÀ:”<r/_Z^³±¹£›j5ëºiO¯×“æÚÍúµZI<{¹r;èöáE«<|p+`Ÿ°„W§¦azª‘áMï‘EÐ"fQ…‰AÅÛ_÷2¬Dèë¨âÃÞ^ æçÒ¥•µÇøˆË¸»˜D£ï…A°n·WÃ#ìc=Îêµ ÙaÖß–aoñ.‚÷‘_}0O_,Ï` ø‚¨×‡4ôâÚgœÇfôo>JqˆWÏÆùÈgÕʨ,è«ß \e8ÃnG·Ó©KÓ<w öñ€šc›l5Êä±q>kNíȱyÞ,S8¥Áífã—Ε'IˆUVÙ/³¿4¸õ£âüo€áâ…Ó'abþOÁ‹¸sóÆ%3Ó-pöª¸ë1«’ßyRµ…¹pò}6\½2&Ûµuœ+¾?{‹·iÇóè V(¢o±ì×cq„²à$‚:QU¥°?Ä Vœ’Ýa\7 #:Ç¿±ï™ ªn"IEND®B`‚xournal-0.4.8/Makefile.in0000644000175000017500000007166712353733740014740 0ustar aurouxauroux# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in mkinstalldirs COPYING ar-lib \ config.guess config.sub depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src po EXTRA_DIST = \ autogen.sh \ xournal.glade xournal.gladep \ xournal.xml x-xoj.desktop xournal.desktop all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am install-data-local: @$(NORMAL_INSTALL) if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ fi \ done \ fi; \ if test -d $(srcdir)/html-doc; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/html-doc; \ for docfile in $(srcdir)/html-doc/*; do \ if test -f $$docfile; then \ $(INSTALL_DATA) $$docfile $(DESTDIR)$(pkgdatadir)/html-doc; \ fi \ done; \ if test ! -e $(DESTDIR)$(pkgdatadir)/html-doc/pixmaps; then \ ln -s ../pixmaps $(DESTDIR)$(pkgdatadir)/html-doc/pixmaps; \ fi \ fi; \ echo "*** Desktop files, icons, MIME types not installed. Run 'make desktop-install'"; \ echo "*** (or 'make home-desktop-install' for installation in a home directory)." desktop-install: if test "$(datadir)" = "/usr/share"; then \ desktopdir=/usr/share; \ else \ desktopdir=/usr/local/share; \ fi; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/mime/packages; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/applications; \ $(mkinstalldirs) $(DESTDIR)/usr/share/mimelnk/application; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xournal.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ if test ! -e $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; then \ ln -s xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; \ fi; \ $(INSTALL_DATA) $(srcdir)/xournal.xml $(DESTDIR)$$desktopdir/mime/packages; \ $(INSTALL_DATA) $(srcdir)/xournal.desktop $(DESTDIR)$$desktopdir/applications; \ $(INSTALL_DATA) $(srcdir)/x-xoj.desktop $(DESTDIR)/usr/share/mimelnk/application; \ if test -z "$(DESTDIR)"; then \ echo "Updating desktop, mime, and icon databases."; \ update-desktop-database; \ update-mime-database $$desktopdir/mime; \ gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor; \ else \ echo "*** Not updating desktop, mime, and icon databases. After install, run:"; \ echo "*** update-desktop-database"; \ echo "*** update-mime-database $$desktopdir/mime"; \ echo "*** gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor"; \ fi home-desktop-install: desktopdir=$(HOME)/.local/share; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/mime/packages; \ $(mkinstalldirs) $(DESTDIR)$$desktopdir/applications; \ $(mkinstalldirs) $(DESTDIR)$(HOME)/.kde/share/mimelnk/application; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xournal.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/apps; \ $(INSTALL_DATA) $(srcdir)/pixmaps/xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes; \ if test ! -e $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; then \ ln -s xoj.svg $(DESTDIR)$$desktopdir/icons/hicolor/scalable/mimetypes/gnome-mime-application-x-xoj.svg; \ fi; \ $(INSTALL_DATA) $(srcdir)/xournal.xml $(DESTDIR)$$desktopdir/mime/packages; \ $(INSTALL_DATA) $(srcdir)/xournal.desktop $(DESTDIR)$$desktopdir/applications; \ $(INSTALL_DATA) $(srcdir)/x-xoj.desktop $(DESTDIR)$(HOME)/.kde/share/mimelnk/application; \ if test -z "$(DESTDIR)"; then \ echo "Updating desktop, mime, and icon databases."; \ XDG_DATA_DIRS=$(HOME)/.local/share update-desktop-database; \ update-mime-database $$desktopdir/mime; \ gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor; \ else \ echo "*** Not updating desktop, mime, and icon databases. After install, run:"; \ echo "*** update-desktop-database"; \ echo "*** update-mime-database $$desktopdir/mime"; \ echo "*** gtk-update-icon-cache -f -t $$desktopdir/icons/hicolor"; \ fi dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi; \ if test -d html-doc; then \ mkdir $(distdir)/html-doc; \ for docfile in html-doc/*; do \ if test -f $$docfile; then \ cp -p $$docfile $(distdir)/html-doc; \ fi \ done; \ if test ! -e $(distdir)/html-doc/pixmaps; then \ ln -s ../pixmaps $(distdir)/html-doc/pixmaps; \ fi \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xournal-0.4.8/src/0000775000175000017500000000000012353735360013443 5ustar aurouxaurouxxournal-0.4.8/src/xo-image.c0000664000175000017500000001243111775207347015324 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "xournal.h" #include "xo-support.h" #include "xo-image.h" // create pixbuf from buffer, or return NULL on failure GdkPixbuf *pixbuf_from_buffer(const gchar *buf, gsize buflen) { GdkPixbufLoader *loader; GdkPixbuf *pixbuf; loader = gdk_pixbuf_loader_new(); gdk_pixbuf_loader_write(loader, buf, buflen, NULL); gdk_pixbuf_loader_close(loader, NULL); pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); g_object_ref(pixbuf); g_object_unref(loader); return pixbuf; } void create_image_from_pixbuf(GdkPixbuf *pixbuf, double *pt) { double scale; struct Item *item; item = g_new(struct Item, 1); item->type = ITEM_IMAGE; item->canvas_item = NULL; item->bbox.left = pt[0]; item->bbox.top = pt[1]; item->image = pixbuf; item->image_png = NULL; item->image_png_len = 0; // Scale at native size, unless that won't fit, in which case we shrink it down. scale = 1 / ui.zoom; if ((scale * gdk_pixbuf_get_width(item->image)) > ui.cur_page->width - item->bbox.left) scale = (ui.cur_page->width - item->bbox.left) / gdk_pixbuf_get_width(item->image); if ((scale * gdk_pixbuf_get_height(item->image)) > ui.cur_page->height - item->bbox.top) scale = (ui.cur_page->height - item->bbox.top) / gdk_pixbuf_get_height(item->image); item->bbox.right = item->bbox.left + scale * gdk_pixbuf_get_width(item->image); item->bbox.bottom = item->bbox.top + scale * gdk_pixbuf_get_height(item->image); ui.cur_layer->items = g_list_append(ui.cur_layer->items, item); ui.cur_layer->nitems++; make_canvas_item_one(ui.cur_layer->group, item); // add undo information prepare_new_undo(); undo->type = ITEM_IMAGE; undo->item = item; undo->layer = ui.cur_layer; ui.cur_item = NULL; ui.cur_item_type = ITEM_NONE; // select image reset_selection(); ui.selection = g_new0(struct Selection, 1); ui.selection->type = ITEM_SELECTRECT; ui.selection->layer = ui.cur_layer; ui.selection->bbox = item->bbox; ui.selection->items = g_list_append(ui.selection->items, item); ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", ui.selection->bbox.left, "x2", ui.selection->bbox.right, "y1", ui.selection->bbox.top, "y2", ui.selection->bbox.bottom, NULL); make_dashed(ui.selection->canvas_item); update_copy_paste_enabled(); } void insert_image(GdkEvent *event) { GtkTextBuffer *buffer; GnomeCanvasItem *canvas_item; GdkColor color; GtkWidget *dialog; GtkFileFilter *filt_all; GtkFileFilter *filt_gdkimage; char *filename; GdkPixbuf *pixbuf; double scale=1; double pt[2]; dialog = gtk_file_chooser_dialog_new(_("Insert Image"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_gdkimage = gtk_file_filter_new(); gtk_file_filter_set_name(filt_gdkimage, _("Image files")); gtk_file_filter_add_pixbuf_formats(filt_gdkimage); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_gdkimage); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); if (ui.default_image != NULL) gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), ui.default_image); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy(dialog); if (filename == NULL) return; /* nothing selected */ if (ui.default_image != NULL) g_free(ui.default_image); ui.default_image = g_strdup(filename); set_cursor_busy(TRUE); pixbuf=gdk_pixbuf_new_from_file(filename, NULL); set_cursor_busy(FALSE); if(pixbuf==NULL) { /* open failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening image '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(filename); ui.cur_item = NULL; ui.cur_item_type = ITEM_NONE; return; } ui.cur_item_type = ITEM_IMAGE; get_pointer_coords(event, pt); set_current_page(pt); create_image_from_pixbuf(pixbuf, pt); } void rescale_images(void) { // nothing needed in this implementation } xournal-0.4.8/src/xo-interface.c0000644000175000017500000047512012353616660016203 0ustar aurouxauroux/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "xo-callbacks.h" #include "xo-interface.h" #include "xo-support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) GtkWidget* create_winMain (void) { GtkWidget *winMain; GtkWidget *vboxMain; GtkWidget *menubar; GtkWidget *menuFile; GtkWidget *menuFile_menu; GtkWidget *fileNew; GtkWidget *fileNewBackground; GtkWidget *image623; GtkWidget *fileOpen; GtkWidget *fileSave; GtkWidget *fileSaveAs; GtkWidget *separator1; GtkWidget *fileRecentFiles; GtkWidget *fileRecentFiles_menu; GtkWidget *mru0; GtkWidget *mru1; GtkWidget *mru2; GtkWidget *mru3; GtkWidget *mru4; GtkWidget *mru5; GtkWidget *mru6; GtkWidget *mru7; GtkWidget *separator22; GtkWidget *filePrintOptions; GtkWidget *image624; GtkWidget *filePrint; GtkWidget *filePrintPDF; GtkWidget *separator2; GtkWidget *fileQuit; GtkWidget *menuEdit; GtkWidget *menuEdit_menu; GtkWidget *editUndo; GtkWidget *editRedo; GtkWidget *separator3; GtkWidget *editCut; GtkWidget *editCopy; GtkWidget *editPaste; GtkWidget *editDelete; GtkWidget *menuView; GtkWidget *menuView_menu; GSList *viewContinuous_group = NULL; GtkWidget *viewContinuous; GtkWidget *viewHorizontal; GtkWidget *viewOnePage; GtkWidget *separator20; GtkWidget *viewFullscreen; GtkWidget *separator4; GtkWidget *menuViewZoom; GtkWidget *menuViewZoom_menu; GtkWidget *viewZoomIn; GtkWidget *viewZoomOut; GtkWidget *viewNormalSize; GtkWidget *viewPageWidth; GtkWidget *image625; GtkWidget *viewSetZoom; GtkWidget *separator5; GtkWidget *viewFirstPage; GtkWidget *image626; GtkWidget *viewPreviousPage; GtkWidget *image627; GtkWidget *viewNextPage; GtkWidget *image628; GtkWidget *viewLastPage; GtkWidget *image629; GtkWidget *separator6; GtkWidget *viewShowLayer; GtkWidget *image630; GtkWidget *viewHideLayer; GtkWidget *image631; GtkWidget *menuJournal; GtkWidget *menuJournal_menu; GtkWidget *journalNewPageBefore; GtkWidget *journalNewPageAfter; GtkWidget *journalNewPageEnd; GtkWidget *journalNewPageKeepsBG; GtkWidget *journalDeletePage; GtkWidget *separator7; GtkWidget *journalNewLayer; GtkWidget *journalDeleteLayer; GtkWidget *journalFlatten; GtkWidget *separator8; GtkWidget *journalPaperSize; GtkWidget *journalPaperColor; GtkWidget *journalPaperColor_menu; GSList *papercolorWhite_group = NULL; GtkWidget *papercolorWhite; GtkWidget *papercolorYellow; GtkWidget *papercolorPink; GtkWidget *papercolorOrange; GtkWidget *papercolorBlue; GtkWidget *papercolorGreen; GtkWidget *papercolorOther; GtkWidget *papercolorNA; GtkWidget *journalPaperStyle; GtkWidget *journalPaperStyle_menu; GSList *paperstylePlain_group = NULL; GtkWidget *paperstylePlain; GtkWidget *paperstyleLined; GtkWidget *paperstyleRuled; GtkWidget *paperstyleGraph; GtkWidget *paperstyleNA; GtkWidget *journalApplyAllPages; GtkWidget *separator23; GtkWidget *journalLoadBackground; GtkWidget *image632; GtkWidget *journalScreenshot; GtkWidget *separator19; GtkWidget *journalDefaultBackground; GtkWidget *journalSetAsDefault; GtkWidget *menuTools; GtkWidget *menuTools_menu; GSList *toolsPen_group = NULL; GtkWidget *toolsPen; GtkWidget *toolsEraser; GtkWidget *toolsHighlighter; GtkWidget *toolsText; GtkWidget *toolsImage; GtkWidget *separator15; GtkWidget *toolsReco; GtkWidget *toolsRuler; GtkWidget *separator9; GtkWidget *toolsSelectRegion; GtkWidget *toolsSelectRectangle; GtkWidget *toolsVerticalSpace; GtkWidget *toolsHand; GtkWidget *separator16; GtkWidget *toolsColor; GtkWidget *image633; GtkWidget *toolsColor_menu; GSList *colorBlack_group = NULL; GtkWidget *colorBlack; GtkWidget *colorBlue; GtkWidget *colorRed; GtkWidget *colorGreen; GtkWidget *colorGray; GtkWidget *separator17; GtkWidget *colorLightBlue; GtkWidget *colorLightGreen; GtkWidget *colorMagenta; GtkWidget *colorOrange; GtkWidget *colorYellow; GtkWidget *colorWhite; GtkWidget *colorOther; GtkWidget *colorNA; GtkWidget *toolsPenOptions; GtkWidget *toolsPenOptions_menu; GSList *penthicknessVeryFine_group = NULL; GtkWidget *penthicknessVeryFine; GtkWidget *penthicknessFine; GtkWidget *penthicknessMedium; GtkWidget *penthicknessThick; GtkWidget *penthicknessVeryThick; GtkWidget *toolsEraserOptions; GtkWidget *toolsEraserOptions_menu; GSList *eraserFine_group = NULL; GtkWidget *eraserFine; GtkWidget *eraserMedium; GtkWidget *eraserThick; GtkWidget *separator14; GSList *eraserStandard_group = NULL; GtkWidget *eraserStandard; GtkWidget *eraserWhiteout; GtkWidget *eraserDeleteStrokes; GtkWidget *toolsHighlighterOptions; GtkWidget *toolsHighlighterOptions_menu; GSList *highlighterFine_group = NULL; GtkWidget *highlighterFine; GtkWidget *highlighterMedium; GtkWidget *highlighterThick; GtkWidget *toolsTextFont; GtkWidget *image634; GtkWidget *separator10; GtkWidget *toolsDefaultPen; GtkWidget *toolsDefaultEraser; GtkWidget *toolsDefaultHighlighter; GtkWidget *toolsDefaultText; GtkWidget *toolsSetAsDefault; GtkWidget *menuOptions; GtkWidget *menuOptions_menu; GtkWidget *optionsUseXInput; GtkWidget *pen_and_touch; GtkWidget *pen_and_touch_menu; GtkWidget *optionsButtonMappings; GtkWidget *optionsPressureSensitive; GtkWidget *optionsButtonSwitchMapping; GtkWidget *optionsTouchAsHandTool; GtkWidget *optionsPenDisablesTouch; GtkWidget *optionsDesignateTouchscreen; GtkWidget *button2_mapping; GtkWidget *button2_mapping_menu; GSList *button2Pen_group = NULL; GtkWidget *button2Pen; GtkWidget *button2Eraser; GtkWidget *button2Highlighter; GtkWidget *button2Text; GtkWidget *button2Image; GtkWidget *button2SelectRegion; GtkWidget *button2SelectRectangle; GtkWidget *button2VerticalSpace; GtkWidget *button2Hand; GtkWidget *separator24; GSList *button2LinkBrush_group = NULL; GtkWidget *button2LinkBrush; GtkWidget *button2CopyBrush; GtkWidget *button2NABrush; GtkWidget *button3_mapping; GtkWidget *button3_mapping_menu; GSList *button3Pen_group = NULL; GtkWidget *button3Pen; GtkWidget *button3Eraser; GtkWidget *button3Highlighter; GtkWidget *button3Text; GtkWidget *button3Image; GtkWidget *button3SelectRegion; GtkWidget *button3SelectRectangle; GtkWidget *button3VerticalSpace; GtkWidget *button3Hand; GtkWidget *separator25; GSList *button3LinkBrush_group = NULL; GtkWidget *button3LinkBrush; GtkWidget *button3CopyBrush; GtkWidget *button3NABrush; GtkWidget *separator18; GtkWidget *optionsProgressiveBG; GtkWidget *optionsPrintRuling; GtkWidget *optionsLegacyPDFExport; GtkWidget *optionsAutoloadPdfXoj; GtkWidget *optionsAutosaveXoj; GtkWidget *optionsLeftHanded; GtkWidget *optionsShortenMenus; GtkWidget *optionsPenCursor; GtkWidget *separator21; GtkWidget *optionsAutoSavePrefs; GtkWidget *optionsSavePreferences; GtkWidget *menuHelp; GtkWidget *menuHelp_menu; GtkWidget *helpIndex; GtkWidget *helpAbout; GtkWidget *toolbarMain; GtkIconSize tmp_toolbar_icon_size; GtkWidget *saveButton; GtkWidget *newButton; GtkWidget *openButton; GtkWidget *toolitem11; GtkWidget *vseparator1; GtkWidget *buttonCut; GtkWidget *buttonCopy; GtkWidget *buttonPaste; GtkWidget *toolitem12; GtkWidget *vseparator2; GtkWidget *buttonUndo; GtkWidget *buttonRedo; GtkWidget *toolitem13; GtkWidget *vseparator3; GtkWidget *buttonFirstPage; GtkWidget *buttonPreviousPage; GtkWidget *buttonNextPage; GtkWidget *buttonLastPage; GtkWidget *toolitem14; GtkWidget *vseparator4; GtkWidget *buttonZoomOut; GtkWidget *buttonPageWidth; GtkWidget *buttonZoomIn; GtkWidget *buttonNormalSize; GtkWidget *buttonZoomSet; GtkWidget *tmp_image; GtkWidget *buttonFullscreen; GtkWidget *toolbarPen; GSList *buttonPen_group = NULL; GtkWidget *buttonPen; GtkWidget *buttonEraser; GtkWidget *buttonHighlighter; GtkWidget *buttonText; GtkWidget *buttonImage; GtkWidget *buttonReco; GtkWidget *buttonRuler; GtkWidget *toolitem15; GtkWidget *vseparator5; GtkWidget *buttonSelectRegion; GtkWidget *buttonSelectRectangle; GtkWidget *buttonVerticalSpace; GtkWidget *buttonHand; GtkWidget *toolitem16; GtkWidget *vseparator6; GtkWidget *buttonToolDefault; GtkWidget *buttonDefaultPen; GtkWidget *toolitem18; GtkWidget *vseparator8; GSList *buttonFine_group = NULL; GtkWidget *buttonFine; GtkWidget *buttonMedium; GtkWidget *buttonThick; GtkWidget *buttonThicknessOther; GtkWidget *toolitem17; GtkWidget *vseparator7; GSList *buttonBlack_group = NULL; GtkWidget *buttonBlack; GtkWidget *buttonBlue; GtkWidget *buttonRed; GtkWidget *buttonGreen; GtkWidget *buttonGray; GtkWidget *buttonLightBlue; GtkWidget *buttonLightGreen; GtkWidget *buttonMagenta; GtkWidget *buttonOrange; GtkWidget *buttonYellow; GtkWidget *buttonWhite; GtkWidget *buttonColorOther; GtkWidget *toolitem22; GtkWidget *buttonColorChooser; GtkWidget *toolitem21; GtkWidget *vseparator10; GtkWidget *toolitem20; GtkWidget *fontButton; GtkWidget *scrolledwindowMain; GtkWidget *hbox1; GtkWidget *labelPage; GtkObject *spinPageNo_adj; GtkWidget *spinPageNo; GtkWidget *labelNumpages; GtkWidget *vseparator9; GtkWidget *labelLayer; GtkWidget *comboLayer; GtkWidget *statusbar; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); winMain = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (winMain), _("Xournal")); vboxMain = gtk_vbox_new (FALSE, 0); gtk_widget_show (vboxMain); gtk_container_add (GTK_CONTAINER (winMain), vboxMain); menubar = gtk_menu_bar_new (); gtk_widget_show (menubar); gtk_box_pack_start (GTK_BOX (vboxMain), menubar, FALSE, FALSE, 0); menuFile = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuFile); gtk_container_add (GTK_CONTAINER (menubar), menuFile); menuFile_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuFile), menuFile_menu); fileNew = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (fileNew); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileNew); fileNewBackground = gtk_image_menu_item_new_with_mnemonic (_("Annotate PD_F")); gtk_widget_show (fileNewBackground); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileNewBackground); image623 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); gtk_widget_show (image623); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (fileNewBackground), image623); fileOpen = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (fileOpen); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileOpen); fileSave = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (fileSave); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileSave); fileSaveAs = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (fileSaveAs); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileSaveAs); separator1 = gtk_separator_menu_item_new (); gtk_widget_show (separator1); gtk_container_add (GTK_CONTAINER (menuFile_menu), separator1); gtk_widget_set_sensitive (separator1, FALSE); fileRecentFiles = gtk_menu_item_new_with_mnemonic (_("Recent Doc_uments")); gtk_widget_show (fileRecentFiles); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileRecentFiles); fileRecentFiles_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (fileRecentFiles), fileRecentFiles_menu); mru0 = gtk_menu_item_new_with_mnemonic (_("0")); gtk_widget_show (mru0); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru0); mru1 = gtk_menu_item_new_with_mnemonic (_("1")); gtk_widget_show (mru1); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru1); mru2 = gtk_menu_item_new_with_mnemonic (_("2")); gtk_widget_show (mru2); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru2); mru3 = gtk_menu_item_new_with_mnemonic (_("3")); gtk_widget_show (mru3); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru3); mru4 = gtk_menu_item_new_with_mnemonic (_("4")); gtk_widget_show (mru4); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru4); mru5 = gtk_menu_item_new_with_mnemonic (_("5")); gtk_widget_show (mru5); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru5); mru6 = gtk_menu_item_new_with_mnemonic (_("6")); gtk_widget_show (mru6); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru6); mru7 = gtk_menu_item_new_with_mnemonic (_("7")); gtk_widget_show (mru7); gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru7); separator22 = gtk_separator_menu_item_new (); gtk_widget_show (separator22); gtk_container_add (GTK_CONTAINER (menuFile_menu), separator22); gtk_widget_set_sensitive (separator22, FALSE); filePrintOptions = gtk_image_menu_item_new_with_mnemonic (_("Print Options")); gtk_widget_show (filePrintOptions); gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrintOptions); image624 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU); gtk_widget_show (image624); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (filePrintOptions), image624); filePrint = gtk_image_menu_item_new_from_stock ("gtk-print", accel_group); gtk_widget_show (filePrint); gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrint); gtk_widget_add_accelerator (filePrint, "activate", accel_group, GDK_P, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); filePrintPDF = gtk_menu_item_new_with_mnemonic (_("_Export to PDF")); gtk_widget_show (filePrintPDF); gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrintPDF); gtk_widget_add_accelerator (filePrintPDF, "activate", accel_group, GDK_E, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); separator2 = gtk_separator_menu_item_new (); gtk_widget_show (separator2); gtk_container_add (GTK_CONTAINER (menuFile_menu), separator2); gtk_widget_set_sensitive (separator2, FALSE); fileQuit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (fileQuit); gtk_container_add (GTK_CONTAINER (menuFile_menu), fileQuit); menuEdit = gtk_menu_item_new_with_mnemonic (_("_Edit")); gtk_widget_show (menuEdit); gtk_container_add (GTK_CONTAINER (menubar), menuEdit); menuEdit_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuEdit), menuEdit_menu); editUndo = gtk_image_menu_item_new_from_stock ("gtk-undo", accel_group); gtk_widget_show (editUndo); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editUndo); gtk_widget_add_accelerator (editUndo, "activate", accel_group, GDK_Z, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); editRedo = gtk_image_menu_item_new_from_stock ("gtk-redo", accel_group); gtk_widget_show (editRedo); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editRedo); gtk_widget_add_accelerator (editRedo, "activate", accel_group, GDK_Y, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); separator3 = gtk_separator_menu_item_new (); gtk_widget_show (separator3); gtk_container_add (GTK_CONTAINER (menuEdit_menu), separator3); gtk_widget_set_sensitive (separator3, FALSE); editCut = gtk_image_menu_item_new_from_stock ("gtk-cut", accel_group); gtk_widget_show (editCut); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editCut); editCopy = gtk_image_menu_item_new_from_stock ("gtk-copy", accel_group); gtk_widget_show (editCopy); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editCopy); editPaste = gtk_image_menu_item_new_from_stock ("gtk-paste", accel_group); gtk_widget_show (editPaste); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editPaste); editDelete = gtk_image_menu_item_new_from_stock ("gtk-delete", accel_group); gtk_widget_show (editDelete); gtk_container_add (GTK_CONTAINER (menuEdit_menu), editDelete); gtk_widget_add_accelerator (editDelete, "activate", accel_group, GDK_Delete, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); menuView = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (menuView); gtk_container_add (GTK_CONTAINER (menubar), menuView); menuView_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuView), menuView_menu); viewContinuous = gtk_radio_menu_item_new_with_mnemonic (viewContinuous_group, _("_Continuous")); viewContinuous_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (viewContinuous)); gtk_widget_show (viewContinuous); gtk_container_add (GTK_CONTAINER (menuView_menu), viewContinuous); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (viewContinuous), TRUE); viewHorizontal = gtk_radio_menu_item_new_with_mnemonic (viewContinuous_group, _("Horizontal")); viewContinuous_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (viewHorizontal)); gtk_widget_show (viewHorizontal); gtk_container_add (GTK_CONTAINER (menuView_menu), viewHorizontal); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (viewHorizontal), TRUE); viewOnePage = gtk_radio_menu_item_new_with_mnemonic (viewContinuous_group, _("_One Page")); viewContinuous_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (viewOnePage)); gtk_widget_show (viewOnePage); gtk_container_add (GTK_CONTAINER (menuView_menu), viewOnePage); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (viewOnePage), TRUE); separator20 = gtk_separator_menu_item_new (); gtk_widget_show (separator20); gtk_container_add (GTK_CONTAINER (menuView_menu), separator20); gtk_widget_set_sensitive (separator20, FALSE); viewFullscreen = gtk_check_menu_item_new_with_mnemonic (_("Full Screen")); gtk_widget_show (viewFullscreen); gtk_container_add (GTK_CONTAINER (menuView_menu), viewFullscreen); gtk_widget_add_accelerator (viewFullscreen, "activate", accel_group, GDK_F11, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); separator4 = gtk_separator_menu_item_new (); gtk_widget_show (separator4); gtk_container_add (GTK_CONTAINER (menuView_menu), separator4); gtk_widget_set_sensitive (separator4, FALSE); menuViewZoom = gtk_menu_item_new_with_mnemonic (_("_Zoom")); gtk_widget_show (menuViewZoom); gtk_container_add (GTK_CONTAINER (menuView_menu), menuViewZoom); menuViewZoom_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuViewZoom), menuViewZoom_menu); viewZoomIn = gtk_image_menu_item_new_from_stock ("gtk-zoom-in", accel_group); gtk_widget_show (viewZoomIn); gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewZoomIn); gtk_widget_add_accelerator (viewZoomIn, "activate", accel_group, GDK_plus, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); viewZoomOut = gtk_image_menu_item_new_from_stock ("gtk-zoom-out", accel_group); gtk_widget_show (viewZoomOut); gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewZoomOut); gtk_widget_add_accelerator (viewZoomOut, "activate", accel_group, GDK_minus, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); viewNormalSize = gtk_image_menu_item_new_from_stock ("gtk-zoom-100", accel_group); gtk_widget_show (viewNormalSize); gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewNormalSize); gtk_widget_add_accelerator (viewNormalSize, "activate", accel_group, GDK_0, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); viewPageWidth = gtk_image_menu_item_new_with_mnemonic (_("Page _Width")); gtk_widget_show (viewPageWidth); gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewPageWidth); gtk_widget_add_accelerator (viewPageWidth, "activate", accel_group, GDK_equal, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); image625 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU); gtk_widget_show (image625); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPageWidth), image625); viewSetZoom = gtk_menu_item_new_with_mnemonic (_("_Set Zoom")); gtk_widget_show (viewSetZoom); gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewSetZoom); separator5 = gtk_separator_menu_item_new (); gtk_widget_show (separator5); gtk_container_add (GTK_CONTAINER (menuView_menu), separator5); gtk_widget_set_sensitive (separator5, FALSE); viewFirstPage = gtk_image_menu_item_new_with_mnemonic (_("_First Page")); gtk_widget_show (viewFirstPage); gtk_container_add (GTK_CONTAINER (menuView_menu), viewFirstPage); gtk_widget_add_accelerator (viewFirstPage, "activate", accel_group, GDK_Home, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); image626 = gtk_image_new_from_stock ("gtk-goto-first", GTK_ICON_SIZE_MENU); gtk_widget_show (image626); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewFirstPage), image626); viewPreviousPage = gtk_image_menu_item_new_with_mnemonic (_("_Previous Page")); gtk_widget_show (viewPreviousPage); gtk_container_add (GTK_CONTAINER (menuView_menu), viewPreviousPage); gtk_widget_add_accelerator (viewPreviousPage, "activate", accel_group, GDK_Left, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); image627 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU); gtk_widget_show (image627); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPreviousPage), image627); viewNextPage = gtk_image_menu_item_new_with_mnemonic (_("_Next Page")); gtk_widget_show (viewNextPage); gtk_container_add (GTK_CONTAINER (menuView_menu), viewNextPage); gtk_widget_add_accelerator (viewNextPage, "activate", accel_group, GDK_Right, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); image628 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_MENU); gtk_widget_show (image628); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewNextPage), image628); viewLastPage = gtk_image_menu_item_new_with_mnemonic (_("_Last Page")); gtk_widget_show (viewLastPage); gtk_container_add (GTK_CONTAINER (menuView_menu), viewLastPage); gtk_widget_add_accelerator (viewLastPage, "activate", accel_group, GDK_End, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); image629 = gtk_image_new_from_stock ("gtk-goto-last", GTK_ICON_SIZE_MENU); gtk_widget_show (image629); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewLastPage), image629); separator6 = gtk_separator_menu_item_new (); gtk_widget_show (separator6); gtk_container_add (GTK_CONTAINER (menuView_menu), separator6); gtk_widget_set_sensitive (separator6, FALSE); viewShowLayer = gtk_image_menu_item_new_with_mnemonic (_("_Show Layer")); gtk_widget_show (viewShowLayer); gtk_container_add (GTK_CONTAINER (menuView_menu), viewShowLayer); image630 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); gtk_widget_show (image630); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewShowLayer), image630); viewHideLayer = gtk_image_menu_item_new_with_mnemonic (_("_Hide Layer")); gtk_widget_show (viewHideLayer); gtk_container_add (GTK_CONTAINER (menuView_menu), viewHideLayer); image631 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); gtk_widget_show (image631); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewHideLayer), image631); menuJournal = gtk_menu_item_new_with_mnemonic (_("_Page")); gtk_widget_show (menuJournal); gtk_container_add (GTK_CONTAINER (menubar), menuJournal); menuJournal_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuJournal), menuJournal_menu); journalNewPageBefore = gtk_menu_item_new_with_mnemonic (_("New Page _Before")); gtk_widget_show (journalNewPageBefore); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalNewPageBefore); journalNewPageAfter = gtk_menu_item_new_with_mnemonic (_("New Page _After")); gtk_widget_show (journalNewPageAfter); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalNewPageAfter); journalNewPageEnd = gtk_menu_item_new_with_mnemonic (_("New Page At _End")); gtk_widget_show (journalNewPageEnd); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalNewPageEnd); journalNewPageKeepsBG = gtk_check_menu_item_new_with_mnemonic (_("New Pages Keep Background")); gtk_widget_show (journalNewPageKeepsBG); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalNewPageKeepsBG); journalDeletePage = gtk_menu_item_new_with_mnemonic (_("_Delete Page")); gtk_widget_show (journalDeletePage); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalDeletePage); separator7 = gtk_separator_menu_item_new (); gtk_widget_show (separator7); gtk_container_add (GTK_CONTAINER (menuJournal_menu), separator7); gtk_widget_set_sensitive (separator7, FALSE); journalNewLayer = gtk_menu_item_new_with_mnemonic (_("_New Layer")); gtk_widget_show (journalNewLayer); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalNewLayer); journalDeleteLayer = gtk_menu_item_new_with_mnemonic (_("Delete La_yer")); gtk_widget_show (journalDeleteLayer); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalDeleteLayer); journalFlatten = gtk_menu_item_new_with_mnemonic (_("_Flatten")); gtk_widget_show (journalFlatten); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalFlatten); separator8 = gtk_separator_menu_item_new (); gtk_widget_show (separator8); gtk_container_add (GTK_CONTAINER (menuJournal_menu), separator8); gtk_widget_set_sensitive (separator8, FALSE); journalPaperSize = gtk_menu_item_new_with_mnemonic (_("Paper Si_ze")); gtk_widget_show (journalPaperSize); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalPaperSize); journalPaperColor = gtk_menu_item_new_with_mnemonic (_("Paper _Color")); gtk_widget_show (journalPaperColor); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalPaperColor); journalPaperColor_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (journalPaperColor), journalPaperColor_menu); papercolorWhite = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_white paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorWhite)); gtk_widget_show (papercolorWhite); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorWhite); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorWhite), TRUE); papercolorYellow = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_yellow paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorYellow)); gtk_widget_show (papercolorYellow); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorYellow); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorYellow), TRUE); papercolorPink = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_pink paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorPink)); gtk_widget_show (papercolorPink); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorPink); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorPink), TRUE); papercolorOrange = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_orange paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorOrange)); gtk_widget_show (papercolorOrange); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorOrange); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorOrange), TRUE); papercolorBlue = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_blue paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorBlue)); gtk_widget_show (papercolorBlue); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorBlue); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorBlue), TRUE); papercolorGreen = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("_green paper")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorGreen)); gtk_widget_show (papercolorGreen); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorGreen); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorGreen), TRUE); papercolorOther = gtk_menu_item_new_with_mnemonic (_("other...")); gtk_widget_show (papercolorOther); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorOther); papercolorNA = gtk_radio_menu_item_new_with_mnemonic (papercolorWhite_group, _("NA")); papercolorWhite_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (papercolorNA)); gtk_container_add (GTK_CONTAINER (journalPaperColor_menu), papercolorNA); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (papercolorNA), TRUE); journalPaperStyle = gtk_menu_item_new_with_mnemonic (_("Paper _Style")); gtk_widget_show (journalPaperStyle); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalPaperStyle); journalPaperStyle_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (journalPaperStyle), journalPaperStyle_menu); paperstylePlain = gtk_radio_menu_item_new_with_mnemonic (paperstylePlain_group, _("_plain")); paperstylePlain_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (paperstylePlain)); gtk_widget_show (paperstylePlain); gtk_container_add (GTK_CONTAINER (journalPaperStyle_menu), paperstylePlain); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (paperstylePlain), TRUE); paperstyleLined = gtk_radio_menu_item_new_with_mnemonic (paperstylePlain_group, _("_lined")); paperstylePlain_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (paperstyleLined)); gtk_widget_show (paperstyleLined); gtk_container_add (GTK_CONTAINER (journalPaperStyle_menu), paperstyleLined); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (paperstyleLined), TRUE); paperstyleRuled = gtk_radio_menu_item_new_with_mnemonic (paperstylePlain_group, _("_ruled")); paperstylePlain_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (paperstyleRuled)); gtk_widget_show (paperstyleRuled); gtk_container_add (GTK_CONTAINER (journalPaperStyle_menu), paperstyleRuled); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (paperstyleRuled), TRUE); paperstyleGraph = gtk_radio_menu_item_new_with_mnemonic (paperstylePlain_group, _("_graph")); paperstylePlain_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (paperstyleGraph)); gtk_widget_show (paperstyleGraph); gtk_container_add (GTK_CONTAINER (journalPaperStyle_menu), paperstyleGraph); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (paperstyleGraph), TRUE); paperstyleNA = gtk_radio_menu_item_new_with_mnemonic (paperstylePlain_group, _("NA")); paperstylePlain_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (paperstyleNA)); gtk_container_add (GTK_CONTAINER (journalPaperStyle_menu), paperstyleNA); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (paperstyleNA), TRUE); journalApplyAllPages = gtk_check_menu_item_new_with_mnemonic (_("Apply _To All Pages")); gtk_widget_show (journalApplyAllPages); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalApplyAllPages); separator23 = gtk_separator_menu_item_new (); gtk_widget_show (separator23); gtk_container_add (GTK_CONTAINER (menuJournal_menu), separator23); gtk_widget_set_sensitive (separator23, FALSE); journalLoadBackground = gtk_image_menu_item_new_with_mnemonic (_("_Load Background")); gtk_widget_show (journalLoadBackground); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalLoadBackground); image632 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); gtk_widget_show (image632); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (journalLoadBackground), image632); journalScreenshot = gtk_menu_item_new_with_mnemonic (_("Background Screens_hot")); gtk_widget_show (journalScreenshot); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalScreenshot); separator19 = gtk_separator_menu_item_new (); gtk_widget_show (separator19); gtk_container_add (GTK_CONTAINER (menuJournal_menu), separator19); gtk_widget_set_sensitive (separator19, FALSE); journalDefaultBackground = gtk_menu_item_new_with_mnemonic (_("Default _Paper")); gtk_widget_show (journalDefaultBackground); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalDefaultBackground); journalSetAsDefault = gtk_menu_item_new_with_mnemonic (_("Set As De_fault")); gtk_widget_show (journalSetAsDefault); gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalSetAsDefault); menuTools = gtk_menu_item_new_with_mnemonic (_("_Tools")); gtk_widget_show (menuTools); gtk_container_add (GTK_CONTAINER (menubar), menuTools); menuTools_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuTools), menuTools_menu); toolsPen = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Pen")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsPen)); gtk_widget_show (toolsPen); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsPen); gtk_widget_add_accelerator (toolsPen, "activate", accel_group, GDK_P, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsPen), TRUE); toolsEraser = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Eraser")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsEraser)); gtk_widget_show (toolsEraser); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraser); gtk_widget_add_accelerator (toolsEraser, "activate", accel_group, GDK_E, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsEraser), TRUE); toolsHighlighter = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Highlighter")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsHighlighter)); gtk_widget_show (toolsHighlighter); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHighlighter); gtk_widget_add_accelerator (toolsHighlighter, "activate", accel_group, GDK_H, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsHighlighter), TRUE); toolsText = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Text")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsText)); gtk_widget_show (toolsText); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsText); gtk_widget_add_accelerator (toolsText, "activate", accel_group, GDK_T, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsText), TRUE); toolsImage = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Image")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsImage)); gtk_widget_show (toolsImage); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsImage); gtk_widget_add_accelerator (toolsImage, "activate", accel_group, GDK_I, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsImage), TRUE); separator15 = gtk_separator_menu_item_new (); gtk_widget_show (separator15); gtk_container_add (GTK_CONTAINER (menuTools_menu), separator15); gtk_widget_set_sensitive (separator15, FALSE); toolsReco = gtk_check_menu_item_new_with_mnemonic (_("_Shape Recognizer")); gtk_widget_show (toolsReco); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsReco); gtk_widget_add_accelerator (toolsReco, "activate", accel_group, GDK_S, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); toolsRuler = gtk_check_menu_item_new_with_mnemonic (_("Ru_ler")); gtk_widget_show (toolsRuler); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsRuler); gtk_widget_add_accelerator (toolsRuler, "activate", accel_group, GDK_L, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); separator9 = gtk_separator_menu_item_new (); gtk_widget_show (separator9); gtk_container_add (GTK_CONTAINER (menuTools_menu), separator9); gtk_widget_set_sensitive (separator9, FALSE); toolsSelectRegion = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("Select Re_gion")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsSelectRegion)); gtk_widget_show (toolsSelectRegion); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSelectRegion); gtk_widget_add_accelerator (toolsSelectRegion, "activate", accel_group, GDK_G, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsSelectRegion), TRUE); toolsSelectRectangle = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("Select _Rectangle")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsSelectRectangle)); gtk_widget_show (toolsSelectRectangle); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSelectRectangle); gtk_widget_add_accelerator (toolsSelectRectangle, "activate", accel_group, GDK_R, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsSelectRectangle), TRUE); toolsVerticalSpace = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("_Vertical Space")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsVerticalSpace)); gtk_widget_show (toolsVerticalSpace); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsVerticalSpace); gtk_widget_add_accelerator (toolsVerticalSpace, "activate", accel_group, GDK_V, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsVerticalSpace), TRUE); toolsHand = gtk_radio_menu_item_new_with_mnemonic (toolsPen_group, _("H_and Tool")); toolsPen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (toolsHand)); gtk_widget_show (toolsHand); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHand); gtk_widget_add_accelerator (toolsHand, "activate", accel_group, GDK_A, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); separator16 = gtk_separator_menu_item_new (); gtk_widget_show (separator16); gtk_container_add (GTK_CONTAINER (menuTools_menu), separator16); gtk_widget_set_sensitive (separator16, FALSE); toolsColor = gtk_image_menu_item_new_with_mnemonic (_("_Color")); gtk_widget_show (toolsColor); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsColor); image633 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU); gtk_widget_show (image633); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsColor), image633); toolsColor_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsColor), toolsColor_menu); colorBlack = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("blac_k")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorBlack)); gtk_widget_show (colorBlack); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorBlack); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorBlack), TRUE); colorBlue = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_blue")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorBlue)); gtk_widget_show (colorBlue); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorBlue); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorBlue), TRUE); colorRed = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_red")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorRed)); gtk_widget_show (colorRed); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorRed); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorRed), TRUE); colorGreen = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_green")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorGreen)); gtk_widget_show (colorGreen); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorGreen); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorGreen), TRUE); colorGray = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("gr_ay")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorGray)); gtk_widget_show (colorGray); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorGray); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorGray), TRUE); separator17 = gtk_separator_menu_item_new (); gtk_widget_show (separator17); gtk_container_add (GTK_CONTAINER (toolsColor_menu), separator17); gtk_widget_set_sensitive (separator17, FALSE); colorLightBlue = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("light bl_ue")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorLightBlue)); gtk_widget_show (colorLightBlue); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorLightBlue); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorLightBlue), TRUE); colorLightGreen = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("light gr_een")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorLightGreen)); gtk_widget_show (colorLightGreen); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorLightGreen); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorLightGreen), TRUE); colorMagenta = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_magenta")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorMagenta)); gtk_widget_show (colorMagenta); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorMagenta); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorMagenta), TRUE); colorOrange = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_orange")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorOrange)); gtk_widget_show (colorOrange); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorOrange); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorOrange), TRUE); colorYellow = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_yellow")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorYellow)); gtk_widget_show (colorYellow); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorYellow); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorYellow), TRUE); colorWhite = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("_white")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorWhite)); gtk_widget_show (colorWhite); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorWhite); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorWhite), TRUE); colorOther = gtk_menu_item_new_with_mnemonic (_("other...")); gtk_widget_show (colorOther); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorOther); colorNA = gtk_radio_menu_item_new_with_mnemonic (colorBlack_group, _("NA")); colorBlack_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (colorNA)); gtk_container_add (GTK_CONTAINER (toolsColor_menu), colorNA); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (colorNA), TRUE); toolsPenOptions = gtk_menu_item_new_with_mnemonic (_("Pen _Options")); gtk_widget_show (toolsPenOptions); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsPenOptions); toolsPenOptions_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsPenOptions), toolsPenOptions_menu); penthicknessVeryFine = gtk_radio_menu_item_new_with_mnemonic (penthicknessVeryFine_group, _("_very fine")); penthicknessVeryFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (penthicknessVeryFine)); gtk_widget_show (penthicknessVeryFine); gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessVeryFine); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessVeryFine), TRUE); penthicknessFine = gtk_radio_menu_item_new_with_mnemonic (penthicknessVeryFine_group, _("_fine")); penthicknessVeryFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (penthicknessFine)); gtk_widget_show (penthicknessFine); gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessFine); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessFine), TRUE); penthicknessMedium = gtk_radio_menu_item_new_with_mnemonic (penthicknessVeryFine_group, _("_medium")); penthicknessVeryFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (penthicknessMedium)); gtk_widget_show (penthicknessMedium); gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessMedium); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessMedium), TRUE); penthicknessThick = gtk_radio_menu_item_new_with_mnemonic (penthicknessVeryFine_group, _("_thick")); penthicknessVeryFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (penthicknessThick)); gtk_widget_show (penthicknessThick); gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessThick); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessThick), TRUE); penthicknessVeryThick = gtk_radio_menu_item_new_with_mnemonic (penthicknessVeryFine_group, _("ver_y thick")); penthicknessVeryFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (penthicknessVeryThick)); gtk_widget_show (penthicknessVeryThick); gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessVeryThick); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessVeryThick), TRUE); toolsEraserOptions = gtk_menu_item_new_with_mnemonic (_("Eraser Optio_ns")); gtk_widget_show (toolsEraserOptions); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraserOptions); toolsEraserOptions_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsEraserOptions), toolsEraserOptions_menu); eraserFine = gtk_radio_menu_item_new_with_mnemonic (eraserFine_group, _("_fine")); eraserFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserFine)); gtk_widget_show (eraserFine); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserFine); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserFine), TRUE); eraserMedium = gtk_radio_menu_item_new_with_mnemonic (eraserFine_group, _("_medium")); eraserFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserMedium)); gtk_widget_show (eraserMedium); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserMedium); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserMedium), TRUE); eraserThick = gtk_radio_menu_item_new_with_mnemonic (eraserFine_group, _("_thick")); eraserFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserThick)); gtk_widget_show (eraserThick); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserThick); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserThick), TRUE); separator14 = gtk_separator_menu_item_new (); gtk_widget_show (separator14); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), separator14); gtk_widget_set_sensitive (separator14, FALSE); eraserStandard = gtk_radio_menu_item_new_with_mnemonic (eraserStandard_group, _("_standard")); eraserStandard_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserStandard)); gtk_widget_show (eraserStandard); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserStandard); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserStandard), TRUE); eraserWhiteout = gtk_radio_menu_item_new_with_mnemonic (eraserStandard_group, _("_whiteout")); eraserStandard_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserWhiteout)); gtk_widget_show (eraserWhiteout); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserWhiteout); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserWhiteout), TRUE); eraserDeleteStrokes = gtk_radio_menu_item_new_with_mnemonic (eraserStandard_group, _("_delete strokes")); eraserStandard_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (eraserDeleteStrokes)); gtk_widget_show (eraserDeleteStrokes); gtk_container_add (GTK_CONTAINER (toolsEraserOptions_menu), eraserDeleteStrokes); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (eraserDeleteStrokes), TRUE); toolsHighlighterOptions = gtk_menu_item_new_with_mnemonic (_("Highlighter Opt_ions")); gtk_widget_show (toolsHighlighterOptions); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHighlighterOptions); toolsHighlighterOptions_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsHighlighterOptions), toolsHighlighterOptions_menu); highlighterFine = gtk_radio_menu_item_new_with_mnemonic (highlighterFine_group, _("_fine")); highlighterFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (highlighterFine)); gtk_widget_show (highlighterFine); gtk_container_add (GTK_CONTAINER (toolsHighlighterOptions_menu), highlighterFine); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (highlighterFine), TRUE); highlighterMedium = gtk_radio_menu_item_new_with_mnemonic (highlighterFine_group, _("_medium")); highlighterFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (highlighterMedium)); gtk_widget_show (highlighterMedium); gtk_container_add (GTK_CONTAINER (toolsHighlighterOptions_menu), highlighterMedium); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (highlighterMedium), TRUE); highlighterThick = gtk_radio_menu_item_new_with_mnemonic (highlighterFine_group, _("_thick")); highlighterFine_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (highlighterThick)); gtk_widget_show (highlighterThick); gtk_container_add (GTK_CONTAINER (toolsHighlighterOptions_menu), highlighterThick); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (highlighterThick), TRUE); toolsTextFont = gtk_image_menu_item_new_with_mnemonic (_("Text _Font...")); gtk_widget_show (toolsTextFont); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsTextFont); gtk_widget_add_accelerator (toolsTextFont, "activate", accel_group, GDK_F, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); image634 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU); gtk_widget_show (image634); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsTextFont), image634); separator10 = gtk_separator_menu_item_new (); gtk_widget_show (separator10); gtk_container_add (GTK_CONTAINER (menuTools_menu), separator10); gtk_widget_set_sensitive (separator10, FALSE); toolsDefaultPen = gtk_menu_item_new_with_mnemonic (_("_Default Pen")); gtk_widget_show (toolsDefaultPen); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsDefaultPen); toolsDefaultEraser = gtk_menu_item_new_with_mnemonic (_("Default Eraser")); gtk_widget_show (toolsDefaultEraser); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsDefaultEraser); toolsDefaultHighlighter = gtk_menu_item_new_with_mnemonic (_("Default Highlighter")); gtk_widget_show (toolsDefaultHighlighter); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsDefaultHighlighter); toolsDefaultText = gtk_menu_item_new_with_mnemonic (_("Default Te_xt")); gtk_widget_show (toolsDefaultText); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsDefaultText); toolsSetAsDefault = gtk_menu_item_new_with_mnemonic (_("Set As Default")); gtk_widget_show (toolsSetAsDefault); gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSetAsDefault); menuOptions = gtk_menu_item_new_with_mnemonic (_("_Options")); gtk_widget_show (menuOptions); gtk_container_add (GTK_CONTAINER (menubar), menuOptions); menuOptions_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuOptions), menuOptions_menu); optionsUseXInput = gtk_check_menu_item_new_with_mnemonic (_("Use _XInput")); gtk_widget_show (optionsUseXInput); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsUseXInput); pen_and_touch = gtk_menu_item_new_with_mnemonic (_("_Pen and Touch")); gtk_widget_show (pen_and_touch); gtk_container_add (GTK_CONTAINER (menuOptions_menu), pen_and_touch); pen_and_touch_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (pen_and_touch), pen_and_touch_menu); optionsButtonMappings = gtk_check_menu_item_new_with_mnemonic (_("_Eraser Tip")); gtk_widget_show (optionsButtonMappings); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsButtonMappings); optionsPressureSensitive = gtk_check_menu_item_new_with_mnemonic (_("_Pressure sensitivity")); gtk_widget_show (optionsPressureSensitive); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsPressureSensitive); optionsButtonSwitchMapping = gtk_check_menu_item_new_with_mnemonic (_("Buttons Switch Mappings")); gtk_widget_show (optionsButtonSwitchMapping); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsButtonSwitchMapping); optionsTouchAsHandTool = gtk_check_menu_item_new_with_mnemonic (_("_Touchscreen as Hand Tool")); gtk_widget_show (optionsTouchAsHandTool); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsTouchAsHandTool); optionsPenDisablesTouch = gtk_check_menu_item_new_with_mnemonic (_("Pen disables Touch")); gtk_widget_show (optionsPenDisablesTouch); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsPenDisablesTouch); optionsDesignateTouchscreen = gtk_menu_item_new_with_mnemonic (_("Designate as Touchscreen...")); gtk_widget_show (optionsDesignateTouchscreen); gtk_container_add (GTK_CONTAINER (pen_and_touch_menu), optionsDesignateTouchscreen); button2_mapping = gtk_menu_item_new_with_mnemonic (_("Button _2 Mapping")); gtk_widget_show (button2_mapping); gtk_container_add (GTK_CONTAINER (menuOptions_menu), button2_mapping); button2_mapping_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (button2_mapping), button2_mapping_menu); button2Pen = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Pen")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Pen)); gtk_widget_show (button2Pen); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Pen); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2Pen), TRUE); button2Eraser = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Eraser")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Eraser)); gtk_widget_show (button2Eraser); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Eraser); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2Eraser), TRUE); button2Highlighter = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Highlighter")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Highlighter)); gtk_widget_show (button2Highlighter); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Highlighter); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2Highlighter), TRUE); button2Text = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Text")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Text)); gtk_widget_show (button2Text); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Text); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2Text), TRUE); button2Image = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Image")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Image)); gtk_widget_show (button2Image); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Image); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2Image), TRUE); button2SelectRegion = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("Select Re_gion")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2SelectRegion)); gtk_widget_show (button2SelectRegion); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2SelectRegion); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2SelectRegion), TRUE); button2SelectRectangle = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("Select _Rectangle")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2SelectRectangle)); gtk_widget_show (button2SelectRectangle); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2SelectRectangle); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2SelectRectangle), TRUE); button2VerticalSpace = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("_Vertical Space")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2VerticalSpace)); gtk_widget_show (button2VerticalSpace); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2VerticalSpace); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2VerticalSpace), TRUE); button2Hand = gtk_radio_menu_item_new_with_mnemonic (button2Pen_group, _("H_and Tool")); button2Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2Hand)); gtk_widget_show (button2Hand); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2Hand); separator24 = gtk_separator_menu_item_new (); gtk_widget_show (separator24); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), separator24); gtk_widget_set_sensitive (separator24, FALSE); button2LinkBrush = gtk_radio_menu_item_new_with_mnemonic (button2LinkBrush_group, _("_Link to Primary Brush")); button2LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2LinkBrush)); gtk_widget_show (button2LinkBrush); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2LinkBrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2LinkBrush), TRUE); button2CopyBrush = gtk_radio_menu_item_new_with_mnemonic (button2LinkBrush_group, _("_Copy of Current Brush")); button2LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2CopyBrush)); gtk_widget_show (button2CopyBrush); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2CopyBrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2CopyBrush), TRUE); button2NABrush = gtk_radio_menu_item_new_with_mnemonic (button2LinkBrush_group, _("NA")); button2LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button2NABrush)); gtk_container_add (GTK_CONTAINER (button2_mapping_menu), button2NABrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button2NABrush), TRUE); button3_mapping = gtk_menu_item_new_with_mnemonic (_("Button _3 Mapping")); gtk_widget_show (button3_mapping); gtk_container_add (GTK_CONTAINER (menuOptions_menu), button3_mapping); button3_mapping_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (button3_mapping), button3_mapping_menu); button3Pen = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Pen")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Pen)); gtk_widget_show (button3Pen); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Pen); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3Pen), TRUE); button3Eraser = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Eraser")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Eraser)); gtk_widget_show (button3Eraser); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Eraser); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3Eraser), TRUE); button3Highlighter = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Highlighter")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Highlighter)); gtk_widget_show (button3Highlighter); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Highlighter); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3Highlighter), TRUE); button3Text = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Text")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Text)); gtk_widget_show (button3Text); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Text); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3Text), TRUE); button3Image = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Image")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Image)); gtk_widget_show (button3Image); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Image); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3Image), TRUE); button3SelectRegion = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("Select Re_gion")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3SelectRegion)); gtk_widget_show (button3SelectRegion); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3SelectRegion); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3SelectRegion), TRUE); button3SelectRectangle = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("Select _Rectangle")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3SelectRectangle)); gtk_widget_show (button3SelectRectangle); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3SelectRectangle); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3SelectRectangle), TRUE); button3VerticalSpace = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("_Vertical Space")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3VerticalSpace)); gtk_widget_show (button3VerticalSpace); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3VerticalSpace); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3VerticalSpace), TRUE); button3Hand = gtk_radio_menu_item_new_with_mnemonic (button3Pen_group, _("H_and Tool")); button3Pen_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3Hand)); gtk_widget_show (button3Hand); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3Hand); separator25 = gtk_separator_menu_item_new (); gtk_widget_show (separator25); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), separator25); gtk_widget_set_sensitive (separator25, FALSE); button3LinkBrush = gtk_radio_menu_item_new_with_mnemonic (button3LinkBrush_group, _("_Link to Primary Brush")); button3LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3LinkBrush)); gtk_widget_show (button3LinkBrush); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3LinkBrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3LinkBrush), TRUE); button3CopyBrush = gtk_radio_menu_item_new_with_mnemonic (button3LinkBrush_group, _("_Copy of Current Brush")); button3LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3CopyBrush)); gtk_widget_show (button3CopyBrush); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3CopyBrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3CopyBrush), TRUE); button3NABrush = gtk_radio_menu_item_new_with_mnemonic (button3LinkBrush_group, _("NA")); button3LinkBrush_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (button3NABrush)); gtk_container_add (GTK_CONTAINER (button3_mapping_menu), button3NABrush); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (button3NABrush), TRUE); separator18 = gtk_separator_menu_item_new (); gtk_widget_show (separator18); gtk_container_add (GTK_CONTAINER (menuOptions_menu), separator18); gtk_widget_set_sensitive (separator18, FALSE); optionsProgressiveBG = gtk_check_menu_item_new_with_mnemonic (_("Progressive _Backgrounds")); gtk_widget_show (optionsProgressiveBG); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsProgressiveBG); optionsPrintRuling = gtk_check_menu_item_new_with_mnemonic (_("Print Paper _Ruling")); gtk_widget_show (optionsPrintRuling); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsPrintRuling); optionsLegacyPDFExport = gtk_check_menu_item_new_with_mnemonic (_("Legacy PDF Export")); gtk_widget_show (optionsLegacyPDFExport); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsLegacyPDFExport); optionsAutoloadPdfXoj = gtk_check_menu_item_new_with_mnemonic (_("Autoload pdf.xoj")); gtk_widget_show (optionsAutoloadPdfXoj); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsAutoloadPdfXoj); optionsAutosaveXoj = gtk_check_menu_item_new_with_mnemonic (_("Auto-Save Files")); gtk_widget_show (optionsAutosaveXoj); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsAutosaveXoj); optionsLeftHanded = gtk_check_menu_item_new_with_mnemonic (_("Left-Handed Scrollbar")); gtk_widget_show (optionsLeftHanded); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsLeftHanded); optionsShortenMenus = gtk_check_menu_item_new_with_mnemonic (_("Shorten _Menus")); gtk_widget_show (optionsShortenMenus); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsShortenMenus); optionsPenCursor = gtk_check_menu_item_new_with_mnemonic (_("Pencil Cursor")); gtk_widget_show (optionsPenCursor); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsPenCursor); separator21 = gtk_separator_menu_item_new (); gtk_widget_show (separator21); gtk_container_add (GTK_CONTAINER (menuOptions_menu), separator21); gtk_widget_set_sensitive (separator21, FALSE); optionsAutoSavePrefs = gtk_check_menu_item_new_with_mnemonic (_("A_uto-Save Preferences")); gtk_widget_show (optionsAutoSavePrefs); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsAutoSavePrefs); optionsSavePreferences = gtk_menu_item_new_with_mnemonic (_("_Save Preferences")); gtk_widget_show (optionsSavePreferences); gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsSavePreferences); menuHelp = gtk_menu_item_new_with_mnemonic (_("_Help")); gtk_widget_show (menuHelp); gtk_container_add (GTK_CONTAINER (menubar), menuHelp); menuHelp_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuHelp), menuHelp_menu); helpIndex = gtk_image_menu_item_new_from_stock ("gtk-index", accel_group); gtk_widget_show (helpIndex); gtk_container_add (GTK_CONTAINER (menuHelp_menu), helpIndex); helpAbout = gtk_menu_item_new_with_mnemonic (_("_About")); gtk_widget_show (helpAbout); gtk_container_add (GTK_CONTAINER (menuHelp_menu), helpAbout); toolbarMain = gtk_toolbar_new (); gtk_widget_show (toolbarMain); gtk_box_pack_start (GTK_BOX (vboxMain), toolbarMain, FALSE, FALSE, 0); gtk_toolbar_set_style (GTK_TOOLBAR (toolbarMain), GTK_TOOLBAR_ICONS); tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbarMain)); saveButton = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-save"); gtk_widget_show (saveButton); gtk_container_add (GTK_CONTAINER (toolbarMain), saveButton); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (saveButton), tooltips, _("Save"), NULL); newButton = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-new"); gtk_widget_show (newButton); gtk_container_add (GTK_CONTAINER (toolbarMain), newButton); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (newButton), tooltips, _("New"), NULL); openButton = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-open"); gtk_widget_show (openButton); gtk_container_add (GTK_CONTAINER (toolbarMain), openButton); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (openButton), tooltips, _("Open"), NULL); toolitem11 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem11); gtk_container_add (GTK_CONTAINER (toolbarMain), toolitem11); vseparator1 = gtk_vseparator_new (); gtk_widget_show (vseparator1); gtk_container_add (GTK_CONTAINER (toolitem11), vseparator1); buttonCut = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-cut"); gtk_widget_show (buttonCut); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonCut); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonCut), tooltips, _("Cut"), NULL); buttonCopy = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-copy"); gtk_widget_show (buttonCopy); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonCopy); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonCopy), tooltips, _("Copy"), NULL); buttonPaste = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-paste"); gtk_widget_show (buttonPaste); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonPaste); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonPaste), tooltips, _("Paste"), NULL); toolitem12 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem12); gtk_container_add (GTK_CONTAINER (toolbarMain), toolitem12); vseparator2 = gtk_vseparator_new (); gtk_widget_show (vseparator2); gtk_container_add (GTK_CONTAINER (toolitem12), vseparator2); buttonUndo = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-undo"); gtk_widget_show (buttonUndo); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonUndo); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonUndo), tooltips, _("Undo"), NULL); buttonRedo = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-redo"); gtk_widget_show (buttonRedo); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonRedo); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonRedo), tooltips, _("Redo"), NULL); toolitem13 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem13); gtk_container_add (GTK_CONTAINER (toolbarMain), toolitem13); vseparator3 = gtk_vseparator_new (); gtk_widget_show (vseparator3); gtk_container_add (GTK_CONTAINER (toolitem13), vseparator3); buttonFirstPage = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-goto-first"); gtk_widget_show (buttonFirstPage); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonFirstPage); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonFirstPage), tooltips, _("First Page"), NULL); buttonPreviousPage = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-go-back"); gtk_widget_show (buttonPreviousPage); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonPreviousPage); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonPreviousPage), tooltips, _("Previous Page"), NULL); buttonNextPage = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-go-forward"); gtk_widget_show (buttonNextPage); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonNextPage); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonNextPage), tooltips, _("Next Page"), NULL); buttonLastPage = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-goto-last"); gtk_widget_show (buttonLastPage); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonLastPage); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonLastPage), tooltips, _("Last Page"), NULL); toolitem14 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem14); gtk_container_add (GTK_CONTAINER (toolbarMain), toolitem14); vseparator4 = gtk_vseparator_new (); gtk_widget_show (vseparator4); gtk_container_add (GTK_CONTAINER (toolitem14), vseparator4); buttonZoomOut = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-out"); gtk_widget_show (buttonZoomOut); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonZoomOut); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonZoomOut), tooltips, _("Zoom Out"), NULL); buttonPageWidth = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-fit"); gtk_widget_show (buttonPageWidth); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonPageWidth); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonPageWidth), tooltips, _("Page Width"), NULL); gtk_tool_item_set_visible_vertical (GTK_TOOL_ITEM (buttonPageWidth), FALSE); buttonZoomIn = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-in"); gtk_widget_show (buttonZoomIn); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonZoomIn); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonZoomIn), tooltips, _("Zoom In"), NULL); buttonNormalSize = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-zoom-100"); gtk_widget_show (buttonNormalSize); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonNormalSize); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonNormalSize), tooltips, _("Normal Size"), NULL); buttonZoomSet = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-find"); gtk_widget_show (buttonZoomSet); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonZoomSet); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonZoomSet), tooltips, _("Set Zoom"), NULL); buttonFullscreen = (GtkWidget*) gtk_toggle_tool_button_new (); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonFullscreen), ""); tmp_image = create_pixmap (winMain, "fullscreen.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonFullscreen), tmp_image); gtk_widget_show (buttonFullscreen); gtk_container_add (GTK_CONTAINER (toolbarMain), buttonFullscreen); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonFullscreen), tooltips, _("Toggle Fullscreen"), NULL); toolbarPen = gtk_toolbar_new (); gtk_widget_show (toolbarPen); gtk_box_pack_start (GTK_BOX (vboxMain), toolbarPen, FALSE, FALSE, 0); gtk_toolbar_set_style (GTK_TOOLBAR (toolbarPen), GTK_TOOLBAR_ICONS); tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbarPen)); buttonPen = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonPen), _("Pencil")); tmp_image = create_pixmap (winMain, "pencil.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonPen), tmp_image); gtk_widget_show (buttonPen); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonPen); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonPen), tooltips, _("Pen"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonPen), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonPen)); buttonEraser = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonEraser), _("Eraser")); tmp_image = create_pixmap (winMain, "eraser.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonEraser), tmp_image); gtk_widget_show (buttonEraser); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonEraser); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonEraser), tooltips, _("Eraser"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonEraser), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonEraser)); buttonHighlighter = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonHighlighter), _("Highlighter")); tmp_image = create_pixmap (winMain, "highlighter.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonHighlighter), tmp_image); gtk_widget_show (buttonHighlighter); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonHighlighter); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonHighlighter), tooltips, _("Highlighter"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonHighlighter), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonHighlighter)); buttonText = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonText), _("Text")); tmp_image = create_pixmap (winMain, "text-tool.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonText), tmp_image); gtk_widget_show (buttonText); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonText); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonText), tooltips, _("Text"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonText), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonText)); buttonImage = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonImage), _("Image")); tmp_image = gtk_image_new_from_stock ("gtk-orientation-portrait", tmp_toolbar_icon_size); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonImage), tmp_image); gtk_widget_show (buttonImage); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonImage); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonImage), tooltips, _("Image"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonImage), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonImage)); buttonReco = (GtkWidget*) gtk_toggle_tool_button_new (); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonReco), _("Shape Recognizer")); tmp_image = create_pixmap (winMain, "shapes.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonReco), tmp_image); gtk_widget_show (buttonReco); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonReco); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonReco), tooltips, _("Shape Recognizer"), NULL); buttonRuler = (GtkWidget*) gtk_toggle_tool_button_new (); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonRuler), _("Ruler")); tmp_image = create_pixmap (winMain, "ruler.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonRuler), tmp_image); gtk_widget_show (buttonRuler); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonRuler); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonRuler), tooltips, _("Ruler"), NULL); toolitem15 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem15); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem15); vseparator5 = gtk_vseparator_new (); gtk_widget_show (vseparator5); gtk_container_add (GTK_CONTAINER (toolitem15), vseparator5); buttonSelectRegion = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonSelectRegion), _("Select Region")); tmp_image = create_pixmap (winMain, "lasso.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonSelectRegion), tmp_image); gtk_widget_show (buttonSelectRegion); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonSelectRegion); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonSelectRegion), tooltips, _("Select Region"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonSelectRegion), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonSelectRegion)); buttonSelectRectangle = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonSelectRectangle), _("Select Rectangle")); tmp_image = create_pixmap (winMain, "rect-select.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonSelectRectangle), tmp_image); gtk_widget_show (buttonSelectRectangle); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonSelectRectangle); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonSelectRectangle), tooltips, _("Select Rectangle"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonSelectRectangle), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonSelectRectangle)); buttonVerticalSpace = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonVerticalSpace), _("Vertical Space")); tmp_image = create_pixmap (winMain, "stretch.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonVerticalSpace), tmp_image); gtk_widget_show (buttonVerticalSpace); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonVerticalSpace); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonVerticalSpace), tooltips, _("Vertical Space"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonVerticalSpace), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonVerticalSpace)); buttonHand = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonHand), _("Hand Tool")); tmp_image = create_pixmap (winMain, "hand.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonHand), tmp_image); gtk_widget_show (buttonHand); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonHand); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonHand), buttonPen_group); buttonPen_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonHand)); toolitem16 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem16); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem16); vseparator6 = gtk_vseparator_new (); gtk_widget_show (vseparator6); gtk_container_add (GTK_CONTAINER (toolitem16), vseparator6); tmp_image = create_pixmap (winMain, "recycled.png"); gtk_widget_show (tmp_image); buttonToolDefault = (GtkWidget*) gtk_tool_button_new (tmp_image, _("Default")); gtk_widget_show (buttonToolDefault); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonToolDefault), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonToolDefault); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonToolDefault), tooltips, _("Default"), NULL); tmp_image = create_pixmap (winMain, "default-pen.png"); gtk_widget_show (tmp_image); buttonDefaultPen = (GtkWidget*) gtk_tool_button_new (tmp_image, _("Default Pen")); gtk_widget_show (buttonDefaultPen); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonDefaultPen); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonDefaultPen), tooltips, _("Default Pen"), NULL); toolitem18 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem18); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem18); vseparator8 = gtk_vseparator_new (); gtk_widget_show (vseparator8); gtk_container_add (GTK_CONTAINER (toolitem18), vseparator8); buttonFine = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonFine), _("Fine")); tmp_image = create_pixmap (winMain, "thin.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonFine), tmp_image); gtk_widget_show (buttonFine); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonFine), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonFine); gtk_widget_set_size_request (buttonFine, 24, -1); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonFine), tooltips, _("Fine"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonFine), buttonFine_group); buttonFine_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonFine)); buttonMedium = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonMedium), _("Medium")); tmp_image = create_pixmap (winMain, "medium.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonMedium), tmp_image); gtk_widget_show (buttonMedium); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonMedium), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonMedium); gtk_widget_set_size_request (buttonMedium, 24, -1); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonMedium), tooltips, _("Medium"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonMedium), buttonFine_group); buttonFine_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonMedium)); buttonThick = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonThick), _("Thick")); tmp_image = create_pixmap (winMain, "thick.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonThick), tmp_image); gtk_widget_show (buttonThick); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonThick), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonThick); gtk_widget_set_size_request (buttonThick, 24, -1); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonThick), tooltips, _("Thick"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonThick), buttonFine_group); buttonFine_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonThick)); buttonThicknessOther = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonThicknessOther), ""); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonThicknessOther); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonThicknessOther), buttonFine_group); buttonFine_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonThicknessOther)); toolitem17 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem17); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem17); vseparator7 = gtk_vseparator_new (); gtk_widget_show (vseparator7); gtk_container_add (GTK_CONTAINER (toolitem17), vseparator7); buttonBlack = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonBlack), _("Black")); tmp_image = create_pixmap (winMain, "black.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonBlack), tmp_image); gtk_widget_show (buttonBlack); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonBlack), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonBlack); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonBlack), tooltips, _("Black"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonBlack), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonBlack)); buttonBlue = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonBlue), _("Blue")); tmp_image = create_pixmap (winMain, "blue.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonBlue), tmp_image); gtk_widget_show (buttonBlue); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonBlue), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonBlue); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonBlue), tooltips, _("Blue"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonBlue), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonBlue)); buttonRed = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonRed), _("Red")); tmp_image = create_pixmap (winMain, "red.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonRed), tmp_image); gtk_widget_show (buttonRed); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonRed), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonRed); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonRed), tooltips, _("Red"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonRed), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonRed)); buttonGreen = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonGreen), _("Green")); tmp_image = create_pixmap (winMain, "green.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonGreen), tmp_image); gtk_widget_show (buttonGreen); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonGreen), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonGreen); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonGreen), tooltips, _("Green"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonGreen), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonGreen)); buttonGray = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonGray), _("Gray")); tmp_image = create_pixmap (winMain, "gray.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonGray), tmp_image); gtk_widget_show (buttonGray); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonGray), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonGray); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonGray), tooltips, _("Gray"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonGray), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonGray)); buttonLightBlue = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonLightBlue), _("Light Blue")); tmp_image = create_pixmap (winMain, "lightblue.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonLightBlue), tmp_image); gtk_widget_show (buttonLightBlue); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonLightBlue), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonLightBlue); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonLightBlue), tooltips, _("Light Blue"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonLightBlue), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonLightBlue)); buttonLightGreen = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonLightGreen), _("Light Green")); tmp_image = create_pixmap (winMain, "lightgreen.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonLightGreen), tmp_image); gtk_widget_show (buttonLightGreen); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonLightGreen), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonLightGreen); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonLightGreen), tooltips, _("Light Green"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonLightGreen), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonLightGreen)); buttonMagenta = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonMagenta), _("Magenta")); tmp_image = create_pixmap (winMain, "magenta.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonMagenta), tmp_image); gtk_widget_show (buttonMagenta); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonMagenta), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonMagenta); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonMagenta), tooltips, _("Magenta"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonMagenta), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonMagenta)); buttonOrange = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonOrange), _("Orange")); tmp_image = create_pixmap (winMain, "orange.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonOrange), tmp_image); gtk_widget_show (buttonOrange); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonOrange), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonOrange); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonOrange), tooltips, _("Orange"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonOrange), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonOrange)); buttonYellow = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonYellow), _("Yellow")); tmp_image = create_pixmap (winMain, "yellow.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonYellow), tmp_image); gtk_widget_show (buttonYellow); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonYellow), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonYellow); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonYellow), tooltips, _("Yellow"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonYellow), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonYellow)); buttonWhite = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonWhite), _("White")); tmp_image = create_pixmap (winMain, "white.png"); gtk_widget_show (tmp_image); gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (buttonWhite), tmp_image); gtk_widget_show (buttonWhite); gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (buttonWhite), FALSE); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonWhite); gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (buttonWhite), tooltips, _("White"), NULL); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonWhite), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonWhite)); buttonColorOther = (GtkWidget*) gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (buttonColorOther), ""); gtk_container_add (GTK_CONTAINER (toolbarPen), buttonColorOther); gtk_radio_tool_button_set_group (GTK_RADIO_TOOL_BUTTON (buttonColorOther), buttonBlack_group); buttonBlack_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (buttonColorOther)); toolitem22 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem22); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem22); buttonColorChooser = gtk_color_button_new (); gtk_widget_show (buttonColorChooser); gtk_container_add (GTK_CONTAINER (toolitem22), buttonColorChooser); gtk_widget_set_size_request (buttonColorChooser, 34, 32); gtk_container_set_border_width (GTK_CONTAINER (buttonColorChooser), 2); GTK_WIDGET_UNSET_FLAGS (buttonColorChooser, GTK_CAN_FOCUS); toolitem21 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem21); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem21); vseparator10 = gtk_vseparator_new (); gtk_widget_show (vseparator10); gtk_container_add (GTK_CONTAINER (toolitem21), vseparator10); toolitem20 = (GtkWidget*) gtk_tool_item_new (); gtk_widget_show (toolitem20); gtk_container_add (GTK_CONTAINER (toolbarPen), toolitem20); fontButton = gtk_font_button_new (); gtk_widget_show (fontButton); gtk_container_add (GTK_CONTAINER (toolitem20), fontButton); gtk_font_button_set_use_font (GTK_FONT_BUTTON (fontButton), TRUE); gtk_button_set_focus_on_click (GTK_BUTTON (fontButton), FALSE); scrolledwindowMain = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindowMain); gtk_box_pack_start (GTK_BOX (vboxMain), scrolledwindowMain, TRUE, TRUE, 0); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vboxMain), hbox1, FALSE, FALSE, 0); labelPage = gtk_label_new (_(" Page ")); gtk_widget_show (labelPage); gtk_box_pack_start (GTK_BOX (hbox1), labelPage, FALSE, FALSE, 0); spinPageNo_adj = gtk_adjustment_new (1, 1, 1, 1, 0, 0); spinPageNo = gtk_spin_button_new (GTK_ADJUSTMENT (spinPageNo_adj), 1, 0); gtk_widget_show (spinPageNo); gtk_box_pack_start (GTK_BOX (hbox1), spinPageNo, FALSE, TRUE, 0); gtk_tooltips_set_tip (tooltips, spinPageNo, _("Set page number"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinPageNo), TRUE); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spinPageNo), TRUE); labelNumpages = gtk_label_new (_(" of n")); gtk_widget_show (labelNumpages); gtk_box_pack_start (GTK_BOX (hbox1), labelNumpages, FALSE, FALSE, 0); vseparator9 = gtk_vseparator_new (); gtk_widget_show (vseparator9); gtk_box_pack_start (GTK_BOX (hbox1), vseparator9, FALSE, TRUE, 6); labelLayer = gtk_label_new (_(" Layer: ")); gtk_widget_show (labelLayer); gtk_box_pack_start (GTK_BOX (hbox1), labelLayer, FALSE, FALSE, 0); comboLayer = gtk_combo_box_new_text (); gtk_widget_show (comboLayer); gtk_box_pack_start (GTK_BOX (hbox1), comboLayer, FALSE, TRUE, 4); statusbar = gtk_statusbar_new (); gtk_widget_show (statusbar); gtk_box_pack_start (GTK_BOX (hbox1), statusbar, TRUE, TRUE, 0); gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), FALSE); g_signal_connect ((gpointer) winMain, "delete_event", G_CALLBACK (on_winMain_delete_event), NULL); g_signal_connect ((gpointer) fileNew, "activate", G_CALLBACK (on_fileNew_activate), NULL); g_signal_connect ((gpointer) fileNewBackground, "activate", G_CALLBACK (on_fileNewBackground_activate), NULL); g_signal_connect ((gpointer) fileOpen, "activate", G_CALLBACK (on_fileOpen_activate), NULL); g_signal_connect ((gpointer) fileSave, "activate", G_CALLBACK (on_fileSave_activate), NULL); g_signal_connect ((gpointer) fileSaveAs, "activate", G_CALLBACK (on_fileSaveAs_activate), NULL); g_signal_connect ((gpointer) mru0, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru1, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru2, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru3, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru4, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru5, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru6, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) mru7, "activate", G_CALLBACK (on_mru_activate), NULL); g_signal_connect ((gpointer) filePrintOptions, "activate", G_CALLBACK (on_filePrintOptions_activate), NULL); g_signal_connect ((gpointer) filePrint, "activate", G_CALLBACK (on_filePrint_activate), NULL); g_signal_connect ((gpointer) filePrintPDF, "activate", G_CALLBACK (on_filePrintPDF_activate), NULL); g_signal_connect ((gpointer) fileQuit, "activate", G_CALLBACK (on_fileQuit_activate), NULL); g_signal_connect ((gpointer) editUndo, "activate", G_CALLBACK (on_editUndo_activate), NULL); g_signal_connect ((gpointer) editRedo, "activate", G_CALLBACK (on_editRedo_activate), NULL); g_signal_connect ((gpointer) editCut, "activate", G_CALLBACK (on_editCut_activate), NULL); g_signal_connect ((gpointer) editCopy, "activate", G_CALLBACK (on_editCopy_activate), NULL); g_signal_connect ((gpointer) editPaste, "activate", G_CALLBACK (on_editPaste_activate), NULL); g_signal_connect ((gpointer) editDelete, "activate", G_CALLBACK (on_editDelete_activate), NULL); g_signal_connect ((gpointer) viewContinuous, "toggled", G_CALLBACK (on_viewContinuous_activate), NULL); g_signal_connect ((gpointer) viewHorizontal, "toggled", G_CALLBACK (on_viewHorizontal_activate), NULL); g_signal_connect ((gpointer) viewOnePage, "toggled", G_CALLBACK (on_viewOnePage_activate), NULL); g_signal_connect ((gpointer) viewFullscreen, "activate", G_CALLBACK (on_viewFullscreen_activate), NULL); g_signal_connect ((gpointer) viewZoomIn, "activate", G_CALLBACK (on_viewZoomIn_activate), NULL); g_signal_connect ((gpointer) viewZoomOut, "activate", G_CALLBACK (on_viewZoomOut_activate), NULL); g_signal_connect ((gpointer) viewNormalSize, "activate", G_CALLBACK (on_viewNormalSize_activate), NULL); g_signal_connect ((gpointer) viewPageWidth, "activate", G_CALLBACK (on_viewPageWidth_activate), NULL); g_signal_connect ((gpointer) viewSetZoom, "activate", G_CALLBACK (on_viewSetZoom_activate), NULL); g_signal_connect ((gpointer) viewFirstPage, "activate", G_CALLBACK (on_viewFirstPage_activate), NULL); g_signal_connect ((gpointer) viewPreviousPage, "activate", G_CALLBACK (on_viewPreviousPage_activate), NULL); g_signal_connect ((gpointer) viewNextPage, "activate", G_CALLBACK (on_viewNextPage_activate), NULL); g_signal_connect ((gpointer) viewLastPage, "activate", G_CALLBACK (on_viewLastPage_activate), NULL); g_signal_connect ((gpointer) viewShowLayer, "activate", G_CALLBACK (on_viewShowLayer_activate), NULL); g_signal_connect ((gpointer) viewHideLayer, "activate", G_CALLBACK (on_viewHideLayer_activate), NULL); g_signal_connect ((gpointer) journalNewPageBefore, "activate", G_CALLBACK (on_journalNewPageBefore_activate), NULL); g_signal_connect ((gpointer) journalNewPageAfter, "activate", G_CALLBACK (on_journalNewPageAfter_activate), NULL); g_signal_connect ((gpointer) journalNewPageEnd, "activate", G_CALLBACK (on_journalNewPageEnd_activate), NULL); g_signal_connect ((gpointer) journalNewPageKeepsBG, "activate", G_CALLBACK (on_journalNewPageKeepsBG_activate), NULL); g_signal_connect ((gpointer) journalDeletePage, "activate", G_CALLBACK (on_journalDeletePage_activate), NULL); g_signal_connect ((gpointer) journalNewLayer, "activate", G_CALLBACK (on_journalNewLayer_activate), NULL); g_signal_connect ((gpointer) journalDeleteLayer, "activate", G_CALLBACK (on_journalDeleteLayer_activate), NULL); g_signal_connect ((gpointer) journalFlatten, "activate", G_CALLBACK (on_journalFlatten_activate), NULL); g_signal_connect ((gpointer) journalPaperSize, "activate", G_CALLBACK (on_journalPaperSize_activate), NULL); g_signal_connect ((gpointer) papercolorWhite, "toggled", G_CALLBACK (on_papercolorWhite_activate), NULL); g_signal_connect ((gpointer) papercolorYellow, "toggled", G_CALLBACK (on_papercolorYellow_activate), NULL); g_signal_connect ((gpointer) papercolorPink, "toggled", G_CALLBACK (on_papercolorPink_activate), NULL); g_signal_connect ((gpointer) papercolorOrange, "toggled", G_CALLBACK (on_papercolorOrange_activate), NULL); g_signal_connect ((gpointer) papercolorBlue, "toggled", G_CALLBACK (on_papercolorBlue_activate), NULL); g_signal_connect ((gpointer) papercolorGreen, "toggled", G_CALLBACK (on_papercolorGreen_activate), NULL); g_signal_connect ((gpointer) papercolorOther, "activate", G_CALLBACK (on_papercolorOther_activate), NULL); g_signal_connect ((gpointer) paperstylePlain, "toggled", G_CALLBACK (on_paperstylePlain_activate), NULL); g_signal_connect ((gpointer) paperstyleLined, "toggled", G_CALLBACK (on_paperstyleLined_activate), NULL); g_signal_connect ((gpointer) paperstyleRuled, "toggled", G_CALLBACK (on_paperstyleRuled_activate), NULL); g_signal_connect ((gpointer) paperstyleGraph, "toggled", G_CALLBACK (on_paperstyleGraph_activate), NULL); g_signal_connect ((gpointer) journalApplyAllPages, "activate", G_CALLBACK (on_journalApplyAllPages_activate), NULL); g_signal_connect ((gpointer) journalLoadBackground, "activate", G_CALLBACK (on_journalLoadBackground_activate), NULL); g_signal_connect ((gpointer) journalScreenshot, "activate", G_CALLBACK (on_journalScreenshot_activate), NULL); g_signal_connect ((gpointer) journalDefaultBackground, "activate", G_CALLBACK (on_journalDefaultBackground_activate), NULL); g_signal_connect ((gpointer) journalSetAsDefault, "activate", G_CALLBACK (on_journalSetAsDefault_activate), NULL); g_signal_connect ((gpointer) toolsPen, "toggled", G_CALLBACK (on_toolsPen_activate), NULL); g_signal_connect ((gpointer) toolsEraser, "toggled", G_CALLBACK (on_toolsEraser_activate), NULL); g_signal_connect ((gpointer) toolsHighlighter, "toggled", G_CALLBACK (on_toolsHighlighter_activate), NULL); g_signal_connect ((gpointer) toolsText, "toggled", G_CALLBACK (on_toolsText_activate), NULL); g_signal_connect ((gpointer) toolsImage, "toggled", G_CALLBACK (on_toolsImage_activate), NULL); g_signal_connect ((gpointer) toolsReco, "toggled", G_CALLBACK (on_toolsReco_activate), NULL); g_signal_connect ((gpointer) toolsRuler, "toggled", G_CALLBACK (on_toolsRuler_activate), NULL); g_signal_connect ((gpointer) toolsSelectRegion, "toggled", G_CALLBACK (on_toolsSelectRegion_activate), NULL); g_signal_connect ((gpointer) toolsSelectRectangle, "toggled", G_CALLBACK (on_toolsSelectRectangle_activate), NULL); g_signal_connect ((gpointer) toolsVerticalSpace, "toggled", G_CALLBACK (on_toolsVerticalSpace_activate), NULL); g_signal_connect ((gpointer) toolsHand, "activate", G_CALLBACK (on_toolsHand_activate), NULL); g_signal_connect ((gpointer) colorBlack, "toggled", G_CALLBACK (on_colorBlack_activate), NULL); g_signal_connect ((gpointer) colorBlue, "toggled", G_CALLBACK (on_colorBlue_activate), NULL); g_signal_connect ((gpointer) colorRed, "toggled", G_CALLBACK (on_colorRed_activate), NULL); g_signal_connect ((gpointer) colorGreen, "toggled", G_CALLBACK (on_colorGreen_activate), NULL); g_signal_connect ((gpointer) colorGray, "toggled", G_CALLBACK (on_colorGray_activate), NULL); g_signal_connect ((gpointer) colorLightBlue, "toggled", G_CALLBACK (on_colorLightBlue_activate), NULL); g_signal_connect ((gpointer) colorLightGreen, "toggled", G_CALLBACK (on_colorLightGreen_activate), NULL); g_signal_connect ((gpointer) colorMagenta, "toggled", G_CALLBACK (on_colorMagenta_activate), NULL); g_signal_connect ((gpointer) colorOrange, "toggled", G_CALLBACK (on_colorOrange_activate), NULL); g_signal_connect ((gpointer) colorYellow, "toggled", G_CALLBACK (on_colorYellow_activate), NULL); g_signal_connect ((gpointer) colorWhite, "toggled", G_CALLBACK (on_colorWhite_activate), NULL); g_signal_connect ((gpointer) colorOther, "activate", G_CALLBACK (on_colorOther_activate), NULL); g_signal_connect ((gpointer) penthicknessVeryFine, "toggled", G_CALLBACK (on_penthicknessVeryFine_activate), NULL); g_signal_connect ((gpointer) penthicknessFine, "toggled", G_CALLBACK (on_penthicknessFine_activate), NULL); g_signal_connect ((gpointer) penthicknessMedium, "toggled", G_CALLBACK (on_penthicknessMedium_activate), NULL); g_signal_connect ((gpointer) penthicknessThick, "toggled", G_CALLBACK (on_penthicknessThick_activate), NULL); g_signal_connect ((gpointer) penthicknessVeryThick, "toggled", G_CALLBACK (on_penthicknessVeryThick_activate), NULL); g_signal_connect ((gpointer) eraserFine, "toggled", G_CALLBACK (on_eraserFine_activate), NULL); g_signal_connect ((gpointer) eraserMedium, "toggled", G_CALLBACK (on_eraserMedium_activate), NULL); g_signal_connect ((gpointer) eraserThick, "toggled", G_CALLBACK (on_eraserThick_activate), NULL); g_signal_connect ((gpointer) eraserStandard, "toggled", G_CALLBACK (on_eraserStandard_activate), NULL); g_signal_connect ((gpointer) eraserWhiteout, "toggled", G_CALLBACK (on_eraserWhiteout_activate), NULL); g_signal_connect ((gpointer) eraserDeleteStrokes, "toggled", G_CALLBACK (on_eraserDeleteStrokes_activate), NULL); g_signal_connect ((gpointer) highlighterFine, "toggled", G_CALLBACK (on_highlighterFine_activate), NULL); g_signal_connect ((gpointer) highlighterMedium, "toggled", G_CALLBACK (on_highlighterMedium_activate), NULL); g_signal_connect ((gpointer) highlighterThick, "toggled", G_CALLBACK (on_highlighterThick_activate), NULL); g_signal_connect ((gpointer) toolsTextFont, "activate", G_CALLBACK (on_toolsTextFont_activate), NULL); g_signal_connect ((gpointer) toolsDefaultPen, "activate", G_CALLBACK (on_toolsDefaultPen_activate), NULL); g_signal_connect ((gpointer) toolsDefaultEraser, "activate", G_CALLBACK (on_toolsDefaultEraser_activate), NULL); g_signal_connect ((gpointer) toolsDefaultHighlighter, "activate", G_CALLBACK (on_toolsDefaultHighlighter_activate), NULL); g_signal_connect ((gpointer) toolsDefaultText, "activate", G_CALLBACK (on_toolsDefaultText_activate), NULL); g_signal_connect ((gpointer) toolsSetAsDefault, "activate", G_CALLBACK (on_toolsSetAsDefault_activate), NULL); g_signal_connect ((gpointer) optionsUseXInput, "toggled", G_CALLBACK (on_optionsUseXInput_activate), NULL); g_signal_connect ((gpointer) optionsButtonMappings, "activate", G_CALLBACK (on_optionsButtonMappings_activate), NULL); g_signal_connect ((gpointer) optionsPressureSensitive, "activate", G_CALLBACK (on_optionsPressureSensitive_activate), NULL); g_signal_connect ((gpointer) optionsButtonSwitchMapping, "toggled", G_CALLBACK (on_optionsButtonsSwitchMappings_activate), NULL); g_signal_connect ((gpointer) optionsTouchAsHandTool, "activate", G_CALLBACK (on_optionsTouchAsHandTool_activate), NULL); g_signal_connect ((gpointer) optionsPenDisablesTouch, "activate", G_CALLBACK (on_optionsPenDisablesTouch_activate), NULL); g_signal_connect ((gpointer) optionsDesignateTouchscreen, "activate", G_CALLBACK (on_optionsDesignateTouchscreen_activate), NULL); g_signal_connect ((gpointer) button2Pen, "activate", G_CALLBACK (on_button2Pen_activate), NULL); g_signal_connect ((gpointer) button2Eraser, "activate", G_CALLBACK (on_button2Eraser_activate), NULL); g_signal_connect ((gpointer) button2Highlighter, "activate", G_CALLBACK (on_button2Highlighter_activate), NULL); g_signal_connect ((gpointer) button2Text, "activate", G_CALLBACK (on_button2Text_activate), NULL); g_signal_connect ((gpointer) button2Image, "activate", G_CALLBACK (on_button2Image_activate), NULL); g_signal_connect ((gpointer) button2SelectRegion, "activate", G_CALLBACK (on_button2SelectRegion_activate), NULL); g_signal_connect ((gpointer) button2SelectRectangle, "activate", G_CALLBACK (on_button2SelectRectangle_activate), NULL); g_signal_connect ((gpointer) button2VerticalSpace, "activate", G_CALLBACK (on_button2VerticalSpace_activate), NULL); g_signal_connect ((gpointer) button2Hand, "activate", G_CALLBACK (on_button2Hand_activate), NULL); g_signal_connect ((gpointer) button2LinkBrush, "activate", G_CALLBACK (on_button2LinkBrush_activate), NULL); g_signal_connect ((gpointer) button2CopyBrush, "activate", G_CALLBACK (on_button2CopyBrush_activate), NULL); g_signal_connect ((gpointer) button3Pen, "activate", G_CALLBACK (on_button3Pen_activate), NULL); g_signal_connect ((gpointer) button3Eraser, "activate", G_CALLBACK (on_button3Eraser_activate), NULL); g_signal_connect ((gpointer) button3Highlighter, "activate", G_CALLBACK (on_button3Highlighter_activate), NULL); g_signal_connect ((gpointer) button3Text, "activate", G_CALLBACK (on_button3Text_activate), NULL); g_signal_connect ((gpointer) button3Image, "activate", G_CALLBACK (on_button3Image_activate), NULL); g_signal_connect ((gpointer) button3SelectRegion, "activate", G_CALLBACK (on_button3SelectRegion_activate), NULL); g_signal_connect ((gpointer) button3SelectRectangle, "activate", G_CALLBACK (on_button3SelectRectangle_activate), NULL); g_signal_connect ((gpointer) button3VerticalSpace, "activate", G_CALLBACK (on_button3VerticalSpace_activate), NULL); g_signal_connect ((gpointer) button3Hand, "activate", G_CALLBACK (on_button3Hand_activate), NULL); g_signal_connect ((gpointer) button3LinkBrush, "activate", G_CALLBACK (on_button3LinkBrush_activate), NULL); g_signal_connect ((gpointer) button3CopyBrush, "activate", G_CALLBACK (on_button3CopyBrush_activate), NULL); g_signal_connect ((gpointer) optionsProgressiveBG, "activate", G_CALLBACK (on_optionsProgressiveBG_activate), NULL); g_signal_connect ((gpointer) optionsPrintRuling, "activate", G_CALLBACK (on_optionsPrintRuling_activate), NULL); g_signal_connect ((gpointer) optionsLegacyPDFExport, "activate", G_CALLBACK (on_optionsLegacyPDFExport_activate), NULL); g_signal_connect ((gpointer) optionsAutoloadPdfXoj, "activate", G_CALLBACK (on_optionsAutoloadPdfXoj_activate), NULL); g_signal_connect ((gpointer) optionsAutosaveXoj, "activate", G_CALLBACK (on_optionsAutosaveXoj_activate), NULL); g_signal_connect ((gpointer) optionsLeftHanded, "toggled", G_CALLBACK (on_optionsLeftHanded_activate), NULL); g_signal_connect ((gpointer) optionsShortenMenus, "toggled", G_CALLBACK (on_optionsShortenMenus_activate), NULL); g_signal_connect ((gpointer) optionsPenCursor, "toggled", G_CALLBACK (on_optionsPenCursor_activate), NULL); g_signal_connect ((gpointer) optionsAutoSavePrefs, "toggled", G_CALLBACK (on_optionsAutoSavePrefs_activate), NULL); g_signal_connect ((gpointer) optionsSavePreferences, "activate", G_CALLBACK (on_optionsSavePreferences_activate), NULL); g_signal_connect ((gpointer) helpIndex, "activate", G_CALLBACK (on_helpIndex_activate), NULL); g_signal_connect ((gpointer) helpAbout, "activate", G_CALLBACK (on_helpAbout_activate), NULL); g_signal_connect ((gpointer) saveButton, "clicked", G_CALLBACK (on_fileSave_activate), NULL); g_signal_connect ((gpointer) newButton, "clicked", G_CALLBACK (on_fileNew_activate), NULL); g_signal_connect ((gpointer) openButton, "clicked", G_CALLBACK (on_fileOpen_activate), NULL); g_signal_connect ((gpointer) buttonCut, "clicked", G_CALLBACK (on_editCut_activate), NULL); g_signal_connect ((gpointer) buttonCopy, "clicked", G_CALLBACK (on_editCopy_activate), NULL); g_signal_connect ((gpointer) buttonPaste, "clicked", G_CALLBACK (on_editPaste_activate), NULL); g_signal_connect ((gpointer) buttonUndo, "clicked", G_CALLBACK (on_editUndo_activate), NULL); g_signal_connect ((gpointer) buttonRedo, "clicked", G_CALLBACK (on_editRedo_activate), NULL); g_signal_connect ((gpointer) buttonFirstPage, "clicked", G_CALLBACK (on_viewFirstPage_activate), NULL); g_signal_connect ((gpointer) buttonPreviousPage, "clicked", G_CALLBACK (on_viewPreviousPage_activate), NULL); g_signal_connect ((gpointer) buttonNextPage, "clicked", G_CALLBACK (on_viewNextPage_activate), NULL); g_signal_connect ((gpointer) buttonLastPage, "clicked", G_CALLBACK (on_viewLastPage_activate), NULL); g_signal_connect ((gpointer) buttonZoomOut, "clicked", G_CALLBACK (on_viewZoomOut_activate), NULL); g_signal_connect ((gpointer) buttonPageWidth, "clicked", G_CALLBACK (on_viewPageWidth_activate), NULL); g_signal_connect ((gpointer) buttonZoomIn, "clicked", G_CALLBACK (on_viewZoomIn_activate), NULL); g_signal_connect ((gpointer) buttonNormalSize, "clicked", G_CALLBACK (on_viewNormalSize_activate), NULL); g_signal_connect ((gpointer) buttonZoomSet, "clicked", G_CALLBACK (on_viewSetZoom_activate), NULL); g_signal_connect ((gpointer) buttonFullscreen, "toggled", G_CALLBACK (on_viewFullscreen_activate), NULL); g_signal_connect ((gpointer) buttonPen, "toggled", G_CALLBACK (on_toolsPen_activate), NULL); g_signal_connect ((gpointer) buttonEraser, "toggled", G_CALLBACK (on_toolsEraser_activate), NULL); g_signal_connect ((gpointer) buttonHighlighter, "toggled", G_CALLBACK (on_toolsHighlighter_activate), NULL); g_signal_connect ((gpointer) buttonText, "toggled", G_CALLBACK (on_toolsText_activate), NULL); g_signal_connect ((gpointer) buttonImage, "toggled", G_CALLBACK (on_toolsImage_activate), NULL); g_signal_connect ((gpointer) buttonReco, "toggled", G_CALLBACK (on_toolsReco_activate), NULL); g_signal_connect ((gpointer) buttonRuler, "toggled", G_CALLBACK (on_toolsRuler_activate), NULL); g_signal_connect ((gpointer) buttonSelectRegion, "toggled", G_CALLBACK (on_toolsSelectRegion_activate), NULL); g_signal_connect ((gpointer) buttonSelectRectangle, "toggled", G_CALLBACK (on_toolsSelectRectangle_activate), NULL); g_signal_connect ((gpointer) buttonVerticalSpace, "toggled", G_CALLBACK (on_toolsVerticalSpace_activate), NULL); g_signal_connect ((gpointer) buttonHand, "toggled", G_CALLBACK (on_toolsHand_activate), NULL); g_signal_connect ((gpointer) buttonToolDefault, "clicked", G_CALLBACK (on_buttonToolDefault_clicked), NULL); g_signal_connect ((gpointer) buttonDefaultPen, "clicked", G_CALLBACK (on_toolsDefaultPen_activate), NULL); g_signal_connect ((gpointer) buttonFine, "toggled", G_CALLBACK (on_buttonFine_clicked), NULL); g_signal_connect ((gpointer) buttonMedium, "toggled", G_CALLBACK (on_buttonMedium_clicked), NULL); g_signal_connect ((gpointer) buttonThick, "toggled", G_CALLBACK (on_buttonThick_clicked), NULL); g_signal_connect ((gpointer) buttonBlack, "toggled", G_CALLBACK (on_colorBlack_activate), NULL); g_signal_connect ((gpointer) buttonBlue, "toggled", G_CALLBACK (on_colorBlue_activate), NULL); g_signal_connect ((gpointer) buttonRed, "toggled", G_CALLBACK (on_colorRed_activate), NULL); g_signal_connect ((gpointer) buttonGreen, "toggled", G_CALLBACK (on_colorGreen_activate), NULL); g_signal_connect ((gpointer) buttonGray, "toggled", G_CALLBACK (on_colorGray_activate), NULL); g_signal_connect ((gpointer) buttonLightBlue, "toggled", G_CALLBACK (on_colorLightBlue_activate), NULL); g_signal_connect ((gpointer) buttonLightGreen, "toggled", G_CALLBACK (on_colorLightGreen_activate), NULL); g_signal_connect ((gpointer) buttonMagenta, "toggled", G_CALLBACK (on_colorMagenta_activate), NULL); g_signal_connect ((gpointer) buttonOrange, "toggled", G_CALLBACK (on_colorOrange_activate), NULL); g_signal_connect ((gpointer) buttonYellow, "toggled", G_CALLBACK (on_colorYellow_activate), NULL); g_signal_connect ((gpointer) buttonWhite, "toggled", G_CALLBACK (on_colorWhite_activate), NULL); g_signal_connect ((gpointer) buttonColorChooser, "color_set", G_CALLBACK (on_buttonColorChooser_set), NULL); g_signal_connect ((gpointer) fontButton, "font_set", G_CALLBACK (on_fontButton_font_set), NULL); g_signal_connect ((gpointer) spinPageNo, "value_changed", G_CALLBACK (on_spinPageNo_value_changed), NULL); g_signal_connect ((gpointer) comboLayer, "changed", G_CALLBACK (on_comboLayer_changed), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (winMain, winMain, "winMain"); GLADE_HOOKUP_OBJECT (winMain, vboxMain, "vboxMain"); GLADE_HOOKUP_OBJECT (winMain, menubar, "menubar"); GLADE_HOOKUP_OBJECT (winMain, menuFile, "menuFile"); GLADE_HOOKUP_OBJECT (winMain, menuFile_menu, "menuFile_menu"); GLADE_HOOKUP_OBJECT (winMain, fileNew, "fileNew"); GLADE_HOOKUP_OBJECT (winMain, fileNewBackground, "fileNewBackground"); GLADE_HOOKUP_OBJECT (winMain, image623, "image623"); GLADE_HOOKUP_OBJECT (winMain, fileOpen, "fileOpen"); GLADE_HOOKUP_OBJECT (winMain, fileSave, "fileSave"); GLADE_HOOKUP_OBJECT (winMain, fileSaveAs, "fileSaveAs"); GLADE_HOOKUP_OBJECT (winMain, separator1, "separator1"); GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles, "fileRecentFiles"); GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles_menu, "fileRecentFiles_menu"); GLADE_HOOKUP_OBJECT (winMain, mru0, "mru0"); GLADE_HOOKUP_OBJECT (winMain, mru1, "mru1"); GLADE_HOOKUP_OBJECT (winMain, mru2, "mru2"); GLADE_HOOKUP_OBJECT (winMain, mru3, "mru3"); GLADE_HOOKUP_OBJECT (winMain, mru4, "mru4"); GLADE_HOOKUP_OBJECT (winMain, mru5, "mru5"); GLADE_HOOKUP_OBJECT (winMain, mru6, "mru6"); GLADE_HOOKUP_OBJECT (winMain, mru7, "mru7"); GLADE_HOOKUP_OBJECT (winMain, separator22, "separator22"); GLADE_HOOKUP_OBJECT (winMain, filePrintOptions, "filePrintOptions"); GLADE_HOOKUP_OBJECT (winMain, image624, "image624"); GLADE_HOOKUP_OBJECT (winMain, filePrint, "filePrint"); GLADE_HOOKUP_OBJECT (winMain, filePrintPDF, "filePrintPDF"); GLADE_HOOKUP_OBJECT (winMain, separator2, "separator2"); GLADE_HOOKUP_OBJECT (winMain, fileQuit, "fileQuit"); GLADE_HOOKUP_OBJECT (winMain, menuEdit, "menuEdit"); GLADE_HOOKUP_OBJECT (winMain, menuEdit_menu, "menuEdit_menu"); GLADE_HOOKUP_OBJECT (winMain, editUndo, "editUndo"); GLADE_HOOKUP_OBJECT (winMain, editRedo, "editRedo"); GLADE_HOOKUP_OBJECT (winMain, separator3, "separator3"); GLADE_HOOKUP_OBJECT (winMain, editCut, "editCut"); GLADE_HOOKUP_OBJECT (winMain, editCopy, "editCopy"); GLADE_HOOKUP_OBJECT (winMain, editPaste, "editPaste"); GLADE_HOOKUP_OBJECT (winMain, editDelete, "editDelete"); GLADE_HOOKUP_OBJECT (winMain, menuView, "menuView"); GLADE_HOOKUP_OBJECT (winMain, menuView_menu, "menuView_menu"); GLADE_HOOKUP_OBJECT (winMain, viewContinuous, "viewContinuous"); GLADE_HOOKUP_OBJECT (winMain, viewHorizontal, "viewHorizontal"); GLADE_HOOKUP_OBJECT (winMain, viewOnePage, "viewOnePage"); GLADE_HOOKUP_OBJECT (winMain, separator20, "separator20"); GLADE_HOOKUP_OBJECT (winMain, viewFullscreen, "viewFullscreen"); GLADE_HOOKUP_OBJECT (winMain, separator4, "separator4"); GLADE_HOOKUP_OBJECT (winMain, menuViewZoom, "menuViewZoom"); GLADE_HOOKUP_OBJECT (winMain, menuViewZoom_menu, "menuViewZoom_menu"); GLADE_HOOKUP_OBJECT (winMain, viewZoomIn, "viewZoomIn"); GLADE_HOOKUP_OBJECT (winMain, viewZoomOut, "viewZoomOut"); GLADE_HOOKUP_OBJECT (winMain, viewNormalSize, "viewNormalSize"); GLADE_HOOKUP_OBJECT (winMain, viewPageWidth, "viewPageWidth"); GLADE_HOOKUP_OBJECT (winMain, image625, "image625"); GLADE_HOOKUP_OBJECT (winMain, viewSetZoom, "viewSetZoom"); GLADE_HOOKUP_OBJECT (winMain, separator5, "separator5"); GLADE_HOOKUP_OBJECT (winMain, viewFirstPage, "viewFirstPage"); GLADE_HOOKUP_OBJECT (winMain, image626, "image626"); GLADE_HOOKUP_OBJECT (winMain, viewPreviousPage, "viewPreviousPage"); GLADE_HOOKUP_OBJECT (winMain, image627, "image627"); GLADE_HOOKUP_OBJECT (winMain, viewNextPage, "viewNextPage"); GLADE_HOOKUP_OBJECT (winMain, image628, "image628"); GLADE_HOOKUP_OBJECT (winMain, viewLastPage, "viewLastPage"); GLADE_HOOKUP_OBJECT (winMain, image629, "image629"); GLADE_HOOKUP_OBJECT (winMain, separator6, "separator6"); GLADE_HOOKUP_OBJECT (winMain, viewShowLayer, "viewShowLayer"); GLADE_HOOKUP_OBJECT (winMain, image630, "image630"); GLADE_HOOKUP_OBJECT (winMain, viewHideLayer, "viewHideLayer"); GLADE_HOOKUP_OBJECT (winMain, image631, "image631"); GLADE_HOOKUP_OBJECT (winMain, menuJournal, "menuJournal"); GLADE_HOOKUP_OBJECT (winMain, menuJournal_menu, "menuJournal_menu"); GLADE_HOOKUP_OBJECT (winMain, journalNewPageBefore, "journalNewPageBefore"); GLADE_HOOKUP_OBJECT (winMain, journalNewPageAfter, "journalNewPageAfter"); GLADE_HOOKUP_OBJECT (winMain, journalNewPageEnd, "journalNewPageEnd"); GLADE_HOOKUP_OBJECT (winMain, journalNewPageKeepsBG, "journalNewPageKeepsBG"); GLADE_HOOKUP_OBJECT (winMain, journalDeletePage, "journalDeletePage"); GLADE_HOOKUP_OBJECT (winMain, separator7, "separator7"); GLADE_HOOKUP_OBJECT (winMain, journalNewLayer, "journalNewLayer"); GLADE_HOOKUP_OBJECT (winMain, journalDeleteLayer, "journalDeleteLayer"); GLADE_HOOKUP_OBJECT (winMain, journalFlatten, "journalFlatten"); GLADE_HOOKUP_OBJECT (winMain, separator8, "separator8"); GLADE_HOOKUP_OBJECT (winMain, journalPaperSize, "journalPaperSize"); GLADE_HOOKUP_OBJECT (winMain, journalPaperColor, "journalPaperColor"); GLADE_HOOKUP_OBJECT (winMain, journalPaperColor_menu, "journalPaperColor_menu"); GLADE_HOOKUP_OBJECT (winMain, papercolorWhite, "papercolorWhite"); GLADE_HOOKUP_OBJECT (winMain, papercolorYellow, "papercolorYellow"); GLADE_HOOKUP_OBJECT (winMain, papercolorPink, "papercolorPink"); GLADE_HOOKUP_OBJECT (winMain, papercolorOrange, "papercolorOrange"); GLADE_HOOKUP_OBJECT (winMain, papercolorBlue, "papercolorBlue"); GLADE_HOOKUP_OBJECT (winMain, papercolorGreen, "papercolorGreen"); GLADE_HOOKUP_OBJECT (winMain, papercolorOther, "papercolorOther"); GLADE_HOOKUP_OBJECT (winMain, papercolorNA, "papercolorNA"); GLADE_HOOKUP_OBJECT (winMain, journalPaperStyle, "journalPaperStyle"); GLADE_HOOKUP_OBJECT (winMain, journalPaperStyle_menu, "journalPaperStyle_menu"); GLADE_HOOKUP_OBJECT (winMain, paperstylePlain, "paperstylePlain"); GLADE_HOOKUP_OBJECT (winMain, paperstyleLined, "paperstyleLined"); GLADE_HOOKUP_OBJECT (winMain, paperstyleRuled, "paperstyleRuled"); GLADE_HOOKUP_OBJECT (winMain, paperstyleGraph, "paperstyleGraph"); GLADE_HOOKUP_OBJECT (winMain, paperstyleNA, "paperstyleNA"); GLADE_HOOKUP_OBJECT (winMain, journalApplyAllPages, "journalApplyAllPages"); GLADE_HOOKUP_OBJECT (winMain, separator23, "separator23"); GLADE_HOOKUP_OBJECT (winMain, journalLoadBackground, "journalLoadBackground"); GLADE_HOOKUP_OBJECT (winMain, image632, "image632"); GLADE_HOOKUP_OBJECT (winMain, journalScreenshot, "journalScreenshot"); GLADE_HOOKUP_OBJECT (winMain, separator19, "separator19"); GLADE_HOOKUP_OBJECT (winMain, journalDefaultBackground, "journalDefaultBackground"); GLADE_HOOKUP_OBJECT (winMain, journalSetAsDefault, "journalSetAsDefault"); GLADE_HOOKUP_OBJECT (winMain, menuTools, "menuTools"); GLADE_HOOKUP_OBJECT (winMain, menuTools_menu, "menuTools_menu"); GLADE_HOOKUP_OBJECT (winMain, toolsPen, "toolsPen"); GLADE_HOOKUP_OBJECT (winMain, toolsEraser, "toolsEraser"); GLADE_HOOKUP_OBJECT (winMain, toolsHighlighter, "toolsHighlighter"); GLADE_HOOKUP_OBJECT (winMain, toolsText, "toolsText"); GLADE_HOOKUP_OBJECT (winMain, toolsImage, "toolsImage"); GLADE_HOOKUP_OBJECT (winMain, separator15, "separator15"); GLADE_HOOKUP_OBJECT (winMain, toolsReco, "toolsReco"); GLADE_HOOKUP_OBJECT (winMain, toolsRuler, "toolsRuler"); GLADE_HOOKUP_OBJECT (winMain, separator9, "separator9"); GLADE_HOOKUP_OBJECT (winMain, toolsSelectRegion, "toolsSelectRegion"); GLADE_HOOKUP_OBJECT (winMain, toolsSelectRectangle, "toolsSelectRectangle"); GLADE_HOOKUP_OBJECT (winMain, toolsVerticalSpace, "toolsVerticalSpace"); GLADE_HOOKUP_OBJECT (winMain, toolsHand, "toolsHand"); GLADE_HOOKUP_OBJECT (winMain, separator16, "separator16"); GLADE_HOOKUP_OBJECT (winMain, toolsColor, "toolsColor"); GLADE_HOOKUP_OBJECT (winMain, image633, "image633"); GLADE_HOOKUP_OBJECT (winMain, toolsColor_menu, "toolsColor_menu"); GLADE_HOOKUP_OBJECT (winMain, colorBlack, "colorBlack"); GLADE_HOOKUP_OBJECT (winMain, colorBlue, "colorBlue"); GLADE_HOOKUP_OBJECT (winMain, colorRed, "colorRed"); GLADE_HOOKUP_OBJECT (winMain, colorGreen, "colorGreen"); GLADE_HOOKUP_OBJECT (winMain, colorGray, "colorGray"); GLADE_HOOKUP_OBJECT (winMain, separator17, "separator17"); GLADE_HOOKUP_OBJECT (winMain, colorLightBlue, "colorLightBlue"); GLADE_HOOKUP_OBJECT (winMain, colorLightGreen, "colorLightGreen"); GLADE_HOOKUP_OBJECT (winMain, colorMagenta, "colorMagenta"); GLADE_HOOKUP_OBJECT (winMain, colorOrange, "colorOrange"); GLADE_HOOKUP_OBJECT (winMain, colorYellow, "colorYellow"); GLADE_HOOKUP_OBJECT (winMain, colorWhite, "colorWhite"); GLADE_HOOKUP_OBJECT (winMain, colorOther, "colorOther"); GLADE_HOOKUP_OBJECT (winMain, colorNA, "colorNA"); GLADE_HOOKUP_OBJECT (winMain, toolsPenOptions, "toolsPenOptions"); GLADE_HOOKUP_OBJECT (winMain, toolsPenOptions_menu, "toolsPenOptions_menu"); GLADE_HOOKUP_OBJECT (winMain, penthicknessVeryFine, "penthicknessVeryFine"); GLADE_HOOKUP_OBJECT (winMain, penthicknessFine, "penthicknessFine"); GLADE_HOOKUP_OBJECT (winMain, penthicknessMedium, "penthicknessMedium"); GLADE_HOOKUP_OBJECT (winMain, penthicknessThick, "penthicknessThick"); GLADE_HOOKUP_OBJECT (winMain, penthicknessVeryThick, "penthicknessVeryThick"); GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions, "toolsEraserOptions"); GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions_menu, "toolsEraserOptions_menu"); GLADE_HOOKUP_OBJECT (winMain, eraserFine, "eraserFine"); GLADE_HOOKUP_OBJECT (winMain, eraserMedium, "eraserMedium"); GLADE_HOOKUP_OBJECT (winMain, eraserThick, "eraserThick"); GLADE_HOOKUP_OBJECT (winMain, separator14, "separator14"); GLADE_HOOKUP_OBJECT (winMain, eraserStandard, "eraserStandard"); GLADE_HOOKUP_OBJECT (winMain, eraserWhiteout, "eraserWhiteout"); GLADE_HOOKUP_OBJECT (winMain, eraserDeleteStrokes, "eraserDeleteStrokes"); GLADE_HOOKUP_OBJECT (winMain, toolsHighlighterOptions, "toolsHighlighterOptions"); GLADE_HOOKUP_OBJECT (winMain, toolsHighlighterOptions_menu, "toolsHighlighterOptions_menu"); GLADE_HOOKUP_OBJECT (winMain, highlighterFine, "highlighterFine"); GLADE_HOOKUP_OBJECT (winMain, highlighterMedium, "highlighterMedium"); GLADE_HOOKUP_OBJECT (winMain, highlighterThick, "highlighterThick"); GLADE_HOOKUP_OBJECT (winMain, toolsTextFont, "toolsTextFont"); GLADE_HOOKUP_OBJECT (winMain, image634, "image634"); GLADE_HOOKUP_OBJECT (winMain, separator10, "separator10"); GLADE_HOOKUP_OBJECT (winMain, toolsDefaultPen, "toolsDefaultPen"); GLADE_HOOKUP_OBJECT (winMain, toolsDefaultEraser, "toolsDefaultEraser"); GLADE_HOOKUP_OBJECT (winMain, toolsDefaultHighlighter, "toolsDefaultHighlighter"); GLADE_HOOKUP_OBJECT (winMain, toolsDefaultText, "toolsDefaultText"); GLADE_HOOKUP_OBJECT (winMain, toolsSetAsDefault, "toolsSetAsDefault"); GLADE_HOOKUP_OBJECT (winMain, menuOptions, "menuOptions"); GLADE_HOOKUP_OBJECT (winMain, menuOptions_menu, "menuOptions_menu"); GLADE_HOOKUP_OBJECT (winMain, optionsUseXInput, "optionsUseXInput"); GLADE_HOOKUP_OBJECT (winMain, pen_and_touch, "pen_and_touch"); GLADE_HOOKUP_OBJECT (winMain, pen_and_touch_menu, "pen_and_touch_menu"); GLADE_HOOKUP_OBJECT (winMain, optionsButtonMappings, "optionsButtonMappings"); GLADE_HOOKUP_OBJECT (winMain, optionsPressureSensitive, "optionsPressureSensitive"); GLADE_HOOKUP_OBJECT (winMain, optionsButtonSwitchMapping, "optionsButtonSwitchMapping"); GLADE_HOOKUP_OBJECT (winMain, optionsTouchAsHandTool, "optionsTouchAsHandTool"); GLADE_HOOKUP_OBJECT (winMain, optionsPenDisablesTouch, "optionsPenDisablesTouch"); GLADE_HOOKUP_OBJECT (winMain, optionsDesignateTouchscreen, "optionsDesignateTouchscreen"); GLADE_HOOKUP_OBJECT (winMain, button2_mapping, "button2_mapping"); GLADE_HOOKUP_OBJECT (winMain, button2_mapping_menu, "button2_mapping_menu"); GLADE_HOOKUP_OBJECT (winMain, button2Pen, "button2Pen"); GLADE_HOOKUP_OBJECT (winMain, button2Eraser, "button2Eraser"); GLADE_HOOKUP_OBJECT (winMain, button2Highlighter, "button2Highlighter"); GLADE_HOOKUP_OBJECT (winMain, button2Text, "button2Text"); GLADE_HOOKUP_OBJECT (winMain, button2Image, "button2Image"); GLADE_HOOKUP_OBJECT (winMain, button2SelectRegion, "button2SelectRegion"); GLADE_HOOKUP_OBJECT (winMain, button2SelectRectangle, "button2SelectRectangle"); GLADE_HOOKUP_OBJECT (winMain, button2VerticalSpace, "button2VerticalSpace"); GLADE_HOOKUP_OBJECT (winMain, button2Hand, "button2Hand"); GLADE_HOOKUP_OBJECT (winMain, separator24, "separator24"); GLADE_HOOKUP_OBJECT (winMain, button2LinkBrush, "button2LinkBrush"); GLADE_HOOKUP_OBJECT (winMain, button2CopyBrush, "button2CopyBrush"); GLADE_HOOKUP_OBJECT (winMain, button2NABrush, "button2NABrush"); GLADE_HOOKUP_OBJECT (winMain, button3_mapping, "button3_mapping"); GLADE_HOOKUP_OBJECT (winMain, button3_mapping_menu, "button3_mapping_menu"); GLADE_HOOKUP_OBJECT (winMain, button3Pen, "button3Pen"); GLADE_HOOKUP_OBJECT (winMain, button3Eraser, "button3Eraser"); GLADE_HOOKUP_OBJECT (winMain, button3Highlighter, "button3Highlighter"); GLADE_HOOKUP_OBJECT (winMain, button3Text, "button3Text"); GLADE_HOOKUP_OBJECT (winMain, button3Image, "button3Image"); GLADE_HOOKUP_OBJECT (winMain, button3SelectRegion, "button3SelectRegion"); GLADE_HOOKUP_OBJECT (winMain, button3SelectRectangle, "button3SelectRectangle"); GLADE_HOOKUP_OBJECT (winMain, button3VerticalSpace, "button3VerticalSpace"); GLADE_HOOKUP_OBJECT (winMain, button3Hand, "button3Hand"); GLADE_HOOKUP_OBJECT (winMain, separator25, "separator25"); GLADE_HOOKUP_OBJECT (winMain, button3LinkBrush, "button3LinkBrush"); GLADE_HOOKUP_OBJECT (winMain, button3CopyBrush, "button3CopyBrush"); GLADE_HOOKUP_OBJECT (winMain, button3NABrush, "button3NABrush"); GLADE_HOOKUP_OBJECT (winMain, separator18, "separator18"); GLADE_HOOKUP_OBJECT (winMain, optionsProgressiveBG, "optionsProgressiveBG"); GLADE_HOOKUP_OBJECT (winMain, optionsPrintRuling, "optionsPrintRuling"); GLADE_HOOKUP_OBJECT (winMain, optionsLegacyPDFExport, "optionsLegacyPDFExport"); GLADE_HOOKUP_OBJECT (winMain, optionsAutoloadPdfXoj, "optionsAutoloadPdfXoj"); GLADE_HOOKUP_OBJECT (winMain, optionsAutosaveXoj, "optionsAutosaveXoj"); GLADE_HOOKUP_OBJECT (winMain, optionsLeftHanded, "optionsLeftHanded"); GLADE_HOOKUP_OBJECT (winMain, optionsShortenMenus, "optionsShortenMenus"); GLADE_HOOKUP_OBJECT (winMain, optionsPenCursor, "optionsPenCursor"); GLADE_HOOKUP_OBJECT (winMain, separator21, "separator21"); GLADE_HOOKUP_OBJECT (winMain, optionsAutoSavePrefs, "optionsAutoSavePrefs"); GLADE_HOOKUP_OBJECT (winMain, optionsSavePreferences, "optionsSavePreferences"); GLADE_HOOKUP_OBJECT (winMain, menuHelp, "menuHelp"); GLADE_HOOKUP_OBJECT (winMain, menuHelp_menu, "menuHelp_menu"); GLADE_HOOKUP_OBJECT (winMain, helpIndex, "helpIndex"); GLADE_HOOKUP_OBJECT (winMain, helpAbout, "helpAbout"); GLADE_HOOKUP_OBJECT (winMain, toolbarMain, "toolbarMain"); GLADE_HOOKUP_OBJECT (winMain, saveButton, "saveButton"); GLADE_HOOKUP_OBJECT (winMain, newButton, "newButton"); GLADE_HOOKUP_OBJECT (winMain, openButton, "openButton"); GLADE_HOOKUP_OBJECT (winMain, toolitem11, "toolitem11"); GLADE_HOOKUP_OBJECT (winMain, vseparator1, "vseparator1"); GLADE_HOOKUP_OBJECT (winMain, buttonCut, "buttonCut"); GLADE_HOOKUP_OBJECT (winMain, buttonCopy, "buttonCopy"); GLADE_HOOKUP_OBJECT (winMain, buttonPaste, "buttonPaste"); GLADE_HOOKUP_OBJECT (winMain, toolitem12, "toolitem12"); GLADE_HOOKUP_OBJECT (winMain, vseparator2, "vseparator2"); GLADE_HOOKUP_OBJECT (winMain, buttonUndo, "buttonUndo"); GLADE_HOOKUP_OBJECT (winMain, buttonRedo, "buttonRedo"); GLADE_HOOKUP_OBJECT (winMain, toolitem13, "toolitem13"); GLADE_HOOKUP_OBJECT (winMain, vseparator3, "vseparator3"); GLADE_HOOKUP_OBJECT (winMain, buttonFirstPage, "buttonFirstPage"); GLADE_HOOKUP_OBJECT (winMain, buttonPreviousPage, "buttonPreviousPage"); GLADE_HOOKUP_OBJECT (winMain, buttonNextPage, "buttonNextPage"); GLADE_HOOKUP_OBJECT (winMain, buttonLastPage, "buttonLastPage"); GLADE_HOOKUP_OBJECT (winMain, toolitem14, "toolitem14"); GLADE_HOOKUP_OBJECT (winMain, vseparator4, "vseparator4"); GLADE_HOOKUP_OBJECT (winMain, buttonZoomOut, "buttonZoomOut"); GLADE_HOOKUP_OBJECT (winMain, buttonPageWidth, "buttonPageWidth"); GLADE_HOOKUP_OBJECT (winMain, buttonZoomIn, "buttonZoomIn"); GLADE_HOOKUP_OBJECT (winMain, buttonNormalSize, "buttonNormalSize"); GLADE_HOOKUP_OBJECT (winMain, buttonZoomSet, "buttonZoomSet"); GLADE_HOOKUP_OBJECT (winMain, buttonFullscreen, "buttonFullscreen"); GLADE_HOOKUP_OBJECT (winMain, toolbarPen, "toolbarPen"); GLADE_HOOKUP_OBJECT (winMain, buttonPen, "buttonPen"); GLADE_HOOKUP_OBJECT (winMain, buttonEraser, "buttonEraser"); GLADE_HOOKUP_OBJECT (winMain, buttonHighlighter, "buttonHighlighter"); GLADE_HOOKUP_OBJECT (winMain, buttonText, "buttonText"); GLADE_HOOKUP_OBJECT (winMain, buttonImage, "buttonImage"); GLADE_HOOKUP_OBJECT (winMain, buttonReco, "buttonReco"); GLADE_HOOKUP_OBJECT (winMain, buttonRuler, "buttonRuler"); GLADE_HOOKUP_OBJECT (winMain, toolitem15, "toolitem15"); GLADE_HOOKUP_OBJECT (winMain, vseparator5, "vseparator5"); GLADE_HOOKUP_OBJECT (winMain, buttonSelectRegion, "buttonSelectRegion"); GLADE_HOOKUP_OBJECT (winMain, buttonSelectRectangle, "buttonSelectRectangle"); GLADE_HOOKUP_OBJECT (winMain, buttonVerticalSpace, "buttonVerticalSpace"); GLADE_HOOKUP_OBJECT (winMain, buttonHand, "buttonHand"); GLADE_HOOKUP_OBJECT (winMain, toolitem16, "toolitem16"); GLADE_HOOKUP_OBJECT (winMain, vseparator6, "vseparator6"); GLADE_HOOKUP_OBJECT (winMain, buttonToolDefault, "buttonToolDefault"); GLADE_HOOKUP_OBJECT (winMain, buttonDefaultPen, "buttonDefaultPen"); GLADE_HOOKUP_OBJECT (winMain, toolitem18, "toolitem18"); GLADE_HOOKUP_OBJECT (winMain, vseparator8, "vseparator8"); GLADE_HOOKUP_OBJECT (winMain, buttonFine, "buttonFine"); GLADE_HOOKUP_OBJECT (winMain, buttonMedium, "buttonMedium"); GLADE_HOOKUP_OBJECT (winMain, buttonThick, "buttonThick"); GLADE_HOOKUP_OBJECT (winMain, buttonThicknessOther, "buttonThicknessOther"); GLADE_HOOKUP_OBJECT (winMain, toolitem17, "toolitem17"); GLADE_HOOKUP_OBJECT (winMain, vseparator7, "vseparator7"); GLADE_HOOKUP_OBJECT (winMain, buttonBlack, "buttonBlack"); GLADE_HOOKUP_OBJECT (winMain, buttonBlue, "buttonBlue"); GLADE_HOOKUP_OBJECT (winMain, buttonRed, "buttonRed"); GLADE_HOOKUP_OBJECT (winMain, buttonGreen, "buttonGreen"); GLADE_HOOKUP_OBJECT (winMain, buttonGray, "buttonGray"); GLADE_HOOKUP_OBJECT (winMain, buttonLightBlue, "buttonLightBlue"); GLADE_HOOKUP_OBJECT (winMain, buttonLightGreen, "buttonLightGreen"); GLADE_HOOKUP_OBJECT (winMain, buttonMagenta, "buttonMagenta"); GLADE_HOOKUP_OBJECT (winMain, buttonOrange, "buttonOrange"); GLADE_HOOKUP_OBJECT (winMain, buttonYellow, "buttonYellow"); GLADE_HOOKUP_OBJECT (winMain, buttonWhite, "buttonWhite"); GLADE_HOOKUP_OBJECT (winMain, buttonColorOther, "buttonColorOther"); GLADE_HOOKUP_OBJECT (winMain, toolitem22, "toolitem22"); GLADE_HOOKUP_OBJECT (winMain, buttonColorChooser, "buttonColorChooser"); GLADE_HOOKUP_OBJECT (winMain, toolitem21, "toolitem21"); GLADE_HOOKUP_OBJECT (winMain, vseparator10, "vseparator10"); GLADE_HOOKUP_OBJECT (winMain, toolitem20, "toolitem20"); GLADE_HOOKUP_OBJECT (winMain, fontButton, "fontButton"); GLADE_HOOKUP_OBJECT (winMain, scrolledwindowMain, "scrolledwindowMain"); GLADE_HOOKUP_OBJECT (winMain, hbox1, "hbox1"); GLADE_HOOKUP_OBJECT (winMain, labelPage, "labelPage"); GLADE_HOOKUP_OBJECT (winMain, spinPageNo, "spinPageNo"); GLADE_HOOKUP_OBJECT (winMain, labelNumpages, "labelNumpages"); GLADE_HOOKUP_OBJECT (winMain, vseparator9, "vseparator9"); GLADE_HOOKUP_OBJECT (winMain, labelLayer, "labelLayer"); GLADE_HOOKUP_OBJECT (winMain, comboLayer, "comboLayer"); GLADE_HOOKUP_OBJECT (winMain, statusbar, "statusbar"); GLADE_HOOKUP_OBJECT_NO_REF (winMain, tooltips, "tooltips"); gtk_window_add_accel_group (GTK_WINDOW (winMain), accel_group); return winMain; } GtkWidget* create_papersizeDialog (void) { GtkWidget *papersizeDialog; GtkWidget *dialog_vbox1; GtkWidget *hbox2; GtkWidget *labelStdSizes; GtkWidget *comboStdSizes; GtkWidget *hbox3; GtkWidget *labelWidth; GtkWidget *entryWidth; GtkWidget *labelHeight; GtkWidget *entryHeight; GtkWidget *comboUnit; GtkWidget *dialog_action_area1; GtkWidget *cancelbutton1; GtkWidget *okbutton1; papersizeDialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (papersizeDialog), _("Set Paper Size")); gtk_window_set_modal (GTK_WINDOW (papersizeDialog), TRUE); gtk_window_set_resizable (GTK_WINDOW (papersizeDialog), FALSE); gtk_window_set_type_hint (GTK_WINDOW (papersizeDialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox1 = GTK_DIALOG (papersizeDialog)->vbox; gtk_widget_show (dialog_vbox1); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox2, TRUE, TRUE, 10); labelStdSizes = gtk_label_new (_("Standard paper sizes:")); gtk_widget_show (labelStdSizes); gtk_box_pack_start (GTK_BOX (hbox2), labelStdSizes, FALSE, FALSE, 0); gtk_misc_set_padding (GTK_MISC (labelStdSizes), 10, 0); comboStdSizes = gtk_combo_box_new_text (); gtk_widget_show (comboStdSizes); gtk_box_pack_start (GTK_BOX (hbox2), comboStdSizes, TRUE, TRUE, 5); gtk_combo_box_append_text (GTK_COMBO_BOX (comboStdSizes), _("A4")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboStdSizes), _("A4 (landscape)")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboStdSizes), _("US Letter")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboStdSizes), _("US Letter (landscape)")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboStdSizes), _("Custom")); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox3, TRUE, TRUE, 8); labelWidth = gtk_label_new (_("Width:")); gtk_widget_show (labelWidth); gtk_box_pack_start (GTK_BOX (hbox3), labelWidth, FALSE, FALSE, 10); entryWidth = gtk_entry_new (); gtk_widget_show (entryWidth); gtk_box_pack_start (GTK_BOX (hbox3), entryWidth, TRUE, TRUE, 0); gtk_entry_set_width_chars (GTK_ENTRY (entryWidth), 5); labelHeight = gtk_label_new (_("Height:")); gtk_widget_show (labelHeight); gtk_box_pack_start (GTK_BOX (hbox3), labelHeight, FALSE, FALSE, 10); entryHeight = gtk_entry_new (); gtk_widget_show (entryHeight); gtk_box_pack_start (GTK_BOX (hbox3), entryHeight, TRUE, TRUE, 0); gtk_entry_set_width_chars (GTK_ENTRY (entryHeight), 5); comboUnit = gtk_combo_box_new_text (); gtk_widget_show (comboUnit); gtk_box_pack_start (GTK_BOX (hbox3), comboUnit, FALSE, TRUE, 8); gtk_combo_box_append_text (GTK_COMBO_BOX (comboUnit), _("cm")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboUnit), _("in")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboUnit), _("pixels")); gtk_combo_box_append_text (GTK_COMBO_BOX (comboUnit), _("points")); dialog_action_area1 = GTK_DIALOG (papersizeDialog)->action_area; gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (cancelbutton1); gtk_dialog_add_action_widget (GTK_DIALOG (papersizeDialog), cancelbutton1, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT); okbutton1 = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (okbutton1); gtk_dialog_add_action_widget (GTK_DIALOG (papersizeDialog), okbutton1, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) comboStdSizes, "changed", G_CALLBACK (on_comboStdSizes_changed), NULL); g_signal_connect ((gpointer) entryWidth, "changed", G_CALLBACK (on_entryWidth_changed), NULL); g_signal_connect ((gpointer) entryHeight, "changed", G_CALLBACK (on_entryHeight_changed), NULL); g_signal_connect ((gpointer) comboUnit, "changed", G_CALLBACK (on_comboUnit_changed), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (papersizeDialog, papersizeDialog, "papersizeDialog"); GLADE_HOOKUP_OBJECT_NO_REF (papersizeDialog, dialog_vbox1, "dialog_vbox1"); GLADE_HOOKUP_OBJECT (papersizeDialog, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (papersizeDialog, labelStdSizes, "labelStdSizes"); GLADE_HOOKUP_OBJECT (papersizeDialog, comboStdSizes, "comboStdSizes"); GLADE_HOOKUP_OBJECT (papersizeDialog, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (papersizeDialog, labelWidth, "labelWidth"); GLADE_HOOKUP_OBJECT (papersizeDialog, entryWidth, "entryWidth"); GLADE_HOOKUP_OBJECT (papersizeDialog, labelHeight, "labelHeight"); GLADE_HOOKUP_OBJECT (papersizeDialog, entryHeight, "entryHeight"); GLADE_HOOKUP_OBJECT (papersizeDialog, comboUnit, "comboUnit"); GLADE_HOOKUP_OBJECT_NO_REF (papersizeDialog, dialog_action_area1, "dialog_action_area1"); GLADE_HOOKUP_OBJECT (papersizeDialog, cancelbutton1, "cancelbutton1"); GLADE_HOOKUP_OBJECT (papersizeDialog, okbutton1, "okbutton1"); return papersizeDialog; } GtkWidget* create_aboutDialog (void) { GtkWidget *aboutDialog; GtkWidget *dialog_vbox2; GtkWidget *image387; GtkWidget *labelTitle; GtkWidget *labelInfo; GtkWidget *dialog_action_area2; GtkWidget *closebutton1; aboutDialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (aboutDialog), _("About Xournal")); gtk_window_set_resizable (GTK_WINDOW (aboutDialog), FALSE); gtk_window_set_type_hint (GTK_WINDOW (aboutDialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox2 = GTK_DIALOG (aboutDialog)->vbox; gtk_widget_show (dialog_vbox2); image387 = create_pixmap (aboutDialog, "xournal.png"); gtk_widget_show (image387); gtk_box_pack_start (GTK_BOX (dialog_vbox2), image387, FALSE, TRUE, 12); labelTitle = gtk_label_new (_("Xournal")); gtk_widget_show (labelTitle); gtk_box_pack_start (GTK_BOX (dialog_vbox2), labelTitle, FALSE, FALSE, 3); gtk_label_set_justify (GTK_LABEL (labelTitle), GTK_JUSTIFY_CENTER); labelInfo = gtk_label_new (_("Written by Denis Auroux\nand other contributors\n http://xournal.sourceforge.net/ ")); gtk_widget_show (labelInfo); gtk_box_pack_start (GTK_BOX (dialog_vbox2), labelInfo, FALSE, FALSE, 0); gtk_label_set_justify (GTK_LABEL (labelInfo), GTK_JUSTIFY_CENTER); gtk_misc_set_padding (GTK_MISC (labelInfo), 20, 10); dialog_action_area2 = GTK_DIALOG (aboutDialog)->action_area; gtk_widget_show (dialog_action_area2); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END); closebutton1 = gtk_button_new_from_stock ("gtk-close"); gtk_widget_show (closebutton1); gtk_dialog_add_action_widget (GTK_DIALOG (aboutDialog), closebutton1, GTK_RESPONSE_CLOSE); GTK_WIDGET_SET_FLAGS (closebutton1, GTK_CAN_DEFAULT); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (aboutDialog, aboutDialog, "aboutDialog"); GLADE_HOOKUP_OBJECT_NO_REF (aboutDialog, dialog_vbox2, "dialog_vbox2"); GLADE_HOOKUP_OBJECT (aboutDialog, image387, "image387"); GLADE_HOOKUP_OBJECT (aboutDialog, labelTitle, "labelTitle"); GLADE_HOOKUP_OBJECT (aboutDialog, labelInfo, "labelInfo"); GLADE_HOOKUP_OBJECT_NO_REF (aboutDialog, dialog_action_area2, "dialog_action_area2"); GLADE_HOOKUP_OBJECT (aboutDialog, closebutton1, "closebutton1"); return aboutDialog; } GtkWidget* create_zoomDialog (void) { GtkWidget *zoomDialog; GtkWidget *dialog_vbox3; GtkWidget *vbox1; GtkWidget *hbox4; GtkWidget *radioZoom; GSList *radioZoom_group = NULL; GtkObject *spinZoom_adj; GtkWidget *spinZoom; GtkWidget *label1; GtkWidget *radioZoom100; GtkWidget *radioZoomWidth; GtkWidget *radioZoomHeight; GtkWidget *dialog_action_area3; GtkWidget *cancelbutton2; GtkWidget *button1; GtkWidget *button2; zoomDialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (zoomDialog), _("Set Zoom")); gtk_window_set_modal (GTK_WINDOW (zoomDialog), TRUE); gtk_window_set_type_hint (GTK_WINDOW (zoomDialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox3 = GTK_DIALOG (zoomDialog)->vbox; gtk_widget_show (dialog_vbox3); vbox1 = gtk_vbox_new (FALSE, 2); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox3), vbox1, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox1), 8); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox1), hbox4, FALSE, FALSE, 0); radioZoom = gtk_radio_button_new_with_mnemonic (NULL, _("Zoom: ")); gtk_widget_show (radioZoom); gtk_box_pack_start (GTK_BOX (hbox4), radioZoom, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (radioZoom), 4); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radioZoom), radioZoom_group); radioZoom_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radioZoom)); spinZoom_adj = gtk_adjustment_new (100, 10, 1500, 5, 0, 0); spinZoom = gtk_spin_button_new (GTK_ADJUSTMENT (spinZoom_adj), 1, 0); gtk_widget_show (spinZoom); gtk_box_pack_start (GTK_BOX (hbox4), spinZoom, FALSE, TRUE, 5); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinZoom), TRUE); label1 = gtk_label_new (_("%")); gtk_widget_show (label1); gtk_box_pack_start (GTK_BOX (hbox4), label1, FALSE, TRUE, 0); gtk_misc_set_alignment (GTK_MISC (label1), 0.48, 0.5); radioZoom100 = gtk_radio_button_new_with_mnemonic (NULL, _("Normal size (100%)")); gtk_widget_show (radioZoom100); gtk_box_pack_start (GTK_BOX (vbox1), radioZoom100, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (radioZoom100), 4); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radioZoom100), radioZoom_group); radioZoom_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radioZoom100)); radioZoomWidth = gtk_radio_button_new_with_mnemonic (NULL, _("Page Width")); gtk_widget_show (radioZoomWidth); gtk_box_pack_start (GTK_BOX (vbox1), radioZoomWidth, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (radioZoomWidth), 4); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radioZoomWidth), radioZoom_group); radioZoom_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radioZoomWidth)); radioZoomHeight = gtk_radio_button_new_with_mnemonic (NULL, _("Page Height")); gtk_widget_show (radioZoomHeight); gtk_box_pack_start (GTK_BOX (vbox1), radioZoomHeight, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (radioZoomHeight), 4); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radioZoomHeight), radioZoom_group); radioZoom_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radioZoomHeight)); dialog_action_area3 = GTK_DIALOG (zoomDialog)->action_area; gtk_widget_show (dialog_action_area3); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area3), GTK_BUTTONBOX_END); cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (cancelbutton2); gtk_dialog_add_action_widget (GTK_DIALOG (zoomDialog), cancelbutton2, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT); button1 = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (button1); gtk_dialog_add_action_widget (GTK_DIALOG (zoomDialog), button1, GTK_RESPONSE_APPLY); GTK_WIDGET_SET_FLAGS (button1, GTK_CAN_DEFAULT); button2 = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (button2); gtk_dialog_add_action_widget (GTK_DIALOG (zoomDialog), button2, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) radioZoom, "toggled", G_CALLBACK (on_radioZoom_toggled), NULL); g_signal_connect ((gpointer) spinZoom, "value_changed", G_CALLBACK (on_spinZoom_value_changed), NULL); g_signal_connect ((gpointer) radioZoom100, "toggled", G_CALLBACK (on_radioZoom100_toggled), NULL); g_signal_connect ((gpointer) radioZoomWidth, "toggled", G_CALLBACK (on_radioZoomWidth_toggled), NULL); g_signal_connect ((gpointer) radioZoomHeight, "toggled", G_CALLBACK (on_radioZoomHeight_toggled), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (zoomDialog, zoomDialog, "zoomDialog"); GLADE_HOOKUP_OBJECT_NO_REF (zoomDialog, dialog_vbox3, "dialog_vbox3"); GLADE_HOOKUP_OBJECT (zoomDialog, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (zoomDialog, hbox4, "hbox4"); GLADE_HOOKUP_OBJECT (zoomDialog, radioZoom, "radioZoom"); GLADE_HOOKUP_OBJECT (zoomDialog, spinZoom, "spinZoom"); GLADE_HOOKUP_OBJECT (zoomDialog, label1, "label1"); GLADE_HOOKUP_OBJECT (zoomDialog, radioZoom100, "radioZoom100"); GLADE_HOOKUP_OBJECT (zoomDialog, radioZoomWidth, "radioZoomWidth"); GLADE_HOOKUP_OBJECT (zoomDialog, radioZoomHeight, "radioZoomHeight"); GLADE_HOOKUP_OBJECT_NO_REF (zoomDialog, dialog_action_area3, "dialog_action_area3"); GLADE_HOOKUP_OBJECT (zoomDialog, cancelbutton2, "cancelbutton2"); GLADE_HOOKUP_OBJECT (zoomDialog, button1, "button1"); GLADE_HOOKUP_OBJECT (zoomDialog, button2, "button2"); return zoomDialog; } xournal-0.4.8/src/xo-interface.h0000664000175000017500000000032412047114225016166 0ustar aurouxauroux/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_winMain (void); GtkWidget* create_papersizeDialog (void); GtkWidget* create_aboutDialog (void); GtkWidget* create_zoomDialog (void); xournal-0.4.8/src/xo-print.h0000644000175000017500000000531612353620450015370 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ typedef struct XrefTable { int *data; int last; int n_alloc; } XrefTable; typedef struct PdfPageDesc { struct PdfObj *resources, *mediabox, *contents; int rotate; } PdfPageDesc; typedef struct PdfInfo { int startxref; struct PdfObj *trailerdict; int npages; struct PdfPageDesc *pages; } PdfInfo; typedef struct PdfObj { int type; int intval; double realval; char *str; int len, num; struct PdfObj **elts; char **names; } PdfObj; typedef struct PdfFont { int n_obj; gboolean used_in_this_page; char *filename; int font_id; gboolean is_truetype; int glyph_page; int glyphmap[256]; int advance[256]; char *glyphpsnames[256]; int num_glyphs_used; // fields from the FT_Face gdouble ft2ps; int nglyphs; int ascender, descender, xmin, xmax, ymin, ymax; // in PDF font units gchar *fontname; int flags; } PdfFont; typedef struct PdfImage { int n_obj; gboolean has_alpha; int n_obj_smask; /* only if has_alpha */ GdkPixbuf *pixbuf; gboolean used_in_this_page; } PdfImage; #define PDFTYPE_CST 0 // intval: true=1, false=0, null=-1 #define PDFTYPE_INT 1 // intval #define PDFTYPE_REAL 2 // realval #define PDFTYPE_STRING 3 // str, len #define PDFTYPE_NAME 4 // str #define PDFTYPE_ARRAY 5 // num, elts #define PDFTYPE_DICT 6 // num, elts, names #define PDFTYPE_STREAM 7 // dict: num, elts, names; data: str, len #define PDFTYPE_REF 8 // intval, num struct PdfObj *parse_pdf_object(char **ptr, char *eof); void free_pdfobj(struct PdfObj *obj); struct PdfObj *dup_pdfobj(struct PdfObj *obj); struct PdfObj *get_pdfobj(GString *pdfbuf, struct XrefTable *xref, struct PdfObj *obj); void make_xref(struct XrefTable *xref, int nobj, int offset); gboolean pdf_parse_info(GString *pdfbuf, struct PdfInfo *pdfinfo, struct XrefTable *xref); // main printing functions gboolean print_to_pdf(char *filename); gboolean print_to_pdf_cairo(char *filename); #if GTK_CHECK_VERSION(2, 10, 0) void print_job_render_page(GtkPrintOperation *print, GtkPrintContext *context, gint pageno, gpointer user_data); #endif xournal-0.4.8/src/xournal.h0000644000175000017500000003567112353615710015312 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include // #define INPUT_DEBUG /* uncomment this line if you experience event-processing problems and want to list the input events received by xournal. Caution, lots of output (redirect to a file). */ // #define ENABLE_XINPUT_BUGFIX /* uncomment this line if you are experiencing calibration problems with XInput and want to try things differently. Especially useful on older distributions (up to around 2010). */ #define FILE_DIALOG_SIZE_BUGFIX /* ugly, but should help users with versions of GTK+ that suffer from the "tiny file dialog" syndrome, without hurting those with well-behaved versions of GTK+. Comment out if you'd prefer not to include this fix. */ // PREF FILES INFO #define CONFIG_DIR ".xournal" #define MRU_FILE "recent-files" #define MRU_SIZE 8 #define CONFIG_FILE "config" // version string for about box #ifdef WIN32 #define VERSION_STRING VERSION "-win32" #else #define VERSION_STRING VERSION #endif // DATA STRUCTURES AND CONSTANTS #define PIXEL_MOTION_THRESHOLD 0.3 #define MAX_AXES 12 #define EPSILON 1E-7 #define MAX_ZOOM 20.0 #define DISPLAY_DPI_DEFAULT 96.0 #define MIN_ZOOM 0.2 #define RESIZE_MARGIN 6.0 #define MAX_SAFE_RENDER_DPI 720 // max dpi at which PDF bg's get rendered #define VBOX_MAIN_NITEMS 5 // number of interface items in vboxMain // default touch device #define DEFAULT_DEVICE_FOR_TOUCH "Touchscr" /* a string (+ aux data) that maintains a refcount */ typedef struct Refstring { int nref; char *s; gpointer aux; } Refstring; /* The journal is mostly a list of pages. Each page is a list of layers, and a background. Each layer is a list of items, from bottom to top. */ typedef struct Background { int type; GnomeCanvasItem *canvas_item; int color_no; guint color_rgba; int ruling; GdkPixbuf *pixbuf; Refstring *filename; int file_domain; int file_page_seq; double pixbuf_scale; // for PIXMAP, this is the *current* zoom value // for PDF, this is the *requested* zoom value int pixel_height, pixel_width; // PDF only: pixel size of current pixbuf } Background; #define BG_SOLID 0 #define BG_PIXMAP 1 #define BG_PDF 2 #define RULING_NONE 0 #define RULING_LINED 1 #define RULING_RULED 2 #define RULING_GRAPH 3 #define DOMAIN_ABSOLUTE 0 #define DOMAIN_ATTACH 1 #define DOMAIN_CLONE 2 // only while loading file typedef struct Brush { int tool_type; int color_no; guint color_rgba; int thickness_no; double thickness; int tool_options; gboolean ruler, recognizer, variable_width; } Brush; #define COLOR_BLACK 0 #define COLOR_BLUE 1 #define COLOR_RED 2 #define COLOR_GREEN 3 #define COLOR_GRAY 4 #define COLOR_LIGHTBLUE 5 #define COLOR_LIGHTGREEN 6 #define COLOR_MAGENTA 7 #define COLOR_ORANGE 8 #define COLOR_YELLOW 9 #define COLOR_WHITE 10 #define COLOR_OTHER -1 #define COLOR_MAX 11 extern guint predef_colors_rgba[COLOR_MAX]; extern guint predef_bgcolors_rgba[COLOR_MAX]; #define THICKNESS_VERYFINE 0 #define THICKNESS_FINE 1 #define THICKNESS_MEDIUM 2 #define THICKNESS_THICK 3 #define THICKNESS_VERYTHICK 4 #define THICKNESS_MAX 5 #define TOOL_PEN 0 #define TOOL_ERASER 1 #define TOOL_HIGHLIGHTER 2 #define TOOL_TEXT 3 #define TOOL_SELECTREGION 4 #define TOOL_SELECTRECT 5 #define TOOL_VERTSPACE 6 #define TOOL_HAND 7 #define TOOL_IMAGE 8 #define NUM_STROKE_TOOLS 3 #define NUM_TOOLS 9 #define NUM_BUTTONS 3 #define TOOLOPT_ERASER_STANDARD 0 #define TOOLOPT_ERASER_WHITEOUT 1 #define TOOLOPT_ERASER_STROKES 2 extern double predef_thickness[NUM_STROKE_TOOLS][THICKNESS_MAX]; typedef struct BBox { double left, right, top, bottom; } BBox; struct UndoErasureData; typedef struct Item { int type; struct Brush brush; // the brush to use, if ITEM_STROKE // 'brush' also contains color info for text items GnomeCanvasPoints *path; gdouble *widths; GnomeCanvasItem *canvas_item; // the corresponding canvas item, or NULL struct BBox bbox; struct UndoErasureData *erasure; // for temporary use during erasures // the following fields for ITEM_TEXT: gchar *text; gchar *font_name; gdouble font_size; GtkWidget *widget; // the widget while text is being edited (ITEM_TEMP_TEXT) // the following fields for ITEM_IMAGE: GdkPixbuf *image; // the image gchar *image_png; // PNG of original image, for save and clipboard gsize image_png_len; } Item; // item type values for Item.type, UndoItem.type, ui.cur_item_type ... // (not all are valid in all places) #define ITEM_NONE -1 #define ITEM_STROKE 0 #define ITEM_TEMP_STROKE 1 #define ITEM_ERASURE 2 #define ITEM_SELECTRECT 3 #define ITEM_MOVESEL 4 #define ITEM_PASTE 5 #define ITEM_NEW_LAYER 6 #define ITEM_DELETE_LAYER 7 #define ITEM_NEW_BG_ONE 8 #define ITEM_NEW_BG_RESIZE 9 #define ITEM_PAPER_RESIZE 10 #define ITEM_NEW_DEFAULT_BG 11 #define ITEM_NEW_PAGE 13 #define ITEM_DELETE_PAGE 14 #define ITEM_REPAINTSEL 15 #define ITEM_MOVESEL_VERT 16 #define ITEM_HAND 17 #define ITEM_TEXT 18 #define ITEM_TEMP_TEXT 19 #define ITEM_TEXT_EDIT 20 #define ITEM_TEXT_ATTRIB 21 #define ITEM_RESIZESEL 22 #define ITEM_RECOGNIZER 23 #define ITEM_IMAGE 24 #define ITEM_SELECTREGION 25 typedef struct Layer { GList *items; // the items on the layer, from bottom to top int nitems; GnomeCanvasGroup *group; } Layer; typedef struct Page { GList *layers; // the layers on the page int nlayers; double height, width; double hoffset, voffset; // offsets of canvas group rel. to canvas root struct Background *bg; GnomeCanvasGroup *group; } Page; typedef struct Journal { GList *pages; // the pages in the journal int npages; int last_attach_no; // for naming of attached backgrounds } Journal; typedef struct Selection { int type; // ITEM_SELECTRECT, ITEM_MOVESEL_VERT, ITEM_SELECTREGION BBox bbox; // the rectangle bbox of the selection struct Layer *layer; // the layer on which the selection lives double anchor_x, anchor_y, last_x, last_y; // for selection motion gboolean resizing_top, resizing_bottom, resizing_left, resizing_right; // for selection resizing double new_x1, new_x2, new_y1, new_y2; // for selection resizing GnomeCanvasItem *canvas_item; // if the selection box is on screen GList *items; // the selected items (a list of struct Item) int move_pageno, orig_pageno; // if selection moves to a different page struct Layer *move_layer; float move_pagedelta; } Selection; typedef struct UIData { int pageno, layerno; // the current page and layer struct Page *cur_page; struct Layer *cur_layer; gboolean saved; // is file saved ? struct Brush *cur_brush; // the brush in use (one of brushes[...]) int toolno[NUM_BUTTONS+2]; // the number of the currently selected tool; two more reserved for eraser tip and touch device struct Brush brushes[NUM_BUTTONS+1][NUM_STROKE_TOOLS]; // the current pen, eraser, hiliter struct Brush default_brushes[NUM_STROKE_TOOLS]; // the default ones int linked_brush[NUM_BUTTONS+1]; // whether brushes are linked across buttons int cur_mapping; // the current button number for mappings gboolean button_switch_mapping; // button clicks switch button 1 mappings gboolean use_erasertip; gboolean touch_as_handtool; // always map touch device to hand tool? gboolean pen_disables_touch; // pen proximity should disable touch device? gboolean in_proximity; char *device_for_touch; int which_mouse_button; // the mouse button drawing the current path int which_unswitch_button; // if button_switch_mapping, the mouse button that switched the mapping struct Page default_page; // the model for the default page int layerbox_length; // the number of entries registered in the layers combo-box struct Item *cur_item; // the item being drawn, or NULL int cur_item_type; GnomeCanvasPoints cur_path; // the path being drawn gdouble *cur_widths; // width array for the path being drawn int cur_path_storage_alloc; int cur_widths_storage_alloc; double zoom; // zoom factor, in pixels per pt gboolean use_xinput; // use input devices instead of core pointer gboolean allow_xinput; // allow use of xinput ? gboolean discard_corepointer; // discard core pointer events in XInput mode gboolean pressure_sensitivity; // use pen pressure to control stroke width? double width_minimum_multiplier, width_maximum_multiplier; // calibration for pressure sensitivity gboolean is_corestroke; // this stroke is painted with core pointer gboolean saved_is_corestroke; GdkDevice *stroke_device; // who's painting this stroke gboolean ignore_other_devices; gboolean ignore_btn_reported_up; // config setting: ignore button reported up gboolean current_ignore_btn_reported_up; int screen_width, screen_height; // initial screen size, for XInput events double hand_refpt[2]; int hand_scrollto_cx, hand_scrollto_cy; gboolean hand_scrollto_pending; char *filename; gchar *default_path; // default path for new notes gchar *default_image; // path for previous image gboolean fullscreen, maximize_at_start; int view_continuous; // view mode is continuous ? gboolean in_update_page_stuff; // semaphore to avoid scrollbar retroaction struct Selection *selection; GdkCursor *cursor; GdkPixbuf *pen_cursor_pix, *hiliter_cursor_pix; gboolean pen_cursor; // use pencil cursor (default is a dot in current color) gboolean progressive_bg; // update PDF bg's one at a time char *mrufile, *configfile; // file names for MRU & config char *mru[MRU_SIZE]; // MRU data GtkWidget *mrumenu[MRU_SIZE]; gboolean bg_apply_all_pages; int window_default_width, window_default_height, scrollbar_step_increment; gboolean print_ruling; // print the paper ruling ? gboolean exportpdf_prefer_legacy; // prefer legacy code for export-to-pdf? gboolean new_page_bg_from_pdf; // do new pages get a duplicated PDF/image background? int default_unit; // the default unit for paper sizes int startuptool; // the default tool at startup int zoom_step_increment; // the increment in the zoom dialog box double zoom_step_factor; // the multiplicative factor in zoom in/out double startup_zoom; gboolean autoload_pdf_xoj; gboolean autosave_enabled, autosave_loop_running, autosave_need_catchup; GList *autosave_filename_list; int autosave_delay; gboolean need_autosave; #if GLIB_CHECK_VERSION(2,6,0) GKeyFile *config_data; #endif int vertical_order[2][VBOX_MAIN_NITEMS]; // the order of interface components gchar *default_font_name, *font_name; gdouble default_font_size, font_size; gulong resize_signal_handler; gdouble hiliter_opacity; guint hiliter_alpha_mask; gboolean left_handed; // left-handed mode? gboolean auto_save_prefs; // auto-save preferences ? gboolean shorten_menus; // shorten menus ? gchar *shorten_menu_items; // which items to hide gboolean is_sel_cursor; // displaying a selection-related cursor gint pre_fullscreen_width, pre_fullscreen_height; // for win32 fullscreen #if GTK_CHECK_VERSION(2,10,0) GtkPrintSettings *print_settings; #endif gboolean poppler_force_cairo; // force poppler to use cairo gboolean warned_generate_fontconfig; // for win32 fontconfig cache } UIData; #define BRUSH_LINKED 0 #define BRUSH_COPIED 1 #define BRUSH_STATIC 2 typedef struct UndoErasureData { struct Item *item; // the item that got erased int npos; // its position in its layer int nrepl; // the number of replacement items GList *replacement_items; } UndoErasureData; typedef struct UndoItem { int type; struct Item *item; // for ITEM_STROKE, ITEM_TEXT, ITEM_TEXT_EDIT, ITEM_TEXT_ATTRIB, ITEM_IMAGE struct Layer *layer; // for ITEM_STROKE, ITEM_ERASURE, ITEM_PASTE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_MOVESEL, ITEM_TEXT, ITEM_TEXT_EDIT, ITEM_RECOGNIZER, ITEM_IMAGE struct Layer *layer2; // for ITEM_DELETE_LAYER with val=-1, ITEM_MOVESEL struct Page *page; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE GList *erasurelist; // for ITEM_ERASURE, ITEM_RECOGNIZER GList *itemlist; // for ITEM_MOVESEL, ITEM_PASTE, ITEM_REPAINTSEL, ITEM_RESIZESEL GList *auxlist; // for ITEM_REPAINTSEL (brushes), ITEM_MOVESEL (depths) struct Background *bg; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_DEFAULT_BG int val; // for ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE double val_x, val_y; // for ITEM_MOVESEL, ITEM_NEW_BG_RESIZE, ITEM_PAPER_RESIZE, ITEM_NEW_DEFAULT_BG, ITEM_TEXT_ATTRIB, ITEM_RESIZESEL double scaling_x, scaling_y; // for ITEM_RESIZESEL gchar *str; // for ITEM_TEXT_EDIT, ITEM_TEXT_ATTRIB struct Brush *brush; // for ITEM_TEXT_ATTRIB struct UndoItem *next; int multiop; } UndoItem; #define MULTIOP_CONT_REDO 1 // not the last in a multiop, so keep redoing #define MULTIOP_CONT_UNDO 2 // not the first in a multiop, so keep undoing typedef struct BgPdfRequest { int pageno; double dpi; } BgPdfRequest; typedef struct BgPdfPage { double dpi; GdkPixbuf *pixbuf; int pixel_height, pixel_width; // pixel size of pixbuf } BgPdfPage; typedef struct BgPdf { int status; // the rest only makes sense if this is not STATUS_NOT_INIT guint pid; // the identifier of the idle callback Refstring *filename; int file_domain; gchar *file_contents; // buffer containing a copy of file data gsize file_length; // size of above buffer int npages; GList *pages; // a list of BgPdfPage structures GList *requests; // a list of BgPdfRequest structures gboolean has_failed; // has failed in the past... PopplerDocument *document; // the poppler document } BgPdf; #define STATUS_NOT_INIT 0 #define STATUS_READY 1 // things are initialized and can work // there used to be more possible values, things got streamlined... // UTILITY MACROS // getting a component of the interface by name #define GET_COMPONENT(a) GTK_WIDGET (g_object_get_data(G_OBJECT (winMain), a)) // the margin between consecutive pages in continuous view #define VIEW_CONTINUOUS_SKIP 20.0 #define VIEW_MODE_ONE_PAGE 0 #define VIEW_MODE_CONTINUOUS 1 #define VIEW_MODE_HORIZONTAL 2 // GLOBAL VARIABLES // the main window and the canvas extern GtkWidget *winMain; extern GnomeCanvas *canvas; // the data extern struct Journal journal; extern struct UIData ui; extern struct BgPdf bgpdf; extern struct UndoItem *undo, *redo; extern double DEFAULT_ZOOM; #define UNIT_CM 0 #define UNIT_IN 1 #define UNIT_PX 2 #define UNIT_PT 3 xournal-0.4.8/src/xo-shapes.h0000664000175000017500000000367511773660334015541 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // #define RECOGNIZER_DEBUG // uncomment for debug output #define MAX_POLYGON_SIDES 4 #define LINE_MAX_DET 0.015 // maximum score for line (ideal line = 0) #define CIRCLE_MIN_DET 0.95 // minimum det. score for circle (ideal circle = 1) #define CIRCLE_MAX_SCORE 0.10 // max circle score for circle (ideal circle = 0) #define SLANT_TOLERANCE (5*M_PI/180) // ignore slanting by +/- 5 degrees #define RECTANGLE_ANGLE_TOLERANCE (15*M_PI/180) // angle tolerance in rectangles #define RECTANGLE_LINEAR_TOLERANCE 0.20 // vertex gap tolerance in rectangles #define POLYGON_LINEAR_TOLERANCE 0.20 // vertex gap tolerance in closed polygons #define ARROW_MAXSIZE 0.8 // max size of arrow tip relative to main segment #define ARROW_ANGLE_MIN (5*M_PI/180) // arrow tip angles relative to main segment #define ARROW_ANGLE_MAX (50*M_PI/180) #define ARROW_ASYMMETRY_MAX_ANGLE (30*M_PI/180) #define ARROW_ASYMMETRY_MAX_LINEAR 1.0 // size imbalance of two legs of tip #define ARROW_TIP_LINEAR_TOLERANCE 0.30 // gap tolerance on tip segments #define ARROW_SIDEWAYS_GAP_TOLERANCE 0.25 // gap tolerance in lateral direction #define ARROW_MAIN_LINEAR_GAP_MIN -0.3 // gap tolerance on main segment #define ARROW_MAIN_LINEAR_GAP_MAX +0.7 // gap tolerance on main segment void recognize_patterns(void); void reset_recognizer(void); xournal-0.4.8/src/xo-clipboard.h0000664000175000017500000000132511773660334016203 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ void selection_to_clip(void); void clipboard_paste(void); xournal-0.4.8/src/xo-file.h0000644000175000017500000000422312353507236015155 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #define DEFAULT_SHORTEN_MENUS \ "optionsProgressiveBG optionsLeftHanded optionsButtonSwitchMapping" #define GS_CMDLINE \ "gs -sDEVICE=bmp16m -r%f -q -sOutputFile=- " \ "-dNOPAUSE -dBATCH -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 %s" extern int GS_BITMAP_DPI, PDFTOPPM_PRINTING_DPI; #define AUTOSAVE_MAX 9 #define AUTOSAVE_FILENAME_TEMPLATE "%s.autosave%d.xoj" #define AUTOSAVE_FILENAME_FILTER "%s.autosave*.xoj" void new_journal(void); gboolean save_journal(const char *filename, gboolean is_auto); gboolean close_journal(void); gboolean open_journal(char *filename); struct Background *attempt_load_pix_bg(char *filename, gboolean attach); GList *attempt_load_gv_bg(char *filename); struct Background *attempt_screenshot_bg(void); void cancel_bgpdf_request(struct BgPdfRequest *req); gboolean add_bgpdf_request(int pageno, double zoom); gboolean bgpdf_scheduler_callback(gpointer data); void shutdown_bgpdf(void); gboolean init_bgpdf(char *pdfname, gboolean create_pages, int file_domain); void bgpdf_create_page_with_bg(int pageno, struct BgPdfPage *bgpg); void bgpdf_update_bg(int pageno, struct BgPdfPage *bgpg); void init_mru(void); void update_mru_menu(void); void new_mru_entry(char *name); void delete_mru_entry(int which); void save_mru_list(void); void init_config_default(void); void load_config_from_file(void); void save_config_to_file(void); void autosave_cleanup(GList **list); void init_autosave(void); gboolean autosave_cb(gpointer is_catchup); char *check_for_autosave(char *filename); xournal-0.4.8/src/xo-paint.h0000644000175000017500000000310312337424670015347 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ void set_cursor_busy(gboolean busy); void update_cursor(void); void update_cursor_for_resize(double *pt); void create_new_stroke(GdkEvent *event); void continue_stroke(GdkEvent *event); void finalize_stroke(void); void abort_stroke(void); void do_eraser(GdkEvent *event, double radius, gboolean whole_strokes); void finalize_erasure(void); void do_hand(GdkEvent *event); /* text functions */ #ifdef WIN32 #define DEFAULT_FONT "Arial" #else #define DEFAULT_FONT "Sans" #endif #define DEFAULT_FONT_SIZE 12 void start_text(GdkEvent *event, struct Item *item); void end_text(void); void update_text_item_displayfont(struct Item *item); void rescale_text_items(void); struct Item *click_is_in_text(struct Layer *layer, double x, double y); struct Item *click_is_in_text_or_image(struct Layer *layer, double x, double y); void refont_text_item(struct Item *item, gchar *font_name, double font_size); void process_font_sel(gchar *str); xournal-0.4.8/src/Makefile.am0000644000175000017500000000153011775130717015476 0ustar aurouxauroux## Process this file with automake to produce Makefile.in if WIN32 SUBDIRS = ttsubset win32 else SUBDIRS = ttsubset endif INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @PACKAGE_CFLAGS@ bin_PROGRAMS = xournal xournal_SOURCES = \ main.c xournal.h \ xo-misc.c xo-misc.h \ xo-file.c xo-file.h \ xo-paint.c xo-paint.h \ xo-selection.c xo-selection.h \ xo-clipboard.c xo-clipboard.h \ xo-image.c xo-image.h \ xo-print.c xo-print.h \ xo-support.c xo-support.h \ xo-interface.c xo-interface.h \ xo-callbacks.c xo-callbacks.h \ xo-shapes.c xo-shapes.h if WIN32 xournal_LDFLAGS = -mwindows xournal_LDADD = win32/xournal.res ttsubset/libttsubset.a @PACKAGE_LIBS@ $(INTLLIBS) -lz else xournal_LDADD = ttsubset/libttsubset.a @PACKAGE_LIBS@ $(INTLLIBS) -lX11 -lz -lm endif xournal-0.4.8/src/xo-support.c0000664000175000017500000000713211773660334015755 0ustar aurouxauroux/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "xo-support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to find pixmap files. */ static gchar* find_pixmap_file (const gchar *filename) { GList *elem; /* We step through each of the pixmaps directory to find it. */ elem = pixmaps_directories; while (elem) { gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); elem = elem->next; } return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *pathname = NULL; GtkWidget *pixmap; if (!filename || !filename[0]) return gtk_image_new (); pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return gtk_image_new (); } pixmap = gtk_image_new_from_file (pathname); g_free (pathname); return pixmap; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description) { gint n_actions, i; n_actions = atk_action_get_n_actions (action); for (i = 0; i < n_actions; i++) { if (!strcmp (atk_action_get_name (action, i), action_name)) atk_action_set_description (action, i, description); } } xournal-0.4.8/src/win32/0000775000175000017500000000000011774727054014414 5ustar aurouxaurouxxournal-0.4.8/src/win32/xournal.ico0000664000175000017500000002267611773660334016611 0ustar aurouxauroux00 ¨%(0` $  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !$&(((('#  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "(-38<ADHIKLLKJHEA=83.(#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEEEgLLLàHHHñHHHòHHHòGGGóGGGóGGGóGGGôGGGôGGGõGGGõGGGõFFFöFFFöFFFöFFF÷FFF÷FFF÷FFF÷FFF÷FFF÷FFF÷FFF÷FFF÷FFF÷FFFöFFFöFFFöGGGõGGGõGGGõGGGôGGGôGGGôGGGóGGGóHHHòHHHòKKKßDDDbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIIHHHöÃÃÃÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÆÆÆÿMMMöFFF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHHH \\\óÊÊÊÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿ©©©ÿÈÈÈÿ___öJJJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPPP aaaóÒÒÒÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿ¤¤¤ÿÑÑÑÿbbböUUUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNNN___ööööÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿùùùÿôôôÿîîîÿêêêÿåååÿâââÿáááÿãããÿæææÿêêêÿðððÿöööÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿöööÿaaaøZZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfff[[[ýðððÿåååÿåååÿåååÿåååÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿäääÿãããÿãããÿãããÿãããÿãããÿßßßÿÖÖÖÿÏÏÏÿÊÊÊÿÆÆÆÿÁÁÁÿ¾¾¾ÿ»»»ÿ»»»ÿºººÿ½½½ÿ¿¿¿ÿÄÄÄÿÈÈÈÿÎÎÎÿØØØÿßßßÿàààÿàààÿàààÿíííÿ___ý€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaaaøìììÿçççÿæææÿæææÿåååÿåååÿåååÿÙÙÙÿrrrÿdddÿ³³³ÿåååÿäääÿäääÿäääÿäääÿäääÿÞÞÞÿÖÖÖÿÏÏÏÿÈÈÈÿÂÂÂÿ¼¼¼ÿ¶¶¶ÿ°°°ÿ­­­ÿªªªÿ¬¬¬ÿ¯¯¯ÿ´´´ÿºººÿÀÀÀÿÇÇÇÿÌÌÌÿÓÓÓÿÞÞÞÿáááÿâââÿèèèÿgggõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjjjìæææÿèèèÿçççÿæææÿæææÿæææÿæææÿ‹‹‹ÿÿÿÿÂÂÂÿåååÿåååÿåååÿåååÿãããÿÜÜÜÿÔÔÔÿÍÍÍÿÆÆÆÿ¾¾¾ÿ¸¸¸ÿ±±±ÿªªªÿ¢¢¢ÿœœœÿ¡¡¡ÿ¨¨¨ÿ¯¯¯ÿ¶¶¶ÿ½½½ÿÃÃÃÿÊÊÊÿÑÑÑÿÙÙÙÿâââÿäääÿâââÿoooèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÞàààÿêêêÿçççÿçççÿçççÿçççÿçççÿ¥¥¥ÿÿÿÿNNNÿæææÿæææÿæææÿæææÿæææÿÞÞÞÿØØØÿÐÐÐÿÊÊÊÿÄÄÄÿ½½½ÿ···ÿ²²²ÿ®®®ÿ­­­ÿ®®®ÿ±±±ÿ¶¶¶ÿ¼¼¼ÿÁÁÁÿÇÇÇÿÎÎÎÿÕÕÕÿÝÝÝÿãããÿæææÿÜÜÜÿvvvØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÍÚÚÚÿëëëÿèèèÿèèèÿèèèÿèèèÿèèèÿáááÿÿÿÿÿ]]]ÿÛÛÛÿçççÿçççÿæææÿåååÿßßßÿÙÙÙÿÓÓÓÿÏÏÏÿÉÉÉÿÄÄÄÿÁÁÁÿ¾¾¾ÿ¾¾¾ÿ¾¾¾ÿÁÁÁÿÄÄÄÿÇÇÇÿÌÌÌÿÑÑÑÿ×××ÿÝÝÝÿãããÿäääÿçççÿÖÖÖÿ|||Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}¹ÔÔÔÿìììÿéééÿéééÿéééÿéééÿéééÿéééÿyyyÿÿÿÿÿÿ“““ÿæææÿçççÿçççÿçççÿåååÿàààÿÜÜÜÿ×××ÿÔÔÔÿÑÑÑÿÐÐÐÿÏÏÏÿÐÐÐÿÑÑÑÿÓÓÓÿÖÖÖÿÙÙÙÿÞÞÞÿãããÿåååÿåååÿäääÿèèèÿÑÑÑÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÎÎÎÿîîîÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿàààÿÿÿÿÿÿ)))ÿ|||ÿåååÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿåååÿãããÿœœœÿ©©©ÿßßßÿâââÿäääÿæææÿæææÿæææÿæææÿæææÿåååÿåååÿêêêÿËËËÿ„„„›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÈÈÈÿïïïÿëëëÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿ˜˜˜ÿÿÿÿBBBÿtttÿ   ÿŸŸŸÿÕÕÕÿéééÿéééÿèèèÿèèèÿèèèÿæææÿXXXÿÿÿ"""ÿÇÇÇÿçççÿçççÿçççÿçççÿçççÿæææÿæææÿæææÿëëëÿÇÇÇþ………‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ………uÂÂÂûðððÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿ999ÿÿÿÿÐÐÐÿ¥¥¥ÿßßßÿ­§¢ÿ°…bÿäàÜÿéééÿéééÿèèèÿXXXÿÿÿÿÿŽŽŽÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿçççÿçççÿíííÿÁÁÁùŠŠŠoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹c¼¼¼öòòòÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿÊÊÊÿÿÿÿYYYÿÜÜÜÿ¬£œÿ´ƒ[ÿ̨‰ÿ²ƒ\ÿáÚÔÿêêêÿiiiÿÿÿÿÿ...ÿãããÿéééÿéééÿéééÿèèèÿèèèÿèèèÿèèèÿèèèÿîîîÿºººõ]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽŽQ¶¶¶òóóóÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿÿÿÿÿ½½½ÿ©wPÿ¶ˆ^ÿÇ¢ÿÒ³–ÿ¶…_ÿ†zrÿÿÿÿÿÿÌÌÌÿêêêÿêêêÿêêêÿéééÿéééÿéééÿéééÿéééÿéééÿðððÿ´´´ò’’’Kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’?¯¯¯ñôôôÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿêêêÿ222ÿÿÿ333ÿáØÐÿ©uJÿ¹ŒcÿÇ£€ÿÔµ™ÿmFÿ+ÿÿÿ ÿ¶¶¶ÿëëëÿëëëÿëëëÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿñññÿ¬¬¬ò”””9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“““-¨¨¨òõõõÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿÈÈÈÿÿÿÿƒƒƒÿÛʾÿ«vJÿºŽdÿÈ£ÿÕ¸ÿ£sMÿ<&ÿÿªªªÿìììÿìììÿìììÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿòòòÿ¤¤¤ó'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ŸŸŸööööÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿ„„„ÿÿÿ ÿÈÈÈÿ¼£ÿh;ÿºŽeÿȤ‚ÿ׺Ÿÿ«|Uÿ£ˆrÿíííÿíííÿíííÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëëÿëëëÿóóóÿœœœ÷’’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽŽ ˜˜˜ü÷÷÷ÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿîîîÿ;;;ÿÿÿ&&&ÿ%%%ÿ\9ÿ£m?ÿ»fÿÉ¥ƒÿ×»ŸÿÁ“lÿѸ¤ÿîîîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿôôôÿ•••ý€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””ûõõõÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿÒÒÒÿ ÿÿÿÿÿrG$ÿ©tDÿ»gÿɦ„ÿ×¼ ÿ°xLÿÁ˜yÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿíííÿíííÿíííÿòòòÿ–––÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ðñññÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿñññÿñññÿÿÿÿÿÿÿ¡pIÿ­xHÿ¼‘gÿ³~SÿÅxÿ»ˆZÿÄÿïïïÿêæâÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿïïïÿíííÿ˜˜˜ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™âíííÿõõõÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿòòòÿòòòÿ???ÿÿÿÿÿPPPÿìèäÿ°}Uÿ§m;ÿ±Tÿ›uÿЯŽÿ¾‹_ÿɦ‰ÿ­tGÿÊ«‘ÿïïïÿïïïÿïïïÿïïïÿïïïÿðððÿéééÿ™™™ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÒèèèÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿóóóÿóóóÿ–––ÿÿÿÿÿÿÿŒŒŒÿçߨÿ¥j:ÿ§uEÿµˆ^ÿœvÿѲ’ÿ»‡[ÿ›zÿ§j:ÿǤ‰ÿðððÿðððÿðððÿðððÿòòòÿäääÿšššÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿššš¿âââÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿôôôÿÕÕÕÿ ÿÿÿÿÿÿÿÿ›››ÿåÚÓÿ¦k<ÿ«zLÿµ‰_ÿÜwÿÔ¶—ÿ¶UÿѶ¢ÿÁ˜yÿàÓÈÿñññÿñññÿñññÿòòòÿÞÞÞÿššš¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿššš©ÝÝÝÿ÷÷÷ÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿõõõÿõõõÿðððÿ555ÿÿÿÿÿÙÙÙÿkkkÿÿÿÿ¦¦¦ÿâÓÉÿ§n@ÿ­Sÿ¶ŠaÿÃwÿÕ·™ÿ³}SÿéâÝÿ¿–wÿðîíÿòòòÿñññÿóóóÿØØØÿ™™™ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———‘×××ÿùùùÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿkkkÿÿÿÿÿ«««ÿõõõÿóóóÿEEEÿÿÿÿµµµÿæÜÓÿ¨pBÿ±…Zÿ·‹bÿÄŸyÿÕ·™ÿ¸†^ÿÜ˼ÿÕ½«ÿòòòÿòòòÿõõõÿÒÒÒÿ•••‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’zÏÏÏýúúúÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿšššÿÿÿÿÿhhhÿöööÿöööÿõõõÿäääÿÿÿÿÿÌÌÌÿìåàÿªsEÿµŠbÿ¹ŽeÿÆ¡}ÿÓµ–ÿÀ•rÿÁ™zÿóòòÿóóóÿöööÿËËËú’’’sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“““hÇÇÇ÷ûûûÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿ­­­ÿÿÿÿÿ(((ÿîîîÿ÷÷÷ÿöööÿöööÿöööÿºººÿÿÿÿÿåååÿðìéÿ¯{Pÿ¸gÿ»’kÿÉ¥‚ÿÉ¡ÿ¾”sÿÜɺÿôôôÿ÷÷÷ÿÃÃÃõ“““aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””V¾¾¾óûûûÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿÊÊÊÿ ÿÿÿÿ ÿÌÌÌÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿXXXÿÿÿÿPPPÿöööÿóñðÿ¸Šeÿ»’mÿ»jÿ½kÿ¹‰aÿʨŽÿõõõÿøøøÿ¹¹¹ò”””Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’D´´´òüüüÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿÿ©©©ÿùùùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿãããÿÿÿÿÿºººÿ÷÷÷ÿöõõÿÄ ‚ÿµƒ[ÿÍ«Œÿ×»£ÿ¸ˆaÿöööÿùùùÿ±±±ñ’’’=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””2«««òüüüÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿñññÿiiiÿ"""ÿ&&&ÿ©©©ÿúúúÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿÝÝÝÿPPPÿÿÿ­­­ÿøøøÿ÷÷÷ÿ÷÷÷ÿßÏÀÿ¯xMÿÉ£…ÿµXÿ÷÷÷ÿùùùÿ¨¨¨ò”””+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ¢¢¢õýýýÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿùùùÿòòòÿëëëÿùùùÿøøøÿøøøÿøøøÿøøøÿöôóÿÕ¹¥ÿÍ­’ÿ÷÷÷ÿúúúÿŸŸŸöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’šššúþþþÿýýýÿýýýÿýýýÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿøøøÿûûûÿ———ý’’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•••ýéêéÿþþþÿþþþÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿïïïÿ•••úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———óÍÎÎÿ¢¦¥ÿž¢¡ÿ¡ ÿœ¡Ÿÿœ Ÿÿ›Ÿžÿšžÿ™žœÿ™œÿ˜œ›ÿ—›šÿ–›™ÿ•š˜ÿ•™˜ÿ”˜—ÿ“˜–ÿ’—•ÿ’–•ÿ‘•”ÿ•“ÿ”’ÿ“’ÿŽ’‘ÿ’ÿŒ‘ÿ‹Žÿ‹ŽÿŠÿ‰ŽŒÿˆ‹ÿˆŒ‹ÿ‡ŒŠÿ‹Žÿ¼¾½ÿ———îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™æÌÎÍÿ¤¨§ÿNŒ˜ÿt‹ÿN‹—ÿœ ŸÿMŠ–ÿt‹ÿLŠ–ÿ™œÿL‰•ÿt‹ÿJ‰”ÿ•š˜ÿJˆ”ÿt‹ÿI‡“ÿ’—•ÿH†’ÿs‹ÿG†‘ÿ”’ÿG…‘ÿs‹ÿF„ÿŒ‘ÿEƒÿs‹ÿEƒÿ‰ŽŒÿD‚Žÿs‹ÿC‚ÿ“‘ÿ¼¿¾ÿšššßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÖËÍÌÿ©¬«ÿrŠÿAÓèÿrŠÿž¡¡ÿrŠÿAÓèÿrŠÿ›ŸžÿrŠÿAÓèÿrŠÿ—œšÿrŠÿAÓèÿrŠÿ”™—ÿrŠÿAÓèÿrŠÿ‘–”ÿrŠÿAÓèÿrŠÿŽ“‘ÿrŠÿAÓèÿrŠÿ‹ŽÿrŠÿAÓèÿrŠÿ”™—ÿ¼¾¾ÿšššÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿššš¬ÇÉÉþÇÊÉÿoˆÿOéüÿoˆÿÆÉÈÿoˆÿOéüÿoˆÿÅÇÆÿoˆÿOéüÿoˆÿÂÅÄÿoˆÿOéüÿoˆÿÁÃÂÿoˆÿOéüÿoˆÿ¿ÂÁÿoˆÿOéüÿoˆÿ½À¿ÿoˆÿOéüÿoˆÿ»¾½ÿoˆÿOéüÿoˆÿº½»ÿ¶¸¸þ™™™§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””+ššš×“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿoˆÿOéüÿoˆÿ“““ÿšššÖ’’’*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿqŠûAÓèÿqŠûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿw…rŠõw…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿðÿÿÿàÀÀÀÀÀààààààààààààààððððððððððððððø?ø?ø?ø?ø?ø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxournal-0.4.8/src/win32/Makefile0000644000175000017500000000034011774727120016041 0ustar aurouxaurouxall: xournal.res all-recursive: all install-recursive: install: xournal.res: xournal.rc windres xournal.rc -O coff -o xournal.res distdir: cp -fp xournal.ico xournal.rc Makefile $(distdir) distclean: rm -f xournal.res xournal-0.4.8/src/win32/xournal.rc0000664000175000017500000000002611773660334016424 0ustar aurouxaurouxid ICON "xournal.ico" xournal-0.4.8/src/xo-selection.c0000644000175000017500000006173512344450671016231 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "xournal.h" #include "xo-callbacks.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-misc.h" #include "xo-paint.h" #include "xo-selection.h" /************ selection tools ***********/ void make_dashed(GnomeCanvasItem *item) { double dashlen[2]; ArtVpathDash dash; dash.n_dash = 2; dash.offset = 3.0; dash.dash = dashlen; dashlen[0] = dashlen[1] = 6.0; gnome_canvas_item_set(item, "dash", &dash, NULL); } void start_selectrect(GdkEvent *event) { double pt[2]; reset_selection(); ui.cur_item_type = ITEM_SELECTRECT; ui.selection = g_new(struct Selection, 1); ui.selection->type = ITEM_SELECTRECT; ui.selection->items = NULL; ui.selection->layer = ui.cur_layer; get_pointer_coords(event, pt); ui.selection->bbox.left = ui.selection->bbox.right = pt[0]; ui.selection->bbox.top = ui.selection->bbox.bottom = pt[1]; ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", pt[0], "x2", pt[0], "y1", pt[1], "y2", pt[1], NULL); update_cursor(); } void finalize_selectrect(void) { double x1, x2, y1, y2; GList *itemlist; struct Item *item; ui.cur_item_type = ITEM_NONE; if (ui.selection->bbox.left > ui.selection->bbox.right) { x1 = ui.selection->bbox.right; x2 = ui.selection->bbox.left; ui.selection->bbox.left = x1; ui.selection->bbox.right = x2; } else { x1 = ui.selection->bbox.left; x2 = ui.selection->bbox.right; } if (ui.selection->bbox.top > ui.selection->bbox.bottom) { y1 = ui.selection->bbox.bottom; y2 = ui.selection->bbox.top; ui.selection->bbox.top = y1; ui.selection->bbox.bottom = y2; } else { y1 = ui.selection->bbox.top; y2 = ui.selection->bbox.bottom; } for (itemlist = ui.selection->layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->bbox.left >= x1 && item->bbox.right <= x2 && item->bbox.top >= y1 && item->bbox.bottom <= y2) { ui.selection->items = g_list_append(ui.selection->items, item); } } if (ui.selection->items == NULL) { // if we clicked inside a text zone or image? item = click_is_in_text_or_image(ui.selection->layer, x1, y1); if (item!=NULL && item==click_is_in_text_or_image(ui.selection->layer, x2, y2)) { ui.selection->items = g_list_append(ui.selection->items, item); g_memmove(&(ui.selection->bbox), &(item->bbox), sizeof(struct BBox)); gnome_canvas_item_set(ui.selection->canvas_item, "x1", item->bbox.left, "x2", item->bbox.right, "y1", item->bbox.top, "y2", item->bbox.bottom, NULL); } } if (ui.selection->items == NULL) reset_selection(); else make_dashed(ui.selection->canvas_item); update_cursor(); update_copy_paste_enabled(); update_font_button(); } void start_selectregion(GdkEvent *event) { double pt[2]; reset_selection(); ui.cur_item_type = ITEM_SELECTREGION; ui.selection = g_new(struct Selection, 1); ui.selection->type = ITEM_SELECTREGION; ui.selection->items = NULL; ui.selection->layer = ui.cur_layer; get_pointer_coords(event, pt); ui.selection->bbox.left = ui.selection->bbox.right = pt[0]; ui.selection->bbox.top = ui.selection->bbox.bottom = pt[1]; realloc_cur_path(1); ui.cur_path.num_points = 1; ui.cur_path.coords[0] = ui.cur_path.coords[2] = pt[0]; ui.cur_path.coords[1] = ui.cur_path.coords[3] = pt[1]; ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_polygon_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, NULL); make_dashed(ui.selection->canvas_item); update_cursor(); } void continue_selectregion(GdkEvent *event) { double *pt; realloc_cur_path(ui.cur_path.num_points+1); pt = ui.cur_path.coords + 2*ui.cur_path.num_points; get_pointer_coords(event, pt); if (hypot(pt[0]-pt[-2], pt[1]-pt[-1]) < PIXEL_MOTION_THRESHOLD/ui.zoom) return; // not a meaningful motion ui.cur_path.num_points++; if (ui.cur_path.num_points>2) gnome_canvas_item_set(ui.selection->canvas_item, "points", &ui.cur_path, NULL); } /* check whether a point, resp. an item, is inside a lasso selection */ gboolean hittest_point(ArtSVP *lassosvp, double x, double y) { return art_svp_point_wind(lassosvp, x, y)%2; } gboolean hittest_item(ArtSVP *lassosvp, struct Item *item) { int i; if (item->type == ITEM_STROKE) { for (i=0; ipath->num_points; i++) if (!hittest_point(lassosvp, item->path->coords[2*i], item->path->coords[2*i+1])) return FALSE; return TRUE; } else return (hittest_point(lassosvp, item->bbox.left, item->bbox.top) && hittest_point(lassosvp, item->bbox.right, item->bbox.top) && hittest_point(lassosvp, item->bbox.left, item->bbox.bottom) && hittest_point(lassosvp, item->bbox.right, item->bbox.bottom)); } void finalize_selectregion(void) { GList *itemlist; struct Item *item; ArtVpath *vpath; ArtSVP *lassosvp; int i, n; double *pt; ui.cur_item_type = ITEM_NONE; // build SVP for the lasso path n = ui.cur_path.num_points; vpath = g_malloc((n+2)*sizeof(ArtVpath)); for (i=0; ilayer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (hittest_item(lassosvp, item)) { // update the selection bbox if (ui.selection->items==NULL || ui.selection->bbox.left>item->bbox.left) ui.selection->bbox.left = item->bbox.left; if (ui.selection->items==NULL || ui.selection->bbox.rightbbox.right) ui.selection->bbox.right = item->bbox.right; if (ui.selection->items==NULL || ui.selection->bbox.top>item->bbox.top) ui.selection->bbox.top = item->bbox.top; if (ui.selection->items==NULL || ui.selection->bbox.bottombbox.bottom) ui.selection->bbox.bottom = item->bbox.bottom; // add the item ui.selection->items = g_list_append(ui.selection->items, item); } } art_svp_free(lassosvp); // expand the bounding box by some amount (medium highlighter, or 3 pixels) if (ui.selection->items != NULL) { double margin = MAX(0.6*predef_thickness[TOOL_HIGHLIGHTER][THICKNESS_MEDIUM], 3.0/ui.zoom); ui.selection->bbox.top -= margin; ui.selection->bbox.bottom += margin; ui.selection->bbox.left -= margin; ui.selection->bbox.right += margin; } if (ui.selection->items == NULL) { // if we clicked inside a text zone or image? pt = ui.cur_path.coords; item = click_is_in_text_or_image(ui.selection->layer, pt[0], pt[1]); if (item!=NULL) { for (i=0; ibbox.left || pt[0]>item->bbox.right || pt[1]bbox.top || pt[1]>item->bbox.bottom) { item = NULL; break; } } } if (item!=NULL) { ui.selection->items = g_list_append(ui.selection->items, item); g_memmove(&(ui.selection->bbox), &(item->bbox), sizeof(struct BBox)); } } if (ui.selection->items == NULL) reset_selection(); else { // make a selection rectangle instead of the lasso shape gtk_object_destroy(GTK_OBJECT(ui.selection->canvas_item)); ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", ui.selection->bbox.left, "x2", ui.selection->bbox.right, "y1", ui.selection->bbox.top, "y2", ui.selection->bbox.bottom, NULL); make_dashed(ui.selection->canvas_item); ui.selection->type = ITEM_SELECTRECT; } update_cursor(); update_copy_paste_enabled(); update_font_button(); } /*** moving/resizing the selection ***/ gboolean start_movesel(GdkEvent *event) { double pt[2]; if (ui.selection==NULL) return FALSE; if (ui.cur_layer != ui.selection->layer) return FALSE; get_pointer_coords(event, pt); if (ui.selection->type == ITEM_SELECTRECT || ui.selection->type == ITEM_SELECTREGION) { if (pt[0]bbox.left || pt[0]>ui.selection->bbox.right || pt[1]bbox.top || pt[1]>ui.selection->bbox.bottom) return FALSE; ui.cur_item_type = ITEM_MOVESEL; ui.selection->anchor_x = ui.selection->last_x = pt[0]; ui.selection->anchor_y = ui.selection->last_y = pt[1]; ui.selection->orig_pageno = ui.pageno; ui.selection->move_pageno = ui.pageno; ui.selection->move_layer = ui.selection->layer; ui.selection->move_pagedelta = 0.; gnome_canvas_item_set(ui.selection->canvas_item, "dash", NULL, NULL); update_cursor(); return TRUE; } return FALSE; } gboolean start_resizesel(GdkEvent *event) { double pt[2], resize_margin, hmargin, vmargin; if (ui.selection==NULL) return FALSE; if (ui.cur_layer != ui.selection->layer) return FALSE; get_pointer_coords(event, pt); if (ui.selection->type == ITEM_SELECTRECT || ui.selection->type == ITEM_SELECTREGION) { resize_margin = RESIZE_MARGIN/ui.zoom; hmargin = (ui.selection->bbox.right-ui.selection->bbox.left)*0.3; if (hmargin>resize_margin) hmargin = resize_margin; vmargin = (ui.selection->bbox.bottom-ui.selection->bbox.top)*0.3; if (vmargin>resize_margin) vmargin = resize_margin; // make sure the click is within a box slightly bigger than the selection rectangle if (pt[0]bbox.left-resize_margin || pt[0]>ui.selection->bbox.right+resize_margin || pt[1]bbox.top-resize_margin || pt[1]>ui.selection->bbox.bottom+resize_margin) return FALSE; // now, if the click is near the edge, it's a resize operation // keep track of which edges we're close to, since those are the ones which should move ui.selection->resizing_left = (pt[0]bbox.left+hmargin); ui.selection->resizing_right = (pt[0]>ui.selection->bbox.right-hmargin); ui.selection->resizing_top = (pt[1]bbox.top+vmargin); ui.selection->resizing_bottom = (pt[1]>ui.selection->bbox.bottom-vmargin); // we're not near any edge, give up if (!(ui.selection->resizing_left || ui.selection->resizing_right || ui.selection->resizing_top || ui.selection->resizing_bottom)) return FALSE; ui.cur_item_type = ITEM_RESIZESEL; ui.selection->new_y1 = ui.selection->bbox.top; ui.selection->new_y2 = ui.selection->bbox.bottom; ui.selection->new_x1 = ui.selection->bbox.left; ui.selection->new_x2 = ui.selection->bbox.right; gnome_canvas_item_set(ui.selection->canvas_item, "dash", NULL, NULL); update_cursor_for_resize(pt); return TRUE; } return FALSE; } void start_vertspace(GdkEvent *event) { double pt[2]; GList *itemlist; struct Item *item; reset_selection(); ui.cur_item_type = ITEM_MOVESEL_VERT; ui.selection = g_new(struct Selection, 1); ui.selection->type = ITEM_MOVESEL_VERT; ui.selection->items = NULL; ui.selection->layer = ui.cur_layer; get_pointer_coords(event, pt); ui.selection->bbox.top = ui.selection->bbox.bottom = pt[1]; for (itemlist = ui.cur_layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->bbox.top >= pt[1]) { ui.selection->items = g_list_append(ui.selection->items, item); if (item->bbox.bottom > ui.selection->bbox.bottom) ui.selection->bbox.bottom = item->bbox.bottom; } } ui.selection->anchor_x = ui.selection->last_x = 0; ui.selection->anchor_y = ui.selection->last_y = pt[1]; ui.selection->orig_pageno = ui.pageno; ui.selection->move_pageno = ui.pageno; ui.selection->move_layer = ui.selection->layer; ui.selection->move_pagedelta = 0.; ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", -100.0, "x2", ui.cur_page->width+100, "y1", pt[1], "y2", pt[1], NULL); update_cursor(); } void continue_movesel(GdkEvent *event) { double pt[2], dx, dy, upmargin; GList *list; struct Item *item; int tmppageno; struct Page *tmppage; get_pointer_coords(event, pt); if (ui.view_continuous == VIEW_MODE_CONTINUOUS) pt[1] += ui.selection->move_pagedelta; if (ui.view_continuous == VIEW_MODE_HORIZONTAL) pt[0] += ui.selection->move_pagedelta; if (ui.cur_item_type == ITEM_MOVESEL_VERT) pt[0] = 0; // check for page jumps if (ui.cur_item_type == ITEM_MOVESEL_VERT) upmargin = ui.selection->bbox.bottom - ui.selection->bbox.top; else upmargin = VIEW_CONTINUOUS_SKIP; tmppageno = ui.selection->move_pageno; tmppage = g_list_nth_data(journal.pages, tmppageno); if (ui.view_continuous == VIEW_MODE_CONTINUOUS) { while (pt[1] < - upmargin) { if (tmppageno == 0) break; tmppageno--; tmppage = g_list_nth_data(journal.pages, tmppageno); pt[1] += tmppage->height + VIEW_CONTINUOUS_SKIP; ui.selection->move_pagedelta += tmppage->height + VIEW_CONTINUOUS_SKIP; } while (pt[1] > tmppage->height+VIEW_CONTINUOUS_SKIP) { if (tmppageno == journal.npages-1) break; pt[1] -= tmppage->height + VIEW_CONTINUOUS_SKIP; ui.selection->move_pagedelta -= tmppage->height + VIEW_CONTINUOUS_SKIP; tmppageno++; tmppage = g_list_nth_data(journal.pages, tmppageno); } } if (ui.view_continuous == VIEW_MODE_HORIZONTAL) { while (pt[0] < -VIEW_CONTINUOUS_SKIP) { if (tmppageno == 0) break; tmppageno--; tmppage = g_list_nth_data(journal.pages, tmppageno); pt[0] += tmppage->width + VIEW_CONTINUOUS_SKIP; ui.selection->move_pagedelta += tmppage->width + VIEW_CONTINUOUS_SKIP; } while (pt[0] > tmppage->width+VIEW_CONTINUOUS_SKIP) { if (tmppageno == journal.npages-1) break; pt[0] -= tmppage->width + VIEW_CONTINUOUS_SKIP; ui.selection->move_pagedelta -= tmppage->width + VIEW_CONTINUOUS_SKIP; tmppageno++; tmppage = g_list_nth_data(journal.pages, tmppageno); } } if (tmppageno != ui.selection->move_pageno) { // move to a new page ! ui.selection->move_pageno = tmppageno; if (tmppageno == ui.selection->orig_pageno) ui.selection->move_layer = ui.selection->layer; else ui.selection->move_layer = (struct Layer *)(g_list_last( ((struct Page *)g_list_nth_data(journal.pages, tmppageno))->layers)->data); gnome_canvas_item_reparent(ui.selection->canvas_item, ui.selection->move_layer->group); for (list = ui.selection->items; list!=NULL; list = list->next) { item = (struct Item *)list->data; if (item->canvas_item!=NULL) gnome_canvas_item_reparent(item->canvas_item, ui.selection->move_layer->group); } // avoid a refresh bug gnome_canvas_item_move(GNOME_CANVAS_ITEM(ui.selection->move_layer->group), 0., 0.); if (ui.cur_item_type == ITEM_MOVESEL_VERT) gnome_canvas_item_set(ui.selection->canvas_item, "x2", tmppage->width+100, "y1", ui.selection->anchor_y+ui.selection->move_pagedelta, NULL); /* note: moving across pages for vert. space only works in vertical continuous mode */ } // now, process things normally dx = pt[0] - ui.selection->last_x; dy = pt[1] - ui.selection->last_y; if (hypot(dx,dy) < 1) return; // don't move subpixel ui.selection->last_x = pt[0]; ui.selection->last_y = pt[1]; // move the canvas items if (ui.cur_item_type == ITEM_MOVESEL_VERT) gnome_canvas_item_set(ui.selection->canvas_item, "y2", pt[1], NULL); else gnome_canvas_item_move(ui.selection->canvas_item, dx, dy); for (list = ui.selection->items; list != NULL; list = list->next) { item = (struct Item *)list->data; if (item->canvas_item != NULL) gnome_canvas_item_move(item->canvas_item, dx, dy); } } void continue_resizesel(GdkEvent *event) { double pt[2]; get_pointer_coords(event, pt); if (ui.selection->resizing_top) ui.selection->new_y1 = pt[1]; if (ui.selection->resizing_bottom) ui.selection->new_y2 = pt[1]; if (ui.selection->resizing_left) ui.selection->new_x1 = pt[0]; if (ui.selection->resizing_right) ui.selection->new_x2 = pt[0]; gnome_canvas_item_set(ui.selection->canvas_item, "x1", ui.selection->new_x1, "x2", ui.selection->new_x2, "y1", ui.selection->new_y1, "y2", ui.selection->new_y2, NULL); } void finalize_movesel(void) { GList *list, *link; if (ui.selection->items != NULL) { prepare_new_undo(); undo->type = ITEM_MOVESEL; undo->itemlist = g_list_copy(ui.selection->items); undo->val_x = ui.selection->last_x - ui.selection->anchor_x; undo->val_y = ui.selection->last_y - ui.selection->anchor_y; undo->layer = ui.selection->layer; undo->layer2 = ui.selection->move_layer; undo->auxlist = NULL; // build auxlist = pointers to Item's just before ours (for depths) for (list = ui.selection->items; list!=NULL; list = list->next) { link = g_list_find(ui.selection->layer->items, list->data); if (link!=NULL) link = link->prev; undo->auxlist = g_list_append(undo->auxlist, ((link!=NULL) ? link->data : NULL)); } ui.selection->layer = ui.selection->move_layer; move_journal_items_by(undo->itemlist, undo->val_x, undo->val_y, undo->layer, undo->layer2, (undo->layer == undo->layer2)?undo->auxlist:NULL); } if (ui.selection->move_pageno!=ui.selection->orig_pageno) do_switch_page(ui.selection->move_pageno, FALSE, FALSE); if (ui.cur_item_type == ITEM_MOVESEL_VERT) reset_selection(); else { ui.selection->bbox.left += undo->val_x; ui.selection->bbox.right += undo->val_x; ui.selection->bbox.top += undo->val_y; ui.selection->bbox.bottom += undo->val_y; make_dashed(ui.selection->canvas_item); /* update selection box object's offset to be trivial, and its internal coordinates to agree with those of the bbox; need this since resize operations will modify the box by setting its coordinates directly */ gnome_canvas_item_affine_absolute(ui.selection->canvas_item, NULL); gnome_canvas_item_set(ui.selection->canvas_item, "x1", ui.selection->bbox.left, "x2", ui.selection->bbox.right, "y1", ui.selection->bbox.top, "y2", ui.selection->bbox.bottom, NULL); } ui.cur_item_type = ITEM_NONE; update_cursor(); } #define SCALING_EPSILON 0.001 void finalize_resizesel(void) { struct Item *item; // build the affine transformation double offset_x, offset_y, scaling_x, scaling_y; scaling_x = (ui.selection->new_x2 - ui.selection->new_x1) / (ui.selection->bbox.right - ui.selection->bbox.left); scaling_y = (ui.selection->new_y2 - ui.selection->new_y1) / (ui.selection->bbox.bottom - ui.selection->bbox.top); // couldn't undo a resize-by-zero... if (fabs(scaling_x)new_x1 - ui.selection->bbox.left * scaling_x; offset_y = ui.selection->new_y1 - ui.selection->bbox.top * scaling_y; if (ui.selection->items != NULL) { // create the undo information prepare_new_undo(); undo->type = ITEM_RESIZESEL; undo->itemlist = g_list_copy(ui.selection->items); undo->auxlist = NULL; undo->scaling_x = scaling_x; undo->scaling_y = scaling_y; undo->val_x = offset_x; undo->val_y = offset_y; // actually do the resize operation resize_journal_items_by(ui.selection->items, scaling_x, scaling_y, offset_x, offset_y); } if (scaling_x>0) { ui.selection->bbox.left = ui.selection->new_x1; ui.selection->bbox.right = ui.selection->new_x2; } else { ui.selection->bbox.left = ui.selection->new_x2; ui.selection->bbox.right = ui.selection->new_x1; } if (scaling_y>0) { ui.selection->bbox.top = ui.selection->new_y1; ui.selection->bbox.bottom = ui.selection->new_y2; } else { ui.selection->bbox.top = ui.selection->new_y2; ui.selection->bbox.bottom = ui.selection->new_y1; } make_dashed(ui.selection->canvas_item); ui.cur_item_type = ITEM_NONE; update_cursor(); } void selection_delete(void) { struct UndoErasureData *erasure; GList *itemlist; struct Item *item; if (ui.selection == NULL) return; prepare_new_undo(); undo->type = ITEM_ERASURE; undo->layer = ui.selection->layer; undo->erasurelist = NULL; for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->canvas_item!=NULL) gtk_object_destroy(GTK_OBJECT(item->canvas_item)); erasure = g_new(struct UndoErasureData, 1); erasure->item = item; erasure->npos = g_list_index(ui.selection->layer->items, item); erasure->nrepl = 0; erasure->replacement_items = NULL; ui.selection->layer->items = g_list_remove(ui.selection->layer->items, item); ui.selection->layer->nitems--; undo->erasurelist = g_list_prepend(undo->erasurelist, erasure); } reset_selection(); /* NOTE: the erasurelist is built backwards; this guarantees that, upon undo, the erasure->npos fields give the correct position where each item should be reinserted as the list is traversed in the forward direction */ } // modify the color or thickness of pen strokes in a selection void recolor_selection(int color_no, guint color_rgba) { GList *itemlist; struct Item *item; struct Brush *brush; GnomeCanvasGroup *group; if (ui.selection == NULL) return; prepare_new_undo(); undo->type = ITEM_REPAINTSEL; undo->itemlist = NULL; undo->auxlist = NULL; for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type != ITEM_STROKE && item->type != ITEM_TEXT) continue; if (item->type == ITEM_STROKE && item->brush.tool_type!=TOOL_PEN) continue; // store info for undo undo->itemlist = g_list_append(undo->itemlist, item); brush = (struct Brush *)g_malloc(sizeof(struct Brush)); g_memmove(brush, &(item->brush), sizeof(struct Brush)); undo->auxlist = g_list_append(undo->auxlist, brush); // repaint the stroke item->brush.color_no = color_no; item->brush.color_rgba = color_rgba | 0xff; // no alpha if (item->canvas_item!=NULL) { if (!item->brush.variable_width) gnome_canvas_item_set(item->canvas_item, "fill-color-rgba", item->brush.color_rgba, NULL); else { group = (GnomeCanvasGroup *) item->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(item->canvas_item)); make_canvas_item_one(group, item); } } } } void rethicken_selection(int val) { GList *itemlist; struct Item *item; struct Brush *brush; GnomeCanvasGroup *group; if (ui.selection == NULL) return; prepare_new_undo(); undo->type = ITEM_REPAINTSEL; undo->itemlist = NULL; undo->auxlist = NULL; for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type != ITEM_STROKE || item->brush.tool_type!=TOOL_PEN) continue; // store info for undo undo->itemlist = g_list_append(undo->itemlist, item); brush = (struct Brush *)g_malloc(sizeof(struct Brush)); g_memmove(brush, &(item->brush), sizeof(struct Brush)); undo->auxlist = g_list_append(undo->auxlist, brush); // repaint the stroke item->brush.thickness_no = val; item->brush.thickness = predef_thickness[TOOL_PEN][val]; if (item->canvas_item!=NULL) { if (!item->brush.variable_width) gnome_canvas_item_set(item->canvas_item, "width-units", item->brush.thickness, NULL); else { group = (GnomeCanvasGroup *) item->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(item->canvas_item)); item->brush.variable_width = FALSE; make_canvas_item_one(group, item); } } } } xournal-0.4.8/src/xo-callbacks.c0000644000175000017500000036545112353616732016167 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "xournal.h" #include "xo-callbacks.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-misc.h" #include "xo-file.h" #include "xo-paint.h" #include "xo-selection.h" #include "xo-print.h" #include "xo-shapes.h" void on_fileNew_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (close_journal()) { new_journal(); ui.zoom = ui.startup_zoom; update_page_stuff(); gtk_adjustment_set_value(gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)), 0); gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); } } void on_fileNewBackground_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog, *attach_opt; GtkFileFilter *filt_all, *filt_pdf; char *filename; int file_domain; gboolean success; end_text(); if (!ok_to_close()) return; // user aborted on save confirmation dialog = gtk_file_chooser_dialog_new(_("Open PDF"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_pdf = gtk_file_filter_new(); gtk_file_filter_set_name(filt_pdf, _("PDF files")); gtk_file_filter_add_pattern(filt_pdf, "*.pdf"); gtk_file_filter_add_pattern(filt_pdf, "*.PDF"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pdf); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path); attach_opt = gtk_check_button_new_with_label(_("Attach file to the journal")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(attach_opt), FALSE); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER (dialog), attach_opt); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(attach_opt))) file_domain = DOMAIN_ATTACH; else file_domain = DOMAIN_ABSOLUTE; gtk_widget_destroy(dialog); set_cursor_busy(TRUE); ui.saved = TRUE; // force close_journal to work close_journal(); while (bgpdf.status != STATUS_NOT_INIT) { // waiting for pdf processes to finish dying gtk_main_iteration(); } new_journal(); ui.zoom = ui.startup_zoom; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); update_page_stuff(); success = init_bgpdf(filename, TRUE, file_domain); set_cursor_busy(FALSE); if (success) { g_free(filename); return; } /* open failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(filename); } void on_fileOpen_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog; GtkFileFilter *filt_all, *filt_xoj; char *filename; gboolean success; end_text(); if (!ok_to_close()) return; // user aborted on save confirmation dialog = gtk_file_chooser_dialog_new(_("Open Journal"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_xoj = gtk_file_filter_new(); gtk_file_filter_set_name(filt_xoj, _("Xournal files")); gtk_file_filter_add_pattern(filt_xoj, "*.xoj"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_xoj); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy(dialog); set_cursor_busy(TRUE); success = open_journal(filename); set_cursor_busy(FALSE); if (success) { g_free(filename); return; } /* open failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(filename); } void on_fileSave_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog; end_text(); if (ui.filename == NULL) { on_fileSaveAs_activate(menuitem, user_data); return; } set_cursor_busy(TRUE); if (save_journal(ui.filename, FALSE)) { // success autosave_cleanup(&ui.autosave_filename_list); set_cursor_busy(FALSE); ui.saved = TRUE; return; } set_cursor_busy(FALSE); /* save failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error saving file '%s'"), ui.filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void on_fileSaveAs_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog, *warning_dialog; GtkFileFilter *filt_all, *filt_xoj; char *filename; char stime[30]; time_t curtime; gboolean warn; struct stat stat_buf; end_text(); dialog = gtk_file_chooser_dialog_new(_("Save Journal"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filename = candidate_save_filename(); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), filename); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), xo_basename(filename, FALSE)); g_free(filename); filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_xoj = gtk_file_filter_new(); gtk_file_filter_set_name(filt_xoj, _("Xournal files")); gtk_file_filter_add_pattern(filt_xoj, "*.xoj"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_xoj); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); // somehow this doesn't seem to be set by default gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); do { if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); warn = g_file_test (filename, G_FILE_TEST_EXISTS); if (warn) { // ok to overwrite an empty file if (!g_stat(filename, &stat_buf)) if (stat_buf.st_size == 0) warn=FALSE; } if (warn && ui.filename!=NULL) { // ok to overwrite oneself if (ui.filename[0]=='/' && !strcmp(ui.filename, filename)) warn=FALSE; if (ui.filename[0]!='/' && g_str_has_suffix(filename, ui.filename)) warn=FALSE; } if (warn) { warning_dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Should the file %s be overwritten?"), filename); if (gtk_dialog_run(GTK_DIALOG(warning_dialog)) == GTK_RESPONSE_YES) warn = FALSE; gtk_widget_destroy(warning_dialog); } } while (warn); gtk_widget_destroy(dialog); set_cursor_busy(TRUE); if (save_journal(filename, FALSE)) { // success autosave_cleanup(&ui.autosave_filename_list); ui.saved = TRUE; set_cursor_busy(FALSE); update_file_name(filename); return; } set_cursor_busy(FALSE); /* save failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error saving file '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(filename); } void on_filePrintOptions_activate (GtkMenuItem *menuitem, gpointer user_data) { } void on_filePrint_activate (GtkMenuItem *menuitem, gpointer user_data) { #if GTK_CHECK_VERSION(2, 10, 0) GtkPrintOperation *print; GtkPrintOperationResult res; int fromPage, toPage; int response; char *in_fn, *p; end_text(); if (!gtk_check_version(2, 10, 0)) { print = gtk_print_operation_new(); /* if (!ui.print_settings) ui.print_settings = gtk_print_settings_new(); if (ui.filename!=NULL) { if (g_str_has_suffix(ui.filename, ".xoj")) { in_fn = g_strdup(ui.filename); g_strlcpy(g_strrstr(in_fn, "xoj"), "pdf", 4); } else in_fn = g_strdup_printf("%s.pdf", ui.filename); gtk_print_settings_set(ui.print_settings, GTK_PRINT_SETTINGS_OUTPUT_URI, g_filename_to_uri(in_fn, NULL, NULL)); g_free(in_fn); } */ if (ui.print_settings!=NULL) gtk_print_operation_set_print_settings (print, ui.print_settings); gtk_print_operation_set_n_pages(print, journal.npages); gtk_print_operation_set_current_page(print, ui.pageno); gtk_print_operation_set_show_progress(print, TRUE); if (ui.filename!=NULL) { gtk_print_operation_set_job_name(print, xo_basename(ui.filename, FALSE)); } g_signal_connect (print, "draw_page", G_CALLBACK (print_job_render_page), NULL); res = gtk_print_operation_run(print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(winMain), NULL); if (res == GTK_PRINT_OPERATION_RESULT_APPLY) { if (ui.print_settings!=NULL) g_object_unref(ui.print_settings); ui.print_settings = g_object_ref(gtk_print_operation_get_print_settings(print)); } g_object_unref(print); } #endif } void on_filePrintPDF_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog, *warning_dialog; GtkFileFilter *filt_all, *filt_pdf; char *filename, *in_fn; char stime[30]; time_t curtime; gboolean warn, prefer_legacy; end_text(); dialog = gtk_file_chooser_dialog_new(_("Export to PDF"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif in_fn = candidate_save_filename(); if (g_str_has_suffix(in_fn, ".xoj")) g_strlcpy(g_strrstr(in_fn, "xoj"), "pdf", 4); else { filename = g_strdup_printf("%s.pdf", in_fn); g_free(in_fn); in_fn = filename; } gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), in_fn); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), xo_basename(in_fn, FALSE)); filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_pdf = gtk_file_filter_new(); gtk_file_filter_set_name(filt_pdf, _("PDF files")); gtk_file_filter_add_pattern(filt_pdf, "*.pdf"); gtk_file_filter_add_pattern(filt_pdf, "*.PDF"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pdf); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); g_free(in_fn); do { if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); warn = g_file_test(filename, G_FILE_TEST_EXISTS); if (warn) { warning_dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Should the file %s be overwritten?"), filename); if (gtk_dialog_run(GTK_DIALOG(warning_dialog)) == GTK_RESPONSE_YES) warn = FALSE; gtk_widget_destroy(warning_dialog); } } while(warn); gtk_widget_destroy(dialog); set_cursor_busy(TRUE); prefer_legacy = ui.exportpdf_prefer_legacy; if (prefer_legacy) { // try printing via our own PDF parser and generator if (!print_to_pdf(filename)) prefer_legacy = FALSE; // if failed, fall back to cairo } if (!prefer_legacy) { // try printing via cairo if (!print_to_pdf_cairo(filename)) { set_cursor_busy(FALSE); dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error creating file '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } } set_cursor_busy(FALSE); g_free(filename); } void on_fileQuit_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (ok_to_close()) gtk_main_quit (); } void on_editUndo_activate (GtkMenuItem *menuitem, gpointer user_data) { struct UndoItem *u; GList *list, *itemlist; struct UndoErasureData *erasure; struct Item *it; struct Brush tmp_brush; struct Background *tmp_bg; double tmp_x, tmp_y; gchar *tmpstr; GnomeCanvasGroup *group; end_text(); if (undo == NULL) return; // nothing to undo! reset_selection(); // safer reset_recognizer(); // safer if (undo->type == ITEM_STROKE || undo->type == ITEM_TEXT || undo->type == ITEM_IMAGE) { // we're keeping the stroke info, but deleting the canvas item gtk_object_destroy(GTK_OBJECT(undo->item->canvas_item)); undo->item->canvas_item = NULL; // we also remove the object from its layer! undo->layer->items = g_list_remove(undo->layer->items, undo->item); undo->layer->nitems--; } else if (undo->type == ITEM_ERASURE || undo->type == ITEM_RECOGNIZER) { for (list = undo->erasurelist; list!=NULL; list = list->next) { erasure = (struct UndoErasureData *)list->data; // delete all the created items for (itemlist = erasure->replacement_items; itemlist!=NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; gtk_object_destroy(GTK_OBJECT(it->canvas_item)); it->canvas_item = NULL; undo->layer->items = g_list_remove(undo->layer->items, it); undo->layer->nitems--; } // recreate the deleted one make_canvas_item_one(undo->layer->group, erasure->item); undo->layer->items = g_list_insert(undo->layer->items, erasure->item, erasure->npos); if (erasure->npos == 0) lower_canvas_item_to(undo->layer->group, erasure->item->canvas_item, NULL); else lower_canvas_item_to(undo->layer->group, erasure->item->canvas_item, ((struct Item *)g_list_nth_data(undo->layer->items, erasure->npos-1))->canvas_item); undo->layer->nitems++; } } else if (undo->type == ITEM_NEW_BG_ONE || undo->type == ITEM_NEW_BG_RESIZE || undo->type == ITEM_PAPER_RESIZE) { if (undo->type != ITEM_PAPER_RESIZE) { // swap the two bg's tmp_bg = undo->page->bg; undo->page->bg = undo->bg; undo->bg = tmp_bg; undo->page->bg->canvas_item = undo->bg->canvas_item; undo->bg->canvas_item = NULL; } if (undo->type != ITEM_NEW_BG_ONE) { tmp_x = undo->page->width; tmp_y = undo->page->height; undo->page->width = undo->val_x; undo->page->height = undo->val_y; undo->val_x = tmp_x; undo->val_y = tmp_y; make_page_clipbox(undo->page); } update_canvas_bg(undo->page); do_switch_page(g_list_index(journal.pages, undo->page), TRUE, TRUE); } else if (undo->type == ITEM_NEW_DEFAULT_BG) { tmp_bg = ui.default_page.bg; ui.default_page.bg = undo->bg; undo->bg = tmp_bg; tmp_x = ui.default_page.width; tmp_y = ui.default_page.height; ui.default_page.width = undo->val_x; ui.default_page.height = undo->val_y; undo->val_x = tmp_x; undo->val_y = tmp_y; } else if (undo->type == ITEM_NEW_PAGE) { // unmap the page; keep the page & its empty layer in memory if (undo->page->group!=NULL) gtk_object_destroy(GTK_OBJECT(undo->page->group)); // also destroys the background and layer's canvas items undo->page->group = NULL; undo->page->bg->canvas_item = NULL; journal.pages = g_list_remove(journal.pages, undo->page); journal.npages--; if (ui.cur_page == undo->page) ui.cur_page = NULL; // so do_switch_page() won't try to remap the layers of the defunct page if (ui.pageno >= undo->val) ui.pageno--; if (ui.pageno < 0) ui.pageno = 0; do_switch_page(ui.pageno, TRUE, TRUE); } else if (undo->type == ITEM_DELETE_PAGE) { journal.pages = g_list_insert(journal.pages, undo->page, undo->val); journal.npages++; make_canvas_items(); // re-create the canvas items do_switch_page(undo->val, TRUE, TRUE); } else if (undo->type == ITEM_MOVESEL) { for (itemlist = undo->itemlist; itemlist != NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; if (it->canvas_item != NULL) { if (undo->layer != undo->layer2) gnome_canvas_item_reparent(it->canvas_item, undo->layer->group); gnome_canvas_item_move(it->canvas_item, -undo->val_x, -undo->val_y); } } move_journal_items_by(undo->itemlist, -undo->val_x, -undo->val_y, undo->layer2, undo->layer, undo->auxlist); } else if (undo->type == ITEM_RESIZESEL) { resize_journal_items_by(undo->itemlist, 1/undo->scaling_x, 1/undo->scaling_y, -undo->val_x/undo->scaling_x, -undo->val_y/undo->scaling_y); } else if (undo->type == ITEM_PASTE) { for (itemlist = undo->itemlist; itemlist != NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; gtk_object_destroy(GTK_OBJECT(it->canvas_item)); it->canvas_item = NULL; undo->layer->items = g_list_remove(undo->layer->items, it); undo->layer->nitems--; } } else if (undo->type == ITEM_NEW_LAYER) { // unmap the layer; keep the empty layer in memory if (undo->layer->group!=NULL) gtk_object_destroy(GTK_OBJECT(undo->layer->group)); undo->layer->group = NULL; undo->page->layers = g_list_remove(undo->page->layers, undo->layer); undo->page->nlayers--; do_switch_page(ui.pageno, FALSE, FALSE); // don't stay with bad cur_layer info } else if (undo->type == ITEM_DELETE_LAYER) { // special case of -1: deleted the last layer, created a new one if (undo->val == -1) { if (undo->layer2->group!=NULL) gtk_object_destroy(GTK_OBJECT(undo->layer2->group)); undo->layer2->group = NULL; undo->page->layers = g_list_remove(undo->page->layers, undo->layer2); undo->page->nlayers--; } // re-map the layer undo->layer->group = (GnomeCanvasGroup *) gnome_canvas_item_new( undo->page->group, gnome_canvas_group_get_type(), NULL); lower_canvas_item_to(undo->page->group, GNOME_CANVAS_ITEM(undo->layer->group), (undo->val >= 1) ? GNOME_CANVAS_ITEM(((struct Layer *) g_list_nth_data(undo->page->layers, undo->val-1))->group) : undo->page->bg->canvas_item); undo->page->layers = g_list_insert(undo->page->layers, undo->layer, (undo->val >= 0) ? undo->val:0); undo->page->nlayers++; for (itemlist = undo->layer->items; itemlist!=NULL; itemlist = itemlist->next) make_canvas_item_one(undo->layer->group, (struct Item *)itemlist->data); do_switch_page(ui.pageno, FALSE, FALSE); // show the restored layer & others... } else if (undo->type == ITEM_REPAINTSEL) { for (itemlist = undo->itemlist, list = undo->auxlist; itemlist!=NULL; itemlist = itemlist->next, list = list->next) { it = (struct Item *)itemlist->data; g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush)); g_memmove(&(it->brush), list->data, sizeof(struct Brush)); g_memmove(list->data, &tmp_brush, sizeof(struct Brush)); if (it->type == ITEM_STROKE && it->canvas_item != NULL) { // remark: a variable-width item might have lost its variable-width group = (GnomeCanvasGroup *) it->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(it->canvas_item)); make_canvas_item_one(group, it); } if (it->type == ITEM_TEXT && it->canvas_item != NULL) gnome_canvas_item_set(it->canvas_item, "fill-color-rgba", it->brush.color_rgba, NULL); } } else if (undo->type == ITEM_TEXT_EDIT) { tmpstr = undo->str; undo->str = undo->item->text; undo->item->text = tmpstr; gnome_canvas_item_set(undo->item->canvas_item, "text", tmpstr, NULL); update_item_bbox(undo->item); } else if (undo->type == ITEM_TEXT_ATTRIB) { tmpstr = undo->str; undo->str = undo->item->font_name; undo->item->font_name = tmpstr; tmp_x = undo->val_x; undo->val_x = undo->item->font_size; undo->item->font_size = tmp_x; g_memmove(&tmp_brush, undo->brush, sizeof(struct Brush)); g_memmove(undo->brush, &(undo->item->brush), sizeof(struct Brush)); g_memmove(&(undo->item->brush), &tmp_brush, sizeof(struct Brush)); gnome_canvas_item_set(undo->item->canvas_item, "fill-color-rgba", undo->item->brush.color_rgba, NULL); update_text_item_displayfont(undo->item); update_item_bbox(undo->item); } // move item from undo to redo stack u = undo; undo = undo->next; u->next = redo; redo = u; ui.saved = FALSE; ui.need_autosave = TRUE; update_undo_redo_enabled(); if (u->multiop & MULTIOP_CONT_UNDO) on_editUndo_activate(NULL,NULL); // loop } void on_editRedo_activate (GtkMenuItem *menuitem, gpointer user_data) { struct UndoItem *u; GList *list, *itemlist, *target; struct UndoErasureData *erasure; struct Item *it; struct Brush tmp_brush; struct Background *tmp_bg; struct Layer *l; double tmp_x, tmp_y; gchar *tmpstr; GnomeCanvasGroup *group; end_text(); if (redo == NULL) return; // nothing to redo! reset_selection(); // safer reset_recognizer(); // safer if (redo->type == ITEM_STROKE || redo->type == ITEM_TEXT || redo->type == ITEM_IMAGE) { // re-create the canvas_item make_canvas_item_one(redo->layer->group, redo->item); // reinsert the item on its layer redo->layer->items = g_list_append(redo->layer->items, redo->item); redo->layer->nitems++; } else if (redo->type == ITEM_ERASURE || redo->type == ITEM_RECOGNIZER) { for (list = redo->erasurelist; list!=NULL; list = list->next) { erasure = (struct UndoErasureData *)list->data; target = g_list_find(redo->layer->items, erasure->item); // re-create all the created items for (itemlist = erasure->replacement_items; itemlist!=NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; make_canvas_item_one(redo->layer->group, it); redo->layer->items = g_list_insert_before(redo->layer->items, target, it); redo->layer->nitems++; lower_canvas_item_to(redo->layer->group, it->canvas_item, erasure->item->canvas_item); } // re-delete the deleted one gtk_object_destroy(GTK_OBJECT(erasure->item->canvas_item)); erasure->item->canvas_item = NULL; redo->layer->items = g_list_delete_link(redo->layer->items, target); redo->layer->nitems--; } } else if (redo->type == ITEM_NEW_BG_ONE || redo->type == ITEM_NEW_BG_RESIZE || redo->type == ITEM_PAPER_RESIZE) { if (redo->type != ITEM_PAPER_RESIZE) { // swap the two bg's tmp_bg = redo->page->bg; redo->page->bg = redo->bg; redo->bg = tmp_bg; redo->page->bg->canvas_item = redo->bg->canvas_item; redo->bg->canvas_item = NULL; } if (redo->type != ITEM_NEW_BG_ONE) { tmp_x = redo->page->width; tmp_y = redo->page->height; redo->page->width = redo->val_x; redo->page->height = redo->val_y; redo->val_x = tmp_x; redo->val_y = tmp_y; make_page_clipbox(redo->page); } update_canvas_bg(redo->page); do_switch_page(g_list_index(journal.pages, redo->page), TRUE, TRUE); } else if (redo->type == ITEM_NEW_DEFAULT_BG) { tmp_bg = ui.default_page.bg; ui.default_page.bg = redo->bg; redo->bg = tmp_bg; tmp_x = ui.default_page.width; tmp_y = ui.default_page.height; ui.default_page.width = redo->val_x; ui.default_page.height = redo->val_y; redo->val_x = tmp_x; redo->val_y = tmp_y; } else if (redo->type == ITEM_NEW_PAGE) { // remap the page redo->page->bg->canvas_item = NULL; redo->page->group = (GnomeCanvasGroup *) gnome_canvas_item_new( gnome_canvas_root(canvas), gnome_canvas_clipgroup_get_type(), NULL); make_page_clipbox(redo->page); update_canvas_bg(redo->page); l = (struct Layer *)redo->page->layers->data; l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( redo->page->group, gnome_canvas_group_get_type(), NULL); journal.pages = g_list_insert(journal.pages, redo->page, redo->val); journal.npages++; do_switch_page(redo->val, TRUE, TRUE); } else if (redo->type == ITEM_DELETE_PAGE) { // unmap all the canvas items gtk_object_destroy(GTK_OBJECT(redo->page->group)); redo->page->group = NULL; redo->page->bg->canvas_item = NULL; for (list = redo->page->layers; list!=NULL; list = list->next) { l = (struct Layer *)list->data; for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) ((struct Item *)itemlist->data)->canvas_item = NULL; l->group = NULL; } journal.pages = g_list_remove(journal.pages, redo->page); journal.npages--; if (ui.pageno > redo->val || ui.pageno == journal.npages) ui.pageno--; ui.cur_page = NULL; // so do_switch_page() won't try to remap the layers of the defunct page do_switch_page(ui.pageno, TRUE, TRUE); } else if (redo->type == ITEM_MOVESEL) { for (itemlist = redo->itemlist; itemlist != NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; if (it->canvas_item != NULL) { if (redo->layer != redo->layer2) gnome_canvas_item_reparent(it->canvas_item, redo->layer2->group); gnome_canvas_item_move(it->canvas_item, redo->val_x, redo->val_y); } } move_journal_items_by(redo->itemlist, redo->val_x, redo->val_y, redo->layer, redo->layer2, NULL); } else if (redo->type == ITEM_RESIZESEL) { resize_journal_items_by(redo->itemlist, redo->scaling_x, redo->scaling_y, redo->val_x, redo->val_y); } else if (redo->type == ITEM_PASTE) { for (itemlist = redo->itemlist; itemlist != NULL; itemlist = itemlist->next) { it = (struct Item *)itemlist->data; make_canvas_item_one(redo->layer->group, it); redo->layer->items = g_list_append(redo->layer->items, it); redo->layer->nitems++; } } else if (redo->type == ITEM_NEW_LAYER) { redo->layer->group = (GnomeCanvasGroup *) gnome_canvas_item_new( redo->page->group, gnome_canvas_group_get_type(), NULL); lower_canvas_item_to(redo->page->group, GNOME_CANVAS_ITEM(redo->layer->group), (redo->val >= 1) ? GNOME_CANVAS_ITEM(((struct Layer *) g_list_nth_data(redo->page->layers, redo->val-1))->group) : redo->page->bg->canvas_item); redo->page->layers = g_list_insert(redo->page->layers, redo->layer, redo->val); redo->page->nlayers++; do_switch_page(ui.pageno, FALSE, FALSE); } else if (redo->type == ITEM_DELETE_LAYER) { gtk_object_destroy(GTK_OBJECT(redo->layer->group)); redo->layer->group = NULL; for (list=redo->layer->items; list!=NULL; list=list->next) ((struct Item *)list->data)->canvas_item = NULL; redo->page->layers = g_list_remove(redo->page->layers, redo->layer); redo->page->nlayers--; if (redo->val == -1) { redo->layer2->group = (GnomeCanvasGroup *)gnome_canvas_item_new( redo->page->group, gnome_canvas_group_get_type(), NULL); redo->page->layers = g_list_append(redo->page->layers, redo->layer2); redo->page->nlayers++; } do_switch_page(ui.pageno, FALSE, FALSE); } else if (redo->type == ITEM_REPAINTSEL) { for (itemlist = redo->itemlist, list = redo->auxlist; itemlist!=NULL; itemlist = itemlist->next, list = list->next) { it = (struct Item *)itemlist->data; g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush)); g_memmove(&(it->brush), list->data, sizeof(struct Brush)); g_memmove(list->data, &tmp_brush, sizeof(struct Brush)); if (it->type == ITEM_STROKE && it->canvas_item != NULL) { // remark: a variable-width item might have lost its variable-width group = (GnomeCanvasGroup *) it->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(it->canvas_item)); make_canvas_item_one(group, it); } if (it->type == ITEM_TEXT && it->canvas_item != NULL) gnome_canvas_item_set(it->canvas_item, "fill-color-rgba", it->brush.color_rgba, NULL); if (it->type == ITEM_IMAGE && it->canvas_item != NULL) { // remark: a variable-width item might have lost its variable-width group = (GnomeCanvasGroup *) it->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(it->canvas_item)); make_canvas_item_one(group, it); } } } else if (redo->type == ITEM_TEXT_EDIT) { tmpstr = redo->str; redo->str = redo->item->text; redo->item->text = tmpstr; gnome_canvas_item_set(redo->item->canvas_item, "text", tmpstr, NULL); update_item_bbox(redo->item); } else if (redo->type == ITEM_TEXT_ATTRIB) { tmpstr = redo->str; redo->str = redo->item->font_name; redo->item->font_name = tmpstr; tmp_x = redo->val_x; redo->val_x = redo->item->font_size; redo->item->font_size = tmp_x; g_memmove(&tmp_brush, redo->brush, sizeof(struct Brush)); g_memmove(redo->brush, &(redo->item->brush), sizeof(struct Brush)); g_memmove(&(redo->item->brush), &tmp_brush, sizeof(struct Brush)); gnome_canvas_item_set(redo->item->canvas_item, "fill-color-rgba", redo->item->brush.color_rgba, NULL); update_text_item_displayfont(redo->item); update_item_bbox(redo->item); } // move item from redo to undo stack u = redo; redo = redo->next; u->next = undo; undo = u; ui.saved = FALSE; ui.need_autosave = TRUE; update_undo_redo_enabled(); if (u->multiop & MULTIOP_CONT_REDO) on_editRedo_activate(NULL,NULL); // loop } void on_editCut_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); selection_to_clip(); selection_delete(); } void on_editCopy_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); selection_to_clip(); } void on_editPaste_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); clipboard_paste(); } void on_editDelete_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); selection_delete(); } void do_view_modeswitch(int view_mode) { GtkAdjustment *v_adj, *h_adj; double xscroll, yscroll; struct Page *pg; if (ui.view_continuous == view_mode) return; ui.view_continuous = view_mode; v_adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)); h_adj = gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)); pg = ui.cur_page; yscroll = gtk_adjustment_get_value(v_adj) - pg->voffset*ui.zoom; xscroll = gtk_adjustment_get_value(h_adj) - pg->hoffset*ui.zoom; update_page_stuff(); gtk_adjustment_set_value(v_adj, yscroll + pg->voffset*ui.zoom); gtk_adjustment_set_value(h_adj, xscroll + pg->hoffset*ui.zoom); // force a refresh gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); } void on_viewContinuous_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; do_view_modeswitch(VIEW_MODE_CONTINUOUS); } void on_viewHorizontal_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; do_view_modeswitch(VIEW_MODE_HORIZONTAL); } void on_viewOnePage_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; do_view_modeswitch(VIEW_MODE_ONE_PAGE); } void on_viewZoomIn_activate (GtkMenuItem *menuitem, gpointer user_data) { if (ui.zoom > MAX_ZOOM) return; ui.zoom *= ui.zoom_step_factor; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } void on_viewZoomOut_activate (GtkMenuItem *menuitem, gpointer user_data) { if (ui.zoom < MIN_ZOOM) return; ui.zoom /= ui.zoom_step_factor; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } void on_viewNormalSize_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.zoom = DEFAULT_ZOOM; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } void on_viewPageWidth_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.zoom = (GTK_WIDGET(canvas))->allocation.width/ui.cur_page->width; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } void on_viewFirstPage_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); do_switch_page(0, TRUE, FALSE); } void on_viewPreviousPage_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (ui.pageno == 0) return; do_switch_page(ui.pageno-1, TRUE, FALSE); } void on_viewNextPage_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (ui.pageno == journal.npages-1) { // create a page at end on_journalNewPageEnd_activate(menuitem, user_data); return; } do_switch_page(ui.pageno+1, TRUE, FALSE); } void on_viewLastPage_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); do_switch_page(journal.npages-1, TRUE, FALSE); } void on_viewShowLayer_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (ui.layerno == ui.cur_page->nlayers-1) return; reset_selection(); ui.layerno++; ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); gnome_canvas_item_show(GNOME_CANVAS_ITEM(ui.cur_layer->group)); update_page_stuff(); } void on_viewHideLayer_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); if (ui.layerno == -1) return; reset_selection(); gnome_canvas_item_hide(GNOME_CANVAS_ITEM(ui.cur_layer->group)); ui.layerno--; if (ui.layerno<0) ui.cur_layer = NULL; else ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); update_page_stuff(); } void on_journalNewPageBefore_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Page *pg; end_text(); reset_selection(); pg = new_page(ui.cur_page); journal.pages = g_list_insert(journal.pages, pg, ui.pageno); journal.npages++; do_switch_page(ui.pageno, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg; } void on_journalNewPageAfter_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Page *pg; end_text(); reset_selection(); pg = new_page(ui.cur_page); journal.pages = g_list_insert(journal.pages, pg, ui.pageno+1); journal.npages++; do_switch_page(ui.pageno+1, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg; } void on_journalNewPageEnd_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Page *pg; end_text(); reset_selection(); pg = new_page((struct Page *)g_list_last(journal.pages)->data); journal.pages = g_list_append(journal.pages, pg); journal.npages++; do_switch_page(journal.npages-1, TRUE, TRUE); prepare_new_undo(); undo->type = ITEM_NEW_PAGE; undo->val = ui.pageno; undo->page = pg; } void on_journalDeletePage_activate (GtkMenuItem *menuitem, gpointer user_data) { GList *layerlist, *itemlist; struct Layer *l; end_text(); if (journal.npages == 1) return; reset_selection(); reset_recognizer(); // safer prepare_new_undo(); undo->type = ITEM_DELETE_PAGE; undo->val = ui.pageno; undo->page = ui.cur_page; // unmap all the canvas items gtk_object_destroy(GTK_OBJECT(ui.cur_page->group)); ui.cur_page->group = NULL; ui.cur_page->bg->canvas_item = NULL; for (layerlist = ui.cur_page->layers; layerlist!=NULL; layerlist = layerlist->next) { l = (struct Layer *)layerlist->data; for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) ((struct Item *)itemlist->data)->canvas_item = NULL; l->group = NULL; } journal.pages = g_list_remove(journal.pages, ui.cur_page); journal.npages--; if (ui.pageno == journal.npages) ui.pageno--; ui.cur_page = NULL; // so do_switch_page() won't try to remap the layers of the defunct page do_switch_page(ui.pageno, TRUE, TRUE); } void on_journalNewLayer_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Layer *l; end_text(); reset_selection(); l = g_new(struct Layer, 1); l->items = NULL; l->nitems = 0; l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( ui.cur_page->group, gnome_canvas_group_get_type(), NULL); lower_canvas_item_to(ui.cur_page->group, GNOME_CANVAS_ITEM(l->group), (ui.cur_layer!=NULL)?(GNOME_CANVAS_ITEM(ui.cur_layer->group)):(ui.cur_page->bg->canvas_item)); ui.cur_page->layers = g_list_insert(ui.cur_page->layers, l, ui.layerno+1); ui.cur_layer = l; ui.layerno++; ui.cur_page->nlayers++; update_page_stuff(); prepare_new_undo(); undo->type = ITEM_NEW_LAYER; undo->val = ui.layerno; undo->layer = l; undo->page = ui.cur_page; } void on_journalDeleteLayer_activate (GtkMenuItem *menuitem, gpointer user_data) { GList *list; end_text(); if (ui.cur_layer == NULL) return; reset_selection(); reset_recognizer(); // safer prepare_new_undo(); undo->type = ITEM_DELETE_LAYER; undo->val = ui.layerno; undo->layer = ui.cur_layer; undo->layer2 = NULL; undo->page = ui.cur_page; // delete all the canvas items gtk_object_destroy(GTK_OBJECT(ui.cur_layer->group)); ui.cur_layer->group = NULL; for (list=ui.cur_layer->items; list!=NULL; list=list->next) ((struct Item *)list->data)->canvas_item = NULL; ui.cur_page->layers = g_list_remove(ui.cur_page->layers, ui.cur_layer); if (ui.cur_page->nlayers>=2) { ui.cur_page->nlayers--; ui.layerno--; if (ui.layerno<0) ui.cur_layer = NULL; else ui.cur_layer = (struct Layer *)g_list_nth_data(ui.cur_page->layers, ui.layerno); } else { // special case: can't remove the last layer ui.cur_layer = g_new(struct Layer, 1); ui.cur_layer->items = NULL; ui.cur_layer->nitems = 0; ui.cur_layer->group = (GnomeCanvasGroup *) gnome_canvas_item_new( ui.cur_page->group, gnome_canvas_group_get_type(), NULL); ui.cur_page->layers = g_list_append(NULL, ui.cur_layer); undo->val = -1; undo->layer2 = ui.cur_layer; } update_page_stuff(); } void on_journalFlatten_activate (GtkMenuItem *menuitem, gpointer user_data) { } // the paper sizes dialog GtkWidget *papersize_dialog; int papersize_std, papersize_unit; double papersize_width, papersize_height; gboolean papersize_need_init, papersize_width_valid, papersize_height_valid; #define STD_SIZE_A4 0 #define STD_SIZE_A4R 1 #define STD_SIZE_LETTER 2 #define STD_SIZE_LETTER_R 3 #define STD_SIZE_CUSTOM 4 double unit_sizes[4] = {28.346, 72., 72./DISPLAY_DPI_DEFAULT, 1.}; double std_widths[STD_SIZE_CUSTOM] = {595.27, 841.89, 612., 792.}; double std_heights[STD_SIZE_CUSTOM] = {841.89, 595.27, 792., 612.}; double std_units[STD_SIZE_CUSTOM] = {UNIT_CM, UNIT_CM, UNIT_IN, UNIT_IN}; void on_journalPaperSize_activate (GtkMenuItem *menuitem, gpointer user_data) { int i, response; struct Page *pg; GList *pglist; end_text(); papersize_dialog = create_papersizeDialog(); papersize_width = ui.cur_page->width; papersize_height = ui.cur_page->height; papersize_unit = ui.default_unit; unit_sizes[UNIT_PX] = 1./DEFAULT_ZOOM; // if (ui.cur_page->bg->type == BG_PIXMAP) papersize_unit = UNIT_PX; papersize_std = STD_SIZE_CUSTOM; for (i=0;inext) { if (ui.bg_apply_all_pages) pg = (struct Page *)pglist->data; prepare_new_undo(); if (ui.bg_apply_all_pages) { if (pglist->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO; if (pglist->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO; } undo->type = ITEM_PAPER_RESIZE; undo->page = pg; undo->val_x = pg->width; undo->val_y = pg->height; if (papersize_width_valid) pg->width = papersize_width; if (papersize_height_valid) pg->height = papersize_height; make_page_clipbox(pg); update_canvas_bg(pg); if (!ui.bg_apply_all_pages) break; } do_switch_page(ui.pageno, TRUE, TRUE); } void on_papercolorWhite_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_WHITE, predef_bgcolors_rgba[COLOR_WHITE]); } void on_papercolorYellow_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_YELLOW, predef_bgcolors_rgba[COLOR_YELLOW]); } void on_papercolorPink_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_RED, predef_bgcolors_rgba[COLOR_RED]); } void on_papercolorOrange_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_ORANGE, predef_bgcolors_rgba[COLOR_ORANGE]); } void on_papercolorBlue_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_BLUE, predef_bgcolors_rgba[COLOR_BLUE]); } void on_papercolorGreen_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_papercolor_activate(menuitem, COLOR_GREEN, predef_bgcolors_rgba[COLOR_GREEN]); } void on_papercolorOther_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog; GtkColorSelection *colorsel; gint result; guint rgba; GdkColor gdkcolor; end_text(); dialog = gtk_color_selection_dialog_new(_("Pick a Paper Color")); colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel); if (ui.cur_page->bg->type == BG_SOLID) rgba = ui.cur_page->bg->color_rgba; else rgba = ui.default_page.bg->color_rgba; rgb_to_gdkcolor(rgba, &gdkcolor); gtk_color_selection_set_current_color(colorsel, &gdkcolor); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { gtk_color_selection_get_current_color(colorsel, &gdkcolor); process_papercolor_activate(menuitem, COLOR_OTHER, gdkcolor_to_rgba(gdkcolor, 0xffff)); } gtk_widget_destroy(dialog); } void on_paperstylePlain_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_paperstyle_activate(menuitem, RULING_NONE); } void on_paperstyleLined_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_paperstyle_activate(menuitem, RULING_LINED); } void on_paperstyleRuled_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_paperstyle_activate(menuitem, RULING_RULED); } void on_paperstyleGraph_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); process_paperstyle_activate(menuitem, RULING_GRAPH); } void on_journalLoadBackground_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog, *attach_opt; struct Background *bg; struct Page *pg; int pageno; GList *bglist, *bglistiter; GtkFileFilter *filt_all, *filt_pix, *filt_pspdf; char *filename; gboolean attach; end_text(); dialog = gtk_file_chooser_dialog_new(_("Open Background"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); #if GTK_CHECK_VERSION(2,6,0) if (!gtk_check_version(2, 6, 0)) { filt_pix = gtk_file_filter_new(); gtk_file_filter_set_name(filt_pix, _("Bitmap files")); gtk_file_filter_add_pixbuf_formats(filt_pix); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pix); } #endif filt_pspdf = gtk_file_filter_new(); gtk_file_filter_set_name(filt_pspdf, _("PS/PDF files (as bitmaps)")); gtk_file_filter_add_pattern(filt_pspdf, "*.ps"); gtk_file_filter_add_pattern(filt_pspdf, "*.PS"); gtk_file_filter_add_pattern(filt_pspdf, "*.pdf"); gtk_file_filter_add_pattern(filt_pspdf, "*.PDF"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pspdf); attach_opt = gtk_check_button_new_with_label(_("Attach file to the journal")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(attach_opt), FALSE); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER (dialog), attach_opt); if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); attach = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(attach_opt)); gtk_widget_destroy(dialog); set_cursor_busy(TRUE); bg = attempt_load_pix_bg(filename, attach); if (bg != NULL) bglist = g_list_append(NULL, bg); else bglist = attempt_load_gv_bg(filename); set_cursor_busy(FALSE); if (bglist == NULL) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening background '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(filename); return; } g_free(filename); reset_selection(); pageno = ui.pageno; for (bglistiter = bglist, pageno = ui.pageno; bglistiter!=NULL; bglistiter = bglistiter->next, pageno++) { prepare_new_undo(); if (bglistiter->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO; if (bglistiter->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO; bg = (struct Background *)bglistiter->data; if (pageno == journal.npages) { undo->type = ITEM_NEW_PAGE; pg = new_page_with_bg(bg, gdk_pixbuf_get_width(bg->pixbuf)/bg->pixbuf_scale, gdk_pixbuf_get_height(bg->pixbuf)/bg->pixbuf_scale); journal.pages = g_list_append(journal.pages, pg); journal.npages++; undo->val = pageno; undo->page = pg; } else { pg = g_list_nth_data(journal.pages, pageno); undo->type = ITEM_NEW_BG_RESIZE; undo->page = pg; undo->bg = pg->bg; bg->canvas_item = undo->bg->canvas_item; undo->bg->canvas_item = NULL; undo->val_x = pg->width; undo->val_y = pg->height; pg->bg = bg; pg->width = gdk_pixbuf_get_width(bg->pixbuf)/bg->pixbuf_scale; pg->height = gdk_pixbuf_get_height(bg->pixbuf)/bg->pixbuf_scale; make_page_clipbox(pg); update_canvas_bg(pg); } } g_list_free(bglist); if (ui.zoom != DEFAULT_ZOOM) { ui.zoom = DEFAULT_ZOOM; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } do_switch_page(ui.pageno, TRUE, TRUE); } void on_journalScreenshot_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Background *bg; end_text(); reset_selection(); gtk_window_iconify(GTK_WINDOW(winMain)); // hide ourselves gdk_display_sync(gdk_display_get_default()); if (ui.cursor!=NULL) gdk_cursor_unref(ui.cursor); ui.cursor = gdk_cursor_new(GDK_TCROSS); bg = attempt_screenshot_bg(); gtk_window_deiconify(GTK_WINDOW(winMain)); update_cursor(); if (bg==NULL) return; prepare_new_undo(); undo->type = ITEM_NEW_BG_RESIZE; undo->page = ui.cur_page; undo->bg = ui.cur_page->bg; bg->canvas_item = undo->bg->canvas_item; undo->bg->canvas_item = NULL; undo->val_x = ui.cur_page->width; undo->val_y = ui.cur_page->height; ui.cur_page->bg = bg; ui.cur_page->width = gdk_pixbuf_get_width(bg->pixbuf)/bg->pixbuf_scale; ui.cur_page->height = gdk_pixbuf_get_height(bg->pixbuf)/bg->pixbuf_scale; make_page_clipbox(ui.cur_page); update_canvas_bg(ui.cur_page); if (ui.zoom != DEFAULT_ZOOM) { ui.zoom = DEFAULT_ZOOM; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } do_switch_page(ui.pageno, TRUE, TRUE); } void on_journalApplyAllPages_activate (GtkMenuItem *menuitem, gpointer user_data) { gboolean active; end_text(); active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); if (active == ui.bg_apply_all_pages) return; ui.bg_apply_all_pages = active; update_page_stuff(); /* THIS IS THE OLD VERSION OF THE FEATURE -- APPLIED CURRENT BG TO ALL struct Page *page; GList *pglist; if (ui.cur_page->bg->type != BG_SOLID) return; reset_selection(); for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { page = (struct Page *)pglist->data; prepare_new_undo(); undo->type = ITEM_NEW_BG_RESIZE; undo->page = page; undo->bg = page->bg; undo->val_x = page->width; undo->val_y = page->height; if (pglist->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO; if (pglist->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO; page->bg = (struct Background *)g_memdup(ui.cur_page->bg, sizeof(struct Background)); page->width = ui.cur_page->width; page->height = ui.cur_page->height; page->bg->canvas_item = undo->bg->canvas_item; undo->bg->canvas_item = NULL; make_page_clipbox(page); update_canvas_bg(page); } do_switch_page(ui.pageno, TRUE, TRUE); */ } void on_toolsPen_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_PEN) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_PEN; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_PEN]); ui.cur_brush->ruler = ui.default_brushes[TOOL_PEN].ruler; ui.cur_brush->recognizer = ui.default_brushes[TOOL_PEN].recognizer; update_mapping_linkings(TOOL_PEN); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsEraser_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_ERASER) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_ERASER; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_ERASER]); update_mapping_linkings(TOOL_ERASER); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsHighlighter_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_HIGHLIGHTER; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_HIGHLIGHTER]); ui.cur_brush->ruler = ui.default_brushes[TOOL_HIGHLIGHTER].ruler; ui.cur_brush->recognizer = ui.default_brushes[TOOL_HIGHLIGHTER].recognizer; update_mapping_linkings(TOOL_HIGHLIGHTER); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsText_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_TEXT) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_TEXT; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_PEN]); update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsImage_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_IMAGE) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_IMAGE; update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsSelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_SELECTREGION) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); ui.toolno[ui.cur_mapping] = TOOL_SELECTREGION; update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsSelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_SELECTRECT) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); ui.toolno[ui.cur_mapping] = TOOL_SELECTRECT; update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsVerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.toolno[ui.cur_mapping] == TOOL_VERTSPACE) return; ui.cur_mapping = 0; // don't use switch_mapping() (refreshes buttons too soon) end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_VERTSPACE; update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_colorBlack_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_BLACK, predef_colors_rgba[COLOR_BLACK]); } void on_colorBlue_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_BLUE, predef_colors_rgba[COLOR_BLUE]); } void on_colorRed_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_RED, predef_colors_rgba[COLOR_RED]); } void on_colorGreen_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_GREEN, predef_colors_rgba[COLOR_GREEN]); } void on_colorGray_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_GRAY, predef_colors_rgba[COLOR_GRAY]); } void on_colorLightBlue_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_LIGHTBLUE, predef_colors_rgba[COLOR_LIGHTBLUE]); } void on_colorLightGreen_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_LIGHTGREEN, predef_colors_rgba[COLOR_LIGHTGREEN]); } void on_colorMagenta_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_MAGENTA, predef_colors_rgba[COLOR_MAGENTA]); } void on_colorOrange_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_ORANGE, predef_colors_rgba[COLOR_ORANGE]); } void on_colorYellow_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_YELLOW, predef_colors_rgba[COLOR_YELLOW]); } void on_colorWhite_activate (GtkMenuItem *menuitem, gpointer user_data) { process_color_activate(menuitem, COLOR_WHITE, predef_colors_rgba[COLOR_WHITE]); } void on_colorOther_activate (GtkMenuItem *menuitem, gpointer user_data) { gtk_button_clicked(GTK_BUTTON(GET_COMPONENT("buttonColorChooser"))); } void on_penthicknessVeryFine_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_PEN, THICKNESS_VERYFINE); } void on_penthicknessFine_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_PEN, THICKNESS_FINE); } void on_penthicknessMedium_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_PEN, THICKNESS_MEDIUM); } void on_penthicknessThick_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_PEN, THICKNESS_THICK); } void on_penthicknessVeryThick_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_PEN, THICKNESS_VERYTHICK); } void on_eraserFine_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_ERASER, THICKNESS_FINE); } void on_eraserMedium_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_ERASER, THICKNESS_MEDIUM); } void on_eraserThick_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_ERASER, THICKNESS_THICK); } void on_eraserStandard_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; end_text(); ui.brushes[0][TOOL_ERASER].tool_options = TOOLOPT_ERASER_STANDARD; update_mapping_linkings(TOOL_ERASER); } void on_eraserWhiteout_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; end_text(); ui.brushes[0][TOOL_ERASER].tool_options = TOOLOPT_ERASER_WHITEOUT; update_mapping_linkings(TOOL_ERASER); } void on_eraserDeleteStrokes_activate (GtkMenuItem *menuitem, gpointer user_data) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; end_text(); ui.brushes[0][TOOL_ERASER].tool_options = TOOLOPT_ERASER_STROKES; update_mapping_linkings(TOOL_ERASER); } void on_highlighterFine_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_HIGHLIGHTER, THICKNESS_FINE); } void on_highlighterMedium_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_HIGHLIGHTER, THICKNESS_MEDIUM); } void on_highlighterThick_activate (GtkMenuItem *menuitem, gpointer user_data) { process_thickness_activate(menuitem, TOOL_HIGHLIGHTER, THICKNESS_THICK); } void on_toolsTextFont_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *dialog; gchar *str; dialog = gtk_font_selection_dialog_new(_("Select Font")); str = make_cur_font_name(); gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(dialog), str); g_free(str); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return; } str = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(dialog)); gtk_widget_destroy(dialog); process_font_sel(str); } void on_toolsDefaultPen_activate (GtkMenuItem *menuitem, gpointer user_data) { switch_mapping(0); end_text(); reset_selection(); g_memmove(&(ui.brushes[0][TOOL_PEN]), ui.default_brushes+TOOL_PEN, sizeof(struct Brush)); ui.toolno[0] = TOOL_PEN; ui.cur_brush = &(ui.brushes[0][TOOL_PEN]); update_mapping_linkings(TOOL_PEN); update_tool_buttons(); update_tool_menu(); update_pen_props_menu(); update_color_menu(); update_cursor(); } void on_toolsDefaultEraser_activate (GtkMenuItem *menuitem, gpointer user_data) { switch_mapping(0); end_text(); reset_selection(); g_memmove(&(ui.brushes[0][TOOL_ERASER]), ui.default_brushes+TOOL_ERASER, sizeof(struct Brush)); ui.toolno[0] = TOOL_ERASER; ui.cur_brush = &(ui.brushes[0][TOOL_ERASER]); update_mapping_linkings(TOOL_ERASER); update_tool_buttons(); update_tool_menu(); update_eraser_props_menu(); update_color_menu(); update_cursor(); } void on_toolsDefaultHighlighter_activate (GtkMenuItem *menuitem, gpointer user_data) { switch_mapping(0); end_text(); reset_selection(); g_memmove(&(ui.brushes[0][TOOL_HIGHLIGHTER]), ui.default_brushes+TOOL_HIGHLIGHTER, sizeof(struct Brush)); ui.toolno[0] = TOOL_HIGHLIGHTER; ui.cur_brush = &(ui.brushes[0][TOOL_HIGHLIGHTER]); update_mapping_linkings(TOOL_HIGHLIGHTER); update_tool_buttons(); update_tool_menu(); update_highlighter_props_menu(); update_color_menu(); update_cursor(); } void on_toolsDefaultText_activate (GtkMenuItem *menuitem, gpointer user_data) { switch_mapping(0); if (ui.toolno[0]!=TOOL_TEXT) end_text(); reset_selection(); ui.toolno[0] = TOOL_TEXT; ui.cur_brush = &(ui.brushes[0][TOOL_PEN]); ui.cur_brush->color_no = ui.default_brushes[TOOL_PEN].color_no; ui.cur_brush->color_rgba = ui.default_brushes[TOOL_PEN].color_rgba; g_free(ui.font_name); ui.font_name = g_strdup(ui.default_font_name); ui.font_size = ui.default_font_size; if (ui.cur_item_type == ITEM_TEXT) { refont_text_item(ui.cur_item, ui.font_name, ui.font_size); } update_font_button(); update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_toolsSetAsDefault_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Item *it; if (ui.cur_mapping!=0 && !ui.button_switch_mapping) return; if (ui.toolno[ui.cur_mapping] < NUM_STROKE_TOOLS) g_memmove(ui.default_brushes+ui.toolno[ui.cur_mapping], &(ui.brushes[ui.cur_mapping][ui.toolno[ui.cur_mapping]]), sizeof(struct Brush)); if (ui.toolno[ui.cur_mapping] == TOOL_TEXT) { if (ui.cur_item_type == ITEM_TEXT) { g_free(ui.font_name); ui.font_name = g_strdup(ui.cur_item->font_name); ui.font_size = ui.cur_item->font_size; } else if (ui.selection!=NULL && ui.selection->items!=NULL && ui.selection->items->next==NULL && (it=(struct Item*)ui.selection->items->data)->type == ITEM_TEXT) { g_free(ui.font_name); ui.font_name = g_strdup(it->font_name); ui.font_size = it->font_size; } g_free(ui.default_font_name); ui.default_font_name = g_strdup(ui.font_name); ui.default_font_size = ui.font_size; } end_text(); } void on_toolsRuler_activate (GtkMenuItem *menuitem, gpointer user_data) { gboolean active, current; if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_CHECK_MENU_ITEM) active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); else active = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem)); if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; current = (ui.toolno[ui.cur_mapping] == TOOL_PEN || ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) && ui.cur_brush->ruler; if (active == current) return; ui.cur_mapping = 0; end_text(); if (ui.toolno[ui.cur_mapping]!=TOOL_PEN && ui.toolno[ui.cur_mapping]!=TOOL_HIGHLIGHTER) { reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_PEN; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_PEN]); update_color_menu(); update_tool_buttons(); update_tool_menu(); update_cursor(); } ui.cur_brush->ruler = active; if (active) ui.cur_brush->recognizer = FALSE; update_mapping_linkings(ui.toolno[ui.cur_mapping]); update_ruler_indicator(); } void on_toolsReco_activate (GtkMenuItem *menuitem, gpointer user_data) { gboolean active, current; if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_CHECK_MENU_ITEM) active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); else active = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem)); if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; current = (ui.toolno[ui.cur_mapping] == TOOL_PEN || ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) && ui.cur_brush->recognizer; if (active == current) return; ui.cur_mapping = 0; end_text(); if (ui.toolno[ui.cur_mapping]!=TOOL_PEN && ui.toolno[ui.cur_mapping]!=TOOL_HIGHLIGHTER) { reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_PEN; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_PEN]); update_color_menu(); update_tool_buttons(); update_tool_menu(); update_cursor(); } ui.cur_brush->recognizer = active; if (active) { ui.cur_brush->ruler = FALSE; reset_recognizer(); } update_mapping_linkings(ui.toolno[ui.cur_mapping]); update_ruler_indicator(); } void on_optionsSavePreferences_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); save_config_to_file(); } void on_helpIndex_activate (GtkMenuItem *menuitem, gpointer user_data) { } void on_helpAbout_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *aboutDialog; GtkLabel *labelTitle; end_text(); aboutDialog = create_aboutDialog (); labelTitle = GTK_LABEL(g_object_get_data(G_OBJECT(aboutDialog), "labelTitle")); gtk_label_set_markup(labelTitle, "Xournal " VERSION_STRING ""); gtk_dialog_run (GTK_DIALOG(aboutDialog)); gtk_widget_destroy(aboutDialog); } void on_buttonToolDefault_clicked (GtkToolButton *toolbutton, gpointer user_data) { if (ui.toolno[0]==TOOL_TEXT) { on_toolsDefaultText_activate(NULL, NULL); return; } end_text(); switch_mapping(0); if (ui.toolno[0] < NUM_STROKE_TOOLS) { g_memmove(&(ui.brushes[0][ui.toolno[0]]), ui.default_brushes+ui.toolno[0], sizeof(struct Brush)); update_mapping_linkings(ui.toolno[0]); update_thickness_buttons(); update_color_buttons(); update_color_menu(); if (ui.toolno[0] == TOOL_PEN) update_pen_props_menu(); if (ui.toolno[0] == TOOL_ERASER) update_eraser_props_menu(); if (ui.toolno[0] == TOOL_HIGHLIGHTER) update_highlighter_props_menu(); update_cursor(); } } void on_buttonFine_clicked (GtkToolButton *toolbutton, gpointer user_data) { if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; process_thickness_activate((GtkMenuItem*)toolbutton, ui.toolno[ui.cur_mapping], THICKNESS_FINE); } void on_buttonMedium_clicked (GtkToolButton *toolbutton, gpointer user_data) { if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; process_thickness_activate((GtkMenuItem*)toolbutton, ui.toolno[ui.cur_mapping], THICKNESS_MEDIUM); } void on_buttonThick_clicked (GtkToolButton *toolbutton, gpointer user_data) { if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; process_thickness_activate((GtkMenuItem*)toolbutton, ui.toolno[ui.cur_mapping], THICKNESS_THICK); } gboolean on_canvas_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { double pt[2]; GtkWidget *dialog; int mapping; gboolean is_core, is_touch; struct Item *item; GdkEvent scroll_event; #ifdef INPUT_DEBUG printf("DEBUG: ButtonPress (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x\n", event->device->name, event->x, event->y, event->button, event->state); #endif // abort any page changes pending in the spin button, and take the focus gtk_spin_button_set_value(GTK_SPIN_BUTTON(GET_COMPONENT("spinPageNo")), ui.pageno+1); reset_focus(); is_core = (event->device == gdk_device_get_core_pointer()); if (!ui.use_xinput && !is_core) return FALSE; if (ui.use_xinput && is_core && ui.discard_corepointer) return FALSE; if (event->type != GDK_BUTTON_PRESS) return FALSE; // double-clicks may have broken axes member (free'd) due to a bug in GDK if (event->button > 3) { // scroll wheel events! don't paint... if (ui.use_xinput && !gtk_check_version(2, 17, 0) && event->button <= 7) { /* with GTK+ 2.17 and later, the entire widget hierarchy is xinput-aware, so the core button event gets discarded and the scroll event never gets processed by the main window. This is arguably a GTK+ bug. We work around it. */ scroll_event.scroll.type = GDK_SCROLL; scroll_event.scroll.window = event->window; scroll_event.scroll.send_event = event->send_event; scroll_event.scroll.time = event->time; scroll_event.scroll.x = event->x; scroll_event.scroll.y = event->y; scroll_event.scroll.state = event->state; scroll_event.scroll.device = event->device; scroll_event.scroll.x_root = event->x_root; scroll_event.scroll.y_root = event->y_root; if (event->button == 4) scroll_event.scroll.direction = GDK_SCROLL_UP; else if (event->button == 5) scroll_event.scroll.direction = GDK_SCROLL_DOWN; else if (event->button == 6) scroll_event.scroll.direction = GDK_SCROLL_LEFT; else scroll_event.scroll.direction = GDK_SCROLL_RIGHT; gtk_widget_event(GET_COMPONENT("scrolledwindowMain"), &scroll_event); } return FALSE; } if ((event->state & (GDK_CONTROL_MASK|GDK_MOD1_MASK)) != 0) return FALSE; // no control-clicking or alt-clicking if (!is_core) gdk_device_get_state(event->device, event->window, event->axes, NULL); // synaptics touchpads send bogus axis values with ButtonDown if (!is_core) fix_xinput_coords((GdkEvent *)event); if (!finite_sized(event->x) || !finite_sized(event->y)) return FALSE; // Xorg 7.3 bug if (ui.cur_item_type == ITEM_TEXT) { if (!is_event_within_textview(event)) end_text(); else return FALSE; } if (ui.cur_item_type == ITEM_STROKE && ui.is_corestroke && !is_core && ui.cur_path.num_points == 1) { // Xorg 7.3+ sent core event before XInput event: fix initial point ui.is_corestroke = FALSE; ui.stroke_device = event->device; get_pointer_coords((GdkEvent *)event, ui.cur_path.coords); } if (ui.cur_item_type != ITEM_NONE && !(ui.cur_item_type == ITEM_HAND && ui.cur_mapping == NUM_BUTTONS+1)) return FALSE; // we're already doing something, other than touch-as-hand // if button_switch_mapping enabled, button 2 or 3 clicks only switch mapping if (ui.button_switch_mapping && event->button > 1) { ui.which_unswitch_button = event->button; switch_mapping(event->button-1); return FALSE; } // record device info so we'll know what motion events to monitor ui.is_corestroke = is_core; ui.stroke_device = event->device; ui.current_ignore_btn_reported_up = ui.ignore_btn_reported_up; is_touch = (strstr(event->device->name, ui.device_for_touch) != NULL); if (is_touch && ui.pen_disables_touch && ui.in_proximity) return FALSE; if (ui.use_erasertip && event->device->source == GDK_SOURCE_ERASER) mapping = NUM_BUTTONS; // eraser mapping else if (ui.touch_as_handtool && is_touch) mapping = NUM_BUTTONS+1; // hand mapping else if (ui.button_switch_mapping) { mapping = ui.cur_mapping; if (!mapping && (event->state & GDK_BUTTON2_MASK)) mapping = 1; if (!mapping && (event->state & GDK_BUTTON3_MASK)) mapping = 2; } else mapping = event->button-1; // check whether we're in a page get_pointer_coords((GdkEvent *)event, pt); set_current_page(pt); // can't paint on the background... if (ui.cur_layer == NULL && ui.toolno[mapping]!=TOOL_HAND) { /* warn */ dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Drawing is not allowed on the " "background layer.\n Switching to Layer 1.")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); on_viewShowLayer_activate(NULL, NULL); return FALSE; } // switch mappings if needed ui.which_mouse_button = event->button; switch_mapping(mapping); #ifdef WIN32 update_cursor(); #endif // in text tool, clicking in a text area edits it if (ui.toolno[mapping] == TOOL_TEXT) { item = click_is_in_text(ui.cur_layer, pt[0], pt[1]); if (item!=NULL) { reset_selection(); start_text((GdkEvent *)event, item); return FALSE; } } // if this can be a selection move or resize, then it takes precedence over anything else if (start_resizesel((GdkEvent *)event)) return FALSE; if (start_movesel((GdkEvent *)event)) return FALSE; if (ui.toolno[mapping] != TOOL_SELECTREGION && ui.toolno[mapping] != TOOL_SELECTRECT && ui.toolno[mapping] != TOOL_HAND) reset_selection(); // process the event if (ui.toolno[mapping] == TOOL_HAND) { ui.cur_item_type = ITEM_HAND; get_pointer_coords((GdkEvent *)event, ui.hand_refpt); ui.hand_refpt[0] += ui.cur_page->hoffset; ui.hand_refpt[1] += ui.cur_page->voffset; } else if (ui.toolno[mapping] == TOOL_PEN || ui.toolno[mapping] == TOOL_HIGHLIGHTER || (ui.toolno[mapping] == TOOL_ERASER && ui.cur_brush->tool_options == TOOLOPT_ERASER_WHITEOUT)) { create_new_stroke((GdkEvent *)event); } else if (ui.toolno[mapping] == TOOL_ERASER) { ui.cur_item_type = ITEM_ERASURE; do_eraser((GdkEvent *)event, ui.cur_brush->thickness/2, ui.cur_brush->tool_options == TOOLOPT_ERASER_STROKES); } else if (ui.toolno[mapping] == TOOL_SELECTREGION) { start_selectregion((GdkEvent *)event); } else if (ui.toolno[mapping] == TOOL_SELECTRECT) { start_selectrect((GdkEvent *)event); } else if (ui.toolno[mapping] == TOOL_VERTSPACE) { start_vertspace((GdkEvent *)event); } else if (ui.toolno[mapping] == TOOL_TEXT) { start_text((GdkEvent *)event, NULL); } else if (ui.toolno[mapping] == TOOL_IMAGE) { insert_image((GdkEvent *)event); } return FALSE; } gboolean on_canvas_button_release_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { gboolean is_core; #ifdef INPUT_DEBUG printf("DEBUG: ButtonRelease (%s) (x,y)=(%.2f,%.2f), button %d, modifier %x\n", event->device->name, event->x, event->y, event->button, event->state); #endif is_core = (event->device == gdk_device_get_core_pointer()); if (!ui.use_xinput && !is_core) return FALSE; if (ui.use_xinput && is_core && !ui.is_corestroke) return FALSE; if (ui.ignore_other_devices && !is_core && ui.stroke_device!=event->device) return FALSE; if (!is_core) fix_xinput_coords((GdkEvent *)event); if (event->button != ui.which_mouse_button && event->button != ui.which_unswitch_button) return FALSE; if (ui.cur_item_type == ITEM_STROKE) { finalize_stroke(); if (ui.cur_brush->recognizer) recognize_patterns(); } else if (ui.cur_item_type == ITEM_ERASURE) { finalize_erasure(); } else if (ui.cur_item_type == ITEM_SELECTREGION) { finalize_selectregion(); } else if (ui.cur_item_type == ITEM_SELECTRECT) { finalize_selectrect(); } else if (ui.cur_item_type == ITEM_MOVESEL || ui.cur_item_type == ITEM_MOVESEL_VERT) { finalize_movesel(); } else if (ui.cur_item_type == ITEM_RESIZESEL) { finalize_resizesel(); } else if (ui.cur_item_type == ITEM_HAND) { ui.cur_item_type = ITEM_NONE; } if (!ui.which_unswitch_button || event->button == ui.which_unswitch_button) switch_mapping(0); // will reset ui.which_unswitch_button if (ui.autosave_enabled && ui.autosave_need_catchup) autosave_cb((gpointer)1); return FALSE; } gboolean on_canvas_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) { #ifdef INPUT_DEBUG printf("DEBUG: enter notify\n"); if (ui.cur_item_type!=ITEM_NONE) printf("DEBUG: current item type is %d (device %s) \n", ui.cur_item_type, ui.stroke_device->name); #endif /* re-enable input devices after they've been emergency-disabled by leave_notify */ if (!gtk_check_version(2, 17, 0)) { emergency_enable_xinput(GDK_MODE_SCREEN); ui.is_corestroke = ui.saved_is_corestroke; } return FALSE; } gboolean on_canvas_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) { #ifdef INPUT_DEBUG printf("DEBUG: leave notify (mode=%d, details=%d)\n", event->mode, event->detail); #endif /* emergency disable XInput to avoid segfaults (GTK+ 2.17) or interface non-responsiveness (GTK+ 2.18) */ /* don't do this any more on "final" release GTK+ 2.24 as it does more harm than good, except for text editing boxes which still need it */ #ifdef WIN32 if (!gtk_check_version(2, 17, 0)) #else if (!gtk_check_version(2, 17, 0) && (gtk_check_version(2, 24, 0) || ui.cur_item_type == ITEM_TEXT)) #endif { emergency_enable_xinput(GDK_MODE_DISABLED); ui.saved_is_corestroke = ui.is_corestroke; ui.is_corestroke = TRUE; } // set pen proximity to false (we won't receive prox out event) ui.in_proximity = FALSE; return FALSE; } gboolean on_canvas_proximity_event (GtkWidget *widget, GdkEventProximity *event, gpointer user_data) { #ifdef INPUT_DEBUG printf("DEBUG: proximity %s (%s)\n", (event->type == GDK_PROXIMITY_IN)?"in":"out", event->device->name); #endif ui.in_proximity = (event->type==GDK_PROXIMITY_IN); return FALSE; } gboolean on_canvas_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { if (ui.view_continuous!=0 && ui.progressive_bg) rescale_bg_pixmaps(); return FALSE; } gboolean on_canvas_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { GtkAdjustment *adj; gint pgheight; // Esc leaves text edition, or leaves fullscreen mode if (event->keyval == GDK_Escape) { if (ui.cur_item_type == ITEM_TEXT) { end_text(); return TRUE; } else if (ui.fullscreen) { do_fullscreen(FALSE); return TRUE; } else return FALSE; } /* In single page or horizontal mode, switch pages with PgUp/PgDn (or Up/Dn) when there's nowhere else to go. */ pgheight = GTK_WIDGET(canvas)->allocation.height; adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(GET_COMPONENT("scrolledwindowMain"))); if (event->keyval == GDK_Page_Down || event->keyval == GDK_Down) { if (ui.view_continuous!=VIEW_MODE_CONTINUOUS && (0.96 * ui.zoom * ui.cur_page->height < pgheight || adj->value == adj->upper-pgheight)) { end_text(); if (ui.pageno < journal.npages-1) { do_switch_page(ui.pageno+1, TRUE, FALSE); gtk_adjustment_set_value(adj, 0.); } return TRUE; } if (adj->value == adj->upper-pgheight) return TRUE; // don't send focus away } if (event->keyval == GDK_Page_Up || event->keyval == GDK_Up) { if (ui.view_continuous!=VIEW_MODE_CONTINUOUS && (0.96 * ui.zoom * ui.cur_page->height < pgheight || adj->value == adj->lower)) { end_text(); if (ui.pageno != 0) { do_switch_page(ui.pageno-1, TRUE, FALSE); gtk_adjustment_set_value(adj, adj->upper-pgheight); } return TRUE; } if (adj->value == adj->lower) return TRUE; // don't send focus away } return FALSE; } gboolean on_canvas_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data) { gboolean looks_wrong, we_have_no_clue, is_core; double pt[2]; GdkModifierType mask; // if pen is sending motion events then it's in proximity if (event->device->source == GDK_SOURCE_PEN) ui.in_proximity = TRUE; /* we don't care about this event unless some operation is in progress; or if there's a selection (then we might want to change the mouse cursor to indicate the possibility of resizing) */ if (ui.cur_item_type == ITEM_NONE && ui.selection==NULL) return FALSE; if (ui.cur_item_type == ITEM_TEXT || ui.cur_item_type == ITEM_IMAGE) return FALSE; is_core = (event->device == gdk_device_get_core_pointer()); if (!ui.use_xinput && !is_core) return FALSE; if (!is_core) fix_xinput_coords((GdkEvent *)event); if (!finite_sized(event->x) || !finite_sized(event->y)) return FALSE; // Xorg 7.3 bug if (ui.selection!=NULL && ui.cur_item_type == ITEM_NONE) { get_pointer_coords((GdkEvent *)event, pt); update_cursor_for_resize(pt); return FALSE; } // check if the button is reported as pressed... looks_wrong = !(event->state & (1<<(7+ui.which_mouse_button))); we_have_no_clue = !is_core && ui.is_corestroke && looks_wrong; // we have no clue who sent the core event initially, so we'll abort if (ui.use_xinput && is_core && !ui.is_corestroke) return FALSE; if (!is_core && ui.is_corestroke && !looks_wrong) { ui.is_corestroke = FALSE; ui.stroke_device = event->device; // what if touchscreen is mapped to hand or disabled and was initially received as Core Pointer? if ((ui.touch_as_handtool || (ui.pen_disables_touch && ui.in_proximity)) && strstr(event->device->name, ui.device_for_touch) != NULL) { abort_stroke(); // in case we were doing a stroke this aborts it; otherwise nothing happens return FALSE; } } if (ui.ignore_other_devices && ui.stroke_device!=event->device && !we_have_no_clue) return FALSE; #ifdef INPUT_DEBUG printf("DEBUG: MotionNotify (%s) (x,y)=(%.2f,%.2f), modifier %x\n", event->device->name, event->x, event->y, event->state); #endif if (looks_wrong) { gdk_device_get_state(ui.stroke_device, event->window, NULL, &mask); looks_wrong = !(mask & (1<<(7+ui.which_mouse_button))); } if (we_have_no_clue || (looks_wrong && !ui.current_ignore_btn_reported_up)) { /* mouse button shouldn't be up... give up */ #ifdef INPUT_DEBUG printf("DEBUG: aborting on suspicious MotionNotify\n"); #endif if (ui.cur_item_type == ITEM_STROKE) { if (ui.cur_path.num_points <= 1) abort_stroke(); else { finalize_stroke(); if (ui.cur_brush->recognizer) recognize_patterns(); } } else if (ui.cur_item_type == ITEM_ERASURE) { finalize_erasure(); } else if (ui.cur_item_type == ITEM_SELECTREGION) { finalize_selectregion(); } else if (ui.cur_item_type == ITEM_SELECTRECT) { finalize_selectrect(); } else if (ui.cur_item_type == ITEM_MOVESEL || ui.cur_item_type == ITEM_MOVESEL_VERT) { finalize_movesel(); } else if (ui.cur_item_type == ITEM_RESIZESEL) { finalize_resizesel(); } else if (ui.cur_item_type == ITEM_HAND) { ui.cur_item_type = ITEM_NONE; } switch_mapping(0); if (ui.autosave_enabled && ui.autosave_need_catchup) autosave_cb((gpointer)1); return FALSE; } if (!looks_wrong) ui.current_ignore_btn_reported_up = FALSE; // we trust this device knows how to report button state properly if (ui.cur_item_type == ITEM_STROKE) { continue_stroke((GdkEvent *)event); } else if (ui.cur_item_type == ITEM_ERASURE) { do_eraser((GdkEvent *)event, ui.cur_brush->thickness/2, ui.cur_brush->tool_options == TOOLOPT_ERASER_STROKES); } else if (ui.cur_item_type == ITEM_SELECTREGION) { continue_selectregion((GdkEvent *)event); } else if (ui.cur_item_type == ITEM_SELECTRECT) { get_pointer_coords((GdkEvent *)event, pt); ui.selection->bbox.right = pt[0]; ui.selection->bbox.bottom = pt[1]; gnome_canvas_item_set(ui.selection->canvas_item, "x2", pt[0], "y2", pt[1], NULL); } else if (ui.cur_item_type == ITEM_MOVESEL || ui.cur_item_type == ITEM_MOVESEL_VERT) { continue_movesel((GdkEvent *)event); } else if (ui.cur_item_type == ITEM_RESIZESEL) { continue_resizesel((GdkEvent *)event); } else if (ui.cur_item_type == ITEM_HAND) { do_hand((GdkEvent *)event); } return FALSE; } void on_comboLayer_changed (GtkComboBox *combobox, gpointer user_data) { int val; if (ui.in_update_page_stuff) return; // avoid a bad retroaction end_text(); val = gtk_combo_box_get_active(combobox); if (val == -1) return; val = ui.cur_page->nlayers-1-val; if (val == ui.layerno) return; reset_selection(); while (val>ui.layerno) { ui.layerno++; ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); gnome_canvas_item_show(GNOME_CANVAS_ITEM(ui.cur_layer->group)); } while (valgroup)); ui.layerno--; if (ui.layerno<0) ui.cur_layer = NULL; else ui.cur_layer = g_list_nth_data(ui.cur_page->layers, ui.layerno); } update_page_stuff(); } gboolean on_winMain_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { end_text(); if (ok_to_close()) gtk_main_quit(); return TRUE; } void on_optionsUseXInput_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.allow_xinput = ui.use_xinput = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); /* HOW THINGS USED TO BE: We'd like on_canvas_... to get BOTH core and xinput events. Up to GTK+ 2.16 this is achieved by making only the canvas's parent GdkWindow xinput-aware, rather than the entire hierarchy. Otherwise, the proximity detection code in GDK is broken and we'll lose core events. Up to GTK+ 2.10, gtk_widget_set_extension_events() only sets extension events for the widget's main window itself; in GTK+ 2.11 also traverses GDK child windows that belong to the widget and sets their extension events too. We want to avoid that. So we use gdk_input_set_extension_events() directly on the canvas. As much as possible, we'd like to keep doing this, though GTK+ 2.17 is making our life harder (crasher bugs require us to disable XInput while editing text or using the layers combo box, but disabling XInput while in a XInput-aware window causes the interface to become non-responsive). */ #ifndef WIN32 if (!gtk_check_version(2, 17, 0)) { #endif /* GTK+ 2.17 and later: everybody shares a single native window, so we'll never get any core events, and we might as well set extension events the way we're supposed to. Doing so helps solve crasher bugs in 2.17, and prevents us from losing two-button events in 2.18 */ gtk_widget_set_extension_events(GTK_WIDGET (canvas), ui.use_xinput?GDK_EXTENSION_EVENTS_ALL:GDK_EXTENSION_EVENTS_NONE); #ifndef WIN32 } else { #endif /* GTK+ 2.16 and earlier: we only activate extension events on the canvas's parent GdkWindow. This allows us to keep receiving core events. */ gdk_input_set_extension_events(GTK_WIDGET(canvas)->window, GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, ui.use_xinput?GDK_EXTENSION_EVENTS_ALL:GDK_EXTENSION_EVENTS_NONE); #ifndef WIN32 } #endif update_mappings_menu(); } void on_vscroll_changed (GtkAdjustment *adjustment, gpointer user_data) { gboolean need_update; double viewport_top, viewport_bottom; struct Page *tmppage; if (ui.view_continuous!=VIEW_MODE_CONTINUOUS) return; if (ui.progressive_bg) rescale_bg_pixmaps(); need_update = FALSE; viewport_top = adjustment->value / ui.zoom; viewport_bottom = (adjustment->value + adjustment->page_size) / ui.zoom; tmppage = ui.cur_page; while (viewport_top > tmppage->voffset + tmppage->height) { if (ui.pageno == journal.npages-1) break; need_update = TRUE; ui.pageno++; tmppage = g_list_nth_data(journal.pages, ui.pageno); } while (viewport_bottom < tmppage->voffset) { if (ui.pageno == 0) break; need_update = TRUE; ui.pageno--; tmppage = g_list_nth_data(journal.pages, ui.pageno); } if (need_update) { end_text(); do_switch_page(ui.pageno, FALSE, FALSE); } } void on_hscroll_changed (GtkAdjustment *adjustment, gpointer user_data) { gboolean need_update; double viewport_left, viewport_right; struct Page *tmppage; if (ui.view_continuous!=VIEW_MODE_HORIZONTAL) return; if (ui.progressive_bg) rescale_bg_pixmaps(); need_update = FALSE; viewport_left = adjustment->value / ui.zoom; viewport_right = (adjustment->value + adjustment->page_size) / ui.zoom; tmppage = ui.cur_page; while (viewport_left > tmppage->hoffset + tmppage->width) { if (ui.pageno == journal.npages-1) break; need_update = TRUE; ui.pageno++; tmppage = g_list_nth_data(journal.pages, ui.pageno); } while (viewport_right < tmppage->hoffset) { if (ui.pageno == 0) break; need_update = TRUE; ui.pageno--; tmppage = g_list_nth_data(journal.pages, ui.pageno); } if (need_update) { end_text(); do_switch_page(ui.pageno, FALSE, FALSE); } } void on_spinPageNo_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { int val; if (ui.in_update_page_stuff) return; // avoid a bad retroaction /* in preparation for end_text(), send focus to the canvas if it's not ours. (avoid issues with Gtk trying to send focus to the dead text widget) */ if (!GTK_WIDGET_HAS_FOCUS(spinbutton)) gtk_widget_grab_focus(GTK_WIDGET(canvas)); end_text(); val = gtk_spin_button_get_value_as_int(spinbutton) - 1; if (val == journal.npages) { // create a page at end on_journalNewPageEnd_activate(NULL, NULL); return; } if (val == ui.pageno) return; if (val < 0) val = 0; if (val > journal.npages-1) val = journal.npages-1; do_switch_page(val, TRUE, FALSE); } void on_journalDefaultBackground_activate (GtkMenuItem *menuitem, gpointer user_data) { struct Page *pg; GList *pglist; end_text(); reset_selection(); pg = ui.cur_page; for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { if (ui.bg_apply_all_pages) pg = (struct Page *)pglist->data; prepare_new_undo(); if (ui.bg_apply_all_pages) { if (pglist->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO; if (pglist->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO; } undo->type = ITEM_NEW_BG_RESIZE; undo->page = pg; undo->bg = pg->bg; undo->val_x = pg->width; undo->val_y = pg->height; pg->bg = (struct Background *)g_memdup(ui.default_page.bg, sizeof(struct Background)); pg->width = ui.default_page.width; pg->height = ui.default_page.height; pg->bg->canvas_item = undo->bg->canvas_item; undo->bg->canvas_item = NULL; make_page_clipbox(pg); update_canvas_bg(pg); if (!ui.bg_apply_all_pages) break; } do_switch_page(ui.pageno, TRUE, TRUE); } void on_journalSetAsDefault_activate (GtkMenuItem *menuitem, gpointer user_data) { if (ui.cur_page->bg->type != BG_SOLID) return; end_text(); prepare_new_undo(); undo->type = ITEM_NEW_DEFAULT_BG; undo->val_x = ui.default_page.width; undo->val_y = ui.default_page.height; undo->bg = ui.default_page.bg; ui.default_page.width = ui.cur_page->width; ui.default_page.height = ui.cur_page->height; ui.default_page.bg = (struct Background *)g_memdup(ui.cur_page->bg, sizeof(struct Background)); ui.default_page.bg->canvas_item = NULL; } void on_comboStdSizes_changed (GtkComboBox *combobox, gpointer user_data) { GtkEntry *entry; GtkComboBox *comboUnit; int val; gchar text[20]; if (papersize_need_init) { gtk_combo_box_set_active(combobox, papersize_std); papersize_need_init = FALSE; } else { val = gtk_combo_box_get_active(combobox); if (val == -1 || val == papersize_std) return; papersize_std = val; if (val == STD_SIZE_CUSTOM) return; papersize_unit = std_units[val]; papersize_width = std_widths[val]; papersize_height = std_heights[val]; } comboUnit = GTK_COMBO_BOX(g_object_get_data(G_OBJECT(papersize_dialog), "comboUnit")); gtk_combo_box_set_active(comboUnit, papersize_unit); entry = GTK_ENTRY(g_object_get_data(G_OBJECT(papersize_dialog), "entryWidth")); g_snprintf(text, 20, "%.2f", papersize_width/unit_sizes[papersize_unit]); if (g_str_has_suffix(text, ".00")) g_snprintf(text, 20, "%d", (int) (papersize_width/unit_sizes[papersize_unit])); gtk_entry_set_text(entry, text); entry = GTK_ENTRY(g_object_get_data(G_OBJECT(papersize_dialog), "entryHeight")); g_snprintf(text, 20, "%.2f", papersize_height/unit_sizes[papersize_unit]); if (g_str_has_suffix(text, ".00")) g_snprintf(text, 20, "%d", (int) (papersize_height/unit_sizes[papersize_unit])); gtk_entry_set_text(entry, text); } void on_entryWidth_changed (GtkEditable *editable, gpointer user_data) { double val; const gchar *text; gchar *ptr; GtkComboBox *comboStdSizes; text = gtk_entry_get_text(GTK_ENTRY(editable)); val = strtod(text, &ptr); papersize_width_valid = (*ptr == 0 && val > 0.); if (!papersize_width_valid) return; // invalid entry val *= unit_sizes[papersize_unit]; if (fabs(val - papersize_width) < 0.1) return; // no change papersize_std = STD_SIZE_CUSTOM; papersize_width = val; comboStdSizes = GTK_COMBO_BOX(g_object_get_data(G_OBJECT(papersize_dialog), "comboStdSizes")); gtk_combo_box_set_active(comboStdSizes, papersize_std); } void on_entryHeight_changed (GtkEditable *editable, gpointer user_data) { double val; const gchar *text; gchar *ptr; GtkComboBox *comboStdSizes; text = gtk_entry_get_text(GTK_ENTRY(editable)); val = strtod(text, &ptr); papersize_height_valid = (*ptr == 0 && val > 0.); if (!papersize_height_valid) return; // invalid entry val *= unit_sizes[papersize_unit]; if (fabs(val - papersize_height) < 0.1) return; // no change papersize_std = STD_SIZE_CUSTOM; papersize_height = val; comboStdSizes = GTK_COMBO_BOX(g_object_get_data(G_OBJECT(papersize_dialog), "comboStdSizes")); gtk_combo_box_set_active(comboStdSizes, papersize_std); } void on_comboUnit_changed (GtkComboBox *combobox, gpointer user_data) { GtkEntry *entry; int val; gchar text[20]; val = gtk_combo_box_get_active(combobox); if (val == -1 || val == papersize_unit) return; papersize_unit = val; entry = GTK_ENTRY(g_object_get_data(G_OBJECT(papersize_dialog), "entryWidth")); if (papersize_width_valid) { g_snprintf(text, 20, "%.2f", papersize_width/unit_sizes[papersize_unit]); if (g_str_has_suffix(text, ".00")) g_snprintf(text, 20, "%d", (int) (papersize_width/unit_sizes[papersize_unit])); } else *text = 0; gtk_entry_set_text(entry, text); if (papersize_height_valid) { entry = GTK_ENTRY(g_object_get_data(G_OBJECT(papersize_dialog), "entryHeight")); g_snprintf(text, 20, "%.2f", papersize_height/unit_sizes[papersize_unit]); if (g_str_has_suffix(text, ".00")) g_snprintf(text, 20, "%d", (int) (papersize_height/unit_sizes[papersize_unit])); } else *text = 0; gtk_entry_set_text(entry, text); } void on_viewFullscreen_activate (GtkMenuItem *menuitem, gpointer user_data) { gboolean active; if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_CHECK_MENU_ITEM) active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); else active = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem)); if (active == ui.fullscreen) return; do_fullscreen(active); } void on_optionsButtonMappings_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.use_erasertip = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); update_mappings_menu(); } void on_optionsProgressiveBG_activate (GtkMenuItem *menuitem, gpointer user_data) { gboolean active; active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); if (ui.progressive_bg == active) return; end_text(); ui.progressive_bg = active; if (!ui.progressive_bg) rescale_bg_pixmaps(); } void on_mru_activate (GtkMenuItem *menuitem, gpointer user_data) { int which; gboolean success; GtkWidget *dialog; end_text(); if (!ok_to_close()) return; // user aborted on save confirmation for (which = 0 ; which < MRU_SIZE; which++) { if (ui.mrumenu[which] == GTK_WIDGET(menuitem)) break; } if (which == MRU_SIZE || ui.mru[which] == NULL) return; // not found... set_cursor_busy(TRUE); success = open_journal(ui.mru[which]); set_cursor_busy(FALSE); if (success) return; /* open failed */ dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), ui.mru[which]); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); delete_mru_entry(which); } void on_button2Pen_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_PEN); } void on_button2Eraser_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_ERASER); } void on_button2Highlighter_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_HIGHLIGHTER); } void on_button2Text_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_TEXT); } void on_button2Image_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_IMAGE); } void on_button2SelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_SELECTREGION); } void on_button2SelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_SELECTRECT); } void on_button2VerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_VERTSPACE); } void on_button2LinkBrush_activate (GtkMenuItem *menuitem, gpointer user_data) { int i; if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) return; end_text(); ui.linked_brush[1] = BRUSH_LINKED; for (i=0;i= NUM_STROKE_TOOLS) { ui.linked_brush[1] = BRUSH_STATIC; update_mappings_menu_linkings(); return; } ui.linked_brush[1] = BRUSH_COPIED; g_memmove(&(ui.brushes[1][ui.toolno[1]]), &(ui.brushes[0][ui.toolno[1]]), sizeof(struct Brush)); } void on_button3Pen_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_PEN); } void on_button3Eraser_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_ERASER); } void on_button3Highlighter_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_HIGHLIGHTER); } void on_button3Text_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_TEXT); } void on_button3Image_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_IMAGE); } void on_button3SelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_SELECTREGION); } void on_button3SelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_SELECTRECT); } void on_button3VerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_VERTSPACE); } void on_button3LinkBrush_activate (GtkMenuItem *menuitem, gpointer user_data) { int i; if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) return; end_text(); ui.linked_brush[2] = BRUSH_LINKED; for (i=0;i= NUM_STROKE_TOOLS) { ui.linked_brush[2] = BRUSH_STATIC; update_mappings_menu_linkings(); return; } ui.linked_brush[2] = BRUSH_COPIED; g_memmove(&(ui.brushes[2][ui.toolno[2]]), &(ui.brushes[0][ui.toolno[2]]), sizeof(struct Brush)); } // the set zoom dialog GtkWidget *zoom_dialog; double zoom_percent; void on_viewSetZoom_activate (GtkMenuItem *menuitem, gpointer user_data) { int response; double test_w, test_h; GtkSpinButton *spinZoom; end_text(); zoom_dialog = create_zoomDialog(); zoom_percent = 100*ui.zoom / DEFAULT_ZOOM; spinZoom = GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(zoom_dialog), "spinZoom")); gtk_spin_button_set_increments(spinZoom, ui.zoom_step_increment, 5*ui.zoom_step_increment); gtk_spin_button_set_value(spinZoom, zoom_percent); test_w = 100*(GTK_WIDGET(canvas))->allocation.width/ui.cur_page->width/DEFAULT_ZOOM; test_h = 100*(GTK_WIDGET(canvas))->allocation.height/ui.cur_page->height/DEFAULT_ZOOM; if (zoom_percent > 99.9 && zoom_percent < 100.1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "radioZoom100")), TRUE); else if (zoom_percent > test_w-0.1 && zoom_percent < test_w+0.1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "radioZoomWidth")), TRUE); else if (zoom_percent > test_h-0.1 && zoom_percent < test_h+0.1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "radioZoomHeight")), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "radioZoom")), TRUE); gtk_widget_show(zoom_dialog); do { response = gtk_dialog_run(GTK_DIALOG(zoom_dialog)); if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY) { ui.zoom = DEFAULT_ZOOM*zoom_percent/100; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); rescale_text_items(); rescale_bg_pixmaps(); rescale_images(); } } while (response == GTK_RESPONSE_APPLY); gtk_widget_destroy(zoom_dialog); } void on_spinZoom_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { double val; val = gtk_spin_button_get_value(GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "spinZoom"))); if (val<1) return; if (val<10) val=10.; if (val>1500) val=1500.; if (valzoom_percent+1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "radioZoom")), TRUE); zoom_percent = val; } void on_radioZoom_toggled (GtkToggleButton *togglebutton, gpointer user_data) { // nothing to do } void on_radioZoom100_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if (!gtk_toggle_button_get_active(togglebutton)) return; zoom_percent = 100.; gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "spinZoom")), zoom_percent); } void on_radioZoomWidth_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if (!gtk_toggle_button_get_active(togglebutton)) return; zoom_percent = 100*(GTK_WIDGET(canvas))->allocation.width/ui.cur_page->width/DEFAULT_ZOOM; gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "spinZoom")), zoom_percent); } void on_radioZoomHeight_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if (!gtk_toggle_button_get_active(togglebutton)) return; zoom_percent = 100*(GTK_WIDGET(canvas))->allocation.height/ui.cur_page->height/DEFAULT_ZOOM; gtk_spin_button_set_value(GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(zoom_dialog), "spinZoom")), zoom_percent); } void on_toolsHand_activate (GtkMenuItem *menuitem, gpointer user_data) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; if (ui.toolno[ui.cur_mapping] == TOOL_HAND) return; ui.cur_mapping = 0; end_text(); reset_selection(); ui.toolno[ui.cur_mapping] = TOOL_HAND; update_mapping_linkings(-1); update_tool_buttons(); update_tool_menu(); update_color_menu(); update_cursor(); } void on_button2Hand_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 1, TOOL_HAND); } void on_button3Hand_activate (GtkMenuItem *menuitem, gpointer user_data) { process_mapping_activate(menuitem, 2, TOOL_HAND); } void on_optionsPrintRuling_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.print_ruling = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsAutoloadPdfXoj_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.autoload_pdf_xoj = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_fontButton_font_set (GtkFontButton *fontbutton, gpointer user_data) { gchar *str; str = g_strdup(gtk_font_button_get_font_name(fontbutton)); process_font_sel(str); } void on_optionsLeftHanded_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.left_handed = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(GET_COMPONENT("scrolledwindowMain")), ui.left_handed?GTK_CORNER_TOP_RIGHT:GTK_CORNER_TOP_LEFT); } void on_optionsShortenMenus_activate (GtkMenuItem *menuitem, gpointer user_data) { gchar *item, *nextptr; GtkWidget *w; end_text(); ui.shorten_menus = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); /* go over the item list */ item = ui.shorten_menu_items; while (*item==' ') item++; while (*item) { nextptr = strchr(item, ' '); if (nextptr!=NULL) *nextptr = 0; // hide or show the item w = GET_COMPONENT(item); if (w != NULL) { if (ui.shorten_menus) gtk_widget_hide(w); else gtk_widget_show(w); } // next item if (nextptr==NULL) break; *nextptr = ' '; item = nextptr; while (*item==' ') item++; } // just in case someone tried to unhide stuff they shouldn't be seeing hide_unimplemented(); // maybe we should also make sure the drawing area stays visible ? } void on_optionsAutoSavePrefs_activate (GtkMenuItem *menuitem, gpointer user_data) { end_text(); ui.auto_save_prefs = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsPressureSensitive_activate (GtkMenuItem *menuitem, gpointer user_data) { int i; end_text(); ui.pressure_sensitivity = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); for (i=0; i<=NUM_BUTTONS; i++) ui.brushes[i][TOOL_PEN].variable_width = ui.pressure_sensitivity; update_mappings_menu(); } void on_buttonColorChooser_set (GtkColorButton *colorbutton, gpointer user_data) { GdkColor gdkcolor; guint16 alpha; gtk_color_button_get_color(colorbutton, &gdkcolor); alpha = gtk_color_button_get_alpha(colorbutton); process_color_activate((GtkMenuItem*)colorbutton, COLOR_OTHER, gdkcolor_to_rgba(gdkcolor, alpha)); } void on_optionsButtonsSwitchMappings_activate(GtkMenuItem *menuitem, gpointer user_data) { end_text(); switch_mapping(0); ui.button_switch_mapping = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsPenCursor_activate (GtkCheckMenuItem *checkmenuitem, gpointer user_data) { ui.pen_cursor = gtk_check_menu_item_get_active(checkmenuitem); update_cursor(); } void on_optionsTouchAsHandTool_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.touch_as_handtool = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsPenDisablesTouch_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.pen_disables_touch = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsDesignateTouchscreen_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkDialog *dialog; GtkWidget *comboList, *label, *hbox; GList *dev_list; GdkDevice *dev; gint response, count; gchar *str; dialog = GTK_DIALOG(gtk_dialog_new_with_buttons(_("Select device for Touchscreen"), NULL, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL)); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); hbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox); label = gtk_label_new(_("Touchscreen device:")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(dialog->vbox), hbox, FALSE, FALSE, 8); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 8); comboList = gtk_combo_box_new_text(); gtk_widget_show(comboList); gtk_box_pack_start(GTK_BOX(dialog->vbox), comboList, FALSE, FALSE, 8); for (dev_list = gdk_devices_list(), count = 0; dev_list != NULL; dev_list = dev_list->next, count++) { dev = GDK_DEVICE(dev_list->data); gtk_combo_box_append_text(GTK_COMBO_BOX(comboList), dev->name); if (strstr(dev->name, ui.device_for_touch)!=NULL) gtk_combo_box_set_active(GTK_COMBO_BOX(comboList), count); } response = gtk_dialog_run(dialog); if (response == GTK_RESPONSE_OK) { str = gtk_combo_box_get_active_text(GTK_COMBO_BOX(comboList)); if (str!=NULL) { g_free(ui.device_for_touch); ui.device_for_touch = str; } } gtk_widget_destroy(GTK_WIDGET(dialog)); } void on_journalNewPageKeepsBG_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.new_page_bg_from_pdf = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } void on_optionsAutosaveXoj_activate (GtkMenuItem *menuitem, gpointer user_data) { autosave_cleanup(&ui.autosave_filename_list); ui.autosave_enabled = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); if (ui.autosave_enabled) init_autosave(); } void on_optionsLegacyPDFExport_activate (GtkMenuItem *menuitem, gpointer user_data) { ui.exportpdf_prefer_legacy = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem)); } xournal-0.4.8/src/xo-paint.c0000644000175000017500000006556312337425151015357 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "xournal.h" #include "xo-callbacks.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-misc.h" #include "xo-paint.h" /************** drawing nice cursors *********/ void set_cursor_busy(gboolean busy) { GdkCursor *cursor; if (busy) { cursor = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(GTK_WIDGET(winMain)->window, cursor); gdk_window_set_cursor(GTK_WIDGET(canvas)->window, cursor); gdk_cursor_unref(cursor); } else { gdk_window_set_cursor(GTK_WIDGET(winMain)->window, NULL); update_cursor(); } gdk_display_sync(gdk_display_get_default()); } #define PEN_CURSOR_RADIUS 1 #define HILITER_CURSOR_RADIUS 3 #define HILITER_BORDER_RADIUS 4 GdkCursor *make_pen_cursor(guint color_rgba) { int rowstride, x, y; guchar col[4], *pixels; if (ui.pen_cursor == TRUE) { return gdk_cursor_new(GDK_PENCIL); } if (ui.pen_cursor_pix == NULL) { ui.pen_cursor_pix = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 16, 16); if (ui.pen_cursor_pix == NULL) return NULL; // couldn't create pixbuf gdk_pixbuf_fill(ui.pen_cursor_pix, 0xffffff00); // transparent white } rowstride = gdk_pixbuf_get_rowstride(ui.pen_cursor_pix); pixels = gdk_pixbuf_get_pixels(ui.pen_cursor_pix); col[0] = (color_rgba >> 24) & 0xff; col[1] = (color_rgba >> 16) & 0xff; col[2] = (color_rgba >> 8) & 0xff; col[3] = 0xff; // solid for (x = 8-PEN_CURSOR_RADIUS; x <= 8+PEN_CURSOR_RADIUS; x++) for (y = 8-PEN_CURSOR_RADIUS; y <= 8+PEN_CURSOR_RADIUS; y++) g_memmove(pixels + y*rowstride + x*4, col, 4); return gdk_cursor_new_from_pixbuf(gdk_display_get_default(), ui.pen_cursor_pix, 7, 7); } GdkCursor *make_hiliter_cursor(guint color_rgba) { int rowstride, x, y; guchar col[4], *pixels; if (ui.hiliter_cursor_pix == NULL) { ui.hiliter_cursor_pix = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 16, 16); if (ui.hiliter_cursor_pix == NULL) return NULL; // couldn't create pixbuf gdk_pixbuf_fill(ui.hiliter_cursor_pix, 0xffffff00); // transparent white } rowstride = gdk_pixbuf_get_rowstride(ui.hiliter_cursor_pix); pixels = gdk_pixbuf_get_pixels(ui.hiliter_cursor_pix); col[0] = col[1] = col[2] = 0; // black col[3] = 0xff; // solid for (x = 8-HILITER_BORDER_RADIUS; x <= 8+HILITER_BORDER_RADIUS; x++) for (y = 8-HILITER_BORDER_RADIUS; y <= 8+HILITER_BORDER_RADIUS; y++) g_memmove(pixels + y*rowstride + x*4, col, 4); col[0] = (color_rgba >> 24) & 0xff; col[1] = (color_rgba >> 16) & 0xff; col[2] = (color_rgba >> 8) & 0xff; col[3] = 0xff; // solid for (x = 8-HILITER_CURSOR_RADIUS; x <= 8+HILITER_CURSOR_RADIUS; x++) for (y = 8-HILITER_CURSOR_RADIUS; y <= 8+HILITER_CURSOR_RADIUS; y++) g_memmove(pixels + y*rowstride + x*4, col, 4); return gdk_cursor_new_from_pixbuf(gdk_display_get_default(), ui.hiliter_cursor_pix, 7, 7); } void update_cursor(void) { GdkPixmap *source, *mask; GdkColor fg = {0, 0, 0, 0}, bg = {0, 65535, 65535, 65535}; ui.is_sel_cursor = FALSE; if (GTK_WIDGET(canvas)->window == NULL) return; if (ui.cursor!=NULL) { gdk_cursor_unref(ui.cursor); ui.cursor = NULL; } if (ui.cur_item_type == ITEM_MOVESEL_VERT) ui.cursor = gdk_cursor_new(GDK_SB_V_DOUBLE_ARROW); else if (ui.cur_item_type == ITEM_MOVESEL) ui.cursor = gdk_cursor_new(GDK_FLEUR); else if (ui.toolno[ui.cur_mapping] == TOOL_PEN) { ui.cursor = make_pen_cursor(ui.cur_brush->color_rgba); } else if (ui.toolno[ui.cur_mapping] == TOOL_ERASER) { ui.cursor = make_hiliter_cursor(0xffffffff); } else if (ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) { ui.cursor = make_hiliter_cursor(ui.cur_brush->color_rgba); } else if (ui.cur_item_type == ITEM_SELECTRECT) { ui.cursor = gdk_cursor_new(GDK_TCROSS); } else if (ui.toolno[ui.cur_mapping] == TOOL_HAND) { ui.cursor = gdk_cursor_new(GDK_HAND1); } else if (ui.toolno[ui.cur_mapping] == TOOL_TEXT) { ui.cursor = gdk_cursor_new(GDK_XTERM); } gdk_window_set_cursor(GTK_WIDGET(canvas)->window, ui.cursor); } /* adjust the cursor shape if it hovers near a selection box */ void update_cursor_for_resize(double *pt) { gboolean in_range_x, in_range_y; gboolean can_resize_left, can_resize_right, can_resize_bottom, can_resize_top; gdouble resize_margin; GdkCursorType newcursor; // if we're not even close to the box in some direction, return immediately resize_margin = RESIZE_MARGIN / ui.zoom; if (pt[0]bbox.left-resize_margin || pt[0]>ui.selection->bbox.right+resize_margin || pt[1]bbox.top-resize_margin || pt[1]>ui.selection->bbox.bottom+resize_margin) { if (ui.is_sel_cursor) update_cursor(); return; } ui.is_sel_cursor = TRUE; can_resize_left = (pt[0] < ui.selection->bbox.left+resize_margin); can_resize_right = (pt[0] > ui.selection->bbox.right-resize_margin); can_resize_top = (pt[1] < ui.selection->bbox.top+resize_margin); can_resize_bottom = (pt[1] > ui.selection->bbox.bottom-resize_margin); if (can_resize_left) { if (can_resize_top) newcursor = GDK_TOP_LEFT_CORNER; else if (can_resize_bottom) newcursor = GDK_BOTTOM_LEFT_CORNER; else newcursor = GDK_LEFT_SIDE; } else if (can_resize_right) { if (can_resize_top) newcursor = GDK_TOP_RIGHT_CORNER; else if (can_resize_bottom) newcursor = GDK_BOTTOM_RIGHT_CORNER; else newcursor = GDK_RIGHT_SIDE; } else if (can_resize_top) newcursor = GDK_TOP_SIDE; else if (can_resize_bottom) newcursor = GDK_BOTTOM_SIDE; else newcursor = GDK_FLEUR; if (ui.cursor!=NULL && ui.cursor->type == newcursor) return; if (ui.cursor!=NULL) gdk_cursor_unref(ui.cursor); ui.cursor = gdk_cursor_new(newcursor); gdk_window_set_cursor(GTK_WIDGET(canvas)->window, ui.cursor); } /************** painting strokes *************/ #define SUBDIVIDE_MAXDIST 5.0 void subdivide_cur_path(null) { int n, pieces, k; double *p; double x0, y0, x1, y1; for (n=0, p=ui.cur_path.coords; n1) { x0 = p[0]; y0 = p[1]; x1 = p[2]; y1 = p[3]; realloc_cur_path(ui.cur_path.num_points+pieces-1); g_memmove(ui.cur_path.coords+2*(n+pieces), ui.cur_path.coords+2*(n+1), 2*(ui.cur_path.num_points-n-1)*sizeof(double)); p = ui.cur_path.coords+2*n; ui.cur_path.num_points += pieces-1; n += (pieces-1); for (k=1; ktype = ITEM_STROKE; g_memmove(&(ui.cur_item->brush), ui.cur_brush, sizeof(struct Brush)); ui.cur_item->path = &ui.cur_path; realloc_cur_path(2); ui.cur_path.num_points = 1; get_pointer_coords(event, ui.cur_path.coords); if (ui.cur_brush->ruler) { ui.cur_item->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_line_get_type(), "cap-style", GDK_CAP_ROUND, "join-style", GDK_JOIN_ROUND, "fill-color-rgba", ui.cur_item->brush.color_rgba, "width-units", ui.cur_item->brush.thickness, NULL); ui.cur_item->brush.variable_width = FALSE; } else ui.cur_item->canvas_item = gnome_canvas_item_new( ui.cur_layer->group, gnome_canvas_group_get_type(), NULL); } void continue_stroke(GdkEvent *event) { GnomeCanvasPoints seg; double *pt, current_width; if (ui.cur_brush->ruler) { pt = ui.cur_path.coords; } else { realloc_cur_path(ui.cur_path.num_points+1); pt = ui.cur_path.coords + 2*(ui.cur_path.num_points-1); } get_pointer_coords(event, pt+2); if (ui.cur_item->brush.variable_width) { realloc_cur_widths(ui.cur_path.num_points); current_width = ui.cur_item->brush.thickness*get_pressure_multiplier(event); ui.cur_widths[ui.cur_path.num_points-1] = current_width; } else current_width = ui.cur_item->brush.thickness; if (ui.cur_brush->ruler) ui.cur_path.num_points = 2; else { if (hypot(pt[0]-pt[2], pt[1]-pt[3]) < PIXEL_MOTION_THRESHOLD/ui.zoom) return; // not a meaningful motion ui.cur_path.num_points++; } seg.coords = pt; seg.num_points = 2; seg.ref_count = 1; /* note: we're using a piece of the cur_path array. This is ok because upon creation the line just copies the contents of the GnomeCanvasPoints into an internal structure */ if (ui.cur_brush->ruler) gnome_canvas_item_set(ui.cur_item->canvas_item, "points", &seg, NULL); else gnome_canvas_item_new((GnomeCanvasGroup *)ui.cur_item->canvas_item, gnome_canvas_line_get_type(), "points", &seg, "cap-style", GDK_CAP_ROUND, "join-style", GDK_JOIN_ROUND, "fill-color-rgba", ui.cur_item->brush.color_rgba, "width-units", current_width, NULL); } void abort_stroke(void) { if (ui.cur_item_type != ITEM_STROKE || ui.cur_item == NULL) return; ui.cur_path.num_points = 0; gtk_object_destroy(GTK_OBJECT(ui.cur_item->canvas_item)); g_free(ui.cur_item); ui.cur_item = NULL; ui.cur_item_type = ITEM_NONE; } void finalize_stroke(void) { if (ui.cur_path.num_points == 1) { // GnomeCanvas doesn't like num_points=1 ui.cur_path.coords[2] = ui.cur_path.coords[0]+0.1; ui.cur_path.coords[3] = ui.cur_path.coords[1]; ui.cur_path.num_points = 2; ui.cur_item->brush.variable_width = FALSE; } if (!ui.cur_item->brush.variable_width) subdivide_cur_path(); // split the segment so eraser will work ui.cur_item->path = gnome_canvas_points_new(ui.cur_path.num_points); g_memmove(ui.cur_item->path->coords, ui.cur_path.coords, 2*ui.cur_path.num_points*sizeof(double)); if (ui.cur_item->brush.variable_width) ui.cur_item->widths = (gdouble *)g_memdup(ui.cur_widths, (ui.cur_path.num_points-1)*sizeof(gdouble)); else ui.cur_item->widths = NULL; update_item_bbox(ui.cur_item); ui.cur_path.num_points = 0; if (!ui.cur_item->brush.variable_width) { // destroy the entire group of temporary line segments gtk_object_destroy(GTK_OBJECT(ui.cur_item->canvas_item)); // make a new line item to replace it make_canvas_item_one(ui.cur_layer->group, ui.cur_item); } // add undo information prepare_new_undo(); undo->type = ITEM_STROKE; undo->item = ui.cur_item; undo->layer = ui.cur_layer; // store the item on top of the layer stack ui.cur_layer->items = g_list_append(ui.cur_layer->items, ui.cur_item); ui.cur_layer->nitems++; ui.cur_item = NULL; ui.cur_item_type = ITEM_NONE; } /************** eraser tool *************/ void erase_stroke_portions(struct Item *item, double x, double y, double radius, gboolean whole_strokes, struct UndoErasureData *erasure) { int i; double *pt; struct Item *newhead, *newtail; gboolean need_recalc = FALSE; for (i=0, pt=item->path->coords; ipath->num_points; i++, pt+=2) { if (hypot(pt[0]-x, pt[1]-y) <= radius) { // found an intersection // FIXME: need to test if line SEGMENT hits the circle // hide the canvas item, and create erasure data if needed if (erasure == NULL) { item->type = ITEM_TEMP_STROKE; gnome_canvas_item_hide(item->canvas_item); /* we'll use this hidden item as an insertion point later */ erasure = (struct UndoErasureData *)g_malloc(sizeof(struct UndoErasureData)); item->erasure = erasure; erasure->item = item; erasure->npos = g_list_index(ui.cur_layer->items, item); erasure->nrepl = 0; erasure->replacement_items = NULL; } // split the stroke newhead = newtail = NULL; if (!whole_strokes) { if (i>=2) { newhead = (struct Item *)g_malloc(sizeof(struct Item)); newhead->type = ITEM_STROKE; g_memmove(&newhead->brush, &item->brush, sizeof(struct Brush)); newhead->path = gnome_canvas_points_new(i); g_memmove(newhead->path->coords, item->path->coords, 2*i*sizeof(double)); if (newhead->brush.variable_width) newhead->widths = (gdouble *)g_memdup(item->widths, (i-1)*sizeof(gdouble)); else newhead->widths = NULL; } while (++i < item->path->num_points) { pt+=2; if (hypot(pt[0]-x, pt[1]-y) > radius) break; } if (ipath->num_points-1) { newtail = (struct Item *)g_malloc(sizeof(struct Item)); newtail->type = ITEM_STROKE; g_memmove(&newtail->brush, &item->brush, sizeof(struct Brush)); newtail->path = gnome_canvas_points_new(item->path->num_points-i); g_memmove(newtail->path->coords, item->path->coords+2*i, 2*(item->path->num_points-i)*sizeof(double)); if (newtail->brush.variable_width) newtail->widths = (gdouble *)g_memdup(item->widths+i, (item->path->num_points-i-1)*sizeof(gdouble)); else newtail->widths = NULL; newtail->canvas_item = NULL; } } if (item->type == ITEM_STROKE) { // it's inside an erasure list - we destroy it gnome_canvas_points_free(item->path); if (item->brush.variable_width) g_free(item->widths); if (item->canvas_item != NULL) gtk_object_destroy(GTK_OBJECT(item->canvas_item)); erasure->nrepl--; erasure->replacement_items = g_list_remove(erasure->replacement_items, item); g_free(item); } // add the new head if (newhead != NULL) { update_item_bbox(newhead); make_canvas_item_one(ui.cur_layer->group, newhead); lower_canvas_item_to(ui.cur_layer->group, newhead->canvas_item, erasure->item->canvas_item); erasure->replacement_items = g_list_prepend(erasure->replacement_items, newhead); erasure->nrepl++; // prepending ensures it won't get processed twice } // recurse into the new tail need_recalc = (newtail!=NULL); if (newtail == NULL) break; item = newtail; erasure->replacement_items = g_list_prepend(erasure->replacement_items, newtail); erasure->nrepl++; i=0; pt=item->path->coords; } } // add the tail if needed if (!need_recalc) return; update_item_bbox(item); make_canvas_item_one(ui.cur_layer->group, item); lower_canvas_item_to(ui.cur_layer->group, item->canvas_item, erasure->item->canvas_item); } void do_eraser(GdkEvent *event, double radius, gboolean whole_strokes) { struct Item *item, *repl; GList *itemlist, *repllist; double pos[2]; struct BBox eraserbox; get_pointer_coords(event, pos); eraserbox.left = pos[0]-radius; eraserbox.right = pos[0]+radius; eraserbox.top = pos[1]-radius; eraserbox.bottom = pos[1]+radius; for (itemlist = ui.cur_layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type == ITEM_STROKE) { if (!have_intersect(&(item->bbox), &eraserbox)) continue; erase_stroke_portions(item, pos[0], pos[1], radius, whole_strokes, NULL); } else if (item->type == ITEM_TEMP_STROKE) { repllist = item->erasure->replacement_items; while (repllist!=NULL) { repl = (struct Item *)repllist->data; // we may delete the item soon! so advance now in the list repllist = repllist->next; if (have_intersect(&(repl->bbox), &eraserbox)) erase_stroke_portions(repl, pos[0], pos[1], radius, whole_strokes, item->erasure); } } } } void finalize_erasure(void) { GList *itemlist, *partlist; struct Item *item; prepare_new_undo(); undo->type = ITEM_ERASURE; undo->layer = ui.cur_layer; undo->erasurelist = NULL; itemlist = ui.cur_layer->items; while (itemlist!=NULL) { item = (struct Item *)itemlist->data; itemlist = itemlist->next; if (item->type != ITEM_TEMP_STROKE) continue; item->type = ITEM_STROKE; ui.cur_layer->items = g_list_remove(ui.cur_layer->items, item); // the item has an invisible canvas item, which used to act as anchor if (item->canvas_item!=NULL) { gtk_object_destroy(GTK_OBJECT(item->canvas_item)); item->canvas_item = NULL; } undo->erasurelist = g_list_append(undo->erasurelist, item->erasure); // add the new strokes into the current layer for (partlist = item->erasure->replacement_items; partlist!=NULL; partlist = partlist->next) ui.cur_layer->items = g_list_insert_before( ui.cur_layer->items, itemlist, partlist->data); ui.cur_layer->nitems += item->erasure->nrepl-1; } ui.cur_item = NULL; ui.cur_item_type = ITEM_NONE; /* NOTE: the list of erasures goes in the depth order of the layer; this guarantees that, upon undo, the erasure->npos fields give the correct position where each item should be reinserted as the list is traversed in the forward direction */ } gboolean do_hand_scrollto(gpointer data) { ui.hand_scrollto_pending = FALSE; gnome_canvas_scroll_to(canvas, ui.hand_scrollto_cx, ui.hand_scrollto_cy); return FALSE; } void do_hand(GdkEvent *event) { double pt[2]; int cx, cy; get_pointer_coords(event, pt); pt[0] += ui.cur_page->hoffset; pt[1] += ui.cur_page->voffset; gnome_canvas_get_scroll_offsets(canvas, &cx, &cy); ui.hand_scrollto_cx = cx - (pt[0]-ui.hand_refpt[0])*ui.zoom; ui.hand_scrollto_cy = cy - (pt[1]-ui.hand_refpt[1])*ui.zoom; if (!ui.hand_scrollto_pending) g_idle_add(do_hand_scrollto, NULL); ui.hand_scrollto_pending = TRUE; } /************ TEXT FUNCTIONS **************/ // to make it easier to copy/paste at end of text box #define WIDGET_RIGHT_MARGIN 10 void resize_textview(gpointer *toplevel, gpointer *data) { GtkTextView *w; int width, height; /* when the text changes, resize the GtkTextView accordingly */ if (ui.cur_item_type!=ITEM_TEXT) return; w = GTK_TEXT_VIEW(ui.cur_item->widget); width = w->width + WIDGET_RIGHT_MARGIN; height = w->height; gnome_canvas_item_set(ui.cur_item->canvas_item, "size-pixels", TRUE, "width", (gdouble)width, "height", (gdouble)height, NULL); ui.cur_item->bbox.right = ui.cur_item->bbox.left + width/ui.zoom; ui.cur_item->bbox.bottom = ui.cur_item->bbox.top + height/ui.zoom; } void start_text(GdkEvent *event, struct Item *item) { double pt[2]; GtkTextBuffer *buffer; GnomeCanvasItem *canvas_item; PangoFontDescription *font_desc; GdkColor color; get_pointer_coords(event, pt); ui.cur_item_type = ITEM_TEXT; if (item==NULL) { item = g_new(struct Item, 1); item->text = NULL; item->canvas_item = NULL; item->bbox.left = pt[0]; item->bbox.top = pt[1]; item->bbox.right = ui.cur_page->width; item->bbox.bottom = pt[1]+100.; item->font_name = g_strdup(ui.font_name); item->font_size = ui.font_size; g_memmove(&(item->brush), ui.cur_brush, sizeof(struct Brush)); ui.cur_layer->items = g_list_append(ui.cur_layer->items, item); ui.cur_layer->nitems++; } item->type = ITEM_TEMP_TEXT; ui.cur_item = item; font_desc = pango_font_description_from_string(item->font_name); pango_font_description_set_absolute_size(font_desc, item->font_size*ui.zoom*PANGO_SCALE); item->widget = gtk_text_view_new(); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(item->widget)); if (item->text!=NULL) gtk_text_buffer_set_text(buffer, item->text, -1); gtk_widget_modify_font(item->widget, font_desc); rgb_to_gdkcolor(item->brush.color_rgba, &color); gtk_widget_modify_text(item->widget, GTK_STATE_NORMAL, &color); pango_font_description_free(font_desc); canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_widget_get_type(), "x", item->bbox.left, "y", item->bbox.top, "width", item->bbox.right-item->bbox.left, "height", item->bbox.bottom-item->bbox.top, "widget", item->widget, NULL); // TODO: width/height? if (item->canvas_item!=NULL) { lower_canvas_item_to(ui.cur_layer->group, canvas_item, item->canvas_item); gtk_object_destroy(GTK_OBJECT(item->canvas_item)); } item->canvas_item = canvas_item; gtk_widget_show(item->widget); ui.resize_signal_handler = g_signal_connect((gpointer) winMain, "check_resize", G_CALLBACK(resize_textview), NULL); update_font_button(); gtk_widget_set_sensitive(GET_COMPONENT("editPaste"), FALSE); gtk_widget_set_sensitive(GET_COMPONENT("buttonPaste"), FALSE); gtk_widget_grab_focus(item->widget); } void end_text(void) { GtkTextBuffer *buffer; GtkTextIter start, end; gchar *new_text; struct UndoErasureData *erasure; GnomeCanvasItem *tmpitem; if (ui.cur_item_type!=ITEM_TEXT) return; // nothing for us to do! // finalize the text that's been edited... buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(ui.cur_item->widget)); gtk_text_buffer_get_bounds(buffer, &start, &end); ui.cur_item->type = ITEM_TEXT; new_text = gtk_text_buffer_get_text(buffer, &start, &end, TRUE); ui.cur_item_type = ITEM_NONE; gtk_widget_set_sensitive(GET_COMPONENT("editPaste"), TRUE); gtk_widget_set_sensitive(GET_COMPONENT("buttonPaste"), TRUE); if (strlen(new_text)==0) { // erase object and cancel g_free(new_text); g_signal_handler_disconnect(winMain, ui.resize_signal_handler); gtk_object_destroy(GTK_OBJECT(ui.cur_item->canvas_item)); ui.cur_item->canvas_item = NULL; if (ui.cur_item->text == NULL) // nothing happened g_free(ui.cur_item->font_name); else { // treat this as an erasure prepare_new_undo(); undo->type = ITEM_ERASURE; undo->layer = ui.cur_layer; erasure = (struct UndoErasureData *)g_malloc(sizeof(struct UndoErasureData)); erasure->item = ui.cur_item; erasure->npos = g_list_index(ui.cur_layer->items, ui.cur_item); erasure->nrepl = 0; erasure->replacement_items = NULL; undo->erasurelist = g_list_append(NULL, erasure); } ui.cur_layer->items = g_list_remove(ui.cur_layer->items, ui.cur_item); ui.cur_layer->nitems--; ui.cur_item = NULL; return; } // store undo data if (ui.cur_item->text==NULL || strcmp(ui.cur_item->text, new_text)) { prepare_new_undo(); if (ui.cur_item->text == NULL) undo->type = ITEM_TEXT; else undo->type = ITEM_TEXT_EDIT; undo->layer = ui.cur_layer; undo->item = ui.cur_item; undo->str = ui.cur_item->text; } else g_free(ui.cur_item->text); ui.cur_item->text = new_text; ui.cur_item->widget = NULL; // replace the canvas item tmpitem = ui.cur_item->canvas_item; make_canvas_item_one(ui.cur_layer->group, ui.cur_item); update_item_bbox(ui.cur_item); lower_canvas_item_to(ui.cur_layer->group, ui.cur_item->canvas_item, tmpitem); gtk_object_destroy(GTK_OBJECT(tmpitem)); } /* update the items in the canvas so they're of the right font size */ void update_text_item_displayfont(struct Item *item) { PangoFontDescription *font_desc; if (item->type != ITEM_TEXT && item->type != ITEM_TEMP_TEXT) return; if (item->canvas_item==NULL) return; font_desc = pango_font_description_from_string(item->font_name); pango_font_description_set_absolute_size(font_desc, item->font_size*ui.zoom*PANGO_SCALE); if (item->type == ITEM_TEMP_TEXT) gtk_widget_modify_font(item->widget, font_desc); else { gnome_canvas_item_set(item->canvas_item, "font-desc", font_desc, NULL); update_item_bbox(item); } pango_font_description_free(font_desc); } void rescale_text_items(void) { GList *pagelist, *layerlist, *itemlist; for (pagelist = journal.pages; pagelist!=NULL; pagelist = pagelist->next) for (layerlist = ((struct Page *)pagelist->data)->layers; layerlist!=NULL; layerlist = layerlist->next) for (itemlist = ((struct Layer *)layerlist->data)->items; itemlist!=NULL; itemlist = itemlist->next) update_text_item_displayfont((struct Item *)itemlist->data); } struct Item *click_is_in_text(struct Layer *layer, double x, double y) { GList *itemlist; struct Item *item, *val; val = NULL; for (itemlist = layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type != ITEM_TEXT) continue; if (xbbox.left || x>item->bbox.right) continue; if (ybbox.top || y>item->bbox.bottom) continue; val = item; } return val; } struct Item *click_is_in_text_or_image(struct Layer *layer, double x, double y) { GList *itemlist; struct Item *item, *val; val = NULL; for (itemlist = layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type != ITEM_TEXT && item->type != ITEM_IMAGE) continue; if (xbbox.left || x>item->bbox.right) continue; if (ybbox.top || y>item->bbox.bottom) continue; val = item; } return val; } void refont_text_item(struct Item *item, gchar *font_name, double font_size) { if (!strcmp(font_name, item->font_name) && font_size==item->font_size) return; if (item->text!=NULL) { prepare_new_undo(); undo->type = ITEM_TEXT_ATTRIB; undo->item = item; undo->str = item->font_name; undo->val_x = item->font_size; undo->brush = (struct Brush *)g_memdup(&(item->brush), sizeof(struct Brush)); } else g_free(item->font_name); item->font_name = g_strdup(font_name); if (font_size>0.) item->font_size = font_size; update_text_item_displayfont(item); } void process_font_sel(gchar *str) { gchar *p, *q; struct Item *it; gdouble size; GList *list; gboolean undo_cont; p = strrchr(str, ' '); if (p!=NULL) { size = g_strtod(p+1, &q); if (*q!=0 || size<1.) size=0.; else *p=0; } else size=0.; g_free(ui.font_name); ui.font_name = str; if (size>0.) ui.font_size = size; undo_cont = FALSE; // if there's a current text item, re-font it if (ui.cur_item_type == ITEM_TEXT) { refont_text_item(ui.cur_item, str, size); undo_cont = (ui.cur_item->text!=NULL); } // if there's a current selection, re-font it if (ui.selection!=NULL) for (list=ui.selection->items; list!=NULL; list=list->next) { it = (struct Item *)list->data; if (it->type == ITEM_TEXT) { if (undo_cont) undo->multiop |= MULTIOP_CONT_REDO; refont_text_item(it, str, size); if (undo_cont) undo->multiop |= MULTIOP_CONT_UNDO; undo_cont = TRUE; } } update_font_button(); } xournal-0.4.8/src/xo-file.c0000644000175000017500000025665412353616371015172 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef WIN32 #include #include #endif #include "xournal.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-callbacks.h" #include "xo-misc.h" #include "xo-file.h" #include "xo-paint.h" #include "xo-image.h" const char *tool_names[NUM_TOOLS] = {"pen", "eraser", "highlighter", "text", "selectregion", "selectrect", "vertspace", "hand", "image"}; const char *color_names[COLOR_MAX] = {"black", "blue", "red", "green", "gray", "lightblue", "lightgreen", "magenta", "orange", "yellow", "white"}; const char *bgtype_names[3] = {"solid", "pixmap", "pdf"}; const char *bgcolor_names[COLOR_MAX] = {"", "blue", "pink", "green", "", "", "", "", "orange", "yellow", "white"}; const char *bgstyle_names[4] = {"plain", "lined", "ruled", "graph"}; const char *file_domain_names[3] = {"absolute", "attach", "clone"}; const char *unit_names[4] = {"cm", "in", "px", "pt"}; const char *view_mode_names[3] = {"false", "true", "horiz"}; // need 'false' & 'true' for backward compatibility int PDFTOPPM_PRINTING_DPI, GS_BITMAP_DPI; // gzopen() wrapper to handle non-ASCII filenames in Windows gzFile gzopen_wrapper(const char *path, const char *mode) { #ifdef WIN32 gunichar2 *utf16_path = g_utf8_to_utf16(path, -1, NULL, NULL, NULL); gzFile f = gzopen_w(utf16_path, mode); g_free(utf16_path); return f; #else return gzopen(path, mode); #endif } // creates a new empty journal void new_journal(void) { journal.npages = 1; journal.pages = g_list_append(NULL, new_page(&ui.default_page)); journal.last_attach_no = 0; ui.pageno = 0; ui.layerno = 0; ui.cur_page = (struct Page *) journal.pages->data; ui.cur_layer = (struct Layer *) ui.cur_page->layers->data; ui.saved = TRUE; ui.filename = NULL; update_file_name(NULL); } // check attachment names void chk_attach_names(void) { GList *list; struct Background *bg; for (list = journal.pages; list!=NULL; list = list->next) { bg = ((struct Page *)list->data)->bg; if (bg->type == BG_SOLID || bg->file_domain != DOMAIN_ATTACH || bg->filename->s != NULL) continue; bg->filename->s = g_strdup_printf("bg_%d.png", ++journal.last_attach_no); } } /* Write image to file: returns true on success, false on error. The image is written as a base64 encoded PNG. */ gboolean write_image(gzFile f, Item *item) { gchar *base64_str; if (item->image_png == NULL) { if (!gdk_pixbuf_save_to_buffer(item->image, &item->image_png, &item->image_png_len, "png", NULL, NULL)) { item->image_png_len = 0; // failed for some reason, so forget it return FALSE; } } base64_str = g_base64_encode(item->image_png, item->image_png_len); gzputs(f, base64_str); g_free(base64_str); return TRUE; } // create pixbuf from base64 encoded PNG, or return NULL on failure GdkPixbuf *read_pixbuf(const gchar *base64_str, gsize base64_strlen) { gchar *base64_str2; gchar *png_buf; gsize png_buflen; GdkPixbuf *pixbuf; // We have to copy the string in order to null terminate it, sigh. base64_str2 = g_memdup(base64_str, base64_strlen+1); base64_str2[base64_strlen] = 0; png_buf = g_base64_decode(base64_str2, &png_buflen); pixbuf = pixbuf_from_buffer(png_buf, png_buflen); g_free(png_buf); g_free(base64_str2); return pixbuf; } // saves the journal to a file: returns true on success, false on error gboolean save_journal(const char *filename, gboolean is_auto) { gzFile f; struct Page *pg, *tmppg; struct Layer *layer; struct Item *item; int i, is_clone; char *tmpfn, *tmpstr; gboolean success; FILE *tmpf; GList *pagelist, *layerlist, *itemlist, *list; GtkWidget *dialog; f = gzopen_wrapper(filename, "wb"); if (f==NULL) return FALSE; chk_attach_names(); if (is_auto) ui.autosave_filename_list = g_list_append(ui.autosave_filename_list, g_strdup(filename)); setlocale(LC_NUMERIC, "C"); gzprintf(f, "\n" "\n" "Xournal document - see http://math.mit.edu/~auroux/software/xournal/\n"); for (pagelist = journal.pages; pagelist!=NULL; pagelist = pagelist->next) { pg = (struct Page *)pagelist->data; gzprintf(f, "\n", pg->width, pg->height); gzprintf(f, "bg->type]); if (pg->bg->type == BG_SOLID) { gzputs(f, "color=\""); if (pg->bg->color_no >= 0) gzputs(f, bgcolor_names[pg->bg->color_no]); else gzprintf(f, "#%08x", pg->bg->color_rgba); gzprintf(f, "\" style=\"%s\" ", bgstyle_names[pg->bg->ruling]); } else if (pg->bg->type == BG_PIXMAP) { is_clone = -1; for (list = journal.pages, i = 0; list!=pagelist; list = list->next, i++) { tmppg = (struct Page *)list->data; if (tmppg->bg->type == BG_PIXMAP && tmppg->bg->pixbuf == pg->bg->pixbuf && tmppg->bg->filename == pg->bg->filename) { is_clone = i; break; } } if (is_clone >= 0) gzprintf(f, "domain=\"clone\" filename=\"%d\" ", is_clone); else { if (pg->bg->file_domain == DOMAIN_ATTACH) { tmpfn = g_strdup_printf("%s.%s", filename, pg->bg->filename->s); if (is_auto) ui.autosave_filename_list = g_list_append(ui.autosave_filename_list, g_strdup(tmpfn)); if (!gdk_pixbuf_save(pg->bg->pixbuf, tmpfn, "png", NULL, NULL) && !is_auto) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not write background '%s'. Continuing anyway."), tmpfn); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } g_free(tmpfn); } tmpstr = g_markup_escape_text(pg->bg->filename->s, -1); gzprintf(f, "domain=\"%s\" filename=\"%s\" ", file_domain_names[pg->bg->file_domain], tmpstr); g_free(tmpstr); } } else if (pg->bg->type == BG_PDF) { is_clone = 0; for (list = journal.pages; list!=pagelist; list = list->next) { tmppg = (struct Page *)list->data; if (tmppg->bg->type == BG_PDF) { is_clone = 1; break; } } if (!is_clone) { if (pg->bg->file_domain == DOMAIN_ATTACH) { tmpfn = g_strdup_printf("%s.%s", filename, pg->bg->filename->s); success = FALSE; if (bgpdf.status != STATUS_NOT_INIT && bgpdf.file_contents != NULL) { tmpf = g_fopen(tmpfn, "wb"); if (is_auto) ui.autosave_filename_list = g_list_append(ui.autosave_filename_list, g_strdup(tmpfn)); if (tmpf != NULL && fwrite(bgpdf.file_contents, 1, bgpdf.file_length, tmpf) == bgpdf.file_length) success = TRUE; fclose(tmpf); } if (!success && !is_auto) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not write background '%s'. Continuing anyway."), tmpfn); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } g_free(tmpfn); } tmpstr = g_markup_escape_text(pg->bg->filename->s, -1); gzprintf(f, "domain=\"%s\" filename=\"%s\" ", file_domain_names[pg->bg->file_domain], tmpstr); g_free(tmpstr); } gzprintf(f, "pageno=\"%d\" ", pg->bg->file_page_seq); } gzprintf(f, "/>\n"); for (layerlist = pg->layers; layerlist!=NULL; layerlist = layerlist->next) { layer = (struct Layer *)layerlist->data; gzprintf(f, "\n"); for (itemlist = layer->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type == ITEM_STROKE) { gzprintf(f, "brush.tool_type]); if (item->brush.color_no >= 0) gzputs(f, color_names[item->brush.color_no]); else gzprintf(f, "#%08x", item->brush.color_rgba); gzprintf(f, "\" width=\"%.2f", item->brush.thickness); if (item->brush.variable_width) for (i=0;ipath->num_points-1;i++) gzprintf(f, " %.2f", item->widths[i]); gzprintf(f, "\">\n"); for (i=0;i<2*item->path->num_points;i++) gzprintf(f, "%.2f ", item->path->coords[i]); gzprintf(f, "\n\n"); } if (item->type == ITEM_TEXT) { tmpstr = g_markup_escape_text(item->font_name, -1); gzprintf(f, "font_size, item->bbox.left, item->bbox.top); g_free(tmpstr); if (item->brush.color_no >= 0) gzputs(f, color_names[item->brush.color_no]); else gzprintf(f, "#%08x", item->brush.color_rgba); tmpstr = g_markup_escape_text(item->text, -1); gzputs(f, "\">"); gzputs(f, tmpstr); // gzprintf() can't handle > 4095 bytes gzputs(f, "\n"); g_free(tmpstr); } if (item->type == ITEM_IMAGE) { gzprintf(f, "", item->bbox.left, item->bbox.top, item->bbox.right, item->bbox.bottom); if (!write_image(f, item)) success = FALSE; gzprintf(f, "\n"); } } gzprintf(f, "\n"); } gzprintf(f, "\n"); } gzprintf(f, "\n"); gzclose(f); setlocale(LC_NUMERIC, ""); return TRUE; } // autosave stuff void autosave_cleanup(GList **list) { char *filename; GList *l; for (l = *list; l!=NULL; l = l->next) { filename = (char*)l->data; g_unlink(filename); g_free(filename); } if (*list!=NULL) g_list_free(*list); *list = NULL; } #if !GLIB_CHECK_VERSION(2,14,0) #define g_timeout_add_seconds(interval, function, data) g_timeout_add(1000*interval, function, data) #endif gboolean autosave_cb(gpointer is_catchup) { GList *old_filenames; gchar *base_filename, *test_filename; int num; // figure out whether we actually need to auto-save, and can do so. if (!ui.autosave_enabled) { ui.autosave_need_catchup = FALSE; if (!is_catchup) ui.autosave_loop_running = FALSE; return FALSE; // kill the timeout loop, if we're in it } if (ui.saved || !ui.need_autosave) { // nothing to do ui.autosave_need_catchup = FALSE; return TRUE; // come back later, if we're in the timeout loop } if (ui.cur_item_type != ITEM_NONE) { // can't do things now, request catchup ui.autosave_need_catchup = TRUE; return TRUE; // can't do it right now, come back later } // generate an autosave filename base_filename = candidate_save_filename(); for (num=0; num<=AUTOSAVE_MAX; num++) { test_filename = g_strdup_printf(AUTOSAVE_FILENAME_TEMPLATE, base_filename, num); if (!g_file_test(test_filename, G_FILE_TEST_EXISTS)) break; g_free(test_filename); } g_free(base_filename); if (num > AUTOSAVE_MAX) // we ran out of autosave file names... try at the next loop iteration return TRUE; // keep track of old save filenames old_filenames = ui.autosave_filename_list; ui.autosave_filename_list = NULL; if (save_journal(test_filename, TRUE)) { // non-interactive save -> success ui.need_autosave = FALSE; // no longer need an auto-save autosave_cleanup(&old_filenames); } else { // aborted autosave_cleanup(&ui.autosave_filename_list); ui.autosave_filename_list = old_filenames; } g_free(test_filename); return TRUE; // continue with the timed loop, if we're in it } void init_autosave(void) { if (!ui.autosave_enabled) return; if (ui.autosave_loop_running) return; // already running g_timeout_add_seconds(ui.autosave_delay, autosave_cb, NULL); ui.autosave_loop_running = TRUE; ui.autosave_need_catchup = FALSE; ui.need_autosave = !ui.saved; } void delete_autosave(char *filename) { char *attach_filename; int k; g_unlink(filename); attach_filename = g_strdup_printf("%s.bg.pdf", filename); g_unlink(attach_filename); k = 1; do { g_free(attach_filename); attach_filename = g_strdup_printf("%s.bg_%d.png", filename, k++); } while (!g_unlink(attach_filename)); g_free(attach_filename); } char *check_for_autosave(char *filename) { int num, count; char *test_filename, *filter_str, *cand_filename; GtkWidget *dialog; GtkResponseType response; GtkFileFilter *filt_all, *filt_autosave; count = 0; for (num=0; num<=AUTOSAVE_MAX; num++) { test_filename = g_strdup_printf(AUTOSAVE_FILENAME_TEMPLATE, filename, num); if (g_file_test(test_filename, G_FILE_TEST_EXISTS)) { if (!count) cand_filename = g_strdup(test_filename); count++; } g_free(test_filename); } if (count == 0) return g_strdup(filename); // no auto-saves // auto-save file found, ask user what to do about it. dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("%d auto-save files were found, including '%s'"), count, xo_basename(cand_filename, TRUE)); gtk_dialog_add_button(GTK_DIALOG(dialog), _("Ignore"), GTK_RESPONSE_NO); gtk_dialog_add_button(GTK_DIALOG(dialog), _("Restore auto-save"), GTK_RESPONSE_YES); gtk_dialog_add_button(GTK_DIALOG(dialog), _("Delete auto-saves"), GTK_RESPONSE_REJECT); gtk_dialog_set_default_response(GTK_DIALOG (dialog), GTK_RESPONSE_NO); response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if (response == GTK_RESPONSE_REJECT) { // delete all auto-saves + attachments set_cursor_busy(TRUE); for (num=0; num<=AUTOSAVE_MAX; num++) { test_filename = g_strdup_printf(AUTOSAVE_FILENAME_TEMPLATE, filename, num); if (g_file_test(test_filename, G_FILE_TEST_EXISTS)) delete_autosave(test_filename); g_free(test_filename); } set_cursor_busy(FALSE); } if (response != GTK_RESPONSE_YES) { g_free(cand_filename); return g_strdup(filename); // ignore/delete } // restore: ask user to pick one, if there's more than one if (count > 1) { dialog = gtk_file_chooser_dialog_new(_("Multiple auto-saves found"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), cand_filename); // gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), xo_basename(cand_filename, FALSE)); g_free(cand_filename); filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_autosave = gtk_file_filter_new(); filter_str = g_strdup_printf(AUTOSAVE_FILENAME_FILTER, xo_basename(filename, TRUE)); gtk_file_filter_set_name(filt_autosave, _("Auto-save files")); gtk_file_filter_add_pattern(filt_autosave, filter_str); g_free(filter_str); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_autosave); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return g_strdup(filename); } cand_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gtk_widget_destroy(dialog); } // cand_filename is the autosave we want to open return cand_filename; } // closes a journal: returns true on success, false on abort gboolean close_journal(void) { if (!ok_to_close()) return FALSE; // free everything... reset_selection(); reset_recognizer(); clear_redo_stack(); clear_undo_stack(); shutdown_bgpdf(); delete_journal(&journal); autosave_cleanup(&ui.autosave_filename_list); return TRUE; /* note: various members of ui and journal are now in invalid states, use new_journal() to reinitialize them */ } // sanitize a string containing floats, in case it may have , instead of . // also replace Windows-produced 1.#J by inf void cleanup_numeric(char *s) { while (*s!=0) { if (*s==',') *s='.'; if (*s=='1' && s[1]=='.' && s[2]=='#' && s[3]=='J') { *s='i'; s[1]='n'; s[2]='f'; s[3]=' '; } s++; } } // the XML parser functions for open_journal() struct Journal tmpJournal; struct Page *tmpPage; struct Layer *tmpLayer; struct Item *tmpItem; char *tmpFilename; struct Background *tmpBg_pdf; GError *xoj_invalid(void) { return g_error_new(G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, _("Invalid file contents")); } void xoj_parser_start_element(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { int has_attr, i; char *ptr, *tmpptr; struct Background *tmpbg; char *tmpbg_filename; gdouble val; GtkWidget *dialog; if (!strcmp(element_name, "title") || !strcmp(element_name, "xournal")) { if (tmpPage != NULL) { *error = xoj_invalid(); return; } // nothing special to do } else if (!strcmp(element_name, "page")) { // start of a page if (tmpPage != NULL) { *error = xoj_invalid(); return; } tmpPage = (struct Page *)g_malloc(sizeof(struct Page)); tmpPage->layers = NULL; tmpPage->nlayers = 0; tmpPage->group = NULL; tmpPage->bg = g_new(struct Background, 1); tmpPage->bg->type = -1; tmpPage->bg->canvas_item = NULL; tmpPage->bg->pixbuf = NULL; tmpPage->bg->filename = NULL; tmpJournal.pages = g_list_append(tmpJournal.pages, tmpPage); tmpJournal.npages++; // scan for height and width attributes has_attr = 0; while (*attribute_names!=NULL) { if (!strcmp(*attribute_names, "width")) { if (has_attr & 1) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpPage->width = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 1; } else if (!strcmp(*attribute_names, "height")) { if (has_attr & 2) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpPage->height = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 2; } else *error = xoj_invalid(); attribute_names++; attribute_values++; } if (has_attr!=3) *error = xoj_invalid(); } else if (!strcmp(element_name, "background")) { if (tmpPage == NULL || tmpLayer !=NULL || tmpPage->bg->type >= 0) { *error = xoj_invalid(); return; } has_attr = 0; while (*attribute_names!=NULL) { if (!strcmp(*attribute_names, "type")) { if (has_attr) *error = xoj_invalid(); for (i=0; i<3; i++) if (!strcmp(*attribute_values, bgtype_names[i])) tmpPage->bg->type = i; if (tmpPage->bg->type < 0) *error = xoj_invalid(); has_attr |= 1; if (tmpPage->bg->type == BG_PDF) { if (tmpBg_pdf == NULL) tmpBg_pdf = tmpPage->bg; else { has_attr |= 24; tmpPage->bg->filename = refstring_ref(tmpBg_pdf->filename); tmpPage->bg->file_domain = tmpBg_pdf->file_domain; } } } else if (!strcmp(*attribute_names, "color")) { if (tmpPage->bg->type != BG_SOLID) *error = xoj_invalid(); if (has_attr & 2) *error = xoj_invalid(); tmpPage->bg->color_no = COLOR_OTHER; for (i=0; ibg->color_no = i; tmpPage->bg->color_rgba = predef_bgcolors_rgba[i]; } // there's also the case of hex (#rrggbbaa) colors if (tmpPage->bg->color_no == COLOR_OTHER && **attribute_values == '#') { tmpPage->bg->color_rgba = strtoul(*attribute_values + 1, &ptr, 16); if (*ptr!=0) *error = xoj_invalid(); } has_attr |= 2; } else if (!strcmp(*attribute_names, "style")) { if (tmpPage->bg->type != BG_SOLID) *error = xoj_invalid(); if (has_attr & 4) *error = xoj_invalid(); tmpPage->bg->ruling = -1; for (i=0; i<4; i++) if (!strcmp(*attribute_values, bgstyle_names[i])) tmpPage->bg->ruling = i; if (tmpPage->bg->ruling < 0) *error = xoj_invalid(); has_attr |= 4; } else if (!strcmp(*attribute_names, "domain")) { if (tmpPage->bg->type <= BG_SOLID || (has_attr & 8)) { *error = xoj_invalid(); return; } tmpPage->bg->file_domain = -1; for (i=0; i<3; i++) if (!strcmp(*attribute_values, file_domain_names[i])) tmpPage->bg->file_domain = i; if (tmpPage->bg->file_domain < 0) { *error = xoj_invalid(); return; } has_attr |= 8; } else if (!strcmp(*attribute_names, "filename")) { if (tmpPage->bg->type <= BG_SOLID || (has_attr != 9)) { *error = xoj_invalid(); return; } if (tmpPage->bg->file_domain == DOMAIN_CLONE) { // filename is a page number i = strtol(*attribute_values, &ptr, 10); if (ptr == *attribute_values || i < 0 || i > tmpJournal.npages-2) { *error = xoj_invalid(); return; } tmpbg = ((struct Page *)g_list_nth_data(tmpJournal.pages, i))->bg; if (tmpbg->type != tmpPage->bg->type) { *error = xoj_invalid(); return; } tmpPage->bg->filename = refstring_ref(tmpbg->filename); tmpPage->bg->pixbuf = tmpbg->pixbuf; if (tmpbg->pixbuf!=NULL) g_object_ref(tmpbg->pixbuf); tmpPage->bg->file_domain = tmpbg->file_domain; } else { tmpPage->bg->filename = new_refstring(*attribute_values); if (tmpPage->bg->type == BG_PIXMAP) { if (tmpPage->bg->file_domain == DOMAIN_ATTACH) { tmpbg_filename = g_strdup_printf("%s.%s", tmpFilename, *attribute_values); if (sscanf(*attribute_values, "bg_%d.png", &i) == 1) if (i > tmpJournal.last_attach_no) tmpJournal.last_attach_no = i; } else tmpbg_filename = g_strdup(*attribute_values); tmpPage->bg->pixbuf = gdk_pixbuf_new_from_file(tmpbg_filename, NULL); if (tmpPage->bg->pixbuf == NULL) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Could not open background '%s'. Setting background to white."), tmpbg_filename); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); tmpPage->bg->pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 1, 1); gdk_pixbuf_fill(tmpPage->bg->pixbuf, 0xffffffff); // solid white } g_free(tmpbg_filename); } } has_attr |= 16; } else if (!strcmp(*attribute_names, "pageno")) { if (tmpPage->bg->type != BG_PDF || (has_attr & 32)) { *error = xoj_invalid(); return; } tmpPage->bg->file_page_seq = strtol(*attribute_values, &ptr, 10); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 32; } else *error = xoj_invalid(); attribute_names++; attribute_values++; } if (tmpPage->bg->type < 0) *error = xoj_invalid(); if (tmpPage->bg->type == BG_SOLID && has_attr != 7) *error = xoj_invalid(); if (tmpPage->bg->type == BG_PIXMAP && has_attr != 25) *error = xoj_invalid(); if (tmpPage->bg->type == BG_PDF && has_attr != 57) *error = xoj_invalid(); } else if (!strcmp(element_name, "layer")) { // start of a layer if (tmpPage == NULL || tmpLayer != NULL) { *error = xoj_invalid(); return; } tmpLayer = (struct Layer *)g_malloc(sizeof(struct Layer)); tmpLayer->items = NULL; tmpLayer->nitems = 0; tmpLayer->group = NULL; tmpPage->layers = g_list_append(tmpPage->layers, tmpLayer); tmpPage->nlayers++; } else if (!strcmp(element_name, "stroke")) { // start of a stroke if (tmpLayer == NULL || tmpItem != NULL) { *error = xoj_invalid(); return; } tmpItem = (struct Item *)g_malloc(sizeof(struct Item)); tmpItem->type = ITEM_STROKE; tmpItem->path = NULL; tmpItem->canvas_item = NULL; tmpItem->widths = NULL; tmpLayer->items = g_list_append(tmpLayer->items, tmpItem); tmpLayer->nitems++; // scan for tool, color, and width attributes has_attr = 0; while (*attribute_names!=NULL) { if (!strcmp(*attribute_names, "width")) { if (has_attr & 1) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->brush.thickness = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); i = 0; while (*ptr!=0) { realloc_cur_widths(i+1); ui.cur_widths[i] = g_ascii_strtod(ptr, &tmpptr); if (tmpptr == ptr) break; ptr = tmpptr; i++; } tmpItem->brush.variable_width = (i>0); if (i>0) { tmpItem->brush.variable_width = TRUE; tmpItem->widths = (gdouble *) g_memdup(ui.cur_widths, i*sizeof(gdouble)); ui.cur_path.num_points = i+1; } has_attr |= 1; } else if (!strcmp(*attribute_names, "color")) { if (has_attr & 2) *error = xoj_invalid(); tmpItem->brush.color_no = COLOR_OTHER; for (i=0; ibrush.color_no = i; tmpItem->brush.color_rgba = predef_colors_rgba[i]; } // there's also the case of hex (#rrggbbaa) colors if (tmpItem->brush.color_no == COLOR_OTHER && **attribute_values == '#') { tmpItem->brush.color_rgba = strtoul(*attribute_values + 1, &ptr, 16); if (*ptr!=0) *error = xoj_invalid(); } has_attr |= 2; } else if (!strcmp(*attribute_names, "tool")) { if (has_attr & 4) *error = xoj_invalid(); tmpItem->brush.tool_type = -1; for (i=0; ibrush.tool_type = i; } if (tmpItem->brush.tool_type == -1) *error = xoj_invalid(); has_attr |= 4; } else *error = xoj_invalid(); attribute_names++; attribute_values++; } if (has_attr!=7) *error = xoj_invalid(); // finish filling the brush info tmpItem->brush.thickness_no = 0; // who cares ? tmpItem->brush.tool_options = 0; // who cares ? tmpItem->brush.ruler = FALSE; tmpItem->brush.recognizer = FALSE; if (tmpItem->brush.tool_type == TOOL_HIGHLIGHTER) { if (tmpItem->brush.color_no >= 0) tmpItem->brush.color_rgba &= ui.hiliter_alpha_mask; } } else if (!strcmp(element_name, "text")) { // start of a text item if (tmpLayer == NULL || tmpItem != NULL) { *error = xoj_invalid(); return; } tmpItem = (struct Item *)g_malloc0(sizeof(struct Item)); tmpItem->type = ITEM_TEXT; tmpItem->canvas_item = NULL; tmpLayer->items = g_list_append(tmpLayer->items, tmpItem); tmpLayer->nitems++; // scan for font, size, x, y, and color attributes has_attr = 0; while (*attribute_names!=NULL) { if (!strcmp(*attribute_names, "font")) { if (has_attr & 1) *error = xoj_invalid(); tmpItem->font_name = g_strdup(*attribute_values); has_attr |= 1; } else if (!strcmp(*attribute_names, "size")) { if (has_attr & 2) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->font_size = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 2; } else if (!strcmp(*attribute_names, "x")) { if (has_attr & 4) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.left = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 4; } else if (!strcmp(*attribute_names, "y")) { if (has_attr & 8) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.top = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 8; } else if (!strcmp(*attribute_names, "color")) { if (has_attr & 16) *error = xoj_invalid(); tmpItem->brush.color_no = COLOR_OTHER; for (i=0; ibrush.color_no = i; tmpItem->brush.color_rgba = predef_colors_rgba[i]; } // there's also the case of hex (#rrggbbaa) colors if (tmpItem->brush.color_no == COLOR_OTHER && **attribute_values == '#') { tmpItem->brush.color_rgba = strtoul(*attribute_values + 1, &ptr, 16); if (*ptr!=0) *error = xoj_invalid(); } has_attr |= 16; } else *error = xoj_invalid(); attribute_names++; attribute_values++; } if (has_attr!=31) *error = xoj_invalid(); } else if (!strcmp(element_name, "image")) { // start of a image item if (tmpLayer == NULL || tmpItem != NULL) { *error = xoj_invalid(); return; } tmpItem = (struct Item *)g_malloc0(sizeof(struct Item)); tmpItem->type = ITEM_IMAGE; tmpItem->canvas_item = NULL; tmpItem->image=NULL; tmpItem->image_png = NULL; tmpItem->image_png_len = 0; tmpLayer->items = g_list_append(tmpLayer->items, tmpItem); tmpLayer->nitems++; // scan for x, y has_attr = 0; while (*attribute_names!=NULL) { if (!strcmp(*attribute_names, "left")) { if (has_attr & 1) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.left = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 1; } else if (!strcmp(*attribute_names, "top")) { if (has_attr & 2) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.top = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 2; } else if (!strcmp(*attribute_names, "right")) { if (has_attr & 4) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.right = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 4; } else if (!strcmp(*attribute_names, "bottom")) { if (has_attr & 8) *error = xoj_invalid(); cleanup_numeric((gchar *)*attribute_values); tmpItem->bbox.bottom = g_ascii_strtod(*attribute_values, &ptr); if (ptr == *attribute_values) *error = xoj_invalid(); has_attr |= 8; } else *error = xoj_invalid(); attribute_names++; attribute_values++; } if (has_attr!=15) *error = xoj_invalid(); } } void xoj_parser_end_element(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { if (!strcmp(element_name, "page")) { if (tmpPage == NULL || tmpLayer != NULL) { *error = xoj_invalid(); return; } if (tmpPage->nlayers == 0 || tmpPage->bg->type < 0) *error = xoj_invalid(); tmpPage = NULL; } if (!strcmp(element_name, "layer")) { if (tmpLayer == NULL || tmpItem != NULL) { *error = xoj_invalid(); return; } tmpLayer = NULL; } if (!strcmp(element_name, "stroke")) { if (tmpItem == NULL) { *error = xoj_invalid(); return; } update_item_bbox(tmpItem); tmpItem = NULL; } if (!strcmp(element_name, "text")) { if (tmpItem == NULL) { *error = xoj_invalid(); return; } tmpItem = NULL; } if (!strcmp(element_name, "image")) { if (tmpItem == NULL) { *error = xoj_invalid(); return; } tmpItem = NULL; } } void xoj_parser_text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { const gchar *element_name, *ptr; int n; element_name = g_markup_parse_context_get_element(context); if (element_name == NULL) return; if (!strcmp(element_name, "stroke")) { cleanup_numeric((gchar *)text); ptr = text; n = 0; while (text_len > 0) { realloc_cur_path(n/2 + 1); ui.cur_path.coords[n] = g_ascii_strtod(text, (char **)(&ptr)); if (ptr == text) break; text_len -= (ptr - text); text = ptr; if (!finite_sized(ui.cur_path.coords[n])) { if (n>=2) ui.cur_path.coords[n] = ui.cur_path.coords[n-2]; else ui.cur_path.coords[n] = 0; } n++; } if (n<4 || n&1 || (tmpItem->brush.variable_width && (n!=2*ui.cur_path.num_points))) { *error = xoj_invalid(); return; } // wrong number of points tmpItem->path = gnome_canvas_points_new(n/2); g_memmove(tmpItem->path->coords, ui.cur_path.coords, n*sizeof(double)); } if (!strcmp(element_name, "text")) { tmpItem->text = g_malloc(text_len+1); g_memmove(tmpItem->text, text, text_len); tmpItem->text[text_len]=0; } if (!strcmp(element_name, "image")) { tmpItem->image = read_pixbuf(text, text_len); } } gboolean user_wants_second_chance(char **filename) { GtkWidget *dialog; GtkFileFilter *filt_all, *filt_pdf; GtkResponseType response; dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_YES_NO, _("Could not open background '%s'.\nSelect another file?"), *filename); response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if (response != GTK_RESPONSE_YES) return FALSE; dialog = gtk_file_chooser_dialog_new(_("Open PDF"), GTK_WINDOW (winMain), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); #ifdef FILE_DIALOG_SIZE_BUGFIX gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); #endif filt_all = gtk_file_filter_new(); gtk_file_filter_set_name(filt_all, _("All files")); gtk_file_filter_add_pattern(filt_all, "*"); filt_pdf = gtk_file_filter_new(); gtk_file_filter_set_name(filt_pdf, _("PDF files")); gtk_file_filter_add_pattern(filt_pdf, "*.pdf"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pdf); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all); if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { gtk_widget_destroy(dialog); return FALSE; } g_free(*filename); *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); gtk_widget_destroy(dialog); return TRUE; } gboolean open_journal(char *filename) { const GMarkupParser parser = { xoj_parser_start_element, xoj_parser_end_element, xoj_parser_text, NULL, NULL}; GMarkupParseContext *context; GError *error; GtkWidget *dialog; gboolean valid; gzFile f; char buffer[1000]; int len; gchar *tmpfn, *tmpfn2, *p, *q, *filename_actual; gboolean maybe_pdf; tmpfn = g_strdup_printf("%s.xoj", filename); if (ui.autoload_pdf_xoj && g_file_test(tmpfn, G_FILE_TEST_EXISTS) && (g_str_has_suffix(filename, ".pdf") || g_str_has_suffix(filename, ".PDF"))) { valid = open_journal(tmpfn); g_free(tmpfn); return valid; } g_free(tmpfn); filename_actual = check_for_autosave(filename); f = gzopen_wrapper(filename_actual, "rb"); if (f==NULL) { g_free(filename_actual); return FALSE; } if (filename[0]=='/') { if (ui.default_path != NULL) g_free(ui.default_path); ui.default_path = g_path_get_dirname(filename); } context = g_markup_parse_context_new(&parser, 0, NULL, NULL); valid = TRUE; tmpJournal.npages = 0; tmpJournal.pages = NULL; tmpJournal.last_attach_no = 0; tmpPage = NULL; tmpLayer = NULL; tmpItem = NULL; tmpFilename = filename_actual; error = NULL; tmpBg_pdf = NULL; maybe_pdf = TRUE; while (valid && !gzeof(f)) { len = gzread(f, buffer, 1000); if (len<0) valid = FALSE; if (maybe_pdf && len>=4 && !strncmp(buffer, "%PDF", 4)) { valid = FALSE; break; } // most likely pdf else maybe_pdf = FALSE; if (len<=0) break; valid = g_markup_parse_context_parse(context, buffer, len, &error); } gzclose(f); if (valid) valid = g_markup_parse_context_end_parse(context, &error); if (tmpJournal.npages == 0) valid = FALSE; g_markup_parse_context_free(context); if (!valid) { g_free(filename_actual); delete_journal(&tmpJournal); if (!maybe_pdf) return FALSE; // essentially same as on_fileNewBackground from here on ui.saved = TRUE; close_journal(); while (bgpdf.status != STATUS_NOT_INIT) gtk_main_iteration(); new_journal(); ui.zoom = ui.startup_zoom; gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); update_page_stuff(); return init_bgpdf(filename, TRUE, DOMAIN_ABSOLUTE); } ui.saved = TRUE; // force close_journal() to do its job close_journal(); g_memmove(&journal, &tmpJournal, sizeof(struct Journal)); // if we need to initialize a fresh pdf loader if (tmpBg_pdf!=NULL) { while (bgpdf.status != STATUS_NOT_INIT) gtk_main_iteration(); if (tmpBg_pdf->file_domain == DOMAIN_ATTACH) tmpfn = g_strdup_printf("%s.%s", filename_actual, tmpBg_pdf->filename->s); else tmpfn = g_strdup(tmpBg_pdf->filename->s); valid = init_bgpdf(tmpfn, FALSE, tmpBg_pdf->file_domain); // if file name is invalid: first try in xoj file's directory if (!valid && tmpBg_pdf->file_domain != DOMAIN_ATTACH) { p = g_path_get_dirname(filename); q = xo_basename(tmpfn, TRUE); // xoj may specify a cross-platform file path tmpfn2 = g_strdup_printf("%s/%s", p, q); g_free(p); valid = init_bgpdf(tmpfn2, FALSE, tmpBg_pdf->file_domain); if (valid) { // change the file name... // printf("substituting %s -> %s\n", tmpfn, tmpfn2); g_free(tmpBg_pdf->filename->s); tmpBg_pdf->filename->s = tmpfn2; } else g_free(tmpfn2); } // if file name is invalid: next prompt user if (!valid && tmpBg_pdf->file_domain != DOMAIN_ATTACH) if (user_wants_second_chance(&tmpfn)) { valid = init_bgpdf(tmpfn, FALSE, tmpBg_pdf->file_domain); if (valid) { // change the file name... g_free(tmpBg_pdf->filename->s); tmpBg_pdf->filename->s = g_strdup(tmpfn); } } if (valid) { refstring_unref(bgpdf.filename); bgpdf.filename = refstring_ref(tmpBg_pdf->filename); } else { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not open background '%s'."), tmpfn); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } g_free(tmpfn); } ui.pageno = 0; ui.cur_page = (struct Page *)journal.pages->data; ui.layerno = ui.cur_page->nlayers-1; ui.cur_layer = (struct Layer *)(g_list_last(ui.cur_page->layers)->data); ui.zoom = ui.startup_zoom; update_file_name(g_strdup(filename)); gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); make_canvas_items(); update_page_stuff(); rescale_bg_pixmaps(); // this requests the PDF pages if need be gtk_adjustment_set_value(gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)), 0); if (strcmp(filename, filename_actual)) { // we just restored an autosave ui.saved = FALSE; dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_OTHER, GTK_BUTTONS_YES_NO, _("Save this version and delete auto-save?")); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) { if (save_journal(filename, FALSE)) { // success: delete autosave delete_autosave(filename_actual); ui.saved = TRUE; } else { // failed to save; keep gtk_widget_destroy(dialog); dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error saving file '%s'"), filename); gtk_dialog_run(GTK_DIALOG(dialog)); } } gtk_widget_destroy(dialog); } else ui.saved = TRUE; g_free(filename_actual); ui.need_autosave = !ui.saved; return TRUE; } /************ file backgrounds *************/ struct Background *attempt_load_pix_bg(char *filename, gboolean attach) { struct Background *bg; GdkPixbuf *pix; pix = gdk_pixbuf_new_from_file(filename, NULL); if (pix == NULL) return NULL; bg = g_new(struct Background, 1); bg->type = BG_PIXMAP; bg->canvas_item = NULL; bg->pixbuf = pix; bg->pixbuf_scale = DEFAULT_ZOOM; if (attach) { bg->filename = new_refstring(NULL); bg->file_domain = DOMAIN_ATTACH; } else { bg->filename = new_refstring(filename); bg->file_domain = DOMAIN_ABSOLUTE; } return bg; } #define BUFSIZE 65536 // a reasonable buffer size for reads from gs pipe GList *attempt_load_gv_bg(char *filename) { struct Background *bg; GList *bg_list; GdkPixbuf *pix; GdkPixbufLoader *loader; FILE *gs_pipe, *f; unsigned char *buf; char *pipename; int buflen, remnlen, file_pageno; f = g_fopen(filename, "rb"); if (f == NULL) return NULL; buf = g_malloc(BUFSIZE); // a reasonable buffer size if (fread(buf, 1, 4, f) !=4 || (strncmp((char *)buf, "%!PS", 4) && strncmp((char *)buf, "%PDF", 4))) { fclose(f); g_free(buf); return NULL; } fclose(f); pipename = g_strdup_printf(GS_CMDLINE, (double)GS_BITMAP_DPI, filename); gs_pipe = popen(pipename, "rb"); g_free(pipename); bg_list = NULL; remnlen = 0; file_pageno = 0; loader = NULL; if (gs_pipe!=NULL) while (!feof(gs_pipe)) { if (!remnlen) { // new page: get a BMP header ? buflen = fread(buf, 1, 54, gs_pipe); if (buflen < 6) buflen += fread(buf, 1, 54-buflen, gs_pipe); if (buflen < 6 || buf[0]!='B' || buf[1]!='M') break; // fatal: abort remnlen = (int)(buf[5]<<24) + (buf[4]<<16) + (buf[3]<<8) + (buf[2]); loader = gdk_pixbuf_loader_new(); } else buflen = fread(buf, 1, (remnlen < BUFSIZE)?remnlen:BUFSIZE, gs_pipe); remnlen -= buflen; if (buflen == 0) break; if (!gdk_pixbuf_loader_write(loader, buf, buflen, NULL)) break; if (remnlen == 0) { // make a new bg pix = gdk_pixbuf_loader_get_pixbuf(loader); if (pix == NULL) break; g_object_ref(pix); gdk_pixbuf_loader_close(loader, NULL); g_object_unref(loader); loader = NULL; bg = g_new(struct Background, 1); bg->canvas_item = NULL; bg->pixbuf = pix; bg->pixbuf_scale = (GS_BITMAP_DPI/72.0); bg->type = BG_PIXMAP; bg->filename = new_refstring(NULL); bg->file_domain = DOMAIN_ATTACH; file_pageno++; bg_list = g_list_append(bg_list, bg); } } if (loader != NULL) gdk_pixbuf_loader_close(loader, NULL); pclose(gs_pipe); g_free(buf); return bg_list; } struct Background *attempt_screenshot_bg(void) { #ifndef WIN32 struct Background *bg; GdkPixbuf *pix; XEvent x_event; GdkWindow *window; GdkColormap *cmap; int x,y,w,h; Window x_root, x_win; x_root = gdk_x11_get_default_root_xwindow(); if (!XGrabButton(GDK_DISPLAY(), AnyButton, AnyModifier, x_root, False, ButtonReleaseMask, GrabModeAsync, GrabModeSync, None, None)) return NULL; XWindowEvent (GDK_DISPLAY(), x_root, ButtonReleaseMask, &x_event); XUngrabButton(GDK_DISPLAY(), AnyButton, AnyModifier, x_root); x_win = x_event.xbutton.subwindow; if (x_win == None) x_win = x_root; window = gdk_window_foreign_new_for_display(gdk_display_get_default(), x_win); gdk_window_get_geometry(window, &x, &y, &w, &h, NULL); cmap = gdk_drawable_get_colormap(window); if (cmap == NULL) cmap = gdk_colormap_get_system(); pix = gdk_pixbuf_get_from_drawable(NULL, window, cmap, 0, 0, 0, 0, w, h); if (pix == NULL) return NULL; bg = g_new(struct Background, 1); bg->type = BG_PIXMAP; bg->canvas_item = NULL; bg->pixbuf = pix; bg->pixbuf_scale = DEFAULT_ZOOM; bg->filename = new_refstring(NULL); bg->file_domain = DOMAIN_ATTACH; return bg; #else // not implemented under WIN32 return FALSE; #endif } /************** pdf annotation ***************/ /* cancel a request */ void cancel_bgpdf_request(struct BgPdfRequest *req) { GList *list_link; list_link = g_list_find(bgpdf.requests, req); if (list_link == NULL) return; // remove the request bgpdf.requests = g_list_delete_link(bgpdf.requests, list_link); g_free(req); } /* process a bg PDF request from the queue, and recurse */ gboolean bgpdf_scheduler_callback(gpointer data) { struct BgPdfRequest *req; struct BgPdfPage *bgpg; GdkPixbuf *pixbuf; GtkWidget *dialog; PopplerPage *pdfpage; gdouble height, width; int scaled_height, scaled_width; GdkPixmap *pixmap; cairo_t *cr; // if all requests have been cancelled, remove ourselves from main loop if (bgpdf.requests == NULL) { bgpdf.pid = 0; return FALSE; } if (bgpdf.status == STATUS_NOT_INIT) { printf("DEBUG: BGPDF not initialized??\n"); bgpdf.pid = 0; return FALSE; } req = (struct BgPdfRequest *)bgpdf.requests->data; // use poppler to generate the page pixbuf = NULL; pdfpage = poppler_document_get_page(bgpdf.document, req->pageno-1); if (pdfpage) { // printf("DEBUG: Processing request for page %d at %f dpi\n", req->pageno, req->dpi); set_cursor_busy(TRUE); poppler_page_get_size(pdfpage, &width, &height); scaled_width = (int) (req->dpi * width/72); scaled_height = (int) (req->dpi * height/72); if (ui.poppler_force_cairo) { // poppler -> cairo -> pixmap -> pixbuf pixmap = gdk_pixmap_new(GTK_WIDGET(canvas)->window, scaled_width, scaled_height, -1); cr = gdk_cairo_create(pixmap); cairo_set_source_rgb(cr, 1., 1., 1.); cairo_paint(cr); cairo_scale(cr, scaled_width/width, scaled_height/height); poppler_page_render(pdfpage, cr); cairo_destroy(cr); pixbuf = gdk_pixbuf_get_from_drawable(NULL, GDK_DRAWABLE(pixmap), NULL, 0, 0, 0, 0, scaled_width, scaled_height); g_object_unref(pixmap); } else { // directly poppler -> pixbuf: faster, but bitmap font bug pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, scaled_width, scaled_height); wrapper_poppler_page_render_to_pixbuf( pdfpage, 0, 0, scaled_width, scaled_height, req->dpi/72, 0, pixbuf); } g_object_unref(pdfpage); set_cursor_busy(FALSE); } // process the generated pixbuf... if (pixbuf != NULL) { // success while (req->pageno > bgpdf.npages) { bgpg = g_new(struct BgPdfPage, 1); bgpg->pixbuf = NULL; bgpdf.pages = g_list_append(bgpdf.pages, bgpg); bgpdf.npages++; } bgpg = g_list_nth_data(bgpdf.pages, req->pageno-1); if (bgpg->pixbuf!=NULL) g_object_unref(bgpg->pixbuf); bgpg->pixbuf = pixbuf; bgpg->dpi = req->dpi; bgpg->pixel_height = scaled_height; bgpg->pixel_width = scaled_width; bgpdf_update_bg(req->pageno, bgpg); // update all pages that have this bg } else { // failure if (!bgpdf.has_failed) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Unable to render one or more PDF pages.")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } bgpdf.has_failed = TRUE; } bgpdf.requests = g_list_delete_link(bgpdf.requests, bgpdf.requests); if (bgpdf.requests != NULL) return TRUE; // remain in the idle loop bgpdf.pid = 0; return FALSE; // we're done } /* make a request */ gboolean add_bgpdf_request(int pageno, double zoom) { struct BgPdfRequest *req, *cmp_req; GList *list; if (bgpdf.status == STATUS_NOT_INIT) return FALSE; // don't accept requests req = g_new(struct BgPdfRequest, 1); req->pageno = pageno; req->dpi = 72*zoom; // printf("DEBUG: Enqueuing request for page %d at %f dpi\n", pageno, req->dpi); // cancel any request this may supersede for (list = bgpdf.requests; list != NULL; ) { cmp_req = (struct BgPdfRequest *)list->data; list = list->next; if (cmp_req->pageno == pageno) cancel_bgpdf_request(cmp_req); } // make the request bgpdf.requests = g_list_append(bgpdf.requests, req); if (!bgpdf.pid) bgpdf.pid = g_idle_add(bgpdf_scheduler_callback, NULL); return TRUE; } /* shutdown the PDF reader */ void shutdown_bgpdf(void) { GList *list; struct BgPdfPage *pdfpg; struct BgPdfRequest *req; if (bgpdf.status == STATUS_NOT_INIT) return; // cancel all requests and free data structures refstring_unref(bgpdf.filename); for (list = bgpdf.pages; list != NULL; list = list->next) { pdfpg = (struct BgPdfPage *)list->data; if (pdfpg->pixbuf!=NULL) g_object_unref(pdfpg->pixbuf); g_free(pdfpg); } g_list_free(bgpdf.pages); for (list = bgpdf.requests; list != NULL; list = list->next) { req = (struct BgPdfRequest *)list->data; g_free(req); } g_list_free(bgpdf.requests); if (bgpdf.file_contents!=NULL) { g_free(bgpdf.file_contents); bgpdf.file_contents = NULL; } if (bgpdf.document!=NULL) { g_object_unref(bgpdf.document); bgpdf.document = NULL; } bgpdf.status = STATUS_NOT_INIT; } // initialize PDF background rendering gboolean init_bgpdf(char *pdfname, gboolean create_pages, int file_domain) { int i, n_pages; struct Background *bg; struct Page *pg; PopplerPage *pdfpage; gdouble width, height; gchar *uri; if (bgpdf.status != STATUS_NOT_INIT) return FALSE; // make a copy of the file in memory and check it's a PDF if (!g_file_get_contents(pdfname, &(bgpdf.file_contents), &(bgpdf.file_length), NULL)) return FALSE; if (bgpdf.file_length < 4 || strncmp(bgpdf.file_contents, "%PDF", 4)) { g_free(bgpdf.file_contents); bgpdf.file_contents = NULL; return FALSE; } // init bgpdf data structures and open poppler document bgpdf.status = STATUS_READY; bgpdf.filename = new_refstring((file_domain == DOMAIN_ATTACH) ? "bg.pdf" : pdfname); bgpdf.file_domain = file_domain; bgpdf.npages = 0; bgpdf.pages = NULL; bgpdf.requests = NULL; bgpdf.pid = 0; bgpdf.has_failed = FALSE; /* poppler_document_new_from_data() starts at 0.6.1, but we want to be compatible with poppler 0.5.4 = latest in CentOS as of sept 2009 */ uri = g_filename_to_uri(pdfname, NULL, NULL); if (!uri) uri = g_strdup_printf("file://%s", pdfname); bgpdf.document = poppler_document_new_from_file(uri, NULL, NULL); g_free(uri); /* with poppler 0.6.1 or later, can replace the above 4 lines by: bgpdf.document = poppler_document_new_from_data(bgpdf.file_contents, bgpdf.file_length, NULL, NULL); */ if (bgpdf.document == NULL) { shutdown_bgpdf(); return FALSE; } if (pdfname[0]=='/' && ui.filename == NULL) { if (ui.default_path!=NULL) g_free(ui.default_path); ui.default_path = g_path_get_dirname(pdfname); } if (!create_pages) return TRUE; // we're done // create pages with correct sizes if requested n_pages = poppler_document_get_n_pages(bgpdf.document); for (i=1; i<=n_pages; i++) { pdfpage = poppler_document_get_page(bgpdf.document, i-1); if (!pdfpage) continue; if (journal.npages < i) { bg = g_new(struct Background, 1); bg->canvas_item = NULL; pg = NULL; } else { pg = (struct Page *)g_list_nth_data(journal.pages, i-1); bg = pg->bg; } bg->type = BG_PDF; bg->filename = refstring_ref(bgpdf.filename); bg->file_domain = bgpdf.file_domain; bg->file_page_seq = i; bg->pixbuf = NULL; bg->pixbuf_scale = 0; poppler_page_get_size(pdfpage, &width, &height); g_object_unref(pdfpage); if (pg == NULL) { pg = new_page_with_bg(bg, width, height); journal.pages = g_list_append(journal.pages, pg); journal.npages++; } else { pg->width = width; pg->height = height; make_page_clipbox(pg); update_canvas_bg(pg); } } update_page_stuff(); rescale_bg_pixmaps(); // this actually requests the pages !! return TRUE; } // look for all journal pages with given pdf bg, and update their bg pixmaps void bgpdf_update_bg(int pageno, struct BgPdfPage *bgpg) { GList *list; struct Page *pg; for (list = journal.pages; list!= NULL; list = list->next) { pg = (struct Page *)list->data; if (pg->bg->type == BG_PDF && pg->bg->file_page_seq == pageno) { if (pg->bg->pixbuf!=NULL) g_object_unref(pg->bg->pixbuf); pg->bg->pixbuf = g_object_ref(bgpg->pixbuf); pg->bg->pixel_width = bgpg->pixel_width; pg->bg->pixel_height = bgpg->pixel_height; update_canvas_bg(pg); } } } // initialize the recent files list void init_mru(void) { int i; gsize lfptr; char s[5]; GIOChannel *f; gchar *str; GIOStatus status; g_strlcpy(s, "mru0", 5); for (s[3]='0', i=0; i0) { str[lfptr] = 0; ui.mru[i] = str; i++; } } if (f) { g_io_channel_shutdown(f, FALSE, NULL); g_io_channel_unref(f); } update_mru_menu(); } void update_mru_menu(void) { int i; gboolean anyone = FALSE; gchar *tmp; for (i=0; i=1; j--) ui.mru[j] = ui.mru[j-1]; ui.mru[0] = g_strdup(name); update_mru_menu(); } void delete_mru_entry(int which) { int i; if (ui.mru[which]!=NULL) g_free(ui.mru[which]); for (i=which+1;itype = BG_SOLID; ui.default_page.bg->color_no = COLOR_WHITE; ui.default_page.bg->color_rgba = predef_bgcolors_rgba[COLOR_WHITE]; ui.default_page.bg->ruling = RULING_LINED; ui.view_continuous = VIEW_MODE_CONTINUOUS; ui.allow_xinput = TRUE; ui.discard_corepointer = FALSE; ui.ignore_other_devices = TRUE; ui.ignore_btn_reported_up = TRUE; ui.left_handed = FALSE; ui.shorten_menus = FALSE; ui.shorten_menu_items = g_strdup(DEFAULT_SHORTEN_MENUS); ui.auto_save_prefs = FALSE; ui.bg_apply_all_pages = FALSE; ui.new_page_bg_from_pdf = FALSE; ui.use_erasertip = FALSE; ui.window_default_width = 1000; ui.window_default_height = 700; ui.maximize_at_start = FALSE; ui.fullscreen = FALSE; ui.scrollbar_step_increment = 30; ui.zoom_step_increment = 1; ui.zoom_step_factor = 1.5; ui.progressive_bg = TRUE; ui.print_ruling = TRUE; ui.exportpdf_prefer_legacy = FALSE; ui.default_unit = UNIT_CM; ui.default_path = NULL; ui.default_image = NULL; ui.default_font_name = g_strdup(DEFAULT_FONT); ui.default_font_size = DEFAULT_FONT_SIZE; ui.pressure_sensitivity = FALSE; ui.width_minimum_multiplier = 0.0; ui.width_maximum_multiplier = 1.25; ui.button_switch_mapping = FALSE; ui.autoload_pdf_xoj = FALSE; ui.poppler_force_cairo = FALSE; ui.touch_as_handtool = FALSE; ui.pen_disables_touch = FALSE; ui.device_for_touch = g_strdup(DEFAULT_DEVICE_FOR_TOUCH); ui.autosave_enabled = FALSE; ui.autosave_filename_list = NULL; ui.autosave_delay = 5; ui.autosave_loop_running = FALSE; ui.autosave_need_catchup = FALSE; // the default UI vertical order ui.vertical_order[0][0] = 1; ui.vertical_order[0][1] = 2; ui.vertical_order[0][2] = 3; ui.vertical_order[0][3] = 0; ui.vertical_order[0][4] = 4; ui.vertical_order[1][0] = 2; ui.vertical_order[1][1] = 3; ui.vertical_order[1][2] = 0; ui.vertical_order[1][3] = ui.vertical_order[1][4] = -1; ui.toolno[0] = ui.startuptool = TOOL_PEN; for (i=1; i<=NUM_BUTTONS; i++) { ui.toolno[i] = TOOL_ERASER; } ui.toolno[NUM_BUTTONS+1] = TOOL_HAND; // special hand mapping for (i=0; i<=NUM_BUTTONS; i++) ui.linked_brush[i] = BRUSH_LINKED; ui.brushes[0][TOOL_PEN].color_no = COLOR_BLACK; ui.brushes[0][TOOL_ERASER].color_no = COLOR_WHITE; ui.brushes[0][TOOL_HIGHLIGHTER].color_no = COLOR_YELLOW; for (i=0; i < NUM_STROKE_TOOLS; i++) { ui.brushes[0][i].thickness_no = THICKNESS_MEDIUM; ui.brushes[0][i].tool_options = 0; ui.brushes[0][i].ruler = FALSE; ui.brushes[0][i].recognizer = FALSE; ui.brushes[0][i].variable_width = FALSE; } for (i=0; i< NUM_STROKE_TOOLS; i++) for (j=1; j<=NUM_BUTTONS; j++) g_memmove(&(ui.brushes[j][i]), &(ui.brushes[0][i]), sizeof(struct Brush)); // predef_thickness is already initialized as a global variable GS_BITMAP_DPI = 144; PDFTOPPM_PRINTING_DPI = 150; ui.hiliter_opacity = 0.5; ui.pen_cursor = FALSE; #if GTK_CHECK_VERSION(2,10,0) ui.print_settings = NULL; #endif } #if GLIB_CHECK_VERSION(2,6,0) void update_keyval(const gchar *group_name, const gchar *key, const gchar *comment, gchar *value) { gboolean has_it = g_key_file_has_key(ui.config_data, group_name, key, NULL); cleanup_numeric(value); g_key_file_set_value(ui.config_data, group_name, key, value); g_free(value); if (!has_it) g_key_file_set_comment(ui.config_data, group_name, key, comment, NULL); } #endif const char *vorder_usernames[VBOX_MAIN_NITEMS+1] = {"drawarea", "menu", "main_toolbar", "pen_toolbar", "statusbar", NULL}; gchar *verbose_vertical_order(int *order) { gchar buf[80], *p; // longer than needed int i; p = buf; for (i=0; i=VBOX_MAIN_NITEMS) continue; if (p!=buf) *(p++) = ' '; p = g_stpcpy(p, vorder_usernames[order[i]]); } return g_strdup(buf); } void save_config_to_file(void) { gchar *buf; FILE *f; #if GLIB_CHECK_VERSION(2,6,0) // no support for keyval files before Glib 2.6.0 if (glib_minor_version<6) return; // save some data... ui.maximize_at_start = (gdk_window_get_state(winMain->window) & GDK_WINDOW_STATE_MAXIMIZED); if (!ui.maximize_at_start && !ui.fullscreen) gdk_drawable_get_size(winMain->window, &ui.window_default_width, &ui.window_default_height); update_keyval("general", "display_dpi", _(" the display resolution, in pixels per inch"), g_strdup_printf("%.2f", DEFAULT_ZOOM*72)); update_keyval("general", "initial_zoom", _(" the initial zoom level, in percent"), g_strdup_printf("%.2f", 100*ui.zoom/DEFAULT_ZOOM)); update_keyval("general", "window_maximize", _(" maximize the window at startup (true/false)"), g_strdup(ui.maximize_at_start?"true":"false")); update_keyval("general", "window_fullscreen", _(" start in full screen mode (true/false)"), g_strdup(ui.fullscreen?"true":"false")); update_keyval("general", "window_width", _(" the window width in pixels (when not maximized)"), g_strdup_printf("%d", ui.window_default_width)); update_keyval("general", "window_height", _(" the window height in pixels"), g_strdup_printf("%d", ui.window_default_height)); update_keyval("general", "scrollbar_speed", _(" scrollbar step increment (in pixels)"), g_strdup_printf("%d", ui.scrollbar_step_increment)); update_keyval("general", "zoom_dialog_increment", _(" the step increment in the zoom dialog box"), g_strdup_printf("%d", ui.zoom_step_increment)); update_keyval("general", "zoom_step_factor", _(" the multiplicative factor for zoom in/out"), g_strdup_printf("%.3f", ui.zoom_step_factor)); update_keyval("general", "view_continuous", _(" continuous view (false = one page, true = continuous, horiz = horizontal)"), g_strdup(view_mode_names[ui.view_continuous])); update_keyval("general", "use_xinput", _(" use XInput extensions (true/false)"), g_strdup(ui.allow_xinput?"true":"false")); update_keyval("general", "discard_corepointer", _(" discard Core Pointer events in XInput mode (true/false)"), g_strdup(ui.discard_corepointer?"true":"false")); update_keyval("general", "ignore_other_devices", _(" ignore events from other devices while drawing (true/false)"), g_strdup(ui.ignore_other_devices?"true":"false")); update_keyval("general", "ignore_btn_reported_up", _(" do not worry if device reports button isn't pressed while drawing (true/false)"), g_strdup(ui.ignore_btn_reported_up?"true":"false")); update_keyval("general", "use_erasertip", _(" always map eraser tip to eraser (true/false)"), g_strdup(ui.use_erasertip?"true":"false")); update_keyval("general", "touchscreen_as_hand_tool", _(" always map touchscreen device to hand tool (true/false) (requires separate pen and touch devices)"), g_strdup(ui.touch_as_handtool?"true":"false")); update_keyval("general", "pen_disables_touch", _(" disable touchscreen device when pen is in proximity (true/false) (requires separate pen and touch devices)"), g_strdup(ui.pen_disables_touch?"true":"false")); update_keyval("general", "touchscreen_device_name", _(" name of touchscreen device for touchscreen_as_hand_tool"), g_strdup(ui.device_for_touch)); update_keyval("general", "buttons_switch_mappings", _(" buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)"), g_strdup(ui.button_switch_mapping?"true":"false")); update_keyval("general", "autoload_pdf_xoj", _(" automatically load filename.pdf.xoj instead of filename.pdf (true/false)"), g_strdup(ui.autoload_pdf_xoj?"true":"false")); update_keyval("general", "autosave_enabled", _(" enable periodic autosaves (true/false)"), g_strdup(ui.autosave_enabled?"true":"false")); update_keyval("general", "autosave_delay", _(" delay for periodic autosaves (in seconds)"), g_strdup_printf("%d", ui.autosave_delay)); update_keyval("general", "default_path", _(" default path for open/save (leave blank for current directory)"), g_strdup((ui.default_path!=NULL)?ui.default_path:"")); update_keyval("general", "pressure_sensitivity", _(" use pressure sensitivity to control pen stroke width (true/false)"), g_strdup(ui.pressure_sensitivity?"true":"false")); update_keyval("general", "width_minimum_multiplier", _(" minimum width multiplier"), g_strdup_printf("%.2f", ui.width_minimum_multiplier)); update_keyval("general", "width_maximum_multiplier", _(" maximum width multiplier"), g_strdup_printf("%.2f", ui.width_maximum_multiplier)); update_keyval("general", "interface_order", _(" interface components from top to bottom\n valid values: drawarea menu main_toolbar pen_toolbar statusbar"), verbose_vertical_order(ui.vertical_order[0])); update_keyval("general", "interface_fullscreen", _(" interface components in fullscreen mode, from top to bottom"), verbose_vertical_order(ui.vertical_order[1])); update_keyval("general", "interface_lefthanded", _(" interface has left-handed scrollbar (true/false)"), g_strdup(ui.left_handed?"true":"false")); update_keyval("general", "shorten_menus", _(" hide some unwanted menu or toolbar items (true/false)"), g_strdup(ui.shorten_menus?"true":"false")); update_keyval("general", "shorten_menu_items", _(" interface items to hide (customize at your own risk!)\n see source file xo-interface.c for a list of item names"), g_strdup(ui.shorten_menu_items)); update_keyval("general", "highlighter_opacity", _(" highlighter opacity (0 to 1, default 0.5)\n warning: opacity level is not saved in xoj files!"), g_strdup_printf("%.2f", ui.hiliter_opacity)); update_keyval("general", "autosave_prefs", _(" auto-save preferences on exit (true/false)"), g_strdup(ui.auto_save_prefs?"true":"false")); update_keyval("general", "poppler_force_cairo", _(" force PDF rendering through cairo (slower but nicer) (true/false)"), g_strdup(ui.poppler_force_cairo?"true":"false")); update_keyval("general", "exportpdf_prefer_legacy", _(" prefer xournal's own PDF code for exporting PDFs (true/false)"), g_strdup(ui.exportpdf_prefer_legacy?"true":"false")); update_keyval("paper", "width", _(" the default page width, in points (1/72 in)"), g_strdup_printf("%.2f", ui.default_page.width)); update_keyval("paper", "height", _(" the default page height, in points (1/72 in)"), g_strdup_printf("%.2f", ui.default_page.height)); update_keyval("paper", "color", _(" the default paper color"), (ui.default_page.bg->color_no>=0)? g_strdup(bgcolor_names[ui.default_page.bg->color_no]): g_strdup_printf("#%08x", ui.default_page.bg->color_rgba)); update_keyval("paper", "style", _(" the default paper style (plain, lined, ruled, or graph)"), g_strdup(bgstyle_names[ui.default_page.bg->ruling])); update_keyval("paper", "apply_all", _(" apply paper style changes to all pages (true/false)"), g_strdup(ui.bg_apply_all_pages?"true":"false")); update_keyval("paper", "default_unit", _(" preferred unit (cm, in, px, pt)"), g_strdup(unit_names[ui.default_unit])); update_keyval("paper", "print_ruling", _(" include paper ruling when printing or exporting to PDF (true/false)"), g_strdup(ui.print_ruling?"true":"false")); update_keyval("paper", "new_page_duplicates_bg", _(" when creating a new page, duplicate a PDF or image background instead of using default paper (true/false)"), g_strdup(ui.new_page_bg_from_pdf?"true":"false")); update_keyval("paper", "progressive_bg", _(" just-in-time update of page backgrounds (true/false)"), g_strdup(ui.progressive_bg?"true":"false")); update_keyval("paper", "gs_bitmap_dpi", _(" bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)"), g_strdup_printf("%d", GS_BITMAP_DPI)); update_keyval("paper", "pdftoppm_printing_dpi", _(" bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)"), g_strdup_printf("%d", PDFTOPPM_PRINTING_DPI)); update_keyval("tools", "startup_tool", _(" selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image)"), g_strdup(tool_names[ui.startuptool])); update_keyval("tools", "pen_cursor", _(" Use the pencil from cursor theme instead of a color dot (true/false)"), g_strdup(ui.pen_cursor?"true":"false")); update_keyval("tools", "pen_color", _(" default pen color"), (ui.default_brushes[TOOL_PEN].color_no>=0)? g_strdup(color_names[ui.default_brushes[TOOL_PEN].color_no]): g_strdup_printf("#%08x", ui.default_brushes[TOOL_PEN].color_rgba)); update_keyval("tools", "pen_thickness", _(" default pen thickness (fine = 1, medium = 2, thick = 3)"), g_strdup_printf("%d", ui.default_brushes[TOOL_PEN].thickness_no)); update_keyval("tools", "pen_ruler", _(" default pen is in ruler mode (true/false)"), g_strdup(ui.default_brushes[TOOL_PEN].ruler?"true":"false")); update_keyval("tools", "pen_recognizer", _(" default pen is in shape recognizer mode (true/false)"), g_strdup(ui.default_brushes[TOOL_PEN].recognizer?"true":"false")); update_keyval("tools", "eraser_thickness", _(" default eraser thickness (fine = 1, medium = 2, thick = 3)"), g_strdup_printf("%d", ui.default_brushes[TOOL_ERASER].thickness_no)); update_keyval("tools", "eraser_mode", _(" default eraser mode (standard = 0, whiteout = 1, strokes = 2)"), g_strdup_printf("%d", ui.default_brushes[TOOL_ERASER].tool_options)); update_keyval("tools", "highlighter_color", _(" default highlighter color"), (ui.default_brushes[TOOL_HIGHLIGHTER].color_no>=0)? g_strdup(color_names[ui.default_brushes[TOOL_HIGHLIGHTER].color_no]): g_strdup_printf("#%08x", ui.default_brushes[TOOL_HIGHLIGHTER].color_rgba)); update_keyval("tools", "highlighter_thickness", _(" default highlighter thickness (fine = 1, medium = 2, thick = 3)"), g_strdup_printf("%d", ui.default_brushes[TOOL_HIGHLIGHTER].thickness_no)); update_keyval("tools", "highlighter_ruler", _(" default highlighter is in ruler mode (true/false)"), g_strdup(ui.default_brushes[TOOL_HIGHLIGHTER].ruler?"true":"false")); update_keyval("tools", "highlighter_recognizer", _(" default highlighter is in shape recognizer mode (true/false)"), g_strdup(ui.default_brushes[TOOL_HIGHLIGHTER].recognizer?"true":"false")); update_keyval("tools", "btn2_tool", _(" button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image)"), g_strdup(tool_names[ui.toolno[1]])); update_keyval("tools", "btn2_linked", _(" button 2 brush linked to primary brush (true/false) (overrides all other settings)"), g_strdup((ui.linked_brush[1]==BRUSH_LINKED)?"true":"false")); update_keyval("tools", "btn2_color", _(" button 2 brush color (for pen or highlighter only)"), (ui.toolno[1]=0)? g_strdup(color_names[ui.brushes[1][ui.toolno[1]].color_no]): g_strdup_printf("#%08x", ui.brushes[1][ui.toolno[1]].color_rgba)): g_strdup("white")); update_keyval("tools", "btn2_thickness", _(" button 2 brush thickness (pen, eraser, or highlighter only)"), g_strdup_printf("%d", (ui.toolno[1]=0)? g_strdup(color_names[ui.brushes[2][ui.toolno[2]].color_no]): g_strdup_printf("#%08x", ui.brushes[2][ui.toolno[2]].color_rgba)): g_strdup("white")); update_keyval("tools", "btn3_thickness", _(" button 3 brush thickness (pen, eraser, or highlighter only)"), g_strdup_printf("%d", (ui.toolno[2] sup) return FALSE; *val = conv; return TRUE; } gboolean parse_keyval_floatlist(const gchar *group, const gchar *key, double *val, int n, double inf, double sup) { gchar *ret, *end; double conv[5]; int i; if (n>5) return FALSE; ret = g_key_file_get_value(ui.config_data, group, key, NULL); if (ret==NULL) return FALSE; end = ret; for (i=0; i sup)) { g_free(ret); return FALSE; } end++; } g_free(ret); for (i=0; i sup) return FALSE; *val = conv; return TRUE; } gboolean parse_keyval_enum(const gchar *group, const gchar *key, int *val, const char **names, int n) { gchar *ret; int i; ret = g_key_file_get_value(ui.config_data, group, key, NULL); if (ret==NULL) return FALSE; for (i=0; iVBOX_MAIN_NITEMS) return FALSE; // too many items for (i=0; i=VBOX_MAIN_NITEMS) { g_free(ret); return FALSE; } // parse error // we found item #i tmp[n++] = i; while (*p==' ') p++; } for (n=0; ncolor_no), &(ui.default_page.bg->color_rgba), bgcolor_names, predef_bgcolors_rgba, COLOR_MAX); parse_keyval_enum("paper", "style", &(ui.default_page.bg->ruling), bgstyle_names, 4); parse_keyval_boolean("paper", "apply_all", &ui.bg_apply_all_pages); parse_keyval_enum("paper", "default_unit", &ui.default_unit, unit_names, 4); parse_keyval_boolean("paper", "progressive_bg", &ui.progressive_bg); parse_keyval_boolean("paper", "print_ruling", &ui.print_ruling); parse_keyval_boolean("paper", "new_page_duplicates_bg", &ui.new_page_bg_from_pdf); parse_keyval_int("paper", "gs_bitmap_dpi", &GS_BITMAP_DPI, 1, 1200); parse_keyval_int("paper", "pdftoppm_printing_dpi", &PDFTOPPM_PRINTING_DPI, 1, 1200); parse_keyval_enum("tools", "startup_tool", &ui.startuptool, tool_names, NUM_TOOLS); ui.toolno[0] = ui.startuptool; parse_keyval_boolean("tools", "pen_cursor", &ui.pen_cursor); parse_keyval_enum_color("tools", "pen_color", &(ui.brushes[0][TOOL_PEN].color_no), &(ui.brushes[0][TOOL_PEN].color_rgba), color_names, predef_colors_rgba, COLOR_MAX); parse_keyval_int("tools", "pen_thickness", &(ui.brushes[0][TOOL_PEN].thickness_no), 0, 4); parse_keyval_boolean("tools", "pen_ruler", &(ui.brushes[0][TOOL_PEN].ruler)); parse_keyval_boolean("tools", "pen_recognizer", &(ui.brushes[0][TOOL_PEN].recognizer)); parse_keyval_int("tools", "eraser_thickness", &(ui.brushes[0][TOOL_ERASER].thickness_no), 1, 3); parse_keyval_int("tools", "eraser_mode", &(ui.brushes[0][TOOL_ERASER].tool_options), 0, 2); parse_keyval_enum_color("tools", "highlighter_color", &(ui.brushes[0][TOOL_HIGHLIGHTER].color_no), &(ui.brushes[0][TOOL_HIGHLIGHTER].color_rgba), color_names, predef_colors_rgba, COLOR_MAX); parse_keyval_int("tools", "highlighter_thickness", &(ui.brushes[0][TOOL_HIGHLIGHTER].thickness_no), 0, 4); parse_keyval_boolean("tools", "highlighter_ruler", &(ui.brushes[0][TOOL_HIGHLIGHTER].ruler)); parse_keyval_boolean("tools", "highlighter_recognizer", &(ui.brushes[0][TOOL_HIGHLIGHTER].recognizer)); ui.brushes[0][TOOL_PEN].variable_width = ui.pressure_sensitivity; for (i=0; i< NUM_STROKE_TOOLS; i++) for (j=1; j<=NUM_BUTTONS; j++) g_memmove(&(ui.brushes[j][i]), &(ui.brushes[0][i]), sizeof(struct Brush)); parse_keyval_enum("tools", "btn2_tool", &(ui.toolno[1]), tool_names, NUM_TOOLS); if (parse_keyval_boolean("tools", "btn2_linked", &b)) ui.linked_brush[1] = b?BRUSH_LINKED:BRUSH_STATIC; parse_keyval_enum("tools", "btn3_tool", &(ui.toolno[2]), tool_names, NUM_TOOLS); if (parse_keyval_boolean("tools", "btn3_linked", &b)) ui.linked_brush[2] = b?BRUSH_LINKED:BRUSH_STATIC; if (ui.linked_brush[1]!=BRUSH_LINKED) { if (ui.toolno[1]==TOOL_PEN || ui.toolno[1]==TOOL_HIGHLIGHTER) { parse_keyval_boolean("tools", "btn2_ruler", &(ui.brushes[1][ui.toolno[1]].ruler)); parse_keyval_boolean("tools", "btn2_recognizer", &(ui.brushes[1][ui.toolno[1]].recognizer)); parse_keyval_enum_color("tools", "btn2_color", &(ui.brushes[1][ui.toolno[1]].color_no), &(ui.brushes[1][ui.toolno[1]].color_rgba), color_names, predef_colors_rgba, COLOR_MAX); } if (ui.toolno[1]. */ void start_selectrect(GdkEvent *event); void finalize_selectrect(void); void start_selectregion(GdkEvent *event); void finalize_selectregion(void); void continue_selectregion(GdkEvent *event); gboolean start_movesel(GdkEvent *event); void start_vertspace(GdkEvent *event); void continue_movesel(GdkEvent *event); void finalize_movesel(void); gboolean start_resizesel(GdkEvent *event); void continue_resizesel(GdkEvent *event); void finalize_resizesel(void); void selection_delete(void); void recolor_selection(int color_no, guint color_rgba); void rethicken_selection(int val); xournal-0.4.8/src/ttsubset/0000775000175000017500000000000012353735437015325 5ustar aurouxaurouxxournal-0.4.8/src/ttsubset/ttcr.c0000664000175000017500000012422311773660334016447 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)ttcr.c 1.7 03/01/08 SMI */ /* * @file ttcr.c * @brief TrueTypeCreator method implementation * @author Alexander Gelfenbain * @version 1.3 * */ #include #ifdef HAVE_UNISTD_H #include #endif #include #include #ifdef sun #include /* bzero() only in strings.h on Solaris */ #else #include #endif #include #include "ttcr.h" #ifndef O_BINARY #define O_BINARY 0 #endif /* These must be #defined so that they can be used in initializers */ #define T_maxp 0x6D617870 #define T_glyf 0x676C7966 #define T_head 0x68656164 #define T_loca 0x6C6F6361 #define T_name 0x6E616D65 #define T_hhea 0x68686561 #define T_hmtx 0x686D7478 #define T_cmap 0x636D6170 #define T_vhea 0x76686561 #define T_vmtx 0x766D7478 #define T_OS2 0x4F532F32 #define T_post 0x706F7374 #define T_kern 0x6B65726E #define T_cvt 0x63767420 typedef struct { guint32 tag; guint32 length; guint8 *data; } TableEntry; /* * this is a duplicate code from sft.c but it is left here for performance reasons */ #ifdef __GNUC__ #define _inline static __inline__ #else #define _inline static #endif _inline guint32 mkTag(guint8 a, guint8 b, guint8 c, guint8 d) { return (a << 24) | (b << 16) | (c << 8) | d; } /*- Data access macros for data stored in big-endian or little-endian format */ _inline gint16 GetInt16(const guint8 *ptr, size_t offset, int bigendian) { gint16 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 8 | (ptr+offset)[1]; } else { t = (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline guint16 GetUInt16(const guint8 *ptr, size_t offset, int bigendian) { guint16 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 8 | (ptr+offset)[1]; } else { t = (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline gint32 GetInt32(const guint8 *ptr, size_t offset, int bigendian) { gint32 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 24 | (ptr+offset)[1] << 16 | (ptr+offset)[2] << 8 | (ptr+offset)[3]; } else { t = (ptr+offset)[3] << 24 | (ptr+offset)[2] << 16 | (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline guint32 GetUInt32(const guint8 *ptr, size_t offset, int bigendian) { guint32 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 24 | (ptr+offset)[1] << 16 | (ptr+offset)[2] << 8 | (ptr+offset)[3]; } else { t = (ptr+offset)[3] << 24 | (ptr+offset)[2] << 16 | (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline void PutInt16(gint16 val, guint8 *ptr, size_t offset, int bigendian) { assert(ptr != 0); if (bigendian) { ptr[offset] = (val >> 8) & 0xFF; ptr[offset+1] = val & 0xFF; } else { ptr[offset+1] = (val >> 8) & 0xFF; ptr[offset] = val & 0xFF; } } _inline void PutUInt16(guint16 val, guint8 *ptr, size_t offset, int bigendian) { assert(ptr != 0); if (bigendian) { ptr[offset] = (val >> 8) & 0xFF; ptr[offset+1] = val & 0xFF; } else { ptr[offset+1] = (val >> 8) & 0xFF; ptr[offset] = val & 0xFF; } } _inline void PutUInt32(guint32 val, guint8 *ptr, size_t offset, int bigendian) { assert(ptr != 0); if (bigendian) { ptr[offset] = (val >> 24) & 0xFF; ptr[offset+1] = (val >> 16) & 0xFF; ptr[offset+2] = (val >> 8) & 0xFF; ptr[offset+3] = val & 0xFF; } else { ptr[offset+3] = (val >> 24) & 0xFF; ptr[offset+2] = (val >> 16) & 0xFF; ptr[offset+1] = (val >> 8) & 0xFF; ptr[offset] = val & 0xFF; } } _inline void PutInt32(gint32 val, guint8 *ptr, size_t offset, int bigendian) { assert(ptr != 0); if (bigendian) { ptr[offset] = (val >> 24) & 0xFF; ptr[offset+1] = (val >> 16) & 0xFF; ptr[offset+2] = (val >> 8) & 0xFF; ptr[offset+3] = val & 0xFF; } else { ptr[offset+3] = (val >> 24) & 0xFF; ptr[offset+2] = (val >> 16) & 0xFF; ptr[offset+1] = (val >> 8) & 0xFF; ptr[offset] = val & 0xFF; } } static int TableEntryCompareF(const void *l, const void *r) { return ((const TableEntry *) l)->tag - ((const TableEntry *) r)->tag; } static int NameRecordCompareF(const void *l, const void *r) { NameRecord *ll = (NameRecord *) l; NameRecord *rr = (NameRecord *) r; if (ll->platformID != rr->platformID) { return ll->platformID - rr->platformID; } else if (ll->encodingID != rr->encodingID) { return ll->encodingID - rr->encodingID; } else if (ll->languageID != rr->languageID) { return ll->languageID - rr->languageID; } else if (ll->nameID != rr->nameID) { return ll->nameID - rr->nameID; } return 0; } static guint32 CheckSum(guint32 *ptr, guint32 length) { guint32 sum = 0; guint32 *endptr = ptr + ((length + 3) & (guint32) ~3) / 4; while (ptr < endptr) sum += *ptr++; return sum; } _inline void *smalloc(size_t size) { void *res = malloc(size); assert(res != 0); return res; } _inline void *scalloc(size_t n, size_t size) { void *res = calloc(n, size); assert(res != 0); return res; } /* * Public functions */ void TrueTypeCreatorNewEmpty(guint32 tag, TrueTypeCreator **_this) { TrueTypeCreator *ptr = smalloc(sizeof(TrueTypeCreator)); ptr->tables = listNewEmpty(); listSetElementDtor(ptr->tables, (GDestroyNotify)TrueTypeTableDispose); ptr->tag = tag; *_this = ptr; } void TrueTypeCreatorDispose(TrueTypeCreator *_this) { listDispose(_this->tables); free(_this); } int AddTable(TrueTypeCreator *_this, TrueTypeTable *table) { if (table != 0) { listAppend(_this->tables, table); } return SF_OK; } void RemoveTable(TrueTypeCreator *_this, guint32 tag) { int done = 0; if (listCount(_this->tables)) { listToFirst(_this->tables); do { if (((TrueTypeTable *) listCurrent(_this->tables))->tag == tag) { listRemove(_this->tables); } else { if (listNext(_this->tables)) { done = 1; } } } while (!done); } } static void ProcessTables(TrueTypeCreator *); int StreamToMemory(TrueTypeCreator *_this, guint8 **ptr, guint32 *length) { guint16 numTables, searchRange=1, entrySelector=0, rangeShift; guint32 s, offset, checkSumAdjustment = 0; guint32 *p; guint8 *ttf; int i=0, n; TableEntry *te; guint8 *head = NULL; /* saved pointer to the head table data for checkSumAdjustment calculation */ if ((n = listCount(_this->tables)) == 0) return SF_TTFORMAT; ProcessTables(_this); /* ProcessTables() adds 'loca' and 'hmtx' */ n = listCount(_this->tables); numTables = (guint16) n; te = scalloc(n, sizeof(TableEntry)); listToFirst(_this->tables); for (i = 0; i < n; i++) { GetRawData((TrueTypeTable *) listCurrent(_this->tables), &te[i].data, &te[i].length, &te[i].tag); listNext(_this->tables); } qsort(te, n, sizeof(TableEntry), TableEntryCompareF); do { searchRange *= 2; entrySelector++; } while (searchRange <= numTables); searchRange *= 8; entrySelector--; rangeShift = numTables * 16 - searchRange; s = offset = 12 + 16 * n; for (i = 0; i < n; i++) { s += (te[i].length + 3) & (guint32) ~3; /* if ((te[i].length & 3) != 0) s += (4 - (te[i].length & 3)) & 3; */ } ttf = smalloc(s); /* Offset Table */ PutUInt32(_this->tag, ttf, 0, 1); PutUInt16(numTables, ttf, 4, 1); PutUInt16(searchRange, ttf, 6, 1); PutUInt16(entrySelector, ttf, 8, 1); PutUInt16(rangeShift, ttf, 10, 1); /* Table Directory */ for (i = 0; i < n; i++) { PutUInt32(te[i].tag, ttf + 12, 16 * i, 1); PutUInt32(CheckSum((guint32 *) te[i].data, te[i].length), ttf + 12, 16 * i + 4, 1); PutUInt32(offset, ttf + 12, 16 * i + 8, 1); PutUInt32(te[i].length, ttf + 12, 16 * i + 12, 1); if (te[i].tag == T_head) { head = ttf + offset; } memcpy(ttf+offset, te[i].data, (te[i].length + 3) & (guint32) ~3 ); offset += (te[i].length + 3) & (guint32) ~3; /* if ((te[i].length & 3) != 0) offset += (4 - (te[i].length & 3)) & 3; */ } free(te); p = (guint32 *) ttf; for (i = 0; i < s / 4; i++) checkSumAdjustment += p[i]; PutUInt32(0xB1B0AFBA - checkSumAdjustment, head, 8, 1); *ptr = ttf; *length = s; return SF_OK; } int StreamToFile(TrueTypeCreator *_this, const char* fname) { guint8 *ptr; guint32 length; int fd, r; if (!fname) return SF_BADFILE; if ((fd = open(fname, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, 0644)) == -1) return SF_BADFILE; if ((r = StreamToMemory(_this, &ptr, &length)) != SF_OK) return r; if (write(fd, ptr, length) != length) { r = SF_FILEIO; } else { r = SF_OK; } close(fd); free(ptr); return r; } /* * TrueTypeTable private methods */ #define TABLESIZE_head 54 #define TABLESIZE_hhea 36 #define TABLESIZE_maxp 32 /* Table data points to * -------------------------------------------- * generic tdata_generic struct * 'head' TABLESIZE_head bytes of memory * 'hhea' TABLESIZE_hhea bytes of memory * 'loca' tdata_loca struct * 'maxp' TABLESIZE_maxp bytes of memory * 'glyf' list of GlyphData structs (defined in sft.h) * 'name' list of NameRecord structs (defined in sft.h) * 'post' tdata_post struct * */ #define CMAP_SUBTABLE_INIT 10 #define CMAP_SUBTABLE_INCR 10 #define CMAP_PAIR_INIT 500 #define CMAP_PAIR_INCR 500 typedef struct { guint32 id; /* subtable ID (platform/encoding ID) */ guint32 n; /* number of used translation pairs */ guint32 m; /* number of allocated translation pairs */ guint32 *xc; /* character array */ guint32 *xg; /* glyph array */ } CmapSubTable; typedef struct { guint32 n; /* number of used CMAP sub-tables */ guint32 m; /* number of allocated CMAP sub-tables */ CmapSubTable *s; /* sotred array of sub-tables */ } table_cmap; typedef struct { guint32 tag; guint32 nbytes; guint8 *ptr; } tdata_generic; typedef struct { guint32 nbytes; /* number of bytes in loca table */ guint8 *ptr; /* pointer to the data */ } tdata_loca; typedef struct { guint32 format; guint32 italicAngle; gint16 underlinePosition; gint16 underlineThickness; guint32 isFixedPitch; void *ptr; /* format-specific pointer */ } tdata_post; /* allocate memory for a TT table */ static guint8 *ttmalloc(guint32 nbytes) { guint32 n; guint8 *res; n = (nbytes + 3) & (guint32) ~3; res = malloc(n); assert(res != 0); bzero(res, n); return res; } static void FreeGlyphData(void *ptr) { GlyphData *p = (GlyphData *) ptr; if (p->ptr) free(p->ptr); free(p); } static void TrueTypeTableDispose_generic(TrueTypeTable *_this) { if (_this) { if (_this->data) { tdata_generic *pdata = (tdata_generic *) _this->data; if (pdata->nbytes) free(pdata->ptr); free(_this->data); } free(_this); } } static void TrueTypeTableDispose_head(TrueTypeTable *_this) { if (_this) { if (_this->data) free(_this->data); free(_this); } } static void TrueTypeTableDispose_hhea(TrueTypeTable *_this) { if (_this) { if (_this->data) free(_this->data); free(_this); } } static void TrueTypeTableDispose_loca(TrueTypeTable *_this) { if (_this) { if (_this->data) { tdata_loca *p = (tdata_loca *) _this->data; if (p->ptr) free(p->ptr); free(_this->data); } free(_this); } } static void TrueTypeTableDispose_maxp(TrueTypeTable *_this) { if (_this) { if (_this->data) free(_this->data); free(_this); } } static void TrueTypeTableDispose_glyf(TrueTypeTable *_this) { if (_this) { if (_this->data) listDispose((list) _this->data); free(_this); } } static void TrueTypeTableDispose_cmap(TrueTypeTable *_this) { table_cmap *t; CmapSubTable *s; int i; if (_this) { t = (table_cmap *) _this->data; if (t) { s = t->s; if (s) { for (i = 0; i < t->m; i++) { if (s[i].xc) free(s[i].xc); if (s[i].xg) free(s[i].xg); } free(s); } free(t); } free(_this); } } static void TrueTypeTableDispose_name(TrueTypeTable *_this) { if (_this) { if (_this->data) listDispose((list) _this->data); free(_this); } } static void TrueTypeTableDispose_post(TrueTypeTable *_this) { if (_this) { tdata_post *p = (tdata_post *) _this->data; if (p) { if (p->format == 0x00030000) { /* do nothing */ } else { fprintf(stderr, "Unsupported format of a 'post' table: %08X.\n", p->format); } free(p); } free(_this); } } /* destructor vtable */ static struct { guint32 tag; void (*f)(TrueTypeTable *); } vtable1[] = { {0, TrueTypeTableDispose_generic}, {T_head, TrueTypeTableDispose_head}, {T_hhea, TrueTypeTableDispose_hhea}, {T_loca, TrueTypeTableDispose_loca}, {T_maxp, TrueTypeTableDispose_maxp}, {T_glyf, TrueTypeTableDispose_glyf}, {T_cmap, TrueTypeTableDispose_cmap}, {T_name, TrueTypeTableDispose_name}, {T_post, TrueTypeTableDispose_post} }; static int GetRawData_generic(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { assert(_this != 0); assert(_this->data != 0); *ptr = ((tdata_generic *) _this->data)->ptr; *len = ((tdata_generic *) _this->data)->nbytes; *tag = ((tdata_generic *) _this->data)->tag; return TTCR_OK; } static int GetRawData_head(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { *len = TABLESIZE_head; *ptr = (guint8 *) _this->data; *tag = T_head; return TTCR_OK; } static int GetRawData_hhea(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { *len = TABLESIZE_hhea; *ptr = (guint8 *) _this->data; *tag = T_hhea; return TTCR_OK; } static int GetRawData_loca(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { tdata_loca *p; assert(_this->data != 0); p = (tdata_loca *) _this->data; if (p->nbytes == 0) return TTCR_ZEROGLYPHS; *ptr = p->ptr; *len = p->nbytes; *tag = T_loca; return TTCR_OK; } static int GetRawData_maxp(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { *len = TABLESIZE_maxp; *ptr = (guint8 *) _this->data; *tag = T_maxp; return TTCR_OK; } static int GetRawData_glyf(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { guint32 n, nbytes = 0; list l = (list) _this->data; /* guint16 curID = 0; */ /* to check if glyph IDs are sequential and start from zero */ guint8 *p; *ptr = NULL; *len = 0; *tag = 0; if (listCount(l) == 0) return TTCR_ZEROGLYPHS; listToFirst(l); do { /* if (((GlyphData *) listCurrent(l))->glyphID != curID++) return TTCR_GLYPHSEQ; */ nbytes += ((GlyphData *) listCurrent(l))->nbytes; } while (listNext(l)); p = _this->rawdata = ttmalloc(nbytes); listToFirst(l); do { n = ((GlyphData *) listCurrent(l))->nbytes; if (n != 0) { memcpy(p, ((GlyphData *) listCurrent(l))->ptr, n); p += n; } } while (listNext(l)); *len = nbytes; *ptr = _this->rawdata; *tag = T_glyf; return TTCR_OK; } /* cmap packers */ static guint8 *PackCmapType0(CmapSubTable *s, guint32 *length) { guint8 *ptr = smalloc(262); guint8 *p = ptr + 6; int i, j; guint16 g; PutUInt16(0, ptr, 0, 1); PutUInt16(262, ptr, 2, 1); PutUInt16(0, ptr, 4, 1); for (i = 0; i < 256; i++) { g = 0; for (j = 0; j < s->n; j++) { if (s->xc[j] == i) { g = (guint16) s->xg[j]; } } p[i] = (guint8) g; } *length = 262; return ptr; } /* XXX it only handles Format 0 encoding tables */ static guint8 *PackCmap(CmapSubTable *s, guint32 *length) { return PackCmapType0(s, length); } static int GetRawData_cmap(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { table_cmap *t; guint8 **subtables; guint32 *sizes; /* of subtables */ int i; guint32 tlen = 0; guint32 l; guint32 cmapsize; guint8 *cmap; guint32 coffset; assert(_this != 0); t = (table_cmap *) _this->data; assert(t != 0); assert(t->n != 0); subtables = scalloc(t->n, sizeof(guint8 *)); sizes = scalloc(t->n, sizeof(guint32)); for (i = 0; i < t->n; i++) { subtables[i] = PackCmap(t->s+i, &l); sizes[i] = l; tlen += l; } cmapsize = tlen + 4 + 8 * t->n; _this->rawdata = cmap = ttmalloc(cmapsize); PutUInt16(0, cmap, 0, 1); PutUInt16(t->n, cmap, 2, 1); coffset = 4 + t->n * 8; for (i = 0; i < t->n; i++) { PutUInt16(t->s[i].id >> 16, cmap + 4, i * 8, 1); PutUInt16(t->s[i].id & 0xFF, cmap + 4, 2 + i * 8, 1); PutUInt32(coffset, cmap + 4, 4 + i * 8, 1); memcpy(cmap + coffset, subtables[i], sizes[i]); free(subtables[i]); coffset += sizes[i]; } free(subtables); free(sizes); *ptr = cmap; *len = cmapsize; *tag = T_cmap; return TTCR_OK; } static int GetRawData_name(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { list l; NameRecord *nr; gint16 i=0, n; /* number of Name Records */ guint8 *name; guint16 nameLen; int stringLen = 0; guint8 *p1, *p2; *ptr = NULL; *len = 0; *tag = 0; assert(_this != 0); l = (list) _this->data; assert(l != 0); if ((n = listCount(l)) == 0) return TTCR_NONAMES; nr = scalloc(n, sizeof(NameRecord)); listToFirst(l); do { memcpy(nr+i, listCurrent(l), sizeof(NameRecord)); stringLen += nr[i].slen; i++; } while (listNext(l)); if (stringLen > 65535) { free(nr); return TTCR_NAMETOOLONG; } qsort(nr, n, sizeof(NameRecord), NameRecordCompareF); nameLen = stringLen + 12 * n + 6; name = ttmalloc(nameLen); PutUInt16(0, name, 0, 1); PutUInt16(n, name, 2, 1); PutUInt16(6 + 12 * n, name, 4, 1); p1 = name + 6; p2 = p1 + 12 * n; for (i = 0; i < n; i++) { PutUInt16(nr[i].platformID, p1, 0, 1); PutUInt16(nr[i].encodingID, p1, 2, 1); PutUInt16(nr[i].languageID, p1, 4, 1); PutUInt16(nr[i].nameID, p1, 6, 1); PutUInt16(nr[i].slen, p1, 8, 1); PutUInt16(p2 - (name + 6 + 12 * n), p1, 10, 1); memcpy(p2, nr[i].sptr, nr[i].slen); /* {int j; for(j=0; jrawdata = name; *ptr = name; *len = nameLen; *tag = T_name; /*{int j; for(j=0; jdata; guint8 *post = NULL; guint32 postLen = 0; int ret; if (_this->rawdata) free(_this->rawdata); if (p->format == 0x00030000) { postLen = 32; post = ttmalloc(postLen); PutUInt32(0x00030000, post, 0, 1); PutUInt32(p->italicAngle, post, 4, 1); PutUInt16(p->underlinePosition, post, 8, 1); PutUInt16(p->underlineThickness, post, 10, 1); PutUInt16(p->isFixedPitch, post, 12, 1); ret = TTCR_OK; } else { fprintf(stderr, "Unrecognized format of a post table: %08X.\n", p->format); ret = TTCR_POSTFORMAT; } *ptr = _this->rawdata = post; *len = postLen; *tag = T_post; return ret; } static struct { guint32 tag; int (*f)(TrueTypeTable *, guint8 **, guint32 *, guint32 *); } vtable2[] = { {0, GetRawData_generic}, {T_head, GetRawData_head}, {T_hhea, GetRawData_hhea}, {T_loca, GetRawData_loca}, {T_maxp, GetRawData_maxp}, {T_glyf, GetRawData_glyf}, {T_cmap, GetRawData_cmap}, {T_name, GetRawData_name}, {T_post, GetRawData_post} }; /* * TrueTypeTable public methods */ /* Note: Type42 fonts only need these tables: * head, hhea, loca, maxp, cvt, prep, glyf, hmtx, fpgm * * Microsoft required tables * cmap, glyf, head, hhea, hmtx, loca, maxp, name, post, OS/2 * * Apple required tables * cmap, glyf, head, hhea, hmtx, loca, maxp, name, post * */ TrueTypeTable *TrueTypeTableNew(guint32 tag, guint32 nbytes, guint8 *ptr) { TrueTypeTable *table; tdata_generic *pdata; table = smalloc(sizeof(TrueTypeTable)); pdata = (tdata_generic *) smalloc(sizeof(tdata_generic)); pdata->nbytes = nbytes; pdata->tag = tag; if (nbytes) { pdata->ptr = ttmalloc(nbytes); memcpy(pdata->ptr, ptr, nbytes); } else { pdata->ptr = NULL; } table->tag = 0; table->data = pdata; table->rawdata = NULL; return table; } TrueTypeTable *TrueTypeTableNew_head(guint32 fontRevision, guint16 flags, guint16 unitsPerEm, guint8 *created, guint16 macStyle, guint16 lowestRecPPEM, gint16 fontDirectionHint) { TrueTypeTable *table; guint8 *ptr; assert(created != 0); table = smalloc(sizeof(TrueTypeTable)); ptr = ttmalloc(TABLESIZE_head); PutUInt32(0x00010000, ptr, 0, 1); /* version */ PutUInt32(fontRevision, ptr, 4, 1); PutUInt32(0x5F0F3CF5, ptr, 12, 1); /* magic number */ PutUInt16(flags, ptr, 16, 1); PutUInt16(unitsPerEm, ptr, 18, 1); memcpy(ptr+20, created, 8); /* Created Long Date */ bzero(ptr+28, 8); /* Modified Long Date */ PutUInt16(macStyle, ptr, 44, 1); PutUInt16(lowestRecPPEM, ptr, 46, 1); PutUInt16(fontDirectionHint, ptr, 48, 1); PutUInt16(0, ptr, 52, 1); /* glyph data format: 0 */ table->data = (void *) ptr; table->tag = T_head; table->rawdata = NULL; return table; } TrueTypeTable *TrueTypeTableNew_hhea(gint16 ascender, gint16 descender, gint16 linegap, gint16 caretSlopeRise, gint16 caretSlopeRun) { TrueTypeTable *table; guint8 *ptr; table = smalloc(sizeof(TrueTypeTable)); ptr = ttmalloc(TABLESIZE_hhea); PutUInt32(0x00010000, ptr, 0, 1); /* version */ PutUInt16(ascender, ptr, 4, 1); PutUInt16(descender, ptr, 6, 1); PutUInt16(linegap, ptr, 8, 1); PutUInt16(caretSlopeRise, ptr, 18, 1); PutUInt16(caretSlopeRun, ptr, 20, 1); PutUInt16(0, ptr, 22, 1); /* reserved 1 */ PutUInt16(0, ptr, 24, 1); /* reserved 2 */ PutUInt16(0, ptr, 26, 1); /* reserved 3 */ PutUInt16(0, ptr, 28, 1); /* reserved 4 */ PutUInt16(0, ptr, 30, 1); /* reserved 5 */ PutUInt16(0, ptr, 32, 1); /* metricDataFormat */ table->data = (void *) ptr; table->tag = T_hhea; table->rawdata = NULL; return table; } TrueTypeTable *TrueTypeTableNew_loca(void) { TrueTypeTable *table = smalloc(sizeof(TrueTypeTable)); table->data = smalloc(sizeof(tdata_loca)); ((tdata_loca *)table->data)->nbytes = 0; ((tdata_loca *)table->data)->ptr = NULL; table->tag = T_loca; table->rawdata = NULL; return table; } TrueTypeTable *TrueTypeTableNew_maxp(guint8 *maxp, int size) { TrueTypeTable *table = smalloc(sizeof(TrueTypeTable)); table->data = ttmalloc(TABLESIZE_maxp); if (maxp && size == TABLESIZE_maxp) { memcpy(table->data, maxp, TABLESIZE_maxp); } table->tag = T_maxp; table->rawdata = NULL; return table; } TrueTypeTable *TrueTypeTableNew_glyf(void) { TrueTypeTable *table = smalloc(sizeof(TrueTypeTable)); list l = listNewEmpty(); assert(l != 0); listSetElementDtor(l, FreeGlyphData); table->data = l; table->rawdata = NULL; table->tag = T_glyf; return table; } TrueTypeTable *TrueTypeTableNew_cmap(void) { TrueTypeTable *table = smalloc(sizeof(TrueTypeTable)); table_cmap *cmap = smalloc(sizeof(table_cmap)); cmap->n = 0; cmap->m = CMAP_SUBTABLE_INIT; cmap->s = (CmapSubTable *) scalloc(CMAP_SUBTABLE_INIT, sizeof(CmapSubTable)); memset(cmap->s, 0, sizeof(CmapSubTable) * CMAP_SUBTABLE_INIT); table->data = (table_cmap *) cmap; table->rawdata = NULL; table->tag = T_cmap; return table; } static void DisposeNameRecord(void *ptr) { if (ptr != 0) { NameRecord *nr = (NameRecord *) ptr; if (nr->sptr) free(nr->sptr); free(ptr); } } static NameRecord* NameRecordNewCopy(NameRecord *nr) { NameRecord *p = smalloc(sizeof(NameRecord)); memcpy(p, nr, sizeof(NameRecord)); if (p->slen) { p->sptr = smalloc(p->slen); memcpy(p->sptr, nr->sptr, p->slen); } return p; } TrueTypeTable *TrueTypeTableNew_name(int n, NameRecord *nr) { TrueTypeTable *table = smalloc(sizeof(TrueTypeTable)); list l = listNewEmpty(); assert(l != 0); listSetElementDtor(l, DisposeNameRecord); if (n != 0) { int i; for (i = 0; i < n; i++) { listAppend(l, NameRecordNewCopy(nr+i)); } } table->data = l; table->rawdata = NULL; table->tag = T_name; return table; } TrueTypeTable *TrueTypeTableNew_post(guint32 format, guint32 italicAngle, gint16 underlinePosition, gint16 underlineThickness, guint32 isFixedPitch) { TrueTypeTable *table; tdata_post *post; assert(format == 0x00030000); /* Only format 3.0 is supported at this time */ table = smalloc(sizeof(TrueTypeTable)); post = smalloc(sizeof(tdata_post)); post->format = format; post->italicAngle = italicAngle; post->underlinePosition = underlinePosition; post->underlineThickness = underlineThickness; post->isFixedPitch = isFixedPitch; post->ptr = NULL; table->data = post; table->rawdata = NULL; table->tag = T_post; return table; } void TrueTypeTableDispose(TrueTypeTable *_this) { /* XXX do a binary search */ int i; assert(_this != 0); if (_this->rawdata) free(_this->rawdata); for(i=0; i < sizeof(vtable1)/sizeof(*vtable1); i++) { if (_this->tag == vtable1[i].tag) { vtable1[i].f(_this); return; } } assert(!"Unknown TrueType table.\n"); } int GetRawData(TrueTypeTable *_this, guint8 **ptr, guint32 *len, guint32 *tag) { /* XXX do a binary search */ int i; assert(_this != 0); assert(ptr != 0); assert(len != 0); assert(tag != 0); *ptr = NULL; *len = 0; *tag = 0; if (_this->rawdata) { free(_this->rawdata); _this->rawdata = NULL; } for(i=0; i < sizeof(vtable2)/sizeof(*vtable2); i++) { if (_this->tag == vtable2[i].tag) { return vtable2[i].f(_this, ptr, len, tag); } } assert(!"Unknwon TrueType table.\n"); return TTCR_UNKNOWN; } void cmapAdd(TrueTypeTable *table, guint32 id, guint32 c, guint32 g) { int i, found; table_cmap *t; CmapSubTable *s; assert(table != 0); assert(table->tag == T_cmap); t = (table_cmap *) table->data; assert(t != 0); s = t->s; assert(s != 0); found = 0; for (i = 0; i < t->n; i++) { if (s[i].id == id) { found = 1; break; } } if (!found) { if (t->n == t->m) { CmapSubTable *tmp; tmp = scalloc(t->m + CMAP_SUBTABLE_INCR, sizeof(CmapSubTable)); memset(tmp, 0, t->m + CMAP_SUBTABLE_INCR * sizeof(CmapSubTable)); memcpy(tmp, s, sizeof(CmapSubTable) * t->m); t->m += CMAP_SUBTABLE_INCR; free(s); s = tmp; t->s = s; } for (i = 0; i < t->n; i++) { if (s[i].id > id) break; } if (i < t->n) { memmove(s+i+1, s+i, t->n-i); } t->n++; s[i].id = id; s[i].n = 0; s[i].m = CMAP_PAIR_INIT; s[i].xc = scalloc(CMAP_PAIR_INIT, sizeof(guint32)); s[i].xg = scalloc(CMAP_PAIR_INIT, sizeof(guint32)); } if (s[i].n == s[i].m) { guint32 *tmp1 = scalloc(s[i].m + CMAP_PAIR_INCR, sizeof(guint32)); guint32 *tmp2 = scalloc(s[i].m + CMAP_PAIR_INCR, sizeof(guint32)); assert(tmp1 != 0); assert(tmp2 != 0); memcpy(tmp1, s[i].xc, sizeof(guint32) * s[i].m); memcpy(tmp2, s[i].xg, sizeof(guint32) * s[i].m); s[i].m += CMAP_PAIR_INCR; free(s[i].xc); free(s[i].xg); s[i].xc = tmp1; s[i].xg = tmp2; } s[i].xc[s[i].n] = c; s[i].xg[s[i].n] = g; s[i].n++; } guint32 glyfAdd(TrueTypeTable *table, GlyphData *glyphdata, TrueTypeFont *fnt) { list l; guint32 currentID; int ret, n, ncomponents; list glyphlist; GlyphData *gd; assert(table != 0); assert(table->tag == T_glyf); if (!glyphdata) return -1; glyphlist = listNewEmpty(); ncomponents = GetTTGlyphComponents(fnt, glyphdata->glyphID, glyphlist); l = (list) table->data; if (listCount(l) > 0) { listToLast(l); ret = n = ((GlyphData *) listCurrent(l))->newID + 1; } else { ret = n = 0; } glyphdata->newID = n++; listAppend(l, glyphdata); if (ncomponents > 1) { listPositionAt(glyphlist, 1); /* glyphData->glyphID is always the first glyph on the list */ do { int found = 0; currentID = (guint32) listCurrent(glyphlist); /* XXX expensive! should be rewritten with sorted arrays! */ listToFirst(l); do { if (((GlyphData *) listCurrent(l))->glyphID == currentID) { found = 1; break; } } while (listNext(l)); if (!found) { gd = GetTTRawGlyphData(fnt, currentID); gd->newID = n++; listAppend(l, gd); } } while (listNext(glyphlist)); } listDispose(glyphlist); return ret; } guint32 glyfCount(const TrueTypeTable *table) { assert(table != 0); assert(table->tag == T_glyf); return listCount((list) table->data); } void nameAdd(TrueTypeTable *table, NameRecord *nr) { list l; assert(table != 0); assert(table->tag == T_name); l = (list) table->data; listAppend(l, NameRecordNewCopy(nr)); } static TrueTypeTable *FindTable(TrueTypeCreator *tt, guint32 tag) { if (listIsEmpty(tt->tables)) return NULL; listToFirst(tt->tables); do { if (((TrueTypeTable *) listCurrent(tt->tables))->tag == tag) { return listCurrent(tt->tables); } } while (listNext(tt->tables)); return NULL; } /* This function processes all the tables and synchronizes them before creating * the output TrueType stream. * * *** It adds two TrueType tables to the font: 'loca' and 'hmtx' *** * * It does: * * - Re-numbers glyph IDs and creates 'glyf', 'loca', and 'hmtx' tables. * - Calculates xMin, yMin, xMax, and yMax and stores values in 'head' table. * - Stores indexToLocFormat in 'head' * - updates 'maxp' table * - Calculates advanceWidthMax, minLSB, minRSB, xMaxExtent and numberOfHMetrics * in 'hhea' table * */ static void ProcessTables(TrueTypeCreator *tt) { TrueTypeTable *glyf, *loca, *head, *maxp, *hhea; list glyphlist; guint32 nGlyphs, locaLen = 0, glyfLen = 0; gint16 xMin = 0, yMin = 0, xMax = 0, yMax = 0; int i = 0; gint16 indexToLocFormat; guint8 *glyfPtr, *locaPtr, *hmtxPtr, *hheaPtr; guint32 hmtxSize; guint8 *p1, *p2; guint16 maxPoints = 0, maxContours = 0, maxCompositePoints = 0, maxCompositeContours = 0; TTSimpleGlyphMetrics *met; int nlsb = 0; guint32 *gid; /* array of old glyphIDs */ glyf = FindTable(tt, T_glyf); glyphlist = (list) glyf->data; nGlyphs = listCount(glyphlist); assert(nGlyphs != 0); gid = scalloc(nGlyphs, sizeof(guint32)); RemoveTable(tt, T_loca); RemoveTable(tt, T_hmtx); /* XXX Need to make sure that composite glyphs do not break during glyph renumbering */ listToFirst(glyphlist); do { GlyphData *gd = (GlyphData *) listCurrent(glyphlist); gint16 z; glyfLen += gd->nbytes; /* XXX if (gd->nbytes & 1) glyfLen++; */ assert(gd->newID == i); gid[i++] = gd->glyphID; /* gd->glyphID = i++; */ /* printf("IDs: %d %d.\n", gd->glyphID, gd->newID); */ if (gd->nbytes != 0) { z = GetInt16(gd->ptr, 2, 1); if (z < xMin) xMin = z; z = GetInt16(gd->ptr, 4, 1); if (z < yMin) yMin = z; z = GetInt16(gd->ptr, 6, 1); if (z > xMax) xMax = z; z = GetInt16(gd->ptr, 8, 1); if (z > yMax) yMax = z; } if (gd->compflag == 0) { /* non-composite glyph */ if (gd->npoints > maxPoints) maxPoints = gd->npoints; if (gd->ncontours > maxContours) maxContours = gd->ncontours; } else { /* composite glyph */ if (gd->npoints > maxCompositePoints) maxCompositePoints = gd->npoints; if (gd->ncontours > maxCompositeContours) maxCompositeContours = gd->ncontours; } } while (listNext(glyphlist)); indexToLocFormat = (glyfLen / 2 > 0xFFFF) ? 1 : 0; locaLen = indexToLocFormat ? (nGlyphs + 1) << 2 : (nGlyphs + 1) << 1; glyfPtr = ttmalloc(glyfLen); locaPtr = ttmalloc(locaLen); met = scalloc(nGlyphs, sizeof(TTSimpleGlyphMetrics)); i = 0; listToFirst(glyphlist); p1 = glyfPtr; p2 = locaPtr; do { GlyphData *gd = (GlyphData *) listCurrent(glyphlist); if (gd->compflag) { /* re-number all components */ guint16 flags, index; guint8 *ptr = gd->ptr + 10; do { int j; flags = GetUInt16(ptr, 0, 1); index = GetUInt16(ptr, 2, 1); /* XXX use the sorted array of old to new glyphID mapping and do a binary search */ for (j = 0; j < nGlyphs; j++) { if (gid[j] == index) { break; } } /* printf("X: %d -> %d.\n", index, j); */ PutUInt16((guint16) j, ptr, 2, 1); ptr += 4; if (flags & ARG_1_AND_2_ARE_WORDS) { ptr += 4; } else { ptr += 2; } if (flags & WE_HAVE_A_SCALE) { ptr += 2; } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { ptr += 4; } else if (flags & WE_HAVE_A_TWO_BY_TWO) { ptr += 8; } } while (flags & MORE_COMPONENTS); } if (gd->nbytes != 0) { memcpy(p1, gd->ptr, gd->nbytes); } if (indexToLocFormat == 1) { PutUInt32(p1 - glyfPtr, p2, 0, 1); p2 += 4; } else { PutUInt16((p1 - glyfPtr) >> 1, p2, 0, 1); p2 += 2; } p1 += gd->nbytes; /* fill the array of metrics */ met[i].adv = gd->aw; met[i].sb = gd->lsb; i++; } while (listNext(glyphlist)); free(gid); if (indexToLocFormat == 1) { PutUInt32(p1 - glyfPtr, p2, 0, 1); } else { PutUInt16((p1 - glyfPtr) >> 1, p2, 0, 1); } glyf->rawdata = glyfPtr; loca = TrueTypeTableNew_loca(); assert(loca != 0); ((tdata_loca *) loca->data)->ptr = locaPtr; ((tdata_loca *) loca->data)->nbytes = locaLen; AddTable(tt, loca); head = FindTable(tt, T_head); PutInt16(xMin, head->data, 36, 1); PutInt16(yMin, head->data, 38, 1); PutInt16(xMax, head->data, 40, 1); PutInt16(yMax, head->data, 42, 1); PutInt16(indexToLocFormat, head->data, 50, 1); maxp = FindTable(tt, T_maxp); PutUInt16(nGlyphs, maxp->data, 4, 1); PutUInt16(maxPoints, maxp->data, 6, 1); PutUInt16(maxContours, maxp->data, 8, 1); PutUInt16(maxCompositePoints, maxp->data, 10, 1); PutUInt16(maxCompositeContours, maxp->data, 12, 1); #if 0 /* XXX do not overwrite the existing data. Fix: re-calculate these numbers here */ PutUInt16(2, maxp->data, 14, 1); /* maxZones is always 2 */ PutUInt16(0, maxp->data, 16, 1); /* maxTwilightPoints */ PutUInt16(0, maxp->data, 18, 1); /* maxStorage */ PutUInt16(0, maxp->data, 20, 1); /* maxFunctionDefs */ PutUint16(0, maxp->data, 22, 1); /* maxInstructionDefs */ PutUint16(0, maxp->data, 24, 1); /* maxStackElements */ PutUint16(0, maxp->data, 26, 1); /* maxSizeOfInstructions */ PutUint16(0, maxp->data, 28, 1); /* maxComponentElements */ PutUint16(0, maxp->data, 30, 1); /* maxComponentDepth */ #endif /* * Generate an htmx table and update hhea table */ hhea = FindTable(tt, T_hhea); assert(hhea != 0); hheaPtr = (guint8 *) hhea->data; if (nGlyphs > 2) { for (i = nGlyphs - 1; i > 0; i--) { if (met[i].adv != met[i-1].adv) break; } nlsb = nGlyphs - 1 - i; } hmtxSize = (nGlyphs - nlsb) * 4 + nlsb * 2; hmtxPtr = ttmalloc(hmtxSize); p1 = hmtxPtr; for (i = 0; i < nGlyphs; i++) { if (i < nGlyphs - nlsb) { PutUInt16(met[i].adv, p1, 0, 1); PutUInt16(met[i].sb, p1, 2, 1); p1 += 4; } else { PutUInt16(met[i].sb, p1, 0, 1); p1 += 2; } } AddTable(tt, TrueTypeTableNew(T_hmtx, hmtxSize, hmtxPtr)); PutUInt16(nGlyphs - nlsb, hheaPtr, 34, 1); free(hmtxPtr); free(met); } #ifdef TEST_TTCR int main(void) { TrueTypeCreator *ttcr; guint8 *t1, *t2, *t3, *t4, *t5, *t6, *t7; TrueTypeCreatorNewEmpty(mkTag('t','r','u','e'), &ttcr); t1 = malloc(1000); memset(t1, 'a', 1000); t2 = malloc(2000); memset(t2, 'b', 2000); t3 = malloc(3000); memset(t3, 'c', 3000); t4 = malloc(4000); memset(t4, 'd', 4000); t5 = malloc(5000); memset(t5, 'e', 5000); t6 = malloc(6000); memset(t6, 'f', 6000); t7 = malloc(7000); memset(t7, 'g', 7000); AddTable(ttcr, TrueTypeTableNew(0x6D617870, 1000, t1)); AddTable(ttcr, TrueTypeTableNew(0x4F532F32, 2000, t2)); AddTable(ttcr, TrueTypeTableNew(0x636D6170, 3000, t3)); AddTable(ttcr, TrueTypeTableNew(0x6C6F6361, 4000, t4)); AddTable(ttcr, TrueTypeTableNew(0x68686561, 5000, t5)); AddTable(ttcr, TrueTypeTableNew(0x676C7966, 6000, t6)); AddTable(ttcr, TrueTypeTableNew(0x6B65726E, 7000, t7)); free(t1); free(t2); free(t3); free(t4); free(t5); free(t6); free(t7); StreamToFile(ttcr, "ttcrout.ttf"); TrueTypeCreatorDispose(ttcr); return 0; } #endif xournal-0.4.8/src/ttsubset/README0000664000175000017500000000104211773660334016200 0ustar aurouxauroux* from libgnomeprint 2.12.1: The files sft.c, list.c, ttcr.c, crc32.c and corresponding header files are yanked from STSF (Standard Type Services Framework) text imaging and font handling framework for application developers. http://stsf.sourceforge.net/about.html STSF 0.4 March 25, 2003 suresh.chandrasekharan@sun.com 06/21/04 * for xournal purposes: These files have been adapted slightly to remove a dependency to the gnome-print system, and to allow TrueType subset creation in memory auroux@math.mit.edu, 09/07/09 xournal-0.4.8/src/ttsubset/list.h0000664000175000017500000000774211773660334016461 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)list.h 1.6 03/02/06 SMI */ /* * @file list.h * @brief Bidirectional list class header file * @author Alexander Gelfenbain * @version 1.0 * */ #ifndef __CLIST_H #define __CLIST_H #ifdef __cplusplus extern "C"{ #endif #include /* * List of void * pointers */ typedef struct _list *list; /*- constructors and a destructor */ list listNewEmpty(void); list listNewCopy(list); list listNewConcat(list, list); /* concatenates elements in two lists and creates a new list with them */ void listDispose(list); void listSetElementDtor(list, GDestroyNotify f); /*- this function will be executed when the element is removed via listRemove() or listClear() */ /*- assignment */ list listCopy(list to, list from); /*- queries */ void * listCurrent(list); int listCount(list); int listIsEmpty(list); int listAtFirst(list); int listAtLast(list); int listPosition(list); /* Expensive! */ /*- search */ int listFind(list, void *); /* Returns true/false */ /*- positioning functions */ /*- return the number of elements by which the current position in the list changes */ int listNext(list); int listPrev(list); int listSkipForward(list, int n); int listSkipBackward(list, int n); int listToFirst(list); int listToLast(list); int listPositionAt(list, int n); /* Expensive! */ /*- adding and removing elements */ list listAppend(list, void *); list listPrepend(list, void *); list listInsertAfter(list, void *); list listInsertBefore(list, void *); list listConcat(list lhs, list rhs); /* appends all elements of rhs to lhs and returns lhs */ list listRemove(list); /* removes the current element */ list listClear(list); /* removes all elements */ /*- forall */ void listForAll(list, void (*f)(void *)); /*- conversion */ void **listToArray(list); /* XXX listToArray does not duplicate the elements, just copies pointers to them */ /* so you can't call listRemove(), listClear(), or listDispose() until you are done */ /* with the array. */ #ifdef __cplusplus } #endif #endif /* __CLIST_H */ xournal-0.4.8/src/ttsubset/Makefile.am0000664000175000017500000000035211773660334017357 0ustar aurouxauroux## Process this file with automake to produce Makefile.in INCLUDES = \ @PACKAGE_CFLAGS@ -DNO_MAPPERS -DNO_TYPE3 -DNO_TYPE42 noinst_LIBRARIES = libttsubset.a libttsubset_a_SOURCES = \ sft.c sft.h \ list.c list.h \ ttcr.c ttcr.h xournal-0.4.8/src/ttsubset/sft.c0000664000175000017500000032565711773660334016305 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)sft.c 1.17 03/01/08 SMI */ /* * @file sft.c * @brief Sun Font Tools * @author Alexander Gelfenbain * @version 1.0 */ #include #include #include #include #include "sft.h" #ifdef USE_GSUB #include "gsub.h" #endif #if ! (defined(NO_TTCR) && defined(NO_TYPE42)) #include "ttcr.h" #endif #ifdef NO_LIST #include "list.h" /* list.h does not get included in the sft.h */ #endif #ifndef NO_MAPPERS /* include MapChar() and MapString() */ #include "xlat.h" #endif #if ! (defined(NO_TYPE3) && defined(NO_TYPE42)) #include "crc32.h" #endif #ifdef TEST7 #include #endif /*- module identification */ const char *modname = "SunTypeTools-TT"; const char *modver = "1.0"; const char *modextra = "gelf"; /*- private functions, constants and data types */ /*FOLD00*/ enum PathSegmentType { PS_NOOP = 0, PS_MOVETO = 1, PS_LINETO = 2, PS_CURVETO = 3, PS_CLOSEPATH = 4 }; typedef struct { int type; int x1, y1; int x2, y2; int x3, y3; } PSPathElement; #define HFORMAT_LINELEN 64 typedef struct { FILE *o; char buffer[HFORMAT_LINELEN]; int bufpos; int total; } HexFmt; typedef struct { guint32 nGlyphs; /* number of glyphs in the font + 1 */ guint32 *offs; /* array of nGlyphs offsets */ } GlyphOffsets; /* private tags */ static const guint32 TTFontClassTag = 0x74746663; /* 'ttfc' */ static const guint32 T_true = 0x74727565; /* 'true' */ static const guint32 T_ttcf = 0x74746366; /* 'ttcf' */ /* standard TrueType table tags and their ordinal numbers */ static const guint32 T_maxp = 0x6D617870; static const guint32 O_maxp = 0; /* 'maxp' */ static const guint32 T_glyf = 0x676C7966; static const guint32 O_glyf = 1; /* 'glyf' */ static const guint32 T_head = 0x68656164; static const guint32 O_head = 2; /* 'head' */ static const guint32 T_loca = 0x6C6F6361; static const guint32 O_loca = 3; /* 'loca' */ static const guint32 T_name = 0x6E616D65; static const guint32 O_name = 4; /* 'name' */ static const guint32 T_hhea = 0x68686561; static const guint32 O_hhea = 5; /* 'hhea' */ static const guint32 T_hmtx = 0x686D7478; static const guint32 O_hmtx = 6; /* 'hmtx' */ static const guint32 T_cmap = 0x636D6170; static const guint32 O_cmap = 7; /* 'cmap' */ static const guint32 T_vhea = 0x76686561; static const guint32 O_vhea = 8; /* 'vhea' */ static const guint32 T_vmtx = 0x766D7478; static const guint32 O_vmtx = 9; /* 'vmtx' */ static const guint32 T_OS2 = 0x4F532F32; static const guint32 O_OS2 = 10; /* 'OS/2' */ static const guint32 T_post = 0x706F7374; static const guint32 O_post = 11; /* 'post' */ static const guint32 T_kern = 0x6B65726E; static const guint32 O_kern = 12; /* 'kern' */ static const guint32 T_cvt = 0x63767420; static const guint32 O_cvt = 13; /* 'cvt_' - only used in TT->TT generation */ static const guint32 T_prep = 0x70726570; static const guint32 O_prep = 14; /* 'prep' - only used in TT->TT generation */ static const guint32 T_fpgm = 0x6670676D; static const guint32 O_fpgm = 15; /* 'fpgm' - only used in TT->TT generation */ static const guint32 T_gsub = 0x47535542; static const guint32 O_gsub = 16; /* 'GSUB' */ #define NUM_TAGS 17 #define LAST_URANGE_BIT 69 const char *ulcodes[LAST_URANGE_BIT+2] = { /* 0 */ "Basic Latin", /* 1 */ "Latin-1 Supplement", /* 2 */ "Latin Extended-A", /* 3 */ "Latin Extended-B", /* 4 */ "IPA Extensions", /* 5 */ "Spacing Modifier Letters", /* 6 */ "Combining Diacritical Marks", /* 7 */ "Basic Greek", /* 8 */ "Greek Symbols And Coptic", /* 9 */ "Cyrillic", /* 10 */ "Armenian", /* 11 */ "Basic Hebrew", /* 12 */ "Hebrew Extended (A and B blocks combined)", /* 13 */ "Basic Arabic", /* 14 */ "Arabic Extended", /* 15 */ "Devanagari", /* 16 */ "Bengali", /* 17 */ "Gurmukhi", /* 18 */ "Gujarati", /* 19 */ "Oriya", /* 20 */ "Tamil", /* 21 */ "Telugu", /* 22 */ "Kannada", /* 23 */ "Malayalam", /* 24 */ "Thai", /* 25 */ "Lao", /* 26 */ "Basic Georgian", /* 27 */ "Georgian Extended", /* 28 */ "Hangul Jamo", /* 29 */ "Latin Extended Additional", /* 30 */ "Greek Extended", /* 31 */ "General Punctuation", /* 32 */ "Superscripts And Subscripts", /* 33 */ "Currency Symbols", /* 34 */ "Combining Diacritical Marks For Symbols", /* 35 */ "Letterlike Symbols", /* 36 */ "Number Forms", /* 37 */ "Arrows", /* 38 */ "Mathematical Operators", /* 39 */ "Miscellaneous Technical", /* 40 */ "Control Pictures", /* 41 */ "Optical Character Recognition", /* 42 */ "Enclosed Alphanumerics", /* 43 */ "Box Drawing", /* 44 */ "Block Elements", /* 45 */ "Geometric Shapes", /* 46 */ "Miscellaneous Symbols", /* 47 */ "Dingbats", /* 48 */ "CJK Symbols And Punctuation", /* 49 */ "Hiragana", /* 50 */ "Katakana", /* 51 */ "Bopomofo", /* 52 */ "Hangul Compatibility Jamo", /* 53 */ "CJK Miscellaneous", /* 54 */ "Enclosed CJK Letters And Months", /* 55 */ "CJK Compatibility", /* 56 */ "Hangul", /* 57 */ "Reserved for Unicode SubRanges", /* 58 */ "Reserved for Unicode SubRanges", /* 59 */ "CJK Unified Ideographs", /* 60 */ "Private Use Area", /* 61 */ "CJK Compatibility Ideographs", /* 62 */ "Alphabetic Presentation Forms", /* 63 */ "Arabic Presentation Forms-A", /* 64 */ "Combining Half Marks", /* 65 */ "CJK Compatibility Forms", /* 66 */ "Small Form Variants", /* 67 */ "Arabic Presentation Forms-B", /* 68 */ "Halfwidth And Fullwidth Forms", /* 69 */ "Specials", /*70-127*/ "Reserved for Unicode SubRanges" }; /*- inline functions */ /*FOLD01*/ #ifdef __GNUC__ #define _inline static __inline__ #else #define _inline static #endif _inline void *smalloc(size_t size) { void *res = malloc(size); assert(res != 0); return res; } _inline void *scalloc(size_t n, size_t size) { void *res = calloc(n, size); assert(res != 0); return res; } #if !defined(STSF) _inline guint32 mkTag(guint8 a, guint8 b, guint8 c, guint8 d) { return (a << 24) | (b << 16) | (c << 8) | d; } /*- Data access macros for data stored in big-endian or little-endian format */ _inline gint16 GetInt16(const guint8 *ptr, size_t offset, int bigendian) { gint16 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 8 | (ptr+offset)[1]; } else { t = (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline guint16 GetUInt16(const guint8 *ptr, size_t offset, int bigendian) { guint16 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 8 | (ptr+offset)[1]; } else { t = (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline gint32 GetInt32(const guint8 *ptr, size_t offset, int bigendian) { gint32 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 24 | (ptr+offset)[1] << 16 | (ptr+offset)[2] << 8 | (ptr+offset)[3]; } else { t = (ptr+offset)[3] << 24 | (ptr+offset)[2] << 16 | (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline guint32 GetUInt32(const guint8 *ptr, size_t offset, int bigendian) { guint32 t; assert(ptr != 0); if (bigendian) { t = (ptr+offset)[0] << 24 | (ptr+offset)[1] << 16 | (ptr+offset)[2] << 8 | (ptr+offset)[3]; } else { t = (ptr+offset)[3] << 24 | (ptr+offset)[2] << 16 | (ptr+offset)[1] << 8 | (ptr+offset)[0]; } return t; } _inline void PutInt16(gint16 val, guint8 *ptr, size_t offset, int bigendian) { assert(ptr != 0); if (bigendian) { ptr[offset] = (val >> 8) & 0xFF; ptr[offset+1] = val & 0xFF; } else { ptr[offset+1] = (val >> 8) & 0xFF; ptr[offset] = val & 0xFF; } } #else #include "inlines.h" #endif #if G_BYTE_ORDER == G_BIG_ENDIAN #define Int16FromMOTA(a) (a) #else static guint16 Int16FromMOTA(guint16 a) { return (guint16) (((guint8)((a) >> 8)) | ((guint8)(a) << 8)); } #endif _inline F16Dot16 fixedMul(F16Dot16 a, F16Dot16 b) { unsigned int a1, b1; unsigned int a2, b2; F16Dot16 res; int sign; sign = (a & 0x80000000) ^ (b & 0x80000000); if (a < 0) a = -a; if (b < 0) b = -b; a1 = a >> 16; b1 = a & 0xFFFF; a2 = b >> 16; b2 = b & 0xFFFF; res = a1 * a2; /* if (res > 0x7FFF) assert(!"fixedMul: F16Dot16 overflow"); */ res <<= 16; res += a1 * b2 + b1 * a2 + ((b1 * b2) >> 16); return sign ? -res : res; } _inline F16Dot16 fixedDiv(F16Dot16 a, F16Dot16 b) { unsigned int f, r; F16Dot16 res; int sign; sign = (a & 0x80000000) ^ (b & 0x80000000); if (a < 0) a = -a; if (b < 0) b = -b; f = a / b; r = a % b; /* if (f > 0x7FFFF) assert(!"fixedDiv: F16Dot16 overflow"); */ while (r > 0xFFFF) { r >>= 1; b >>= 1; } res = (f << 16) + (r << 16) / b; return sign ? -res : res; } /*- returns a * b / c -*/ /* XXX provide a real implementation that preserves accuracy */ _inline F16Dot16 fixedMulDiv(F16Dot16 a, F16Dot16 b, F16Dot16 c) { F16Dot16 res; res = fixedMul(a, b); return fixedDiv(res, c); } /*- Translate units from TT to PS (standard 1/1000) -*/ _inline int XUnits(int unitsPerEm, int n) { return (n * 1000) / unitsPerEm; } _inline const char *UnicodeRangeName(guint16 bit) { if (bit > LAST_URANGE_BIT) bit = LAST_URANGE_BIT+1; return ulcodes[bit]; } #if 0 /* It would have been nice if it worked, but I found so many fonts that don't * follow the TrueType spec (sorted table directory) that I have to re-write this * stuff. */ static guint8 *getTDEntry(TrueTypeFont *ttf, guint32 tag) /*FOLD01*/ { int l = 0, r = ttf->ntables-1, i; guint32 t; do { i = (l + r) >> 1; t = GetUInt32(ttf->ptr + 12, i << 4, 1); if (tag >= t) l = i + 1; if (tag <= t) r = i - 1; } while (l <= r); if (l - r == 2) { return ttf->ptr + 12 + 16 * (l - 1); } return 0; } static guint8 *getTable(TrueTypeFont *ttf, guint32 tag) /*FOLD01*/ { guint8 *ptr = getTDEntry(ttf, tag); if (!ptr) return 0; return ttf->ptr + GetUInt32(ptr, 8, 1); } static guint32 getTableSize(TrueTypeFont *ttf, guint32 tag) /*FOLD01*/ { guint8 *ptr = getTDEntry(ttf, tag); if (!ptr) return 0; return GetUInt32(ptr, 12, 1); } #endif _inline guint8 *getTable(TrueTypeFont *ttf, guint32 ord) { return ttf->tables[ord]; } _inline guint32 getTableSize(TrueTypeFont *ttf, guint32 ord) { return ttf->tlens[ord]; } static guint32 tagToOrd(guint32 tag) { if (tag == T_maxp) { return O_maxp; } else if (tag == T_glyf) { return O_glyf; } else if (tag == T_head) { return O_head; } else if (tag == T_loca) { return O_loca; } else if (tag == T_name) { return O_name; } else if (tag == T_hhea) { return O_hhea; } else if (tag == T_hmtx) { return O_hmtx; } else if (tag == T_cmap) { return O_cmap; } else if (tag == T_vhea) { return O_vhea; } else if (tag == T_vmtx) { return O_vmtx; } else if (tag == T_OS2) { return O_OS2; } else if (tag == T_post) { return O_post; } else if (tag == T_kern) { return O_kern; } else if (tag == T_cvt) { return O_cvt; } else if (tag == T_prep) { return O_prep; } else if (tag == T_fpgm) { return O_fpgm; } else if (tag == T_gsub) { return O_gsub; } return 0xFFFFFFFF; } #ifndef NO_TYPE42 /* Hex Formatter functions */ static char HexChars[] = "0123456789ABCDEF"; static HexFmt *HexFmtNew(FILE *outf) { HexFmt *res = smalloc(sizeof(HexFmt)); res->bufpos = res->total = 0; res->o = outf; return res; } static void HexFmtFlush(HexFmt *_this) { if (_this->bufpos) { fwrite(_this->buffer, 1, _this->bufpos, _this->o); _this->bufpos = 0; } } _inline void HexFmtOpenString(HexFmt *_this) { fputs("<\n", _this->o); } _inline void HexFmtCloseString(HexFmt *_this) { HexFmtFlush(_this); fputs("00\n>\n", _this->o); } _inline void HexFmtDispose(HexFmt *_this) { HexFmtFlush(_this); free(_this); } static void HexFmtBlockWrite(HexFmt *_this, const void *ptr, off_t size) { guint8 Ch; off_t i; if (_this->total + size > 65534) { HexFmtFlush(_this); HexFmtCloseString(_this); _this->total = 0; HexFmtOpenString(_this); } for (i=0; ibuffer[_this->bufpos++] = HexChars[Ch >> 4]; _this->buffer[_this->bufpos++] = HexChars[Ch & 0xF]; if (_this->bufpos == HFORMAT_LINELEN) { HexFmtFlush(_this); fputc('\n', _this->o); } } _this->total += size; } #endif /* Outline Extraction functions */ /*FOLD01*/ /* fills the aw and lsb entries of the TTGlyphMetrics structure from hmtx table -*/ static void GetMetrics(TrueTypeFont *ttf, guint32 glyphID, TTGlyphMetrics *metrics) { guint8 *table = getTable(ttf, O_hmtx); metrics->aw = metrics->lsb = metrics->ah = metrics->tsb = 0; if (!table || !ttf->numberOfHMetrics) return; if (glyphID < ttf->numberOfHMetrics) { metrics->aw = GetUInt16(table, 4 * glyphID, 1); metrics->lsb = GetInt16(table, 4 * glyphID + 2, 1); } else { metrics->aw = GetUInt16(table, 4 * (ttf->numberOfHMetrics - 1), 1); metrics->lsb = GetInt16(table + ttf->numberOfHMetrics * 4, (glyphID - ttf->numberOfHMetrics) * 2, 1); } table = getTable(ttf, O_vmtx); if (!table || !ttf->numOfLongVerMetrics) return; if (glyphID < ttf->numOfLongVerMetrics) { metrics->ah = GetUInt16(table, 4 * glyphID, 1); metrics->tsb = GetInt16(table, 4 * glyphID + 2, 1); } else { metrics->ah = GetUInt16(table, 4 * (ttf->numOfLongVerMetrics - 1), 1); metrics->tsb = GetInt16(table + ttf->numOfLongVerMetrics * 4, (glyphID - ttf->numOfLongVerMetrics) * 2, 1); } } FUnitBBox *GetTTGlyphBoundingBoxes(TrueTypeFont *ttf) { guint8 *table = getTable(ttf, O_glyf); FUnitBBox *b = calloc(ttf->nglyphs, sizeof(FUnitBBox)); if (b != NULL) { int i; for (i = 0; i< ttf->nglyphs; i++) { guint8 *ptr = table + ttf->goffsets[i]; b[i].xMin = XUnits(ttf->unitsPerEm, GetInt16(ptr, 2, 1)); b[i].yMin = XUnits(ttf->unitsPerEm, GetInt16(ptr, 4, 1)); b[i].xMax = XUnits(ttf->unitsPerEm, GetInt16(ptr, 6, 1)); b[i].yMax = XUnits(ttf->unitsPerEm, GetInt16(ptr, 8, 1)); } } return b; } static int GetTTGlyphOutline(TrueTypeFont *, guint32 , ControlPoint **, TTGlyphMetrics *, list ); /* returns the number of control points, allocates the pointArray */ static int GetSimpleTTOutline(TrueTypeFont *ttf, guint32 glyphID, ControlPoint **pointArray, TTGlyphMetrics *metrics) /*FOLD02*/ { guint8 *table = getTable(ttf, O_glyf); guint8 *ptr, *p, flag, n; gint16 numberOfContours; guint16 t, instLen, lastPoint=0; int i, j, z; ControlPoint* pa; *pointArray = NULL; /* printf("GetSimpleTTOutline(%d)\n", glyphID); */ if (glyphID >= ttf->nglyphs) return 0; /*- glyph is not present in the font */ ptr = table + ttf->goffsets[glyphID]; if ((numberOfContours = GetInt16(ptr, 0, 1)) <= 0) return 0; /*- glyph is not simple */ if (metrics) { /*- GetCompoundTTOutline() calls this function with NULL metrics -*/ metrics->xMin = GetInt16(ptr, 2, 1); metrics->yMin = GetInt16(ptr, 4, 1); metrics->xMax = GetInt16(ptr, 6, 1); metrics->yMax = GetInt16(ptr, 8, 1); GetMetrics(ttf, glyphID, metrics); } /* determine the last point and be extra safe about it. But probably this code is not needed */ for (i=0; i lastPoint) lastPoint = t; } instLen = GetUInt16(ptr, 10 + numberOfContours*2, 1); p = ptr + 10 + 2 * numberOfContours + 2 + instLen; pa = calloc(lastPoint+1, sizeof(ControlPoint)); i = 0; while (i <= lastPoint) { pa[i++].flags = flag = (guint32) *p++; if (flag & 8) { /*- repeat flag */ n = *p++; for (j=0; j lastPoint) { /*- if the font is really broken */ free(pa); return 0; } pa[i++].flags = flag; } } } /*- Process the X coordinate */ z = 0; for (i = 0; i <= lastPoint; i++) { if (pa[i].flags & 0x02) { if (pa[i].flags & 0x10) { z += (int) (*p++); } else { z -= (int) (*p++); } } else if ( !(pa[i].flags & 0x10)) { z += GetInt16(p, 0, 1); p += 2; } pa[i].x = z; } /*- Process the Y coordinate */ z = 0; for (i = 0; i <= lastPoint; i++) { if (pa[i].flags & 0x04) { if (pa[i].flags & 0x20) { z += *p++; } else { z -= *p++; } } else if ( !(pa[i].flags & 0x20)) { z += GetInt16(p, 0, 1); p += 2; } pa[i].y = z; } for (i=0; i= ttf->nglyphs) { /*- incorrect glyphID */ return 0; } ptr = table + ttf->goffsets[glyphID]; if ((numberOfContours = GetInt16(ptr, 0, 1)) != -1) { /*- glyph is not compound */ return 0; } myPoints = listNewEmpty(); listSetElementDtor(myPoints, free); if (metrics) { metrics->xMin = GetInt16(ptr, 2, 1); metrics->yMin = GetInt16(ptr, 4, 1); metrics->xMax = GetInt16(ptr, 6, 1); metrics->yMax = GetInt16(ptr, 8, 1); GetMetrics(ttf, glyphID, metrics); } ptr += 10; do { flags = GetUInt16(ptr, 0, 1); /* printf("flags: 0x%X\n", flags); */ index = GetUInt16(ptr, 2, 1); ptr += 4; if (listFind(glyphlist, (void *) (int) index)) { #ifdef DEBUG fprintf(stderr, "Endless loop found in a compound glyph.\n"); fprintf(stderr, "%d -> ", index); listToFirst(glyphlist); fprintf(stderr," ["); do { fprintf(stderr,"%d ", (int) listCurrent(glyphlist)); } while (listNext(glyphlist)); fprintf(stderr,"]\n"); /**/ #endif } listAppend(glyphlist, (void *) (int) index); #ifdef DEBUG2 fprintf(stderr,"glyphlist: += %d\n", index); #endif if ((np = GetTTGlyphOutline(ttf, index, &nextComponent, NULL, glyphlist)) == 0) { /* XXX that probably indicates a corrupted font */ #ifdef DEBUG fprintf(stderr, "An empty compound!\n"); /* assert(!"An empty compound"); */ #endif } listToLast(glyphlist); #ifdef DEBUG2 listToFirst(glyphlist); fprintf(stderr,"%d [", listCount(glyphlist)); if (!listIsEmpty(glyphlist)) { do { fprintf(stderr,"%d ", (int) listCurrent(glyphlist)); } while (listNext(glyphlist)); } fprintf(stderr, "]\n"); fprintf(stderr, "glyphlist: -= %d\n", (int) listCurrent(glyphlist)); #endif listRemove(glyphlist); if (flags & USE_MY_METRICS) { if (metrics) GetMetrics(ttf, index, metrics); } if (flags & ARG_1_AND_2_ARE_WORDS) { e = GetInt16(ptr, 0, 1); f = GetInt16(ptr, 2, 1); /* printf("ARG_1_AND_2_ARE_WORDS: %d %d\n", e & 0xFFFF, f & 0xFFFF); */ ptr += 4; } else { if (flags & ARGS_ARE_XY_VALUES) { /* args are signed */ e = (gint8) *ptr++; f = (gint8) *ptr++; /* printf("ARGS_ARE_XY_VALUES: %d %d\n", e & 0xFF, f & 0xFF); */ } else { /* args are unsigned */ /* printf("!ARGS_ARE_XY_VALUES\n"); */ e = *ptr++; f = *ptr++; } } a = d = 0x10000; b = c = 0; if (flags & WE_HAVE_A_SCALE) { #ifdef DEBUG2 fprintf(stderr, "WE_HAVE_A_SCALE\n"); #endif a = GetInt16(ptr, 0, 1) << 2; d = a; ptr += 2; } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { #ifdef DEBUG2 fprintf(stderr, "WE_HAVE_AN_X_AND_Y_SCALE\n"); #endif a = GetInt16(ptr, 0, 1) << 2; d = GetInt16(ptr, 2, 1) << 2; ptr += 4; } else if (flags & WE_HAVE_A_TWO_BY_TWO) { #ifdef DEBUG2 fprintf(stderr, "WE_HAVE_A_TWO_BY_TWO\n"); #endif a = GetInt16(ptr, 0, 1) << 2; b = GetInt16(ptr, 2, 1) << 2; c = GetInt16(ptr, 4, 1) << 2; d = GetInt16(ptr, 6, 1) << 2; ptr += 8; } abs1 = (a < 0) ? -a : a; abs2 = (b < 0) ? -b : b; m = (abs1 > abs2) ? abs1 : abs2; abs3 = abs1 - abs2; if (abs3 < 0) abs3 = -abs3; if (abs3 <= 33) m *= 2; abs1 = (c < 0) ? -c : c; abs2 = (d < 0) ? -d : d; n = (abs1 > abs2) ? abs1 : abs2; abs3 = abs1 - abs2; if (abs3 < 0) abs3 = -abs3; if (abs3 <= 33) n *= 2; if (!ARGS_ARE_XY_VALUES) { /* match the points */ assert(!"ARGS_ARE_XY_VALUES is not implemented!!!\n"); } #ifdef DEBUG2 fprintf(stderr, "a: %f, b: %f, c: %f, d: %f, e: %f, f: %f, m: %f, n: %f\n", ((double) a) / 65536, ((double) b) / 65536, ((double) c) / 65536, ((double) d) / 65536, ((double) e) / 65536, ((double) f) / 65536, ((double) m) / 65536, ((double) n) / 65536); #endif for (i=0; iflags = nextComponent[i].flags; t = fixedMulDiv(a, nextComponent[i].x << 16, m) + fixedMulDiv(c, nextComponent[i].y << 16, m) + (e << 16); cp->x = fixedMul(t, m) >> 16; t = fixedMulDiv(b, nextComponent[i].x << 16, n) + fixedMulDiv(d, nextComponent[i].y << 16, n) + (f << 16); cp->y = fixedMul(t, n) >> 16; #ifdef DEBUG2 fprintf(stderr, "( %d %d ) -> ( %d %d )\n", nextComponent[i].x, nextComponent[i].y, cp->x, cp->y); #endif listAppend(myPoints, cp); } free(nextComponent); } while (flags & MORE_COMPONENTS); np = listCount(myPoints); pa = calloc(np, sizeof(ControlPoint)); assert(pa != 0); listToFirst(myPoints); for (i=0; i= ttf->nglyphs) return -1; /**/ ptr = table + ttf->goffsets[glyphID]; length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID]; if (length == 0) { /*- empty glyphs still have hmtx and vmtx metrics values */ if (metrics) GetMetrics(ttf, glyphID, metrics); return 0; } numberOfContours = GetInt16(ptr, 0, 1); if (numberOfContours >= 0) { res=GetSimpleTTOutline(ttf, glyphID, pointArray, metrics); } else { int glyphlistFlag = 0; if (!glyphlist) { glyphlistFlag = 1; glyphlist = listNewEmpty(); listAppend(glyphlist, (void *) glyphID); } res = GetCompoundTTOutline(ttf, glyphID, pointArray, metrics, glyphlist); if (glyphlistFlag) { glyphlistFlag = 0; listDispose(glyphlist); glyphlist = NULL; } } #ifdef DEBUG3 { int i; FILE *out = fopen("points.dat", "ab"); assert(out != 0); fprintf(out, "Glyph: %d\nPoints: %d\n", glyphID, res); for (i=0; itype = t; return p; } /*- returns the number of items in the path -*/ static int BSplineToPSPath(ControlPoint *srcA, int srcCount, PSPathElement **path) { list pList = listNewEmpty(); int i = 0, pCount = 0; PSPathElement *p; int x0, y0, x1, y1, x2, y2, curx, cury; int lastOff = 0; /*- last point was off-contour */ int scflag = 1; /*- start contour flag */ int ecflag = 0; /*- end contour flag */ int cp = 0; /*- current point */ listSetElementDtor(pList, free); *path = 0; /* if (srcCount > 0) for(;;) */ while (srcCount > 0) { /*- srcCount does not get changed inside the loop. */ int StartContour, EndContour; if (scflag) { int l = cp; StartContour = cp; while (!(srcA[l].flags & 0x8000)) l++; EndContour = l; if (StartContour == EndContour) { if (cp + 1 < srcCount) { cp++; continue; } else { break; } } p = newPSPathElement(PS_MOVETO); if (!(srcA[cp].flags & 1)) { if (!(srcA[EndContour].flags & 1)) { p->x1 = x0 = (srcA[cp].x + srcA[EndContour].x + 1) / 2; p->y1 = y0 = (srcA[cp].y + srcA[EndContour].y + 1) / 2; } else { p->x1 = x0 = srcA[EndContour].x; p->y1 = y0 = srcA[EndContour].y; } } else { p->x1 = x0 = srcA[cp].x; p->y1 = y0 = srcA[cp].y; cp++; } listAppend(pList, p); lastOff = 0; scflag = 0; } curx = srcA[cp].x; cury = srcA[cp].y; if (srcA[cp].flags & 1) { if (lastOff) { p = newPSPathElement(PS_CURVETO); p->x1 = x0 + (2 * (x1 - x0) + 1) / 3; p->y1 = y0 + (2 * (y1 - y0) + 1) / 3; p->x2 = x1 + (curx - x1 + 1) / 3; p->y2 = y1 + (cury - y1 + 1) / 3; p->x3 = curx; p->y3 = cury; listAppend(pList, p); } else { if (!(x0 == curx && y0 == cury)) { /* eliminate empty lines */ p = newPSPathElement(PS_LINETO); p->x1 = curx; p->y1 = cury; listAppend(pList, p); } } x0 = curx; y0 = cury; lastOff = 0; } else { if (lastOff) { x2 = (x1 + curx + 1) / 2; y2 = (y1 + cury + 1) / 2; p = newPSPathElement(PS_CURVETO); p->x1 = x0 + (2 * (x1 - x0) + 1) / 3; p->y1 = y0 + (2 * (y1 - y0) + 1) / 3; p->x2 = x1 + (x2 - x1 + 1) / 3; p->y2 = y1 + (y2 - y1 + 1) / 3; p->x3 = x2; p->y3 = y2; listAppend(pList, p); x0 = x2; y0 = y2; x1 = curx; y1 = cury; } else { x1 = curx; y1 = cury; } lastOff = true; } if (ecflag) { listAppend(pList, newPSPathElement(PS_CLOSEPATH)); scflag = 1; ecflag = 0; cp = EndContour + 1; if (cp >= srcCount) break; continue; } if (cp == EndContour) { cp = StartContour; ecflag = true; } else { cp++; } } if ((pCount = listCount(pList)) > 0) { p = calloc(pCount, sizeof(PSPathElement)); assert(p != 0); listToFirst(pList); for (i=0; i> 1; t1 = GetUInt32(name + 6, i * 12 + 0, 1); t2 = GetUInt32(name + 6, i * 12 + 4, 1); if (! ((m1 < t1) || ((m1 == t1) && (m2 < t2)))) l = i + 1; if (! ((m1 > t1) || ((m1 == t1) && (m2 > t2)))) r = i - 1; } while (l <= r); if (l - r == 2) { return l - 1; } return -1; } /* XXX marlett.ttf uses (3, 0, 1033) instead of (3, 1, 1033) and does not have any Apple tables. * Fix: if (3, 1, 1033) is not found - need to check for (3, 0, 1033) * * /d/fonts/ttzh_tw/Big5/Hanyi/ma6b5p uses (1, 0, 19) for English strings, instead of (1, 0, 0) * and does not have (3, 1, 1033) * Fix: if (1, 0, 0) and (3, 1, 1033) are not found need to look for (1, 0, *) - that will * require a change in algorithm * * /d/fonts/fdltest/Korean/h2drrm has unsorted names and a an unknown (to me) Mac LanguageID, * but (1, 0, 1042) strings usable * Fix: change algorithm, and use (1, 0, *) if both standard Mac and MS strings are not found */ static void GetNames(TrueTypeFont *t) { guint8 *table = getTable(t, O_name); guint16 n = GetUInt16(table, 2, 1); int i, r; /* PostScript name: preferred Microsoft */ if ((r = findname(table, n, 3, 1, 0x0409, 6)) != -1) { t->psname = nameExtract(table, r, 1, NULL); } else if ((r = findname(table, n, 1, 0, 0, 6)) != -1) { t->psname = nameExtract(table, r, 0, NULL); } else { char* pReverse = t->fname + strlen(t->fname); /* take only last token of filename */ while(pReverse != t->fname && *pReverse != '/') pReverse--; if(*pReverse == '/') pReverse++; t->psname = strdup(pReverse); assert(t->psname != 0); for (i=strlen(t->psname) - 1; i > 0; i--) { /*- Remove the suffix -*/ if (t->psname[i] == '.' ) { t->psname[i] = 0; break; } } } /* Font family and subfamily names: preferred Apple */ if ((r = findname(table, n, 0, 0, 0, 1)) != -1) { t->family = nameExtract(table, r, 1, &t->ufamily); } else if ((r = findname(table, n, 3, 1, 0x0409, 1)) != -1) { t->family = nameExtract(table, r, 1, &t->ufamily); } else if ((r = findname(table, n, 1, 0, 0, 1)) != -1) { t->family = nameExtract(table, r, 0, NULL); } else if ((r = findname(table, n, 3, 1, 0x0411, 1)) != -1) { t->family = nameExtract(table, r, 1, &t->ufamily); } else { t->family = strdup(t->psname); assert(t->family != 0); } if ((r = findname(table, n, 1, 0, 0, 2)) != -1) { t->subfamily = nameExtract(table, r, 0, NULL); } else if ((r = findname(table, n, 3, 1, 0x0409, 2)) != -1) { t->subfamily = nameExtract(table, r, 1, NULL); } else { t->subfamily = strdup(""); assert(t->family != 0); } } enum cmapType { CMAP_NOT_USABLE = -1, CMAP_MS_Symbol = 10, CMAP_MS_Unicode = 11, CMAP_MS_ShiftJIS = 12, CMAP_MS_Big5 = 13, CMAP_MS_PRC = 14, CMAP_MS_Wansung = 15, CMAP_MS_Johab = 16 }; #define MISSING_GLYPH_INDEX 0 /* * All getGlyph?() functions and freinds are implemented by: * @author Manpreet Singh */ static guint16 getGlyph0(const guint8* cmap, guint16 c) { if (c <= 255) { return *(cmap + 6 + c); } else { return MISSING_GLYPH_INDEX; } } typedef struct _subHeader2 { guint16 firstCode; guint16 entryCount; guint16 idDelta; guint16 idRangeOffset; } subHeader2; static guint16 getGlyph2(const guint8 *cmap, guint16 c) { guint16 *CMAP2 = (guint16 *) cmap; guint8 theHighByte; guint8 theLowByte; subHeader2* subHeader2s; guint16* subHeader2Keys; guint16 firstCode; int k; int ToReturn; theHighByte = (guint8)((c >> 8) & 0x00ff); theLowByte = (guint8)(c & 0x00ff); subHeader2Keys = CMAP2 + 3; subHeader2s = (subHeader2 *)(subHeader2Keys + 256); k = Int16FromMOTA(subHeader2Keys[theHighByte]) / 8; if(k == 0) { firstCode = Int16FromMOTA(subHeader2s[k].firstCode); if(theLowByte >= firstCode && theLowByte < (firstCode + Int16FromMOTA(subHeader2s[k].entryCount))) { return *((&(subHeader2s[0].idRangeOffset)) + (Int16FromMOTA(subHeader2s[0].idRangeOffset)/2) /* + offset */ + theLowByte /* + to_look */ - Int16FromMOTA(subHeader2s[0].firstCode) ); } else { return MISSING_GLYPH_INDEX; } } else if (k > 0) { firstCode = Int16FromMOTA(subHeader2s[k].firstCode); if(theLowByte >= firstCode && theLowByte < (firstCode + Int16FromMOTA(subHeader2s[k].entryCount))) { ToReturn = *((&(subHeader2s[k].idRangeOffset)) + (Int16FromMOTA(subHeader2s[k].idRangeOffset)/2) + theLowByte - firstCode); if(ToReturn == 0) { return MISSING_GLYPH_INDEX; } else { return (guint16)((ToReturn + Int16FromMOTA(subHeader2s[k].idDelta)) % 0xFFFF); } } else { return MISSING_GLYPH_INDEX; } } else { return MISSING_GLYPH_INDEX; } } static guint16 getGlyph6(const guint8 *cmap, guint16 c) { guint16 firstCode; guint16 *CMAP6 = (guint16 *) cmap; firstCode = *(CMAP6 + 3); if (c < firstCode || c > (firstCode + (*(CMAP6 + 4))/*entryCount*/ - 1)) { return MISSING_GLYPH_INDEX; } else { return *((CMAP6 + 5)/*glyphIdArray*/ + (c - firstCode)); } } static guint16 GEbinsearch(guint16 *ar, guint16 length, guint16 toSearch) { signed int low, mid, high, lastfound = 0xffff; guint16 res; if(length == (guint16)0 || length == (guint16)0xFFFF) { return (guint16)0xFFFF; } low = 0; high = length - 1; while(high >= low) { mid = (high + low)/2; res = Int16FromMOTA(*(ar+mid)); if(res >= toSearch) { lastfound = mid; high = --mid; } else { low = ++mid; } } return lastfound; } static guint16 getGlyph4(const guint8 *cmap, guint16 c) { guint16 i; int ToReturn; guint16 segCount; guint16 * startCode; guint16 * endCode; guint16 * idDelta; /* guint16 * glyphIdArray; */ guint16 * idRangeOffset; guint16 * glyphIndexArray; guint16 *CMAP4 = (guint16 *) cmap; /* guint16 GEbinsearch(guint16 *ar, guint16 length, guint16 toSearch); */ segCount = Int16FromMOTA(*(CMAP4 + 3))/2; endCode = CMAP4 + 7; i = GEbinsearch(endCode, segCount, c); if (i == (guint16) 0xFFFF) { return MISSING_GLYPH_INDEX; } startCode = endCode + segCount + 1; if(Int16FromMOTA(startCode[i]) > c) { return MISSING_GLYPH_INDEX; } idDelta = startCode + segCount; idRangeOffset = idDelta + segCount; glyphIndexArray = idRangeOffset + segCount; if(Int16FromMOTA(idRangeOffset[i]) != 0) { ToReturn = Int16FromMOTA(*(&(idRangeOffset[i]) + (Int16FromMOTA(idRangeOffset[i])/2 + (c - Int16FromMOTA(startCode[i]))))); } else { ToReturn = (Int16FromMOTA(idDelta[i]) + c)%65536; } return ToReturn; } static void FindCmap(TrueTypeFont *ttf) { guint8 *table = getTable(ttf, O_cmap); guint16 ncmaps = GetUInt16(table, 2, 1); int i; guint32 ThreeZero = 0; /* MS Symbol */ guint32 ThreeOne = 0; /* MS Unicode */ guint32 ThreeTwo = 0; /* MS ShiftJIS */ guint32 ThreeThree = 0; /* MS Big5 */ guint32 ThreeFour = 0; /* MS PRC */ guint32 ThreeFive = 0; /* MS Wansung */ guint32 ThreeSix = 0; /* MS Johab */ for (i = 0; i < ncmaps; i++) { guint32 offset; guint16 pID, eID; pID = GetUInt16(table, 4 + i * 8, 1); eID = GetUInt16(table, 6 + i * 8, 1); offset = GetUInt32(table, 8 + i * 8, 1); if (pID == 3) { switch (eID) { case 0: ThreeZero = offset; break; case 1: ThreeOne = offset; break; case 2: ThreeTwo = offset; break; case 3: ThreeThree = offset; break; case 4: ThreeFour = offset; break; case 5: ThreeFive = offset; break; case 6: ThreeSix = offset; break; } } } if (ThreeOne) { ttf->cmapType = CMAP_MS_Unicode; ttf->cmap = table + ThreeOne; } else if (ThreeTwo) { ttf->cmapType = CMAP_MS_ShiftJIS; ttf->cmap = table + ThreeTwo; } else if (ThreeThree) { ttf->cmapType = CMAP_MS_Big5; ttf->cmap = table + ThreeThree; } else if (ThreeFour) { ttf->cmapType = CMAP_MS_PRC; ttf->cmap = table + ThreeFour; } else if (ThreeFive) { ttf->cmapType = CMAP_MS_Wansung; ttf->cmap = table + ThreeFive; } else if (ThreeSix) { ttf->cmapType = CMAP_MS_Johab; ttf->cmap = table + ThreeSix; } else if (ThreeZero) { ttf->cmapType = CMAP_MS_Symbol; ttf->cmap = table + ThreeZero; } else { ttf->cmapType = CMAP_NOT_USABLE; ttf->cmap = NULL; } if (ttf->cmapType != CMAP_NOT_USABLE) { switch (GetUInt16(ttf->cmap, 0, 1)) { case 0: ttf->mapper = getGlyph0; break; case 2: ttf->mapper = getGlyph2; break; case 4: ttf->mapper = getGlyph4; break; case 6: ttf->mapper = getGlyph6; break; default: #ifdef DEBUG /*- if the cmap table is really broken */ printf("%s: %d is not a recognized cmap format.\n", ttf->fname, GetUInt16(ttf->cmap, 0, 1)); #endif ttf->cmapType = CMAP_NOT_USABLE; ttf->cmap = NULL; ttf->mapper = NULL; } } } static void GetKern(TrueTypeFont *ttf) { guint8 *table = getTable(ttf, O_kern); guint8 *ptr; int i; if (!table) goto badtable; if (getTableSize(ttf, O_kern) < 32) goto badtable; if (GetUInt16(table, 0, 1) == 0) { /* Traditional Microsoft style table with USHORT version and nTables fields */ ttf->nkern = GetUInt16(table, 2, 1); ttf->kerntables = calloc(ttf->nkern, sizeof(guint8 *)); assert(ttf->kerntables != 0); memset(ttf->kerntables, 0, ttf->nkern * sizeof(guint8 *)); ttf->kerntype = KT_MICROSOFT; ptr = table + 4; for (i=0; i < ttf->nkern; i++) { ttf->kerntables[i] = ptr; ptr += GetUInt16(ptr, 2, 1); /* sanity check */ if( ptr > ttf->ptr+ttf->fsize ) { free( ttf->kerntables ); goto badtable; } } return; } if (GetUInt32(table, 0, 1) == 0x00010000) { /* MacOS style kern tables: fixed32 version and guint32 nTables fields */ ttf->nkern = GetUInt32(table, 4, 1); ttf->kerntables = calloc(ttf->nkern, sizeof(guint8 *)); assert(ttf->kerntables != 0); memset(ttf->kerntables, 0, ttf->nkern * sizeof(guint8 *)); ttf->kerntype = KT_APPLE_NEW; ptr = table + 8; for (i = 0; i < ttf->nkern; i++) { ttf->kerntables[i] = ptr; ptr += GetUInt32(ptr, 0, 1); /* sanity check; there are some fonts that are broken in this regard */ if( ptr > ttf->ptr+ttf->fsize ) { free( ttf->kerntables ); goto badtable; } } return; } badtable: ttf->kerntype = KT_NONE; ttf->kerntables = NULL; return; } /* KernGlyphsPrim?() functions expect the caller to ensure the validity of their arguments and * that x and y elements of the kern array are initialized to zeroes */ static void KernGlyphsPrim1(TrueTypeFont *ttf, guint16 *glyphs, int nglyphs, int wmode, KernData *kern) { fprintf(stderr, "MacOS kerning tables have not been implemented yet!\n"); } static void KernGlyphsPrim2(TrueTypeFont *ttf, guint16 *glyphs, int nglyphs, int wmode, KernData *kern) { int i, j; guint32 gpair; for (i = 0; i < nglyphs - 1; i++) { gpair = (glyphs[i] << 16) | glyphs[i+1]; #ifdef DEBUG2 /* All fonts with MS kern table that I've seen so far contain just one kern subtable. * MS kern documentation is very poor and I doubt that font developers will be using * several subtables. I expect them to be using OpenType tables instead. * According to MS documention, format 2 subtables are not supported by Windows and OS/2. */ if (ttf->nkern > 1) { fprintf(stderr, "KernGlyphsPrim2: %d kern tables found.\n", ttf->nkern); } #endif for (j = 0; j < ttf->nkern; j++) { guint16 coverage = GetUInt16(ttf->kerntables[j], 4, 1); guint8 *ptr; int npairs; guint32 t; int l, r, k; if (! ((coverage & 1) ^ wmode)) continue; if ((coverage & 0xFFFE) != 0) { #ifdef DEBUG2 fprintf(stderr, "KernGlyphsPrim2: coverage flags are not supported: %04X.\n", coverage); #endif continue; } ptr = ttf->kerntables[j]; npairs = GetUInt16(ptr, 6, 1); ptr += 14; l = 0; r = npairs; do { k = (l + r) >> 1; t = GetUInt32(ptr, k * 6, 1); if (gpair >= t) l = k + 1; if (gpair <= t) r = k - 1; } while (l <= r); if (l - r == 2) { if (!wmode) { kern[i].x = XUnits(ttf->unitsPerEm, GetInt16(ptr, 4 + (l-1) * 6, 1)); } else { kern[i].y = XUnits(ttf->unitsPerEm, GetInt16(ptr, 4 + (l-1) * 6, 1)); } /* !wmode ? kern[i].x : kern[i].y = GetInt16(ptr, 4 + (l-1) * 6, 1); */ } } } } static void KernGlyphPairPrim1(guint32 nkern, guint8 **kerntables, int upem, int wmode, guint32 a, guint32 b, int *x, int *y) { fprintf(stderr, "MacOS kerning tables have not been implemented yet!\n"); } static void KernGlyphPairPrim2(guint32 nkern, guint8 **kerntables, int upem, int wmode, guint32 a, guint32 b, int *x, int *y) { int j; guint32 gpair; if (a > 0xFFFF || b > 0xFFFF) return; /* 32 bit glyphs are not supported by 'kern' */ gpair = a << 16 | b; for (j = 0; j < nkern; j++) { guint16 coverage = GetUInt16(kerntables[j], 4, 1); guint8 *ptr; int npairs; guint32 t; int l, r, k; if (! ((coverage & 1) ^ wmode)) continue; if ((coverage & 0xFFFE) != 0) { #ifdef DEBUG2 fprintf(stderr, "KernGlyphPairPrim2: coverage flags are not supported: %04X.\n", coverage); #endif continue; } ptr = kerntables[j]; npairs = GetUInt16(ptr, 6, 1); ptr += 14; l = 0; r = npairs; do { k = (l + r) >> 1; t = GetUInt32(ptr, k * 6, 1); if (gpair >= t) l = k + 1; if (gpair <= t) r = k - 1; } while (l <= r); if (l - r == 2) { if (!wmode) { *x = XUnits(upem, GetInt16(ptr, 4 + (l-1) * 6, 1)); } else { *y = XUnits(upem, GetInt16(ptr, 4 + (l-1) * 6, 1)); } } } } /*- Public functions */ /*FOLD00*/ int CountTTCFonts(const char* fname) { int nFonts = 0; guint8 buffer[12]; int fd = open(fname, O_RDONLY); if( fd != -1 ) { if (read(fd, buffer, 12) == 12) { if(GetUInt32(buffer, 0, 1) == T_ttcf ) nFonts = GetUInt32(buffer, 8, 1); } close(fd); } return nFonts; } int OpenTTFont(const char *fname, guint32 facenum, TrueTypeFont** ttf) { TrueTypeFont *t; int ret, i, fd = -1; guint32 version; guint8 *table, *offset; guint32 length, tag; gsize filelength; #if 0 guint32 tdoffset = 0; /* offset to TableDirectory in a TTC file. For TTF files is 0 */ #endif int indexfmt, k; *ttf = NULL; if (!fname || !*fname) return SF_BADFILE; t = calloc(1,sizeof(TrueTypeFont)); assert(t != 0); t->tag = 0; t->fname = NULL; t->fsize = -1; t->ptr = NULL; t->nglyphs = 0xFFFFFFFF; #ifdef USE_GSUB t->pGSubstitution = 0; #endif t->fname = strdup(fname); assert(t->fname != 0); if (!g_file_get_contents(t->fname, (gchar **)&t->ptr, &filelength, NULL)) { ret = SF_FILEIO; goto cleanup; } t->fsize = filelength; if (t->ptr == NULL) { ret = SF_MEMORY; goto cleanup; } version = GetInt32(t->ptr, 0, 1); if ((version == 0x00010000) || (version == T_true)) { t->tdoffset = 0; } else if (version == T_ttcf) { /*- TrueType collection */ if (GetUInt32(t->ptr, 4, 1) != 0x00010000) { CloseTTFont(t); return SF_TTFORMAT; } if (facenum >= GetUInt32(t->ptr, 8, 1)) { CloseTTFont(t); return SF_FONTNO; } t->tdoffset = GetUInt32(t->ptr, 12 + 4 * facenum, 1); } else { CloseTTFont(t); return SF_TTFORMAT; } #ifdef DEBUG2 fprintf(stderr, "t->tdoffset: %d\n", t->tdoffset); #endif /* magic number */ t->tag = TTFontClassTag; t->ntables = GetUInt16(t->ptr + t->tdoffset, 4, 1); t->tables = calloc(NUM_TAGS, sizeof(void *)); assert(t->tables != 0); t->tlens = calloc(NUM_TAGS, sizeof(guint32)); assert(t->tlens != 0); memset(t->tables, 0, NUM_TAGS * sizeof(void *)); memset(t->tlens, 0, NUM_TAGS * sizeof(guint32)); /* parse the tables */ for (i=0; intables; i++) { tag = GetUInt32(t->ptr + t->tdoffset + 12, 16 * i, 1); offset = t->ptr + GetUInt32(t->ptr + t->tdoffset + 12, 16 * i + 8, 1); length = GetUInt32(t->ptr + t->tdoffset + 12, 16 * i + 12, 1); if (tag == T_maxp) { t->tables[O_maxp] = offset; t->tlens[O_maxp] = length; continue; } if (tag == T_glyf) { t->tables[O_glyf] = offset; t->tlens[O_glyf] = length; continue; } if (tag == T_head) { t->tables[O_head] = offset; t->tlens[O_head] = length; continue; } if (tag == T_loca) { t->tables[O_loca] = offset; t->tlens[O_loca] = length; continue; } if (tag == T_name) { t->tables[O_name] = offset; t->tlens[O_name] = length; continue; } if (tag == T_hhea) { t->tables[O_hhea] = offset; t->tlens[O_hhea] = length; continue; } if (tag == T_hmtx) { t->tables[O_hmtx] = offset; t->tlens[O_hmtx] = length; continue; } if (tag == T_cmap) { t->tables[O_cmap] = offset; t->tlens[O_cmap] = length; continue; } if (tag == T_vhea) { t->tables[O_vhea] = offset; t->tlens[O_vhea] = length; continue; } if (tag == T_vmtx) { t->tables[O_vmtx] = offset; t->tlens[O_vmtx] = length; continue; } if (tag == T_OS2 ) { t->tables[O_OS2 ] = offset; t->tlens[O_OS2 ] = length; continue; } if (tag == T_post) { t->tables[O_post] = offset; t->tlens[O_post] = length; continue; } if (tag == T_kern) { t->tables[O_kern] = offset; t->tlens[O_kern] = length; continue; } if (tag == T_cvt ) { t->tables[O_cvt ] = offset; t->tlens[O_cvt ] = length; continue; } if (tag == T_prep) { t->tables[O_prep] = offset; t->tlens[O_prep] = length; continue; } if (tag == T_fpgm) { t->tables[O_fpgm] = offset; t->tlens[O_fpgm] = length; continue; } if (tag == T_gsub) { t->tables[O_gsub] = offset; t->tlens[O_gsub] = length; continue; } } /* At this point TrueTypeFont is constructed, now need to verify the font format and read the basic font properties */ /* The following tables are absolutely required: * maxp, head, glyf, loca, name, cmap */ if (!(getTable(t, O_maxp) && getTable(t, O_head) && getTable(t, O_glyf) && getTable(t, O_loca) && getTable(t, O_name) && getTable(t, O_cmap) )) { CloseTTFont(t); return SF_TTFORMAT; } table = getTable(t, O_maxp); t->nglyphs = GetUInt16(table, 4, 1); table = getTable(t, O_head); t->unitsPerEm = GetUInt16(table, 18, 1); indexfmt = GetInt16(table, 50, 1); if (!((indexfmt == 0) || indexfmt == 1)) { CloseTTFont(t); return SF_TTFORMAT; } k = (getTableSize(t, O_loca) / (indexfmt ? 4 : 2)) - 1; if (k < t->nglyphs) t->nglyphs = k; /* Hack for broken Chinese fonts */ table = getTable(t, O_loca); t->goffsets = (guint32 *) calloc(1+t->nglyphs, sizeof(guint32)); assert(t->goffsets != 0); for (i = 0; i <= t->nglyphs; i++) { t->goffsets[i] = indexfmt ? GetUInt32(table, i << 2, 1) : GetUInt16(table, i << 1, 1) << 1; } table = getTable(t, O_hhea); t->numberOfHMetrics = (table != 0) ? GetUInt16(table, 34, 1) : 0; table = getTable(t, O_vhea); t->numOfLongVerMetrics = (table != 0) ? GetUInt16(table, 34, 1) : 0; GetNames(t); FindCmap(t); GetKern(t); #ifdef USE_GSUB ReadGSUB(t,t->tables[O_gsub],0,0); #endif *ttf = t; return SF_OK; cleanup: /*- t and t->fname have been allocated! */ free(t->fname); free(t); if (fd != -1) close(fd); return ret; } void CloseTTFont(TrueTypeFont *ttf) /*FOLD01*/ { if (ttf->tag != TTFontClassTag) return; free(ttf->ptr); free(ttf->fname); free(ttf->goffsets); free(ttf->psname); free(ttf->family); if( ttf->ufamily ) free( ttf->ufamily ); free(ttf->subfamily); free(ttf->tables); free(ttf->tlens); free(ttf->kerntables); free(ttf); return; } int GetTTGlyphPoints(TrueTypeFont *ttf, guint32 glyphID, ControlPoint **pointArray) { return GetTTGlyphOutline(ttf, glyphID, pointArray, NULL, NULL); } #ifdef NO_LIST static #endif int GetTTGlyphComponents(TrueTypeFont *ttf, guint32 glyphID, list glyphlist) { guint8 *ptr, *glyf = getTable(ttf, O_glyf); int n = 1; if (glyphID >= ttf->nglyphs) return 0; ptr = glyf + ttf->goffsets[glyphID]; listAppend(glyphlist, (void *) glyphID); if (GetInt16(ptr, 0, 1) == -1) { guint16 flags, index; ptr += 10; do { flags = GetUInt16(ptr, 0, 1); index = GetUInt16(ptr, 2, 1); ptr += 4; n += GetTTGlyphComponents(ttf, index, glyphlist); if (flags & ARG_1_AND_2_ARE_WORDS) { ptr += 4; } else { ptr += 2; } if (flags & WE_HAVE_A_SCALE) { ptr += 2; } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { ptr += 4; } else if (flags & WE_HAVE_A_TWO_BY_TWO) { ptr += 8; } } while (flags & MORE_COMPONENTS); } return n; } #ifndef NO_TYPE3 int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, /*FOLD00*/ guint16 *glyphArray, guint8 *encoding, int nGlyphs, int wmode) { ControlPoint *pa; PSPathElement *path; int i, j, r, n; guint8 *table = getTable(ttf, O_head); TTGlyphMetrics metrics; int UPEm = ttf->unitsPerEm; const char *h01 = "%%!PS-AdobeFont-%d.%d-%d.%d\n"; const char *h02 = "%%%%Creator: %s %s %s\n"; const char *h03 = "%%%%Title: %s\n"; const char *h04 = "%%%%CreationDate: %s\n"; const char *h05 = "%%%%Pages: 0\n"; const char *h06 = "%%%%EndComments\n"; const char *h07 = "%%%%BeginResource: font %s\n"; const char *h08 = "%%%%EndResource\n"; const char *h09 = "%% Original font name: %s\n"; const char *h10 = "30 dict begin\n" "/PaintType 0 def\n" "/FontType 3 def\n" "/StrokeWidth 0 def\n"; const char *h11 = "/FontName /%s def\n"; /* const char *h12 = "%/UniqueID %d def\n"; */ const char *h13 = "/FontMatrix [.001 0 0 .001 0 0] def\n"; const char *h14 = "/FontBBox [%d %d %d %d] def\n"; const char *h15= "/Encoding 256 array def\n" " 0 1 255 {Encoding exch /.notdef put} for\n"; const char *h16 = " Encoding %d /glyph%d put\n"; const char *h17 = "/XUID [103 0 0 16#%08X %d 16#%08X 16#%08X] def\n"; const char *h30 = "/CharProcs %d dict def\n"; const char *h31 = " CharProcs begin\n"; const char *h32 = " /.notdef {} def\n"; const char *h33 = " /glyph%d {\n"; const char *h34 = " } bind def\n"; const char *h35 = " end\n"; const char *h40 = "/BuildGlyph {\n" " exch /CharProcs get exch\n" " 2 copy known not\n" " {pop /.notdef} if\n" " get exec\n" "} bind def\n" "/BuildChar {\n" " 1 index /Encoding get exch get\n" " 1 index /BuildGlyph get exec\n" "} bind def\n" "currentdict end\n"; const char *h41 = "/%s exch definefont pop\n"; if (!((nGlyphs > 0) && (nGlyphs <= 256))) return SF_GLYPHNUM; if (!glyphArray) return SF_BADARG; if (!fname) fname = ttf->psname; fprintf(outf, h01, GetInt16(table, 0, 1), GetUInt16(table, 2, 1), GetInt16(table, 4, 1), GetUInt16(table, 6, 1)); fprintf(outf, h02, modname, modver, modextra); fprintf(outf, h03, fname); fprintf(outf, h04, " "); fprintf(outf, h05); fprintf(outf, h06); fprintf(outf, h07, fname); fprintf(outf, h09, ttf->psname); fprintf(outf, h10); fprintf(outf, h11, fname); /* fprintf(outf, h12, 4000000); */ /* XUID generation: * 103 0 0 C1 C2 C3 C4 * C1 - CRC-32 of the entire source TrueType font * C2 - number of glyphs in the subset * C3 - CRC-32 of the glyph array * C4 - CRC-32 of the encoding array * * All CRC-32 numbers are presented as hexadecimal numbers */ fprintf(outf, h17, crc32(ttf->ptr, ttf->fsize), nGlyphs, crc32(glyphArray, nGlyphs * 2), crc32(encoding, nGlyphs)); fprintf(outf, h13); fprintf(outf, h14, XUnits(UPEm, GetInt16(table, 36, 1)), XUnits(UPEm, GetInt16(table, 38, 1)), XUnits(UPEm, GetInt16(table, 40, 1)), XUnits(UPEm, GetInt16(table, 42, 1))); fprintf(outf, h15); for (i = 0; i < nGlyphs; i++) { fprintf(outf, h16, encoding[i], i); } fprintf(outf, h30, nGlyphs+1); fprintf(outf, h31); fprintf(outf, h32); for (i = 0; i < nGlyphs; i++) { fprintf(outf, h33, i); r = GetTTGlyphOutline(ttf, glyphArray[i] < ttf->nglyphs ? glyphArray[i] : 0, &pa, &metrics, 0); if (r > 0) { n = BSplineToPSPath(pa, r, &path); } else { n = 0; /* glyph might have zero contours but valid metrics ??? */ path = 0; if (r < 0) { /* glyph is not present in the font - pa array was not allocated, so no need to free it */ continue; } } fprintf(outf, "\t%d %d %d %d %d %d setcachedevice\n", wmode == 0 ? XUnits(UPEm, metrics.aw) : 0, wmode == 0 ? 0 : -XUnits(UPEm, metrics.ah), XUnits(UPEm, metrics.xMin), XUnits(UPEm, metrics.yMin), XUnits(UPEm, metrics.xMax), XUnits(UPEm, metrics.yMax)); for (j = 0; j < n; j++) { switch (path[j].type) { case PS_MOVETO: fprintf(outf, "\t%d %d moveto\n", XUnits(UPEm, path[j].x1), XUnits(UPEm, path[j].y1)); break; case PS_LINETO: fprintf(outf, "\t%d %d lineto\n", XUnits(UPEm, path[j].x1), XUnits(UPEm, path[j].y1)); break; case PS_CURVETO: fprintf(outf, "\t%d %d %d %d %d %d curveto\n", XUnits(UPEm, path[j].x1), XUnits(UPEm, path[j].y1), XUnits(UPEm, path[j].x2), XUnits(UPEm, path[j].y2), XUnits(UPEm, path[j].x3), XUnits(UPEm, path[j].y3)); break; case PS_CLOSEPATH: fprintf(outf, "\tclosepath\n"); break; } } if (n > 0) fprintf(outf, "\tfill\n"); /* if glyph is not a whitespace character */ fprintf(outf, h34); free(pa); free(path); } fprintf(outf, h35); fprintf(outf, h40); fprintf(outf, h41, fname); fprintf(outf, h08); return SF_OK; } #endif #ifndef NO_TTCR int CreateTTFromTTGlyphs(TrueTypeFont *ttf, const char *fname, guint16 *glyphArray, guint8 *encoding, int nGlyphs, int nNameRecs, NameRecord *nr, guint32 flags) { TrueTypeCreator *ttcr; TrueTypeTable *head = NULL, *hhea = NULL, *maxp = NULL, *cvt = NULL, *prep = NULL, *glyf = NULL, *fpgm = NULL, *cmap = NULL, *name = NULL, *post = NULL, *os2 = NULL; guint8 *p; int i; int res; guint32 *gID; TrueTypeCreatorNewEmpty(T_true, &ttcr); /** name **/ if (flags & TTCF_AutoName) { /* not implemented yet NameRecord *names; NameRecord newname; int n = GetTTNameRecords(ttf, &names); int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0; guint8 *cp1; guint8 suffix[32]; guint32 c1 = crc32(glyphArray, nGlyphs * 2); guint32 c2 = crc32(encoding, nGlyphs); int len; snprintf(suffix, 31, "S%08X%08X-%d", c1, c2, nGlyphs); name = TrueTypeTableNew_name(0, 0); for (i = 0; i < n; i++) { if (names[i].platformID == 1 && names[i].encodingID == 0 && names[i].languageID == 0 && names[i].nameID == 1) { memcpy(newname, names+i, sizeof(NameRecord)); newname.slen = name[i].slen + strlen(suffix); */ const guint8 ptr[] = {0,'T',0,'r',0,'u',0,'e',0,'T',0,'y',0,'p',0,'e',0,'S',0,'u',0,'b',0,'s',0,'e',0,'t'}; NameRecord n1 = {1, 0, 0, 6, 14, (guint8 *) "TrueTypeSubset"}; NameRecord n2 = {3, 1, 1033, 6, 28, NULL}; n2.sptr = (guint8 *) ptr; name = TrueTypeTableNew_name(0, NULL); nameAdd(name, &n1); nameAdd(name, &n2); } else { if (nNameRecs == 0) { NameRecord *names; int n = GetTTNameRecords(ttf, &names); name = TrueTypeTableNew_name(n, names); DisposeNameRecords(names, n); } else { name = TrueTypeTableNew_name(nNameRecs, nr); } } /** maxp **/ maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp)); /** hhea **/ p = getTable(ttf, O_hhea); if (p) { hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1)); } else { hhea = TrueTypeTableNew_hhea(0, 0, 0, 0, 0); } /** head **/ p = getTable(ttf, O_head); assert(p != 0); head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1)); /** glyf **/ glyf = TrueTypeTableNew_glyf(); gID = scalloc(nGlyphs, sizeof(guint32)); for (i = 0; i < nGlyphs; i++) { gID[i] = glyfAdd(glyf, GetTTRawGlyphData(ttf, glyphArray[i]), ttf); } /** cmap **/ cmap = TrueTypeTableNew_cmap(); for (i=0; i < nGlyphs; i++) { cmapAdd(cmap, 0x0100, encoding[i], gID[i]); } /** cvt **/ if ((p = getTable(ttf, O_cvt)) != 0) { cvt = TrueTypeTableNew(T_cvt, getTableSize(ttf, O_cvt), p); } /** prep **/ if ((p = getTable(ttf, O_prep)) != 0) { prep = TrueTypeTableNew(T_prep, getTableSize(ttf, O_prep), p); } /** fpgm **/ if ((p = getTable(ttf, O_fpgm)) != 0) { fpgm = TrueTypeTableNew(T_fpgm, getTableSize(ttf, O_fpgm), p); } /** post **/ if ((p = getTable(ttf, O_post)) != 0) { post = TrueTypeTableNew_post(0x00030000, GetUInt32(p, 4, 1), GetUInt16(p, 8, 1), GetUInt16(p, 10, 1), GetUInt16(p, 12, 1)); } else { post = TrueTypeTableNew_post(0x00030000, 0, 0, 0, 0); } if (flags & TTCF_IncludeOS2) { if ((p = getTable(ttf, O_OS2)) != 0) { os2 = TrueTypeTableNew(T_OS2, getTableSize(ttf, O_OS2), p); } } AddTable(ttcr, name); AddTable(ttcr, maxp); AddTable(ttcr, hhea); AddTable(ttcr, head); AddTable(ttcr, glyf); AddTable(ttcr, cmap); AddTable(ttcr, cvt ); AddTable(ttcr, prep); AddTable(ttcr, fpgm); AddTable(ttcr, post); AddTable(ttcr, os2); if ((res = StreamToFile(ttcr, fname)) != SF_OK) { #ifdef DEBUG fprintf(stderr, "StreamToFile: error code: %d.\n", res); #endif } TrueTypeCreatorDispose(ttcr); free(gID); return res; } // THE SAME, BUT TO MEMORY int CreateTTFromTTGlyphs_tomemory (TrueTypeFont *ttf, guint8 **out_buf, guint32 *out_len, guint16 *glyphArray, guint8 *encoding, int nGlyphs, int nNameRecs, NameRecord *nr, guint32 flags) { TrueTypeCreator *ttcr; TrueTypeTable *head = NULL, *hhea = NULL, *maxp = NULL, *cvt = NULL, *prep = NULL, *glyf = NULL, *fpgm = NULL, *cmap = NULL, *name = NULL, *post = NULL, *os2 = NULL; guint8 *p; int i; int res; guint32 *gID; TrueTypeCreatorNewEmpty(T_true, &ttcr); /** name **/ if (flags & TTCF_AutoName) { /* not implemented yet NameRecord *names; NameRecord newname; int n = GetTTNameRecords(ttf, &names); int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0; guint8 *cp1; guint8 suffix[32]; guint32 c1 = crc32(glyphArray, nGlyphs * 2); guint32 c2 = crc32(encoding, nGlyphs); int len; snprintf(suffix, 31, "S%08X%08X-%d", c1, c2, nGlyphs); name = TrueTypeTableNew_name(0, 0); for (i = 0; i < n; i++) { if (names[i].platformID == 1 && names[i].encodingID == 0 && names[i].languageID == 0 && names[i].nameID == 1) { memcpy(newname, names+i, sizeof(NameRecord)); newname.slen = name[i].slen + strlen(suffix); */ const guint8 ptr[] = {0,'T',0,'r',0,'u',0,'e',0,'T',0,'y',0,'p',0,'e',0,'S',0,'u',0,'b',0,'s',0,'e',0,'t'}; NameRecord n1 = {1, 0, 0, 6, 14, (guint8 *) "TrueTypeSubset"}; NameRecord n2 = {3, 1, 1033, 6, 28, NULL}; n2.sptr = (guint8 *) ptr; name = TrueTypeTableNew_name(0, NULL); nameAdd(name, &n1); nameAdd(name, &n2); } else { if (nNameRecs == 0) { NameRecord *names; int n = GetTTNameRecords(ttf, &names); name = TrueTypeTableNew_name(n, names); DisposeNameRecords(names, n); } else { name = TrueTypeTableNew_name(nNameRecs, nr); } } /** maxp **/ maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp)); /** hhea **/ p = getTable(ttf, O_hhea); if (p) { hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1)); } else { hhea = TrueTypeTableNew_hhea(0, 0, 0, 0, 0); } /** head **/ p = getTable(ttf, O_head); assert(p != 0); head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1)); /** glyf **/ glyf = TrueTypeTableNew_glyf(); gID = scalloc(nGlyphs, sizeof(guint32)); for (i = 0; i < nGlyphs; i++) { gID[i] = glyfAdd(glyf, GetTTRawGlyphData(ttf, glyphArray[i]), ttf); } /** cmap **/ cmap = TrueTypeTableNew_cmap(); for (i=0; i < nGlyphs; i++) { cmapAdd(cmap, 0x0100, encoding[i], gID[i]); } /** cvt **/ if ((p = getTable(ttf, O_cvt)) != 0) { cvt = TrueTypeTableNew(T_cvt, getTableSize(ttf, O_cvt), p); } /** prep **/ if ((p = getTable(ttf, O_prep)) != 0) { prep = TrueTypeTableNew(T_prep, getTableSize(ttf, O_prep), p); } /** fpgm **/ if ((p = getTable(ttf, O_fpgm)) != 0) { fpgm = TrueTypeTableNew(T_fpgm, getTableSize(ttf, O_fpgm), p); } /** post **/ if ((p = getTable(ttf, O_post)) != 0) { post = TrueTypeTableNew_post(0x00030000, GetUInt32(p, 4, 1), GetUInt16(p, 8, 1), GetUInt16(p, 10, 1), GetUInt16(p, 12, 1)); } else { post = TrueTypeTableNew_post(0x00030000, 0, 0, 0, 0); } if (flags & TTCF_IncludeOS2) { if ((p = getTable(ttf, O_OS2)) != 0) { os2 = TrueTypeTableNew(T_OS2, getTableSize(ttf, O_OS2), p); } } AddTable(ttcr, name); AddTable(ttcr, maxp); AddTable(ttcr, hhea); AddTable(ttcr, head); AddTable(ttcr, glyf); AddTable(ttcr, cmap); AddTable(ttcr, cvt ); AddTable(ttcr, prep); AddTable(ttcr, fpgm); AddTable(ttcr, post); AddTable(ttcr, os2); if ((res = StreamToMemory(ttcr, out_buf, out_len)) != SF_OK) { #ifdef DEBUG fprintf(stderr, "StreamToMemory: error code: %d.\n", res); #endif } TrueTypeCreatorDispose(ttcr); free(gID); return res; } #endif #ifndef NO_TYPE42 static GlyphOffsets *GlyphOffsetsNew(guint8 *sfntP) { GlyphOffsets *res = smalloc(sizeof(GlyphOffsets)); guint16 i, numTables = GetUInt16(sfntP, 4, 1); guint32 locaLen = 0; gint16 indexToLocFormat = 1; guint8 *loca = sfntP + 12 + 16*numTables; for (i = 0; i < numTables; i++) { guint32 tag = GetUInt32(sfntP + 12, 16 * i, 1); guint32 off = GetUInt32(sfntP + 12, 16 * i + 8, 1); guint32 len = GetUInt32(sfntP + 12, 16 * i + 12, 1); if (tag == T_loca) { loca = sfntP + off; locaLen = len; } else if (tag == T_head) { indexToLocFormat = GetInt16(sfntP + off, 50, 1); } } res->nGlyphs = locaLen / ((indexToLocFormat == 1) ? 4 : 2); assert(res->nGlyphs != 0); res->offs = scalloc(res->nGlyphs, sizeof(guint32)); for (i = 0; i < res->nGlyphs; i++) { if (indexToLocFormat == 1) { res->offs[i] = GetUInt32(loca, i * 4, 1); } else { res->offs[i] = GetUInt16(loca, i * 2, 1) << 1; } } return res; } static void GlyphOffsetsDispose(GlyphOffsets *_this) { if (_this) { free(_this->offs); free(_this); } } static void DumpSfnts(FILE *outf, guint8 *sfntP) { HexFmt *h = HexFmtNew(outf); guint16 i, numTables = GetUInt16(sfntP, 4, 1); guint32 j, *offs, *len; GlyphOffsets *go = GlyphOffsetsNew(sfntP); guint8 pad[] = {0,0,0,0}; /* zeroes */ assert(numTables <= 9); /* Type42 has 9 required tables */ offs = scalloc(numTables, sizeof(guint32)); len = scalloc(numTables, sizeof(guint32)); fputs("/sfnts [", outf); HexFmtOpenString(h); HexFmtBlockWrite(h, sfntP, 12); /* stream out the Offset Table */ HexFmtBlockWrite(h, sfntP+12, 16 * numTables); /* stream out the Table Directory */ for (i=0; inGlyphs - 1; j++) { o = go->offs[j]; l = go->offs[j + 1] - o; HexFmtBlockWrite(h, glyf + o, l); } } HexFmtBlockWrite(h, pad, (4 - (len & 3)) & 3); } HexFmtCloseString(h); fputs("] def\n", outf); GlyphOffsetsDispose(go); HexFmtDispose(h); free(offs); free(len); } int CreateT42FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *psname, guint16 *glyphArray, guint8 *encoding, int nGlyphs) { TrueTypeCreator *ttcr; TrueTypeTable *head = NULL, *hhea = NULL, *maxp = NULL, *cvt = NULL, *prep = NULL, *glyf = NULL, *fpgm = NULL; guint8 *p; int i; int res; guint32 ver, rev; guint8 *headP; guint8 *sfntP; guint32 sfntLen; int UPEm = ttf->unitsPerEm; guint16 *gID; /* if (nGlyphs >= 256) return SF_GLYPHNUM; */ assert(psname != 0); TrueTypeCreatorNewEmpty(T_true, &ttcr); /* head */ headP = p = getTable(ttf, O_head); assert(p != 0); head = TrueTypeTableNew_head(GetUInt32(p, 4, 1), GetUInt16(p, 16, 1), GetUInt16(p, 18, 1), p+20, GetUInt16(p, 44, 1), GetUInt16(p, 46, 1), GetInt16(p, 48, 1)); ver = GetUInt32(p, 0, 1); rev = GetUInt32(p, 4, 1); /** hhea **/ p = getTable(ttf, O_hhea); if (p) { hhea = TrueTypeTableNew_hhea(GetUInt16(p, 4, 1), GetUInt16(p, 6, 1), GetUInt16(p, 8, 1), GetUInt16(p, 18, 1), GetUInt16(p, 20, 1)); } else { hhea = TrueTypeTableNew_hhea(0, 0, 0, 0, 0); } /** maxp **/ maxp = TrueTypeTableNew_maxp(getTable(ttf, O_maxp), getTableSize(ttf, O_maxp)); /** cvt **/ if ((p = getTable(ttf, O_cvt)) != 0) { cvt = TrueTypeTableNew(T_cvt, getTableSize(ttf, O_cvt), p); } /** prep **/ if ((p = getTable(ttf, O_prep)) != 0) { prep = TrueTypeTableNew(T_prep, getTableSize(ttf, O_prep), p); } /** fpgm **/ if ((p = getTable(ttf, O_fpgm)) != 0) { fpgm = TrueTypeTableNew(T_fpgm, getTableSize(ttf, O_fpgm), p); } /** glyf **/ glyf = TrueTypeTableNew_glyf(); gID = scalloc(nGlyphs, sizeof(guint32)); for (i = 0; i < nGlyphs; i++) { gID[i] = glyfAdd(glyf, GetTTRawGlyphData(ttf, glyphArray[i]), ttf); } AddTable(ttcr, head); AddTable(ttcr, hhea); AddTable(ttcr, maxp); AddTable(ttcr, cvt); AddTable(ttcr, prep); AddTable(ttcr, glyf); AddTable(ttcr, fpgm); if ((res = StreamToMemory(ttcr, &sfntP, &sfntLen)) != SF_OK) { TrueTypeCreatorDispose(ttcr); free(gID); return res; } fprintf(outf, "%%!PS-TrueTypeFont-%d.%d-%d.%d\n", ver>>16, ver & 0xFFFF, rev>>16, rev & 0xFFFF); fprintf(outf, "%%%%Creator: %s %s %s\n", modname, modver, modextra); fprintf(outf, "%%- Font subset generated from a source font file: '%s'\n", ttf->fname); fprintf(outf, "%%- Original font name: %s\n", ttf->psname); fprintf(outf, "%%- Original font family: %s\n", ttf->family); fprintf(outf, "%%- Original font sub-family: %s\n", ttf->subfamily); fprintf(outf, "11 dict begin\n"); fprintf(outf, "/FontName /%s def\n", psname); fprintf(outf, "/PaintType 0 def\n"); fprintf(outf, "/FontMatrix [1 0 0 1 0 0] def\n"); fprintf(outf, "/FontBBox [%d %d %d %d] def\n", XUnits(UPEm, GetInt16(headP, 36, 1)), XUnits(UPEm, GetInt16(headP, 38, 1)), XUnits(UPEm, GetInt16(headP, 40, 1)), XUnits(UPEm, GetInt16(headP, 42, 1))); fprintf(outf, "/FontType 42 def\n"); fprintf(outf, "/Encoding 256 array def\n"); fprintf(outf, " 0 1 255 {Encoding exch /.notdef put} for\n"); for (i = 1; iptr, ttf->fsize), nGlyphs, crc32(glyphArray, nGlyphs * 2), crc32(encoding, nGlyphs)); DumpSfnts(outf, sfntP); /* dump charstrings */ fprintf(outf, "/CharStrings %d dict dup begin\n", nGlyphs); fprintf(outf, "/.notdef 0 def\n"); for (i = 1; i < glyfCount(glyf); i++) { fprintf(outf,"/glyph%d %d def\n", i, i); } fprintf(outf, "end readonly def\n"); fprintf(outf, "FontName currentdict end definefont pop\n"); TrueTypeCreatorDispose(ttcr); free(gID); free(sfntP); return SF_OK; } #endif #ifndef NO_MAPPERS #ifdef USE_GSUB int MapString(TrueTypeFont *ttf, guint16 *str, int nchars, guint16 *glyphArray, int bvertical) #else int MapString(TrueTypeFont *ttf, guint16 *str, int nchars, guint16 *glyphArray) #endif { int i; guint16 *cp; if (ttf->cmapType == CMAP_NOT_USABLE ) return -1; if (!nchars) return 0; if (glyphArray == 0) { cp = str; } else { cp = glyphArray; } switch (ttf->cmapType) { case CMAP_MS_Symbol: if( ttf->mapper == getGlyph0 ) { guint16 aChar; for( i = 0; i < nchars; i++ ) { aChar = str[i]; if( ( aChar & 0xf000 ) == 0xf000 ) { aChar &= 0x00ff; } cp[i] = aChar; } } else if( glyphArray ) memcpy(glyphArray, str, nchars * 2); break; case CMAP_MS_Unicode: if (glyphArray != 0) { memcpy(glyphArray, str, nchars * 2); } break; case CMAP_MS_ShiftJIS: TranslateString12(str, cp, nchars); break; case CMAP_MS_Big5: TranslateString13(str, cp, nchars); break; case CMAP_MS_PRC: TranslateString14(str, cp, nchars); break; case CMAP_MS_Wansung: TranslateString15(str, cp, nchars); break; case CMAP_MS_Johab: TranslateString16(str, cp, nchars); break; } for (i = 0; i < nchars; i++) { cp[i] = ttf->mapper(ttf->cmap, cp[i]); #ifdef USE_GSUB if (cp[i]!=0 && bvertical!=0) cp[i] = UseGSUB(ttf,cp[i],bvertical); #endif } return nchars; } #ifdef USE_GSUB guint16 MapChar(TrueTypeFont *ttf, guint16 ch, int bvertical) #else guint16 MapChar(TrueTypeFont *ttf, guint16 ch) #endif { switch (ttf->cmapType) { case CMAP_MS_Symbol: if( ttf->mapper == getGlyph0 && ( ch & 0xf000 ) == 0xf000 ) { ch &= 0x00ff; } return ttf->mapper(ttf->cmap, ch ); case CMAP_MS_Unicode: break; case CMAP_MS_ShiftJIS: ch = TranslateChar12(ch); break; case CMAP_MS_Big5: ch = TranslateChar13(ch); break; case CMAP_MS_PRC: ch = TranslateChar14(ch); break; case CMAP_MS_Wansung: ch = TranslateChar15(ch); break; case CMAP_MS_Johab: ch = TranslateChar16(ch); break; default: return 0; } ch = ttf->mapper(ttf->cmap, ch); #ifdef USE_GSUB if (ch != 0 && bvertical != 0) { ch = UseGSUB(ttf,ch,bvertical); } #endif return ch; } #endif void GetTTGlyphMetrics(TrueTypeFont *ttf, guint32 glyphID, TTGlyphMetrics *metrics) { GetMetrics(ttf, glyphID, metrics); } TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, guint16 *glyphArray, int nGlyphs, int mode) { guint8 *table; TTSimpleGlyphMetrics *res; int i; guint16 glyphID; int n; int UPEm = ttf->unitsPerEm; if (mode == 0) { table = getTable(ttf, O_hmtx); n = ttf->numberOfHMetrics; } else { table = getTable(ttf, O_vmtx); n = ttf->numOfLongVerMetrics; } if (!nGlyphs || !glyphArray) return NULL; /* invalid parameters */ if (!n || !table) return NULL; /* the font does not contain the requested metrics */ res = calloc(nGlyphs, sizeof(TTSimpleGlyphMetrics)); assert(res != 0); for (i=0; inglyphs ) { res[i].sb = XUnits(UPEm, GetInt16(table + n * 4, (glyphID - n) * 2, 1)); } else { /* font is broken */ res[i].sb = XUnits(UPEm, GetInt16(table, 4*(n-1) + 2, 1)); } } } return res; } #ifndef NO_MAPPERS TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont * ttf, guint16 firstChar, int nChars, int mode) { TTSimpleGlyphMetrics *res = 0; guint16 *str; int i, n; str = malloc(nChars * 2); assert(str != 0); for (i=0; iunitsPerEm; memset(info, 0, sizeof(TTGlobalFontInfo)); info->family = ttf->family; info->ufamily = ttf->ufamily; info->subfamily = ttf->subfamily; info->psname = ttf->psname; info->symbolEncoded = ttf->cmapType == CMAP_MS_Symbol ? 1 : 0; table = getTable(ttf, O_OS2); if (table) { info->weight = GetUInt16(table, 4, 1); info->width = GetUInt16(table, 6, 1); info->fsSelection = GetUInt16(table, 62, 1); /* There are 3 different versions of OS/2 table: original (68 bytes long), * Microsoft old (78 bytes long) and Microsoft new (86 bytes long,) * Apple's documentation recommends looking at the table length. */ if (getTableSize(ttf, O_OS2) > 68) { info->typoAscender = XUnits(UPEm,GetInt16(table, 68, 1)); info->typoDescender = XUnits(UPEm, GetInt16(table, 70, 1)); info->typoLineGap = XUnits(UPEm, GetInt16(table, 72, 1)); info->winAscent = XUnits(UPEm, GetUInt16(table, 74, 1)); info->winDescent = XUnits(UPEm, GetUInt16(table, 76, 1)); } if (ttf->cmapType == CMAP_MS_Unicode) { info->rangeFlag = 1; info->ur1 = GetUInt32(table, 42, 1); info->ur2 = GetUInt32(table, 46, 1); info->ur3 = GetUInt32(table, 50, 1); info->ur4 = GetUInt32(table, 54, 1); } memcpy(info->panose, table + 32, 10); info->typeFlags = GetUInt16( table, 8, 1 ); } table = getTable(ttf, O_post); if (table) { info->pitch = GetUInt32(table, 12, 1); info->italicAngle = GetInt32(table, 4, 1); } table = getTable(ttf, O_head); /* 'head' tables is always there */ info->xMin = XUnits(UPEm, GetInt16(table, 36, 1)); info->yMin = XUnits(UPEm, GetInt16(table, 38, 1)); info->xMax = XUnits(UPEm, GetInt16(table, 40, 1)); info->yMax = XUnits(UPEm, GetInt16(table, 42, 1)); table = getTable(ttf, O_hhea); if (table) { info->ascender = XUnits(UPEm, GetInt16(table, 4, 1)); info->descender = XUnits(UPEm, GetInt16(table, 6, 1)); info->linegap = XUnits(UPEm, GetInt16(table, 8, 1)); } table = getTable(ttf, O_vhea); if (table) { info->vascent = XUnits(UPEm, GetInt16(table, 4, 1)); info->vdescent = XUnits(UPEm, GetInt16(table, 6, 1)); } } #if 0 guint8 *ExtractCmap(TrueTypeFont *ttf) { guint8 *ptr = 0; guint32 s; if ((s = getTableSize(ttf, O_cmap)) != 0) { ptr = smalloc(s); memcpy(ptr, getTable(ttf, O_cmap), s); } return ptr; } #endif guint8 *ExtractTable(TrueTypeFont *ttf, guint32 tag) { guint8 *ptr = NULL; int o = tagToOrd(tag); guint32 s; if (o != 0xFFFFFFFF) { /* Tag is one of the predefined tags */ if ((s = getTableSize(ttf, o)) != 0) { ptr = smalloc(s); memcpy(ptr, getTable(ttf, o), s); } } else { /* Need to do everything by hand */ int i; guint32 t; for (i=0; intables; i++) { guint8 *table; t = GetUInt32(ttf->ptr + ttf->tdoffset + 12, 16 * i, 1); if (t == tag) { table = ttf->ptr + GetUInt32(ttf->ptr + ttf->tdoffset + 12, 16 * i + 8, 1); s = GetUInt32(ttf->ptr + ttf->tdoffset + 12, 16 * i + 12, 1); ptr = smalloc(s); memcpy(ptr, table, s); break; } } } return ptr; } const guint8 *GetTable(TrueTypeFont *ttf, guint32 tag) { guint8 *ptr = NULL; int o = tagToOrd(tag); guint32 s; if (o != 0xFFFFFFFF) { /* Tag is one of the predefined tags */ if ((s = getTableSize(ttf, o)) != 0) { ptr = getTable(ttf, o); } } else { /* Need to do everything by hand */ int i; guint32 t; for (i=0; intables; i++) { t = GetUInt32(ttf->ptr + ttf->tdoffset + 12, 16 * i, 1); if (t == tag) { ptr = ttf->ptr + GetUInt32(ttf->ptr + ttf->tdoffset + 12, 16 * i + 8, 1); break; } } } return ptr; } void KernGlyphs(TrueTypeFont *ttf, guint16 *glyphs, int nglyphs, int wmode, KernData *kern) { int i; if (!nglyphs || !glyphs || !kern) return; for (i = 0; i < nglyphs-1; i++) kern[i].x = kern[i].y = 0; switch (ttf->kerntype) { case KT_APPLE_NEW: KernGlyphsPrim1(ttf, glyphs, nglyphs, wmode, kern); return; case KT_MICROSOFT: KernGlyphsPrim2(ttf, glyphs, nglyphs, wmode, kern); return; default: return; } } GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, guint32 glyphID) { guint8 *glyf = getTable(ttf, O_glyf); guint8 *hmtx = getTable(ttf, O_hmtx); guint8 *ptr; guint32 length; GlyphData *d; ControlPoint *cp; int i, n, m; if (glyphID >= ttf->nglyphs) return NULL; ptr = glyf + ttf->goffsets[glyphID]; length = ttf->goffsets[glyphID+1] - ttf->goffsets[glyphID]; d = malloc(sizeof(GlyphData)); assert(d != 0); if (length) { d->ptr = malloc((length + 1) & ~1); assert(d->ptr != 0); memcpy(d->ptr, ptr, length); if (GetInt16(ptr, 0, 1) >= 0) { d->compflag = 0; } else { d->compflag = 1; } } else { d->ptr = NULL; d->compflag = 0; } d->glyphID = glyphID; d->nbytes = (length + 1) & ~1; /* now calculate npoints and ncontours */ n = GetTTGlyphPoints(ttf, glyphID, &cp); if (n != -1) { m = 0; for (i = 0; i < n; i++) { if (cp[i].flags & 0x8000) m++; } d->npoints = n; d->ncontours = m; free(cp); } else { d->npoints = 0; d->ncontours = 0; } /* get adwance width and left sidebearing */ if (glyphID < ttf->numberOfHMetrics) { d->aw = GetUInt16(hmtx, 4 * glyphID, 1); d->lsb = GetInt16(hmtx, 4 * glyphID + 2, 1); } else { d->aw = GetUInt16(hmtx, 4 * (ttf->numberOfHMetrics - 1), 1); d->lsb = GetInt16(hmtx + ttf->numberOfHMetrics * 4, (glyphID - ttf->numberOfHMetrics) * 2, 1); } return d; } int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr) { guint8 *table = getTable(ttf, O_name); guint16 n = GetUInt16(table, 2, 1); NameRecord *rec; guint16 i; *nr = NULL; if (n == 0) return 0; rec = calloc(n, sizeof(NameRecord)); for (i = 0; i < n; i++) { rec[i].platformID = GetUInt16(table + 6, 12 * i, 1); rec[i].encodingID = GetUInt16(table + 6, 2 + 12 * i, 1); rec[i].languageID = GetUInt16(table + 6, 4 + 12 * i, 1); rec[i].nameID = GetUInt16(table + 6, 6 + 12 * i, 1); rec[i].slen = GetUInt16(table + 6, 8 + 12 * i, 1); if (rec[i].slen) { rec[i].sptr = (guint8 *) malloc(rec[i].slen); assert(rec[i].sptr != 0); memcpy(rec[i].sptr, table + GetUInt16(table, 4, 1) + GetUInt16(table + 6, 10 + 12 * i, 1), rec[i].slen); } else { rec[i].sptr = NULL; } } *nr = rec; return n; } void DisposeNameRecords(NameRecord* nr, int n) { int i; for (i = 0; i < n; i++) { if (nr[i].sptr) free(nr[i].sptr); } free(nr); } // int ExtractSimpleGlyphMetrics(guint8 *table, int numberOfMetrics, int nglyphs, int UPEm TTFullSimpleGlyphMetrics *ReadGlyphMetrics(guint8 *hmtx, guint8 *vmtx, int hcount, int vcount, int gcount, int UPEm, guint16 *glyphArray, int nGlyphs) { TTFullSimpleGlyphMetrics *res; guint16 glyphID; int i; if (!nGlyphs || !glyphArray) return NULL; /* invalid parameters */ //printf("ReadGlyphMetrics: hmtx: %x, vmtx: %x, hcount: %d, vcount: %d\n", hmtx, vmtx, hcount, vcount); res = calloc(nGlyphs, sizeof(TTFullSimpleGlyphMetrics)); assert(res != 0); for (i = 0; i < nGlyphs; i++) { glyphID = glyphArray[i]; res[i].aw = res[i].ah = res[i].lsb = res[i].tsb = 0; /* horizontal metrics */ if (hmtx != 0 && hcount > 0) { if (glyphID < hcount) { res[i].aw = XUnits(UPEm, GetUInt16(hmtx, 4 * glyphID, 1)); res[i].lsb = XUnits(UPEm, GetInt16(hmtx, 4 * glyphID + 2, 1)); } else { res[i].aw = XUnits(UPEm, GetUInt16(hmtx, 4 * (hcount - 1), 1)); if( glyphID-hcount < gcount ) { res[i].lsb = XUnits(UPEm, GetInt16(hmtx + hcount * 4, (glyphID - hcount) * 2, 1)); } else { /* font is broken */ res[i].lsb = XUnits(UPEm, GetInt16(hmtx, 4*(hcount-1) + 2, 1)); } } } /* vertical metrics */ if (vmtx != 0 && vcount > 0) { if (glyphID < vcount) { res[i].ah = XUnits(UPEm, GetUInt16(vmtx, 4 * glyphID, 1)); res[i].tsb = XUnits(UPEm, GetInt16(vmtx, 4 * glyphID + 2, 1)); } else { res[i].ah = XUnits(UPEm, GetUInt16(vmtx, 4 * (vcount - 1), 1)); if( glyphID-hcount < gcount ) { res[i].tsb = XUnits(UPEm, GetInt16(vmtx + vcount * 4, (glyphID - vcount) * 2, 1)); } else { /* font is broken */ res[i].tsb = XUnits(UPEm, GetInt16(vmtx, 4*(vcount-1) + 2, 1)); } } } } return res; } void ReadSingleGlyphMetrics(guint8 *hmtx, guint8 *vmtx, int hcount, int vcount, int gcount, int UPEm, guint16 glyphID, TTFullSimpleGlyphMetrics *metrics) { memset(metrics, 0, sizeof(TTFullSimpleGlyphMetrics)); /* horizontal metrics */ if (hmtx != 0 && hcount > 0) { if (glyphID < hcount) { metrics->aw = XUnits(UPEm, GetUInt16(hmtx, 4 * glyphID, 1)); metrics->lsb = XUnits(UPEm, GetInt16(hmtx, 4 * glyphID + 2, 1)); } else { metrics->aw = XUnits(UPEm, GetUInt16(hmtx, 4 * (hcount - 1), 1)); if( glyphID-hcount < gcount ) { metrics->lsb = XUnits(UPEm, GetInt16(hmtx + hcount * 4, (glyphID - hcount) * 2, 1)); } else { /* font is broken */ metrics->lsb = XUnits(UPEm, GetInt16(hmtx, 4*(hcount-1) + 2, 1)); } } } /* vertical metrics */ if (vmtx != 0 && vcount > 0) { if (glyphID < vcount) { metrics->ah = XUnits(UPEm, GetUInt16(vmtx, 4 * glyphID, 1)); metrics->tsb = XUnits(UPEm, GetInt16(vmtx, 4 * glyphID + 2, 1)); } else { metrics->ah = XUnits(UPEm, GetUInt16(vmtx, 4 * (vcount - 1), 1)); if( glyphID-hcount < gcount ) { metrics->tsb = XUnits(UPEm, GetInt16(vmtx + vcount * 4, (glyphID - vcount) * 2, 1)); } else { /* font is broken */ metrics->tsb = XUnits(UPEm, GetInt16(vmtx, 4*(vcount-1) + 2, 1)); } } } } guint32 GetKernSubtableLength(guint8 *kern) { guint32 r = 0; if (kern != NULL) { r = GetUInt16(kern, 2, 1); } return r; } void KernGlyphPair(int kerntype, guint32 nkern, guint8 **kern, int unitsPerEm, int wmode, guint32 a, guint32 b, int *x, int *y) { if (x == NULL || y == NULL) return; *x = *y = 0; if (nkern == 0 || kern == NULL) return; switch (kerntype) { case KT_APPLE_NEW: KernGlyphPairPrim1(nkern, kern, unitsPerEm, wmode, a, b, x, y); return; case KT_MICROSOFT: KernGlyphPairPrim2(nkern, kern, unitsPerEm, wmode, a, b, x, y); return; } } #ifdef TEST1 /* This example creates a subset of a TrueType font with two encoded characters */ int main(int ac, char **av) { TrueTypeFont *fnt; int r; /* Array of Unicode source characters */ guint16 chars[2]; /* Encoding vector maps character encoding to the ordinal number * of the glyph in the output file */ guint8 encoding[2]; /* This array is for glyph IDs that source characters map to */ guint16 g[2]; if (ac < 2) return 0; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } /* We want to create the output file that only contains two Unicode characters: * L'a' and L'A' */ chars[0] = L'a'; chars[1] = L'A'; /* Figure out what glyphs do these characters map in our font */ MapString(fnt, chars, 2, g); /* Encode the characters. Value of encoding[i] is the number 0..255 which maps to glyph i of the * newly generated font */ encoding[0] = chars[0]; encoding[1] = chars[1]; /* Generate a subset */ CreateT3FromTTGlyphs(fnt, stdout, 0, g, encoding, 2, 0); /* Now call the dtor for the font */ CloseTTFont(fnt); return 0; } #endif #ifdef TEST2 /* This example extracts first 224 glyphs from a TT fonts and encodes them starting at 32 */ int main(int ac, char **av) { TrueTypeFont *fnt; int i, r; /* Array of Unicode source characters */ guint16 glyphs[224]; /* Encoding vector maps character encoding to the ordinal number * of the glyph in the output file */ guint8 encoding[224]; for (i=0; i<224; i++) { glyphs[i] = i; encoding[i] = 32 + i; } if (ac < 2) return 0; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } /* Encode the characters. Value of encoding[i] is the number 0..255 which maps to glyph i of the * newly generated font */ /* Generate a subset */ CreateT3FromTTGlyphs(fnt, stdout, 0, glyphs, encoding, 224, 0); /* Now call the dtor for the font */ CloseTTFont(fnt); return 0; } #endif #ifdef TEST3 /* Glyph metrics example */ int main(int ac, char **av) { TrueTypeFont *fnt; int i, r; guint16 glyphs[224]; TTSimpleGlyphMetrics *m; for (i=0; i<224; i++) { glyphs[i] = i; } if (ac < 2) return 0; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } if ((m = GetTTSimpleGlyphMetrics(fnt, glyphs, 224, 0)) == 0) { printf("Requested metrics is not available\n"); } else { for (i=0; i<224; i++) { printf("%d. advWid: %5d, LSBear: %5d\n", i, m[i].adv, m[i].sb); } } /* Now call the dtor for the font */ free(m); CloseTTFont(fnt); return 0; } #endif #ifdef TEST4 int main(int ac, char **av) { TrueTypeFont *fnt; TTGlobalFontInfo info; int i, r; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } printf("Font file: %s\n", av[1]); #ifdef PRINT_KERN switch (fnt->kerntype) { case KT_MICROSOFT: printf("\tkern: MICROSOFT, ntables: %d.", fnt->nkern); if (fnt->nkern) { printf(" ["); for (i=0; inkern; i++) { printf("%04X ", GetUInt16(fnt->kerntables[i], 4, 1)); } printf("]"); } printf("\n"); break; case KT_APPLE_NEW: printf("\tkern: APPLE_NEW, ntables: %d.", fnt->nkern); if (fnt->nkern) { printf(" ["); for (i=0; inkern; i++) { printf("%04X ", GetUInt16(fnt->kerntables[i], 4, 1)); } printf("]"); } printf("\n"); break; case KT_NONE: printf("\tkern: none.\n"); break; default: printf("\tkern: unrecoginzed.\n"); break; } printf("\n"); #endif GetTTGlobalFontInfo(fnt, &info); printf("\tfamily name: `%s`\n", info.family); printf("\tsubfamily name: `%s`\n", info.subfamily); printf("\tpostscript name: `%s`\n", info.psname); printf("\tweight: %d\n", info.weight); printf("\twidth: %d\n", info.width); printf("\tpitch: %d\n", info.pitch); printf("\titalic angle: %d\n", info.italicAngle); printf("\tbouding box: [%d %d %d %d]\n", info.xMin, info.yMin, info.xMax, info.yMax); printf("\tascender: %d\n", info.ascender); printf("\tdescender: %d\n", info.descender); printf("\tlinegap: %d\n", info.linegap); printf("\tvascent: %d\n", info.vascent); printf("\tvdescent: %d\n", info.vdescent); printf("\ttypoAscender: %d\n", info.typoAscender); printf("\ttypoDescender: %d\n", info.typoDescender); printf("\ttypoLineGap: %d\n", info.typoLineGap); printf("\twinAscent: %d\n", info.winAscent); printf("\twinDescent: %d\n", info.winDescent); printf("\tUnicode ranges:\n"); for (i = 0; i < 32; i++) { if ((info.ur1 >> i) & 1) { printf("\t\t\t%s\n", UnicodeRangeName(i)); } } for (i = 0; i < 32; i++) { if ((info.ur2 >> i) & 1) { printf("\t\t\t%s\n", UnicodeRangeName(i+32)); } } for (i = 0; i < 32; i++) { if ((info.ur3 >> i) & 1) { printf("\t\t\t%s\n", UnicodeRangeName(i+64)); } } for (i = 0; i < 32; i++) { if ((info.ur4 >> i) & 1) { printf("\t\t\t%s\n", UnicodeRangeName(i+96)); } } CloseTTFont(fnt); return 0; } #endif #ifdef TEST5 /* Kerning example */ int main(int ac, char **av) { TrueTypeFont *fnt; guint16 g[224]; KernData d[223]; int r, i, k = 0; g[k++] = 57; g[k++] = 36; g[k++] = 57; g[k++] = 98; g[k++] = 11; g[k++] = 144; g[k++] = 41; g[k++] = 171; g[k++] = 51; g[k++] = 15; if (ac < 2) return 0; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } KernGlyphs(fnt, g, k, 0, d); for (i = 0; i < k-1; i++) { printf("%3d %3d: [%3d %3d]\n", g[i], g[i+1], d[i].x, d[i].y); } for (i=0; ikerntype, fnt->nkern, fnt->kerntables, fnt->unitsPerEm, 0, g[i], g[i+1], &x, &y); printf("KernGlyphPair (wmode: 0) : %3d %3d: [%3d %3d]\n", g[i], g[i+1], x, y); KernGlyphPair(fnt->kerntype, fnt->nkern, fnt->kerntables, fnt->unitsPerEm, 1, g[i], g[i+1], &x, &y); printf("KernGlyphPair (wmode: 1) : %3d %3d: [%3d %3d]\n", g[i], g[i+1], x, y); } CloseTTFont(fnt); return 0; } #endif #ifdef TEST6 /* This example extracts a single glyph from a font */ int main(int ac, char **av) { TrueTypeFont *fnt; int r, i; guint16 glyphs[256]; guint8 encoding[256]; for (i=0; i<256; i++) { glyphs[i] = 512 + i; encoding[i] = i; } #if 0 i=0; glyphs[i++] = 2001; glyphs[i++] = 2002; glyphs[i++] = 2003; glyphs[i++] = 2004; glyphs[i++] = 2005; glyphs[i++] = 2006; glyphs[i++] = 2007; glyphs[i++] = 2008; glyphs[i++] = 2009; glyphs[i++] = 2010; glyphs[i++] = 2011; glyphs[i++] = 2012; glyphs[i++] = 2013; glyphs[i++] = 2014; glyphs[i++] = 2015; glyphs[i++] = 2016; glyphs[i++] = 2017; glyphs[i++] = 2018; glyphs[i++] = 2019; glyphs[i++] = 2020; r = 97; i = 0; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; encoding[i++] = r++; #endif if (ac < 2) return 0; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } /* Generate a subset */ CreateT3FromTTGlyphs(fnt, stdout, 0, glyphs, encoding, 256, 0); fprintf(stderr, "UnitsPerEm: %d.\n", fnt->unitsPerEm); /* Now call the dtor for the font */ CloseTTFont(fnt); return 0; } #endif #ifdef TEST7 /* NameRecord extraction example */ int main(int ac, char **av) { TrueTypeFont *fnt; int r, i, j, n; NameRecord *nr; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } if ((n = GetTTNameRecords(fnt, &nr)) == 0) { fprintf(stderr, "No name records in the font.\n"); return 0; } printf("Number of name records: %d.\n", n); for (i = 0; i < n; i++) { printf("%d %d %04X %d [", nr[i].platformID, nr[i].encodingID, nr[i].languageID, nr[i].nameID); for (j=0; j TrueType subsetting */ int main(int ac, char **av) { TrueTypeFont *fnt; guint16 glyphArray[] = { 0, 98, 99, 22, 24, 25, 26, 27, 28, 29, 30, 31, 1270, 1289, 34}; guint8 encoding[] = {32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46}; int r; if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } CreateTTFromTTGlyphs(fnt, "subfont.ttf", glyphArray, encoding, 15, 0, 0, TTCF_AutoName | TTCF_IncludeOS2); CloseTTFont(fnt); return 0; } #endif #ifdef TEST9 /* TrueType -> Type42 subsetting */ int main(int ac, char **av) { TrueTypeFont *fnt; /* guint16 glyphArray[] = { 0, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34}; guint8 encoding[] = {32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46}; guint16 glyphArray[] = { 0, 6711, 6724, 11133, 11144, 14360, 26, 27, 28, 29, 30, 31, 1270, 1289, 34}; guint8 encoding[] = {32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46}; */ guint16 glyphArray[1000]; guint8 encoding[1000]; int r, i; for (i=0;i<1000;i++) { glyphArray[i]=2000 + i; encoding[i] =i; } if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } CreateT42FromTTGlyphs(fnt, stdout, "testfont", glyphArray, encoding, 1000); CloseTTFont(fnt); return 0; } #endif #ifdef TEST10 /* Component glyph test */ int main(int ac, char **av) { TrueTypeFont *fnt; int r, i; list glyphlist = listNewEmpty(); if ((r = OpenTTFont(av[1], 0, &fnt)) != SF_OK) { fprintf(stderr, "Error %d opening font file: `%s`.\n", r, av[1]); return 0; } for (i = 0; i < fnt->nglyphs; i++) { r = GetTTGlyphComponents(fnt, i, glyphlist); if (r > 1) { printf("%d -> ", i); listToFirst(glyphlist); do { printf("%d ", (int) listCurrent(glyphlist)); } while (listNext(glyphlist)); printf("\n"); } else { printf("%d: single glyph.\n", i); } listClear(glyphlist); } CloseTTFont(fnt); listDispose(glyphlist); return 0; } #endif xournal-0.4.8/src/ttsubset/ttcr.h0000664000175000017500000002263711773660334016462 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)ttcr.h 1.6 03/01/08 SMI */ /* * @file ttcr.h * @brief TrueType font creator * @author Alexander Gelfenbain * @version 1.1 * */ #ifndef __TTCR_H #define __TTCR_H #include "sft.h" #include "list.h" #ifdef __cplusplus extern "C"{ #endif typedef struct _TrueTypeCreator TrueTypeCreator; /* TrueType data types */ typedef struct { guint16 aw; gint16 lsb; } longHorMetrics; /* A generic base class for all TrueType tables */ typedef struct { guint32 tag; /* table tag */ guint8 *rawdata; /* raw data allocated by GetRawData_*() */ void *data; /* table specific data */ } TrueTypeTable; /** Error codes for most functions */ enum TTCRErrCodes { TTCR_OK = 0, /**< no error */ TTCR_ZEROGLYPHS = 1, /**< At least one glyph should be defined */ TTCR_UNKNOWN = 2, /**< Unknown TrueType table */ TTCR_GLYPHSEQ = 3, /**< Glyph IDs are not sequential in the glyf table */ TTCR_NONAMES = 4, /**< 'name' table does not contain any names */ TTCR_NAMETOOLONG = 5, /**< 'name' table is too long (string data > 64K) */ TTCR_POSTFORMAT = 6 /**< unsupported format of a 'post' table */ }; /* ============================================================================ * * TrueTypeCreator methods * * ============================================================================ */ /* * TrueTypeCreator constructor. * Allocates all internal structures. */ void TrueTypeCreatorNewEmpty(guint32 tag, TrueTypeCreator **_this); /* * TrueTypeCreator destructor. It calls destructors for all TrueTypeTables added to it. */ void TrueTypeCreatorDispose(TrueTypeCreator *_this); /* * Adds a TrueType table to the TrueType creator. * SF_TABLEFORMAT value. * @return value of SFErrCodes type */ int AddTable(TrueTypeCreator *_this, TrueTypeTable *table); /* * Removes a TrueType table from the TrueType creator if it is stored there. * It also calls a TrueTypeTable destructor. * Note: all generic tables (with tag 0) will be removed if this function is * called with the second argument of 0. * @return value of SFErrCodes type */ void RemoveTable(TrueTypeCreator *_this, guint32 tag); /* * Writes a TrueType font generated by the TrueTypeCreator to a segment of * memory that this method allocates. When it is not needed anymore the caller * is supposed to call free() on it. * @return value of SFErrCodes type */ int StreamToMemory(TrueTypeCreator *_this, guint8 **ptr, guint32 *length); /* * Writes a TrueType font generated by the TrueTypeCreator to a file * @return value of SFErrCodes type */ int StreamToFile(TrueTypeCreator *_this, const char* fname); /* ============================================================================ * * TrueTypeTable methods * * ============================================================================ */ /* * Destructor for the TrueTypeTable object. */ void TrueTypeTableDispose(TrueTypeTable *); /* * This function converts the data of a TrueType table to a raw array of bytes. * It may allocates the memory for it and returns the size of the raw data in bytes. * If memory is allocated it does not need to be freed by the caller of this function, * since the pointer to it is stored in the TrueTypeTable and it is freed by the destructor * @return TTCRErrCode * */ int GetRawData(TrueTypeTable *, guint8 **ptr, guint32 *len, guint32 *tag); /* * * Creates a new raw TrueType table. The difference between this constructor and * TrueTypeTableNew_tag constructors is that the latter create structured tables * while this constructor just copies memory pointed to by ptr to its buffer * and stores its length. This constructor is suitable for data that is not * supposed to be processed in any way, just written to the resulting TTF file. */ TrueTypeTable *TrueTypeTableNew(guint32 tag, guint32 nbytes, guint8 *ptr); /* * Creates a new 'head' table for a TrueType font. * Allocates memory for it. Since a lot of values in the 'head' table depend on the * rest of the tables in the TrueType font this table should be the last one added * to the font. */ TrueTypeTable *TrueTypeTableNew_head(guint32 fontRevision, guint16 flags, guint16 unitsPerEm, guint8 *created, guint16 macStyle, guint16 lowestRecPPEM, gint16 fontDirectionHint); /* * Creates a new 'hhea' table for a TrueType font. * Allocates memory for it and stores it in the hhea pointer. */ TrueTypeTable *TrueTypeTableNew_hhea(gint16 ascender, gint16 descender, gint16 linegap, gint16 caretSlopeRise, gint16 caretSlopeRun); /* * Creates a new empty 'loca' table for a TrueType font. * * INTERNAL: gets called only from ProcessTables(); */ TrueTypeTable *TrueTypeTableNew_loca(void); /* * Creates a new 'maxp' table based on an existing maxp table. * If maxp is 0, a new empty maxp table is created * size specifies the size of existing maxp table for * error-checking purposes */ TrueTypeTable *TrueTypeTableNew_maxp(guint8 *maxp, int size); /* * Creates a new empty 'glyf' table. */ TrueTypeTable *TrueTypeTableNew_glyf(void); /* * Creates a new empty 'cmap' table. */ TrueTypeTable *TrueTypeTableNew_cmap(void); /* * Creates a new 'name' table. If n != 0 the table gets populated by * the Name Records stored in the nr array. This function allocates * memory for its own copy of NameRecords, so nr array has to * be explicitly deallocated when it is not needed. */ TrueTypeTable *TrueTypeTableNew_name(int n, NameRecord *nr); /* * Creates a new 'post' table of one of the supported formats */ TrueTypeTable *TrueTypeTableNew_post(guint32 format, guint32 italicAngle, gint16 underlinePosition, gint16 underlineThickness, guint32 isFixedPitch); /*------------------------------------------------------------------------------ * * Table manipulation functions * *------------------------------------------------------------------------------*/ /* * Add a character/glyph pair to a cmap table */ void cmapAdd(TrueTypeTable *, guint32 id, guint32 c, guint32 g); /* * Add a glyph to a glyf table. * * @return glyphID of the glyph in the new font * * NOTE: This function does not duplicate GlyphData, so memory will be * deallocated in the table destructor */ guint32 glyfAdd(TrueTypeTable *, GlyphData *glyphdata, TrueTypeFont *fnt); /* * Query the number of glyphs currently stored in the 'glyf' table * */ guint32 glyfCount(const TrueTypeTable *); /* * Add a Name Record to a name table. * NOTE: This function duplicates NameRecord, so the argument * has to be deallocated by the caller (unlike glyfAdd) */ void nameAdd(TrueTypeTable *, NameRecord *nr); /* * Private Data Types */ struct _TrueTypeCreator { guint32 tag; /**< TrueType file tag */ list tables; /**< List of table tags and pointers */ }; #ifdef __cplusplus } #endif #endif /* __TTCR_H */ xournal-0.4.8/src/ttsubset/sft.h0000664000175000017500000007772411773660334016311 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)sft.h 1.17 03/01/08 SMI */ /* * @file sft.h * @brief Sun Font Tools * @author Alexander Gelfenbain * @version 1.0 */ /* * If NO_MAPPERS is defined, MapChar() and MapString() and consequently GetTTSimpleCharMetrics() * don't get compiled in. This is done to avoid including a large chunk of code (TranslateXY() from * xlat.c in the projects that don't require it. * * If NO_TYPE3 is defined CreateT3FromTTGlyphs() does not get compiled in. * If NO_TYPE42 is defined Type42-related code is excluded * If NO_TTCR is defined TrueType creation related code is excluded\ * If NO_LIST is defined list.h and piblic functions that use it don't get compiled * If USE_GSUB is *not* defined Philipp's GSUB code does not get included * * When STSF is defined several data types are defined elsewhere */ /* * Generated fonts contain an XUID entry in the form of: * * 103 0 T C1 N C2 C3 * * 103 - Sun's Adobe assigned XUID number. Contact person: Alexander Gelfenbain * * T - font type. 0: Type 3, 1: Type 42 * C1 - CRC-32 of the entire source TrueType font * N - number of glyphs in the subset * C2 - CRC-32 of the array of glyph IDs used to generate the subset * C3 - CRC-32 of the array of encoding numbers used to generate the subset * */ #ifndef __SUBFONT_H #define __SUBFONT_H #include #ifdef HAVE_UNISTD_H #include #endif #include #ifndef NO_LIST #include "list.h" #endif #ifdef STSF #include #endif #ifdef __cplusplus extern "C" { #endif #if 0 /* Use glib's G_BYTE_ORDER == G_BIG_ENDIAN instead */ #ifdef __sparc #ifndef G_BIG_ENDIAN #define G_BIG_ENDIAN #endif #endif #if defined(__powerpc__) || defined(POWERPC) #ifndef G_BIG_ENDIAN #define G_BIG_ENDIAN #endif #endif #ifdef __i386 #ifndef G_LITTLE_ENDIAN #define G_LITTLE_ENDIAN #endif #endif #ifdef __mips #ifndef G_BIG_ENDIAN #define G_BIG_ENDIAN #endif #endif #ifdef __BIG_ENDIAN__ #define G_BIG_ENDIAN #endif #ifdef __LITTLE_ENDIAN__ #define G_LITTLE_ENDIAN #endif #if !defined(G_BIG_ENDIAN) && !defined(G_LITTLE_ENDIAN) #error "Either G_BIG_ENDIAN or G_LITTLE_ENDIAN should be defined." #endif #if defined(G_BIG_ENDIAN) && defined(G_LITTLE_ENDIAN) #error "This is bizarre" #endif #endif #if 0 /* These should be defined in the makefile */ #define DEBUG /* Generate debugging output */ #define DEBUG2 /* More detailed debugging output */ #define DEBUG3 /* Dump of TrueType outlines */ #endif /*@{*/ #define false 0 /**< standard false value */ #define true 1 /**< standard true value */ /*@}*/ #ifndef STSF /* glib already deals with different compilers */ #include /*@{*/ typedef gint16 F2Dot14; /**< fixed: 2.14 */ typedef gint32 F16Dot16; /**< fixed: 16.16 */ /*@}*/ typedef struct { guint16 s; guint16 d; } uint16pair; #endif /** Return value of OpenTTFont() and CreateT3FromTTGlyphs() */ enum SFErrCodes { SF_OK, /**< no error */ SF_BADFILE, /**< file not found */ SF_FILEIO, /**< file I/O error */ SF_MEMORY, /**< memory allocation error */ SF_GLYPHNUM, /**< incorrect number of glyphs */ SF_BADARG, /**< incorrect arguments */ SF_TTFORMAT, /**< incorrect TrueType font format */ SF_TABLEFORMAT, /**< incorrect format of a TrueType table */ SF_FONTNO /**< incorrect logical font number of a TTC font */ }; #ifndef FW_THIN /* WIN32 compilation would conflict */ /** Value of the weight member of the TTGlobalFontInfo struct */ enum WeightClass { FW_THIN = 100, /**< Thin */ FW_EXTRALIGHT = 200, /**< Extra-light (Ultra-light) */ FW_LIGHT = 300, /**< Light */ FW_NORMAL = 400, /**< Normal (Regular) */ FW_MEDIUM = 500, /**< Medium */ FW_SEMIBOLD = 600, /**< Semi-bold (Demi-bold) */ FW_BOLD = 700, /**< Bold */ FW_EXTRABOLD = 800, /**< Extra-bold (Ultra-bold) */ FW_BLACK = 900 /**< Black (Heavy) */ }; /** Value of the width member of the TTGlobalFontInfo struct */ enum WidthClass { FWIDTH_ULTRA_CONDENSED = 1, /**< 50% of normal */ FWIDTH_EXTRA_CONDENSED = 2, /**< 62.5% of normal */ FWIDTH_CONDENSED = 3, /**< 75% of normal */ FWIDTH_SEMI_CONDENSED = 4, /**< 87.5% of normal */ FWIDTH_NORMAL = 5, /**< Medium, 100% */ FWIDTH_SEMI_EXPANDED = 6, /**< 112.5% of normal */ FWIDTH_EXPANDED = 7, /**< 125% of normal */ FWIDTH_EXTRA_EXPANDED = 8, /**< 150% of normal */ FWIDTH_ULTRA_EXPANDED = 9 /**< 200% of normal */ }; #endif /* FW_THIN */ /** Type of the 'kern' table, stored in _TrueTypeFont::kerntype */ enum KernType { KT_NONE = 0, /**< no kern table */ KT_APPLE_NEW = 1, /**< new Apple kern table */ KT_MICROSOFT = 2 /**< Microsoft table */ }; /* Composite glyph flags definition */ enum CompositeFlags { ARG_1_AND_2_ARE_WORDS = 1, ARGS_ARE_XY_VALUES = 1<<1, ROUND_XY_TO_GRID = 1<<2, WE_HAVE_A_SCALE = 1<<3, MORE_COMPONENTS = 1<<5, WE_HAVE_AN_X_AND_Y_SCALE = 1<<6, WE_HAVE_A_TWO_BY_TWO = 1<<7, WE_HAVE_INSTRUCTIONS = 1<<8, USE_MY_METRICS = 1<<9, OVERLAP_COMPOUND = 1<<10 }; #ifndef NO_TTCR /** Flags for TrueType generation */ enum TTCreationFlags { TTCF_AutoName = 1, /**< Automatically generate a compact 'name' table. If this flag is not set, name table is generated either from an array of NameRecord structs passed as arguments or if the array is NULL, 'name' table of the generated TrueType file will be a copy of the name table of the original file. If this flag is set the array of NameRecord structs is ignored and a very compact 'name' table is automatically generated. */ TTCF_IncludeOS2 = 2 /** If this flag is set OS/2 table from the original font will be copied to the subset */ }; #endif /** Structure used by GetTTGlyphMetrics() */ /*- In horisontal writing mode right sidebearing is calculated using this formula *- rsb = aw - (lsb + xMax - xMin) -*/ typedef struct { gint16 xMin; gint16 yMin; gint16 xMax; gint16 yMax; guint16 aw; /*- Advance Width (horisontal writing mode) */ gint16 lsb; /*- Left sidebearing (horisontal writing mode) */ guint16 ah; /*- advance height (vertical writing mode) */ gint16 tsb; /*- top sidebearing (vertical writing mode) */ } TTGlyphMetrics; /** Structure used by GetTTSimpleGlyphMetrics() and GetTTSimpleCharMetrics() functions */ typedef struct { guint16 adv; /**< advance width or height */ gint16 sb; /**< left or top sidebearing */ } TTSimpleGlyphMetrics; /** Structure returned by ReadGlyphMetrics() */ typedef struct { guint16 aw, ah; gint16 lsb, tsb; } TTFullSimpleGlyphMetrics; /** Structure used by the TrueType Creator and GetRawGlyphData() */ typedef struct { guint32 glyphID; /**< glyph ID */ guint16 nbytes; /**< number of bytes in glyph data */ guint8 *ptr; /**< pointer to glyph data */ guint16 aw; /**< advance width */ gint16 lsb; /**< left sidebearing */ guint16 compflag; /**< 0- if non-composite, 1- otherwise */ guint16 npoints; /**< number of points */ guint16 ncontours; /**< number of contours */ /* */ guint32 newID; /**< used internally by the TTCR */ } GlyphData; #ifndef STSF /* STSF defines NameRecord and FUnitBBox structures in its own include file sttypes.h */ typedef struct { gint16 xMin; gint16 yMin; gint16 xMax; gint16 yMax; } FUnitBBox; /** Structure used by the TrueType Creator and CreateTTFromTTGlyphs() */ typedef struct { guint16 platformID; /**< Platform ID */ guint16 encodingID; /**< Platform-specific encoding ID */ guint16 languageID; /**< Language ID */ guint16 nameID; /**< Name ID */ guint16 slen; /**< String length in bytes */ guint8 *sptr; /**< Pointer to string data (not zero-terminated!) */ } NameRecord; #endif /** Return value of GetTTGlobalFontInfo() */ typedef struct { char *family; /**< family name */ guint16 *ufamily; /**< family name UCS2 */ char *subfamily; /**< subfamily name */ char *psname; /**< PostScript name */ int weight; /**< value of WeightClass or 0 if can't be determined */ int width; /**< value of WidthClass or 0 if can't be determined */ int pitch; /**< 0: proportianal font, otherwise: monospaced */ int italicAngle; /**< in counter-clockwise degrees * 65536 */ guint16 fsSelection; /**< fsSelection field of OS/2 table */ int xMin; /**< global bounding box: xMin */ int yMin; /**< global bounding box: yMin */ int xMax; /**< global bounding box: xMax */ int yMax; /**< global bounding box: yMax */ int ascender; /**< typographic ascent. */ int descender; /**< typographic descent. */ int linegap; /**< typographic line gap.\ Negative values are treated as zero in Win 3.1, System 6 and System 7. */ int vascent; /**< typographic ascent for vertical writing mode */ int vdescent; /**< typographic descent for vertical writing mode */ int typoAscender; /**< OS/2 portable typographic ascender */ int typoDescender; /**< OS/2 portable typographic descender */ int typoLineGap; /**< OS/2 portable typographc line gap */ int winAscent; /**< ascender metric for Windows */ int winDescent; /**< descender metric for Windows */ int symbolEncoded; /**< 1: MS symbol encoded 0: not symbol encoded */ int rangeFlag; /**< if set to 1 Unicode Range flags are applicable */ guint32 ur1; /**< bits 0 - 31 of Unicode Range flags */ guint32 ur2; /**< bits 32 - 63 of Unicode Range flags */ guint32 ur3; /**< bits 64 - 95 of Unicode Range flags */ guint32 ur4; /**< bits 96 - 127 of Unicode Range flags */ guint8 panose[10]; /**< PANOSE classification number */ guint16 typeFlags; /**< type flags (copyright information) */ } TTGlobalFontInfo; /** Structure used by KernGlyphs() */ typedef struct { int x; /**< positive: right, negative: left */ int y; /**< positive: up, negative: down */ } KernData; /** ControlPoint structure used by GetTTGlyphPoints() */ typedef struct { guint32 flags; /**< 00000000 00000000 e0000000 bbbbbbbb */ /**< b - guint8 flags from the glyf array */ /**< e == 0 - regular point */ /**< e == 1 - end contour */ gint16 x; /**< X coordinate in EmSquare units */ gint16 y; /**< Y coordinate in EmSquare units */ } ControlPoint; typedef struct _TrueTypeFont TrueTypeFont; /* * @defgroup sft Sun Font Tools Exported Functions */ /* * Get the number of fonts contained in a TrueType collection * @param fname - file name * @return number of fonts or zero, if file is not a TTC file. * @ingroup sft */ int CountTTCFonts(const char* fname); /* * TrueTypeFont constructor. * Reads the font file and allocates the memory for the structure. * @param facenum - logical font number within a TTC file. This value is ignored * for TrueType fonts * @return value of SFErrCodes enum * @ingroup sft */ int OpenTTFont(const char *fname, guint32 facenum, TrueTypeFont**); /* * TrueTypeFont destructor. Deallocates the memory. * @ingroup sft */ void CloseTTFont(TrueTypeFont *); /* * Extracts TrueType control points, and stores them in an allocated array pointed to * by *pointArray. This function returns the number of extracted points. * * @param ttf pointer to the TrueTypeFont structure * @param glyphID Glyph ID * @param pointArray Return value - address of the pointer to the first element of the array * of points allocated by the function * @return Returns the number of points in *pointArray or -1 if glyphID is * invalid. * @ingroup sft * */ int GetTTGlyphPoints(TrueTypeFont *ttf, guint32 glyphID, ControlPoint **pointArray); /* * Extracts bounding boxes in normalized FUnits (1000/em) for all glyphs in the * font and allocates an array of FUnitBBox structures. There are ttf->nglyphs * elements in the array. * * @param ttf pointer to the TrueTypeFont structure * * @return an array of FUnitBBox structures with values normalized to 1000 UPEm * * @ingroup sft */ FUnitBBox *GetTTGlyphBoundingBoxes(TrueTypeFont *ttf); /* * Extracts raw glyph data from the 'glyf' table and returns it in an allocated * GlyphData structure. * * @param ttf pointer to the TrueTypeFont structure * @param glyphID Glyph ID * * @return pointer to an allocated GlyphData structure or NULL if * glyphID is not present in the font * @ingroup sft * */ GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, guint32 glyphID); #ifndef NO_LIST /* * For a specified glyph adds all component glyphs IDs to the list and * return their number. If the glyph is a single glyph it has one component * glyph (which is added to the list) and the function returns 1. * For a composite glyphs it returns the number of component glyphs * and adds all of them to the list. * * @param ttf pointer to the TrueTypeFont structure * @param glyphID Glyph ID * @param glyphlist list of glyphs * * @return number of component glyphs * @ingroup sft * */ int GetTTGlyphComponents(TrueTypeFont *ttf, guint32 glyphID, list glyphlist); #endif /* * Extracts all Name Records from the font and stores them in an allocated * array of NameRecord structs * * @param ttf pointer to the TrueTypeFont struct * @param nr pointer to the array of NameRecord structs * * @return number of NameRecord structs * @ingroup sft */ int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr); /* * Deallocates previously allocated array of NameRecords. * * @param nr array of NameRecord structs * @param n number of elements in the array * * @ingroup sft */ void DisposeNameRecords(NameRecord* nr, int n); #ifndef NO_TYPE3 /* * Generates a new PostScript Type 3 font and dumps it to outf file. * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. * @param ttf pointer to the TrueTypeFont structure * @param outf the resulting font is written to this stream * @param fname font name for the new font. If it is NULL the PostScript name of the * original font will be used * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf * @param encoding array of encoding values. encoding[i] specifies the position of the glyph * glyphArray[i] in the encoding vector of the resulting Type3 font * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding * @param wmode writing mode for the output file: 0 - horizontal, 1 - vertical * @return return the value of SFErrCodes enum * @see SFErrCodes * @ingroup sft * */ int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, guint16 *glyphArray, guint8 *encoding, int nGlyphs, int wmode); #endif #ifndef NO_TTCR /* * Generates a new TrueType font and dumps it to outf file. * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. * @param ttf pointer to the TrueTypeFont structure * @param fname file name for the output TrueType font file * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first * element of this array has to be glyph 0 (default glyph) * @param encoding array of encoding values. encoding[i] specifies character code for * the glyphID glyphArray[i]. Character code 0 usually points to a default * glyph (glyphID 0) * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding * @param nNameRecs number of NameRecords for the font, if 0 the name table from the * original font will be used * @param nr array of NameRecords * @param flags or'ed TTCreationFlags * @return return the value of SFErrCodes enum * @see SFErrCodes * @ingroup sft * */ int CreateTTFromTTGlyphs(TrueTypeFont *ttf, const char *fname, guint16 *glyphArray, guint8 *encoding, int nGlyphs, int nNameRecs, NameRecord *nr, guint32 flags); // the same, but to memory (output to out_buf, out_len) int CreateTTFromTTGlyphs_tomemory (TrueTypeFont *ttf, guint8 **out_buf, guint32 *out_len, guint16 *glyphArray, guint8 *encoding, int nGlyphs, int nNameRecs, NameRecord *nr, guint32 flags); #endif #ifndef NO_TYPE42 /* * Generates a new PostScript Type42 font and dumps it to outf file. * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. * @param ttf pointer to the TrueTypeFont structure * @param outf output stream for a resulting font * @param psname PostScript name of the resulting font * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first * element of this array has to be glyph 0 (default glyph) * @param encoding array of encoding values. encoding[i] specifies character code for * the glyphID glyphArray[i]. Character code 0 usually points to a default * glyph (glyphID 0) * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding * @return SF_OK - no errors * SF_GLYPHNUM - too many glyphs (> 255) * SF_TTFORMAT - corrupted TrueType fonts * * @see SFErrCodes * @ingroup sft * */ int CreateT42FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *psname, guint16 *glyphArray, guint8 *encoding, int nGlyphs); #endif /* * Queries full glyph metrics for one glyph */ void GetTTGlyphMetrics(TrueTypeFont *ttf, guint32 glyphID, TTGlyphMetrics *metrics); /* * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. * * @param ttf pointer to the TrueTypeFont structure * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding * @param mode writing mode: 0 - horizontal, 1 - vertical * @ingroup sft * */ TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, guint16 *glyphArray, int nGlyphs, int mode); #ifndef NO_MAPPERS /* * Queries character metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. * This function behaves just like GetTTSimpleGlyphMetrics() but it takes a range of Unicode * characters instead of an array of glyphs. * * @param ttf pointer to the TrueTypeFont structure * @param firstChar Unicode value of the first character in the range * @param nChars number of Unicode characters in the range * @param mode writing mode: 0 - horizontal, 1 - vertical * * @see GetTTSimpleGlyphMetrics * @ingroup sft * */ TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont *ttf, guint16 firstChar, int nChars, int mode); /* * Maps a Unicode (UCS-2) string to a glyph array. Returns the number of glyphs in the array, * which for TrueType fonts is always the same as the number of input characters. * * @param ttf pointer to the TrueTypeFont structure * @param str pointer to a UCS-2 string * @param nchars number of characters in str * @param glyphArray pointer to the glyph array where glyph IDs are to be recorded. * * @return MapString() returns -1 if the TrueType font has no usable 'cmap' tables. * Otherwise it returns the number of characters processed: nChars * * glyphIDs of TrueType fonts are 2 guint8 positive numbers. glyphID of 0 denotes a missing * glyph and traditionally defaults to an empty square. * glyphArray should be at least sizeof(guint16) * nchars bytes long. If glyphArray is NULL * MapString() replaces the UCS-2 characters in str with glyphIDs. * @ingroup sft */ #ifdef USE_GSUB int MapString(TrueTypeFont *ttf, guint16 *str, int nchars, guint16 *glyphArray, int bvertical); #else int MapString(TrueTypeFont *ttf, guint16 *str, int nchars, guint16 *glyphArray); #endif /* * Maps a Unicode (UCS-2) character to a glyph ID and returns it. Missing glyph has * a glyphID of 0 so this function can be used to test if a character is encoded in the font. * * @param ttf pointer to the TrueTypeFont structure * @param ch Unicode (UCS-2) character * @return glyph ID, if the character is missing in the font, the return value is 0. * @ingroup sft */ #ifdef USE_GSUB guint16 MapChar(TrueTypeFont *ttf, guint16 ch, int bvertical); #else guint16 MapChar(TrueTypeFont *ttf, guint16 ch); #endif #endif /* * Returns global font information about the TrueType font. * @see TTGlobalFontInfo * * @param ttf pointer to a TrueTypeFont structure * @param info pointer to a TTGlobalFontInfo structure * @ingroup sft * */ void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info); /* * Returns kerning information for an array of glyphs. * Kerning is not cumulative. * kern[i] contains kerning information for a pair of glyphs at positions i and i+1 * * @param ttf pointer to a TrueTypeFont structure * @param glyphs array of source glyphs * @param nglyphs number of glyphs in the array * @param wmode writing mode: 0 - horizontal, 1 - vertical * @param kern array of KernData structures. It should contain nglyphs-1 elements * @see KernData * @ingroup sft * */ void KernGlyphs(TrueTypeFont *ttf, guint16 *glyphs, int nglyphs, int wmode, KernData *kern); /* * Returns nonzero if font is a symbol encoded font */ int CheckSymbolEncoding(TrueTypeFont* ttf); /* * Extracts a 'cmap' table from a font, allocates memory for it and returns a pointer to it. * DEPRECATED - use ExtractTable instead */ #if 0 guint8 *ExtractCmap(TrueTypeFont *ttf); #endif /* * Extracts a table from a font, allocates memort for it and returns a pointer to it. */ guint8 *ExtractTable(TrueTypeFont *ttf, guint32 tag); /* * Returns a pointer to the table but does not allocate memory for it. */ const guint8 *GetTable(TrueTypeFont *ttf, guint32 tag); /* * Functions that do not use TrueTypeFont structure * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* * Reads full (vertical and horisontal) glyph metrics for an array of glyphs from hmtx and vmtx tables * * @param hmtx TrueType hmtx table * @param vmtx TrueType vmtx table * @param hcount numberOfHMetrics value * @param vcount numOfLongVerMetrics value * @param gcount total number of glyphs in the font * @param UPEm units per Em value * @param glyphArray array of source glyph IDs * @param nGlyphs number of glyphs in the glyphArray array * * @return array of TTFullSimpleGlyphMetrics data structures * */ TTFullSimpleGlyphMetrics *ReadGlyphMetrics(guint8 *hmtx, guint8 *vmtx, int hcount, int vcount, int gcount, int UPEm, guint16 *glyphArray, int nGlyphs); void ReadSingleGlyphMetrics(guint8 *hmtx, guint8 *vmtx, int hcount, int vcount, int gcount, int UPEm, guint16 glyphID, TTFullSimpleGlyphMetrics *metrics); /* * Returns the length of the 'kern' subtable * * @param kern pointer to the 'kern' subtable * * @return number of bytes in it */ guint32 GetKernSubtableLength(guint8 *kern); /* * Kerns a pair of glyphs. * * @param kerntype type of the kern table * @param nkern number of kern subtables * @param kern array of pointers to kern subtables * @pram unitsPerEm units per Em value * @param wmode writing mode: 0 - horizontal, 1 - vertical * @param a ID of the first glyoh * @param b ID of the second glyoh * @param x X-axis kerning value is returned here * @param y Y-axis kerning value is returned here */ void KernGlyphPair(int kerntype, guint32 nkern, guint8 **kern, int unitsPerEm, int wmode, guint32 a, guint32 b, int *x, int *y); /*- private definitions */ /*FOLD00*/ struct _TrueTypeFont { guint32 tag; char *fname; off_t fsize; guint8 *ptr; char *psname; char *family; guint16 *ufamily; char *subfamily; guint32 ntables; guint32 tdoffset; /* offset to the table directory (!= 0 for TrueType collections) */ guint32 *goffsets; int nglyphs; int unitsPerEm; int numberOfHMetrics; int numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */ guint8 *cmap; int cmapType; guint16 (*mapper)(const guint8 *, guint16); /* character to glyphID translation function */ void **tables; /* array of pointers to tables */ guint32 *tlens; /* array of table lengths */ int kerntype; /* Defined in the KernType enum */ guint32 nkern; /* number of kern subtables */ guint8 **kerntables; /* array of pointers to kern subtables */ #ifdef USE_GSUB void *pGSubstitution; /* info provided by GSUB for UseGSUB() */ #endif }; #ifdef __cplusplus } #endif #endif /* __SUBFONT_H */ xournal-0.4.8/src/ttsubset/list.c0000664000175000017500000003014011773660334016440 0ustar aurouxauroux/* * Copyright © 2002, 2003 Sun Microsystems, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Sun Microsystems, Inc. nor the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. * SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR * LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, * MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE * THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE * SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * */ /* $Id$ */ /* @(#)list.c 1.7 03/02/06 SMI */ /* * @file list.c * @brief Bidirectional list class * @author Alexander Gelfenbain * @version 1.0 * */ #include #include #ifdef MALLOC_TRACE #include #include #endif #include "list.h" /*- private data types */ typedef struct _lnode { struct _lnode *next; struct _lnode *prev; void *value; } lnode; struct _list { lnode *head, *tail, *cptr; size_t aCount; void (*eDtor)(void *); }; /*- private methods */ static lnode *newNode(void *el) { lnode *ptr = malloc(sizeof(lnode)); assert(ptr != 0); ptr->value = el; return ptr; } static lnode *appendPrim(list this, void *el) { lnode *ptr = newNode(el); lnode **flink, *blink; if (this->tail != 0) { flink = &(this->tail->next); blink = this->tail; } else { flink = &this->head; blink = NULL; this->cptr = ptr; /*- list was empty - set current to this element */ } *flink = ptr; this->tail = ptr; ptr->prev = blink; ptr->next = NULL; this->aCount++; return ptr; } static lnode *prependPrim(list this, void *el) { lnode *ptr = newNode(el); lnode *flink, **blink; if (this->head != 0) { blink = &(this->head->prev); flink = this->head; } else { blink = &this->tail; flink = NULL; this->cptr = ptr; /*- list was empty - set current to this element */ } *blink = ptr; this->head = ptr; ptr->next = flink; ptr->prev = NULL; this->aCount++; return ptr; } /*- public methods */ list listNewEmpty(void) /*- default ctor */ { list this = malloc(sizeof(struct _list)); assert(this != 0); this->aCount = 0; this->eDtor = NULL; this->head = this->tail = this->cptr = NULL; return this; } list listNewCopy(list l) /*- copy ctor */ { lnode *ptr, *c; list this; assert(l != 0); this = malloc(sizeof(struct _list)); assert(this != 0); ptr = l->head; this->aCount = 0; this->eDtor = NULL; this->head = this->tail = this->cptr = NULL; while (ptr) { c = appendPrim(this, ptr->value); if (ptr == l->cptr) this->cptr = c; ptr = ptr->next; } return this; } list listNewConcat(list lhs, list rhs) { lnode *ptr, *c; list this; assert(lhs != 0); assert(rhs != 0); this = malloc(sizeof(struct _list)); assert(this != 0); this->aCount = 0; this->eDtor = NULL; this->head = this->tail = this->cptr = NULL; ptr = lhs->head; while (ptr) { c = appendPrim(this, ptr->value); ptr = ptr->next; } ptr = rhs->head; while (ptr) { c = appendPrim(this, ptr->value); ptr = ptr->next; } this->cptr = this->head; return this; } void listDispose(list this) /*- dtor */ { assert(this != 0); listClear(this); free(this); } void listSetElementDtor(list this, GDestroyNotify f) { assert(this != 0); this->eDtor = f; } list listCopy(list to, list from) /*- assignment */ { lnode *ptr, *c; assert(to != 0); assert(from != 0); listClear(to); ptr = from->head; while (ptr) { c = appendPrim(to, ptr->value); if (ptr == from->cptr) to->cptr = c; ptr = ptr->next; } return to; } /* calling this function on an empty list is a run-time error */ void *listCurrent(list this) { assert(this != 0); assert(this->cptr != 0); return this->cptr->value; } int listCount(list this) { assert(this != 0); return this->aCount; } int listIsEmpty(list this) { assert(this != 0); return this->aCount == 0; } int listAtFirst(list this) { assert(this != 0); return this->cptr == this->head; } int listAtLast(list this) { assert(this != 0); return this->cptr == this->tail; } int listPosition(list this) { int res = 0; lnode *ptr; assert(this != 0); ptr = this->head; while (ptr != this->cptr) { ptr = ptr->next; res++; } return res; } int listFind(list this, void *el) { lnode *ptr; assert(this != 0); ptr = this->head; while (ptr) { if (ptr->value == el) { this->cptr = ptr; return 1; } ptr = ptr->next; } return 0; } int listNext(list this) { return listSkipForward(this, 1); } int listPrev(list this) { return listSkipBackward(this, 1); } int listSkipForward(list this, int n) { int m = 0; assert(this != 0); if (this->cptr == 0) return 0; while (n != 0) { if (this->cptr->next == 0) break; this->cptr = this->cptr->next; n--; m++; } return m; } int listSkipBackward(list this, int n) { int m = 0; assert(this != 0); if (this->cptr == 0) return 0; while (n != 0) { if (this->cptr->prev == 0) break; this->cptr = this->cptr->prev; n--; m++; } return m; } int listToFirst(list this) { assert(this != 0); if (this->cptr != this->head) { this->cptr = this->head; return 1; } return 0; } int listToLast(list this) { assert(this != 0); if (this->cptr != this->tail) { this->cptr = this->tail; return 1; } return 0; } int listPositionAt(list this, int n) /*- returns the actual position number */ { int m = 0; assert(this != 0); this->cptr = this->head; while (n != 0) { if (this->cptr->next == 0) break; this->cptr = this->cptr->next; n--; m++; } return m; } list listAppend(list this, void *el) { assert(this != 0); appendPrim(this, el); return this; } list listConcat(list lhs, list rhs) { lnode *ptr; assert(lhs != 0); assert(rhs != 0); ptr = rhs->head; while (ptr != 0) { appendPrim(lhs, ptr->value); ptr = ptr->next; } return lhs; } list listPrepend(list this, void *el) { assert(this != 0); prependPrim(this, el); return this; } list listInsertAfter(list this, void *el) { lnode *ptr; assert(this != 0); if (this->cptr == 0) return listAppend(this, el); ptr = newNode(el); ptr->prev = this->cptr; ptr->next = this->cptr->next; this->cptr->next = ptr; if (ptr->next != 0) { ptr->next->prev = ptr; } else { this->tail = ptr; } this->aCount++; return this; } list listInsertBefore(list this, void *el) { lnode *ptr; assert(this != 0); if (this->cptr == 0) return listAppend(this, el); ptr = newNode(el); ptr->prev = this->cptr->prev; ptr->next = this->cptr; this->cptr->prev = ptr; if (ptr->prev != 0) { ptr->prev->next = ptr; } else { this->head = ptr; } this->aCount++; return this; } list listRemove(list this) { lnode *ptr = NULL; if (this->cptr == 0) return this; if (this->cptr->next != 0) { ptr = this->cptr->next; this->cptr->next->prev = this->cptr->prev; } else { this->tail = this->cptr->prev; } if (this->cptr->prev != 0) { if (ptr == 0) ptr = this->cptr->prev; this->cptr->prev->next = this->cptr->next; } else { this->head = this->cptr->next; } if (this->eDtor) this->eDtor(this->cptr->value); /* call the dtor callback */ free(this->cptr); this->aCount--; this->cptr = ptr; return this; } list listClear(list this) { lnode *node = this->head, *ptr; while (node) { ptr = node->next; if (this->eDtor) this->eDtor(node->value); /* call the dtor callback */ free(node); this->aCount--; node = ptr; } this->head = this->tail = this->cptr = NULL; assert(this->aCount == 0); return this; } void listForAll(list this, void (*f)(void *)) { lnode *ptr = this->head; while (ptr) { f(ptr->value); ptr = ptr->next; } } void **listToArray(list this) { void **res; lnode *ptr = this->head; int i = 0; assert(this->aCount != 0); res = calloc(this->aCount, sizeof(void *)); assert(res != 0); while (ptr) { res[i++] = ptr->value; ptr = ptr->next; } return res; } /* #define TEST */ #ifdef TEST #include void printlist(list l) { int saved; assert(l != 0); saved = listPosition(l); printf("[ "); if (!listIsEmpty(l)) { listToFirst(l); do { printf("%d ", (int) listCurrent(l)); } while (listNext(l)); } printf("]\n"); listPositionAt(l, saved); } void printstringlist(list l) { int saved; assert(l != 0); saved = listPosition(l); printf("[ "); if (!listIsEmpty(l)) { listToFirst(l); do { printf("'%s' ", (char *) listCurrent(l)); } while (listNext(l)); } printf("]\n"); listPositionAt(l, saved); } void printstat(list l) { printf("count: %d, position: %d, isEmpty: %d, atFirst: %d, atLast: %d.\n", listCount(l), listPosition(l), listIsEmpty(l), listAtFirst(l), listAtLast(l)); } void allfunc(void *e) { printf("%d ", e); } void edtor(void *ptr) { printf("element dtor: 0x%08x\n", ptr); free(ptr); } int main() { list l1, l2, l3; char *ptr; int i; #ifdef MALLOC_TRACE mal_leaktrace(1); mal_debug(2); #endif l1 = listNewEmpty(); printstat(l1); listAppend(l1, 1); printstat(l1); listAppend(l1, 2); printstat(l1); listAppend(l1, 3); printstat(l1); printlist(l1); listToFirst(l1); listInsertBefore(l1, -5); printf("l1: "); printlist(l1); l2 = listNewCopy(l1); printf("l2: "); printlist(l2); l3 = listNewConcat(l1, l2); printf("l1 + l2: "); printlist(l3); listConcat(l3, l1); printf("l3 + l1" ); printlist(l3); listForAll(l2, allfunc); printf("\n"); listClear(l1); listSetElementDtor(l1, edtor); for(i=0; i<10; i++) { ptr = malloc(20); sprintf(ptr, "element # %d", i); listAppend(l1, ptr); } printstringlist(l1); listDispose(l1); listDispose(l2); listDispose(l3); #ifdef MALLOC_TRACE mal_dumpleaktrace(stdout); #endif return 0; } #endif xournal-0.4.8/src/ttsubset/Makefile.in0000644000175000017500000004053512353733740017372 0ustar aurouxauroux# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/ttsubset DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libttsubset_a_AR = $(AR) $(ARFLAGS) libttsubset_a_LIBADD = am_libttsubset_a_OBJECTS = sft.$(OBJEXT) list.$(OBJEXT) ttcr.$(OBJEXT) libttsubset_a_OBJECTS = $(am_libttsubset_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libttsubset_a_SOURCES) DIST_SOURCES = $(libttsubset_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = \ @PACKAGE_CFLAGS@ -DNO_MAPPERS -DNO_TYPE3 -DNO_TYPE42 noinst_LIBRARIES = libttsubset.a libttsubset_a_SOURCES = \ sft.c sft.h \ list.c list.h \ ttcr.c ttcr.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ttsubset/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ttsubset/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libttsubset.a: $(libttsubset_a_OBJECTS) $(libttsubset_a_DEPENDENCIES) $(EXTRA_libttsubset_a_DEPENDENCIES) $(AM_V_at)-rm -f libttsubset.a $(AM_V_AR)$(libttsubset_a_AR) libttsubset.a $(libttsubset_a_OBJECTS) $(libttsubset_a_LIBADD) $(AM_V_at)$(RANLIB) libttsubset.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sft.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttcr.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xournal-0.4.8/src/main.c0000644000175000017500000003227312353337070014534 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "xournal.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-callbacks.h" #include "xo-misc.h" #include "xo-file.h" #include "xo-paint.h" #include "xo-shapes.h" GtkWidget *winMain; GnomeCanvas *canvas; struct Journal journal; // the journal struct BgPdf bgpdf; // the PDF loader stuff struct UIData ui; // the user interface data struct UndoItem *undo, *redo; // the undo and redo stacks double DEFAULT_ZOOM; void init_stuff (int argc, char *argv[]) { GtkWidget *w; GList *dev_list; GdkDevice *device; GdkScreen *screen; int i, j; struct Brush *b; gboolean can_xinput, success; gchar *tmppath, *tmpfn; // create some data structures needed to populate the preferences ui.default_page.bg = g_new(struct Background, 1); // initialize config file names tmppath = g_build_filename(g_get_home_dir(), CONFIG_DIR, NULL); mkdir(tmppath, 0700); // safer (MRU data may be confidential) ui.mrufile = g_build_filename(tmppath, MRU_FILE, NULL); ui.configfile = g_build_filename(tmppath, CONFIG_FILE, NULL); g_free(tmppath); // initialize preferences init_config_default(); load_config_from_file(); ui.font_name = g_strdup(ui.default_font_name); ui.font_size = ui.default_font_size; ui.hiliter_alpha_mask = 0xffffff00 + (guint)(255*ui.hiliter_opacity); // we need an empty canvas prior to creating the journal structures canvas = GNOME_CANVAS (gnome_canvas_new_aa ()); // initialize data ui.default_page.bg->canvas_item = NULL; ui.layerbox_length = 0; if (argc > 2 || (argc == 2 && argv[1][0] == '-')) { printf(_("Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n"), argv[0]); gtk_exit(0); } undo = NULL; redo = NULL; journal.pages = NULL; bgpdf.status = STATUS_NOT_INIT; new_journal(); ui.cur_item_type = ITEM_NONE; ui.cur_item = NULL; ui.cur_path.coords = NULL; ui.cur_path_storage_alloc = 0; ui.cur_path.ref_count = 1; ui.cur_widths = NULL; ui.cur_widths_storage_alloc = 0; ui.selection = NULL; ui.cursor = NULL; ui.pen_cursor_pix = ui.hiliter_cursor_pix = NULL; ui.cur_brush = &(ui.brushes[0][ui.toolno[0]]); for (j=0; j<=NUM_BUTTONS; j++) for (i=0; i < NUM_STROKE_TOOLS; i++) { b = &(ui.brushes[j][i]); b->tool_type = i; if (b->color_no>=0) { b->color_rgba = predef_colors_rgba[b->color_no]; if (i == TOOL_HIGHLIGHTER) { b->color_rgba &= ui.hiliter_alpha_mask; } } b->thickness = predef_thickness[i][b->thickness_no]; } for (i=0; istep_increment = ui.scrollbar_step_increment; gtk_layout_get_vadjustment(GTK_LAYOUT (canvas))->step_increment = ui.scrollbar_step_increment; // set up the page size and canvas size update_page_stuff(); g_signal_connect ((gpointer) canvas, "button_press_event", G_CALLBACK (on_canvas_button_press_event), NULL); g_signal_connect ((gpointer) canvas, "button_release_event", G_CALLBACK (on_canvas_button_release_event), NULL); g_signal_connect ((gpointer) canvas, "enter_notify_event", G_CALLBACK (on_canvas_enter_notify_event), NULL); g_signal_connect ((gpointer) canvas, "leave_notify_event", G_CALLBACK (on_canvas_leave_notify_event), NULL); g_signal_connect ((gpointer) canvas, "proximity_in_event", G_CALLBACK (on_canvas_proximity_event), NULL); g_signal_connect ((gpointer) canvas, "proximity_out_event", G_CALLBACK (on_canvas_proximity_event), NULL); g_signal_connect ((gpointer) canvas, "expose_event", G_CALLBACK (on_canvas_expose_event), NULL); g_signal_connect ((gpointer) canvas, "key_press_event", G_CALLBACK (on_canvas_key_press_event), NULL); g_signal_connect ((gpointer) canvas, "motion_notify_event", G_CALLBACK (on_canvas_motion_notify_event), NULL); g_signal_connect ((gpointer) gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)), "value-changed", G_CALLBACK (on_vscroll_changed), NULL); g_signal_connect ((gpointer) gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)), "value-changed", G_CALLBACK (on_hscroll_changed), NULL); g_object_set_data (G_OBJECT (winMain), "canvas", canvas); screen = gtk_widget_get_screen(winMain); ui.screen_width = gdk_screen_get_width(screen); ui.screen_height = gdk_screen_get_height(screen); can_xinput = FALSE; dev_list = gdk_devices_list(); while (dev_list != NULL) { device = (GdkDevice *)dev_list->data; if (device != gdk_device_get_core_pointer() && device->num_axes >= 2) { /* get around a GDK bug: map the valuator range CORRECTLY to [0,1] */ #ifdef ENABLE_XINPUT_BUGFIX gdk_device_set_axis_use(device, 0, GDK_AXIS_IGNORE); gdk_device_set_axis_use(device, 1, GDK_AXIS_IGNORE); #endif gdk_device_set_mode(device, GDK_MODE_SCREEN); if (g_strrstr(device->name, "raser")) gdk_device_set_source(device, GDK_SOURCE_ERASER); can_xinput = TRUE; } dev_list = dev_list->next; } if (!can_xinput) gtk_widget_set_sensitive(GET_COMPONENT("optionsUseXInput"), FALSE); ui.use_xinput = ui.allow_xinput && can_xinput; gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsProgressiveBG")), ui.progressive_bg); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsPrintRuling")), ui.print_ruling); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsAutoloadPdfXoj")), ui.autoload_pdf_xoj); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsAutosaveXoj")), ui.autosave_enabled); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsLeftHanded")), ui.left_handed); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsShortenMenus")), ui.shorten_menus); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsAutoSavePrefs")), ui.auto_save_prefs); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsButtonSwitchMapping")), ui.button_switch_mapping); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsPenCursor")), ui.pen_cursor); hide_unimplemented(); update_undo_redo_enabled(); update_copy_paste_enabled(); update_vbox_order(ui.vertical_order[ui.fullscreen?1:0]); gtk_widget_grab_focus(GTK_WIDGET(canvas)); // show everything... gtk_widget_show (winMain); update_cursor(); /* this will cause extension events to get enabled/disabled, but we need the windows to be mapped first */ gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsUseXInput")), ui.use_xinput); /* fix a bug in GTK+ 2.16 and 2.17: scrollbars shouldn't get extended input events from pointer motion when cursor moves into main window */ if (!gtk_check_version(2, 16, 0)) { g_signal_connect ( GET_COMPONENT("menubar"), "event", G_CALLBACK (filter_extended_events), NULL); g_signal_connect ( GET_COMPONENT("toolbarMain"), "event", G_CALLBACK (filter_extended_events), NULL); g_signal_connect ( GET_COMPONENT("toolbarPen"), "event", G_CALLBACK (filter_extended_events), NULL); g_signal_connect ( GET_COMPONENT("statusbar"), "event", G_CALLBACK (filter_extended_events), NULL); g_signal_connect ( (gpointer)(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(w))), "event", G_CALLBACK (filter_extended_events), NULL); g_signal_connect ( (gpointer)(gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(w))), "event", G_CALLBACK (filter_extended_events), NULL); } // load the MRU init_mru(); // and finally, open a file specified on the command line // (moved here because display parameters weren't initialized yet...) if (argc == 1) return; set_cursor_busy(TRUE); if (g_path_is_absolute(argv[1])) tmpfn = g_strdup(argv[1]); else { tmppath = g_get_current_dir(); tmpfn = g_build_filename(tmppath, argv[1], NULL); g_free(tmppath); } success = open_journal(tmpfn); g_free(tmpfn); set_cursor_busy(FALSE); if (!success) { w = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error opening file '%s'"), argv[1]); gtk_dialog_run(GTK_DIALOG(w)); gtk_widget_destroy(w); } } int main (int argc, char *argv[]) { gchar *path, *path1, *path2; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif gtk_set_locale (); gtk_init (&argc, &argv); add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); path = g_path_get_dirname(argv[0]); path1 = g_build_filename(path, "pixmaps", NULL); path2 = g_build_filename(path, "..", "pixmaps", NULL); add_pixmap_directory (path1); add_pixmap_directory (path2); add_pixmap_directory (path); g_free(path); g_free(path1); g_free(path2); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ winMain = create_winMain (); init_stuff (argc, argv); gtk_window_set_icon(GTK_WINDOW(winMain), create_pixbuf("xournal.png")); gtk_main (); if (bgpdf.status != STATUS_NOT_INIT) shutdown_bgpdf(); save_mru_list(); autosave_cleanup(&ui.autosave_filename_list); if (ui.auto_save_prefs) save_config_to_file(); return 0; } xournal-0.4.8/src/xo-print.c0000644000175000017500000016215512353614716015400 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #define PANGO_ENABLE_BACKEND /* to access PangoFcFont.font_pattern */ #include #include #include #include #include #include #include #include #include #include #include #include FT_FREETYPE_H #include #define NO_MAPPERS #define NO_TYPE3 #define NO_TYPE42 #include "ttsubset/sft.h" #include "xournal.h" #include "xo-support.h" #include "xo-misc.h" #include "xo-paint.h" #include "xo-print.h" #include "xo-file.h" #define RGBA_RED(rgba) (((rgba>>24)&0xff)/255.0) #define RGBA_GREEN(rgba) (((rgba>>16)&0xff)/255.0) #define RGBA_BLUE(rgba) (((rgba>>8)&0xff)/255.0) #define RGBA_ALPHA(rgba) (((rgba>>0)&0xff)/255.0) #define RGBA_RGB(rgba) RGBA_RED(rgba), RGBA_GREEN(rgba), RGBA_BLUE(rgba) /*********** Printing to PDF ************/ gboolean ispdfspace(char c) { return (c==0 || c==9 || c==10 || c==12 || c==13 || c==' '); } gboolean ispdfdelim(char c) { return (c=='(' || c==')' || c=='<' || c=='>' || c=='[' || c==']' || c=='{' || c=='}' || c=='/' || c=='%'); } void skipspace(char **p, char *eof) { while (ispdfspace(**p) || **p=='%') { if (**p=='%') while (*p!=eof && **p!=10 && **p!=13) (*p)++; if (*p==eof) return; (*p)++; } } void free_pdfobj(struct PdfObj *obj) { int i; if (obj==NULL) return; if ((obj->type == PDFTYPE_STRING || obj->type == PDFTYPE_NAME || obj->type == PDFTYPE_STREAM) && obj->str!=NULL) g_free(obj->str); if ((obj->type == PDFTYPE_ARRAY || obj->type == PDFTYPE_DICT || obj->type == PDFTYPE_STREAM) && obj->num>0) { for (i=0; inum; i++) free_pdfobj(obj->elts[i]); g_free(obj->elts); } if ((obj->type == PDFTYPE_DICT || obj->type == PDFTYPE_STREAM) && obj->num>0) { for (i=0; inum; i++) g_free(obj->names[i]); g_free(obj->names); } g_free(obj); } struct PdfObj *dup_pdfobj(struct PdfObj *obj) { struct PdfObj *dup; int i; if (obj==NULL) return NULL; dup = g_memdup(obj, sizeof(struct PdfObj)); if ((obj->type == PDFTYPE_STRING || obj->type == PDFTYPE_NAME || obj->type == PDFTYPE_STREAM) && obj->str!=NULL) { if (obj->type == PDFTYPE_NAME) obj->len = strlen(obj->str); dup->str = g_memdup(obj->str, obj->len+1); } if ((obj->type == PDFTYPE_ARRAY || obj->type == PDFTYPE_DICT || obj->type == PDFTYPE_STREAM) && obj->num>0) { dup->elts = g_malloc(obj->num*sizeof(struct PdfObj *)); for (i=0; inum; i++) dup->elts[i] = dup_pdfobj(obj->elts[i]); } if ((obj->type == PDFTYPE_DICT || obj->type == PDFTYPE_STREAM) && obj->num>0) { dup->names = g_malloc(obj->num*sizeof(char *)); for (i=0; inum; i++) dup->names[i] = g_strdup(obj->names[i]); } return dup; } void show_pdfobj(struct PdfObj *obj, GString *str) { int i; if (obj==NULL) return; switch(obj->type) { case PDFTYPE_CST: if (obj->intval==1) g_string_append(str, "true"); if (obj->intval==0) g_string_append(str, "false"); if (obj->intval==-1) g_string_append(str, "null"); break; case PDFTYPE_INT: g_string_append_printf(str, "%d", obj->intval); break; case PDFTYPE_REAL: g_string_append_printf(str, "%f", obj->realval); break; case PDFTYPE_STRING: g_string_append_len(str, obj->str, obj->len); break; case PDFTYPE_NAME: g_string_append(str, obj->str); break; case PDFTYPE_ARRAY: g_string_append_c(str, '['); for (i=0;inum;i++) { if (i) g_string_append_c(str, ' '); show_pdfobj(obj->elts[i], str); } g_string_append_c(str, ']'); break; case PDFTYPE_DICT: g_string_append(str, "<<"); for (i=0;inum;i++) { g_string_append_printf(str, " %s ", obj->names[i]); show_pdfobj(obj->elts[i], str); } g_string_append(str, " >>"); break; case PDFTYPE_REF: g_string_append_printf(str, "%d %d R", obj->intval, obj->num); break; } } void DEBUG_PRINTOBJ(struct PdfObj *obj) { GString *s = g_string_new(""); show_pdfobj(obj, s); puts(s->str); g_string_free(s, TRUE); } // parse a PDF object; returns NULL if fails // THIS PARSER DOES NOT RECOGNIZE STREAMS YET struct PdfObj *parse_pdf_object(char **ptr, char *eof) { struct PdfObj *obj, *elt; char *p, *q, *r, *eltname; int stack; obj = g_malloc(sizeof(struct PdfObj)); p = *ptr; skipspace(&p, eof); if (p==eof) { g_free(obj); return NULL; } // maybe a constant if (!strncmp(p, "true", 4)) { obj->type = PDFTYPE_CST; obj->intval = 1; *ptr = p+4; return obj; } if (!strncmp(p, "false", 5)) { obj->type = PDFTYPE_CST; obj->intval = 0; *ptr = p+5; return obj; } if (!strncmp(p, "null", 4)) { obj->type = PDFTYPE_CST; obj->intval = -1; *ptr = p+4; return obj; } // or a number ? obj->intval = strtol(p, &q, 10); *ptr = q; if (q!=p) { if (*q == '.') { obj->type = PDFTYPE_REAL; obj->realval = g_ascii_strtod(p, ptr); return obj; } if (ispdfspace(*q)) { // check for indirect reference skipspace(&q, eof); obj->num = strtol(q, &r, 10); if (r!=q) { skipspace(&r, eof); if (*r=='R') { *ptr = r+1; obj->type = PDFTYPE_REF; return obj; } } } obj->type = PDFTYPE_INT; return obj; } // a string ? if (*p=='(') { q=p+1; stack=1; while (stack>0 && q!=eof) { if (*q=='(') stack++; if (*q==')') stack--; if (*q=='\\') q++; if (q!=eof) q++; } if (q==eof) { g_free(obj); return NULL; } obj->type = PDFTYPE_STRING; obj->len = q-p; obj->str = g_malloc(obj->len+1); obj->str[obj->len] = 0; g_memmove(obj->str, p, obj->len); *ptr = q; return obj; } if (*p=='<' && p[1]!='<') { q=p+1; while (*q!='>' && q!=eof) q++; if (q==eof) { g_free(obj); return NULL; } q++; obj->type = PDFTYPE_STRING; obj->len = q-p; obj->str = g_malloc(obj->len+1); obj->str[obj->len] = 0; g_memmove(obj->str, p, obj->len); *ptr = q; return obj; } // a name ? if (*p=='/') { q=p+1; while (!ispdfspace(*q) && !ispdfdelim(*q)) q++; obj->type = PDFTYPE_NAME; obj->str = g_strndup(p, q-p); *ptr = q; return obj; } // an array ? if (*p=='[') { obj->type = PDFTYPE_ARRAY; obj->num = 0; obj->elts = NULL; q=p+1; skipspace(&q, eof); while (*q!=']') { elt = parse_pdf_object(&q, eof); if (elt==NULL) { free_pdfobj(obj); return NULL; } obj->num++; obj->elts = g_realloc(obj->elts, obj->num*sizeof(struct PdfObj *)); obj->elts[obj->num-1] = elt; skipspace(&q, eof); } *ptr = q+1; return obj; } // a dictionary ? if (*p=='<' && p[1]=='<') { obj->type = PDFTYPE_DICT; obj->num = 0; obj->elts = NULL; obj->names = NULL; q=p+2; skipspace(&q, eof); while (*q!='>' || q[1]!='>') { if (*q!='/') { free_pdfobj(obj); return NULL; } r=q+1; while (!ispdfspace(*r) && !ispdfdelim(*r)) r++; eltname = g_strndup(q, r-q); q=r; skipspace(&q, eof); elt = parse_pdf_object(&q, eof); if (elt==NULL) { g_free(eltname); free_pdfobj(obj); return NULL; } obj->num++; obj->elts = g_realloc(obj->elts, obj->num*sizeof(struct PdfObj *)); obj->names = g_realloc(obj->names, obj->num*sizeof(char *)); obj->elts[obj->num-1] = elt; obj->names[obj->num-1] = eltname; skipspace(&q, eof); } *ptr = q+2; return obj; } // DOES NOT RECOGNIZE STREAMS YET (handle as subcase of dictionary) g_free(obj); return NULL; } struct PdfObj *get_dict_entry(struct PdfObj *dict, char *name) { int i; if (dict==NULL) return NULL; if (dict->type != PDFTYPE_DICT) return NULL; for (i=0; inum; i++) if (!strcmp(dict->names[i], name)) return dict->elts[i]; return NULL; } struct PdfObj *get_pdfobj(GString *pdfbuf, struct XrefTable *xref, struct PdfObj *obj) { char *p, *eof; int offs, n; if (obj==NULL) return NULL; if (obj->type!=PDFTYPE_REF) return dup_pdfobj(obj); if (obj->intval>xref->last) return NULL; offs = xref->data[obj->intval]; if (offs<=0 || offs >= pdfbuf->len) return NULL; p = pdfbuf->str + offs; eof = pdfbuf->str + pdfbuf->len; n = strtol(p, &p, 10); if (n!=obj->intval) return NULL; skipspace(&p, eof); n = strtol(p, &p, 10); skipspace(&p, eof); if (strncmp(p, "obj", 3)) return NULL; p+=3; return parse_pdf_object(&p, eof); } // read the xref table of a PDF file in memory, and return the trailerdict struct PdfObj *parse_xref_table(GString *pdfbuf, struct XrefTable *xref, int offs) { char *p, *eof; struct PdfObj *trailerdict, *obj; int start, len, i; if (strncmp(pdfbuf->str+offs, "xref", 4)) return NULL; p = strstr(pdfbuf->str+offs, "trailer"); eof = pdfbuf->str + pdfbuf->len; if (p==NULL) return NULL; p+=8; trailerdict = parse_pdf_object(&p, eof); obj = get_dict_entry(trailerdict, "/Size"); if (obj!=NULL && obj->type == PDFTYPE_INT && obj->intval-1>xref->last) make_xref(xref, obj->intval-1, 0); obj = get_dict_entry(trailerdict, "/Prev"); if (obj!=NULL && obj->type == PDFTYPE_INT && obj->intval>0 && obj->intval!=offs) { // recurse into older xref table obj = parse_xref_table(pdfbuf, xref, obj->intval); free_pdfobj(obj); } p = pdfbuf->str+offs+4; skipspace(&p, eof); if (*p<'0' || *p>'9') { free_pdfobj(trailerdict); return NULL; } while (*p>='0' && *p<='9') { start = strtol(p, &p, 10); skipspace(&p, eof); len = strtol(p, &p, 10); skipspace(&p, eof); if (len <= 0 || 20*len > eof-p) break; if (start+len-1 > xref->last) make_xref(xref, start+len-1, 0); for (i=start; idata[i] = strtol(p, NULL, 10); p+=20; } skipspace(&p, eof); } if (*p!='t') { free_pdfobj(trailerdict); return NULL; } return trailerdict; } // parse the page tree int pdf_getpageinfo(GString *pdfbuf, struct XrefTable *xref, struct PdfObj *pgtree, int nmax, struct PdfPageDesc *pages) { struct PdfObj *obj, *kid; int i, count, j; obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Type")); if (obj == NULL || obj->type != PDFTYPE_NAME) return 0; if (!strcmp(obj->str, "/Page")) { free_pdfobj(obj); pages->contents = dup_pdfobj(get_dict_entry(pgtree, "/Contents")); obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Resources")); if (obj!=NULL) { free_pdfobj(pages->resources); pages->resources = obj; } obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/MediaBox")); if (obj!=NULL) { free_pdfobj(pages->mediabox); pages->mediabox = obj; } obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Rotate")); if (obj!=NULL && obj->type == PDFTYPE_INT) pages->rotate = obj->intval; free_pdfobj(obj); return 1; } else if (!strcmp(obj->str, "/Pages")) { free_pdfobj(obj); obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Count")); if (obj!=NULL && obj->type == PDFTYPE_INT && obj->intval>0 && obj->intval<=nmax) count = obj->intval; else count = 0; free_pdfobj(obj); obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Resources")); if (obj!=NULL) for (i=0; itype == PDFTYPE_INT) for (i=0; iintval; free_pdfobj(obj); obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pgtree, "/Kids")); if (obj!=NULL && obj->type == PDFTYPE_ARRAY) { for (i=0; inum; i++) { kid = get_pdfobj(pdfbuf, xref, obj->elts[i]); if (kid!=NULL) { j = pdf_getpageinfo(pdfbuf, xref, kid, nmax, pages); nmax -= j; pages += j; free_pdfobj(kid); } } } free_pdfobj(obj); return count; } return 0; } // parse a PDF file in memory gboolean pdf_parse_info(GString *pdfbuf, struct PdfInfo *pdfinfo, struct XrefTable *xref) { char *p; int offs; struct PdfObj *obj, *pages; xref->n_alloc = xref->last = 0; xref->data = NULL; p = pdfbuf->str + pdfbuf->len-1; while (*p!='s' && p!=pdfbuf->str) p--; if (strncmp(p, "startxref", 9)) return FALSE; // fail p+=9; while (ispdfspace(*p) && p!=pdfbuf->str+pdfbuf->len) p++; offs = strtol(p, NULL, 10); if (offs <= 0 || offs > pdfbuf->len) return FALSE; // fail pdfinfo->startxref = offs; pdfinfo->trailerdict = parse_xref_table(pdfbuf, xref, offs); if (pdfinfo->trailerdict == NULL) return FALSE; // fail obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pdfinfo->trailerdict, "/Root")); if (obj == NULL) { free_pdfobj(pdfinfo->trailerdict); return FALSE; } pages = get_pdfobj(pdfbuf, xref, get_dict_entry(obj, "/Pages")); free_pdfobj(obj); if (pages == NULL) { free_pdfobj(pdfinfo->trailerdict); return FALSE; } obj = get_pdfobj(pdfbuf, xref, get_dict_entry(pages, "/Count")); if (obj == NULL || obj->type != PDFTYPE_INT || obj->intval<=0) { free_pdfobj(pdfinfo->trailerdict); free_pdfobj(pages); free_pdfobj(obj); return FALSE; } pdfinfo->npages = obj->intval; free_pdfobj(obj); pdfinfo->pages = g_malloc0(pdfinfo->npages*sizeof(struct PdfPageDesc)); pdf_getpageinfo(pdfbuf, xref, pages, pdfinfo->npages, pdfinfo->pages); free_pdfobj(pages); return TRUE; } // add an entry to the xref table void make_xref(struct XrefTable *xref, int nobj, int offset) { if (xref->n_alloc <= nobj) { xref->n_alloc = nobj + 10; xref->data = g_realloc(xref->data, xref->n_alloc*sizeof(int)); } if (xref->last < nobj) xref->last = nobj; xref->data[nobj] = offset; } // a wrapper for deflate GString *do_deflate(char *in, int len) { GString *out; z_stream zs; zs.zalloc = Z_NULL; zs.zfree = Z_NULL; deflateInit(&zs, Z_DEFAULT_COMPRESSION); zs.next_in = (Bytef *)in; zs.avail_in = len; zs.avail_out = deflateBound(&zs, len); out = g_string_sized_new(zs.avail_out); zs.next_out = (Bytef *)out->str; deflate(&zs, Z_FINISH); out->len = zs.total_out; deflateEnd(&zs); return out; } // prefix to scale the original page GString *make_pdfprefix(struct PdfPageDesc *pgdesc, double width, double height) { GString *str; double v[4], t, xscl, yscl; int i; // push 3 times in case code to be annotated has unbalanced q/Q (B of A., ...) str = g_string_new("q q q "); if (pgdesc->rotate == 90) { g_string_append_printf(str, "0 -1 1 0 0 %.2f cm ", height); t = height; height = width; width = t; } if (pgdesc->rotate == 270) { g_string_append_printf(str, "0 1 -1 0 %.2f 0 cm ", width); t = height; height = width; width = t; } if (pgdesc->rotate == 180) { g_string_append_printf(str, "-1 0 0 -1 %.2f %.2f cm ", width, height); } if (pgdesc->mediabox==NULL || pgdesc->mediabox->type != PDFTYPE_ARRAY || pgdesc->mediabox->num != 4) return str; for (i=0; i<4; i++) { if (pgdesc->mediabox->elts[i]->type == PDFTYPE_INT) v[i] = pgdesc->mediabox->elts[i]->intval; else if (pgdesc->mediabox->elts[i]->type == PDFTYPE_REAL) v[i] = pgdesc->mediabox->elts[i]->realval; else return str; } if (v[0]>v[2]) { t = v[0]; v[0] = v[2]; v[2] = t; } if (v[1]>v[3]) { t = v[1]; v[1] = v[3]; v[3] = t; } if (v[2]-v[0] < 1. || v[3]-v[1] < 1.) return str; xscl = width/(v[2]-v[0]); yscl = height/(v[3]-v[1]); g_string_append_printf(str, "%.4f 0 0 %.4f %.2f %.2f cm ", xscl, yscl, -v[0]*xscl, -v[1]*yscl); return str; } // add an entry to a subentry of a directory struct PdfObj *mk_pdfname(char *name) { struct PdfObj *obj; obj = g_malloc(sizeof(struct PdfObj)); obj->type = PDFTYPE_NAME; obj->str = g_strdup(name); return obj; } struct PdfObj *mk_pdfref(int num) { struct PdfObj *obj; obj = g_malloc(sizeof(struct PdfObj)); obj->type = PDFTYPE_REF; obj->intval = num; obj->num = 0; return obj; } gboolean iseq_obj(struct PdfObj *a, struct PdfObj *b) { if (a==NULL || b==NULL) return (a==b); if (a->type!=b->type) return FALSE; if (a->type == PDFTYPE_CST || a->type == PDFTYPE_INT) return (a->intval == b->intval); if (a->type == PDFTYPE_REAL) return (a->realval == b->realval); if (a->type == PDFTYPE_NAME) return !strcmp(a->str, b->str); if (a->type == PDFTYPE_REF) return (a->intval == b->intval && a->num == b->num); return FALSE; } void add_dict_subentry(GString *pdfbuf, struct XrefTable *xref, struct PdfObj *obj, char *section, int type, char *name, struct PdfObj *entry) { struct PdfObj *sec; int i, subpos; subpos = -1; for (i=0; inum; i++) if (!strcmp(obj->names[i], section)) subpos = i; if (subpos == -1) { subpos = obj->num; obj->num++; obj->elts = g_realloc(obj->elts, obj->num*sizeof(struct PdfObj*)); obj->names = g_realloc(obj->names, obj->num*sizeof(char *)); obj->names[subpos] = g_strdup(section); obj->elts[subpos] = NULL; } if (obj->elts[subpos]!=NULL && obj->elts[subpos]->type==PDFTYPE_REF) { sec = get_pdfobj(pdfbuf, xref, obj->elts[subpos]); free_pdfobj(obj->elts[subpos]); obj->elts[subpos] = sec; } if (obj->elts[subpos]!=NULL && obj->elts[subpos]->type!=type) { free_pdfobj(obj->elts[subpos]); obj->elts[subpos] = NULL; } if (obj->elts[subpos] == NULL) { obj->elts[subpos] = sec = g_malloc(sizeof(struct PdfObj)); sec->type = type; sec->num = 0; sec->elts = NULL; sec->names = NULL; } sec = obj->elts[subpos]; subpos = -1; if (type==PDFTYPE_DICT) { for (i=0; inum; i++) if (!strcmp(sec->names[i], name)) subpos = i; if (subpos == -1) { subpos = sec->num; sec->num++; sec->elts = g_realloc(sec->elts, sec->num*sizeof(struct PdfObj*)); sec->names = g_realloc(sec->names, sec->num*sizeof(char *)); sec->names[subpos] = g_strdup(name); sec->elts[subpos] = NULL; } free_pdfobj(sec->elts[subpos]); sec->elts[subpos] = entry; } if (type==PDFTYPE_ARRAY) { for (i=0; inum; i++) if (iseq_obj(sec->elts[i], entry)) subpos = i; if (subpos == -1) { subpos = sec->num; sec->num++; sec->elts = g_realloc(sec->elts, sec->num*sizeof(struct PdfObj*)); sec->elts[subpos] = entry; } else free_pdfobj(entry); } } // draw a page's background void pdf_draw_solid_background(struct Page *pg, GString *str) { double x, y; g_string_append_printf(str, "%.2f %.2f %.2f rg 0 0 %.2f %.2f re f ", RGBA_RGB(pg->bg->color_rgba), pg->width, pg->height); if (!ui.print_ruling) return; if (pg->bg->ruling == RULING_NONE) return; g_string_append_printf(str, "%.2f %.2f %.2f RG %.2f w ", RGBA_RGB(RULING_COLOR), RULING_THICKNESS); if (pg->bg->ruling == RULING_GRAPH) { for (x=RULING_GRAPHSPACING; xwidth-1; x+=RULING_GRAPHSPACING) g_string_append_printf(str, "%.2f 0 m %.2f %.2f l S ", x, x, pg->height); for (y=RULING_GRAPHSPACING; yheight-1; y+=RULING_GRAPHSPACING) g_string_append_printf(str, "0 %.2f m %.2f %.2f l S ", y, pg->width, y); return; } for (y=RULING_TOPMARGIN; yheight-1; y+=RULING_SPACING) g_string_append_printf(str, "0 %.2f m %.2f %.2f l S ", y, pg->width, y); if (pg->bg->ruling == RULING_LINED) g_string_append_printf(str, "%.2f %.2f %.2f RG %.2f 0 m %.2f %.2f l S ", RGBA_RGB(RULING_MARGIN_COLOR), RULING_LEFTMARGIN, RULING_LEFTMARGIN, pg->height); } int pdf_draw_bitmap_background(struct Page *pg, GString *str, struct XrefTable *xref, GString *pdfbuf) { BgPdfPage *pgpdf; GdkPixbuf *pix; GString *zpix; PopplerPage *pdfpage; char *buf, *p1, *p2; int height, width, stride, x, y, chan; double pgheight, pgwidth; if (pg->bg->type == BG_PDF) { if (!bgpdf.document) return -1; pdfpage = poppler_document_get_page(bgpdf.document, pg->bg->file_page_seq-1); if (!pdfpage) return -1; poppler_page_get_size(pdfpage, &pgwidth, &pgheight); width = (int) (PDFTOPPM_PRINTING_DPI * pgwidth/72.0); height = (int) (PDFTOPPM_PRINTING_DPI * pgheight/72.0); pix = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); wrapper_poppler_page_render_to_pixbuf( pdfpage, 0, 0, width, height, PDFTOPPM_PRINTING_DPI/72.0, 0, pix); g_object_unref(pdfpage); } else pix = g_object_ref(pg->bg->pixbuf); if (gdk_pixbuf_get_bits_per_sample(pix) != 8 || gdk_pixbuf_get_colorspace(pix) != GDK_COLORSPACE_RGB) { g_object_unref(pix); return -1; } width = gdk_pixbuf_get_width(pix); height = gdk_pixbuf_get_height(pix); stride = gdk_pixbuf_get_rowstride(pix); chan = gdk_pixbuf_get_n_channels(pix); if (chan!=3 && chan!=4) { g_object_unref(pix); return -1; } g_string_append_printf(str, "q %.2f 0 0 %.2f 0 %.2f cm /ImBg Do Q ", pg->width, -pg->height, pg->height); p2 = buf = (char *)g_malloc(3*width*height); for (y=0; ylast+1, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %zu /Filter /FlateDecode /Type /Xobject " "/Subtype /Image /Width %d /Height %d /ColorSpace /DeviceRGB " "/BitsPerComponent 8 >> stream\n", xref->last, zpix->len, width, height); g_string_append_len(pdfbuf, zpix->str, zpix->len); g_string_free(zpix, TRUE); g_string_append(pdfbuf, "endstream\nendobj\n"); return xref->last; } gboolean pdf_draw_image(PdfImage *image, struct XrefTable *xref, GString *pdfbuf) { char *buf, *p1, *p2; int height, width, stride, x, y, chan; GString *zpix; if (gdk_pixbuf_get_bits_per_sample(image->pixbuf) != 8 || gdk_pixbuf_get_colorspace(image->pixbuf) != GDK_COLORSPACE_RGB) { return FALSE; } width = gdk_pixbuf_get_width(image->pixbuf); height = gdk_pixbuf_get_height(image->pixbuf); stride = gdk_pixbuf_get_rowstride(image->pixbuf); chan = gdk_pixbuf_get_n_channels(image->pixbuf); if (!((chan==3 && !image->has_alpha) || (chan==4 && image->has_alpha))) { return FALSE; } p2 = buf = (char *)g_malloc(3*width*height); for (y=0; ypixbuf)+stride*y; for (x=0; xdata[image->n_obj] = pdfbuf->len; g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %d /Filter /FlateDecode /Type /Xobject " "/Subtype /Image /Width %d /Height %d /ColorSpace /DeviceRGB " "/BitsPerComponent 8 ", image->n_obj, zpix->len, width, height); if (image->has_alpha) { g_string_append_printf(pdfbuf, "/SMask %d 0 R ", image->n_obj_smask); } g_string_append_printf(pdfbuf, " >> stream\n"); g_string_append_len(pdfbuf, zpix->str, zpix->len); g_string_free(zpix, TRUE); g_string_append(pdfbuf, "endstream\nendobj\n"); if (image->has_alpha) { p2 = buf = (char *)g_malloc(width*height); for (y=0; ypixbuf)+stride*y; for (x=0; xdata[image->n_obj_smask] = pdfbuf->len; g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %d /Filter /FlateDecode /Type /Xobject " "/Subtype /Image /Width %d /Height %d /ColorSpace /DeviceGray " "/BitsPerComponent 8 >> stream\n", image->n_obj_smask, zpix->len, width, height); g_string_append_len(pdfbuf, zpix->str, zpix->len); g_string_free(zpix, TRUE); g_string_append(pdfbuf, "endstream\nendobj\n"); } return TRUE; } // manipulate Pdf fonts struct PdfFont *new_pdffont(struct XrefTable *xref, GList **fonts, char *filename, int font_id, FT_Face face, int glyph_page) { GList *list; struct PdfFont *font; int i; const char *s; for (list = *fonts; list!=NULL; list = list->next) { font = (struct PdfFont *)list->data; if (!strcmp(font->filename, filename) && font->font_id == font_id && font->glyph_page == glyph_page) { font->used_in_this_page = TRUE; return font; } } font = g_malloc(sizeof(struct PdfFont)); *fonts = g_list_append(*fonts, font); font->n_obj = xref->last+1; make_xref(xref, xref->last+1, 0); // will give it a value later font->filename = g_strdup(filename); font->font_id = font_id; font->glyph_page = glyph_page; font->used_in_this_page = TRUE; font->num_glyphs_used = 0; for (i=0; i<256; i++) { font->glyphmap[i] = -1; font->advance[i] = 0; font->glyphpsnames[i] = NULL; } font->glyphmap[0] = 0; // fill in info from the FT_Face font->is_truetype = FT_IS_SFNT(face); font->nglyphs = face->num_glyphs; font->ft2ps = 1000.0 / face->units_per_EM; font->ascender = (int)(font->ft2ps*face->ascender); font->descender = (int)(font->ft2ps*face->descender); if (face->bbox.xMin < -100000 || face->bbox.xMin > 100000) font->xmin = 0; else font->xmin = (int)(font->ft2ps*face->bbox.xMin); if (face->bbox.xMax < -100000 || face->bbox.xMax > 100000) font->xmax = 0; else font->xmax = (int)(font->ft2ps*face->bbox.xMax); if (face->bbox.yMin < -100000 || face->bbox.yMin > 100000) font->ymin = 0; else font->ymin = (int)(font->ft2ps*face->bbox.yMin); if (face->bbox.yMax < -100000 || face->bbox.yMax > 100000) font->ymax = 0; else font->ymax = (int)(font->ft2ps*face->bbox.yMax); if (font->is_truetype) font->flags = 4; // symbolic else { font->flags = 4; // symbolic if (FT_IS_FIXED_WIDTH(face)) font->flags |= 1; if (face->style_flags & FT_STYLE_FLAG_ITALIC) font->flags |= 64; } s = FT_Get_Postscript_Name(face); if (s==NULL) s = "Noname"; if (glyph_page) font->fontname = g_strdup_printf("%s_%03d", s, glyph_page); else font->fontname = g_strdup(s); return font; } #define pfb_get_length(x) (((x)[3]<<24) + ((x)[2]<<16) + ((x)[1]<<8) + (x)[0]) #define T1_SEGMENT_1_END "currentfile eexec" #define T1_SEGMENT_3_END "cleartomark" void embed_pdffont(GString *pdfbuf, struct XrefTable *xref, struct PdfFont *font) { // this code inspired by libgnomeprint gboolean fallback, is_binary; guchar encoding[256]; gushort glyphs[256]; int i, j, num; guint32 len1, len2; guint32 tt_len; gsize t1_len; TrueTypeFont *ttfnt; char *seg1, *seg2; char *fontdata, *p; char prefix[8]; int nobj_fontprog, nobj_descr, lastchar; fallback = FALSE; // embed the font file: TrueType case if (font->is_truetype) { glyphs[0] = encoding[0] = 0; num = 1; for (i=1; i<=255; i++) if (font->glyphmap[i]>=0) { font->glyphmap[i] = num; glyphs[num] = 255*font->glyph_page+i-1; encoding[num] = i; num++; } font->num_glyphs_used = num-1; if (OpenTTFont(font->filename, 0, &ttfnt) == SF_OK) { if (CreateTTFromTTGlyphs_tomemory(ttfnt, (guint8**)&fontdata, &tt_len, glyphs, encoding, num, 0, NULL, TTCF_AutoName | TTCF_IncludeOS2) == SF_OK) { make_xref(xref, xref->last+1, pdfbuf->len); nobj_fontprog = xref->last; g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %u /Length1 %u >> stream\n", nobj_fontprog, tt_len, tt_len); g_string_append_len(pdfbuf, fontdata, tt_len); g_string_append(pdfbuf, "endstream\nendobj\n"); g_free(fontdata); } else fallback = TRUE; CloseTTFont(ttfnt); } else fallback = TRUE; } else { // embed the font file: Type1 case if (g_file_get_contents(font->filename, &fontdata, &t1_len, NULL) && t1_len>=8) { if (fontdata[0]==(char)0x80 && fontdata[1]==(char)0x01) { is_binary = TRUE; len1 = pfb_get_length((unsigned char *)fontdata+2); if (fontdata[len1+6]!=(char)0x80 || fontdata[len1+7]!=(char)0x02) fallback = TRUE; else { len2 = pfb_get_length((unsigned char *)fontdata+len1+8); if (fontdata[len1+len2+12]!=(char)0x80 || fontdata[len1+len2+13]!=(char)0x01) fallback = TRUE; } } else if (!strncmp(fontdata, "%!PS", 4)) { is_binary = FALSE; p = strstr(fontdata, T1_SEGMENT_1_END) + strlen(T1_SEGMENT_1_END); if (p==NULL) fallback = TRUE; else { if (*p=='\n' || *p=='\r') p++; if (*p=='\n' || *p=='\r') p++; len1 = p-fontdata; p = g_strrstr_len(fontdata, t1_len, T1_SEGMENT_3_END); if (p==NULL) fallback = TRUE; else { // rewind 512 zeros i = 512; p--; while (i>0 && p!=fontdata && (*p=='0' || *p=='\r' || *p=='\n')) { if (*p=='0') i--; p--; } while (p!=fontdata && (*p=='\r' || *p=='\n')) p--; p++; if (i>0) fallback = TRUE; else len2 = p-fontdata-len1; } } } else fallback = TRUE; if (!fallback) { if (is_binary) { seg1 = fontdata+6; seg2 = fontdata + len1 + 12; } else { seg1 = fontdata; seg2 = g_malloc(len2/2); j=0; p = fontdata+len1; while (p+1 < fontdata+len1+len2) { if (*p==' '||*p=='\t'||*p=='\n'||*p=='\r') { p++; continue; } if (p[0]>'9') { p[0]|=0x20; p[0]-=39; } if (p[1]>'9') { p[1]|=0x20; p[1]-=39; } seg2[j++] = ((p[0]-'0')<<4) + (p[1]-'0'); p+=2; } len2 = j; } make_xref(xref, xref->last+1, pdfbuf->len); nobj_fontprog = xref->last; g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %u /Length1 %u /Length2 %u /Length3 0 >> stream\n", nobj_fontprog, len1+len2, len1, len2); g_string_append_len(pdfbuf, seg1, len1); g_string_append_len(pdfbuf, seg2, len2); g_string_append(pdfbuf, "endstream\nendobj\n"); if (!is_binary) g_free(seg2); } g_free(fontdata); } else fallback = TRUE; } // next, the font descriptor if (!fallback) { make_xref(xref, xref->last+1, pdfbuf->len); nobj_descr = xref->last; g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /FontDescriptor /FontName /%s /Flags %d " "/FontBBox [%d %d %d %d] /ItalicAngle 0 /Ascent %d " "/Descent %d /CapHeight %d /StemV 100 /%s %d 0 R >> endobj\n", nobj_descr, font->fontname, font->flags, font->xmin, font->ymin, font->xmax, font->ymax, font->ascender, -font->descender, font->ascender, font->is_truetype ? "FontFile2":"FontFile", nobj_fontprog); } // finally, the font itself /* Note: in Type1 case, font->glyphmap maps charcodes to glyph no's in TrueType case, encoding lists the used charcodes by index, glyphs list the used glyph no's by index font->glyphmap maps charcodes to indices */ xref->data[font->n_obj] = pdfbuf->len; if (font->is_truetype) lastchar = encoding[font->num_glyphs_used]; else lastchar = font->num_glyphs_used; if (fallback) { font->is_truetype = FALSE; g_free(font->fontname); font->fontname = g_strdup("Helvetica"); } prefix[0]=0; if (font->is_truetype) { num = font->glyph_page; for (i=0; i<6; i++) { prefix[i] = 'A'+(num%26); num/=26; } prefix[6]='+'; prefix[7]=0; } g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /Font /Subtype /%s /BaseFont /%s%s /Name /F%d ", font->n_obj, font->is_truetype?"TrueType":"Type1", prefix, font->fontname, font->n_obj); if (!fallback) { g_string_append_printf(pdfbuf, "/FontDescriptor %d 0 R /FirstChar 0 /LastChar %d /Widths [", nobj_descr, lastchar); for (i=0; i<=lastchar; i++) g_string_append_printf(pdfbuf, "%d ", font->advance[i]); g_string_append(pdfbuf, "] "); } if (!font->is_truetype) { /* encoding */ g_string_append(pdfbuf, "/Encoding << /Type /Encoding " "/BaseEncoding /MacRomanEncoding /Differences [1 "); for (i=1; i<=lastchar; i++) { g_string_append_printf(pdfbuf, "/%s ", font->glyphpsnames[i]); g_free(font->glyphpsnames[i]); } g_string_append(pdfbuf, "] >> "); } g_string_append(pdfbuf, ">> endobj\n"); } // Pdf images struct PdfImage *new_pdfimage(struct XrefTable *xref, GList **images, GdkPixbuf *pixbuf) { GList *list; struct PdfImage *image; image = g_malloc(sizeof(struct PdfImage)); *images = g_list_append(*images, image); image->n_obj = xref->last+1; make_xref(xref, xref->last+1, 0); // will give it a value later image->has_alpha = gdk_pixbuf_get_has_alpha(pixbuf); if (image->has_alpha) { image->n_obj_smask = xref->last+1; make_xref(xref, xref->last+1, 0); // will give it a value later } image->pixbuf = pixbuf; return image; } // draw a page's graphics void pdf_draw_page(struct Page *pg, GString *str, gboolean *use_hiliter, struct XrefTable *xref, GList **pdffonts, GList **pdfimages) { GList *layerlist, *itemlist, *tmplist; struct Layer *l; struct Item *item; guint old_rgba, old_text_rgba; double old_thickness; double *pt; int i, j; PangoFontDescription *font_desc; PangoContext *context; PangoLayout *layout; PangoLayoutIter *iter; PangoRectangle logical_rect; PangoLayoutRun *run; PangoFcFont *fcfont; PangoFontMap *fontmap; FcPattern *pattern; int baseline, advance; int glyph_no, glyph_page, current_page; char *filename; char tmpstr[200]; int font_id; FT_Face ftface; struct PdfFont *cur_font; struct PdfImage *cur_image; gboolean in_string; old_rgba = old_text_rgba = 0x12345678; // not any values we use, so we'll reset them old_thickness = 0.0; for (tmplist = *pdffonts; tmplist!=NULL; tmplist = tmplist->next) { cur_font = (struct PdfFont *)tmplist->data; cur_font->used_in_this_page = FALSE; } for (tmplist = *pdfimages; tmplist!=NULL; tmplist = tmplist->next) { cur_image = (struct PdfImage *)tmplist->data; cur_image->used_in_this_page = FALSE; } for (layerlist = pg->layers; layerlist!=NULL; layerlist = layerlist->next) { l = (struct Layer *)layerlist->data; for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type == ITEM_STROKE) { if ((item->brush.color_rgba & ~0xff) != old_rgba) g_string_append_printf(str, "%.2f %.2f %.2f RG ", RGBA_RGB(item->brush.color_rgba)); if (item->brush.thickness != old_thickness) g_string_append_printf(str, "%.2f w ", item->brush.thickness); if ((item->brush.color_rgba & 0xf0) != 0xf0) { // transparent g_string_append(str, "q /XoHi gs "); *use_hiliter = TRUE; } old_rgba = item->brush.color_rgba & ~0xff; old_thickness = item->brush.thickness; pt = item->path->coords; if (!item->brush.variable_width) { g_string_append_printf(str, "%.2f %.2f m ", pt[0], pt[1]); for (i=1, pt+=2; ipath->num_points; i++, pt+=2) g_string_append_printf(str, "%.2f %.2f l ", pt[0], pt[1]); g_string_append_printf(str,"S\n"); old_thickness = item->brush.thickness; } else { for (i=0; ipath->num_points-1; i++, pt+=2) g_string_append_printf(str, "%.2f w %.2f %.2f m %.2f %.2f l S\n", item->widths[i], pt[0], pt[1], pt[2], pt[3]); old_thickness = 0.0; } if ((item->brush.color_rgba & 0xf0) != 0xf0) // undo transparent g_string_append(str, "Q "); } else if (item->type == ITEM_TEXT) { if ((item->brush.color_rgba & ~0xff) != old_text_rgba) g_string_append_printf(str, "%.2f %.2f %.2f rg ", RGBA_RGB(item->brush.color_rgba)); old_text_rgba = item->brush.color_rgba & ~0xff; fontmap = pango_ft2_font_map_new(); pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP (fontmap), 72, 72); context = pango_context_new(); pango_context_set_font_map(context, fontmap); layout = pango_layout_new(context); g_object_unref(fontmap); g_object_unref(context); font_desc = pango_font_description_from_string(item->font_name); pango_font_description_set_absolute_size(font_desc, item->font_size*PANGO_SCALE); pango_layout_set_font_description(layout, font_desc); pango_font_description_free(font_desc); pango_layout_set_text(layout, item->text, -1); // this code inspired by the code in libgnomeprint iter = pango_layout_get_iter(layout); do { run = pango_layout_iter_get_run(iter); if (run==NULL) continue; pango_layout_iter_get_run_extents (iter, NULL, &logical_rect); baseline = pango_layout_iter_get_baseline (iter); if (!PANGO_IS_FC_FONT(run->item->analysis.font)) continue; fcfont = PANGO_FC_FONT(run->item->analysis.font); pattern = fcfont->font_pattern; if (FcPatternGetString(pattern, FC_FILE, 0, (unsigned char **)&filename) != FcResultMatch || FcPatternGetInteger(pattern, FC_INDEX, 0, &font_id) != FcResultMatch) continue; ftface = pango_fc_font_lock_face(fcfont); current_page = -1; cur_font = NULL; g_string_append_printf(str, "BT %.2f 0 0 %.2f %.2f %.2f Tm ", item->font_size, -item->font_size, item->bbox.left + (gdouble) logical_rect.x/PANGO_SCALE, item->bbox.top + (gdouble) baseline/PANGO_SCALE); in_string = FALSE; for (i=0; iglyphs->num_glyphs; i++) { glyph_no = run->glyphs->glyphs[i].glyph; if (FT_IS_SFNT(ftface)) glyph_page = glyph_no/255; else glyph_page = 0; if (glyph_page != current_page) { cur_font = new_pdffont(xref, pdffonts, filename, font_id, ftface, glyph_page); if (in_string) g_string_append(str, ") Tj "); in_string = FALSE; g_string_append_printf(str, "/F%d 1 Tf ", cur_font->n_obj); } current_page = glyph_page; FT_Load_Glyph(ftface, glyph_no, FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP | FT_LOAD_IGNORE_TRANSFORM); advance = (int)(ftface->glyph->metrics.horiAdvance * cur_font->ft2ps + 0.5); if (!in_string) g_string_append_c(str, '('); in_string = TRUE; if (cur_font->is_truetype) { if (glyph_no) glyph_no = (glyph_no%255)+1; cur_font->glyphmap[glyph_no] = glyph_no; } else { for (j=1; j<=cur_font->num_glyphs_used; j++) if (cur_font->glyphmap[j] == glyph_no) break; if (j==256) j=0; // font is full, what do we do? if (j>cur_font->num_glyphs_used) { cur_font->glyphmap[j] = glyph_no; cur_font->num_glyphs_used++; if (FT_Get_Glyph_Name(ftface, glyph_no, tmpstr, 200) == FT_Err_Ok) cur_font->glyphpsnames[j] = g_strdup(tmpstr); else cur_font->glyphpsnames[j] = g_strdup(".notdef"); } glyph_no = j; } cur_font->advance[glyph_no] = advance; if (glyph_no=='\\' || glyph_no == '(' || glyph_no == ')' || glyph_no == 10 || glyph_no == 13) g_string_append_c(str, '\\'); if (glyph_no==10) g_string_append_c(str,'n'); else if (glyph_no==13) g_string_append_c(str,'r'); else g_string_append_c(str, glyph_no); } if (in_string) g_string_append(str, ") Tj "); g_string_append(str, "ET "); pango_fc_font_unlock_face(fcfont); } while (pango_layout_iter_next_run(iter)); pango_layout_iter_free(iter); g_object_unref(layout); } else if (item->type == ITEM_IMAGE) { cur_image = new_pdfimage(xref, pdfimages, item->image); cur_image->used_in_this_page = TRUE; g_string_append_printf(str, "\nq 1 0 0 1 %.2f %.2f cm %.2f 0 0 %.2f 0 %.2f cm /Im%d Do Q ", item->bbox.left, item->bbox.top, // translation item->bbox.right-item->bbox.left, item->bbox.top-item->bbox.bottom, item->bbox.bottom-item->bbox.top, // scaling cur_image->n_obj); } } } } // main printing function /* we use the following object numbers, starting with n_obj_catalog: 0 the document catalog 1 the page tree 2 the GS for the hiliters 3 ... the page objects */ gboolean print_to_pdf(char *filename) { FILE *f; GString *pdfbuf, *pgstrm, *zpgstrm, *tmpstr; int n_obj_catalog, n_obj_pages_offs, n_page, n_obj_bgpix, n_obj_prefix; int i, startxref; struct XrefTable xref; GList *pglist; struct Page *pg; gboolean annot, uses_pdf; gboolean use_hiliter; struct PdfInfo pdfinfo; struct PdfObj *obj; GList *pdffonts, *pdfimages, *list; struct PdfFont *font; struct PdfImage *image; char *tmpbuf; f = g_fopen(filename, "wb"); if (f == NULL) return FALSE; setlocale(LC_NUMERIC, "C"); annot = FALSE; xref.data = NULL; uses_pdf = FALSE; pdffonts = NULL; pdfimages = NULL; for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { pg = (struct Page *)pglist->data; if (pg->bg->type == BG_PDF) uses_pdf = TRUE; } if (uses_pdf && bgpdf.status != STATUS_NOT_INIT && bgpdf.file_contents!=NULL && !strncmp(bgpdf.file_contents, "%PDF-1.", 7)) { // parse the existing PDF file pdfbuf = g_string_new_len(bgpdf.file_contents, bgpdf.file_length); if (pdfbuf->str[7]<'4') pdfbuf->str[7] = '4'; // upgrade to 1.4 annot = pdf_parse_info(pdfbuf, &pdfinfo, &xref); if (!annot) { g_string_free(pdfbuf, TRUE); if (xref.data != NULL) g_free(xref.data); } } if (uses_pdf && !annot) { // couldn't parse the PDF: fall back to cairo? fclose(f); setlocale(LC_NUMERIC, ""); return FALSE; } if (!annot) { pdfbuf = g_string_new("%PDF-1.4\n%\370\357\365\362\n"); xref.n_alloc = xref.last = 0; xref.data = NULL; } // catalog and page tree n_obj_catalog = xref.last+1; n_obj_pages_offs = xref.last+4; make_xref(&xref, n_obj_catalog, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /Catalog /Pages %d 0 R >> endobj\n", n_obj_catalog, n_obj_catalog+1); make_xref(&xref, n_obj_catalog+1, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /Pages /Kids [", n_obj_catalog+1); for (i=0;i> endobj\n", journal.npages); make_xref(&xref, n_obj_catalog+2, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /ExtGState /CA %.2f >> endobj\n", n_obj_catalog+2, ui.hiliter_opacity); xref.last = n_obj_pages_offs + journal.npages-1; for (pglist = journal.pages, n_page = 0; pglist!=NULL; pglist = pglist->next, n_page++) { pg = (struct Page *)pglist->data; // draw the background and page into pgstrm pgstrm = g_string_new(""); g_string_printf(pgstrm, "q 1 0 0 -1 0 %.2f cm 1 J 1 j ", pg->height); n_obj_bgpix = -1; n_obj_prefix = -1; if (pg->bg->type == BG_SOLID) pdf_draw_solid_background(pg, pgstrm); else if (pg->bg->type == BG_PDF && annot && pdfinfo.pages[pg->bg->file_page_seq-1].contents!=NULL) { make_xref(&xref, xref.last+1, pdfbuf->len); n_obj_prefix = xref.last; tmpstr = make_pdfprefix(pdfinfo.pages+(pg->bg->file_page_seq-1), pg->width, pg->height); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %zu >> stream\n%s\nendstream\nendobj\n", n_obj_prefix, tmpstr->len, tmpstr->str); g_string_free(tmpstr, TRUE); g_string_prepend(pgstrm, "Q Q Q "); } else if (pg->bg->type == BG_PIXMAP || pg->bg->type == BG_PDF) n_obj_bgpix = pdf_draw_bitmap_background(pg, pgstrm, &xref, pdfbuf); // draw the page contents use_hiliter = FALSE; pdf_draw_page(pg, pgstrm, &use_hiliter, &xref, &pdffonts, &pdfimages); g_string_append_printf(pgstrm, "Q\n"); // deflate pgstrm and write it zpgstrm = do_deflate(pgstrm->str, pgstrm->len); g_string_free(pgstrm, TRUE); make_xref(&xref, xref.last+1, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Length %zu /Filter /FlateDecode>> stream\n", xref.last, zpgstrm->len); g_string_append_len(pdfbuf, zpgstrm->str, zpgstrm->len); g_string_free(zpgstrm, TRUE); g_string_append(pdfbuf, "endstream\nendobj\n"); // write the page object make_xref(&xref, n_obj_pages_offs+n_page, pdfbuf->len); g_string_append_printf(pdfbuf, "%d 0 obj\n<< /Type /Page /Parent %d 0 R /MediaBox [0 0 %.2f %.2f] ", n_obj_pages_offs+n_page, n_obj_catalog+1, pg->width, pg->height); if (n_obj_prefix>0) { obj = get_pdfobj(pdfbuf, &xref, pdfinfo.pages[pg->bg->file_page_seq-1].contents); if (obj->type != PDFTYPE_ARRAY) { free_pdfobj(obj); obj = dup_pdfobj(pdfinfo.pages[pg->bg->file_page_seq-1].contents); } g_string_append_printf(pdfbuf, "/Contents [%d 0 R ", n_obj_prefix); if (obj->type == PDFTYPE_REF) g_string_append_printf(pdfbuf, "%d %d R ", obj->intval, obj->num); if (obj->type == PDFTYPE_ARRAY) { for (i=0; inum; i++) { show_pdfobj(obj->elts[i], pdfbuf); g_string_append_c(pdfbuf, ' '); } } free_pdfobj(obj); g_string_append_printf(pdfbuf, "%d 0 R] ", xref.last); } else g_string_append_printf(pdfbuf, "/Contents %d 0 R ", xref.last); g_string_append(pdfbuf, "/Resources "); if (n_obj_prefix>0) obj = dup_pdfobj(pdfinfo.pages[pg->bg->file_page_seq-1].resources); else obj = NULL; if (obj!=NULL && obj->type!=PDFTYPE_DICT) { free_pdfobj(obj); obj=NULL; } if (obj==NULL) { obj = g_malloc(sizeof(struct PdfObj)); obj->type = PDFTYPE_DICT; obj->num = 0; obj->elts = NULL; obj->names = NULL; } add_dict_subentry(pdfbuf, &xref, obj, "/ProcSet", PDFTYPE_ARRAY, NULL, mk_pdfname("/PDF")); if (n_obj_bgpix>0 || pdfimages!=NULL) add_dict_subentry(pdfbuf, &xref, obj, "/ProcSet", PDFTYPE_ARRAY, NULL, mk_pdfname("/ImageC")); if (use_hiliter) add_dict_subentry(pdfbuf, &xref, obj, "/ExtGState", PDFTYPE_DICT, "/XoHi", mk_pdfref(n_obj_catalog+2)); if (n_obj_bgpix>0) add_dict_subentry(pdfbuf, &xref, obj, "/XObject", PDFTYPE_DICT, "/ImBg", mk_pdfref(n_obj_bgpix)); for (list=pdffonts; list!=NULL; list = list->next) { font = (struct PdfFont *)list->data; if (font->used_in_this_page) { add_dict_subentry(pdfbuf, &xref, obj, "/ProcSet", PDFTYPE_ARRAY, NULL, mk_pdfname("/Text")); tmpbuf = g_strdup_printf("/F%d", font->n_obj); add_dict_subentry(pdfbuf, &xref, obj, "/Font", PDFTYPE_DICT, tmpbuf, mk_pdfref(font->n_obj)); g_free(tmpbuf); } } for (list=pdfimages; list!=NULL; list = list->next) { image = (struct PdfImage *)list->data; if (image->used_in_this_page) { tmpbuf = g_strdup_printf("/Im%d", image->n_obj); add_dict_subentry(pdfbuf, &xref, obj, "/XObject", PDFTYPE_DICT, tmpbuf, mk_pdfref(image->n_obj)); g_free(tmpbuf); } } show_pdfobj(obj, pdfbuf); free_pdfobj(obj); g_string_append(pdfbuf, " >> endobj\n"); } // after the pages, we insert fonts and images for (list = pdffonts; list!=NULL; list = list->next) { font = (struct PdfFont *)list->data; embed_pdffont(pdfbuf, &xref, font); g_free(font->filename); g_free(font->fontname); g_free(font); } g_list_free(pdffonts); for (list = pdfimages; list!=NULL; list = list->next) { image = (struct PdfImage *)list->data; if (!pdf_draw_image(image, &xref, pdfbuf)) { return FALSE; } g_free(image); } g_list_free(pdfimages); // PDF trailer startxref = pdfbuf->len; if (annot) g_string_append_printf(pdfbuf, "xref\n%d %d\n", n_obj_catalog, xref.last-n_obj_catalog+1); else g_string_append_printf(pdfbuf, "xref\n0 %d\n0000000000 65535 f \n", xref.last+1); for (i=n_obj_catalog; i<=xref.last; i++) g_string_append_printf(pdfbuf, "%010d 00000 n \n", xref.data[i]); g_string_append_printf(pdfbuf, "trailer\n<< /Size %d /Root %d 0 R ", xref.last+1, n_obj_catalog); if (annot) { g_string_append_printf(pdfbuf, "/Prev %d ", pdfinfo.startxref); // keeping encryption info somehow doesn't work. // xournal can't annotate encrypted PDFs anyway... /* obj = get_dict_entry(pdfinfo.trailerdict, "/Encrypt"); if (obj!=NULL) { g_string_append_printf(pdfbuf, "/Encrypt "); show_pdfobj(obj, pdfbuf); } */ } g_string_append_printf(pdfbuf, ">>\nstartxref\n%d\n%%%%EOF\n", startxref); g_free(xref.data); if (annot) { free_pdfobj(pdfinfo.trailerdict); if (pdfinfo.pages!=NULL) for (i=0; istr, 1, pdfbuf->len, f) < pdfbuf->len) { fclose(f); g_string_free(pdfbuf, TRUE); return FALSE; } fclose(f); g_string_free(pdfbuf, TRUE); return TRUE; } /*********** Printing via cairo and gtk-print **********/ // does the same job as update_canvas_bg(), but to a cairo context void print_background(cairo_t *cr, struct Page *pg) { double x, y; GdkPixbuf *pix; BgPdfPage *pgpdf; PopplerPage *pdfpage; cairo_surface_t *cr_pixbuf; double pgwidth, pgheight; if (pg->bg->type == BG_SOLID) { cairo_set_source_rgb(cr, RGBA_RGB(pg->bg->color_rgba)); cairo_rectangle(cr, 0, 0, pg->width, pg->height); cairo_fill(cr); if (!ui.print_ruling) return; if (pg->bg->ruling == RULING_NONE) return; cairo_set_source_rgb(cr, RGBA_RGB(RULING_COLOR)); cairo_set_line_width(cr, RULING_THICKNESS); if (pg->bg->ruling == RULING_GRAPH) { for (x=RULING_GRAPHSPACING; xwidth-1; x+=RULING_GRAPHSPACING) { cairo_move_to(cr, x, 0); cairo_line_to(cr, x, pg->height); } for (y=RULING_GRAPHSPACING; yheight-1; y+=RULING_GRAPHSPACING) { cairo_move_to(cr, 0, y); cairo_line_to(cr, pg->width, y); } cairo_stroke(cr); return; } for (y=RULING_TOPMARGIN; yheight-1; y+=RULING_SPACING) { cairo_move_to(cr, 0, y); cairo_line_to(cr, pg->width, y); } cairo_stroke(cr); if (pg->bg->ruling == RULING_LINED) { cairo_set_source_rgb(cr, RGBA_RGB(RULING_MARGIN_COLOR)); cairo_move_to(cr, RULING_LEFTMARGIN, 0); cairo_line_to(cr, RULING_LEFTMARGIN, pg->height); cairo_stroke(cr); } return; } else if (pg->bg->type == BG_PDF) { if (!bgpdf.document) return; pdfpage = poppler_document_get_page(bgpdf.document, pg->bg->file_page_seq-1); if (!pdfpage) return; poppler_page_get_size(pdfpage, &pgwidth, &pgheight); cairo_save(cr); cairo_scale(cr, pg->width/pgwidth, pg->height/pgheight); poppler_page_render(pdfpage, cr); cairo_restore(cr); g_object_unref(pdfpage); } else if (pg->bg->type == BG_PIXMAP) { cairo_save(cr); cairo_scale(cr, pg->width/gdk_pixbuf_get_width(pg->bg->pixbuf), pg->height/gdk_pixbuf_get_height(pg->bg->pixbuf)); gdk_cairo_set_source_pixbuf(cr, pg->bg->pixbuf, 0, 0); cairo_rectangle(cr, 0, 0, gdk_pixbuf_get_width(pg->bg->pixbuf), gdk_pixbuf_get_height(pg->bg->pixbuf)); cairo_fill(cr); cairo_restore(cr); } } void print_page_to_cairo(cairo_t *cr, struct Page *pg, gdouble width, gdouble height, PangoLayout *layout) { gdouble scale; guint old_rgba; double old_thickness; GList *layerlist, *itemlist; struct Layer *l; struct Item *item; int i; double *pt; PangoFontDescription *font_desc; scale = MIN(width/pg->width, height/pg->height); cairo_translate(cr, (width-scale*pg->width)/2, (height-scale*pg->height)/2); cairo_scale(cr, scale, scale); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); print_background(cr, pg); old_rgba = predef_colors_rgba[COLOR_BLACK]; cairo_set_source_rgb(cr, 0, 0, 0); old_thickness = 0.0; for (layerlist = pg->layers; layerlist!=NULL; layerlist = layerlist->next) { l = (struct Layer *)layerlist->data; for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->type == ITEM_STROKE || item->type == ITEM_TEXT) { if (item->brush.color_rgba != old_rgba) cairo_set_source_rgba(cr, RGBA_RGB(item->brush.color_rgba), RGBA_ALPHA(item->brush.color_rgba)); old_rgba = item->brush.color_rgba; } if (item->type == ITEM_STROKE) { if (item->brush.thickness != old_thickness) cairo_set_line_width(cr, item->brush.thickness); pt = item->path->coords; if (!item->brush.variable_width) { cairo_move_to(cr, pt[0], pt[1]); for (i=1, pt+=2; ipath->num_points; i++, pt+=2) cairo_line_to(cr, pt[0], pt[1]); cairo_stroke(cr); old_thickness = item->brush.thickness; } else { for (i=0; ipath->num_points-1; i++, pt+=2) { cairo_move_to(cr, pt[0], pt[1]); cairo_set_line_width(cr, item->widths[i]); cairo_line_to(cr, pt[2], pt[3]); cairo_stroke(cr); } old_thickness = 0.0; } } if (item->type == ITEM_TEXT) { font_desc = pango_font_description_from_string(item->font_name); if (item->font_size) pango_font_description_set_absolute_size(font_desc, item->font_size*PANGO_SCALE); pango_layout_set_font_description(layout, font_desc); pango_font_description_free(font_desc); pango_layout_set_text(layout, item->text, -1); cairo_move_to(cr, item->bbox.left, item->bbox.top); pango_cairo_show_layout(cr, layout); } if (item->type == ITEM_IMAGE) { double scalex = (item->bbox.right-item->bbox.left)/gdk_pixbuf_get_width(item->image); double scaley = (item->bbox.bottom-item->bbox.top)/gdk_pixbuf_get_height(item->image); cairo_scale(cr, scalex, scaley); gdk_cairo_set_source_pixbuf(cr,item->image, item->bbox.left/scalex, item->bbox.top/scaley); cairo_scale(cr, 1/scalex, 1/scaley); cairo_paint(cr); old_rgba = predef_colors_rgba[COLOR_BLACK]; cairo_set_source_rgb(cr, 0, 0, 0); } } } } #if GTK_CHECK_VERSION(2, 10, 0) void print_job_render_page(GtkPrintOperation *print, GtkPrintContext *context, gint pageno, gpointer user_data) { cairo_t *cr; gdouble width, height; struct Page *pg; PangoLayout *layout; pg = (struct Page *)g_list_nth_data(journal.pages, pageno); cr = gtk_print_context_get_cairo_context(context); width = gtk_print_context_get_width(context); height = gtk_print_context_get_height(context); layout = gtk_print_context_create_pango_layout(context); print_page_to_cairo(cr, pg, width, height, layout); g_object_unref(layout); } #endif gboolean print_to_pdf_cairo(char *filename) { cairo_t *cr; cairo_surface_t *surface; struct Page *pg; GList *list; PangoLayout *layout; cairo_status_t retval; surface = cairo_pdf_surface_create(filename, ui.default_page.width, ui.default_page.height); for (list = journal.pages; list!=NULL; list = list->next) { pg = (struct Page *)list->data; cairo_pdf_surface_set_size(surface, pg->width, pg->height); cr = cairo_create(surface); layout = pango_cairo_create_layout(cr); print_page_to_cairo(cr, pg, pg->width, pg->height, layout); g_object_unref(layout); cairo_destroy(cr); cairo_surface_show_page(surface); } cairo_surface_finish(surface); retval = cairo_surface_status(surface); cairo_surface_destroy(surface); return (retval == CAIRO_STATUS_SUCCESS); } xournal-0.4.8/src/xo-callbacks.h0000644000175000017500000006143212353616660016164 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include void on_fileNew_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fileNewBackground_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fileOpen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fileSave_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fileSaveAs_activate (GtkMenuItem *menuitem, gpointer user_data); void on_filePrintOptions_activate (GtkMenuItem *menuitem, gpointer user_data); void on_filePrint_activate (GtkMenuItem *menuitem, gpointer user_data); void on_filePrintPDF_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fileQuit_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editUndo_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editRedo_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editCut_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editCopy_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editPaste_activate (GtkMenuItem *menuitem, gpointer user_data); void on_editDelete_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewContinuous_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewHorizontal_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewOnePage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewZoomIn_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewZoomOut_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewNormalSize_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewPageWidth_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewFirstPage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewPreviousPage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewNextPage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewLastPage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewShowLayer_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewHideLayer_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalNewPageBefore_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalNewPageAfter_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalNewPageEnd_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalDeletePage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalNewLayer_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalDeleteLayer_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalFlatten_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalPaperSize_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorWhite_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorYellow_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorPink_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorOrange_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorBlue_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorGreen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_papercolorOther_activate (GtkMenuItem *menuitem, gpointer user_data); void on_paperstylePlain_activate (GtkMenuItem *menuitem, gpointer user_data); void on_paperstyleLined_activate (GtkMenuItem *menuitem, gpointer user_data); void on_paperstyleRuled_activate (GtkMenuItem *menuitem, gpointer user_data); void on_paperstyleGraph_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalLoadBackground_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalScreenshot_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalApplyAllPages_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsPen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsEraser_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsHighlighter_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsText_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsSelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsSelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsVerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorBlack_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorBlue_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorRed_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorGreen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorGray_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorLightBlue_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorLightGreen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorMagenta_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorOrange_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorYellow_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorWhite_activate (GtkMenuItem *menuitem, gpointer user_data); void on_colorOther_activate (GtkMenuItem *menuitem, gpointer user_data); void on_penthicknessVeryFine_activate (GtkMenuItem *menuitem, gpointer user_data); void on_penthicknessFine_activate (GtkMenuItem *menuitem, gpointer user_data); void on_penthicknessMedium_activate (GtkMenuItem *menuitem, gpointer user_data); void on_penthicknessThick_activate (GtkMenuItem *menuitem, gpointer user_data); void on_penthicknessVeryThick_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserFine_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserMedium_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserThick_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserStandard_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserWhiteout_activate (GtkMenuItem *menuitem, gpointer user_data); void on_eraserDeleteStrokes_activate (GtkMenuItem *menuitem, gpointer user_data); void on_highlighterFine_activate (GtkMenuItem *menuitem, gpointer user_data); void on_highlighterMedium_activate (GtkMenuItem *menuitem, gpointer user_data); void on_highlighterThick_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsTextFont_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsDefaultPen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsDefaultEraser_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsDefaultHighlighter_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsDefaultText_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsSetAsDefault_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsRuler_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsSavePreferences_activate (GtkMenuItem *menuitem, gpointer user_data); void on_helpIndex_activate (GtkMenuItem *menuitem, gpointer user_data); void on_helpAbout_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolEraser_activate (GtkToolButton *toolbutton, gpointer user_data); void on_buttonToolDefault_clicked (GtkToolButton *toolbutton, gpointer user_data); void on_buttonFine_clicked (GtkToolButton *toolbutton, gpointer user_data); void on_buttonMedium_clicked (GtkToolButton *toolbutton, gpointer user_data); void on_buttonThick_clicked (GtkToolButton *toolbutton, gpointer user_data); gboolean on_canvas_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_canvas_button_release_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_canvas_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data); gboolean on_canvas_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data); gboolean on_canvas_proximity_event (GtkWidget *widget, GdkEventProximity *event, gpointer user_data); gboolean on_canvas_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_canvas_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data); gboolean on_canvas_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data); void on_comboLayer_changed (GtkComboBox *combobox, gpointer user_data); gboolean on_winMain_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_optionsUseXInput_activate (GtkMenuItem *menuitem, gpointer user_data); void on_vscroll_changed (GtkAdjustment *adjustment, gpointer user_data); void on_hscroll_changed (GtkAdjustment *adjustment, gpointer user_data); void on_spinPageNo_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_journalDefaultBackground_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalSetAsDefault_activate (GtkMenuItem *menuitem, gpointer user_data); void on_comboStdSizes_changed (GtkComboBox *combobox, gpointer user_data); void on_entryWidth_changed (GtkEditable *editable, gpointer user_data); void on_entryHeight_changed (GtkEditable *editable, gpointer user_data); void on_comboUnit_changed (GtkComboBox *combobox, gpointer user_data); void on_viewFullscreen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsButtonMappings_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsProgressiveBG_activate (GtkMenuItem *menuitem, gpointer user_data); void on_mru_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Pen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Eraser_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Highlighter_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Text_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2SelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2SelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2VerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2LinkBrush_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2CopyBrush_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Pen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Eraser_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Highlighter_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Text_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3SelectRegion_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3SelectRectangle_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3VerticalSpace_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3LinkBrush_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3CopyBrush_activate (GtkMenuItem *menuitem, gpointer user_data); void on_viewSetZoom_activate (GtkMenuItem *menuitem, gpointer user_data); void on_spinZoom_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_radioZoom_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radioZoom100_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radioZoomWidth_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radioZoomHeight_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_toolsHand_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Hand_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Hand_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsPrintRuling_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsAutoloadPdfXoj_activate (GtkMenuItem *menuitem, gpointer user_data); void on_fontButton_font_set (GtkFontButton *fontbutton, gpointer user_data); void on_optionsLeftHanded_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsShortenMenus_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsAutoSavePrefs_activate (GtkMenuItem *menuitem, gpointer user_data); void on_toolsReco_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsPressureSensitive_activate (GtkMenuItem *menuitem, gpointer user_data); void on_buttonColorChooser_set (GtkColorButton *colorbutton, gpointer user_data); void on_optionsButtonsSwitchMappings_activate(GtkMenuItem *menuitem, gpointer user_data); void on_toolsImage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button2Image_activate (GtkMenuItem *menuitem, gpointer user_data); void on_button3Image_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsPenCursor_activate (GtkCheckMenuItem *checkmenuitem, gpointer user_data); void on_optionsTouchAsHandTool_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsPenDisablesTouch_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsDesignateTouchscreen_activate (GtkMenuItem *menuitem, gpointer user_data); void on_journalNewPageKeepsBG_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsAutosaveXoj_activate (GtkMenuItem *menuitem, gpointer user_data); void on_optionsLegacyPDFExport_activate (GtkMenuItem *menuitem, gpointer user_data); xournal-0.4.8/src/xo-clipboard.c0000644000175000017500000003646212011546041016166 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "xournal.h" #include "xo-callbacks.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-misc.h" #include "xo-paint.h" #include "xo-image.h" // the various formats in which we might present clipboard data #define TARGET_XOURNAL 1 #define TARGET_TEXT 2 #define TARGET_PIXBUF 3 #define XOURNAL_TARGET_ATOM "_XOURNAL" /* change when serialized data format changes incompatibly */ typedef struct XojSelectionData { int xo_data_len; char *xo_data; gchar *text_data; GdkPixbuf *image_data; } XojSelectionData; void callback_clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, gpointer user_data) { struct XojSelectionData *sel = (struct XojSelectionData *)user_data; switch (info) { case TARGET_XOURNAL: gtk_selection_data_set(selection_data, gdk_atom_intern(XOURNAL_TARGET_ATOM, FALSE), 8, sel->xo_data, sel->xo_data_len); break; case TARGET_TEXT: if (sel->text_data!=NULL) gtk_selection_data_set_text(selection_data, sel->text_data, -1); break; case TARGET_PIXBUF: if (sel->image_data!=NULL) gtk_selection_data_set_pixbuf(selection_data, sel->image_data); break; } } void callback_clipboard_clear(GtkClipboard *clipboard, gpointer user_data) { struct XojSelectionData *sel = (struct XojSelectionData *)user_data; if (sel->xo_data!=NULL) g_free(sel->xo_data); if (sel->text_data!=NULL) g_free(sel->text_data); if (sel->image_data!=NULL) g_object_unref(sel->image_data); g_free(sel); } void selection_to_clip(void) { struct XojSelectionData *sel; int bufsz, nitems, val; char *p; GList *list; struct Item *item; GtkTargetList *targetlist; GtkTargetEntry *targets; int n_targets; if (ui.selection == NULL) return; bufsz = 2*sizeof(int) // bufsz, nitems + sizeof(struct BBox); // bbox nitems = 0; for (list = ui.selection->items; list != NULL; list = list->next) { item = (struct Item *)list->data; nitems++; if (item->type == ITEM_STROKE) { bufsz+= sizeof(int) // type + sizeof(struct Brush) // brush + sizeof(int) // num_points + 2*item->path->num_points*sizeof(double); // the points if (item->brush.variable_width) bufsz += (item->path->num_points-1)*sizeof(double); // the widths } else if (item->type == ITEM_TEXT) { bufsz+= sizeof(int) // type + sizeof(struct Brush) // brush + 2*sizeof(double) // bbox upper-left + sizeof(int) // text len + strlen(item->text)+1 // text + sizeof(int) // font_name len + strlen(item->font_name)+1 // font_name + sizeof(double); // font_size } else if (item->type == ITEM_IMAGE) { if (item->image_png == NULL) { set_cursor_busy(TRUE); if (!gdk_pixbuf_save_to_buffer(item->image, &item->image_png, &item->image_png_len, "png", NULL, NULL)) item->image_png_len = 0; // failed for some reason, so forget it set_cursor_busy(FALSE); } bufsz+= sizeof(int) // type + sizeof(struct BBox) + sizeof(gsize) // png_buflen + item->image_png_len; } else bufsz+= sizeof(int); // type } // allocate selection data structure and buffer sel = g_malloc(sizeof(struct XojSelectionData)); sel->xo_data_len = bufsz; sel->xo_data = g_malloc(bufsz); sel->image_data = NULL; sel->text_data = NULL; // fill in the data p = sel->xo_data; g_memmove(p, &bufsz, sizeof(int)); p+= sizeof(int); g_memmove(p, &nitems, sizeof(int)); p+= sizeof(int); g_memmove(p, &ui.selection->bbox, sizeof(struct BBox)); p+= sizeof(struct BBox); for (list = ui.selection->items; list != NULL; list = list->next) { item = (struct Item *)list->data; g_memmove(p, &item->type, sizeof(int)); p+= sizeof(int); if (item->type == ITEM_STROKE) { g_memmove(p, &item->brush, sizeof(struct Brush)); p+= sizeof(struct Brush); g_memmove(p, &item->path->num_points, sizeof(int)); p+= sizeof(int); g_memmove(p, item->path->coords, 2*item->path->num_points*sizeof(double)); p+= 2*item->path->num_points*sizeof(double); if (item->brush.variable_width) { g_memmove(p, item->widths, (item->path->num_points-1)*sizeof(double)); p+= (item->path->num_points-1)*sizeof(double); } } if (item->type == ITEM_TEXT) { g_memmove(p, &item->brush, sizeof(struct Brush)); p+= sizeof(struct Brush); g_memmove(p, &item->bbox.left, sizeof(double)); p+= sizeof(double); g_memmove(p, &item->bbox.top, sizeof(double)); p+= sizeof(double); val = strlen(item->text); g_memmove(p, &val, sizeof(int)); p+= sizeof(int); g_memmove(p, item->text, val+1); p+= val+1; val = strlen(item->font_name); g_memmove(p, &val, sizeof(int)); p+= sizeof(int); g_memmove(p, item->font_name, val+1); p+= val+1; g_memmove(p, &item->font_size, sizeof(double)); p+= sizeof(double); if (nitems==1) sel->text_data = g_strdup(item->text); // single text item } if (item->type == ITEM_IMAGE) { g_memmove(p, &item->bbox, sizeof(struct BBox)); p+= sizeof(struct BBox); g_memmove(p, &item->image_png_len, sizeof(gsize)); p+= sizeof(gsize); if (item->image_png_len > 0) { g_memmove(p, item->image_png, item->image_png_len); p+= item->image_png_len; } if (nitems==1) sel->image_data = gdk_pixbuf_copy(item->image); // single image } } /* build list of valid targets */ targetlist = gtk_target_list_new(NULL, 0); gtk_target_list_add(targetlist, gdk_atom_intern(XOURNAL_TARGET_ATOM, FALSE), 0, TARGET_XOURNAL); if (sel->image_data!=NULL) gtk_target_list_add_image_targets(targetlist, TARGET_PIXBUF, TRUE); if (sel->text_data!=NULL) gtk_target_list_add_text_targets(targetlist, TARGET_TEXT); targets = gtk_target_table_new_from_list(targetlist, &n_targets); gtk_target_list_unref(targetlist); gtk_clipboard_set_with_data(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), targets, n_targets, callback_clipboard_get, callback_clipboard_clear, sel); gtk_target_table_free(targets, n_targets); } // paste xournal native data void clipboard_paste_from_xournal(GtkSelectionData *sel_data) { unsigned char *p; int nitems, npts, i, len; struct Item *item; double hoffset, voffset, cx, cy; double *pf; int sx, sy, wx, wy; reset_selection(); ui.selection = g_new(struct Selection, 1); p = sel_data->data + sizeof(int); g_memmove(&nitems, p, sizeof(int)); p+= sizeof(int); ui.selection->type = ITEM_SELECTRECT; ui.selection->layer = ui.cur_layer; g_memmove(&ui.selection->bbox, p, sizeof(struct BBox)); p+= sizeof(struct BBox); ui.selection->items = NULL; // find by how much we translate the pasted selection gnome_canvas_get_scroll_offsets(canvas, &sx, &sy); gdk_window_get_geometry(GTK_WIDGET(canvas)->window, NULL, NULL, &wx, &wy, NULL); gnome_canvas_window_to_world(canvas, sx + wx/2, sy + wy/2, &cx, &cy); cx -= ui.cur_page->hoffset; cy -= ui.cur_page->voffset; if (cx + (ui.selection->bbox.right-ui.selection->bbox.left)/2 > ui.cur_page->width) cx = ui.cur_page->width - (ui.selection->bbox.right-ui.selection->bbox.left)/2; if (cx - (ui.selection->bbox.right-ui.selection->bbox.left)/2 < 0) cx = (ui.selection->bbox.right-ui.selection->bbox.left)/2; if (cy + (ui.selection->bbox.bottom-ui.selection->bbox.top)/2 > ui.cur_page->height) cy = ui.cur_page->height - (ui.selection->bbox.bottom-ui.selection->bbox.top)/2; if (cy - (ui.selection->bbox.bottom-ui.selection->bbox.top)/2 < 0) cy = (ui.selection->bbox.bottom-ui.selection->bbox.top)/2; hoffset = cx - (ui.selection->bbox.right+ui.selection->bbox.left)/2; voffset = cy - (ui.selection->bbox.top+ui.selection->bbox.bottom)/2; ui.selection->bbox.left += hoffset; ui.selection->bbox.right += hoffset; ui.selection->bbox.top += voffset; ui.selection->bbox.bottom += voffset; ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", ui.selection->bbox.left, "x2", ui.selection->bbox.right, "y1", ui.selection->bbox.top, "y2", ui.selection->bbox.bottom, NULL); make_dashed(ui.selection->canvas_item); while (nitems-- > 0) { item = g_new(struct Item, 1); ui.selection->items = g_list_append(ui.selection->items, item); ui.cur_layer->items = g_list_append(ui.cur_layer->items, item); ui.cur_layer->nitems++; g_memmove(&item->type, p, sizeof(int)); p+= sizeof(int); if (item->type == ITEM_STROKE) { g_memmove(&item->brush, p, sizeof(struct Brush)); p+= sizeof(struct Brush); g_memmove(&npts, p, sizeof(int)); p+= sizeof(int); item->path = gnome_canvas_points_new(npts); pf = (double *)p; for (i=0; ipath->coords[2*i] = pf[2*i] + hoffset; item->path->coords[2*i+1] = pf[2*i+1] + voffset; } p+= 2*item->path->num_points*sizeof(double); if (item->brush.variable_width) { item->widths = g_memdup(p, (item->path->num_points-1)*sizeof(double)); p+= (item->path->num_points-1)*sizeof(double); } else item->widths = NULL; update_item_bbox(item); make_canvas_item_one(ui.cur_layer->group, item); } if (item->type == ITEM_TEXT) { g_memmove(&item->brush, p, sizeof(struct Brush)); p+= sizeof(struct Brush); g_memmove(&item->bbox.left, p, sizeof(double)); p+= sizeof(double); g_memmove(&item->bbox.top, p, sizeof(double)); p+= sizeof(double); item->bbox.left += hoffset; item->bbox.top += voffset; g_memmove(&len, p, sizeof(int)); p+= sizeof(int); item->text = g_malloc(len+1); g_memmove(item->text, p, len+1); p+= len+1; g_memmove(&len, p, sizeof(int)); p+= sizeof(int); item->font_name = g_malloc(len+1); g_memmove(item->font_name, p, len+1); p+= len+1; g_memmove(&item->font_size, p, sizeof(double)); p+= sizeof(double); make_canvas_item_one(ui.cur_layer->group, item); } if (item->type == ITEM_IMAGE) { item->canvas_item = NULL; item->image_png = NULL; item->image_png_len = 0; g_memmove(&item->bbox, p, sizeof(struct BBox)); p+= sizeof(struct BBox); item->bbox.left += hoffset; item->bbox.right += hoffset; item->bbox.top += voffset; item->bbox.bottom += voffset; g_memmove(&item->image_png_len, p, sizeof(gsize)); p+= sizeof(gsize); if (item->image_png_len > 0) { item->image_png = g_memdup(p, item->image_png_len); item->image = pixbuf_from_buffer(item->image_png, item->image_png_len); p+= item->image_png_len; } else { item->image = NULL; } make_canvas_item_one(ui.cur_layer->group, item); } } prepare_new_undo(); undo->type = ITEM_PASTE; undo->layer = ui.cur_layer; undo->itemlist = g_list_copy(ui.selection->items); gtk_selection_data_free(sel_data); update_copy_paste_enabled(); update_color_menu(); update_thickness_buttons(); update_color_buttons(); update_font_button(); update_cursor(); // FIXME: can't know if pointer is within selection! } // paste external text void clipboard_paste_text(gchar *text) { struct Item *item; double pt[2]; reset_selection(); get_current_pointer_coords(pt); set_current_page(pt); ui.selection = g_new(struct Selection, 1); ui.selection->type = ITEM_SELECTRECT; ui.selection->layer = ui.cur_layer; ui.selection->items = NULL; item = g_new(struct Item, 1); ui.selection->items = g_list_append(ui.selection->items, item); ui.cur_layer->items = g_list_append(ui.cur_layer->items, item); ui.cur_layer->nitems++; item->type = ITEM_TEXT; g_memmove(&(item->brush), &(ui.brushes[ui.cur_mapping][TOOL_PEN]), sizeof(struct Brush)); item->text = text; // text was newly allocated, we keep it item->font_name = g_strdup(ui.font_name); item->font_size = ui.font_size; item->bbox.left = pt[0]; item->bbox.top = pt[1]; make_canvas_item_one(ui.cur_layer->group, item); update_item_bbox(item); // move the text to fit on the page if needed if (item->bbox.right > ui.cur_page->width) item->bbox.left += ui.cur_page->width-item->bbox.right; if (item->bbox.left < 0) item->bbox.left = 0; if (item->bbox.bottom > ui.cur_page->height) item->bbox.top += ui.cur_page->height-item->bbox.bottom; if (item->bbox.top < 0) item->bbox.top = 0; gnome_canvas_item_set(item->canvas_item, "x", item->bbox.left, "y", item->bbox.top, NULL); update_item_bbox(item); ui.selection->bbox = item->bbox; ui.selection->canvas_item = gnome_canvas_item_new(ui.cur_layer->group, gnome_canvas_rect_get_type(), "width-pixels", 1, "outline-color-rgba", 0x000000ff, "fill-color-rgba", 0x80808040, "x1", ui.selection->bbox.left, "x2", ui.selection->bbox.right, "y1", ui.selection->bbox.top, "y2", ui.selection->bbox.bottom, NULL); make_dashed(ui.selection->canvas_item); prepare_new_undo(); undo->type = ITEM_PASTE; undo->layer = ui.cur_layer; undo->itemlist = g_list_copy(ui.selection->items); update_copy_paste_enabled(); update_color_menu(); update_thickness_buttons(); update_color_buttons(); update_font_button(); update_cursor(); // FIXME: can't know if pointer is within selection! } // paste an external image void clipboard_paste_image(GdkPixbuf *pixbuf) { double pt[2]; reset_selection(); get_current_pointer_coords(pt); set_current_page(pt); create_image_from_pixbuf(pixbuf, pt); } // work out what format the clipboard data is in, and paste accordingly void clipboard_paste(void) { GtkSelectionData *sel_data; GtkClipboard *clipboard; GdkPixbuf *pixbuf; gchar *text; if (ui.cur_layer == NULL) return; ui.cur_item_type = ITEM_PASTE; clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); // try xournal data sel_data = gtk_clipboard_wait_for_contents( clipboard, gdk_atom_intern(XOURNAL_TARGET_ATOM, FALSE)); #ifdef WIN32 // avoid a win32 bug showing images as xournal data if (gtk_selection_data_get_data_type(sel_data)!=gdk_atom_intern(XOURNAL_TARGET_ATOM, FALSE)) { gtk_selection_data_free(sel_data); sel_data = NULL; } #endif ui.cur_item_type = ITEM_NONE; if (sel_data != NULL) { clipboard_paste_from_xournal(sel_data); return; } // try image data pixbuf = gtk_clipboard_wait_for_image(clipboard); if (pixbuf != NULL) { clipboard_paste_image(pixbuf); return; } // try text data text = gtk_clipboard_wait_for_text(clipboard); if (text != NULL) { clipboard_paste_text(text); return; } } xournal-0.4.8/src/TODO0000644000175000017500000003037112353534321014127 0ustar aurouxaurouxList of features to be implemented (not in any particular order) ---------------------------------------------------------------- - collaborative editing (see discussion with Erik Demaine) - porting to MacOS; merge Nokia port - multiple-scenario undo history - collaborative: allow non-x86 endianness (for ints, for floats?) - collaborative: have an initial undo item = contents of the initial xoj file + attachments for bitmap, pdf, and ps backgrounds - cleanup of undo history (keep track of refcounts, delete old undo) save-and-clear-undo ? - image patch related: - paste and selresize don't put rectangle at top - need option for image mode to revert to previous tool? - optimize storage of embedded images by detecting duplicates (D. German) - paste images should resize/position sensibly, e.g. not paste at location of paste button! BUGS: - lingering issues with synaptics touchpads? (#2872667) (todo) - set device to Absolute mode at startup? (GDK doesn't expose API, cf XSetDeviceMode() in /usr/include/X11/extensions/XInput.h) - lingering issues with Fujitsu, touch, etc. - ButtonPress wrong coordinates - export to PDF should see cropbox size if smaller, and map the cropbox -- not the entire page -- to the page area! (2009-11-18 forum) BEHAVIOR TODO: - option to have "Save Prefs" save current brushes as settings, not defaults - method to map more general devices to specific tools or to Ignore (e.g.: X220T ignore trackpoint; map touchscreen to Hand, eraser to Eraser) WIN32: - test further - write an installer - bug: cairo-scaled-font in printing? (2009-11-18 bug tracker) - bug: second copy-paste brings back older paste items - bug: sometimes seems to hang for a while at/near end_text() ? PATCHES TO INCORPORATE: - ezyang e-mail of 11/28/2011: patches in Ubuntu to fix PDF showing up? http://archive.ubuntu.com/ubuntu/pool/universe/x/xournal/xournal_0.4.5-3.debian.tar.gz actually not necessary anymore? (ezyang 12/2/2011) - tauu e-mail of 12/1/2011: 8 small patches for win32, uploaded on tracker https://sourceforge.net/tracker/index.php?func=detail&aid=3447356&group_id=163434&atid=827735 (not usable as such; but a version of XINPUT_BUGFIX to map the device to a monitor, and awareness of screen recofigurations, are both desirable) - patch: add Alt-Up/Dn accelerators for show/hide layer. See show_hide_layer.patch * my own patch noresize_background_v1.patch (also in xournal-working/) ** patch: ortho/snap (revised Apr 13 2009) xournal_ortho_snap_patch_4 (by Josef Pavlicek) ** customize paper ruling (Gautam Iyer e-mail Nov 30 2009 / SF tracker) ** cairo export to PNG (Man = Paulo Neves, e-mail Feb 3 '10, saved as cairo-png-rendering.diff.txt (refactor printing of page to cairo surface with the gtk-print code). - patch by S. Guest shortcut to increase/decrease text font size by 1 point (?) - acts just as if one had clicked font sel box and resized (affects sel text + cur font) - make line spacing in text objects customizable: to a fixed scaling factor, a fixed number of units, or the paper ruling (esp. the latter!!) - page size dialog box should have a check button to keep background size the same (so rescaling creates margin around bitmap or PDF background). This will need an extension to the file format, to allow a page background to have a different size from the page itself. - roadmap towards SVG support: see 1/25/2010 Mark Edgington email & reply (1) export to SVG (using pages and groups for pages and layers; use comment tags to make export nonlossy; (2) import from this subset of SVG; (3) add SVG to the file-open and save formats - roadmap towards PDF encapsulation: see 1/29/2010 forum posts When exporting to PDF, don't just append our annotations as PDF code but also include the .xoj file within the pdf, and ensure the initial pdf is well-delimited from the rest. When opening a PDF that includes such markings, discard the annotation part of the PDF and open the embedded xoj instead. Later, offer such PDF as a file-open and save format (even when there's no PDF background being annotated!!). *** should have Open, Save, Save As manipulate at least 3 formats: - XOJ - PDF with embedded xoj file in an object (opens with annot. in PDF viewer, with background only + separate xoj in xournal) - SVG (subset only) additionally, should have "print to": printer, PDF, SVG, bitmap. - allow djvu and other backgrounds (but then can't export to PDF) - PDF bg memory usage throttling / delete oldest pdf backgrounds - replace ttsubset by something more modern? (eg. from cairo ?) - auto-hide patch from ~/prog/src/xournal-autohide/ ? (check for cpu usage; handle BOTH edges and only (un)hide stuff at the correct edge!) ** UI update (Bob McElrath) -- eliminating status bar, compact layout, "compact interface" by default; themes, with line in config file to load pixmaps from pixmaps/$THEME/ (see Jan 9, 2009 emails) ** "new page before/after" on a PDF bg page should ask: same page, other page of PDF file, default paper ** should also have in Journal -> Paper style the option "Pdf page ..." which then lets us change the page number. - new recognizer icon (andruk on patches tracker) - recognizer: if variable-width, associate average width - recognizer should snap to existing recognized geometric shapes - patch to find text in PDF (dmg = Daniel German, Nov 13 2009) - search through text (xoj and PDF background) (with highlight? forwd/backwd) (see evince). Also: ability to select rectangle on PDF bg and copy-paste as bitmap or as text. - improve recognizer: two passes for polygons (low tolerance, then higher) to better detect elongated rectangles? (if low tolerance recognizer doesn't get a rectangle, then use higher tolerance for everything else, since otherwise there's too much risk of splitting a segment into 2) - snap-to-grid (also for ruler & recognizer vertices) and maybe also snap-to-vertices (option for ruler and recognizer)? - config option: config save current tool options instead of default ones - bug in truetype subset generation w/ Adobe 9, see if gtk-print any better? - drag-and-drop, copy-paste text & images directly into xournal - proximity detection: eraser proximity switches mapping? proximity out removes cursor until next motionnotify? - render page to bitmap: for export, preview, and copy-paste (render using libart, see how gnomecanvas does it?) NO: render using Cairo !!! (copy-paste: config option to render only current layer or all below?) - cut-and-paste of selection into other apps (as bitmap; as SVG?) - navigation sidebar with bitmap page previews - bitmap preview for document icon in desktop environments? - "organizer" side panel (hierarchy of notes), cf. gjots - maintain e-library: table of md5sums of pdfs with associations to the corresponding xoj's absolute paths (cf. forum topic "Use MD5..." of Dec 2009) - see iRex code for generic viewer + PDF plugin including caching, throttling etc. (Marcel Hendrickx email of Sep 11 '09) - allow toolbar to go vertical - toolbar buttons should react to button 2/3 click to modify settings for that tool!! - paste text directly into xournal, from xournal? (instead of starting a text item and pasting into/from it) - insert links (to URLs; within document/to other xoj? hand mode navigates) - a command + keyboard shortcut to switch mappings (1<->2, 1<->3, 2<->3) (A. Rechnitzer Sept 11, 2007) - modify encoding of TrueType font subsets or provide cmap so pdf text can be extracted - smoothing of strokes (for users without tablets / with deficient drivers) - add config option to limit total memory usage for PDF bitmaps - ability to select entire page for copy-paste (as bitmap / reorder xournal) - copy/paste of an entire page (beware if PDF bg is not compatible!) - convert to/from Jarnal format; to/from MS Journal format??? - export as SVG, as bitmap (use Cairo for this) - improved PDF viewer features (search text, hyperlink, page borders...) (using full poppler api ?) - search text: among PDF background (using poppler); among text annotations - use system paper size as default (/etc/papersize) - sticky notes (anchor visually text box to a bg location) - use relative paths for bg documents (e.g. annotated PDF) - flush display queue when drawing over a slow X server? - more paper customization (in particular, 1/2 inch graph paper) (2 custom papers with settings in config file? a folder with blank PDF or xoj papers and quick-access?) (also: engineering paper; isometric paper -- Dan Ott Sep 4 '09) - option to map a button to a context menu (incl. tool selection, ...) - option to map a button to "undo" - xournal_page-shadow.diff (Martin Kiefel Feb 5 2007) - xoj2pdf on command line - 'insert blank page after' command (more useful in PDF annot !) - load images as bg if given on command-line (as with PDF on commandline) - flatten (incl undo/redo...) - enabled only if nlayers>1 - color chooser (papercolor, pen color); have default colors and a history appear as palette in there! - printing: print-options, save printer settings (throughout a session, and on disk) (maybe a separate config file .xournal/gnome-print-settings) - help index - option for highlighter to be always at bottom of its layer - more pen/highlighter shapes (chisel) - slanted tip pens (calligraphy) - toolbar buttons to access custom preset tools (e.g. text or pen with settings) - text boxes with opaque background - recalibration upon screen resize / compensation for miscalibration (use ConfigureNotify event and XInput? cf "Bugs" tracker 08/2007) - find a better behavior for vertical space tool across page boundaries ? config options? 1) when there's not enough space at bottom of page: - resize the page - move stuff to next page - move stuff to a new page 2) when moving to another page: - move everything - move only what doesn't fit (??? looks hard) option for vert space tool to also move the background?? (PDF: cut-and-crop by running PDF code twice with 2 different clipboxes?) - option to save all annotated files within the .xoj - non-antialiased version for handhelds - customize autogenerated save file names - layer dialog box to set visibility status of each layer regardless of which layer is being edited - option to link layer creation and visibility status for all pages (Eric Borghs 04/15/08) - display corruption on scroll down when bottom of window is obscured?? (probably a gnomecanvas or X bug -- expose event generated for wrong region, or not processed?) - keep only a few pages of a PDF file in memory at any given time; generate pages by parsing pdf info rather than generating bitmaps for all of them. - win32 port (Matteo Abrate) - snap-to-grid tool? (Matteo Abrate) - EPOS 7/24/07: Thumbnails pane - EPOS: Connect to EPOS api which sends A4 mapped points - EPOS: Cut and Paste into OpenOffice applications and the GIMP (as bitmap??) - EPOS: Export pages to pictures in the Jpg and Png formats. - EPOS: Rotate Ink in custom angle. - handwriting recognition???? (cellwriter?) unlikely. we don't have grids see galileon comment on 2008-07-29 to tracker #1925309: word recognizer - handwritten stroke search in document (see cellwriter?) (correlate inertia-normalized strokes in lift to unit cotangent bundle?) - option: export to PDF with incremental pages for successive layers (for presentations) (Daniel Brugarth 8/18/07) - Samuel Hoffstaetter: sidebar thumbnails, ... - YoYo Siska patch for desktop mode ?? - Vivek Ayer: rotate paper wrt screen (for environments where display rotation doesn't work): gnome_canvas_item_affine_relative(canvas->root, ...) would rotate all but text items (still need to modify scroll bbox, and adjust event coordinates by inverse rotation). - rotate PDF background pages (individually wrt each other, see #2099935) - switch to libglade, and allow customization of key shortcuts (accels) - command to copy a selected shape to a keybinding that will paste it (so one can define symbols to insert into typed notes) (e.g. "be able to bind Ctrl-B to draw a \beta" for class notes). (shape, binding) sets are local to one session (different for different classes; but save them into the xoj file maybe ?) [Felix Giannelia 09/29/2009] xournal-0.4.8/src/xo-misc.c0000644000175000017500000025354512353540170015173 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "xournal.h" #include "xo-interface.h" #include "xo-support.h" #include "xo-callbacks.h" #include "xo-misc.h" #include "xo-file.h" #include "xo-paint.h" #include "xo-shapes.h" #include "xo-image.h" // some global constants guint predef_colors_rgba[COLOR_MAX] = { 0x000000ff, 0x3333ccff, 0xff0000ff, 0x008000ff, 0x808080ff, 0x00c0ffff, 0x00ff00ff, 0xff00ffff, 0xff8000ff, 0xffff00ff, 0xffffffff }; guint predef_bgcolors_rgba[COLOR_MAX] = // meaningless ones set to white { 0xffffffff, 0xa0e8ffff, 0xffc0d4ff, 0x80ffc0ff, 0xffffffff, 0xa0e8ffff, 0x80ffc0ff, 0xffc0d4ff, 0xffc080ff, 0xffff80ff, 0xffffffff }; double predef_thickness[NUM_STROKE_TOOLS][THICKNESS_MAX] = { { 0.42, 0.85, 1.41, 2.26, 5.67 }, // pen thicknesses = 0.15, 0.3, 0.5, 0.8, 2 mm { 2.83, 2.83, 8.50, 19.84, 19.84 }, // eraser thicknesses = 1, 3, 7 mm { 2.83, 2.83, 8.50, 19.84, 19.84 }, // highlighter thicknesses = 1, 3, 7 mm }; // my own basename() replacement; allows windows filenames even on linux gchar *xo_basename(gchar *s, gboolean xplatform) { gchar *p; p = strrchr(s, G_DIR_SEPARATOR); if (p == NULL && G_DIR_SEPARATOR != '/') p = strrchr(s, '/'); if (xplatform && p == NULL && G_DIR_SEPARATOR != '\\') p = strrchr(s, '\\'); if (p != NULL) return p+1; // dir separator found if (xplatform || G_DIR_SEPARATOR == '\\') { // windows drive letters if (g_ascii_isalpha(s[0]) && s[1]==':') return s+2; } return s; // whole string } // candidate xoj filename for save, save-as, autosave, etc. gchar *candidate_save_filename(void) { time_t curtime; char stime[30]; if (ui.filename != NULL) return g_strdup(ui.filename); if (bgpdf.status!=STATUS_NOT_INIT && bgpdf.file_domain == DOMAIN_ABSOLUTE && bgpdf.filename != NULL) return g_strdup_printf("%s.xoj", bgpdf.filename->s); curtime = time(NULL); strftime(stime, 30, "%Y-%m-%d-Note-%H-%M.xoj", localtime(&curtime)); if (ui.default_path!=NULL) return g_strdup_printf("%s/%s", ui.default_path, stime); else return g_strdup(stime); } // some manipulation functions struct Page *new_page(struct Page *template) { struct Page *pg = (struct Page *) g_memdup(template, sizeof(struct Page)); struct Layer *l = g_new(struct Layer, 1); l->items = NULL; l->nitems = 0; pg->layers = g_list_append(NULL, l); pg->nlayers = 1; if (template->bg->type != BG_SOLID && !ui.new_page_bg_from_pdf) pg->bg = (struct Background *)g_memdup(ui.default_page.bg, sizeof(struct Background)); else pg->bg = (struct Background *)g_memdup(template->bg, sizeof(struct Background)); pg->bg->canvas_item = NULL; if (pg->bg->type == BG_PIXMAP || pg->bg->type == BG_PDF) { g_object_ref(pg->bg->pixbuf); refstring_ref(pg->bg->filename); } pg->group = (GnomeCanvasGroup *) gnome_canvas_item_new( gnome_canvas_root(canvas), gnome_canvas_clipgroup_get_type(), NULL); make_page_clipbox(pg); update_canvas_bg(pg); l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( pg->group, gnome_canvas_group_get_type(), NULL); return pg; } /* Create a page from a background. Note: bg should be an UNREFERENCED background. If needed, first duplicate it and increase the refcount of the pixbuf. */ struct Page *new_page_with_bg(struct Background *bg, double width, double height) { struct Page *pg = g_new(struct Page, 1); struct Layer *l = g_new(struct Layer, 1); l->items = NULL; l->nitems = 0; pg->layers = g_list_append(NULL, l); pg->nlayers = 1; pg->bg = bg; pg->bg->canvas_item = NULL; pg->height = height; pg->width = width; pg->group = (GnomeCanvasGroup *) gnome_canvas_item_new( gnome_canvas_root(canvas), gnome_canvas_clipgroup_get_type(), NULL); make_page_clipbox(pg); update_canvas_bg(pg); l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( pg->group, gnome_canvas_group_get_type(), NULL); return pg; } // change the current page if necessary for pointer at pt void set_current_page(gdouble *pt) { gboolean page_change; struct Page *tmppage; page_change = FALSE; tmppage = ui.cur_page; if (ui.view_continuous == VIEW_MODE_CONTINUOUS) { while (pt[1] < - VIEW_CONTINUOUS_SKIP) { if (ui.pageno == 0) break; page_change = TRUE; ui.pageno--; tmppage = g_list_nth_data(journal.pages, ui.pageno); pt[1] += tmppage->height + VIEW_CONTINUOUS_SKIP; } while (pt[1] > tmppage->height + VIEW_CONTINUOUS_SKIP) { if (ui.pageno == journal.npages-1) break; pt[1] -= tmppage->height + VIEW_CONTINUOUS_SKIP; page_change = TRUE; ui.pageno++; tmppage = g_list_nth_data(journal.pages, ui.pageno); } } if (ui.view_continuous == VIEW_MODE_HORIZONTAL) { while (pt[0] < - VIEW_CONTINUOUS_SKIP) { if (ui.pageno == 0) break; page_change = TRUE; ui.pageno--; tmppage = g_list_nth_data(journal.pages, ui.pageno); pt[0] += tmppage->width + VIEW_CONTINUOUS_SKIP; } while (pt[0] > tmppage->width + VIEW_CONTINUOUS_SKIP) { if (ui.pageno == journal.npages-1) break; pt[0] -= tmppage->width + VIEW_CONTINUOUS_SKIP; page_change = TRUE; ui.pageno++; tmppage = g_list_nth_data(journal.pages, ui.pageno); } } if (page_change) do_switch_page(ui.pageno, FALSE, FALSE); } void realloc_cur_path(int n) { if (n <= ui.cur_path_storage_alloc) return; ui.cur_path_storage_alloc = n+100; ui.cur_path.coords = g_realloc(ui.cur_path.coords, 2*(n+100)*sizeof(double)); } void realloc_cur_widths(int n) { if (n <= ui.cur_widths_storage_alloc) return; ui.cur_widths_storage_alloc = n+100; ui.cur_widths = g_realloc(ui.cur_widths, (n+100)*sizeof(double)); } // undo utility functions void prepare_new_undo(void) { struct UndoItem *u; // add a new UndoItem on the stack u = (struct UndoItem *)g_malloc(sizeof(struct UndoItem)); u->next = undo; u->multiop = 0; undo = u; ui.saved = FALSE; ui.need_autosave = TRUE; clear_redo_stack(); } void clear_redo_stack(void) { struct UndoItem *u; GList *list, *repl; struct UndoErasureData *erasure; struct Item *it; /* Warning: the redo items might reference items from past redo entries, which have been destroyed before them. Be careful! As a rule, it's safe to destroy data which has been created at the current history step, it's unsafe to refer to any data from previous history steps */ while (redo!=NULL) { if (redo->type == ITEM_STROKE) { gnome_canvas_points_free(redo->item->path); if (redo->item->brush.variable_width) g_free(redo->item->widths); g_free(redo->item); /* the strokes are unmapped, so there are no associated canvas items */ } else if (redo->type == ITEM_TEXT) { g_free(redo->item->text); g_free(redo->item->font_name); g_free(redo->item); } else if (redo->type == ITEM_IMAGE) { g_object_unref(redo->item->image); g_free(redo->item->image_png); g_free(redo->item); } else if (redo->type == ITEM_ERASURE || redo->type == ITEM_RECOGNIZER) { for (list = redo->erasurelist; list!=NULL; list=list->next) { erasure = (struct UndoErasureData *)list->data; for (repl = erasure->replacement_items; repl!=NULL; repl=repl->next) { it = (struct Item *)repl->data; gnome_canvas_points_free(it->path); if (it->brush.variable_width) g_free(it->widths); g_free(it); } g_list_free(erasure->replacement_items); g_free(erasure); } g_list_free(redo->erasurelist); } else if (redo->type == ITEM_NEW_BG_ONE || redo->type == ITEM_NEW_BG_RESIZE || redo->type == ITEM_NEW_DEFAULT_BG) { if (redo->bg->type == BG_PIXMAP || redo->bg->type == BG_PDF) { if (redo->bg->pixbuf!=NULL) g_object_unref(redo->bg->pixbuf); refstring_unref(redo->bg->filename); } g_free(redo->bg); } else if (redo->type == ITEM_NEW_PAGE) { redo->page->group = NULL; delete_page(redo->page); } else if (redo->type == ITEM_MOVESEL || redo->type == ITEM_REPAINTSEL) { g_list_free(redo->itemlist); g_list_free(redo->auxlist); } else if (redo->type == ITEM_RESIZESEL) { g_list_free(redo->itemlist); } else if (redo->type == ITEM_PASTE) { for (list = redo->itemlist; list!=NULL; list=list->next) { it = (struct Item *)list->data; if (it->type == ITEM_STROKE) { gnome_canvas_points_free(it->path); if (it->brush.variable_width) g_free(it->widths); } g_free(it); } g_list_free(redo->itemlist); } else if (redo->type == ITEM_NEW_LAYER) { g_free(redo->layer); } else if (redo->type == ITEM_TEXT_EDIT || redo->type == ITEM_TEXT_ATTRIB) { g_free(redo->str); if (redo->type == ITEM_TEXT_ATTRIB) g_free(redo->brush); } u = redo; redo = redo->next; g_free(u); } update_undo_redo_enabled(); } void clear_undo_stack(void) { struct UndoItem *u; GList *list; struct UndoErasureData *erasure; while (undo!=NULL) { // for strokes, items are already in the journal, so we don't free them // for erasures, we need to free the dead items if (undo->type == ITEM_ERASURE || undo->type == ITEM_RECOGNIZER) { for (list = undo->erasurelist; list!=NULL; list=list->next) { erasure = (struct UndoErasureData *)list->data; if (erasure->item->type == ITEM_STROKE) { gnome_canvas_points_free(erasure->item->path); if (erasure->item->brush.variable_width) g_free(erasure->item->widths); } if (erasure->item->type == ITEM_TEXT) { g_free(erasure->item->text); g_free(erasure->item->font_name); } if (erasure->item->type == ITEM_IMAGE) { g_object_unref(erasure->item->image); g_free(erasure->item->image_png); } g_free(erasure->item); g_list_free(erasure->replacement_items); g_free(erasure); } g_list_free(undo->erasurelist); } else if (undo->type == ITEM_NEW_BG_ONE || undo->type == ITEM_NEW_BG_RESIZE || undo->type == ITEM_NEW_DEFAULT_BG) { if (undo->bg->type == BG_PIXMAP || undo->bg->type == BG_PDF) { if (undo->bg->pixbuf!=NULL) g_object_unref(undo->bg->pixbuf); refstring_unref(undo->bg->filename); } g_free(undo->bg); } else if (undo->type == ITEM_MOVESEL || undo->type == ITEM_REPAINTSEL) { g_list_free(undo->itemlist); g_list_free(undo->auxlist); } else if (undo->type == ITEM_RESIZESEL) { g_list_free(undo->itemlist); } else if (undo->type == ITEM_PASTE) { g_list_free(undo->itemlist); } else if (undo->type == ITEM_DELETE_LAYER) { undo->layer->group = NULL; delete_layer(undo->layer); } else if (undo->type == ITEM_DELETE_PAGE) { undo->page->group = NULL; delete_page(undo->page); } else if (undo->type == ITEM_TEXT_EDIT || undo->type == ITEM_TEXT_ATTRIB) { g_free(undo->str); if (undo->type == ITEM_TEXT_ATTRIB) g_free(undo->brush); } u = undo; undo = undo->next; g_free(u); } update_undo_redo_enabled(); } // free data structures void delete_journal(struct Journal *j) { while (j->pages!=NULL) { delete_page((struct Page *)j->pages->data); j->pages = g_list_delete_link(j->pages, j->pages); } } void delete_page(struct Page *pg) { struct Layer *l; while (pg->layers!=NULL) { l = (struct Layer *)pg->layers->data; l->group = NULL; delete_layer(l); pg->layers = g_list_delete_link(pg->layers, pg->layers); } if (pg->group!=NULL) gtk_object_destroy(GTK_OBJECT(pg->group)); // this also destroys the background's canvas items if (pg->bg->type == BG_PIXMAP || pg->bg->type == BG_PDF) { if (pg->bg->pixbuf != NULL) g_object_unref(pg->bg->pixbuf); if (pg->bg->filename != NULL) refstring_unref(pg->bg->filename); } g_free(pg->bg); g_free(pg); } void delete_layer(struct Layer *l) { struct Item *item; while (l->items!=NULL) { item = (struct Item *)l->items->data; if (item->type == ITEM_STROKE && item->path != NULL) { gnome_canvas_points_free(item->path); if (item->brush.variable_width) g_free(item->widths); } if (item->type == ITEM_TEXT) { g_free(item->font_name); g_free(item->text); } if (item->type == ITEM_IMAGE) { g_object_unref(item->image); g_free(item->image_png); } // don't need to delete the canvas_item, as it's part of the group destroyed below g_free(item); l->items = g_list_delete_link(l->items, l->items); } if (l->group!= NULL) gtk_object_destroy(GTK_OBJECT(l->group)); g_free(l); } // referenced strings struct Refstring *new_refstring(const char *s) { struct Refstring *rs = g_new(struct Refstring, 1); rs->nref = 1; if (s!=NULL) rs->s = g_strdup(s); else rs->s = NULL; rs->aux = NULL; return rs; } struct Refstring *refstring_ref(struct Refstring *rs) { rs->nref++; return rs; } void refstring_unref(struct Refstring *rs) { rs->nref--; if (rs->nref == 0) { if (rs->s!=NULL) g_free(rs->s); if (rs->aux!=NULL) g_free(rs->aux); g_free(rs); } } // some helper functions int finite_sized(double x) // detect unrealistic coordinate values { return (finite(x) && x<1E6 && x>-1E6); } void get_pointer_coords(GdkEvent *event, gdouble *ret) { double x, y; gdk_event_get_coords(event, &x, &y); gnome_canvas_window_to_world(canvas, x, y, ret, ret+1); ret[0] -= ui.cur_page->hoffset; ret[1] -= ui.cur_page->voffset; } void get_current_pointer_coords(gdouble *ret) { gint wx, wy, sx, sy; gtk_widget_get_pointer((GtkWidget *)canvas, &wx, &wy); gnome_canvas_get_scroll_offsets(canvas, &sx, &sy); gnome_canvas_window_to_world(canvas, (double)(wx + sx), (double)(wy + sy), ret, ret+1); ret[0] -= ui.cur_page->hoffset; ret[1] -= ui.cur_page->voffset; } void fix_xinput_coords(GdkEvent *event) { double *axes, *px, *py, axis_width; GdkDevice *device; int wx, wy, sx, sy, ix, iy; if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) { axes = event->button.axes; px = &(event->button.x); py = &(event->button.y); device = event->button.device; } else if (event->type == GDK_MOTION_NOTIFY) { axes = event->motion.axes; px = &(event->motion.x); py = &(event->motion.y); device = event->motion.device; } else return; // nothing we know how to do gnome_canvas_get_scroll_offsets(canvas, &sx, &sy); #ifdef ENABLE_XINPUT_BUGFIX // fix broken events with the core pointer's location if (!finite_sized(axes[0]) || !finite_sized(axes[1]) || axes[0]==0. || axes[1]==0.) { gdk_window_get_pointer(GTK_WIDGET(canvas)->window, &ix, &iy, NULL); *px = ix + sx; *py = iy + sy; } else { gdk_window_get_origin(GTK_WIDGET(canvas)->window, &wx, &wy); axis_width = device->axes[0].max - device->axes[0].min; if (axis_width>EPSILON) *px = (axes[0]/axis_width)*ui.screen_width + sx - wx; axis_width = device->axes[1].max - device->axes[1].min; if (axis_width>EPSILON) *py = (axes[1]/axis_width)*ui.screen_height + sy - wy; } #else if (!finite_sized(*px) || !finite_sized(*py) || *px==0. || *py==0.) { gdk_window_get_pointer(GTK_WIDGET(canvas)->window, &ix, &iy, NULL); *px = ix + sx; *py = iy + sy; } else { /* with GTK+ 2.16 or earlier, the event comes from the parent gdkwindow and so needs to be adjusted for scrolling */ if (gtk_major_version == 2 && gtk_minor_version <= 16) { *px += sx; *py += sy; } /* with GTK+ 2.17, events come improperly translated, and the event's GdkWindow isn't even the same for ButtonDown as for MotionNotify... */ if (gtk_major_version == 2 && gtk_minor_version == 17) { // GTK+ 2.17 issues !! gdk_window_get_position(GTK_WIDGET(canvas)->window, &wx, &wy); *px += sx - wx; *py += sy - wy; } } #endif } double get_pressure_multiplier(GdkEvent *event) { double *axes; double rawpressure; GdkDevice *device; if (event->type == GDK_MOTION_NOTIFY) { axes = event->motion.axes; device = event->motion.device; } else { axes = event->button.axes; device = event->button.device; } if (device == gdk_device_get_core_pointer() || device->num_axes <= 2) return 1.0; rawpressure = axes[2]/(device->axes[2].max - device->axes[2].min); if (!finite_sized(rawpressure)) return 1.0; if (rawpressure <= 0. || rawpressure >= 1.0) return 1.0; return ((1-rawpressure)*ui.width_minimum_multiplier + rawpressure*ui.width_maximum_multiplier); } void emergency_enable_xinput(GdkInputMode mode) { GList *dev_list; GdkDevice *dev; gdk_flush(); gdk_error_trap_push(); for (dev_list = gdk_devices_list(); dev_list != NULL; dev_list = dev_list->next) { dev = GDK_DEVICE(dev_list->data); gdk_device_set_mode(dev, mode); } gdk_flush(); gdk_error_trap_pop(); } void update_item_bbox(struct Item *item) { int i; gdouble *p, h, w; if (item->type == ITEM_STROKE) { item->bbox.left = item->bbox.right = item->path->coords[0]; item->bbox.top = item->bbox.bottom = item->path->coords[1]; for (i=1, p=item->path->coords+2; ipath->num_points; i++, p+=2) { if (p[0] < item->bbox.left) item->bbox.left = p[0]; if (p[0] > item->bbox.right) item->bbox.right = p[0]; if (p[1] < item->bbox.top) item->bbox.top = p[1]; if (p[1] > item->bbox.bottom) item->bbox.bottom = p[1]; } } if (item->type == ITEM_TEXT && item->canvas_item!=NULL) { h=0.; w=0.; g_object_get(item->canvas_item, "text_width", &w, "text_height", &h, NULL); item->bbox.right = item->bbox.left + w; item->bbox.bottom = item->bbox.top + h; } } void make_page_clipbox(struct Page *pg) { GnomeCanvasPathDef *pg_clip; pg_clip = gnome_canvas_path_def_new_sized(4); gnome_canvas_path_def_moveto(pg_clip, 0., 0.); gnome_canvas_path_def_lineto(pg_clip, 0., pg->height); gnome_canvas_path_def_lineto(pg_clip, pg->width, pg->height); gnome_canvas_path_def_lineto(pg_clip, pg->width, 0.); gnome_canvas_path_def_closepath(pg_clip); gnome_canvas_item_set(GNOME_CANVAS_ITEM(pg->group), "path", pg_clip, NULL); gnome_canvas_path_def_unref(pg_clip); } void make_canvas_item_one(GnomeCanvasGroup *group, struct Item *item) { PangoFontDescription *font_desc; GnomeCanvasPoints points; GtkWidget *dialog; int j; if (item->type == ITEM_STROKE) { if (!item->brush.variable_width) item->canvas_item = gnome_canvas_item_new(group, gnome_canvas_line_get_type(), "points", item->path, "cap-style", GDK_CAP_ROUND, "join-style", GDK_JOIN_ROUND, "fill-color-rgba", item->brush.color_rgba, "width-units", item->brush.thickness, NULL); else { item->canvas_item = gnome_canvas_item_new(group, gnome_canvas_group_get_type(), NULL); points.num_points = 2; points.ref_count = 1; for (j = 0; j < item->path->num_points-1; j++) { points.coords = item->path->coords+2*j; gnome_canvas_item_new((GnomeCanvasGroup *) item->canvas_item, gnome_canvas_line_get_type(), "points", &points, "cap-style", GDK_CAP_ROUND, "join-style", GDK_JOIN_ROUND, "fill-color-rgba", item->brush.color_rgba, "width-units", item->widths[j], NULL); } } } if (item->type == ITEM_TEXT) { #ifdef WIN32 // fontconfig cache generation takes forever, show hourglass if (!ui.warned_generate_fontconfig) { dialog = gtk_message_dialog_new(GTK_WINDOW(winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_OTHER, GTK_BUTTONS_NONE, _("Generating fontconfig library cache, please be patient...")); gtk_window_set_title(GTK_WINDOW(dialog), _("Generating fontconfig cache...")); gtk_widget_show_all(dialog); set_cursor_busy(TRUE); } #endif font_desc = pango_font_description_from_string(item->font_name); pango_font_description_set_absolute_size(font_desc, item->font_size*ui.zoom*PANGO_SCALE); item->canvas_item = gnome_canvas_item_new(group, gnome_canvas_text_get_type(), "x", item->bbox.left, "y", item->bbox.top, "anchor", GTK_ANCHOR_NW, "font-desc", font_desc, "fill-color-rgba", item->brush.color_rgba, "text", item->text, NULL); update_item_bbox(item); #ifdef WIN32 // done if (!ui.warned_generate_fontconfig) { ui.warned_generate_fontconfig = TRUE; gtk_widget_destroy(dialog); set_cursor_busy(FALSE); } #endif } if (item->type == ITEM_IMAGE) { item->canvas_item = gnome_canvas_item_new(group, gnome_canvas_pixbuf_get_type(), "pixbuf", item->image, "x", item->bbox.left, "y", item->bbox.top, "width", item->bbox.right - item->bbox.left, "height", item->bbox.bottom - item->bbox.top, "width-set", TRUE, "height-set", TRUE, NULL); } } void make_canvas_items(void) { struct Page *pg; struct Layer *l; struct Item *item; GList *pagelist, *layerlist, *itemlist; for (pagelist = journal.pages; pagelist!=NULL; pagelist = pagelist->next) { pg = (struct Page *)pagelist->data; if (pg->group == NULL) { pg->group = (GnomeCanvasGroup *) gnome_canvas_item_new( gnome_canvas_root(canvas), gnome_canvas_clipgroup_get_type(), NULL); make_page_clipbox(pg); } if (pg->bg->canvas_item == NULL) update_canvas_bg(pg); for (layerlist = pg->layers; layerlist!=NULL; layerlist = layerlist->next) { l = (struct Layer *)layerlist->data; if (l->group == NULL) l->group = (GnomeCanvasGroup *) gnome_canvas_item_new( pg->group, gnome_canvas_group_get_type(), NULL); for (itemlist = l->items; itemlist!=NULL; itemlist = itemlist->next) { item = (struct Item *)itemlist->data; if (item->canvas_item == NULL) make_canvas_item_one(l->group, item); } } } } void update_canvas_bg(struct Page *pg) { GnomeCanvasGroup *group; GnomeCanvasPoints *seg; GdkPixbuf *scaled_pix; double *pt; double x, y; int w, h; gboolean is_well_scaled; if (pg->bg->canvas_item != NULL) gtk_object_destroy(GTK_OBJECT(pg->bg->canvas_item)); pg->bg->canvas_item = NULL; if (pg->bg->type == BG_SOLID) { pg->bg->canvas_item = gnome_canvas_item_new(pg->group, gnome_canvas_group_get_type(), NULL); group = GNOME_CANVAS_GROUP(pg->bg->canvas_item); lower_canvas_item_to(pg->group, pg->bg->canvas_item, NULL); gnome_canvas_item_new(group, gnome_canvas_rect_get_type(), "x1", 0., "x2", pg->width, "y1", 0., "y2", pg->height, "fill-color-rgba", pg->bg->color_rgba, NULL); if (pg->bg->ruling == RULING_NONE) return; seg = gnome_canvas_points_new(2); pt = seg->coords; if (pg->bg->ruling == RULING_GRAPH) { pt[1] = 0; pt[3] = pg->height; for (x=RULING_GRAPHSPACING; xwidth-1; x+=RULING_GRAPHSPACING) { pt[0] = pt[2] = x; gnome_canvas_item_new(group, gnome_canvas_line_get_type(), "points", seg, "fill-color-rgba", RULING_COLOR, "width-units", RULING_THICKNESS, NULL); } pt[0] = 0; pt[2] = pg->width; for (y=RULING_GRAPHSPACING; yheight-1; y+=RULING_GRAPHSPACING) { pt[1] = pt[3] = y; gnome_canvas_item_new(group, gnome_canvas_line_get_type(), "points", seg, "fill-color-rgba", RULING_COLOR, "width-units", RULING_THICKNESS, NULL); } gnome_canvas_points_free(seg); return; } pt[0] = 0; pt[2] = pg->width; for (y=RULING_TOPMARGIN; yheight-1; y+=RULING_SPACING) { pt[1] = pt[3] = y; gnome_canvas_item_new(group, gnome_canvas_line_get_type(), "points", seg, "fill-color-rgba", RULING_COLOR, "width-units", RULING_THICKNESS, NULL); } if (pg->bg->ruling == RULING_LINED) { pt[0] = pt[2] = RULING_LEFTMARGIN; pt[1] = 0; pt[3] = pg->height; gnome_canvas_item_new(group, gnome_canvas_line_get_type(), "points", seg, "fill-color-rgba", RULING_MARGIN_COLOR, "width-units", RULING_THICKNESS, NULL); } gnome_canvas_points_free(seg); return; } if (pg->bg->type == BG_PIXMAP) { pg->bg->pixbuf_scale = 0; pg->bg->canvas_item = gnome_canvas_item_new(pg->group, gnome_canvas_pixbuf_get_type(), "pixbuf", pg->bg->pixbuf, "width", pg->width, "height", pg->height, "width-set", TRUE, "height-set", TRUE, NULL); lower_canvas_item_to(pg->group, pg->bg->canvas_item, NULL); } if (pg->bg->type == BG_PDF) { if (pg->bg->pixbuf == NULL) return; is_well_scaled = (fabs(pg->bg->pixel_width - pg->width*ui.zoom) < 2. && fabs(pg->bg->pixel_height - pg->height*ui.zoom) < 2.); if (is_well_scaled) pg->bg->canvas_item = gnome_canvas_item_new(pg->group, gnome_canvas_pixbuf_get_type(), "pixbuf", pg->bg->pixbuf, "width-in-pixels", TRUE, "height-in-pixels", TRUE, NULL); else pg->bg->canvas_item = gnome_canvas_item_new(pg->group, gnome_canvas_pixbuf_get_type(), "pixbuf", pg->bg->pixbuf, "width", pg->width, "height", pg->height, "width-set", TRUE, "height-set", TRUE, NULL); lower_canvas_item_to(pg->group, pg->bg->canvas_item, NULL); } } gboolean is_visible(struct Page *pg) { GtkAdjustment *adj; double top, bottom; switch (ui.view_continuous) { case VIEW_MODE_ONE_PAGE: return (pg == ui.cur_page); case VIEW_MODE_CONTINUOUS: adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)); top = adj->value/ui.zoom; bottom = (adj->value + adj->page_size) / ui.zoom; return (MAX(top, pg->voffset) < MIN(bottom, pg->voffset+pg->height)); case VIEW_MODE_HORIZONTAL: adj = gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)); top = adj->value/ui.zoom; bottom = (adj->value + adj->page_size) / ui.zoom; return (MAX(top, pg->hoffset) < MIN(bottom, pg->hoffset+pg->width)); } // uh? not a known case return FALSE; } void rescale_bg_pixmaps(void) { GList *pglist; struct Page *pg; GdkPixbuf *pix; gboolean is_well_scaled; gdouble zoom_to_request; for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { pg = (struct Page *)pglist->data; // in progressive mode we scale only visible pages if (ui.progressive_bg && !is_visible(pg)) continue; if (pg->bg->type == BG_PIXMAP && pg->bg->canvas_item!=NULL) { g_object_get(G_OBJECT(pg->bg->canvas_item), "pixbuf", &pix, NULL); if (pix!=pg->bg->pixbuf) gnome_canvas_item_set(pg->bg->canvas_item, "pixbuf", pg->bg->pixbuf, NULL); pg->bg->pixbuf_scale = 0; } if (pg->bg->type == BG_PDF) { // make pixmap scale to correct size if current one is wrong is_well_scaled = (fabs(pg->bg->pixel_width - pg->width*ui.zoom) < 2. && fabs(pg->bg->pixel_height - pg->height*ui.zoom) < 2.); if (pg->bg->canvas_item != NULL && !is_well_scaled) { g_object_get(pg->bg->canvas_item, "width-in-pixels", &is_well_scaled, NULL); if (is_well_scaled) gnome_canvas_item_set(pg->bg->canvas_item, "width", pg->width, "height", pg->height, "width-in-pixels", FALSE, "height-in-pixels", FALSE, "width-set", TRUE, "height-set", TRUE, NULL); } // request an asynchronous update to a better pixmap if needed zoom_to_request = MIN(ui.zoom, MAX_SAFE_RENDER_DPI/72.0); if (pg->bg->pixbuf_scale == zoom_to_request) continue; if (add_bgpdf_request(pg->bg->file_page_seq, zoom_to_request)) pg->bg->pixbuf_scale = zoom_to_request; } } } gboolean have_intersect(struct BBox *a, struct BBox *b) { return (MAX(a->top, b->top) <= MIN(a->bottom, b->bottom)) && (MAX(a->left, b->left) <= MIN(a->right, b->right)); } /* In libgnomecanvas 2.10.0, the lower/raise functions fail to update correctly the end of the group's item list. We try to work around this. DON'T USE gnome_canvas_item_raise/lower directly !! */ void lower_canvas_item_to(GnomeCanvasGroup *g, GnomeCanvasItem *item, GnomeCanvasItem *after) { int i1, i2; i1 = g_list_index(g->item_list, item); if (i1 == -1) return; if (after == NULL) i2 = -1; else i2 = g_list_index(g->item_list, after); if (i1 < i2) gnome_canvas_item_raise(item, i2-i1); if (i1 > i2+1) gnome_canvas_item_lower(item, i1-i2-1); // BUGFIX for libgnomecanvas g->item_list_end = g_list_last(g->item_list); } void rgb_to_gdkcolor(guint rgba, GdkColor *color) { color->pixel = 0; color->red = ((rgba>>24)&0xff)*0x101; color->green = ((rgba>>16)&0xff)*0x101; color->blue = ((rgba>>8)&0xff)*0x101; } guint32 gdkcolor_to_rgba(GdkColor gdkcolor, guint16 alpha) { guint32 rgba = ((gdkcolor.red & 0xff00) << 16) | ((gdkcolor.green & 0xff00) << 8) | ((gdkcolor.blue & 0xff00) ) | ((alpha & 0xff00) >> 8); return rgba; } // some interface functions void update_thickness_buttons(void) { if (ui.selection!=NULL || ui.toolno[ui.cur_mapping] >= NUM_STROKE_TOOLS) { gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonThicknessOther")), TRUE); } else switch (ui.cur_brush->thickness_no) { case THICKNESS_FINE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonFine")), TRUE); break; case THICKNESS_MEDIUM: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonMedium")), TRUE); break; case THICKNESS_THICK: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonThick")), TRUE); break; default: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonThicknessOther")), TRUE); } } void update_color_buttons(void) { GdkColor gdkcolor; GtkColorButton *colorbutton; if (ui.selection!=NULL || (ui.toolno[ui.cur_mapping] != TOOL_PEN && ui.toolno[ui.cur_mapping] != TOOL_HIGHLIGHTER && ui.toolno[ui.cur_mapping] != TOOL_TEXT)) { gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonColorOther")), TRUE); } else switch (ui.cur_brush->color_no) { case COLOR_BLACK: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonBlack")), TRUE); break; case COLOR_BLUE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonBlue")), TRUE); break; case COLOR_RED: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonRed")), TRUE); break; case COLOR_GREEN: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonGreen")), TRUE); break; case COLOR_GRAY: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonGray")), TRUE); break; case COLOR_LIGHTBLUE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonLightBlue")), TRUE); break; case COLOR_LIGHTGREEN: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonLightGreen")), TRUE); break; case COLOR_MAGENTA: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonMagenta")), TRUE); break; case COLOR_ORANGE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonOrange")), TRUE); break; case COLOR_YELLOW: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonYellow")), TRUE); break; case COLOR_WHITE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonWhite")), TRUE); break; default: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonColorOther")), TRUE); } colorbutton = GTK_COLOR_BUTTON(GET_COMPONENT("buttonColorChooser")); if ((ui.toolno[ui.cur_mapping] != TOOL_PEN && ui.toolno[ui.cur_mapping] != TOOL_HIGHLIGHTER && ui.toolno[ui.cur_mapping] != TOOL_TEXT)) gdkcolor.red = gdkcolor.blue = gdkcolor.green = 0; else rgb_to_gdkcolor(ui.cur_brush->color_rgba, &gdkcolor); gtk_color_button_set_color(colorbutton, &gdkcolor); if (ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) { gtk_color_button_set_alpha(colorbutton, (ui.cur_brush->color_rgba&0xff)*0x101); gtk_color_button_set_use_alpha(colorbutton, TRUE); } else { gtk_color_button_set_alpha(colorbutton, 0xffff); gtk_color_button_set_use_alpha(colorbutton, FALSE); } } void update_tool_buttons(void) { switch(ui.toolno[ui.cur_mapping]) { case TOOL_PEN: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonPen")), TRUE); break; case TOOL_ERASER: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonEraser")), TRUE); break; case TOOL_HIGHLIGHTER: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonHighlighter")), TRUE); break; case TOOL_TEXT: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonText")), TRUE); break; case TOOL_IMAGE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonImage")), TRUE); break; case TOOL_SELECTREGION: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonSelectRegion")), TRUE); break; case TOOL_SELECTRECT: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonSelectRectangle")), TRUE); break; case TOOL_VERTSPACE: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonVerticalSpace")), TRUE); break; case TOOL_HAND: gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonHand")), TRUE); break; } gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonRuler")), ui.toolno[ui.cur_mapping]ruler); gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonReco")), ui.toolno[ui.cur_mapping]recognizer); update_thickness_buttons(); update_color_buttons(); } void update_tool_menu(void) { switch(ui.toolno[0]) { case TOOL_PEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsPen")), TRUE); break; case TOOL_ERASER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsEraser")), TRUE); break; case TOOL_HIGHLIGHTER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsHighlighter")), TRUE); break; case TOOL_TEXT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsText")), TRUE); break; case TOOL_IMAGE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsImage")), TRUE); break; case TOOL_SELECTREGION: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsSelectRegion")), TRUE); break; case TOOL_SELECTRECT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsSelectRectangle")), TRUE); break; case TOOL_VERTSPACE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsVerticalSpace")), TRUE); break; case TOOL_HAND: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsHand")), TRUE); break; } gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsRuler")), ui.toolno[0]ruler); gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonReco")), ui.toolno[ui.cur_mapping]recognizer); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("toolsRuler")), ui.toolno[0]color_no) { case COLOR_BLACK: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorBlack")), TRUE); break; case COLOR_BLUE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorBlue")), TRUE); break; case COLOR_RED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorRed")), TRUE); break; case COLOR_GREEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorGreen")), TRUE); break; case COLOR_GRAY: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorGray")), TRUE); break; case COLOR_LIGHTBLUE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorLightBlue")), TRUE); break; case COLOR_LIGHTGREEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorLightGreen")), TRUE); break; case COLOR_MAGENTA: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorMagenta")), TRUE); break; case COLOR_ORANGE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorOrange")), TRUE); break; case COLOR_YELLOW: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorYellow")), TRUE); break; case COLOR_WHITE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorWhite")), TRUE); break; default: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("colorNA")), TRUE); } } void update_pen_props_menu(void) { switch(ui.brushes[0][TOOL_PEN].thickness_no) { case THICKNESS_VERYFINE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("penthicknessVeryFine")), TRUE); break; case THICKNESS_FINE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("penthicknessFine")), TRUE); break; case THICKNESS_MEDIUM: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("penthicknessMedium")), TRUE); break; case THICKNESS_THICK: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("penthicknessThick")), TRUE); break; case THICKNESS_VERYTHICK: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("penthicknessVeryThick")), TRUE); break; } } void update_eraser_props_menu(void) { switch (ui.brushes[0][TOOL_ERASER].thickness_no) { case THICKNESS_FINE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserFine")), TRUE); break; case THICKNESS_MEDIUM: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserMedium")), TRUE); break; case THICKNESS_THICK: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserThick")), TRUE); break; } gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserStandard")), ui.brushes[0][TOOL_ERASER].tool_options == TOOLOPT_ERASER_STANDARD); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserWhiteout")), ui.brushes[0][TOOL_ERASER].tool_options == TOOLOPT_ERASER_WHITEOUT); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("eraserDeleteStrokes")), ui.brushes[0][TOOL_ERASER].tool_options == TOOLOPT_ERASER_STROKES); } void update_highlighter_props_menu(void) { switch (ui.brushes[0][TOOL_HIGHLIGHTER].thickness_no) { case THICKNESS_FINE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("highlighterFine")), TRUE); break; case THICKNESS_MEDIUM: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("highlighterMedium")), TRUE); break; case THICKNESS_THICK: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("highlighterThick")), TRUE); break; } } void update_mappings_menu_linkings(void) { switch (ui.linked_brush[1]) { case BRUSH_LINKED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2LinkBrush")), TRUE); break; case BRUSH_COPIED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2CopyBrush")), TRUE); break; case BRUSH_STATIC: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2NABrush")), TRUE); break; } switch (ui.linked_brush[2]) { case BRUSH_LINKED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3LinkBrush")), TRUE); break; case BRUSH_COPIED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3CopyBrush")), TRUE); break; case BRUSH_STATIC: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3NABrush")), TRUE); break; } } void update_mappings_menu(void) { gtk_widget_set_sensitive(GET_COMPONENT("optionsButtonMappings"), ui.use_xinput); gtk_widget_set_sensitive(GET_COMPONENT("optionsPressureSensitive"), ui.use_xinput); gtk_widget_set_sensitive(GET_COMPONENT("optionsTouchAsHandTool"), ui.use_xinput); gtk_widget_set_sensitive(GET_COMPONENT("optionsPenDisablesTouch"), ui.use_xinput); gtk_widget_set_sensitive(GET_COMPONENT("optionsDesignateTouchscreen"), ui.use_xinput); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsButtonMappings")), ui.use_erasertip); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsTouchAsHandTool")), ui.touch_as_handtool); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsPenDisablesTouch")), ui.pen_disables_touch); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsPressureSensitive")), ui.pressure_sensitivity); switch(ui.toolno[1]) { case TOOL_PEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2Pen")), TRUE); break; case TOOL_ERASER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2Eraser")), TRUE); break; case TOOL_HIGHLIGHTER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2Highlighter")), TRUE); break; case TOOL_TEXT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2Text")), TRUE); break; case TOOL_IMAGE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2Image")), TRUE); break; case TOOL_SELECTREGION: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2SelectRegion")), TRUE); break; case TOOL_SELECTRECT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2SelectRectangle")), TRUE); break; case TOOL_VERTSPACE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button2VerticalSpace")), TRUE); break; } switch(ui.toolno[2]) { case TOOL_PEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3Pen")), TRUE); break; case TOOL_ERASER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3Eraser")), TRUE); break; case TOOL_HIGHLIGHTER: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3Highlighter")), TRUE); break; case TOOL_TEXT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3Text")), TRUE); break; case TOOL_IMAGE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3Image")), TRUE); break; case TOOL_SELECTREGION: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3SelectRegion")), TRUE); break; case TOOL_SELECTRECT: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3SelectRectangle")), TRUE); break; case TOOL_VERTSPACE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("button3VerticalSpace")), TRUE); break; } update_mappings_menu_linkings(); } void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all) { int i, cx, cy; struct Layer *layer; GList *list; ui.pageno = pg; /* re-show all the layers of the old page */ if (ui.cur_page != NULL) for (i=0, list = ui.cur_page->layers; list!=NULL; i++, list = list->next) { layer = (struct Layer *)list->data; if (layer->group!=NULL) gnome_canvas_item_show(GNOME_CANVAS_ITEM(layer->group)); } ui.cur_page = g_list_nth_data(journal.pages, ui.pageno); ui.layerno = ui.cur_page->nlayers-1; ui.cur_layer = (struct Layer *)(g_list_last(ui.cur_page->layers)->data); update_page_stuff(); if (ui.progressive_bg) rescale_bg_pixmaps(); if (rescroll) { // scroll and force a refresh gnome_canvas_get_scroll_offsets(canvas, &cx, &cy); if (ui.view_continuous == VIEW_MODE_HORIZONTAL) cx = ui.cur_page->hoffset*ui.zoom; else cy = ui.cur_page->voffset*ui.zoom; gnome_canvas_scroll_to(canvas, cx, cy); if (refresh_all) gnome_canvas_set_pixels_per_unit(canvas, ui.zoom); else if (!ui.view_continuous) gnome_canvas_item_move(GNOME_CANVAS_ITEM(ui.cur_page->group), 0., 0.); } } void update_page_stuff(void) { gchar tmp[10]; GtkComboBox *layerbox; int i; GList *pglist; GtkSpinButton *spin; struct Page *pg; double vertpos, maxwidth, horizpos, maxheight; // move the page groups to their rightful locations or hide them if (ui.view_continuous == VIEW_MODE_CONTINUOUS) { vertpos = 0.; maxwidth = 0.; for (i=0, pglist = journal.pages; pglist!=NULL; i++, pglist = pglist->next) { pg = (struct Page *)pglist->data; if (pg->group!=NULL) { pg->hoffset = 0.; pg->voffset = vertpos; gnome_canvas_item_set(GNOME_CANVAS_ITEM(pg->group), "x", pg->hoffset, "y", pg->voffset, NULL); gnome_canvas_item_show(GNOME_CANVAS_ITEM(pg->group)); } vertpos += pg->height + VIEW_CONTINUOUS_SKIP; if (pg->width > maxwidth) maxwidth = pg->width; } vertpos -= VIEW_CONTINUOUS_SKIP; gnome_canvas_set_scroll_region(canvas, 0, 0, maxwidth, vertpos); } else if (ui.view_continuous == VIEW_MODE_HORIZONTAL) { horizpos = 0.; maxheight = 0.; for (i=0, pglist = journal.pages; pglist!=NULL; i++, pglist = pglist->next) { pg = (struct Page *)pglist->data; if (pg->group!=NULL) { pg->hoffset = horizpos; pg->voffset = 0.; gnome_canvas_item_set(GNOME_CANVAS_ITEM(pg->group), "x", pg->hoffset, "y", pg->voffset, NULL); gnome_canvas_item_show(GNOME_CANVAS_ITEM(pg->group)); } horizpos += pg->width + VIEW_CONTINUOUS_SKIP; if (pg->height > maxheight) maxheight = pg->height; } horizpos -= VIEW_CONTINUOUS_SKIP; gnome_canvas_set_scroll_region(canvas, 0, 0, horizpos, maxheight); } else { // VIEW_MODE_ONE_PAGE for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { pg = (struct Page *)pglist->data; if (pg == ui.cur_page && pg->group!=NULL) { pg->hoffset = 0.; pg->voffset = 0.; gnome_canvas_item_set(GNOME_CANVAS_ITEM(pg->group), "x", pg->hoffset, "y", pg->voffset, NULL); gnome_canvas_item_show(GNOME_CANVAS_ITEM(pg->group)); } else { if (pg->group!=NULL) gnome_canvas_item_hide(GNOME_CANVAS_ITEM(pg->group)); } } gnome_canvas_set_scroll_region(canvas, 0, 0, ui.cur_page->width, ui.cur_page->height); } // update the page / layer info at bottom of screen spin = GTK_SPIN_BUTTON(GET_COMPONENT("spinPageNo")); ui.in_update_page_stuff = TRUE; // avoid a bad retroaction gtk_spin_button_set_range(spin, 1, journal.npages+1); /* npages+1 will be used to create a new page at end */ gtk_spin_button_set_value(spin, ui.pageno+1); g_snprintf(tmp, 10, _(" of %d"), journal.npages); gtk_label_set_text(GTK_LABEL(GET_COMPONENT("labelNumpages")), tmp); layerbox = GTK_COMBO_BOX(GET_COMPONENT("comboLayer")); if (ui.layerbox_length == 0) { gtk_combo_box_prepend_text(layerbox, _("Background")); ui.layerbox_length++; } while (ui.layerbox_length > ui.cur_page->nlayers+1) { gtk_combo_box_remove_text(layerbox, 0); ui.layerbox_length--; } while (ui.layerbox_length < ui.cur_page->nlayers+1) { g_snprintf(tmp, 10, _("Layer %d"), ui.layerbox_length++); gtk_combo_box_prepend_text(layerbox, tmp); } gtk_combo_box_set_active(layerbox, ui.cur_page->nlayers-1-ui.layerno); ui.in_update_page_stuff = FALSE; gtk_container_forall(GTK_CONTAINER(layerbox), unset_flags, (gpointer)GTK_CAN_FOCUS); // update the paper-style menu radio buttons if (ui.view_continuous == VIEW_MODE_CONTINUOUS) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("viewContinuous")), TRUE); else if (ui.view_continuous == VIEW_MODE_HORIZONTAL) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("viewHorizontal")), TRUE); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("viewOnePage")), TRUE); if (ui.cur_page->bg->type == BG_SOLID && !ui.bg_apply_all_pages) { switch (ui.cur_page->bg->color_no) { case COLOR_WHITE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorWhite")), TRUE); break; case COLOR_YELLOW: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorYellow")), TRUE); break; case COLOR_RED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorPink")), TRUE); break; case COLOR_ORANGE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorOrange")), TRUE); break; case COLOR_BLUE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorBlue")), TRUE); break; case COLOR_GREEN: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorGreen")), TRUE); break; default: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorNA")), TRUE); break; } switch (ui.cur_page->bg->ruling) { case RULING_NONE: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstylePlain")), TRUE); break; case RULING_LINED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstyleLined")), TRUE); break; case RULING_RULED: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstyleRuled")), TRUE); break; case RULING_GRAPH: gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstyleGraph")), TRUE); break; } } else { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorNA")), TRUE); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstyleNA")), TRUE); } // enable/disable the page/layer menu items and toolbar buttons gtk_widget_set_sensitive(GET_COMPONENT("journalPaperColor"), ui.cur_page->bg->type == BG_SOLID || ui.bg_apply_all_pages); gtk_widget_set_sensitive(GET_COMPONENT("journalSetAsDefault"), ui.cur_page->bg->type == BG_SOLID); gtk_widget_set_sensitive(GET_COMPONENT("viewFirstPage"), ui.pageno!=0); gtk_widget_set_sensitive(GET_COMPONENT("viewPreviousPage"), ui.pageno!=0); gtk_widget_set_sensitive(GET_COMPONENT("viewNextPage"), TRUE); gtk_widget_set_sensitive(GET_COMPONENT("viewLastPage"), ui.pageno!=journal.npages-1); gtk_widget_set_sensitive(GET_COMPONENT("buttonFirstPage"), ui.pageno!=0); gtk_widget_set_sensitive(GET_COMPONENT("buttonPreviousPage"), ui.pageno!=0); gtk_widget_set_sensitive(GET_COMPONENT("buttonNextPage"), TRUE); gtk_widget_set_sensitive(GET_COMPONENT("buttonLastPage"), ui.pageno!=journal.npages-1); gtk_widget_set_sensitive(GET_COMPONENT("viewShowLayer"), ui.layerno!=ui.cur_page->nlayers-1); gtk_widget_set_sensitive(GET_COMPONENT("viewHideLayer"), ui.layerno>=0); gtk_widget_set_sensitive(GET_COMPONENT("editPaste"), ui.cur_layer!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonPaste"), ui.cur_layer!=NULL); } void update_toolbar_and_menu(void) { update_tool_buttons(); // takes care of other toolbar buttons as well update_tool_menu(); update_color_menu(); update_pen_props_menu(); update_eraser_props_menu(); update_highlighter_props_menu(); update_mappings_menu(); gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonFullscreen")), ui.fullscreen); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("viewFullscreen")), ui.fullscreen); } void update_file_name(char *filename) { gchar tmp[100], *p; if (ui.filename != NULL) g_free(ui.filename); ui.filename = filename; if (filename == NULL) { gtk_window_set_title(GTK_WINDOW (winMain), _("Xournal")); return; } p = xo_basename(filename, FALSE); g_snprintf(tmp, 100, _("Xournal - %s"), p); gtk_window_set_title(GTK_WINDOW (winMain), tmp); new_mru_entry(filename); if (p!=filename) { if (ui.default_path!=NULL) g_free(ui.default_path); ui.default_path = g_path_get_dirname(filename); } } void update_undo_redo_enabled(void) { gtk_widget_set_sensitive(GET_COMPONENT("editUndo"), undo!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("editRedo"), redo!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonUndo"), undo!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonRedo"), redo!=NULL); } void update_copy_paste_enabled(void) { gtk_widget_set_sensitive(GET_COMPONENT("editCut"), ui.selection!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("editCopy"), ui.selection!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("editPaste"), ui.cur_item_type!=ITEM_TEXT); gtk_widget_set_sensitive(GET_COMPONENT("editDelete"), ui.selection!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonCut"), ui.selection!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonCopy"), ui.selection!=NULL); gtk_widget_set_sensitive(GET_COMPONENT("buttonPaste"), ui.cur_item_type!=ITEM_TEXT); } void update_mapping_linkings(int toolno) { int i; for (i = 1; i<=NUM_BUTTONS; i++) { if (ui.linked_brush[i] == BRUSH_LINKED) { if (toolno >= 0 && toolno < NUM_STROKE_TOOLS) g_memmove(&(ui.brushes[i][toolno]), &(ui.brushes[0][toolno]), sizeof(struct Brush)); } if (ui.linked_brush[i] == BRUSH_COPIED && toolno == ui.toolno[i]) { ui.linked_brush[i] = BRUSH_STATIC; if (i==1 || i==2) update_mappings_menu_linkings(); } } } void set_cur_color(int color_no, guint color_rgba) { int which_mapping, tool; if (ui.toolno[ui.cur_mapping] == TOOL_HIGHLIGHTER) tool = TOOL_HIGHLIGHTER; else tool = TOOL_PEN; if (ui.cur_mapping>0 && ui.linked_brush[ui.cur_mapping]!=BRUSH_LINKED) which_mapping = ui.cur_mapping; else which_mapping = 0; ui.brushes[which_mapping][tool].color_no = color_no; if (tool == TOOL_HIGHLIGHTER && (color_rgba & 0xff) == 0xff) ui.brushes[which_mapping][tool].color_rgba = color_rgba & ui.hiliter_alpha_mask; else ui.brushes[which_mapping][tool].color_rgba = color_rgba; update_mapping_linkings(tool); } void recolor_temp_text(int color_no, guint color_rgba) { GdkColor gdkcolor; if (ui.cur_item_type!=ITEM_TEXT) return; if (ui.cur_item->text!=NULL && ui.cur_item->brush.color_rgba != color_rgba) { prepare_new_undo(); undo->type = ITEM_TEXT_ATTRIB; undo->item = ui.cur_item; undo->str = g_strdup(ui.cur_item->font_name); undo->val_x = ui.cur_item->font_size; undo->brush = (struct Brush *)g_memdup(&(ui.cur_item->brush), sizeof(struct Brush)); } ui.cur_item->brush.color_no = color_no; ui.cur_item->brush.color_rgba = color_rgba; rgb_to_gdkcolor(color_rgba, &gdkcolor); gtk_widget_modify_text(ui.cur_item->widget, GTK_STATE_NORMAL, &gdkcolor); gtk_widget_grab_focus(ui.cur_item->widget); } void process_color_activate(GtkMenuItem *menuitem, int color_no, guint color_rgba) { if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_TOOL_BUTTON) { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.cur_item_type == ITEM_TEXT) recolor_temp_text(color_no, color_rgba); if (ui.selection != NULL) { recolor_selection(color_no, color_rgba); update_color_buttons(); update_color_menu(); } if (ui.toolno[ui.cur_mapping] != TOOL_PEN && ui.toolno[ui.cur_mapping] != TOOL_HIGHLIGHTER && ui.toolno[ui.cur_mapping] != TOOL_TEXT) { if (ui.selection != NULL) return; ui.cur_mapping = 0; end_text(); ui.toolno[ui.cur_mapping] = TOOL_PEN; ui.cur_brush = &(ui.brushes[ui.cur_mapping][TOOL_PEN]); update_tool_buttons(); update_tool_menu(); } set_cur_color(color_no, color_rgba); update_color_buttons(); update_color_menu(); update_cursor(); } void process_thickness_activate(GtkMenuItem *menuitem, int tool, int val) { int which_mapping; if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } else { if (!gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON (menuitem))) return; } if (ui.cur_mapping != 0 && !ui.button_switch_mapping) return; // not user-generated if (ui.selection != NULL && GTK_OBJECT_TYPE(menuitem) != GTK_TYPE_RADIO_MENU_ITEM) { rethicken_selection(val); update_thickness_buttons(); } if (tool >= NUM_STROKE_TOOLS) { update_thickness_buttons(); // undo illegal button selection return; } if (ui.cur_mapping>0 && ui.linked_brush[ui.cur_mapping]!=BRUSH_LINKED) which_mapping = ui.cur_mapping; else which_mapping = 0; if (ui.brushes[which_mapping][tool].thickness_no == val) return; end_text(); ui.brushes[which_mapping][tool].thickness_no = val; ui.brushes[which_mapping][tool].thickness = predef_thickness[tool][val]; update_mapping_linkings(tool); update_thickness_buttons(); if (tool == TOOL_PEN) update_pen_props_menu(); if (tool == TOOL_ERASER) update_eraser_props_menu(); if (tool == TOOL_HIGHLIGHTER) update_highlighter_props_menu(); update_cursor(); } void process_papercolor_activate(GtkMenuItem *menuitem, int color, guint rgba) { struct Page *pg; GList *pglist; gboolean hasdone; if (GTK_OBJECT_TYPE(menuitem) == GTK_TYPE_RADIO_MENU_ITEM) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; } if ((ui.cur_page->bg->type != BG_SOLID) || ui.bg_apply_all_pages || color == COLOR_OTHER) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("papercolorNA")), TRUE); pg = ui.cur_page; hasdone = FALSE; for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { if (ui.bg_apply_all_pages) pg = (struct Page *)pglist->data; if (pg->bg->type == BG_SOLID && pg->bg->color_rgba != rgba) { prepare_new_undo(); if (hasdone) undo->multiop |= MULTIOP_CONT_UNDO; undo->multiop |= MULTIOP_CONT_REDO; hasdone = TRUE; undo->type = ITEM_NEW_BG_ONE; undo->page = pg; undo->bg = (struct Background *)g_memdup(pg->bg, sizeof(struct Background)); undo->bg->canvas_item = NULL; pg->bg->color_no = color; pg->bg->color_rgba = rgba; update_canvas_bg(pg); } if (!ui.bg_apply_all_pages) break; } if (hasdone) undo->multiop -= MULTIOP_CONT_REDO; } void process_paperstyle_activate(GtkMenuItem *menuitem, int style) { struct Page *pg; GList *pglist; gboolean hasdone, must_upd; if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return; if (ui.bg_apply_all_pages) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("paperstyleNA")), TRUE); pg = ui.cur_page; hasdone = FALSE; must_upd = FALSE; for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) { if (ui.bg_apply_all_pages) pg = (struct Page *)pglist->data; if (pg->bg->type != BG_SOLID || pg->bg->ruling != style) { prepare_new_undo(); undo->type = ITEM_NEW_BG_ONE; if (hasdone) undo->multiop |= MULTIOP_CONT_UNDO; undo->multiop |= MULTIOP_CONT_REDO; hasdone = TRUE; undo->page = pg; undo->bg = (struct Background *)g_memdup(pg->bg, sizeof(struct Background)); undo->bg->canvas_item = NULL; if (pg->bg->type != BG_SOLID) { pg->bg->type = BG_SOLID; pg->bg->color_no = COLOR_WHITE; pg->bg->color_rgba = predef_bgcolors_rgba[COLOR_WHITE]; pg->bg->filename = NULL; pg->bg->pixbuf = NULL; must_upd = TRUE; } pg->bg->ruling = style; update_canvas_bg(pg); } if (!ui.bg_apply_all_pages) break; } if (hasdone) undo->multiop -= MULTIOP_CONT_REDO; if (must_upd) update_page_stuff(); } #ifndef GTK_STOCK_DISCARD #define GTK_STOCK_DISCARD GTK_STOCK_NO #endif gboolean ok_to_close(void) { GtkWidget *dialog; GtkResponseType response; if (ui.saved) return TRUE; dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("Save changes to '%s'?"), (ui.filename!=NULL) ? ui.filename:_("Untitled")); gtk_dialog_add_button(GTK_DIALOG (dialog), GTK_STOCK_DISCARD, GTK_RESPONSE_NO); gtk_dialog_add_button(GTK_DIALOG (dialog), GTK_STOCK_SAVE, GTK_RESPONSE_YES); gtk_dialog_add_button(GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_set_default_response(GTK_DIALOG (dialog), GTK_RESPONSE_YES); response = gtk_dialog_run(GTK_DIALOG (dialog)); gtk_widget_destroy(dialog); if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) return FALSE; // aborted if (response == GTK_RESPONSE_YES) { on_fileSave_activate(NULL, NULL); if (!ui.saved) return FALSE; // if save failed, then we abort } return TRUE; } // send the focus back to the appropriate widget void reset_focus(void) { if (ui.cur_item_type == ITEM_TEXT) gtk_widget_grab_focus(ui.cur_item->widget); else gtk_widget_grab_focus(GTK_WIDGET(canvas)); } // selection / clipboard stuff void reset_selection(void) { if (ui.selection == NULL) return; if (ui.selection->canvas_item != NULL) gtk_object_destroy(GTK_OBJECT(ui.selection->canvas_item)); g_list_free(ui.selection->items); g_free(ui.selection); ui.selection = NULL; update_copy_paste_enabled(); update_color_menu(); update_thickness_buttons(); update_color_buttons(); update_font_button(); update_cursor(); } void move_journal_items_by(GList *itemlist, double dx, double dy, struct Layer *l1, struct Layer *l2, GList *depths) { struct Item *item; GnomeCanvasItem *refitem; GList *link; int i; double *pt; while (itemlist!=NULL) { item = (struct Item *)itemlist->data; if (item->type == ITEM_STROKE) for (pt=item->path->coords, i=0; ipath->num_points; i++, pt+=2) { pt[0] += dx; pt[1] += dy; } if (item->type == ITEM_STROKE || item->type == ITEM_TEXT || item->type == ITEM_TEMP_TEXT || item->type == ITEM_IMAGE) { item->bbox.left += dx; item->bbox.right += dx; item->bbox.top += dy; item->bbox.bottom += dy; } if (l1 != l2) { // find out where to insert if (depths != NULL) { if (depths->data == NULL) link = l2->items; else { link = g_list_find(l2->items, depths->data); if (link != NULL) link = link->next; } } else link = NULL; l2->items = g_list_insert_before(l2->items, link, item); l2->nitems++; l1->items = g_list_remove(l1->items, item); l1->nitems--; } if (depths != NULL) { // also raise/lower the canvas items if (item->canvas_item!=NULL) { if (depths->data == NULL) link = NULL; else link = g_list_find(l2->items, depths->data); if (link != NULL) refitem = ((struct Item *)(link->data))->canvas_item; else refitem = NULL; lower_canvas_item_to(l2->group, item->canvas_item, refitem); } depths = depths->next; } itemlist = itemlist->next; } } void resize_journal_items_by(GList *itemlist, double scaling_x, double scaling_y, double offset_x, double offset_y) { struct Item *item; GList *list; double mean_scaling, temp; double *pt, *wid; GnomeCanvasGroup *group; int i; /* geometric mean of x and y scalings = rescaling for stroke widths and for text font sizes */ mean_scaling = sqrt(fabs(scaling_x * scaling_y)); for (list = itemlist; list != NULL; list = list->next) { item = (struct Item *)list->data; if (item->type == ITEM_STROKE) { item->brush.thickness = item->brush.thickness * mean_scaling; for (i=0, pt=item->path->coords; ipath->num_points; i++, pt+=2) { pt[0] = pt[0]*scaling_x + offset_x; pt[1] = pt[1]*scaling_y + offset_y; } if (item->brush.variable_width) for (i=0, wid=item->widths; ipath->num_points-1; i++, wid++) *wid = *wid * mean_scaling; item->bbox.left = item->bbox.left*scaling_x + offset_x; item->bbox.right = item->bbox.right*scaling_x + offset_x; item->bbox.top = item->bbox.top*scaling_y + offset_y; item->bbox.bottom = item->bbox.bottom*scaling_y + offset_y; if (item->bbox.left > item->bbox.right) { temp = item->bbox.left; item->bbox.left = item->bbox.right; item->bbox.right = temp; } if (item->bbox.top > item->bbox.bottom) { temp = item->bbox.top; item->bbox.top = item->bbox.bottom; item->bbox.bottom = temp; } } if (item->type == ITEM_TEXT) { /* must scale about NW corner -- all other points of the text box are font- and zoom-dependent, so scaling about center of text box couldn't be undone properly. FIXME? */ item->font_size *= mean_scaling; item->bbox.left = item->bbox.left*scaling_x + offset_x; item->bbox.top = item->bbox.top*scaling_y + offset_y; } if (item->type == ITEM_IMAGE) { item->bbox.left = item->bbox.left*scaling_x + offset_x; item->bbox.right = item->bbox.right*scaling_x + offset_x; item->bbox.top = item->bbox.top*scaling_y + offset_y; item->bbox.bottom = item->bbox.bottom*scaling_y + offset_y; if (item->bbox.left > item->bbox.right) { temp = item->bbox.left; item->bbox.left = item->bbox.right; item->bbox.right = temp; } if (item->bbox.top > item->bbox.bottom) { temp = item->bbox.top; item->bbox.top = item->bbox.bottom; item->bbox.bottom = temp; } } // redraw the item if (item->canvas_item!=NULL) { group = (GnomeCanvasGroup *) item->canvas_item->parent; gtk_object_destroy(GTK_OBJECT(item->canvas_item)); make_canvas_item_one(group, item); } } } // Switch between button mappings /* NOTE ABOUT BUTTON MAPPINGS: ui.cur_mapping is 0 except while a canvas click event is being processed ... or if ui.button_switch_mapping is enabled and mappings are switched (but even then, canvas should have a pointer grab from the initial click that switched the mapping) */ void switch_mapping(int m) { if (ui.cur_mapping == m) return; ui.cur_mapping = m; if (ui.toolno[m] < NUM_STROKE_TOOLS) ui.cur_brush = &(ui.brushes[m][ui.toolno[m]]); if (ui.toolno[m] == TOOL_TEXT) ui.cur_brush = &(ui.brushes[m][TOOL_PEN]); if (m==0) ui.which_unswitch_button = 0; update_tool_buttons(); update_color_menu(); update_cursor(); } void process_mapping_activate(GtkMenuItem *menuitem, int m, int tool) { if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) return; if (ui.cur_mapping!=0 && !ui.button_switch_mapping) return; if (ui.toolno[m] == tool) return; switch_mapping(0); end_text(); ui.toolno[m] = tool; if (ui.linked_brush[m] == BRUSH_COPIED) { ui.linked_brush[m] = BRUSH_STATIC; update_mappings_menu_linkings(); } } // update the ordering of components in the main vbox const char *vbox_component_names[VBOX_MAIN_NITEMS]= {"scrolledwindowMain", "menubar", "toolbarMain", "toolbarPen", "hbox1"}; void update_vbox_order(int *order) { int i, j; GtkWidget *child; GtkBox *vboxMain = GTK_BOX(GET_COMPONENT("vboxMain")); gboolean present[VBOX_MAIN_NITEMS]; for (i=0; i=VBOX_MAIN_NITEMS) continue; present[order[i]] = TRUE; child = GET_COMPONENT(vbox_component_names[order[i]]); gtk_box_reorder_child(vboxMain, child, j++); gtk_widget_show(child); } for (i=1; ifont_name, ui.cur_item->font_size); else if (ui.selection!=NULL && ui.selection->items!=NULL && ui.selection->items->next==NULL && (it=(struct Item*)ui.selection->items->data)->type == ITEM_TEXT) str = g_strdup_printf("%s %.1f", it->font_name, it->font_size); else str = g_strdup_printf("%s %.1f", ui.font_name, ui.font_size); return str; } void update_font_button(void) { gchar *str; str = make_cur_font_name(); gtk_font_button_set_font_name(GTK_FONT_BUTTON(GET_COMPONENT("fontButton")), str); g_free(str); } gboolean can_accel(GtkWidget *widget, guint id, gpointer data) { return GTK_WIDGET_SENSITIVE(widget); } gboolean can_accel_except_text(GtkWidget *widget, guint id, gpointer data) { if (ui.cur_item_type == ITEM_TEXT) { g_signal_stop_emission_by_name(widget, "can-activate-accel"); return FALSE; } return GTK_WIDGET_SENSITIVE(widget); } void allow_all_accels(void) { g_signal_connect((gpointer) GET_COMPONENT("fileNew"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("fileOpen"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("fileSave"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("filePrint"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("filePrintPDF"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("fileQuit"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editUndo"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editRedo"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editCut"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editCopy"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editPaste"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("editDelete"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewFullscreen"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewZoomIn"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewZoomOut"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewNormalSize"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewPageWidth"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewFirstPage"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewPreviousPage"), "can-activate-accel", G_CALLBACK(can_accel_except_text), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewNextPage"), "can-activate-accel", G_CALLBACK(can_accel_except_text), NULL); g_signal_connect((gpointer) GET_COMPONENT("viewLastPage"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsPen"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsEraser"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsHighlighter"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsText"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsSelectRegion"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsSelectRectangle"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsVerticalSpace"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsHand"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsTextFont"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsRuler"), "can-activate-accel", G_CALLBACK(can_accel), NULL); g_signal_connect((gpointer) GET_COMPONENT("toolsReco"), "can-activate-accel", G_CALLBACK(can_accel), NULL); } void add_scroll_bindings(void) { GtkBindingSet *binding_set; binding_set = gtk_binding_set_by_class( G_OBJECT_GET_CLASS(GET_COMPONENT("scrolledwindowMain"))); gtk_binding_entry_add_signal(binding_set, GDK_Up, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, FALSE); gtk_binding_entry_add_signal(binding_set, GDK_KP_Up, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, FALSE); gtk_binding_entry_add_signal(binding_set, GDK_Down, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, FALSE); gtk_binding_entry_add_signal(binding_set, GDK_KP_Down, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, FALSE); gtk_binding_entry_add_signal(binding_set, GDK_Left, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, TRUE); gtk_binding_entry_add_signal(binding_set, GDK_KP_Left, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, TRUE); gtk_binding_entry_add_signal(binding_set, GDK_Right, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, TRUE); gtk_binding_entry_add_signal(binding_set, GDK_KP_Right, 0, "scroll_child", 2, GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, TRUE); } gboolean is_event_within_textview(GdkEventButton *event) { double pt[2]; if (ui.cur_item_type!=ITEM_TEXT) return FALSE; get_pointer_coords((GdkEvent *)event, pt); if (pt[0]bbox.left || pt[0]>ui.cur_item->bbox.right) return FALSE; if (pt[1]bbox.top || pt[1]>ui.cur_item->bbox.bottom) return FALSE; return TRUE; } void hide_unimplemented(void) { gtk_widget_hide(GET_COMPONENT("filePrintOptions")); gtk_widget_hide(GET_COMPONENT("journalFlatten")); gtk_widget_hide(GET_COMPONENT("helpIndex")); /* config file only works with glib 2.6 and beyond */ if (glib_minor_version<6) { gtk_widget_hide(GET_COMPONENT("optionsAutoSavePrefs")); gtk_widget_hide(GET_COMPONENT("optionsSavePreferences")); } /* gtkprint only works with gtk+ 2.10 and beyond */ if (gtk_check_version(2, 10, 0)) { gtk_widget_hide(GET_COMPONENT("filePrint")); } /* screenshot feature doesn't work yet in Win32 */ #ifdef WIN32 gtk_widget_hide(GET_COMPONENT("journalScreenshot")); #endif } // toggle fullscreen mode void do_fullscreen(gboolean active) { end_text(); ui.fullscreen = active; gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(GET_COMPONENT("viewFullscreen")), ui.fullscreen); gtk_toggle_tool_button_set_active( GTK_TOGGLE_TOOL_BUTTON(GET_COMPONENT("buttonFullscreen")), ui.fullscreen); if (ui.fullscreen) { #ifdef WIN32 gtk_window_get_size(GTK_WINDOW(winMain), &ui.pre_fullscreen_width, &ui.pre_fullscreen_height); gtk_widget_set_size_request(GTK_WIDGET(winMain), gdk_screen_width(), gdk_screen_height()); #endif gtk_window_fullscreen(GTK_WINDOW(winMain)); } else { #ifdef WIN32 gtk_widget_set_size_request(GTK_WIDGET(winMain), -1, -1); gtk_window_resize(GTK_WINDOW(winMain), ui.pre_fullscreen_width, ui.pre_fullscreen_height); #endif gtk_window_unfullscreen(GTK_WINDOW(winMain)); } update_vbox_order(ui.vertical_order[ui.fullscreen?1:0]); } /* attempt to work around GTK+ 2.16/2.17 bugs where random interface elements receive XInput events that they can't handle properly */ // prevent interface items from getting bogus XInput events gboolean filter_extended_events (GtkWidget *widget, GdkEvent *event, gpointer user_data) { if (event->type == GDK_MOTION_NOTIFY && event->motion.device != gdk_device_get_core_pointer()) return TRUE; if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) && event->button.device != gdk_device_get_core_pointer()) return TRUE; return FALSE; } /* Code to turn an extended input event into a core event and send it to a different GdkWindow -- e.g. could be used when a click in a text edit box gets sent to the canvas instead due to incorrect event translation. We now turn off xinput altogether while editing text under GTK+ 2.17, so this isn't needed any more... but could become useful again someday! */ /* gboolean fix_extended_events (GtkWidget *widget, GdkEvent *event, gpointer user_data) { int ix, iy; GdkWindow *window; if (user_data) window = (GdkWindow *)user_data; else window = widget->window; if (event->type == GDK_MOTION_NOTIFY && event->motion.device != gdk_device_get_core_pointer()) { // printf("fixing motion\n"); gdk_window_get_pointer(window, &ix, &iy, NULL); event->motion.x = ix; event->motion.y = iy; event->motion.device = gdk_device_get_core_pointer(); g_object_unref(event->motion.window); event->motion.window = g_object_ref(window); gtk_widget_event(widget, event); return TRUE; } if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) && event->button.device != gdk_device_get_core_pointer()) { // printf("fixing button from pos = %f, %f\n", event->button.x, event->button.y); gdk_window_get_pointer(window, &ix, &iy, NULL); event->button.x = ix; event->button.y = iy; event->button.device = gdk_device_get_core_pointer(); g_object_unref(event->button.window); event->button.window = g_object_ref(window); // printf("fixing button to pos = %f, %f\n", event->button.x, event->button.y); gtk_widget_event(widget, event); return TRUE; } return FALSE; } */ /* When enter is pressed into page spinbox, send focus back to canvas. */ gboolean handle_activate_signal(GtkWidget *widget, gpointer user_data) { reset_focus(); return FALSE; } /* recursively unset widget flags */ void unset_flags(GtkWidget *w, gpointer flag) { GTK_WIDGET_UNSET_FLAGS(w, (GtkWidgetFlags)flag); if(GTK_IS_CONTAINER(w)) gtk_container_forall(GTK_CONTAINER(w), unset_flags, flag); } /* reset focus when a key or button press event reaches someone, or when the page-number spin button should relinquish control... */ gboolean intercept_activate_events(GtkWidget *w, GdkEvent *ev, gpointer data) { if (w == GET_COMPONENT("hbox1")) { /* the event won't be processed since the hbox1 doesn't know what to do with it, so we might as well kill it and avoid confusing ourselves when it gets propagated further ... */ return TRUE; } if (w == GET_COMPONENT("spinPageNo")) { /* we let the spin button take care of itself, and don't steal its focus, unless the user presses Esc or Tab (in those cases we intervene) */ if (ev->type != GDK_KEY_PRESS) return FALSE; if (ev->key.keyval == GDK_Escape) gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), ui.pageno+1); // abort else if (ev->key.keyval != GDK_Tab && ev->key.keyval != GDK_ISO_Left_Tab) return FALSE; // let the spin button process it } // otherwise, we want to make sure the canvas or text item gets focus back... reset_focus(); return FALSE; } void install_focus_hooks(GtkWidget *w, gpointer data) { if (w == NULL) return; g_signal_connect(w, "key-press-event", G_CALLBACK(intercept_activate_events), data); g_signal_connect(w, "button-press-event", G_CALLBACK(intercept_activate_events), data); if (GTK_IS_MENU_ITEM(w)) { g_signal_connect(w, "activate", G_CALLBACK(intercept_activate_events), data); install_focus_hooks(gtk_menu_item_get_submenu(GTK_MENU_ITEM(w)), data); } if(GTK_IS_CONTAINER(w)) gtk_container_forall(GTK_CONTAINER(w), install_focus_hooks, data); } // wrapper for missing poppler functions (defunct poppler-gdk api) static void wrapper_copy_cairo_surface_to_pixbuf (cairo_surface_t *surface, GdkPixbuf *pixbuf) { int cairo_width, cairo_height, cairo_rowstride; unsigned char *pixbuf_data, *dst, *cairo_data; int pixbuf_rowstride, pixbuf_n_channels; unsigned int *src; int x, y; cairo_width = cairo_image_surface_get_width (surface); cairo_height = cairo_image_surface_get_height (surface); cairo_rowstride = cairo_image_surface_get_stride (surface); cairo_data = cairo_image_surface_get_data (surface); pixbuf_data = gdk_pixbuf_get_pixels (pixbuf); pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf); pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf); if (cairo_width > gdk_pixbuf_get_width (pixbuf)) cairo_width = gdk_pixbuf_get_width (pixbuf); if (cairo_height > gdk_pixbuf_get_height (pixbuf)) cairo_height = gdk_pixbuf_get_height (pixbuf); for (y = 0; y < cairo_height; y++) { src = (unsigned int *) (cairo_data + y * cairo_rowstride); dst = pixbuf_data + y * pixbuf_rowstride; for (x = 0; x < cairo_width; x++) { dst[0] = (*src >> 16) & 0xff; dst[1] = (*src >> 8) & 0xff; dst[2] = (*src >> 0) & 0xff; if (pixbuf_n_channels == 4) dst[3] = (*src >> 24) & 0xff; dst += pixbuf_n_channels; src++; } } } void wrapper_poppler_page_render_to_pixbuf (PopplerPage *page, int src_x, int src_y, int src_width, int src_height, double scale, int rotation, GdkPixbuf *pixbuf) { cairo_t *cr; cairo_surface_t *surface; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, src_width, src_height); cr = cairo_create (surface); cairo_save (cr); switch (rotation) { case 90: cairo_translate (cr, src_x + src_width, -src_y); break; case 180: cairo_translate (cr, src_x + src_width, src_y + src_height); break; case 270: cairo_translate (cr, -src_x, src_y + src_height); break; default: cairo_translate (cr, -src_x, -src_y); } if (scale != 1.0) cairo_scale (cr, scale, scale); if (rotation != 0) cairo_rotate (cr, rotation * G_PI / 180.0); poppler_page_render (page, cr); cairo_restore (cr); cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER); cairo_set_source_rgb (cr, 1., 1., 1.); cairo_paint (cr); cairo_destroy (cr); wrapper_copy_cairo_surface_to_pixbuf (surface, pixbuf); cairo_surface_destroy (surface); } xournal-0.4.8/src/xo-shapes.c0000644000175000017500000004660112347400061015511 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "xournal.h" #include "xo-shapes.h" #include "xo-paint.h" typedef struct Inertia { double mass, sx, sy, sxx, sxy, syy; } Inertia; typedef struct RecoSegment { struct Item *item; int startpt, endpt; double xcenter, ycenter, angle, radius; double x1, y1, x2, y2; gboolean reversed; } RecoSegment; struct RecoSegment recognizer_queue[MAX_POLYGON_SIDES+1]; int recognizer_queue_length; struct UndoItem *last_item_checker; // check if queue is stale void reset_recognizer(void) { recognizer_queue_length = 0; last_item_checker = NULL; } /* compute mass and moments of a stroke */ void incr_inertia(double *pt, struct Inertia *s, int coef) { double dm; dm = coef*hypot(pt[2]-pt[0], pt[3]-pt[1]); s->mass += dm; s->sx += dm*pt[0]; s->sy += dm*pt[1]; s->sxx += dm*pt[0]*pt[0]; s->syy += dm*pt[1]*pt[1]; s->sxy += dm*pt[0]*pt[1]; } void calc_inertia(double *pt, int start, int end, struct Inertia *s) { int i; s->mass = s->sx = s->sy = s->sxx = s->sxy = s->syy = 0.; for (i=start, pt+=2*start; istart) { s1 = s; incr_inertia(pt+2*(i1-1), &s1, 1); det1 = I_det(s1); } else det1 = 1.; if (i2start) { n1 = find_polygonal(pt, start, i1, (i2==end)?(nsides-1):(nsides-2), breaks, ss); if (n1 == 0) return 0; // it doesn't work } else n1 = 0; breaks[n1] = i1; breaks[n1+1] = i2; ss[n1] = s; if (i2breaks[i-1]+1) { // try moving the break to the left incr_inertia(pt+2*(breaks[i]-1), &s1, -1); incr_inertia(pt+2*(breaks[i]-1), &s2, 1); newcost = I_det(s1)*I_det(s1)+I_det(s2)*I_det(s2); if (newcost >= cost) break; improved = TRUE; cost = newcost; breaks[i]--; ss[i-1] = s1; ss[i] = s2; } if (improved) continue; s1 = ss[i-1]; s2 = ss[i]; while (breaks[i]= cost) break; cost = newcost; breaks[i]++; ss[i-1] = s1; ss[i] = s2; } } } /* find the geometry of a recognized segment */ void get_segment_geometry(double *pt, int start, int end, struct Inertia *s, struct RecoSegment *r) { double a, b, c, lmin, lmax, l; int i; r->xcenter = center_x(*s); r->ycenter = center_y(*s); a = I_xx(*s); b = I_xy(*s); c = I_yy(*s); /* max angle for inertia quadratic form solves: tan(2t) = 2b/(a-c) */ r->angle = atan2(2*b, a-c)/2; r->radius = sqrt(3*(a+c)); lmin = lmax = 0.; for (i=start, pt+=2*start; i<=end; i++, pt+=2) { l = (pt[0]-r->xcenter)*cos(r->angle)+(pt[1]-r->ycenter)*sin(r->angle); if (llmax) lmax = l; } r->x1 = r->xcenter + lmin*cos(r->angle); r->y1 = r->ycenter + lmin*sin(r->angle); r->x2 = r->xcenter + lmax*cos(r->angle); r->y2 = r->ycenter + lmax*sin(r->angle); } /* test if we have a circle; inertia has been precomputed by caller */ double score_circle(double *pt, int start, int end, struct Inertia *s) { double sum, x0, y0, r0, dm, deltar; int i; if (s->mass == 0.) return 0; sum = 0.; x0 = center_x(*s); y0 = center_y(*s); r0 = I_rad(*s); for (i=start, pt+=2*start; imass*r0); } /* replace strokes by various shapes */ void make_circle_shape(double x0, double y0, double r) { int npts, i; struct Item *item; struct UndoErasureData *erasure; npts = (int)(2*r); if (npts<12) npts = 12; // min. number of points realloc_cur_path(npts+1); ui.cur_path.num_points = npts+1; for (i=0;i<=npts; i++) { ui.cur_path.coords[2*i] = x0 + r*cos((2*M_PI*i)/npts); ui.cur_path.coords[2*i+1] = y0 + r*sin((2*M_PI*i)/npts); } } void calc_edge_isect(struct RecoSegment *r1, struct RecoSegment *r2, double *pt) { double t; t = (r2->xcenter - r1->xcenter) * sin(r2->angle) - (r2->ycenter - r1->ycenter) * cos(r2->angle); t /= sin(r2->angle-r1->angle); pt[0] = r1->xcenter + t*cos(r1->angle); pt[1] = r1->ycenter + t*sin(r1->angle); } void remove_recognized_strokes(struct RecoSegment *rs, int num_old_items) { struct Item *old_item; int i, shift; struct UndoErasureData *erasure; old_item = NULL; prepare_new_undo(); undo->type = ITEM_RECOGNIZER; undo->layer = ui.cur_layer; undo->erasurelist = NULL; shift = 0; for (i=0; iitem = old_item; erasure->npos = g_list_index(ui.cur_layer->items, old_item) + (shift++); erasure->nrepl = 0; erasure->replacement_items = NULL; undo->erasurelist = g_list_append(undo->erasurelist, erasure); if (old_item->canvas_item != NULL) gtk_object_destroy(GTK_OBJECT(old_item->canvas_item)); ui.cur_layer->items = g_list_remove(ui.cur_layer->items, old_item); ui.cur_layer->nitems--; } } struct Item *insert_recognized_curpath(void) { struct Item *item; int i; struct UndoErasureData *erasure; erasure = (struct UndoErasureData *)(undo->erasurelist->data); item = g_new(struct Item, 1); item->type = ITEM_STROKE; g_memmove(&(item->brush), &(erasure->item->brush), sizeof(struct Brush)); item->brush.variable_width = FALSE; subdivide_cur_path(); item->path = gnome_canvas_points_new(ui.cur_path.num_points); g_memmove(item->path->coords, ui.cur_path.coords, 2*ui.cur_path.num_points*sizeof(double)); item->widths = NULL; update_item_bbox(item); ui.cur_path.num_points = 0; erasure->nrepl++; erasure->replacement_items = g_list_append(erasure->replacement_items, item); ui.cur_layer->items = g_list_append(ui.cur_layer->items, item); ui.cur_layer->nitems++; make_canvas_item_one(ui.cur_layer->group, item); return item; } /* test if segments form standard shapes */ gboolean try_rectangle(void) { struct RecoSegment *rs, *r1, *r2; int i; double dist, avg_angle; // first, we need whole strokes to combine to 4 segments... if (recognizer_queue_length<4) return FALSE; rs = recognizer_queue + recognizer_queue_length - 4; if (rs->startpt!=0) return FALSE; // check edges make angles ~= Pi/2 and vertices roughly match avg_angle = 0.; for (i=0; i<=3; i++) { r1 = rs+i; r2 = rs+(i+1)%4; if (fabs(fabs(r1->angle-r2->angle)-M_PI/2) > RECTANGLE_ANGLE_TOLERANCE) return FALSE; avg_angle += r1->angle; if (r2->angle > r1->angle) avg_angle += (i+1)*M_PI/2; else avg_angle -= (i+1)*M_PI/2; // test if r1 points away from r2 rather than towards it r1->reversed = ((r1->x2-r1->x1)*(r2->xcenter-r1->xcenter)+ (r1->y2-r1->y1)*(r2->ycenter-r1->ycenter)) < 0; } for (i=0; i<=3; i++) { r1 = rs+i; r2 = rs+(i+1)%4; dist = hypot((r1->reversed?r1->x1:r1->x2) - (r2->reversed?r2->x2:r2->x1), (r1->reversed?r1->y1:r1->y2) - (r2->reversed?r2->y2:r2->y1)); if (dist > RECTANGLE_LINEAR_TOLERANCE*(r1->radius+r2->radius)) return FALSE; } // make a rectangle of the correct size and slope avg_angle = avg_angle/4; if (fabs(avg_angle)M_PI/2-SLANT_TOLERANCE) avg_angle = M_PI/2; realloc_cur_path(5); ui.cur_path.num_points = 5; for (i=0; i<=3; i++) rs[i].angle = avg_angle+i*M_PI/2; for (i=0; i<=3; i++) calc_edge_isect(rs+i, rs+(i+1)%4, ui.cur_path.coords+2*i+2); ui.cur_path.coords[0] = ui.cur_path.coords[8]; ui.cur_path.coords[1] = ui.cur_path.coords[9]; remove_recognized_strokes(rs, 4); insert_recognized_curpath(); return TRUE; } gboolean try_arrow(void) { struct RecoSegment *rs; int i, j; double alpha[3], dist, pt[2], tmp, delta; double x1, y1, x2, y2, angle; gboolean rev[3]; // first, we need whole strokes to combine to nsides segments... if (recognizer_queue_length<3) return FALSE; rs = recognizer_queue + recognizer_queue_length - 3; if (rs->startpt!=0) return FALSE; // check arrow head not too big, and orient main segment for (i=1; i<=2; i++) { if (rs[i].radius > ARROW_MAXSIZE*rs[0].radius) return FALSE; rev[i] = (hypot(rs[i].xcenter-rs->x1, rs[i].ycenter-rs->y1) < hypot(rs[i].xcenter-rs->x2, rs[i].ycenter-rs->y2)); } if (rev[1]!=rev[2]) return FALSE; if (rev[1]) { x1 = rs->x2; y1 = rs->y2; x2 = rs->x1; y2 = rs->y1; angle = rs->angle + M_PI; } else { x1 = rs->x1; y1 = rs->y1; x2 = rs->x2; y2 = rs->y2; angle = rs->angle; } // check arrow head not too big, and angles roughly ok for (i=1; i<=2; i++) { rs[i].reversed = FALSE; alpha[i] = rs[i].angle - angle; while (alpha[i]<-M_PI/2) { alpha[i]+=M_PI; rs[i].reversed = !rs[i].reversed; } while (alpha[i]>M_PI/2) { alpha[i]-=M_PI; rs[i].reversed = !rs[i].reversed; } #ifdef RECOGNIZER_DEBUG printf("DEBUG: arrow: alpha[%d] = %.1f degrees\n", i, alpha[i]*180/M_PI); #endif if (fabs(alpha[i])ARROW_ANGLE_MAX) return FALSE; } // check arrow head segments are roughly symmetric if (alpha[1]*alpha[2]>0 || fabs(alpha[1]+alpha[2]) > ARROW_ASYMMETRY_MAX_ANGLE) return FALSE; if (rs[1].radius/rs[2].radius > 1+ARROW_ASYMMETRY_MAX_LINEAR) return FALSE; if (rs[2].radius/rs[1].radius > 1+ARROW_ASYMMETRY_MAX_LINEAR) return FALSE; // check vertices roughly match calc_edge_isect(rs+1, rs+2, pt); for (j=1; j<=2; j++) { dist = hypot(pt[0]-(rs[j].reversed?rs[j].x1:rs[j].x2), pt[1]-(rs[j].reversed?rs[j].y1:rs[j].y2)); #ifdef RECOGNIZER_DEBUG printf("DEBUG: linear tolerance: tip[%d] = %.2f\n", j, dist/rs[j].radius); #endif if (dist>ARROW_TIP_LINEAR_TOLERANCE*rs[j].radius) return FALSE; } dist = (pt[0]-x2)*sin(angle)-(pt[1]-y2)*cos(angle); dist /= rs[1].radius + rs[2].radius; #ifdef RECOGNIZER_DEBUG printf("DEBUG: sideways gap tolerance = %.2f\n", dist); #endif if (fabs(dist)>ARROW_SIDEWAYS_GAP_TOLERANCE) return FALSE; dist = (pt[0]-x2)*cos(angle)+(pt[1]-y2)*sin(angle); dist /= rs[1].radius + rs[2].radius; #ifdef RECOGNIZER_DEBUG printf("DEBUG: main linear gap = %.2f\n", dist); #endif if (distARROW_MAIN_LINEAR_GAP_MAX) return FALSE; // make an arrow of the correct size and slope if (fabs(rs->angle)angle; y1 = y2 = rs->ycenter; } if (rs->angle>M_PI/2-SLANT_TOLERANCE) { // nearly vertical angle = angle - (rs->angle-M_PI/2); x1 = x2 = rs->xcenter; } if (rs->angle<-M_PI/2+SLANT_TOLERANCE) { // nearly vertical angle = angle - (rs->angle+M_PI/2); x1 = x2 = rs->xcenter; } delta = fabs(alpha[1]-alpha[2])/2; dist = (hypot(rs[1].x1-rs[1].x2, rs[1].y1-rs[1].y2) + hypot(rs[2].x1-rs[2].x2, rs[2].y1-rs[2].y2))/2; realloc_cur_path(2); ui.cur_path.num_points = 2; ui.cur_path.coords[0] = x1; ui.cur_path.coords[1] = y1; ui.cur_path.coords[2] = x2; ui.cur_path.coords[3] = y2; remove_recognized_strokes(rs, 3); insert_recognized_curpath(); realloc_cur_path(3); ui.cur_path.num_points = 3; ui.cur_path.coords[0] = x2 - dist*cos(angle+delta); ui.cur_path.coords[1] = y2 - dist*sin(angle+delta); ui.cur_path.coords[2] = x2; ui.cur_path.coords[3] = y2; ui.cur_path.coords[4] = x2 - dist*cos(angle-delta); ui.cur_path.coords[5] = y2 - dist*sin(angle-delta); insert_recognized_curpath(); return TRUE; } gboolean try_closed_polygon(int nsides) { struct RecoSegment *rs, *r1, *r2; int i; double dist, pt[2]; // first, we need whole strokes to combine to nsides segments... if (recognizer_queue_lengthstartpt!=0) return FALSE; // check vertices roughly match for (i=0; ireversed = (hypot(pt[0]-r1->x1,pt[1]-r1->y1) < hypot(pt[0]-r1->x2,pt[1]-r1->y2)); } for (i=0; ireversed?r1->x1:r1->x2)-pt[0],(r1->reversed?r1->y1:r1->y2)-pt[1]) + hypot((r2->reversed?r2->x2:r2->x1)-pt[0],(r2->reversed?r2->y2:r2->y1)-pt[1]); if (dist > POLYGON_LINEAR_TOLERANCE*(r1->radius+r2->radius)) return FALSE; if (fabs(pt[0])>2*ui.cur_page->width || fabs(pt[1])>2*ui.cur_page->height) return FALSE; } // make a polygon of the correct size and slope realloc_cur_path(nsides+1); ui.cur_path.num_points = nsides+1; for (i=0; itype!=ITEM_STROKE) return; if (undo->next != last_item_checker) reset_recognizer(); // reset queue if (last_item_checker!=NULL && ui.cur_layer != last_item_checker->layer) reset_recognizer(); it = undo->item; calc_inertia(it->path->coords, 0, it->path->num_points-1, &s); #ifdef RECOGNIZER_DEBUG printf("DEBUG: Mass=%.0f, Center=(%.1f,%.1f), I=(%.0f,%.0f, %.0f), " "Rad=%.2f, Det=%.4f \n", s.mass, center_x(s), center_y(s), I_xx(s), I_yy(s), I_xy(s), I_rad(s), I_det(s)); #endif // first see if it's a polygon n = find_polygonal(it->path->coords, 0, it->path->num_points-1, MAX_POLYGON_SIDES, brk, ss); if (n>0) { optimize_polygonal(it->path->coords, n, brk, ss); #ifdef RECOGNIZER_DEBUG printf("DEBUG: Polygon, %d edges: ", n); for (i=0; i MAX_POLYGON_SIDES) { // remove oldest polygonal stroke i=1; while (ipath->coords, brk[i], brk[i+1], ss+i, rs+i); } if (try_rectangle()) { reset_recognizer(); return; } if (try_arrow()) { reset_recognizer(); return; } if (try_closed_polygon(3)) { reset_recognizer(); return; } if (try_closed_polygon(4)) { reset_recognizer(); return; } if (n==1) { // current stroke is a line if (fabs(rs->angle)angle = 0.; rs->y1 = rs->y2 = rs->ycenter; } if (fabs(rs->angle)>M_PI/2-SLANT_TOLERANCE) { // nearly vertical rs->angle = (rs->angle>0)?(M_PI/2):(-M_PI/2); rs->x1 = rs->x2 = rs->xcenter; } realloc_cur_path(2); ui.cur_path.num_points = 2; ui.cur_path.coords[0] = rs->x1; ui.cur_path.coords[1] = rs->y1; ui.cur_path.coords[2] = rs->x2; ui.cur_path.coords[3] = rs->y2; remove_recognized_strokes(rs, 1); rs->item = insert_recognized_curpath(); } last_item_checker = undo; return; } // not a polygon: maybe a circle ? reset_recognizer(); if (I_det(s)>CIRCLE_MIN_DET) { score = score_circle(it->path->coords, 0, it->path->num_points-1, &s); #ifdef RECOGNIZER_DEBUG printf("DEBUG: Circle score: %.2f\n", score); #endif if (score < CIRCLE_MAX_SCORE) { make_circle_shape(center_x(s), center_y(s), I_rad(s)); recognizer_queue[0].item = it; remove_recognized_strokes(recognizer_queue, 1); insert_recognized_curpath(); } } } xournal-0.4.8/src/xo-image.h0000664000175000017500000000152711773660334015332 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ GdkPixbuf *pixbuf_from_buffer(const gchar *buf, gsize buflen); void create_image_from_pixbuf(GdkPixbuf *pixbuf, double *pt); void insert_image(GdkEvent *event); void rescale_images(void); xournal-0.4.8/src/Makefile.in0000644000175000017500000005736212353733740015523 0ustar aurouxauroux# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = xournal$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_xournal_OBJECTS = main.$(OBJEXT) xo-misc.$(OBJEXT) \ xo-file.$(OBJEXT) xo-paint.$(OBJEXT) xo-selection.$(OBJEXT) \ xo-clipboard.$(OBJEXT) xo-image.$(OBJEXT) xo-print.$(OBJEXT) \ xo-support.$(OBJEXT) xo-interface.$(OBJEXT) \ xo-callbacks.$(OBJEXT) xo-shapes.$(OBJEXT) xournal_OBJECTS = $(am_xournal_OBJECTS) am__DEPENDENCIES_1 = @WIN32_FALSE@xournal_DEPENDENCIES = ttsubset/libttsubset.a \ @WIN32_FALSE@ $(am__DEPENDENCIES_1) @WIN32_TRUE@xournal_DEPENDENCIES = win32/xournal.res \ @WIN32_TRUE@ ttsubset/libttsubset.a $(am__DEPENDENCIES_1) xournal_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xournal_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(xournal_SOURCES) DIST_SOURCES = $(xournal_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = ttsubset win32 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @WIN32_FALSE@SUBDIRS = ttsubset @WIN32_TRUE@SUBDIRS = ttsubset win32 INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @PACKAGE_CFLAGS@ xournal_SOURCES = \ main.c xournal.h \ xo-misc.c xo-misc.h \ xo-file.c xo-file.h \ xo-paint.c xo-paint.h \ xo-selection.c xo-selection.h \ xo-clipboard.c xo-clipboard.h \ xo-image.c xo-image.h \ xo-print.c xo-print.h \ xo-support.c xo-support.h \ xo-interface.c xo-interface.h \ xo-callbacks.c xo-callbacks.h \ xo-shapes.c xo-shapes.h @WIN32_TRUE@xournal_LDFLAGS = -mwindows @WIN32_FALSE@xournal_LDADD = ttsubset/libttsubset.a @PACKAGE_LIBS@ $(INTLLIBS) -lX11 -lz -lm @WIN32_TRUE@xournal_LDADD = win32/xournal.res ttsubset/libttsubset.a @PACKAGE_LIBS@ $(INTLLIBS) -lz all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) xournal$(EXEEXT): $(xournal_OBJECTS) $(xournal_DEPENDENCIES) $(EXTRA_xournal_DEPENDENCIES) @rm -f xournal$(EXEEXT) $(AM_V_CCLD)$(xournal_LINK) $(xournal_OBJECTS) $(xournal_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-clipboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-paint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-print.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-shapes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xo-support.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xournal-0.4.8/src/xo-support.h0000664000175000017500000000372211773660334015763 0ustar aurouxauroux/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # define Q_(String) g_strip_context ((String), gettext (String)) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define Q_(String) g_strip_context ((String), (String)) # define N_(String) (String) #endif /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps used in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description); xournal-0.4.8/src/xo-misc.h0000644000175000017500000001234312353475475015204 0ustar aurouxauroux/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ gchar *xo_basename(gchar *s, gboolean xplatform); gchar *candidate_save_filename(void); // data manipulation misc functions struct Page *new_page(struct Page *template); struct Page *new_page_with_bg(struct Background *bg, double width, double height); void set_current_page(gdouble *pt); void realloc_cur_path(int n); void realloc_cur_widths(int n); void clear_redo_stack(void); void clear_undo_stack(void); void prepare_new_undo(void); void delete_journal(struct Journal *j); void delete_page(struct Page *pg); void delete_layer(struct Layer *l); // referenced strings struct Refstring *new_refstring(const char *s); struct Refstring *refstring_ref(struct Refstring *rs); void refstring_unref(struct Refstring *rs); // helper functions int finite_sized(double x); void get_pointer_coords(GdkEvent *event, double *ret); void get_current_pointer_coords(double *ret); double get_pressure_multiplier(GdkEvent *event); void fix_xinput_coords(GdkEvent *event); void emergency_enable_xinput(GdkInputMode mode); void update_item_bbox(struct Item *item); void make_page_clipbox(struct Page *pg); void make_canvas_items(void); void make_canvas_item_one(GnomeCanvasGroup *group, struct Item *item); void update_canvas_bg(struct Page *pg); gboolean is_visible(struct Page *pg); void rescale_bg_pixmaps(void); gboolean have_intersect(struct BBox *a, struct BBox *b); void lower_canvas_item_to(GnomeCanvasGroup *g, GnomeCanvasItem *item, GnomeCanvasItem *after); void rgb_to_gdkcolor(guint rgba, GdkColor *color); guint32 gdkcolor_to_rgba(GdkColor gdkcolor, guint16 alpha); // interface misc functions void update_thickness_buttons(void); void update_color_buttons(void); void update_tool_buttons(void); void update_tool_menu(void); void update_ruler_indicator(void); void update_color_menu(void); void update_pen_props_menu(void); void update_eraser_props_menu(void); void update_highlighter_props_menu(void); void update_mappings_menu_linkings(void); void update_mappings_menu(void); void update_page_stuff(void); void update_toolbar_and_menu(void); void update_file_name(char *filename); void update_undo_redo_enabled(void); void update_copy_paste_enabled(void); void update_vbox_order(int *order); gchar *make_cur_font_name(void); void update_font_button(void); void update_mapping_linkings(int toolno); void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all); void set_cur_color(int color_no, guint color_rgba); void recolor_temp_text(int color_no, guint color_rgba); void process_color_activate(GtkMenuItem *menuitem, int color_no, guint color_rgba); void process_thickness_activate(GtkMenuItem *menuitem, int tool, int val); void process_papercolor_activate(GtkMenuItem *menuitem, int color, guint rgba); void process_paperstyle_activate(GtkMenuItem *menuitem, int style); gboolean ok_to_close(void); void reset_focus(void); // selection / clipboard stuff void reset_selection(void); void move_journal_items_by(GList *itemlist, double dx, double dy, struct Layer *l1, struct Layer *l2, GList *depths); void resize_journal_items_by(GList *itemlist, double scaling_x, double scaling_y, double offset_x, double offset_y); // switch between mappings void switch_mapping(int m); void process_mapping_activate(GtkMenuItem *menuitem, int m, int tool); // always allow accels void allow_all_accels(void); gboolean can_accel(GtkWidget *widget, guint id, gpointer data); void add_scroll_bindings(void); gboolean is_event_within_textview(GdkEventButton *event); void hide_unimplemented(void); void do_fullscreen(gboolean active); // fix GTK+ 2.16/2.17 issues with XInput events gboolean filter_extended_events(GtkWidget *widget, GdkEvent *event, gpointer user_data); // gboolean fix_extended_events(GtkWidget *widget, GdkEvent *event, gpointer user_data); // help with focus gboolean handle_activate_signal(GtkWidget *widget, gpointer user_data); void unset_flags(GtkWidget *w, gpointer flag); gboolean intercept_activate_events(GtkWidget *w, GdkEvent *ev, gpointer data); void install_focus_hooks(GtkWidget *w, gpointer data); // wrapper for a function no longer provided by poppler 0.17+ void wrapper_poppler_page_render_to_pixbuf (PopplerPage *page, int src_x, int src_y, int src_width, int src_height, double scale, int rotation, GdkPixbuf *pixbuf); // defines for paper rulings #define RULING_MARGIN_COLOR 0xff0080ff #define RULING_COLOR 0x40a0ffff #define RULING_THICKNESS 0.5 #define RULING_LEFTMARGIN 72.0 #define RULING_TOPMARGIN 80.0 #define RULING_SPACING 24.0 #define RULING_BOTTOMMARGIN RULING_SPACING #define RULING_GRAPHSPACING 14.17 xournal-0.4.8/po/0000775000175000017500000000000012353742063013270 5ustar aurouxaurouxxournal-0.4.8/po/it.gmo0000664000175000017500000005264011772715212014417 0ustar aurouxaurouxÞ•ô{̸ ¹ÄŠÍ-X4†+»IçL1I~3ÈSü<P#?±FñL83…S¹< #J?nF®LõZB>;Ü+2F=y@·?ø8*K5v8¬8å7 6V ] Dë h0!<™!1Ö!o"5x",®"Û"õ"#)#0# 6#%W#Q}#'Ï#-÷#,%$R$8k$+¤$#Ð$*ô$*%J%0g%=˜%BÖ%:&#T&Bx&»&½&¿&Á&Ã&Å&Ç&É&Ë&Í&Ð&ß& ö& ' ''0'K' \'g' ~'‹'‘'–'¨'º'Ò'×'4÷'<,(3i((»(Â(Æ(Î(Ý( ñ( ý( ) )F()o)v)†)Ÿ)½)Õ) ì)ú) ÿ) *** !* ,*6* >*J*:_*š* °*º*Ã* Ù* ä*ð*ø*ÿ*+++'+ 8+ B+N+a+f+ v+ƒ+Œ+ “++ ·+ Ã+ Î+ Ú+ æ+ ó+,, ,,, 1, ?,M,a,s,w,|,ƒ,‰, Ž,›, ±,½,Ì, Ý,ë,ý, --+-4-D-U-"d-‡-- ¢-°-¶- È-Ò-'è-.. .*.9.?.\F.£. «. ¸.Æ.Í.Õ.Þ.å.ì. ó.ÿ. / #/0/6/ >/J/Y/ _/k/t/ z/ †/ “/ž/µ/ Æ/ Ñ/ Ü/æ/ï/õ/ú/0080 J0T0 f0r0x000•0›0 ¡0­0½0Ã0Ê0 Ñ0Þ0å0î0ö0 þ0 111$1 +151 <1G1 N1 [1e1 m1{1‚1…1‹1 Ž1 š1§1°1·1 ¾1‚Ê1 M3 Z3 e3:4KA4>4MÌ4J5Je5K°5‚ü5W6A×6j7|„7|8K~8‚Ê8WM9A¥9jç9|R:|Ï:fL;R³;B<%I<&o<B–<TÙ<I.=cx=Ü=;ü=M8>B†>@É>< ?MG?‰•?O@po@Là@>-A lAA B.OB3~B2²BåBC C=C:PCq‹C0ýC?.DBnD#±DQÕD3'E,[E3ˆE9¼E"öEBF7\F<”F7ÑF& GR0GƒG…G‡G‰G‹GGG‘G“G•G˜G&©GÐG èG õGH#H@H_HfH }H‰HŽH’H§H ¼HÝH*ãHEIETINšIéI JJ J+J>JYJkJ~J‘JF¢JéJïJ&K(+K$TK&yK K¯K ´KÁKÑKØKÞKøKL L(LFDL‹L ©L ·LÂL âL íLúLMM MM*M=MQMcMvMM •M ¡M®M·M¿MÈMâM÷MNN ,N :NGNONUNjN qN’N¤N¶NÒNåNëN ñNûNO OO7OKO^OqOƒO—O±OÊO ãO ðOþOP*PHPfPlP„P‹P ›P§P1ÁPóP ûP QQ%Q ,Q]7Q•Q QªQºQ ÁQ ÍQÛQâQûQ R R)RÌTÈp~§æ2‡Å‰å(žXñE'6çGM|wµP£Qd›Y°­g‚Á"z[Ðþô÷¿Z)©?—¸ºÑ¥–ïÒˆ_·í\4;€WÉ‘áDÞŒH®jÎ t¶Ý™¾CŽ 5=߆ä…ðüÆ„œl鯴¢¼0ƒuõ]ÛË3UÏf:eÕ±úhÍö$ Sr}¡âÖ¨7 mÚ ^ʽÜèòqnîÔ/*o“ùÓFý<¹Ÿ+²ó-Rãv9ÄàÇi@ªsˬ1 { šy ؘŠ•  Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-13 18:13+0200 PO-Revision-Date: 2009-10-15 10:11+0200 Last-Translator: Marco Poletti Language-Team: Italian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.0 Plural-Forms: nplurals=2; plural=(n != 1); Livello: Pagina File di configurazione di Xournal. Questo file è generato automaticamente quando si salvano le impostazioni. Fare attenzione se si modifica il file a mano. mappa sempre la punta della gomma come gomma (true/false) applica le modifiche allo stile della carta a tutte le pagine (vero/falso) salva automaticamente le impostazioni all'uscita (true/false) carica automaticamente il file .pdf.xoj al posto di quello .pdf (true/false) risoluzione degli sfondi bitmap PDF per la stampa con libgnomeprint (dpi) risoluzione degli sfondi bitmap PS/PDF renderizzati con ghostscript (dpi) colore del tratto associato al pulsante 2 (solo per penna e evidenziatore) il tratto associato al pulsante 2 è collegato al tratto primario (true/false) (questa impostazione ha la precedenza sulle altre) dimensione del tratto associato al pulsante 2 (solo per penna, gomma ed evidenziatore) modalità della gomma assciata al pulsante 2 (solo per la gomma) il tratto associato al pulsante 2 è in modalità righello (true/false) (solo per penna ed evidenziatore) il tratto associato al pulsante 2 è in modalità riconoscimento delle forme (vero/falso) (solo per penna ed evidenziatore) strumento associato al pulsante 2 («pen», «eraser», «highlighter», «text» «selectrect», «vertspace» o «hand») colore del tratto associato al pulsante 3 (solo per penna e evidenziatore) il tratto associato al pulsante 3 è collegato al tratto primario (true/false) (questa impostazione ha la precedenza sulle altre) dimensione del tratto associato al pulsante 3 (solo per penna, gomma ed evidenziatore) modalità della gomma assciata al pulsante 3 (solo per la gomma) il tratto associato al pulsante 3 è in modalità righello (true/false) (solo per penna ed evidenziatore) il tratto associato al pulsante 3 è in modalità riconoscimento delle forme (true/false) (solo per penna ed evidenziatore) strumento associato al pulsante 3 («pen», «eraser», «highlighter», «text» «selectrect», «vertspace» o «hand») i pulsanti 2 e 3 modificano la mappatura invece di disegnare (utile per certe tavolette) (true/false) modalità della gomma predefinita (0: normale, 1: bianchetto, 2: cancella tratti) dimensione della gomma predefinita (1: fine, 2: media, 3: spessa) dimensione del carattere predefinito colore dell'evidenziatore predefinito l'evidenziatore predefinito è in modalità righello (true/false) l'evidenziatore predefinito è in modalità riconoscimento delle forme (true/false) dimensione dell'evidenziatore predefinito (1: fine, 2: medio, 3: spesso) percorso predefinito per l'apertura/salvataggio (lasciare vuoto per indicare la cartella corrente) colore della penna predefinita la penna predefinita è in modalità righello (true/false) la penna predefinita è in modalità riconoscimento delle forme (true/false) dimensione della penna predefinita (1: fine, 2: media, 3: spessa) scarta gli eventi Core Pointer in modalità XInput (true/false) vista del documento (true: continuo, false: singola pagina) nascondi alcuni elementi del menu e delle barre degli strumenti (true/false) opacità dell'evidenziatore (da 0 a 1, il valore predefinito è 0,5) attenzione: il livello di opacità non viene salvato nei file xoj! includi le righe della carta quando si stampa o si esporta in PDF (true/false) componenti dell'interfaccia dall'alto in basso valori validi: drawarea menu main_toolbar pen_toolbar statusbar componenti dell'interfaccia in modalità a tutto shermo, dall'alto in basso barra di scorrimento a sinistra nell'interfaccia (true/false) elementi dell'interfaccia da nascondere (modificare a proprio rischio e pericolo!) vedere il file sorgente xo-interface.c per la lista dei nomi degli elementi aggiornamento progressivo dello sfondo delle pagine (true/false) massimizza la finestra all'avvio (true/false) moltiplicatore massimo della dimensione del tratto moltiplicatore minimo della dimensione del tratto nome del carattere predefinito su %d su n unità di misura preferita («cm», «in», «px» o «pt») passo di incremento della barra di scorrimento (in pixel) strumento selezionato all'avvio («pen», «eraser», «highlighter», «selectrect», «vertspace» o «hand») avvia in modalità a tutto schermo (true/false) l'altezza predefinita delle pagine, in punti (1/72 di pollice) la larghezza predefinita delle pagine, in punti (1/72 di pollice) il colore predefinito per la carta lo stile predefinito per la carta («plain», «lined», «ruled», o «graph») la risoluzione dello schermo, in pixel per pollice il livello iniziale di zoom, in percentuale fattore moltiplicativo per lo zoom avanti/indietro passo di incremento della finestra di dialogo dello zoom l'altezza della finestra in pixel la larghezza della finestra in pixel (quando non è massimizzata) larghezza delle varie gomme (in punti, 1 pt = 1/72 in) larghezza dei vari evidenziatori (in punti, 1 pt = 1/72 in) larghezza delle varie penne (in punti, 1 pt = 1/72 in) usa le estensioni XInput (true/false) usa il sensore di pressione per controllare la dimensione del tratto (true/false)%01234567A4A4 (orizzontale)Salva _automaticamente le impostazioniInformazioni su XournalTutti i fileAnnota _PDFApplica a _tutte le pagineIncorpora file insieme agli appuntiCarica automaticamente pdf.xojSfondoSchermata come sf_ondoFile bitmapNeroBluMappa il pulsante _2Mappa il pulsante _3I pulsanti cambiano la mappaturaCopiaApertura dello sfondo «%s» non riuscita.Apertura dello sfondo «%s» non riuscita. Selezionare un'altro file?Apertura dello sfondo «%s» non riuscita. Imposto uno sfondo bianco.Scrittura dello sfondo «%s» non riuscita. Il programma continuerà comunque.File pixmap «%s» non trovato.PersonalizzatoTagliaPredefinitoGo_mma predefinitaEviden_ziatore predefinitoPenna predefinitaTe_sto predefinitoC_arta predefinitaElimi_na livelloNon è permesso disegnare sul livello di sfondo. Imposto il livello 1.GommaOpzioni della g_ommaErrore nella creazione del file «%s»Errore nell'apertura dello sfondo «%s»Errore nell'apertura del file «%s»Errore nel salvataggio del file «%s»Esporta in PDFFinePrima paginaA tutto schermoGrigioVerdeStr_umento di navigazioneStrumento di navigazioneAltezza:EvidenziatoreOpzioni dell'evi_denziatoreI parametri della riga di comando non sono validi. Uso: %s [file.xoj] Contenuto del file non validoUltima paginaLivello %dBarra di scorrimento a sinistraBlu chiaroVerde chiaroMagentaMedioN/DNuovoNuova pagina alla _fineNuova pagina _dopoNuova pagina _primaPagina successivaDimensioni normaliDimensioni normali (100%)ApriApri sfondoApri appuntiApri PDFArancioFile PDFFile PS/PDF (come bitmap)Altezza della paginaLarghezza pagina_Larghezza paginaDi_mensione carta_Colore carta_Stile cartaIncollaPennaOpzioni della penn_aMatitaScegliere un colore per la cartaPagina precedenteOpzioni di stampaStampa le _righe del foglioDocumenti _recentiRossoRifaiRighe_lloRighelloSalvaSalva appuntiSalvare le modifiche a «%s»?Seleziona carattereSeleziona re_gioneSeleziona riquadroSeleziona regioneSeleziona ri_quadro_Imposta come predefinitoImposta come predefinitoImposta dimensione cartaImposta zoomCambia paginaRiconoscimento delle formeAccorcia i _menuSovrascrivere il file «%s»?Dimensioni carta predefinite:TestoCa_rattere del testo...SpessoA tutto schermoLettera USALettera USA (orizzontale)Render di una o più pagine del PDF non riuscito.AnnullaSenza titoloUsa _XInputSpazio verticaleBiancoLarghezza:Scritto da Denis Auroux con contributi di altri http://xournal.sourceforge.net/ XournalXournal - %sFile di XournalGialloZoom avantiZoom indietroZoom: _Informazioni su Xournal_Colore_Continuo_Copia della penna primariaPe_nna predefinita_Elimina pagina_Modifica_GommaAbilita _gomma dello stiloEsp_orta in PDF_FileP_rima pagina_Unisci livelli_Aiuto_Nascondi livello_EvidenziatoreU_ltima pagina_Collegamento alla penna primariaCa_rica sfondoNuo_vo livelloPagina _successiva_Una paginaImp_ostazioni_Pagina_Penna_Sensibile alla pressionePagina _precedenteCaricamento _progressivo degli sfondi_Salva le impostazioni_Imposta zoomRiconoscimento delle _forme_Visualizza livello_TestoS_trumentiSpa_zio verticale_Visualizza_Zoom_BluCarta b_lu_Elimina tratti_FineA _quadretti_VerdeCarta _verdeA righe _con margine_Magenta_Media_ArancioCarta _arancioCarta _rosaA _tinta unita_RossoA righe _senza margine_Normale_SpessaMolto fi_neBian_coCarta _bianca_BianchettoG_ialloCarta _gialla_Nerocm_GrigioinB_lu chiaroV_erde chiaroaltro...pixelpuntiMo_lto spessaxournal-0.4.8/po/Makefile.in.in0000644000175000017500000001760412353733737015760 0ustar aurouxauroux# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ libdir = @libdir@ localedir = $(libdir)/locale gnulocaledir = $(datadir)/locale gettextsrcdir = $(datadir)/glib-2.0/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = mkdir -p CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: $(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) \ --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ --add-comments --keyword=_ --keyword=N_ \ --keyword=C_:1c,2 \ --keyword=NC_:1c,2 \ --keyword=g_dcgettext:2 \ --keyword=g_dngettext:2,3 \ --keyword=g_dpgettext2:2c,3 \ --flag=N_:1:pass-c-format \ --flag=C_:2:pass-c-format \ --flag=NC_:2:pass-c-format \ --flag=g_dngettext:2:pass-c-format \ --flag=g_strdup_printf:1:c-format \ --flag=g_string_printf:2:c-format \ --flag=g_string_append_printf:2:c-format \ --flag=g_error_new:3:c-format \ --flag=g_set_error:4:c-format \ --flag=g_markup_printf_escaped:1:c-format \ --flag=g_log:3:c-format \ --flag=g_print:1:c-format \ --flag=g_printerr:1:c-format \ --flag=g_printf:1:c-format \ --flag=g_fprintf:2:c-format \ --flag=g_sprintf:2:c-format \ --flag=g_snprintf:3:c-format \ --flag=g_scanner_error:2:c-format \ --flag=g_scanner_warn:2:c-format \ $(POTFILES) \ && test ! -f $(GETTEXT_PACKAGE).po \ || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ $(MKINSTALLDIRS) $$dir; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "glib"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done if test "$(PACKAGE)" = "glib"; then \ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ fi check: all dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done # POTFILES is created from POTFILES.in by stripping comments, empty lines # and Intltool tags (enclosed in square brackets), and appending a full # relative path to them POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' \ -e "s/^\[.*\] +//" \ -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && $(SHELL) ./config.status $(subdir)/$@.in # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xournal-0.4.8/po/ChangeLog0000644000175000017500000000131312353733764015046 0ustar aurouxaurouxVersion 0.4.8: - added Chinese (simplified) translation (by Mutse) - updated German translation (Stefan Holtzhauer) - added Polish translation (Mis Uszatek) - added Chinese (traditional) translation (William Chao) - added Japanese translation (Hiroshi Saito) Version 0.4.6: - added Italian translation (by Marco Poletti) - added German translation (by Stefan Lembach) - added Spanish translation (by Alvaro) - added Brazilian Portuguese translation (by Marco Souza) - added Czech translation (by David Kolibac) - Spanish translation proofread/corrected by Borja Barriopedro Perona - added Dutch translation (by Timo Kluck) Version 0.4.5: - added Catalan translation (by David Planella) - added French translation xournal-0.4.8/po/cs.po0000664000175000017500000007234011773660334014250 0ustar aurouxauroux# This file is distributed under the same license as the xournal package. # # David Kolibac , 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: 2010-08-01 22:54+0200\n" "Last-Translator: David Kolibac \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "Neplatné parametry v příkazovém řádku.\n" "Použití: %s [soubor.xoj]\n" #: src/main.c:291 src/xo-callbacks.c:105 src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "Chyba pÅ™i otevírání souboru '%s'" #: src/xo-interface.c:350 src/xo-interface.c:2951 src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_Soubor" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Anotovat PD_F" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Poslední dok_umenty" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Nastavení tisku" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Exportovat do PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "_Upravit" #: src/xo-interface.c:516 msgid "_View" msgstr "_Zobrazení" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Plynulý" #: src/xo-interface.c:529 msgid "_One Page" msgstr "_Jedna stránka" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "Celá obrazovka" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "_PÅ™iblížení" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "Šířka _stránky" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "Na_stavit pÅ™iblížení" #: src/xo-interface.c:600 msgid "_First Page" msgstr "P_rvní stránka" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "_PÅ™edchozí stránka" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "_Následující stránka" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "Pos_lední stránka" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "Zobrazit vr_stvu" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "S_krýt vrstvu" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Stránka" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Nová stránka _pÅ™ed aktuální" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Nová stránka _za aktuální" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Nová stránka na _konec" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "_Smazat stránku" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "_Nová vrstva" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "Smazat v_rstvu" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "Zp_loÅ¡tit" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "_Velikost papíru" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Barva papíru" #: src/xo-interface.c:721 msgid "_white paper" msgstr "_bílý papír" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "ž_lutý papír" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "_růžový papír" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "_oranžový papír" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "_modrý papír" #: src/xo-interface.c:751 msgid "_green paper" msgstr "_zelený papír" #: src/xo-interface.c:757 src/xo-interface.c:1025 msgid "other..." msgstr "_jiná..." #: src/xo-interface.c:761 src/xo-interface.c:797 src/xo-interface.c:1029 #: src/xo-interface.c:1270 src/xo-interface.c:1346 msgid "NA" msgstr "Neznámý" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "_Druh papíru" #: src/xo-interface.c:773 msgid "_plain" msgstr "Äi_stý" #: src/xo-interface.c:779 msgid "_lined" msgstr "_linkovaný s okrajem" #: src/xo-interface.c:785 msgid "_ruled" msgstr "l_inkovaný" #: src/xo-interface.c:791 msgid "_graph" msgstr "Ä_tvereÄkovaný" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "P_oužít na vÅ¡echny stránky" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "N_aÄíst pozadí" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Sním_ek obrazovky jako pozadí" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "Výc_hozí papír" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Nastavit _jako výchozí" #: src/xo-interface.c:836 msgid "_Tools" msgstr "_Nástroje" #: src/xo-interface.c:843 src/xo-interface.c:1206 src/xo-interface.c:1282 msgid "_Pen" msgstr "_Pero" #: src/xo-interface.c:852 src/xo-interface.c:1212 src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Zmizík" #: src/xo-interface.c:861 src/xo-interface.c:1218 src/xo-interface.c:1294 msgid "_Highlighter" msgstr "Z_výrazňovaÄ" #: src/xo-interface.c:870 src/xo-interface.c:1224 src/xo-interface.c:1300 msgid "_Text" msgstr "_Text" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "_Rozpoznávání tvarů" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "Pr_avítko" #: src/xo-interface.c:903 src/xo-interface.c:1230 src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "VýbÄ›r _oblasti" #: src/xo-interface.c:912 src/xo-interface.c:1236 src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "VýbÄ›r ob_délníku" #: src/xo-interface.c:921 src/xo-interface.c:1242 src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "Vert_ikální místo" #: src/xo-interface.c:930 src/xo-interface.c:1248 src/xo-interface.c:1324 msgid "H_and Tool" msgstr "_Nástroj prohlížení" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Barva" #: src/xo-interface.c:954 msgid "blac_k" msgstr "Äe_rná" #: src/xo-interface.c:960 msgid "_blue" msgstr "_modrá" #: src/xo-interface.c:966 msgid "_red" msgstr "Ä_ervená" #: src/xo-interface.c:972 msgid "_green" msgstr "_zelená" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "Å¡e_dá" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "b_ledÄ› modrá" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "bledÄ› zele_ná" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_fialová" #: src/xo-interface.c:1007 msgid "_orange" msgstr "_oranžová" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "žl_utá" #: src/xo-interface.c:1019 msgid "_white" msgstr "_bílá" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "N_astavení pera" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "_velmi tenké" #: src/xo-interface.c:1047 src/xo-interface.c:1078 src/xo-interface.c:1126 msgid "_fine" msgstr "_tenké" #: src/xo-interface.c:1053 src/xo-interface.c:1084 src/xo-interface.c:1132 msgid "_medium" msgstr "_stÅ™ední" #: src/xo-interface.c:1059 src/xo-interface.c:1090 src/xo-interface.c:1138 msgid "_thick" msgstr "t_lusté" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "v_elmi tlusté" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "_Nastavení zmizíku" #: src/xo-interface.c:1101 msgid "_standard" msgstr "_výchozí" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "_bÄ›lení" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_mazání tahů" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Na_stavení zvýrazňovaÄe" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "_Písmo textu..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "Výchozí _pero" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Výchozí _zmizík" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Výchozí z_výrazňovaÄ" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Výchozí _text" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Nastavit jako výchozí" #: src/xo-interface.c:1180 msgid "_Options" msgstr "Nastav_ení" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Používat _XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Å piÄka _zmizíku" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "_Citlivost na tlak" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Nastavení tlaÄítka _2" #: src/xo-interface.c:1258 src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "_Navázat na primární nástroj" #: src/xo-interface.c:1264 src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Kopie aktuálního nástroje" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Nastavení tlaÄítka _3" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "ZamÄ›nit mapování tlaÄítek" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "_Posouvající se pozadí" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "_Tisknout linkování papíru" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "Automaticky naÄítat pdf.xoj" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "Posuvník vlevo" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "Zkrátit _nabídky" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "A_utomaticky ukládat nastavení" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "_Uložit nastavení" #: src/xo-interface.c:1393 msgid "_Help" msgstr "Nápo_vÄ›da" #: src/xo-interface.c:1404 msgid "_About" msgstr "_O programu" #: src/xo-interface.c:1417 msgid "Save" msgstr "Uložit" #: src/xo-interface.c:1422 msgid "New" msgstr "Nový" #: src/xo-interface.c:1427 msgid "Open" msgstr "Otevřít" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Vyjmout" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Kopírovat" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Vložit" #: src/xo-interface.c:1463 msgid "Undo" msgstr "ZpÄ›t" #: src/xo-interface.c:1468 msgid "Redo" msgstr "VpÅ™ed" #: src/xo-interface.c:1481 msgid "First Page" msgstr "První stránka" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "PÅ™edchozí stránka" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Následující stránka" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Poslední stránka" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Oddálit" #: src/xo-interface.c:1514 src/xo-interface.c:3045 msgid "Page Width" msgstr "Šířka stránky" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "PÅ™iblížit" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Normální velikost" #: src/xo-interface.c:1530 src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Nastavit pÅ™iblížení" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "PÅ™epnout režim celé obrazovky" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "Tužka" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Pero" #: src/xo-interface.c:1559 src/xo-interface.c:1565 msgid "Eraser" msgstr "Zmizík" #: src/xo-interface.c:1570 src/xo-interface.c:1576 msgid "Highlighter" msgstr "ZvýrazňovaÄ" #: src/xo-interface.c:1581 src/xo-interface.c:1587 msgid "Text" msgstr "Text" #: src/xo-interface.c:1592 src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Rozpoznávání tvarů" #: src/xo-interface.c:1601 src/xo-interface.c:1607 msgid "Ruler" msgstr "Pravítko" #: src/xo-interface.c:1618 src/xo-interface.c:1624 msgid "Select Region" msgstr "VýbÄ›r oblasti" #: src/xo-interface.c:1629 src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "VýbÄ›r obdélníku" #: src/xo-interface.c:1640 src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Vertikální místo" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Nástroj prohlížení" #: src/xo-interface.c:1670 src/xo-interface.c:1674 msgid "Default" msgstr "Výchozí" #: src/xo-interface.c:1678 src/xo-interface.c:1681 msgid "Default Pen" msgstr "Výchozí pero" #: src/xo-interface.c:1692 src/xo-interface.c:1700 msgid "Fine" msgstr "Tenká" #: src/xo-interface.c:1705 src/xo-interface.c:1713 msgid "Medium" msgstr "StÅ™ední" #: src/xo-interface.c:1718 src/xo-interface.c:1726 msgid "Thick" msgstr "Tlustá" #: src/xo-interface.c:1745 src/xo-interface.c:1752 msgid "Black" msgstr "ÄŒerná" #: src/xo-interface.c:1757 src/xo-interface.c:1764 msgid "Blue" msgstr "Modrá" #: src/xo-interface.c:1769 src/xo-interface.c:1776 msgid "Red" msgstr "ÄŒervená" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Green" msgstr "Zelená" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Gray" msgstr "Å edá" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Light Blue" msgstr "BledÄ› modrá" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Light Green" msgstr "BledÄ› zelená" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Magenta" msgstr "Fialová" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Orange" msgstr "Oranžová" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Yellow" msgstr "Žlutá" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "White" msgstr "Bílá" #: src/xo-interface.c:1919 msgid " Page " msgstr " Stránka " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Nastavit Äíslo stránky" #: src/xo-interface.c:1931 msgid " of n" msgstr " z n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Vrstva: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Nastavit velikost papíru" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Standardní velikosti papíru:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (na šířku)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "US Letter" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "US Letter (na šířku)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Vlastní" #: src/xo-interface.c:2856 msgid "Width:" msgstr "Šířka:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "Výška:" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "in" #: src/xo-interface.c:2879 msgid "pixels" msgstr "pixelů" #: src/xo-interface.c:2880 msgid "points" msgstr "bodů" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "O aplikaci Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Napsal Denis Auroux\n" "s dalšími pÅ™ispÄ›vateli\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "PÅ™iblížení: " #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Normální velikost (100 %)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Výška stránky" #. user aborted on save confirmation #: src/xo-callbacks.c:51 src/xo-file.c:665 msgid "Open PDF" msgstr "Otevřít PDF" #: src/xo-callbacks.c:59 src/xo-callbacks.c:132 src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 src/xo-callbacks.c:1444 src/xo-file.c:673 msgid "All files" msgstr "VÅ¡echny soubory" #: src/xo-callbacks.c:62 src/xo-callbacks.c:388 src/xo-file.c:676 msgid "PDF files" msgstr "Soubory PDF" #: src/xo-callbacks.c:70 src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "PÅ™ipojit soubor k deníku" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Otevřít deník" #: src/xo-callbacks.c:135 src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Soubory Xournalu" #: src/xo-callbacks.c:184 src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "Chyba pÅ™i ukládání souboru '%s'" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Uložit deník" #: src/xo-callbacks.c:260 src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Má být soubor %s pÅ™epsán?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Exportovat do PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Chyba pÅ™i vytváření souboru '%s'" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "Vybrat barvu papíru" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Otevřít pozadí" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "Bitmapové soubory" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "Soubory PS/PDF (jako bitmapy)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "Chyba pÅ™i otevírání pozadí: '%s'" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Vybrat písmo" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "Kreslení není povoleno ve vrstvÄ› pozadí.\n" " PÅ™epíná se na Vrstvu 1." #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nelze najít soubor s mapou pixelů: %s" #: src/xo-file.c:122 src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Nelze zapsat pozadí '%s'. PÅ™esto se bude pokraÄovat." #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "Chybný obsah souboru" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "Nelze otevřít pozadí '%s'. Pozadí se nastaví na bílé." #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Nelze otevřít pozadí '%s'.\n" "Vybrat jiný soubor?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "Nelze otevřít pozadí '%s'." #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "Není možné vykreslit jednu nebo více stránek PDF." #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr " rozliÅ¡ení displeje v pixelech na palec" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr " výchozí úroveň pÅ™iblížení v procentech" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr " maximalizovat okno po spuÅ¡tÄ›ní (true/false)" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr " spouÅ¡tÄ›t v režimu celé obrazovky (true/false)" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr " šířka okna v pixelech (když není maximalizováno)" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr " výška okna v pixelech" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr " velikost posunu na posuvníku (v pixelech)" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr " velikost posunu v dialogu pÅ™iblížení" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr " násobitel pÅ™iblížení/oddálení" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr " zobrazení dokumentu (true = plynulé, false = jedna stránka)" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr " používat rozšíření XInput (true/false)" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " zruÅ¡it události Core Pointer v režimu XInput (true/false)" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr " vždy nastavit Å¡piÄku zmizíku na zmizík (true/false)" #: src/xo-file.c:1478 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " zamÄ›nit nastavení tlaÄítek 2 a 3 místo kreslení (užiteÄné pro nÄ›které " " tablety) (true/false)" #: src/xo-file.c:1481 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " automaticky naÄítat filename.pdf.xoj místo filename.pdf (true/false)" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr "" " výchozí cesta pro otevírání/ukládání (nechte prázdné pro aktuální adresář)" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr " používat citlivost na tlak k urÄení tloušťky tahu pera (true/false)" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr " minimální násobitel šířky" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr " maximální násobitel šířky" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " komponenty rozhraní shora dolů\n" " přípustné hodnoty: drawarea menu main_toolbar pen_toolbar statusbar" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr " komponenty rozhraní v režimu celé obrazovky shora dolů" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr " posuvník rozhraní je vlevo (true/false)" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " skrýt nechtÄ›né položky nabídek nebo liÅ¡ty (true/false)" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " položky rozhraní, které se mají skrývat (upravujte na vlastní nebezpeÄí!)\n" " seznam názvů položek najdete ve zdrojovém kódu v souboru xo-interface.c" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " průhlednost zvýrazňovaÄe (0 až 1, výchozí 0.5)\n" " upozornÄ›ní: míra průhlednosti není ukládána v souborech xoj!" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr " pÅ™i ukonÄení automaticky ukládat nastavení (true/false)" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr " výchozí šířka stránky v bodech (1/72 in)" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr " výchozí výška stránky v bodech (1/72 in)" #: src/xo-file.c:1524 msgid " the default paper color" msgstr " výchozí barva papíru" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " výchozí papír (plain, lined, ruled, or graph)" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr " použít nastavení papíru na vÅ¡echny stránky (true/false)" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr " preferované jednotky (cm, in, px, pt)" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr " zahrnout linkování papíru pÅ™i tisku nebo exportu do PDF (true/false)" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr " průběžná aktualizace pozadí stránek (true/false)" #: src/xo-file.c:1544 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" " rozliÅ¡ení bitmapových pozadí PS/PDF vykreslených pomocí ghostscriptu (dpi)" #: src/xo-file.c:1547 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" " rozliÅ¡ení bitmapových pozadí PDF pÅ™i tisku pomocí libgnomeprint (dpi)" #: src/xo-file.c:1551 msgid "" " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, " "hand)" msgstr "" " nástroj vybraný po spuÅ¡tÄ›ní (pen, eraser, highlighter, selectrect, " "vertspace, " "hand)" #: src/xo-file.c:1554 msgid " default pen color" msgstr " výchozí barva pera" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " výchozí tloušťka pera (tenké = 1, stÅ™ední = 2, tlusté = 3)" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr " výchozí pero je v režimu pravítka (true/false)" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr " výchozí pero je v režimu rozpoznávání tvarů (true/false)" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " výchozí tloušťka zmizíku (tenké = 1, stÅ™ední = 2, tlusté = 3)" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " výchozí režim zmizíku (normální = 0, bÄ›lení = 1, tahy = 2)" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr " výchozí barva zvýrazňovaÄe" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " výchozí tloušťka zvýrazňovaÄe (tenké = 1, stÅ™ední = 2, tlusté = 3)" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr " výchozí zvýrazňovaÄ je v režimu pravítka (true/false)" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " výchozí zvýrazňovaÄ je v režimu rozpoznávání tvarů (true/false)" #: src/xo-file.c:1588 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " nástroj tlaÄítka 2 (pen, eraser, highlighter, text, selectrect, vertspace, " "hand)" #: src/xo-file.c:1591 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " navázat nástroj tlaÄítka 2 na primární nástroj (true/false) (pÅ™epíše " "vÅ¡echna ostatní " "nastavení)" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr " barva nástroje tlaÄítka 2 (pouze pro pero nebo zvýrazňovaÄ)" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "" " tloušťka nástroje tlaÄítka 2 (pouze pro pero, zmizík nebo zvýrazňovaÄ)" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "" " režim pravítka nástroje tlaÄítka 2 (true/false) (pouze pro pero nebo " "zvýrazňovaÄ)" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " režim rozpoznávání tvarů nástroje tlaÄítka 2 (true/false) (pouze pro pero " "nebo zvýrazňovaÄ)" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr " režim zmizíku nástroje tlaÄítka 2 (pouze pro zmizík)" #: src/xo-file.c:1616 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " nástroj tlaÄítka 3 (pen, eraser, highlighter, text, selectrect, vertspace, " "hand)" #: src/xo-file.c:1619 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " navázat nástroj tlaÄítka 3 na primární nástroj (true/false) (pÅ™epíše " "vÅ¡echna ostatní " "nastavení)" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr " barva nástroje tlaÄítka 3 (pouze pro pero nebo zvýrazňovaÄ)" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "" " tloušťka nástroje tlaÄítka 3 (pouze pro pero, zmizík nebo zvýrazňovaÄ)" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "" " režim pravítka nástroje tlaÄítka 3 (true/false) (pouze pro pero nebo " "zvýrazňovaÄ)" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " režim rozpoznávání tvarů nástroje tlaÄítka 3 (true/false) (pouze pro pero " "nebo zvýrazňovaÄ)" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr " režim zmizíku nástroje tlaÄítka 3 (pouze pro zmizík)" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " tloušťka různých per (v bodech, 1 pt = 1/72 in)" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " tloušťka různých zmizíku (v bodech, 1 pt = 1/72 in)" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " tloušťka různých zvýrazňovaÄů (v bodech, 1 pt = 1/72 in)" #: src/xo-file.c:1661 msgid " name of the default font" msgstr " název výchozího písma" #: src/xo-file.c:1664 msgid " default font size" msgstr " výchozí velikost písma" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " KonfiguraÄní soubor Xournalu.\n" " Tento soubor je generován automaticky po uložení nastavení.\n" " PÅ™i ruÄních úpravách buÄte obezÅ™etní.\n" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " z %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Pozadí" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Vrstva %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "Uložit zmÄ›ny do '%s'?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Bez titulku" xournal-0.4.8/po/xournal.pot0000644000175000017500000006330012353735004015501 0ustar aurouxauroux# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2014-06-29 09:02+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" #: ../src/main.c:328 ../src/xo-callbacks.c:122 ../src/xo-callbacks.c:173 #: ../src/xo-callbacks.c:3292 #, c-format msgid "Error opening file '%s'" msgstr "" #: ../src/xo-interface.c:364 ../src/xo-interface.c:3088 ../src/xo-misc.c:1633 msgid "Xournal" msgstr "" #: ../src/xo-interface.c:374 msgid "_File" msgstr "" #: ../src/xo-interface.c:385 msgid "Annotate PD_F" msgstr "" #: ../src/xo-interface.c:410 msgid "Recent Doc_uments" msgstr "" #: ../src/xo-interface.c:417 msgid "0" msgstr "" #: ../src/xo-interface.c:421 msgid "1" msgstr "" #: ../src/xo-interface.c:425 msgid "2" msgstr "" #: ../src/xo-interface.c:429 msgid "3" msgstr "" #: ../src/xo-interface.c:433 msgid "4" msgstr "" #: ../src/xo-interface.c:437 msgid "5" msgstr "" #: ../src/xo-interface.c:441 msgid "6" msgstr "" #: ../src/xo-interface.c:445 msgid "7" msgstr "" #: ../src/xo-interface.c:454 msgid "Print Options" msgstr "" #: ../src/xo-interface.c:469 msgid "_Export to PDF" msgstr "" #: ../src/xo-interface.c:485 msgid "_Edit" msgstr "" #: ../src/xo-interface.c:530 msgid "_View" msgstr "" #: ../src/xo-interface.c:537 msgid "_Continuous" msgstr "" #: ../src/xo-interface.c:543 msgid "Horizontal" msgstr "" #: ../src/xo-interface.c:549 msgid "_One Page" msgstr "" #: ../src/xo-interface.c:560 msgid "Full Screen" msgstr "" #: ../src/xo-interface.c:572 msgid "_Zoom" msgstr "" #: ../src/xo-interface.c:600 msgid "Page _Width" msgstr "" #: ../src/xo-interface.c:611 msgid "_Set Zoom" msgstr "" #: ../src/xo-interface.c:620 msgid "_First Page" msgstr "" #: ../src/xo-interface.c:631 msgid "_Previous Page" msgstr "" #: ../src/xo-interface.c:642 msgid "_Next Page" msgstr "" #: ../src/xo-interface.c:653 msgid "_Last Page" msgstr "" #: ../src/xo-interface.c:669 msgid "_Show Layer" msgstr "" #: ../src/xo-interface.c:677 msgid "_Hide Layer" msgstr "" #: ../src/xo-interface.c:685 msgid "_Page" msgstr "" #: ../src/xo-interface.c:692 msgid "New Page _Before" msgstr "" #: ../src/xo-interface.c:696 msgid "New Page _After" msgstr "" #: ../src/xo-interface.c:700 msgid "New Page At _End" msgstr "" #: ../src/xo-interface.c:704 msgid "New Pages Keep Background" msgstr "" #: ../src/xo-interface.c:708 msgid "_Delete Page" msgstr "" #: ../src/xo-interface.c:717 msgid "_New Layer" msgstr "" #: ../src/xo-interface.c:721 msgid "Delete La_yer" msgstr "" #: ../src/xo-interface.c:725 msgid "_Flatten" msgstr "" #: ../src/xo-interface.c:734 msgid "Paper Si_ze" msgstr "" #: ../src/xo-interface.c:738 msgid "Paper _Color" msgstr "" #: ../src/xo-interface.c:745 msgid "_white paper" msgstr "" #: ../src/xo-interface.c:751 msgid "_yellow paper" msgstr "" #: ../src/xo-interface.c:757 msgid "_pink paper" msgstr "" #: ../src/xo-interface.c:763 msgid "_orange paper" msgstr "" #: ../src/xo-interface.c:769 msgid "_blue paper" msgstr "" #: ../src/xo-interface.c:775 msgid "_green paper" msgstr "" #: ../src/xo-interface.c:781 ../src/xo-interface.c:1058 msgid "other..." msgstr "" #: ../src/xo-interface.c:785 ../src/xo-interface.c:821 #: ../src/xo-interface.c:1062 ../src/xo-interface.c:1332 #: ../src/xo-interface.c:1414 msgid "NA" msgstr "" #: ../src/xo-interface.c:790 msgid "Paper _Style" msgstr "" #: ../src/xo-interface.c:797 msgid "_plain" msgstr "" #: ../src/xo-interface.c:803 msgid "_lined" msgstr "" #: ../src/xo-interface.c:809 msgid "_ruled" msgstr "" #: ../src/xo-interface.c:815 msgid "_graph" msgstr "" #: ../src/xo-interface.c:826 msgid "Apply _To All Pages" msgstr "" #: ../src/xo-interface.c:835 msgid "_Load Background" msgstr "" #: ../src/xo-interface.c:843 msgid "Background Screens_hot" msgstr "" #: ../src/xo-interface.c:852 msgid "Default _Paper" msgstr "" #: ../src/xo-interface.c:856 msgid "Set As De_fault" msgstr "" #: ../src/xo-interface.c:860 msgid "_Tools" msgstr "" #: ../src/xo-interface.c:867 ../src/xo-interface.c:1262 #: ../src/xo-interface.c:1344 msgid "_Pen" msgstr "" #: ../src/xo-interface.c:876 ../src/xo-interface.c:1268 #: ../src/xo-interface.c:1350 msgid "_Eraser" msgstr "" #: ../src/xo-interface.c:885 ../src/xo-interface.c:1274 #: ../src/xo-interface.c:1356 msgid "_Highlighter" msgstr "" #: ../src/xo-interface.c:894 ../src/xo-interface.c:1280 #: ../src/xo-interface.c:1362 msgid "_Text" msgstr "" #: ../src/xo-interface.c:903 ../src/xo-interface.c:1286 #: ../src/xo-interface.c:1368 msgid "_Image" msgstr "" #: ../src/xo-interface.c:917 msgid "_Shape Recognizer" msgstr "" #: ../src/xo-interface.c:924 msgid "Ru_ler" msgstr "" #: ../src/xo-interface.c:936 ../src/xo-interface.c:1292 #: ../src/xo-interface.c:1374 msgid "Select Re_gion" msgstr "" #: ../src/xo-interface.c:945 ../src/xo-interface.c:1298 #: ../src/xo-interface.c:1380 msgid "Select _Rectangle" msgstr "" #: ../src/xo-interface.c:954 ../src/xo-interface.c:1304 #: ../src/xo-interface.c:1386 msgid "_Vertical Space" msgstr "" #: ../src/xo-interface.c:963 ../src/xo-interface.c:1310 #: ../src/xo-interface.c:1392 msgid "H_and Tool" msgstr "" #: ../src/xo-interface.c:976 msgid "_Color" msgstr "" #: ../src/xo-interface.c:987 msgid "blac_k" msgstr "" #: ../src/xo-interface.c:993 msgid "_blue" msgstr "" #: ../src/xo-interface.c:999 msgid "_red" msgstr "" #: ../src/xo-interface.c:1005 msgid "_green" msgstr "" #: ../src/xo-interface.c:1011 msgid "gr_ay" msgstr "" #: ../src/xo-interface.c:1022 msgid "light bl_ue" msgstr "" #: ../src/xo-interface.c:1028 msgid "light gr_een" msgstr "" #: ../src/xo-interface.c:1034 msgid "_magenta" msgstr "" #: ../src/xo-interface.c:1040 msgid "_orange" msgstr "" #: ../src/xo-interface.c:1046 msgid "_yellow" msgstr "" #: ../src/xo-interface.c:1052 msgid "_white" msgstr "" #: ../src/xo-interface.c:1067 msgid "Pen _Options" msgstr "" #: ../src/xo-interface.c:1074 msgid "_very fine" msgstr "" #: ../src/xo-interface.c:1080 ../src/xo-interface.c:1111 #: ../src/xo-interface.c:1159 msgid "_fine" msgstr "" #: ../src/xo-interface.c:1086 ../src/xo-interface.c:1117 #: ../src/xo-interface.c:1165 msgid "_medium" msgstr "" #: ../src/xo-interface.c:1092 ../src/xo-interface.c:1123 #: ../src/xo-interface.c:1171 msgid "_thick" msgstr "" #: ../src/xo-interface.c:1098 msgid "ver_y thick" msgstr "" #: ../src/xo-interface.c:1104 msgid "Eraser Optio_ns" msgstr "" #: ../src/xo-interface.c:1134 msgid "_standard" msgstr "" #: ../src/xo-interface.c:1140 msgid "_whiteout" msgstr "" #: ../src/xo-interface.c:1146 msgid "_delete strokes" msgstr "" #: ../src/xo-interface.c:1152 msgid "Highlighter Opt_ions" msgstr "" #: ../src/xo-interface.c:1177 msgid "Text _Font..." msgstr "" #: ../src/xo-interface.c:1193 msgid "_Default Pen" msgstr "" #: ../src/xo-interface.c:1197 msgid "Default Eraser" msgstr "" #: ../src/xo-interface.c:1201 msgid "Default Highlighter" msgstr "" #: ../src/xo-interface.c:1205 msgid "Default Te_xt" msgstr "" #: ../src/xo-interface.c:1209 msgid "Set As Default" msgstr "" #: ../src/xo-interface.c:1213 msgid "_Options" msgstr "" #: ../src/xo-interface.c:1220 msgid "Use _XInput" msgstr "" #: ../src/xo-interface.c:1224 msgid "_Pen and Touch" msgstr "" #: ../src/xo-interface.c:1231 msgid "_Eraser Tip" msgstr "" #: ../src/xo-interface.c:1235 msgid "_Pressure sensitivity" msgstr "" #: ../src/xo-interface.c:1239 msgid "Buttons Switch Mappings" msgstr "" #: ../src/xo-interface.c:1243 msgid "_Touchscreen as Hand Tool" msgstr "" #: ../src/xo-interface.c:1247 msgid "Pen disables Touch" msgstr "" #: ../src/xo-interface.c:1251 msgid "Designate as Touchscreen..." msgstr "" #: ../src/xo-interface.c:1255 msgid "Button _2 Mapping" msgstr "" #: ../src/xo-interface.c:1320 ../src/xo-interface.c:1402 msgid "_Link to Primary Brush" msgstr "" #: ../src/xo-interface.c:1326 ../src/xo-interface.c:1408 msgid "_Copy of Current Brush" msgstr "" #: ../src/xo-interface.c:1337 msgid "Button _3 Mapping" msgstr "" #: ../src/xo-interface.c:1424 msgid "Progressive _Backgrounds" msgstr "" #: ../src/xo-interface.c:1428 msgid "Print Paper _Ruling" msgstr "" #: ../src/xo-interface.c:1432 msgid "Legacy PDF Export" msgstr "" #: ../src/xo-interface.c:1436 msgid "Autoload pdf.xoj" msgstr "" #: ../src/xo-interface.c:1440 msgid "Auto-Save Files" msgstr "" #: ../src/xo-interface.c:1444 msgid "Left-Handed Scrollbar" msgstr "" #: ../src/xo-interface.c:1448 msgid "Shorten _Menus" msgstr "" #: ../src/xo-interface.c:1452 msgid "Pencil Cursor" msgstr "" #: ../src/xo-interface.c:1461 msgid "A_uto-Save Preferences" msgstr "" #: ../src/xo-interface.c:1465 msgid "_Save Preferences" msgstr "" #: ../src/xo-interface.c:1469 msgid "_Help" msgstr "" #: ../src/xo-interface.c:1480 msgid "_About" msgstr "" #: ../src/xo-interface.c:1493 msgid "Save" msgstr "" #: ../src/xo-interface.c:1498 msgid "New" msgstr "" #: ../src/xo-interface.c:1503 msgid "Open" msgstr "" #: ../src/xo-interface.c:1516 msgid "Cut" msgstr "" #: ../src/xo-interface.c:1521 msgid "Copy" msgstr "" #: ../src/xo-interface.c:1526 msgid "Paste" msgstr "" #: ../src/xo-interface.c:1539 msgid "Undo" msgstr "" #: ../src/xo-interface.c:1544 msgid "Redo" msgstr "" #: ../src/xo-interface.c:1557 msgid "First Page" msgstr "" #: ../src/xo-interface.c:1562 msgid "Previous Page" msgstr "" #: ../src/xo-interface.c:1567 msgid "Next Page" msgstr "" #: ../src/xo-interface.c:1572 msgid "Last Page" msgstr "" #: ../src/xo-interface.c:1585 msgid "Zoom Out" msgstr "" #: ../src/xo-interface.c:1590 ../src/xo-interface.c:3182 msgid "Page Width" msgstr "" #: ../src/xo-interface.c:1596 msgid "Zoom In" msgstr "" #: ../src/xo-interface.c:1601 msgid "Normal Size" msgstr "" #: ../src/xo-interface.c:1606 ../src/xo-interface.c:3141 msgid "Set Zoom" msgstr "" #: ../src/xo-interface.c:1615 msgid "Toggle Fullscreen" msgstr "" #: ../src/xo-interface.c:1624 msgid "Pencil" msgstr "" #: ../src/xo-interface.c:1630 msgid "Pen" msgstr "" #: ../src/xo-interface.c:1635 ../src/xo-interface.c:1641 msgid "Eraser" msgstr "" #: ../src/xo-interface.c:1646 ../src/xo-interface.c:1652 msgid "Highlighter" msgstr "" #: ../src/xo-interface.c:1657 ../src/xo-interface.c:1663 msgid "Text" msgstr "" #: ../src/xo-interface.c:1668 ../src/xo-interface.c:1674 msgid "Image" msgstr "" #: ../src/xo-interface.c:1679 ../src/xo-interface.c:1685 msgid "Shape Recognizer" msgstr "" #: ../src/xo-interface.c:1688 ../src/xo-interface.c:1694 msgid "Ruler" msgstr "" #: ../src/xo-interface.c:1705 ../src/xo-interface.c:1711 msgid "Select Region" msgstr "" #: ../src/xo-interface.c:1716 ../src/xo-interface.c:1722 msgid "Select Rectangle" msgstr "" #: ../src/xo-interface.c:1727 ../src/xo-interface.c:1733 msgid "Vertical Space" msgstr "" #: ../src/xo-interface.c:1738 msgid "Hand Tool" msgstr "" #: ../src/xo-interface.c:1757 ../src/xo-interface.c:1761 msgid "Default" msgstr "" #: ../src/xo-interface.c:1765 ../src/xo-interface.c:1768 msgid "Default Pen" msgstr "" #: ../src/xo-interface.c:1779 ../src/xo-interface.c:1787 msgid "Fine" msgstr "" #: ../src/xo-interface.c:1792 ../src/xo-interface.c:1800 msgid "Medium" msgstr "" #: ../src/xo-interface.c:1805 ../src/xo-interface.c:1813 msgid "Thick" msgstr "" #: ../src/xo-interface.c:1832 ../src/xo-interface.c:1839 msgid "Black" msgstr "" #: ../src/xo-interface.c:1844 ../src/xo-interface.c:1851 msgid "Blue" msgstr "" #: ../src/xo-interface.c:1856 ../src/xo-interface.c:1863 msgid "Red" msgstr "" #: ../src/xo-interface.c:1868 ../src/xo-interface.c:1875 msgid "Green" msgstr "" #: ../src/xo-interface.c:1880 ../src/xo-interface.c:1887 msgid "Gray" msgstr "" #: ../src/xo-interface.c:1892 ../src/xo-interface.c:1899 msgid "Light Blue" msgstr "" #: ../src/xo-interface.c:1904 ../src/xo-interface.c:1911 msgid "Light Green" msgstr "" #: ../src/xo-interface.c:1916 ../src/xo-interface.c:1923 msgid "Magenta" msgstr "" #: ../src/xo-interface.c:1928 ../src/xo-interface.c:1935 msgid "Orange" msgstr "" #: ../src/xo-interface.c:1940 ../src/xo-interface.c:1947 msgid "Yellow" msgstr "" #: ../src/xo-interface.c:1952 ../src/xo-interface.c:1959 msgid "White" msgstr "" #: ../src/xo-interface.c:2006 msgid " Page " msgstr "" #: ../src/xo-interface.c:2014 msgid "Set page number" msgstr "" #: ../src/xo-interface.c:2018 msgid " of n" msgstr "" #: ../src/xo-interface.c:2026 msgid " Layer: " msgstr "" #: ../src/xo-interface.c:2963 msgid "Set Paper Size" msgstr "" #: ../src/xo-interface.c:2975 msgid "Standard paper sizes:" msgstr "" #: ../src/xo-interface.c:2983 msgid "A4" msgstr "" #: ../src/xo-interface.c:2984 msgid "A4 (landscape)" msgstr "" #: ../src/xo-interface.c:2985 msgid "US Letter" msgstr "" #: ../src/xo-interface.c:2986 msgid "US Letter (landscape)" msgstr "" #: ../src/xo-interface.c:2987 msgid "Custom" msgstr "" #: ../src/xo-interface.c:2993 msgid "Width:" msgstr "" #: ../src/xo-interface.c:3002 msgid "Height:" msgstr "" #: ../src/xo-interface.c:3014 msgid "cm" msgstr "" #: ../src/xo-interface.c:3015 msgid "in" msgstr "" #: ../src/xo-interface.c:3016 msgid "pixels" msgstr "" #: ../src/xo-interface.c:3017 msgid "points" msgstr "" #: ../src/xo-interface.c:3077 msgid "About Xournal" msgstr "" #: ../src/xo-interface.c:3093 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" #: ../src/xo-interface.c:3157 msgid "Zoom: " msgstr "" #: ../src/xo-interface.c:3170 msgid "%" msgstr "" #: ../src/xo-interface.c:3175 msgid "Normal size (100%)" msgstr "" #: ../src/xo-interface.c:3189 msgid "Page Height" msgstr "" #. user aborted on save confirmation #: ../src/xo-callbacks.c:68 ../src/xo-file.c:993 msgid "Open PDF" msgstr "" #: ../src/xo-callbacks.c:76 ../src/xo-callbacks.c:149 #: ../src/xo-callbacks.c:234 ../src/xo-callbacks.c:378 #: ../src/xo-callbacks.c:1461 ../src/xo-file.c:453 ../src/xo-file.c:1001 #: ../src/xo-image.c:117 msgid "All files" msgstr "" #: ../src/xo-callbacks.c:79 ../src/xo-callbacks.c:381 ../src/xo-file.c:1004 msgid "PDF files" msgstr "" #: ../src/xo-callbacks.c:87 ../src/xo-callbacks.c:1484 msgid "Attach file to the journal" msgstr "" #. user aborted on save confirmation #: ../src/xo-callbacks.c:141 msgid "Open Journal" msgstr "" #: ../src/xo-callbacks.c:152 ../src/xo-callbacks.c:237 msgid "Xournal files" msgstr "" #: ../src/xo-callbacks.c:202 ../src/xo-callbacks.c:283 ../src/xo-file.c:1169 #, c-format msgid "Error saving file '%s'" msgstr "" #: ../src/xo-callbacks.c:221 msgid "Save Journal" msgstr "" #: ../src/xo-callbacks.c:263 ../src/xo-callbacks.c:399 #, c-format msgid "Should the file %s be overwritten?" msgstr "" #: ../src/xo-callbacks.c:360 msgid "Export to PDF" msgstr "" #: ../src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "" #: ../src/xo-callbacks.c:1388 msgid "Pick a Paper Color" msgstr "" #: ../src/xo-callbacks.c:1453 msgid "Open Background" msgstr "" #: ../src/xo-callbacks.c:1469 msgid "Bitmap files" msgstr "" #: ../src/xo-callbacks.c:1477 msgid "PS/PDF files (as bitmaps)" msgstr "" #: ../src/xo-callbacks.c:1507 #, c-format msgid "Error opening background '%s'" msgstr "" #: ../src/xo-callbacks.c:2100 msgid "Select Font" msgstr "" #: ../src/xo-callbacks.c:2491 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" #: ../src/xo-callbacks.c:3788 msgid "Select device for Touchscreen" msgstr "" #: ../src/xo-callbacks.c:3798 msgid "Touchscreen device:" msgstr "" #: ../src/xo-support.c:90 ../src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "" #: ../src/xo-file.c:201 ../src/xo-file.c:235 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "" #: ../src/xo-file.c:417 #, c-format msgid "%d auto-save files were found, including '%s'" msgstr "" #: ../src/xo-file.c:418 msgid "Ignore" msgstr "" #: ../src/xo-file.c:419 msgid "Restore auto-save" msgstr "" #: ../src/xo-file.c:420 msgid "Delete auto-saves" msgstr "" #: ../src/xo-file.c:443 msgid "Multiple auto-saves found" msgstr "" #: ../src/xo-file.c:457 msgid "Auto-save files" msgstr "" #: ../src/xo-file.c:520 #, c-format msgid "Invalid file contents" msgstr "" #: ../src/xo-file.c:670 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "" #: ../src/xo-file.c:988 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" #: ../src/xo-file.c:1137 #, c-format msgid "Could not open background '%s'." msgstr "" #: ../src/xo-file.c:1161 msgid "Save this version and delete auto-save?" msgstr "" #: ../src/xo-file.c:1411 msgid "Unable to render one or more PDF pages." msgstr "" #: ../src/xo-file.c:1833 msgid " the display resolution, in pixels per inch" msgstr "" #: ../src/xo-file.c:1836 msgid " the initial zoom level, in percent" msgstr "" #: ../src/xo-file.c:1839 msgid " maximize the window at startup (true/false)" msgstr "" #: ../src/xo-file.c:1842 msgid " start in full screen mode (true/false)" msgstr "" #: ../src/xo-file.c:1845 msgid " the window width in pixels (when not maximized)" msgstr "" #: ../src/xo-file.c:1848 msgid " the window height in pixels" msgstr "" #: ../src/xo-file.c:1851 msgid " scrollbar step increment (in pixels)" msgstr "" #: ../src/xo-file.c:1854 msgid " the step increment in the zoom dialog box" msgstr "" #: ../src/xo-file.c:1857 msgid " the multiplicative factor for zoom in/out" msgstr "" #: ../src/xo-file.c:1860 msgid "" " continuous view (false = one page, true = continuous, horiz = horizontal)" msgstr "" #: ../src/xo-file.c:1863 msgid " use XInput extensions (true/false)" msgstr "" #: ../src/xo-file.c:1866 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr "" #: ../src/xo-file.c:1869 msgid " ignore events from other devices while drawing (true/false)" msgstr "" #: ../src/xo-file.c:1872 msgid "" " do not worry if device reports button isn't pressed while drawing (true/" "false)" msgstr "" #: ../src/xo-file.c:1875 msgid " always map eraser tip to eraser (true/false)" msgstr "" #: ../src/xo-file.c:1878 msgid "" " always map touchscreen device to hand tool (true/false) (requires separate " "pen and touch devices)" msgstr "" #: ../src/xo-file.c:1881 msgid "" " disable touchscreen device when pen is in proximity (true/false) (requires " "separate pen and touch devices)" msgstr "" #: ../src/xo-file.c:1884 msgid " name of touchscreen device for touchscreen_as_hand_tool" msgstr "" #: ../src/xo-file.c:1887 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" #: ../src/xo-file.c:1890 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" #: ../src/xo-file.c:1893 msgid " enable periodic autosaves (true/false)" msgstr "" #: ../src/xo-file.c:1896 msgid " delay for periodic autosaves (in seconds)" msgstr "" #: ../src/xo-file.c:1899 msgid " default path for open/save (leave blank for current directory)" msgstr "" #: ../src/xo-file.c:1902 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" #: ../src/xo-file.c:1905 msgid " minimum width multiplier" msgstr "" #: ../src/xo-file.c:1908 msgid " maximum width multiplier" msgstr "" #: ../src/xo-file.c:1911 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" #: ../src/xo-file.c:1914 msgid " interface components in fullscreen mode, from top to bottom" msgstr "" #: ../src/xo-file.c:1917 msgid " interface has left-handed scrollbar (true/false)" msgstr "" #: ../src/xo-file.c:1920 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "" #: ../src/xo-file.c:1923 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" #: ../src/xo-file.c:1926 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" #: ../src/xo-file.c:1929 msgid " auto-save preferences on exit (true/false)" msgstr "" #: ../src/xo-file.c:1932 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr "" #: ../src/xo-file.c:1935 msgid " prefer xournal's own PDF code for exporting PDFs (true/false)" msgstr "" #: ../src/xo-file.c:1939 msgid " the default page width, in points (1/72 in)" msgstr "" #: ../src/xo-file.c:1942 msgid " the default page height, in points (1/72 in)" msgstr "" #: ../src/xo-file.c:1945 msgid " the default paper color" msgstr "" #: ../src/xo-file.c:1950 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "" #: ../src/xo-file.c:1953 msgid " apply paper style changes to all pages (true/false)" msgstr "" #: ../src/xo-file.c:1956 msgid " preferred unit (cm, in, px, pt)" msgstr "" #: ../src/xo-file.c:1959 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" #: ../src/xo-file.c:1962 msgid "" " when creating a new page, duplicate a PDF or image background instead of " "using default paper (true/false)" msgstr "" #: ../src/xo-file.c:1965 msgid " just-in-time update of page backgrounds (true/false)" msgstr "" #: ../src/xo-file.c:1968 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" #: ../src/xo-file.c:1971 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" #: ../src/xo-file.c:1975 msgid "" " selected tool at startup (pen, eraser, highlighter, selectregion, " "selectrect, vertspace, hand, image)" msgstr "" #: ../src/xo-file.c:1978 msgid " Use the pencil from cursor theme instead of a color dot (true/false)" msgstr "" #: ../src/xo-file.c:1981 msgid " default pen color" msgstr "" #: ../src/xo-file.c:1986 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: ../src/xo-file.c:1989 msgid " default pen is in ruler mode (true/false)" msgstr "" #: ../src/xo-file.c:1992 msgid " default pen is in shape recognizer mode (true/false)" msgstr "" #: ../src/xo-file.c:1995 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: ../src/xo-file.c:1998 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "" #: ../src/xo-file.c:2001 msgid " default highlighter color" msgstr "" #: ../src/xo-file.c:2006 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: ../src/xo-file.c:2009 msgid " default highlighter is in ruler mode (true/false)" msgstr "" #: ../src/xo-file.c:2012 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "" #: ../src/xo-file.c:2015 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" #: ../src/xo-file.c:2018 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" #: ../src/xo-file.c:2021 msgid " button 2 brush color (for pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2028 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: ../src/xo-file.c:2032 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2036 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2040 msgid " button 2 eraser mode (eraser only)" msgstr "" #: ../src/xo-file.c:2043 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" #: ../src/xo-file.c:2046 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" #: ../src/xo-file.c:2049 msgid " button 3 brush color (for pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2056 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: ../src/xo-file.c:2060 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2064 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: ../src/xo-file.c:2068 msgid " button 3 eraser mode (eraser only)" msgstr "" #: ../src/xo-file.c:2072 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr "" #: ../src/xo-file.c:2078 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr "" #: ../src/xo-file.c:2083 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr "" #: ../src/xo-file.c:2088 msgid " name of the default font" msgstr "" #: ../src/xo-file.c:2091 msgid " default font size" msgstr "" #: ../src/xo-file.c:2269 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" #: ../src/xo-misc.c:656 msgid "Generating fontconfig library cache, please be patient..." msgstr "" #: ../src/xo-misc.c:657 msgid "Generating fontconfig cache..." msgstr "" #: ../src/xo-misc.c:1499 #, c-format msgid " of %d" msgstr "" #: ../src/xo-misc.c:1504 msgid "Background" msgstr "" #: ../src/xo-misc.c:1512 #, c-format msgid "Layer %d" msgstr "" #: ../src/xo-misc.c:1637 #, c-format msgid "Xournal - %s" msgstr "" #: ../src/xo-misc.c:1893 #, c-format msgid "Save changes to '%s'?" msgstr "" #: ../src/xo-misc.c:1894 msgid "Untitled" msgstr "" #: ../src/xo-image.c:109 msgid "Insert Image" msgstr "" #: ../src/xo-image.c:120 msgid "Image files" msgstr "" #: ../src/xo-image.c:145 #, c-format msgid "Error opening image '%s'" msgstr "" xournal-0.4.8/po/it.po0000664000175000017500000007364411773660334014267 0ustar aurouxauroux# Italian translations for xournal package # This file is distributed under the same license as the xournal package. # # Marco Poletti , 2009. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-13 18:13+0200\n" "PO-Revision-Date: 2009-10-15 10:11+0200\n" "Last-Translator: Marco Poletti \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "I parametri della riga di comando non sono validi.\n" "Uso: %s [file.xoj]\n" #: src/main.c:291 src/xo-callbacks.c:105 src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "Errore nell'apertura del file «%s»" #: src/xo-interface.c:350 src/xo-interface.c:2951 src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_File" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Annota _PDF" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Documenti _recenti" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Opzioni di stampa" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "Esp_orta in PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "_Modifica" #: src/xo-interface.c:516 msgid "_View" msgstr "_Visualizza" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Continuo" #: src/xo-interface.c:529 msgid "_One Page" msgstr "_Una pagina" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "A tutto schermo" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "_Zoom" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "_Larghezza pagina" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "_Imposta zoom" #: src/xo-interface.c:600 msgid "_First Page" msgstr "P_rima pagina" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "Pagina _precedente" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "Pagina _successiva" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "U_ltima pagina" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "_Visualizza livello" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Nascondi livello" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Pagina" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Nuova pagina _prima" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Nuova pagina _dopo" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Nuova pagina alla _fine" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "_Elimina pagina" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "Nuo_vo livello" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "Elimi_na livello" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "_Unisci livelli" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "Di_mensione carta" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Colore carta" #: src/xo-interface.c:721 msgid "_white paper" msgstr "Carta _bianca" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "Carta _gialla" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "Carta _rosa" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "Carta _arancio" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "Carta b_lu" #: src/xo-interface.c:751 msgid "_green paper" msgstr "Carta _verde" #: src/xo-interface.c:757 src/xo-interface.c:1025 msgid "other..." msgstr "altro..." #: src/xo-interface.c:761 src/xo-interface.c:797 src/xo-interface.c:1029 #: src/xo-interface.c:1270 src/xo-interface.c:1346 msgid "NA" msgstr "N/D" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "_Stile carta" #: src/xo-interface.c:773 msgid "_plain" msgstr "A _tinta unita" #: src/xo-interface.c:779 msgid "_lined" msgstr "A righe _con margine" #: src/xo-interface.c:785 msgid "_ruled" msgstr "A righe _senza margine" #: src/xo-interface.c:791 msgid "_graph" msgstr "A _quadretti" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Applica a _tutte le pagine" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "Ca_rica sfondo" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Schermata come sf_ondo" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "C_arta predefinita" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "_Imposta come predefinito" #: src/xo-interface.c:836 msgid "_Tools" msgstr "S_trumenti" #: src/xo-interface.c:843 src/xo-interface.c:1206 src/xo-interface.c:1282 msgid "_Pen" msgstr "_Penna" #: src/xo-interface.c:852 src/xo-interface.c:1212 src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Gomma" #: src/xo-interface.c:861 src/xo-interface.c:1218 src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Evidenziatore" #: src/xo-interface.c:870 src/xo-interface.c:1224 src/xo-interface.c:1300 msgid "_Text" msgstr "_Testo" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "Riconoscimento delle _forme" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "Righe_llo" #: src/xo-interface.c:903 src/xo-interface.c:1230 src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "Seleziona re_gione" #: src/xo-interface.c:912 src/xo-interface.c:1236 src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "Seleziona ri_quadro" #: src/xo-interface.c:921 src/xo-interface.c:1242 src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "Spa_zio verticale" #: src/xo-interface.c:930 src/xo-interface.c:1248 src/xo-interface.c:1324 msgid "H_and Tool" msgstr "Str_umento di navigazione" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Colore" #: src/xo-interface.c:954 msgid "blac_k" msgstr "_Nero" #: src/xo-interface.c:960 msgid "_blue" msgstr "_Blu" #: src/xo-interface.c:966 msgid "_red" msgstr "_Rosso" #: src/xo-interface.c:972 msgid "_green" msgstr "_Verde" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "_Grigio" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "B_lu chiaro" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "V_erde chiaro" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_Magenta" #: src/xo-interface.c:1007 msgid "_orange" msgstr "_Arancio" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "G_iallo" #: src/xo-interface.c:1019 msgid "_white" msgstr "Bian_co" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "Opzioni della penn_a" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "Molto fi_ne" #: src/xo-interface.c:1047 src/xo-interface.c:1078 src/xo-interface.c:1126 msgid "_fine" msgstr "_Fine" #: src/xo-interface.c:1053 src/xo-interface.c:1084 src/xo-interface.c:1132 msgid "_medium" msgstr "_Media" #: src/xo-interface.c:1059 src/xo-interface.c:1090 src/xo-interface.c:1138 msgid "_thick" msgstr "_Spessa" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "Mo_lto spessa" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Opzioni della g_omma" #: src/xo-interface.c:1101 msgid "_standard" msgstr "_Normale" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "_Bianchetto" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_Elimina tratti" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Opzioni dell'evi_denziatore" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "Ca_rattere del testo..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "Pe_nna predefinita" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Go_mma predefinita" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Eviden_ziatore predefinito" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Te_sto predefinito" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Imposta come predefinito" #: src/xo-interface.c:1180 msgid "_Options" msgstr "Imp_ostazioni" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Usa _XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Abilita _gomma dello stilo" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "_Sensibile alla pressione" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Mappa il pulsante _2" #: src/xo-interface.c:1258 src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "_Collegamento alla penna primaria" #: src/xo-interface.c:1264 src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Copia della penna primaria" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Mappa il pulsante _3" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "I pulsanti cambiano la mappatura" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "Caricamento _progressivo degli sfondi" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "Stampa le _righe del foglio" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "Carica automaticamente pdf.xoj" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "Barra di scorrimento a sinistra" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "Accorcia i _menu" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Salva _automaticamente le impostazioni" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "_Salva le impostazioni" #: src/xo-interface.c:1393 msgid "_Help" msgstr "_Aiuto" #: src/xo-interface.c:1404 msgid "_About" msgstr "_Informazioni su Xournal" #: src/xo-interface.c:1417 msgid "Save" msgstr "Salva" #: src/xo-interface.c:1422 msgid "New" msgstr "Nuovo" #: src/xo-interface.c:1427 msgid "Open" msgstr "Apri" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Taglia" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Copia" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Incolla" #: src/xo-interface.c:1463 msgid "Undo" msgstr "Annulla" #: src/xo-interface.c:1468 msgid "Redo" msgstr "Rifai" #: src/xo-interface.c:1481 msgid "First Page" msgstr "Prima pagina" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "Pagina precedente" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Pagina successiva" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Ultima pagina" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Zoom indietro" #: src/xo-interface.c:1514 src/xo-interface.c:3045 msgid "Page Width" msgstr "Larghezza pagina" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "Zoom avanti" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Dimensioni normali" #: src/xo-interface.c:1530 src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Imposta zoom" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "A tutto schermo" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "Matita" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Penna" #: src/xo-interface.c:1559 src/xo-interface.c:1565 msgid "Eraser" msgstr "Gomma" #: src/xo-interface.c:1570 src/xo-interface.c:1576 msgid "Highlighter" msgstr "Evidenziatore" #: src/xo-interface.c:1581 src/xo-interface.c:1587 msgid "Text" msgstr "Testo" #: src/xo-interface.c:1592 src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Riconoscimento delle forme" #: src/xo-interface.c:1601 src/xo-interface.c:1607 msgid "Ruler" msgstr "Righello" #: src/xo-interface.c:1618 src/xo-interface.c:1624 msgid "Select Region" msgstr "Seleziona regione" #: src/xo-interface.c:1629 src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Seleziona riquadro" #: src/xo-interface.c:1640 src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Spazio verticale" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Strumento di navigazione" #: src/xo-interface.c:1670 src/xo-interface.c:1674 msgid "Default" msgstr "Predefinito" #: src/xo-interface.c:1678 src/xo-interface.c:1681 msgid "Default Pen" msgstr "Penna predefinita" #: src/xo-interface.c:1692 src/xo-interface.c:1700 msgid "Fine" msgstr "Fine" #: src/xo-interface.c:1705 src/xo-interface.c:1713 msgid "Medium" msgstr "Medio" #: src/xo-interface.c:1718 src/xo-interface.c:1726 msgid "Thick" msgstr "Spesso" #: src/xo-interface.c:1745 src/xo-interface.c:1752 msgid "Black" msgstr "Nero" #: src/xo-interface.c:1757 src/xo-interface.c:1764 msgid "Blue" msgstr "Blu" #: src/xo-interface.c:1769 src/xo-interface.c:1776 msgid "Red" msgstr "Rosso" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Green" msgstr "Verde" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Gray" msgstr "Grigio" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Light Blue" msgstr "Blu chiaro" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Light Green" msgstr "Verde chiaro" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Magenta" msgstr "Magenta" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Orange" msgstr "Arancio" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Yellow" msgstr "Giallo" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "White" msgstr "Bianco" #: src/xo-interface.c:1919 msgid " Page " msgstr " Pagina " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Cambia pagina" #: src/xo-interface.c:1931 msgid " of n" msgstr " su n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Livello: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Imposta dimensione carta" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Dimensioni carta predefinite:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (orizzontale)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "Lettera USA" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "Lettera USA (orizzontale)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Personalizzato" #: src/xo-interface.c:2856 msgid "Width:" msgstr "Larghezza:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "Altezza:" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "in" #: src/xo-interface.c:2879 msgid "pixels" msgstr "pixel" #: src/xo-interface.c:2880 msgid "points" msgstr "punti" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "Informazioni su Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Scritto da Denis Auroux\n" "con contributi di altri\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "Zoom: " #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Dimensioni normali (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Altezza della pagina" #. user aborted on save confirmation #: src/xo-callbacks.c:51 src/xo-file.c:665 msgid "Open PDF" msgstr "Apri PDF" #: src/xo-callbacks.c:59 src/xo-callbacks.c:132 src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 src/xo-callbacks.c:1444 src/xo-file.c:673 msgid "All files" msgstr "Tutti i file" #: src/xo-callbacks.c:62 src/xo-callbacks.c:388 src/xo-file.c:676 msgid "PDF files" msgstr "File PDF" #: src/xo-callbacks.c:70 src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "Incorpora file insieme agli appunti" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Apri appunti" #: src/xo-callbacks.c:135 src/xo-callbacks.c:234 msgid "Xournal files" msgstr "File di Xournal" #: src/xo-callbacks.c:184 src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "Errore nel salvataggio del file «%s»" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Salva appunti" #: src/xo-callbacks.c:260 src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Sovrascrivere il file «%s»?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Esporta in PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Errore nella creazione del file «%s»" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "Scegliere un colore per la carta" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Apri sfondo" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "File bitmap" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "File PS/PDF (come bitmap)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "Errore nell'apertura dello sfondo «%s»" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Seleziona carattere" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "Non è permesso disegnare sul livello di sfondo.\n" "Imposto il livello 1." #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "File pixmap «%s» non trovato." #: src/xo-file.c:122 src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "" "Scrittura dello sfondo «%s» non riuscita. " "Il programma continuerà comunque." #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "Contenuto del file non valido" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "" "Apertura dello sfondo «%s» non riuscita. " "Imposto uno sfondo bianco." #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Apertura dello sfondo «%s» non riuscita.\n" "Selezionare un'altro file?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "Apertura dello sfondo «%s» non riuscita." #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "Render di una o più pagine del PDF non riuscito." #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr " la risoluzione dello schermo, in pixel per pollice" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr " il livello iniziale di zoom, in percentuale" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr " massimizza la finestra all'avvio (true/false)" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr " avvia in modalità a tutto schermo (true/false)" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr " la larghezza della finestra in pixel (quando non è massimizzata)" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr " l'altezza della finestra in pixel" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr " passo di incremento della barra di scorrimento (in pixel)" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr " passo di incremento della finestra di dialogo dello zoom" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr " fattore moltiplicativo per lo zoom avanti/indietro" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr " vista del documento (true: continuo, false: singola pagina)" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr " usa le estensioni XInput (true/false)" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " scarta gli eventi Core Pointer in modalità XInput (true/false)" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr " mappa sempre la punta della gomma come gomma (true/false)" #: src/xo-file.c:1478 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " i pulsanti 2 e 3 modificano la mappatura invece di disegnare (utile " "per certe tavolette) (true/false)" #: src/xo-file.c:1481 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" " carica automaticamente il file .pdf.xoj al posto di quello .pdf " "(true/false)" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr "" " percorso predefinito per l'apertura/salvataggio (lasciare vuoto per " "indicare " "la cartella corrente)" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" " usa il sensore di pressione per controllare la dimensione del tratto " "(true/false)" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr " moltiplicatore minimo della dimensione del tratto" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr " moltiplicatore massimo della dimensione del tratto" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " componenti dell'interfaccia dall'alto in basso\n" " valori validi: drawarea menu main_toolbar pen_toolbar statusbar" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr "" " componenti dell'interfaccia in modalità a tutto shermo, dall'alto in basso" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr " barra di scorrimento a sinistra nell'interfaccia (true/false)" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "" " nascondi alcuni elementi del menu e delle barre degli strumenti " "(true/false)" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " elementi dell'interfaccia da nascondere (modificare a proprio rischio e " "pericolo!)\n" " vedere il file sorgente xo-interface.c per la lista dei nomi degli elementi" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " opacità dell'evidenziatore (da 0 a 1, il valore predefinito è 0,5)\n" " attenzione: il livello di opacità non viene salvato nei file xoj!" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr " salva automaticamente le impostazioni all'uscita (true/false)" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr " la larghezza predefinita delle pagine, in punti (1/72 di pollice)" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr " l'altezza predefinita delle pagine, in punti (1/72 di pollice)" #: src/xo-file.c:1524 msgid " the default paper color" msgstr " il colore predefinito per la carta" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "" " lo stile predefinito per la carta («plain», «lined», «ruled», o «graph»)" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr "" " applica le modifiche allo stile della carta a tutte le pagine (vero/falso)" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr " unità di misura preferita («cm», «in», «px» o «pt»)" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" " includi le righe della carta quando si stampa o si esporta in PDF " "(true/false)" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr " aggiornamento progressivo dello sfondo delle pagine (true/false)" #: src/xo-file.c:1544 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" " risoluzione degli sfondi bitmap PS/PDF renderizzati con ghostscript (dpi)" #: src/xo-file.c:1547 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" " risoluzione degli sfondi bitmap PDF per la stampa con libgnomeprint (dpi)" #: src/xo-file.c:1551 msgid "" " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, " "hand)" msgstr "" " strumento selezionato all'avvio («pen», «eraser», «highlighter», " "«selectrect», " "«vertspace» o «hand»)" #: src/xo-file.c:1554 msgid " default pen color" msgstr " colore della penna predefinita" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " dimensione della penna predefinita (1: fine, 2: media, 3: spessa)" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr " la penna predefinita è in modalità righello (true/false)" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr "" " la penna predefinita è in modalità riconoscimento delle forme (true/false)" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " dimensione della gomma predefinita (1: fine, 2: media, 3: spessa)" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "" " modalità della gomma predefinita (0: normale, 1: bianchetto, 2: cancella " "tratti)" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr " colore dell'evidenziatore predefinito" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr "" " dimensione dell'evidenziatore predefinito (1: fine, 2: medio, 3: spesso)" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr " l'evidenziatore predefinito è in modalità righello (true/false)" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "" " l'evidenziatore predefinito è in modalità riconoscimento delle forme " "(true/false)" #: src/xo-file.c:1588 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " strumento associato al pulsante 2 («pen», «eraser», «highlighter», «text» " "«selectrect», " "«vertspace» o «hand»)" #: src/xo-file.c:1591 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " il tratto associato al pulsante 2 è collegato al tratto primario " "(true/false) " "(questa impostazione ha la precedenza sulle altre)" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr "" " colore del tratto associato al pulsante 2 (solo per penna e " "evidenziatore)" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "" " dimensione del tratto associato al pulsante 2 (solo per penna, " "gomma ed evidenziatore)" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "" " il tratto associato al pulsante 2 è in modalità righello (true/false) " "(solo per penna " "ed evidenziatore)" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " il tratto associato al pulsante 2 è in modalità riconoscimento delle forme " "(vero/falso) (solo per penna " "ed evidenziatore)" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr " modalità della gomma assciata al pulsante 2 (solo per la gomma)" #: src/xo-file.c:1616 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " strumento associato al pulsante 3 («pen», «eraser», «highlighter», «text» " "«selectrect», " "«vertspace» o «hand»)" #: src/xo-file.c:1619 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " il tratto associato al pulsante 3 è collegato al tratto primario " "(true/false) " "(questa impostazione ha la precedenza sulle altre)" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr "" " colore del tratto associato al pulsante 3 (solo per penna e " "evidenziatore)" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "" " dimensione del tratto associato al pulsante 3 (solo per penna, " "gomma ed evidenziatore)" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "" " il tratto associato al pulsante 3 è in modalità righello (true/false) " "(solo per penna " "ed evidenziatore)" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " il tratto associato al pulsante 3 è in modalità riconoscimento delle forme " "(true/false) (solo per penna " "ed evidenziatore)" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr " modalità della gomma assciata al pulsante 3 (solo per la gomma)" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " larghezza delle varie penne (in punti, 1 pt = 1/72 in)" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " larghezza delle varie gomme (in punti, 1 pt = 1/72 in)" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " larghezza dei vari evidenziatori (in punti, 1 pt = 1/72 in)" #: src/xo-file.c:1661 msgid " name of the default font" msgstr " nome del carattere predefinito" #: src/xo-file.c:1664 msgid " default font size" msgstr " dimensione del carattere predefinito" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " File di configurazione di Xournal.\n" " Questo file è generato automaticamente quando si salvano le impostazioni.\n" " Fare attenzione se si modifica il file a mano.\n" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " su %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Sfondo" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Livello %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "Salvare le modifiche a «%s»?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Senza titolo" xournal-0.4.8/po/fr.gmo0000644000175000017500000005670012353740676014421 0ustar aurouxaurouxÞ•#4 …L` aElв-=bk4Î+I/LyIÆ3SD<˜#Õ?ùF9a€3âS<j#§?ËF aRZ´J>Z;™Õè2 =6 @t ?µ õ *!53!8i!*¢!kÍ!89"Or"'Â"Bê"6-#]d#<Â#Dÿ#hD$<­$1ê$o%5Œ%,Â%ï% &#&8=&v&}&>ƒ& Â&%ã&f ''p'-˜',Æ'ó'8 (+E(#q(*•(*À(ë(0)=9)Bw):º)#õ)B*j\*-Ç*õ*+ + )+ 3+A+U+p+€++ ¡+¬+ Ã+Ð+Ö+Û+í+ÿ+,,4<,<q,3®,â,-- --"- 6- B-P- _-m--F›-â-é-ù-.0.H.a. x.†. ‹. –.¢.9Á.û./ / // #///D/ K/ W/:d/Ÿ/ µ/¿/È/Þ/ ð/ û/00(0,0=0M0^0 x0 ‚0Ž0¡0¦0 ¶0Ã0 Ì0Ö0 ð0 ü0 1 1 1 ,191?1 C1P1c1 j1x1 ‹1 ™1§1»1Ô1æ1ê1ï1222 2 2 62B2Q2 b2p2‚2 2°2¿2Î2×2ç2ø2"3*3@3 E3S3Y3k3 3‰3'Ÿ3Ç3Ì3 Õ3á3ð3ö3\ý3 Z4h4o4w4€4‡4 Ž4š4 ±4 ¾4Ë4Ñ4 Ù4å4ô4 ú455 5 !5 .595P5 a5 l5 w55Š55•5¤5º5É5 Û5å5 ÷56 66*6:6@6 F6R6b6h6o6 v6ƒ6Š6“6 ›6 ©6µ6¼6Á6È6 Ï6Ú6 á6 î6ø6 777 7 '747 =7˜I7 â8Fï8Ñ69A:tJ:N¿:H;LW;N¤;Có;;7<[s<CÏ</=EC=S‰=bÝ=;@>[|>CØ>/?EL?S’?bæ?fI@O°@KADLA ‘A"²A7ÕAE BFSBUšBðB2C@ACA‚C?ÄC~DMƒDZÑD2,E1_E4‘E‚ÆEUIFWŸFj÷F<bG,ŸGŽÌG;[H1—H"ÉH"ìHIB-IpIwIN}I$ÌI2ñIo$J,”J'ÁJ4éJK<=K0zK «K-ÌK+úK!&L5HL?~LB¾L=M,?MdlM|ÑM6NN …N,’N¿NÓN ØNåNO'"OJOgO†O‹O›O«O°O µO ¿OÉOâO#éO> P:LPC‡PËP êPøPÿPQ'Q>QPQbQuQ†Q žQE¿QR R% R!FR,hR,•R1ÂR ôRSS S#!S7ES}S‚S ‡S ’SS ¦S±SÇSÏSßSEòS8TTT cTmT&ŒT ³T ¾TÉT.ÏTþTUU5UJU jUxU‡UU¤U»U ÍU ØUåU V V V,V>VQVcVjVpV ‚V£V©V ¸VÙVëVWW0WDW JWTWkWrW yW…W'œWÄW×WëWXX&)XPXlX‡X ˜X¦X¶XËX"àXYY%Y9Y ?YLY [YgY<}YºY ÂYÍYÝYíYóY^üY[ZlZ rZ }Z ‹Z˜Z¡ZªZÃZÕZäZíZ ôZ [[['[0[ 6[ D[P[`[{[[Ÿ[ ®[¸[Á[Ç[Î[æ[þ[\ 0\=\S\c\j\r\Ž\ Ÿ\ª\ °\½\Õ\ Ú\ä\ ê\÷\ÿ\]] ]+]3]:]A] I]T] []i]p] w]…]‹] ‘] ]©] ²]"¦Â’iS¨°ñ©z“ì/ dœp®èçb×½Þö‡e6Áý#Ú'kyê Ô)|TÍ9{ÃÈ(ëm „•`»±BéÑÛ&L4¤nÖ›÷¥¬¸ãHµósQhu.3Mª;^§ îí³7¯Ùƒ~r ïV–ùGæÌR‚ˆ¿ŒfÉŽ«ÎÆcäàOlvŸ‰8[²2ðZ!5<,\P!#ËÐENŠa KÄÿxÊØâüú´X=¢gšwC£— *ÒoUÅÏ ”‹òø ¹ žD}$¶¼‘IÀ:™ FJÜ-ÇA]_˜já+å†WÝt0Óqº%¾Õ"@­…1Yõ>߀þû·¡ ?ô Layer: Use the pencil from cursor theme instead of a color dot (true/false) Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) always map touchscreen device to hand tool (true/false) (requires separate pen and touch devices) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) continuous view (false = one page, true = continuous, horiz = horizontal) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) delay for periodic autosaves (in seconds) disable touchscreen device when pen is in proximity (true/false) (requires separate pen and touch devices) discard Core Pointer events in XInput mode (true/false) do not worry if device reports button isn't pressed while drawing (true/false) enable periodic autosaves (true/false) force PDF rendering through cairo (slower but nicer) (true/false) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! ignore events from other devices while drawing (true/false) include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font name of touchscreen device for touchscreen_as_hand_tool of %d of n prefer xournal's own PDF code for exporting PDFs (true/false) preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false) when creating a new page, duplicate a PDF or image background instead of using default paper (true/false)%d auto-save files were found, including '%s'A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAuto-Save FilesAuto-save filesAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDelete auto-savesDesignate as Touchscreen...Drawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error opening image '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGenerating fontconfig cache...Generating fontconfig library cache, please be patient...GrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsIgnoreImage filesInsert ImageInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLegacy PDF ExportLight BlueLight GreenMediumMultiple auto-saves foundNewNew Page At _EndNew Page _AfterNew Page _BeforeNew Pages Keep BackgroundNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFPDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPen disables TouchPencilPencil CursorPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingProgressive _BackgroundsRecent Doc_umentsRedRedoRestore auto-saveRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSelect device for TouchscreenSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenTouchscreen device:US LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ Xournal filesYellowZoom InZoom Out_About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pen and Touch_Pressure sensitivity_Previous Page_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Touchscreen as Hand Tool_Vertical Space_View_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange paper_pink paper_plain_red_ruled_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kgr_aylight bl_uelight gr_eenother...ver_y thickProject-Id-Version: xournal 0.4.8 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2014-06-29 09:02+0200 PO-Revision-Date: 2014-06-29 21:04-0700 Last-Translator: Denis Auroux Language-Team: French Language: French MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calque : Utiliser le curseur crayon au lieu d'un point de couleur (true/false) Fichier de configuration de Xournal. Ce fichier est généré automatiquement lors de l'enregistrement des préférences. La plus grande prudence est recommandée lors de l'édition manuelle de ce fichier. toujours utiliser la pointe gomme comme outil gomme (true/false) l'écran tactile fait toujours défiler au lieu de dessiner (true/false) (nécessite des périphériques séparés) appliquer les changements de style de papier à toutes les pages (true/false) sauvegarde automatique des préférences en fin de session (true/false) charger automatiquement fichier.pdf.xoj au lieu de fichier.pdf (true/false) résolution bitmap des fonds PDF lors de l'impression via libgnomeprint (dpi) résolution bitmap des fonds PS/PDF produits via ghostscript (dpi) couleur de brosse bouton 2 (stylo ou surligneur seulement) outil bouton 2 lié à l'outil principal (true/false) (remplace tous les autres réglages) épaisseur de brosse bouton 2 (stylo, gomme, surligneur seulement) options de la gomme bouton 2 (gomme seulement) bouton 2 en mode règle (true/false) (stylo ou surligneur seulement) bouton 2 en mode détection de formes (true/false) (stylo ou surligneur seulement) outil bouton 2 (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) couleur de brosse bouton 3 (stylo ou surligneur seulement) outil bouton 3 lié à l'outil principal (true/false) (remplace tous les autres réglages) épaisseur de brosse bouton 3 (stylo, gomme, surligneur seulement) options de la gomme bouton 3 (gomme seulement) bouton 3 en mode règle (true/false) (stylo ou surligneur seulement) bouton 3 en mode détection de formes (true/false) (stylo ou surligneur seulement) outil bouton 3 (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) les buttons 2 et 3 changent d'outil au lieu de dessiner (utile pour certaines tablettes) (true/false) affichage continu (false = une seule page, true = continu, horiz = horizontal) mode de la gomme par défaut (standard = 0, blanc = 1, traits entiers = 2) épaisseur de la gomme par défaut (fin = 1, moyen = 2, épais = 3) taille de la police par défaut couleur du surligneur par défaut surligneur par défaut est en mode règle (true/false) surligneur par défaut est en mode détection de formes (true/false) épaisseur du surligneur par défaut (fin = 1, moyen = 2, épais = 3) dossier d'ouverture/enregistrement par défaut (laisser vierge pour dossier courant) couleur du stylo par défaut stylo par défaut est en mode règle (true/false) stylo par défaut est en mode détection de formes (true/false) épaisseur du stylo par défaut (fin = 1, moyen = 2, épais = 3) délai des sauvegardes automatiques périodiques (en secondes) désactiver l'écran tactile lorsque le stylet est proche de l'écran (true/false) (nécessite des périphériques séparés) supprimer les évènements du pointeur principal en mode XInput (true/false) ne pas vérifier si le périphérique indique bien que le bouton est pressé (true/false) activer les sauvegardes automatiques (true/false) forcer l'affichage de PDF via cairo (true/false) cacher certains éléments d'interface (true/false) opacité du surligneur (entre 0 et 1, défaut 0.5) attention: le niveau d'opacité n'est pas enregistré dans les fichiers xoj ! supprimer les évènements des autres périphériques pendant le dessin (true/false) inclure les lignes du papier lors de l'impression ou exportation vers PDF (true/false) composants d'interface de haut en bas valeurs permises: drawarea menu main_toolbar pen_toolbar statusbar composants d'interface en mode plein écran, de haut en bas barre de défilement à gauche (true/false) éléments d'interface à cacher (personnaliser avec précaution!) voir le fichier source xo-interface.c pour une liste de noms d'éléments mise à jour en temps réel des fonds de page (true/false) maximiser la fenêtre au démarrage (true/false) multiplicateur de largeur maximum multiplicateur de largeur minimum nom de la police par défaut nom du périphérique écran tactile pour touchscreen_as_handtool de %d de n préférer le code PDF de xournal pour exporter les fichiers PDF (true/false) unité préférée (cm, in, px, pt) incrément de la barre de défilement (en pixels) outil sélectionné au démarrage (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image) démarrer en mode plein écran (true/false) hauteur de page par défaut, en points largeur de page par défaut, en points (1/72 pouce) couleur de papier par défaut style de papier par défaut (plain, lined, ruled, ou graph) la résolution d'affichage, en pixels par pouce le niveau de zoom initial, en % facteur multiplicatif du zoom avant/arrière incrément dans la boîte de dialogue zoom hauteur de la fenêtre en pixels largeur de la fenêtre en pixels (si non maximisée) épaisseurs des diverses gommes (en points, 1 pt = 1/72 pouce) épaisseurs des divers surligneurs (en points, 1 pt = 1/72 pouce) épaisseurs des divers stylos (en points, 1 pt = 1/72 pouce) utiliser les extensions XInput (true/false) utiliser la sensibilité à la pression pour contrôler la largeur des traits de stylo (true/false) lors de la création d'une nouvelle page, dupliquer le fond PDF ou image au lieu d'utiliser le papier standard (true/false)%d fichiers sauvegarde automatique trouvés, dont '%s'A4 (paysage)Enregistrement automatique des préférencesA propos de XournalTousAnnoter PD_FAppliquer à toutes les pagesAttacher le fichier au journalEnregistrement automatique des fichiersEnregistrements automatiquesOuvrir pdf.xoj automatiquementFondCa_pture écranFichiers bitmapNoirBleuBouton _2Bouton _3Boutons changent d'outilCopierImpossible d'ouvrir le fond «%s».Impossible d'ouvrir le fond «%s». Choisir un autre fichier ?Impossible d'ouvrir le fond «%s». Le fond restera blanc.Impossible d'écrire le fond «%s». Poursuite de l'enregistrement.Fichier pixmap non trouvé: %sPersonnaliséCouperRéglages par défautGomme par défautSurligneur par défautStylo par défautTexte par défautPapier par défautSupprimer calqueEffacer les sauvegardesPériphérique écran tactile...Impossible de dessiner sur le calque de fond. Affichage du calque 1.GommeOptio_ns de la gommeErreur de création du fichier «%s»Erreur d'ouverture du fond «%s»Erreur lors de l'ouverture du fichier «%s»Erreur lors de l'ouverture de l'image «%s»Erreur lors de l'enregistrement du fichier «%s»Exporter PDFFinPremière pagePlein écranPréparation du cache fontconfig...Préparation du cache fontconfig, veuillez patienter...GrisVertOutil mainOutil mainHauteur:SurligneurOptions du surligneurIgnorerFichiers imagesInsérer une imageParamètres de ligne de commande incorrects. Usage: %s [fichier.xoj] Contenu du fichier invalideDernière pageCalque %dBarre de défilement à gaucheExporter PDF en mode de compatibilitéBleu clairVert clairMoyenPlusieurs sauvegardes automatiques disponiblesNouveauNouvelle page à la _finNouvelle page _aprèsNouvelle page a_vantCopier fond sur nouvelles pagesPage suivanteTaille normaleTaille normale (100%)OuvrirOuvrir un fond de pageOuvrir le journalOuvrir PDFFichiers PDFFichiers PS/PDF (comme bitmaps)Hauteur pageLargeur pageLargeur page_Taille du papier_Couleur du papier_Style de papier CollerStylo_Options du styloStylet désactive écran tactileStyloCurseur crayonChoisissez une couleur de papierPage précédenteOptions d'impressionImprimer les lignes du papierFonds progressifsDoc_uments récentsRougeRépéterRécupérer sauvegardeRègleRègleEnregistrerEnregistrer le journalEnregistrer les modifications de '%s' ?Choisir une policeSé_lection régionSélection rectangleSélection régionSélection _rectangleChoix du périphérique écran tactileDéfinir papier par défautDéfinir outil par défautTaille du papierRéglage zoomChanger de pageDétection de formesRaccourcir les menusEcraser le contenu du fichier %s ?Tailles de papier standard:Texte_Police de texte...EpaisPlein écranEcran tactile:Lettre (US)Lettre (US) (paysage)Impossible d'afficher une ou plusieurs pages du fichier PDF.AnnulerSans titreUtiliser XInputEspace verticalBlancLargeur:Ecrit par Denis Auroux et d'autres contributeurs http://xournal.sourceforge.net/ Fichiers XournalJauneZoom avantZoom arrière_A propos de_Couleur_Continu_Copie du pinceau actuelStylo par défautSupprimer page_Edition_GommePointe gommeE_xporter PDF_FichierPremière page_Aplatir_AideCacher calque_Surligneur_Dernière page_Lié au pinceau principal_Ouvrir fond de pageNouveau calquePage _suivante_Une pageO_ptions_PageSt_yloEcran tactile et styletSensible à la pressionPage _précédente_Enregistrer les préférencesChanger zoom_Détection de formesAfficher calque_Texte_OutilsEcran tactile fait défilerEspace _vertical_Affichage_bleupapier b_leu_effacer traits entiers_fin_carreaux_vertpapier _vert_lignes_magenta_moyenpapier _orangepapier _rose_vierge_rouge_margeé_pais_très fin_blancpapier _blanc_blanc_jaunepapier _jaune_noir_grisbleu _clairvert c_lairautre...t_rès épaisxournal-0.4.8/po/POTFILES.in0000644000175000017500000000037212007250212015027 0ustar aurouxauroux# List of source files containing translatable strings. src/main.c src/xo-interface.c src/xo-callbacks.c src/xo-support.c src/xo-file.c src/xo-misc.c src/xo-print.c src/xo-paint.c src/xo-image.c src/xo-clipboard.c src/xo-selection.c src/xo-shapes.c xournal-0.4.8/po/es.gmo0000664000175000017500000005341211772715212014410 0ustar aurouxaurouxÞ•ì{¼¨ ©´н-H4v+«I×L!In3¸Sì<@#}?¡FáL(3uS©<ý#:?^FžLåZ2>;Ì26=i@§?è(*;5f8œ8Õ7 6F ]} DÛ h !<‰!1Æ!oø!5h",ž"Ë"å"ÿ"# # &#%G#Qm#'¿#-ç#,$B$8[$+”$#À$*ä$*%:%0W%=ˆ%BÆ%: &#D&Bh&«&­&¯&±&³&µ&·&¹&»&½&À&Ï& æ& ô& þ& ' ';' L'W' n'{''†'˜'ª'Â'Ç'4ç'<(3Y((«(²(¶(¾(Í( á( í(û( )F)_)f)v))­)Å) Ü)ê) ï) ú)* * * *&* .*:*:O*Š*  *ª*³* É* Ô*à*è*ï*ó*++ %+ /+;+N+S+ c+p+y+ €+Š+ ¤+ °+ »+ Ç+ Ó+ à+í+ó+ ÷+, , , ,,:,N,`,d,i,p,v, {,ˆ, ž,ª,¹, Ê,Ø,ê,ú, --!-1-B-"Q-t-Š- --£- µ-¿-'Õ-ý-. ..&.,.\3.. ˜. ¥.³.º.Â.Ë.Ò.Ù. à.ì. / //#/ +/7/F/ L/X/a/ g/ s/ €/‹/¢/ ³/ ¾/ É/Ó/Ü/â/ç/ý/ 0%0 70A0 S0_0e0l0|0‚0ˆ0 Ž0š0ª0°0·0 ¾0Ë0Ò0Û0ã0 ë0 ù01 11 1"1 )141 ;1 H1R1 Z1h1o1r1x1 {1 ‡1”11¤1 «1p·1 (3 23 >38ß3E43^4K’4fÞ4eE5C«5eï5JU60 6MÑ6`7Á€7CB8e†8Jì8079Mh9`¶9Á:zÙ:WT;B¬;ï;.<8=<Kv<SÂ<P=g=4…=Gº=B>DE>@Š>IË>‰?HŸ?ôè?8Ý@CA‘ZADìA,1BV^BTµB C+C2C"8C?[C¿›C/[DF‹DGÒDEz7E6²E(éE2F3EF#yFAF:ßFOG=jG(¨G\ÑG.H0H2H4H6H8H:HH@H CHQHpH‚H•H¬HÉH çHII-IFILIQIeIyI—I&žI:ÅIAJ@BJ8ƒJ ¼JÊJÑJàJ'õJK3KIK_KDnK³K¸K3ÍK1L33L5gLL¬L ±L»LÒL×LÝLòLMM%&MCLM*M»MÁM$ÉM îM ùMN NNN3NKN`NrNN—NN¬N¼NÑN ÙN$æN O O6OMOaOrO„OŠO‘O¦O­O½OÎOåOPP P(P/P5P=P.OP~P‘PªPÅPÝPùPQ5QUQeQƒQœQ&«QÒQïQõQ RR/RDR=dR¢R «R·RÈRÙRàR[éRES MSZSnSwSS†S S˜S ŸS©SÂSÙSëSóSùST&T /T:TCTJT[TtT{T˜T ¨T´T ÇT ÔTÞTçTïT UU1U KUYUsU„U ‹U™U«U°U¶U ¼UÈUÝU ãUñU øUVVV V)V 8VDVJVPV YVdV lVvV ~VŒV  VªVºVÁVÄVÊV ÍV ÙVæVïV÷V þV%AëxÖ¿#&8é £êVþ ²úØIka.cJKL NO,Bª‘`º÷!b“¥>Ë TÇp~¦å2‡Ä‰ä(XðE'6æGM|w´P¢QdšY¯¬g‚À"z[ÏýöÁ¾Z)¨?–·¹Ð¤•îѱˆ_¶ì\4;€WÈàDÝŒH­jÍ tµܘ½C 5=ÞŽ†ã…ïûÅ„›l讳¡»0ƒuô]Ú‹3UÎf:eÔ°ùhÌõ$ Sr} áÕ§7 mÙ ^ɼÛçñqníÓ/ÿ*o’øÒFü<¸ž+óò-Râv9Ã߯œi@©sÊ«1 {Ÿ™y×—Š”  Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: 2010-08-08 17:29+0200 Last-Translator: Ãlvaro Language-Team: Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.0 Plural-Forms: nplurals=2; plural=(n != 1); Capa: Página Archivo de configuración de Xournal. Este archivo se genera automáticamente al guardar las preferencias. Tenga cuidado al editar este archivo manualmente. siempre asociar la punta de goma a la goma (true/false) aplicar cambios de estilo de papel a todas las páginas (true/false) auto-guardar preferencias a la salida (true/false) cargar automáticamente archivo.pdf.xoj en vez de archivo.pdf (true/false) resolución de los mapas de bits de los fondos PDF al imprimir con libgnomeprint (puntos por pulgada) resolución de los mapas de bits de los fondos PS/PDF generados con ghostscript (puntos por pulgada) color del pincel del botón 2 (solamente para lápiz o subrayador) el pincel del botón 2 está vinculado al pincel primario (true/false) (invalida las otras opciones) grosor del pincel del botón 2 (solamente para lápiz, goma o subrayador) modo de goma del botón 2 (solamente para goma) modo de regla del botón 2 (true/false) (solamente para lápiz o subrayador) modo de reconocimiento de formas del botón 2 (true/false) (solamente para lápiz o subrayador) herramienta del botón 2 (pen, eraser, highlighter, text, selectrect, vertspace, hand, que se corresponden con lápiz, goma, subrayador, texto, seleccionar rectángulo, espacio vertical, mano) color del pincel del botón 3 (solamente para lápiz o subrayador) el pincel del botón 3 está vinculado al pincel primario (true/false) (invalida las otras opciones) grosor del pincel del botón 3 (solamente para lápiz, goma o subrayador) modo de goma del botón 3 (solamente para goma) modo de regla del botón 3 (true/false) (solamente para lápiz o subrayador) modo de reconocimiento de formas del botón 3 (true/false) (solamente para lápiz o subrayador) herramienta del botón 3 (pen, eraser, highlighter, text, selectrect, vertspace, hand, que se corresponden con lápiz, goma, subrayador, texto, seleccionar rectángulo, espacio vertical, mano) los botones 2 y 3 cambian la función del botón principal en lugar de dibujar (útil para algunas tabletas) (true/false) modo por defecto de la goma (estándar = 0, líquido corrector = 1, borrar trazos = 2) grosor por defecto de la goma (fino = 1, mediano = 2, grueso = 3) tamaño de fuente por defecto color por defecto del subrayador fluorescente subrayador por defecto está en modo regla (true/false) subrayador por defecto está en modo reconocimiento de formas (true/false) grosor por defecto del subrayador fluorescente (fino = 1, mediano = 2, grueso = 3) ruta por defecto para abrir/guardar (dejar en blanco para el directorio actual) color por defecto del lápiz lápiz por defecto está en modo regla (true/false) lápiz por defecto está en modo reconocimiento de formas (true/false) grosor por defecto del lápiz (fino = 1, mediano = 2, grueso = 3) descartar sucesos del puntero principal en modo XInput (true/false) vista del documento (true = continua, false = una sola página) esconder algunos elementos poco usados del menú y la barra (true/false) opacidad del subrayador fluorescente (0 a 1, valor por defecto 0.5) precaución: el nivel de opacidad no se guarda en los archivos .xoj incluir las líneas del papel al imprimir o exportar a PDF (true/false) componentes de la interfaz, de arriba a abajo valores válidos: drawarea menu main_toolbar pen_toolbar statusbar que corresponden al área de dibujo, el menú, la barra principal, la barra de herramientas y la barra de estado respectivamente componentes de la interfaz en modo de pantalla completa la interfaz tiene barra de desplazamiento para zurdos (true/false) elementos de la interfaz que se esconderán (editar con cuidado) los nombres están disponibles en el archivo xo-interface.c del código fuente actualización en tiempo real de los fondos de página (true/false) maximizar la ventana al inicio (true/false) multiplicador de la anchura máxima (el trazo más grueso es x veces el trazo normal) multiplicador de la anchura mínima (el trazo más fino es x veces el trazo normal) nombre de la fuente por defecto de %d de n unidad preferida (cm, in, px, pt) incremento unitario de la barra de desplazamiento (en píxels) herramienta seleccionada al iniciar (pen, eraser, highlighter, selectrect, vertspace, hand, que se corresponden con lápiz, goma, subrayador, seleccionar rectángulo, espacio vertical, mano) iniciar en modo pantalla completa (true/false) altura por defecto de la página en puntos (1 pt = 1/72 in = 0,35 mm) anchura por defecto de la página en puntos (1 pt = 1/72 in = 0,35 mm) color por defecto del papel estilo por defecto del papel (plain, lined, ruled o graph, que se corresponden con liso, pautado, reglado y cuadriculado) la resolución de la pantalla, en píxels por pulgada el nivel inicial de zoom, en porcentaje factor multiplicativo para acercar/alejar el zoom incremento unitario del cuadro de diálogo de zoom la altura de la ventana en píxels la anchura de la ventana en píxels (cuando no está maximizada) grosor de las gomas (en puntos, 1 pt = 1/72 in = 0,35 mm) grosor de los subrayadores fluorescentes (en puntos, 1 pt = 1/72 in = 0,35 mm) grosor de los lápices (en puntos, 1 pt = 1/72 in = 0,35 mm) usar extensiones de XInput (true/false) usar información de presión para controlar el grosor de los trazos de lápiz (true/false)%01234567A4A4 (apaisado)Au_to-guardar las preferenciasAcerca de XournalTodos los archivosAnotar un archivo _PDFAp_lica a todas las páginasAdjuntar el archivo al diarioCargar _automáticamente pdf.xojFondoCapt_ura de pantalla del fondoArchivos de mapa de bitsNegroAzulMapeo del botón _2Mapeo del botón _3Los botones _cambian el mapeoCopiarNo se ha podido abrir el fondo «%s».No se ha podido abrir el fondo «%s». ¿Seleccionar otro?No se ha podido abrir el fondo «%s». Se usará fondo en blanco.No se ha podido guardar el fondo «%s». Continuando igualmente.No se ha encontrado el archivo de mapa de píxels «%s»PersonalizadaCortarPredeterminadoGom_a predeterminadaSu_brayador fluorescente predeterminadoLápiz predeterminadoText_o predeterminado_Papel predeterminadoEli_minar capaNo se puede dibujar en la capa de fondo. Se conmutará a la capa 1.GomaOpcio_nes de la gomaSe ha producido un error al crear el archivo «%s»Se ha producido un error al abrir el fondo «%s»Se ha producido un error al abrir el archivo «%s»Se ha producido un error al guardar el archivo «%s»Exportar a PDFFinoPrincipio_Ver pantalla completaGrisVerdeHerramienta de _manoHerramienta de manoAltura:Subrayador fluorescenteOpciones del subrayador fl_uorescenteParámetros de línea de comando inválidos. Uso: %s [archivo.xoj] Los contenidos del archivo no son válidosFinalCapa %d_Barra de desplazamiento para zurdosAzul cieloVerde claroMagentaMedianoNuevoPágina nueva al _finalPágina nueva _despuésPágina nueva _antesPágina siguienteTamaño normalTamaño normal (100%)AbrirAbrir un fondoAbrir un diarioAbrir un archivo PDFNaranjaArchivos PDFArchivos PS/PDF (como mapas de bits)Altura de la páginaAnchura de la páginaAnchura de la _página_Tamaño del _papel_Color del papelE_stilo del papelPegarLápizOpc_iones del lápizLápizColor del papelPágina anteriorOpciones de impresión_Imprimir las líneas del papelDocumentos _RecientesRojoRehacer_ReglaReglaGuardarGuardar el diario¿Desea guardar los cambios al archivo «%s»?Seleccionar fuenteSeleccionar una regi_ónSeleccionar un rectánguloSeleccionar una regiónSeleccionar un r_ectánguloDef_inir como predeterminadoConvertirlo en _predeterminadoEstablecer el tamaño del papelDefinir el zoomDefinir el número de páginaReconocimiento de formas_Menús cortosDesea sobreescribir el archivo «%s»?Tamaños de papel estándar:TextoFuente del te_xto...GruesoConmutar la pantalla completaCarta norteamericanaCarta norteamericana (apaisada)No se ha podido procesar una o más páginas del archivo PDF.DeshacerSin títuloUtilizar _XInputEspacio verticalBlancoAnchura:Creado por Denis Auroux y otros colaboradores http://xournal.sourceforge.net/ XournalXournal - %sArchivos de XournalAmarilloAcercarAlejarZoom: _Acerca de_Color_Continuo_Copia del pincel actualLápi_z predeterminado_Eliminar página_Editar_GomaUtilizar la _goma del lápiz_Exportar a PDF_Archivo_PrincipioA_planarAy_uda_Ocultar la capa_Subrayador fluorescente_FinalVincular al pincel _primarioCa_rga un fondo_Nueva capaPágina _siguiente_Una página_Opciones_Página_LápizSensibilidad a la _presiónPágina _anterior_Fondos progresivosG_uardar las preferencias_Definir zoomReconocimiento de _formas_Mostrar la capa_Texto_HerramientasEspacio _vertical_Ver_Zooma_zulpapel a_zul_suprimir los trazos_fino_cuadriculado_verdepapel _verde_pautado_magenta_medianonaran_japapel _naranjapapel _rosa_liso_rojo_reglado_estándar_grueso_muy fino_blancopapel _blanco_corrector líquido_amarillopapel _amarillo_negrocm_grisinazul _cielov_erde claro_otro...píxelspuntosm_uy gruesoxournal-0.4.8/po/fr.po0000644000175000017500000010527712353740673014256 0ustar aurouxauroux# French translations for xournal package # This file is distributed under the same license as the xournal package. # Denis Auroux , 2009. # msgid "" msgstr "" "Project-Id-Version: xournal 0.4.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2014-06-29 09:02+0200\n" "PO-Revision-Date: 2014-06-29 21:04-0700\n" "Last-Translator: Denis Auroux \n" "Language-Team: French\n" "Language: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "Paramètres de ligne de commande incorrects.\n" "Usage: %s [fichier.xoj]\n" #: ../src/main.c:328 ../src/xo-callbacks.c:122 ../src/xo-callbacks.c:173 #: ../src/xo-callbacks.c:3292 #, c-format msgid "Error opening file '%s'" msgstr "Erreur lors de l'ouverture du fichier «%s»" #: ../src/xo-interface.c:364 ../src/xo-interface.c:3088 ../src/xo-misc.c:1633 msgid "Xournal" msgstr "" #: ../src/xo-interface.c:374 msgid "_File" msgstr "_Fichier" #: ../src/xo-interface.c:385 msgid "Annotate PD_F" msgstr "Annoter PD_F" #: ../src/xo-interface.c:410 msgid "Recent Doc_uments" msgstr "Doc_uments récents" #: ../src/xo-interface.c:417 msgid "0" msgstr "" #: ../src/xo-interface.c:421 msgid "1" msgstr "" #: ../src/xo-interface.c:425 msgid "2" msgstr "" #: ../src/xo-interface.c:429 msgid "3" msgstr "" #: ../src/xo-interface.c:433 msgid "4" msgstr "" #: ../src/xo-interface.c:437 msgid "5" msgstr "" #: ../src/xo-interface.c:441 msgid "6" msgstr "" #: ../src/xo-interface.c:445 msgid "7" msgstr "" #: ../src/xo-interface.c:454 msgid "Print Options" msgstr "Options d'impression" #: ../src/xo-interface.c:469 msgid "_Export to PDF" msgstr "E_xporter PDF" #: ../src/xo-interface.c:485 msgid "_Edit" msgstr "_Edition" #: ../src/xo-interface.c:530 msgid "_View" msgstr "_Affichage" #: ../src/xo-interface.c:537 msgid "_Continuous" msgstr "_Continu" #: ../src/xo-interface.c:543 msgid "Horizontal" msgstr "" #: ../src/xo-interface.c:549 msgid "_One Page" msgstr "_Une page" #: ../src/xo-interface.c:560 msgid "Full Screen" msgstr "Plein écran" #: ../src/xo-interface.c:572 msgid "_Zoom" msgstr "" #: ../src/xo-interface.c:600 msgid "Page _Width" msgstr "Largeur page" #: ../src/xo-interface.c:611 msgid "_Set Zoom" msgstr "Changer zoom" #: ../src/xo-interface.c:620 msgid "_First Page" msgstr "Première page" #: ../src/xo-interface.c:631 msgid "_Previous Page" msgstr "Page _précédente" #: ../src/xo-interface.c:642 msgid "_Next Page" msgstr "Page _suivante" #: ../src/xo-interface.c:653 msgid "_Last Page" msgstr "_Dernière page" #: ../src/xo-interface.c:669 msgid "_Show Layer" msgstr "Afficher calque" #: ../src/xo-interface.c:677 msgid "_Hide Layer" msgstr "Cacher calque" #: ../src/xo-interface.c:685 msgid "_Page" msgstr "_Page" #: ../src/xo-interface.c:692 msgid "New Page _Before" msgstr "Nouvelle page a_vant" #: ../src/xo-interface.c:696 msgid "New Page _After" msgstr "Nouvelle page _après" #: ../src/xo-interface.c:700 msgid "New Page At _End" msgstr "Nouvelle page à la _fin" #: ../src/xo-interface.c:704 msgid "New Pages Keep Background" msgstr "Copier fond sur nouvelles pages" #: ../src/xo-interface.c:708 msgid "_Delete Page" msgstr "Supprimer page" #: ../src/xo-interface.c:717 msgid "_New Layer" msgstr "Nouveau calque" #: ../src/xo-interface.c:721 msgid "Delete La_yer" msgstr "Supprimer calque" #: ../src/xo-interface.c:725 msgid "_Flatten" msgstr "_Aplatir" #: ../src/xo-interface.c:734 msgid "Paper Si_ze" msgstr "_Taille du papier" #: ../src/xo-interface.c:738 msgid "Paper _Color" msgstr "_Couleur du papier" #: ../src/xo-interface.c:745 msgid "_white paper" msgstr "papier _blanc" #: ../src/xo-interface.c:751 msgid "_yellow paper" msgstr "papier _jaune" #: ../src/xo-interface.c:757 msgid "_pink paper" msgstr "papier _rose" #: ../src/xo-interface.c:763 msgid "_orange paper" msgstr "papier _orange" #: ../src/xo-interface.c:769 msgid "_blue paper" msgstr "papier b_leu" #: ../src/xo-interface.c:775 msgid "_green paper" msgstr "papier _vert" #: ../src/xo-interface.c:781 ../src/xo-interface.c:1058 msgid "other..." msgstr "autre..." #: ../src/xo-interface.c:785 ../src/xo-interface.c:821 #: ../src/xo-interface.c:1062 ../src/xo-interface.c:1332 #: ../src/xo-interface.c:1414 msgid "NA" msgstr "" #: ../src/xo-interface.c:790 msgid "Paper _Style" msgstr "_Style de papier " #: ../src/xo-interface.c:797 msgid "_plain" msgstr "_vierge" #: ../src/xo-interface.c:803 msgid "_lined" msgstr "_lignes" #: ../src/xo-interface.c:809 msgid "_ruled" msgstr "_marge" #: ../src/xo-interface.c:815 msgid "_graph" msgstr "_carreaux" #: ../src/xo-interface.c:826 msgid "Apply _To All Pages" msgstr "Appliquer à toutes les pages" #: ../src/xo-interface.c:835 msgid "_Load Background" msgstr "_Ouvrir fond de page" #: ../src/xo-interface.c:843 msgid "Background Screens_hot" msgstr "Ca_pture écran" #: ../src/xo-interface.c:852 msgid "Default _Paper" msgstr "Papier par défaut" #: ../src/xo-interface.c:856 msgid "Set As De_fault" msgstr "Définir papier par défaut" #: ../src/xo-interface.c:860 msgid "_Tools" msgstr "_Outils" #: ../src/xo-interface.c:867 ../src/xo-interface.c:1262 #: ../src/xo-interface.c:1344 msgid "_Pen" msgstr "St_ylo" #: ../src/xo-interface.c:876 ../src/xo-interface.c:1268 #: ../src/xo-interface.c:1350 msgid "_Eraser" msgstr "_Gomme" #: ../src/xo-interface.c:885 ../src/xo-interface.c:1274 #: ../src/xo-interface.c:1356 msgid "_Highlighter" msgstr "_Surligneur" #: ../src/xo-interface.c:894 ../src/xo-interface.c:1280 #: ../src/xo-interface.c:1362 msgid "_Text" msgstr "_Texte" #: ../src/xo-interface.c:903 ../src/xo-interface.c:1286 #: ../src/xo-interface.c:1368 msgid "_Image" msgstr "" #: ../src/xo-interface.c:917 msgid "_Shape Recognizer" msgstr "_Détection de formes" #: ../src/xo-interface.c:924 msgid "Ru_ler" msgstr "Règle" #: ../src/xo-interface.c:936 ../src/xo-interface.c:1292 #: ../src/xo-interface.c:1374 msgid "Select Re_gion" msgstr "Sé_lection région" #: ../src/xo-interface.c:945 ../src/xo-interface.c:1298 #: ../src/xo-interface.c:1380 msgid "Select _Rectangle" msgstr "Sélection _rectangle" #: ../src/xo-interface.c:954 ../src/xo-interface.c:1304 #: ../src/xo-interface.c:1386 msgid "_Vertical Space" msgstr "Espace _vertical" #: ../src/xo-interface.c:963 ../src/xo-interface.c:1310 #: ../src/xo-interface.c:1392 msgid "H_and Tool" msgstr "Outil main" #: ../src/xo-interface.c:976 msgid "_Color" msgstr "_Couleur" #: ../src/xo-interface.c:987 msgid "blac_k" msgstr "_noir" #: ../src/xo-interface.c:993 msgid "_blue" msgstr "_bleu" #: ../src/xo-interface.c:999 msgid "_red" msgstr "_rouge" #: ../src/xo-interface.c:1005 msgid "_green" msgstr "_vert" #: ../src/xo-interface.c:1011 msgid "gr_ay" msgstr "_gris" #: ../src/xo-interface.c:1022 msgid "light bl_ue" msgstr "bleu _clair" #: ../src/xo-interface.c:1028 msgid "light gr_een" msgstr "vert c_lair" #: ../src/xo-interface.c:1034 msgid "_magenta" msgstr "_magenta" #: ../src/xo-interface.c:1040 msgid "_orange" msgstr "" #: ../src/xo-interface.c:1046 msgid "_yellow" msgstr "_jaune" #: ../src/xo-interface.c:1052 msgid "_white" msgstr "_blanc" #: ../src/xo-interface.c:1067 msgid "Pen _Options" msgstr "_Options du stylo" #: ../src/xo-interface.c:1074 msgid "_very fine" msgstr "_très fin" #: ../src/xo-interface.c:1080 ../src/xo-interface.c:1111 #: ../src/xo-interface.c:1159 msgid "_fine" msgstr "_fin" #: ../src/xo-interface.c:1086 ../src/xo-interface.c:1117 #: ../src/xo-interface.c:1165 msgid "_medium" msgstr "_moyen" #: ../src/xo-interface.c:1092 ../src/xo-interface.c:1123 #: ../src/xo-interface.c:1171 msgid "_thick" msgstr "é_pais" #: ../src/xo-interface.c:1098 msgid "ver_y thick" msgstr "t_rès épais" #: ../src/xo-interface.c:1104 msgid "Eraser Optio_ns" msgstr "Optio_ns de la gomme" #: ../src/xo-interface.c:1134 msgid "_standard" msgstr "" #: ../src/xo-interface.c:1140 msgid "_whiteout" msgstr "_blanc" #: ../src/xo-interface.c:1146 msgid "_delete strokes" msgstr "_effacer traits entiers" #: ../src/xo-interface.c:1152 msgid "Highlighter Opt_ions" msgstr "Options du surligneur" #: ../src/xo-interface.c:1177 msgid "Text _Font..." msgstr "_Police de texte..." #: ../src/xo-interface.c:1193 msgid "_Default Pen" msgstr "Stylo par défaut" #: ../src/xo-interface.c:1197 msgid "Default Eraser" msgstr "Gomme par défaut" #: ../src/xo-interface.c:1201 msgid "Default Highlighter" msgstr "Surligneur par défaut" #: ../src/xo-interface.c:1205 msgid "Default Te_xt" msgstr "Texte par défaut" #: ../src/xo-interface.c:1209 msgid "Set As Default" msgstr "Définir outil par défaut" #: ../src/xo-interface.c:1213 msgid "_Options" msgstr "O_ptions" #: ../src/xo-interface.c:1220 msgid "Use _XInput" msgstr "Utiliser XInput" #: ../src/xo-interface.c:1224 msgid "_Pen and Touch" msgstr "Ecran tactile et stylet" #: ../src/xo-interface.c:1231 msgid "_Eraser Tip" msgstr "Pointe gomme" #: ../src/xo-interface.c:1235 msgid "_Pressure sensitivity" msgstr "Sensible à la pression" #: ../src/xo-interface.c:1239 msgid "Buttons Switch Mappings" msgstr "Boutons changent d'outil" #: ../src/xo-interface.c:1243 msgid "_Touchscreen as Hand Tool" msgstr "Ecran tactile fait défiler" #: ../src/xo-interface.c:1247 msgid "Pen disables Touch" msgstr "Stylet désactive écran tactile" #: ../src/xo-interface.c:1251 msgid "Designate as Touchscreen..." msgstr "Périphérique écran tactile..." #: ../src/xo-interface.c:1255 msgid "Button _2 Mapping" msgstr "Bouton _2" #: ../src/xo-interface.c:1320 ../src/xo-interface.c:1402 msgid "_Link to Primary Brush" msgstr "_Lié au pinceau principal" #: ../src/xo-interface.c:1326 ../src/xo-interface.c:1408 msgid "_Copy of Current Brush" msgstr "_Copie du pinceau actuel" #: ../src/xo-interface.c:1337 msgid "Button _3 Mapping" msgstr "Bouton _3" #: ../src/xo-interface.c:1424 msgid "Progressive _Backgrounds" msgstr "Fonds progressifs" #: ../src/xo-interface.c:1428 msgid "Print Paper _Ruling" msgstr "Imprimer les lignes du papier" #: ../src/xo-interface.c:1432 msgid "Legacy PDF Export" msgstr "Exporter PDF en mode de compatibilité" #: ../src/xo-interface.c:1436 msgid "Autoload pdf.xoj" msgstr "Ouvrir pdf.xoj automatiquement" #: ../src/xo-interface.c:1440 msgid "Auto-Save Files" msgstr "Enregistrement automatique des fichiers" #: ../src/xo-interface.c:1444 msgid "Left-Handed Scrollbar" msgstr "Barre de défilement à gauche" #: ../src/xo-interface.c:1448 msgid "Shorten _Menus" msgstr "Raccourcir les menus" #: ../src/xo-interface.c:1452 msgid "Pencil Cursor" msgstr "Curseur crayon" #: ../src/xo-interface.c:1461 msgid "A_uto-Save Preferences" msgstr "Enregistrement automatique des préférences" #: ../src/xo-interface.c:1465 msgid "_Save Preferences" msgstr "_Enregistrer les préférences" #: ../src/xo-interface.c:1469 msgid "_Help" msgstr "_Aide" #: ../src/xo-interface.c:1480 msgid "_About" msgstr "_A propos de" #: ../src/xo-interface.c:1493 msgid "Save" msgstr "Enregistrer" #: ../src/xo-interface.c:1498 msgid "New" msgstr "Nouveau" #: ../src/xo-interface.c:1503 msgid "Open" msgstr "Ouvrir" #: ../src/xo-interface.c:1516 msgid "Cut" msgstr "Couper" #: ../src/xo-interface.c:1521 msgid "Copy" msgstr "Copier" #: ../src/xo-interface.c:1526 msgid "Paste" msgstr "Coller" #: ../src/xo-interface.c:1539 msgid "Undo" msgstr "Annuler" #: ../src/xo-interface.c:1544 msgid "Redo" msgstr "Répéter" #: ../src/xo-interface.c:1557 msgid "First Page" msgstr "Première page" #: ../src/xo-interface.c:1562 msgid "Previous Page" msgstr "Page précédente" #: ../src/xo-interface.c:1567 msgid "Next Page" msgstr "Page suivante" #: ../src/xo-interface.c:1572 msgid "Last Page" msgstr "Dernière page" #: ../src/xo-interface.c:1585 msgid "Zoom Out" msgstr "Zoom arrière" #: ../src/xo-interface.c:1590 ../src/xo-interface.c:3182 msgid "Page Width" msgstr "Largeur page" #: ../src/xo-interface.c:1596 msgid "Zoom In" msgstr "Zoom avant" #: ../src/xo-interface.c:1601 msgid "Normal Size" msgstr "Taille normale" #: ../src/xo-interface.c:1606 ../src/xo-interface.c:3141 msgid "Set Zoom" msgstr "Réglage zoom" #: ../src/xo-interface.c:1615 msgid "Toggle Fullscreen" msgstr "Plein écran" #: ../src/xo-interface.c:1624 msgid "Pencil" msgstr "Stylo" #: ../src/xo-interface.c:1630 msgid "Pen" msgstr "Stylo" #: ../src/xo-interface.c:1635 ../src/xo-interface.c:1641 msgid "Eraser" msgstr "Gomme" #: ../src/xo-interface.c:1646 ../src/xo-interface.c:1652 msgid "Highlighter" msgstr "Surligneur" #: ../src/xo-interface.c:1657 ../src/xo-interface.c:1663 msgid "Text" msgstr "Texte" #: ../src/xo-interface.c:1668 ../src/xo-interface.c:1674 msgid "Image" msgstr "" #: ../src/xo-interface.c:1679 ../src/xo-interface.c:1685 msgid "Shape Recognizer" msgstr "Détection de formes" #: ../src/xo-interface.c:1688 ../src/xo-interface.c:1694 msgid "Ruler" msgstr "Règle" #: ../src/xo-interface.c:1705 ../src/xo-interface.c:1711 msgid "Select Region" msgstr "Sélection région" #: ../src/xo-interface.c:1716 ../src/xo-interface.c:1722 msgid "Select Rectangle" msgstr "Sélection rectangle" #: ../src/xo-interface.c:1727 ../src/xo-interface.c:1733 msgid "Vertical Space" msgstr "Espace vertical" #: ../src/xo-interface.c:1738 msgid "Hand Tool" msgstr "Outil main" #: ../src/xo-interface.c:1757 ../src/xo-interface.c:1761 msgid "Default" msgstr "Réglages par défaut" #: ../src/xo-interface.c:1765 ../src/xo-interface.c:1768 msgid "Default Pen" msgstr "Stylo par défaut" #: ../src/xo-interface.c:1779 ../src/xo-interface.c:1787 msgid "Fine" msgstr "Fin" #: ../src/xo-interface.c:1792 ../src/xo-interface.c:1800 msgid "Medium" msgstr "Moyen" #: ../src/xo-interface.c:1805 ../src/xo-interface.c:1813 msgid "Thick" msgstr "Epais" #: ../src/xo-interface.c:1832 ../src/xo-interface.c:1839 msgid "Black" msgstr "Noir" #: ../src/xo-interface.c:1844 ../src/xo-interface.c:1851 msgid "Blue" msgstr "Bleu" #: ../src/xo-interface.c:1856 ../src/xo-interface.c:1863 msgid "Red" msgstr "Rouge" #: ../src/xo-interface.c:1868 ../src/xo-interface.c:1875 msgid "Green" msgstr "Vert" #: ../src/xo-interface.c:1880 ../src/xo-interface.c:1887 msgid "Gray" msgstr "Gris" #: ../src/xo-interface.c:1892 ../src/xo-interface.c:1899 msgid "Light Blue" msgstr "Bleu clair" #: ../src/xo-interface.c:1904 ../src/xo-interface.c:1911 msgid "Light Green" msgstr "Vert clair" #: ../src/xo-interface.c:1916 ../src/xo-interface.c:1923 msgid "Magenta" msgstr "" #: ../src/xo-interface.c:1928 ../src/xo-interface.c:1935 msgid "Orange" msgstr "" #: ../src/xo-interface.c:1940 ../src/xo-interface.c:1947 msgid "Yellow" msgstr "Jaune" #: ../src/xo-interface.c:1952 ../src/xo-interface.c:1959 msgid "White" msgstr "Blanc" #: ../src/xo-interface.c:2006 msgid " Page " msgstr "" #: ../src/xo-interface.c:2014 msgid "Set page number" msgstr "Changer de page" #: ../src/xo-interface.c:2018 msgid " of n" msgstr " de n" #: ../src/xo-interface.c:2026 msgid " Layer: " msgstr " Calque : " #: ../src/xo-interface.c:2963 msgid "Set Paper Size" msgstr "Taille du papier" #: ../src/xo-interface.c:2975 msgid "Standard paper sizes:" msgstr "Tailles de papier standard:" #: ../src/xo-interface.c:2983 msgid "A4" msgstr "" #: ../src/xo-interface.c:2984 msgid "A4 (landscape)" msgstr "A4 (paysage)" #: ../src/xo-interface.c:2985 msgid "US Letter" msgstr "Lettre (US)" #: ../src/xo-interface.c:2986 msgid "US Letter (landscape)" msgstr "Lettre (US) (paysage)" #: ../src/xo-interface.c:2987 msgid "Custom" msgstr "Personnalisé" #: ../src/xo-interface.c:2993 msgid "Width:" msgstr "Largeur:" #: ../src/xo-interface.c:3002 msgid "Height:" msgstr "Hauteur:" #: ../src/xo-interface.c:3014 msgid "cm" msgstr "" #: ../src/xo-interface.c:3015 msgid "in" msgstr "" #: ../src/xo-interface.c:3016 msgid "pixels" msgstr "" #: ../src/xo-interface.c:3017 msgid "points" msgstr "" #: ../src/xo-interface.c:3077 msgid "About Xournal" msgstr "A propos de Xournal" #: ../src/xo-interface.c:3093 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Ecrit par Denis Auroux\n" "et d'autres contributeurs\n" " http://xournal.sourceforge.net/ " #: ../src/xo-interface.c:3157 msgid "Zoom: " msgstr "" #: ../src/xo-interface.c:3170 msgid "%" msgstr "" #: ../src/xo-interface.c:3175 msgid "Normal size (100%)" msgstr "Taille normale (100%)" #: ../src/xo-interface.c:3189 msgid "Page Height" msgstr "Hauteur page" #. user aborted on save confirmation #: ../src/xo-callbacks.c:68 ../src/xo-file.c:993 msgid "Open PDF" msgstr "Ouvrir PDF" #: ../src/xo-callbacks.c:76 ../src/xo-callbacks.c:149 #: ../src/xo-callbacks.c:234 ../src/xo-callbacks.c:378 #: ../src/xo-callbacks.c:1461 ../src/xo-file.c:453 ../src/xo-file.c:1001 #: ../src/xo-image.c:117 msgid "All files" msgstr "Tous" #: ../src/xo-callbacks.c:79 ../src/xo-callbacks.c:381 ../src/xo-file.c:1004 msgid "PDF files" msgstr "Fichiers PDF" #: ../src/xo-callbacks.c:87 ../src/xo-callbacks.c:1484 msgid "Attach file to the journal" msgstr "Attacher le fichier au journal" #. user aborted on save confirmation #: ../src/xo-callbacks.c:141 msgid "Open Journal" msgstr "Ouvrir le journal" #: ../src/xo-callbacks.c:152 ../src/xo-callbacks.c:237 msgid "Xournal files" msgstr "Fichiers Xournal" #: ../src/xo-callbacks.c:202 ../src/xo-callbacks.c:283 ../src/xo-file.c:1169 #, c-format msgid "Error saving file '%s'" msgstr "Erreur lors de l'enregistrement du fichier «%s»" #: ../src/xo-callbacks.c:221 msgid "Save Journal" msgstr "Enregistrer le journal" #: ../src/xo-callbacks.c:263 ../src/xo-callbacks.c:399 #, c-format msgid "Should the file %s be overwritten?" msgstr "Ecraser le contenu du fichier %s ?" #: ../src/xo-callbacks.c:360 msgid "Export to PDF" msgstr "Exporter PDF" #: ../src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Erreur de création du fichier «%s»" #: ../src/xo-callbacks.c:1388 msgid "Pick a Paper Color" msgstr "Choisissez une couleur de papier" #: ../src/xo-callbacks.c:1453 msgid "Open Background" msgstr "Ouvrir un fond de page" #: ../src/xo-callbacks.c:1469 msgid "Bitmap files" msgstr "Fichiers bitmap" #: ../src/xo-callbacks.c:1477 msgid "PS/PDF files (as bitmaps)" msgstr "Fichiers PS/PDF (comme bitmaps)" #: ../src/xo-callbacks.c:1507 #, c-format msgid "Error opening background '%s'" msgstr "Erreur d'ouverture du fond «%s»" #: ../src/xo-callbacks.c:2100 msgid "Select Font" msgstr "Choisir une police" #: ../src/xo-callbacks.c:2491 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "Impossible de dessiner sur le calque de fond.\n" " Affichage du calque 1." #: ../src/xo-callbacks.c:3788 msgid "Select device for Touchscreen" msgstr "Choix du périphérique écran tactile" #: ../src/xo-callbacks.c:3798 msgid "Touchscreen device:" msgstr "Ecran tactile:" #: ../src/xo-support.c:90 ../src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Fichier pixmap non trouvé: %s" #: ../src/xo-file.c:201 ../src/xo-file.c:235 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Impossible d'écrire le fond «%s». Poursuite de l'enregistrement." #: ../src/xo-file.c:417 #, c-format msgid "%d auto-save files were found, including '%s'" msgstr "%d fichiers sauvegarde automatique trouvés, dont '%s'" #: ../src/xo-file.c:418 msgid "Ignore" msgstr "Ignorer" #: ../src/xo-file.c:419 msgid "Restore auto-save" msgstr "Récupérer sauvegarde" #: ../src/xo-file.c:420 msgid "Delete auto-saves" msgstr "Effacer les sauvegardes" #: ../src/xo-file.c:443 msgid "Multiple auto-saves found" msgstr "Plusieurs sauvegardes automatiques disponibles" #: ../src/xo-file.c:457 msgid "Auto-save files" msgstr "Enregistrements automatiques" #: ../src/xo-file.c:520 msgid "Invalid file contents" msgstr "Contenu du fichier invalide" #: ../src/xo-file.c:670 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "Impossible d'ouvrir le fond «%s». Le fond restera blanc." #: ../src/xo-file.c:988 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Impossible d'ouvrir le fond «%s».\n" "Choisir un autre fichier ?" #: ../src/xo-file.c:1137 #, c-format msgid "Could not open background '%s'." msgstr "Impossible d'ouvrir le fond «%s»." #: ../src/xo-file.c:1161 msgid "Save this version and delete auto-save?" msgstr "" #: ../src/xo-file.c:1411 msgid "Unable to render one or more PDF pages." msgstr "Impossible d'afficher une ou plusieurs pages du fichier PDF." #: ../src/xo-file.c:1833 msgid " the display resolution, in pixels per inch" msgstr " la résolution d'affichage, en pixels par pouce" #: ../src/xo-file.c:1836 msgid " the initial zoom level, in percent" msgstr " le niveau de zoom initial, en %" #: ../src/xo-file.c:1839 msgid " maximize the window at startup (true/false)" msgstr " maximiser la fenêtre au démarrage (true/false)" #: ../src/xo-file.c:1842 msgid " start in full screen mode (true/false)" msgstr " démarrer en mode plein écran (true/false)" #: ../src/xo-file.c:1845 msgid " the window width in pixels (when not maximized)" msgstr " largeur de la fenêtre en pixels (si non maximisée)" #: ../src/xo-file.c:1848 msgid " the window height in pixels" msgstr " hauteur de la fenêtre en pixels" #: ../src/xo-file.c:1851 msgid " scrollbar step increment (in pixels)" msgstr " incrément de la barre de défilement (en pixels)" #: ../src/xo-file.c:1854 msgid " the step increment in the zoom dialog box" msgstr " incrément dans la boîte de dialogue zoom" #: ../src/xo-file.c:1857 msgid " the multiplicative factor for zoom in/out" msgstr " facteur multiplicatif du zoom avant/arrière" #: ../src/xo-file.c:1860 msgid " continuous view (false = one page, true = continuous, horiz = horizontal)" msgstr " affichage continu (false = une seule page, true = continu, horiz = horizontal)" #: ../src/xo-file.c:1863 msgid " use XInput extensions (true/false)" msgstr " utiliser les extensions XInput (true/false)" #: ../src/xo-file.c:1866 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " supprimer les évènements du pointeur principal en mode XInput (true/false)" #: ../src/xo-file.c:1869 msgid " ignore events from other devices while drawing (true/false)" msgstr " supprimer les évènements des autres périphériques pendant le dessin (true/false)" #: ../src/xo-file.c:1872 msgid " do not worry if device reports button isn't pressed while drawing (true/false)" msgstr " ne pas vérifier si le périphérique indique bien que le bouton est pressé (true/false)" #: ../src/xo-file.c:1875 msgid " always map eraser tip to eraser (true/false)" msgstr " toujours utiliser la pointe gomme comme outil gomme (true/false)" #: ../src/xo-file.c:1878 msgid " always map touchscreen device to hand tool (true/false) (requires separate pen and touch devices)" msgstr " l'écran tactile fait toujours défiler au lieu de dessiner (true/false) (nécessite des périphériques séparés)" #: ../src/xo-file.c:1881 msgid " disable touchscreen device when pen is in proximity (true/false) (requires separate pen and touch devices)" msgstr " désactiver l'écran tactile lorsque le stylet est proche de l'écran (true/false) (nécessite des périphériques séparés)" #: ../src/xo-file.c:1884 msgid " name of touchscreen device for touchscreen_as_hand_tool" msgstr " nom du périphérique écran tactile pour touchscreen_as_handtool" #: ../src/xo-file.c:1887 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " les buttons 2 et 3 changent d'outil au lieu de dessiner (utile pour " "certaines tablettes) (true/false)" #: ../src/xo-file.c:1890 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" " charger automatiquement fichier.pdf.xoj au lieu de fichier.pdf (true/false)" #: ../src/xo-file.c:1893 msgid " enable periodic autosaves (true/false)" msgstr " activer les sauvegardes automatiques (true/false)" #: ../src/xo-file.c:1896 msgid " delay for periodic autosaves (in seconds)" msgstr " délai des sauvegardes automatiques périodiques (en secondes)" #: ../src/xo-file.c:1899 msgid " default path for open/save (leave blank for current directory)" msgstr "" " dossier d'ouverture/enregistrement par défaut (laisser vierge pour dossier courant)" #: ../src/xo-file.c:1902 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" " utiliser la sensibilité à la pression pour contrôler la largeur des traits de stylo (true/false)" #: ../src/xo-file.c:1905 msgid " minimum width multiplier" msgstr " multiplicateur de largeur minimum" #: ../src/xo-file.c:1908 msgid " maximum width multiplier" msgstr " multiplicateur de largeur maximum" #: ../src/xo-file.c:1911 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " composants d'interface de haut en bas\n" " valeurs permises: drawarea menu main_toolbar pen_toolbar statusbar" #: ../src/xo-file.c:1914 msgid " interface components in fullscreen mode, from top to bottom" msgstr " composants d'interface en mode plein écran, de haut en bas" #: ../src/xo-file.c:1917 msgid " interface has left-handed scrollbar (true/false)" msgstr " barre de défilement à gauche (true/false)" #: ../src/xo-file.c:1920 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " cacher certains éléments d'interface (true/false)" #: ../src/xo-file.c:1923 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " éléments d'interface à cacher (personnaliser avec précaution!)\n" " voir le fichier source xo-interface.c pour une liste de noms d'éléments" #: ../src/xo-file.c:1926 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " opacité du surligneur (entre 0 et 1, défaut 0.5)\n" " attention: le niveau d'opacité n'est pas enregistré dans les fichiers xoj !" #: ../src/xo-file.c:1929 msgid " auto-save preferences on exit (true/false)" msgstr " sauvegarde automatique des préférences en fin de session (true/false)" #: ../src/xo-file.c:1932 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr " forcer l'affichage de PDF via cairo (true/false)" #: ../src/xo-file.c:1935 msgid " prefer xournal's own PDF code for exporting PDFs (true/false)" msgstr " préférer le code PDF de xournal pour exporter les fichiers PDF (true/false)" #: ../src/xo-file.c:1939 msgid " the default page width, in points (1/72 in)" msgstr " largeur de page par défaut, en points (1/72 pouce)" #: ../src/xo-file.c:1942 msgid " the default page height, in points (1/72 in)" msgstr " hauteur de page par défaut, en points" #: ../src/xo-file.c:1945 msgid " the default paper color" msgstr " couleur de papier par défaut" #: ../src/xo-file.c:1950 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " style de papier par défaut (plain, lined, ruled, ou graph)" #: ../src/xo-file.c:1953 msgid " apply paper style changes to all pages (true/false)" msgstr " appliquer les changements de style de papier à toutes les pages (true/false)" #: ../src/xo-file.c:1956 msgid " preferred unit (cm, in, px, pt)" msgstr " unité préférée (cm, in, px, pt)" #: ../src/xo-file.c:1959 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" " inclure les lignes du papier lors de l'impression ou exportation vers PDF " "(true/false)" #: ../src/xo-file.c:1962 msgid "" " when creating a new page, duplicate a PDF or image background instead of " "using default paper (true/false)" msgstr "" " lors de la création d'une nouvelle page, dupliquer le fond PDF ou image " "au lieu d'utiliser le papier standard (true/false)" #: ../src/xo-file.c:1965 msgid " just-in-time update of page backgrounds (true/false)" msgstr " mise à jour en temps réel des fonds de page (true/false)" #: ../src/xo-file.c:1968 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr " résolution bitmap des fonds PS/PDF produits via ghostscript (dpi)" #: ../src/xo-file.c:1971 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" " résolution bitmap des fonds PDF lors de l'impression via libgnomeprint (dpi)" #: ../src/xo-file.c:1975 msgid "" " selected tool at startup (pen, eraser, highlighter, selectregion, " "selectrect, vertspace, hand, image)" msgstr "" " outil sélectionné au démarrage (pen, eraser, highlighter, selectregion, selectrect, " "vertspace, hand, image)" #: ../src/xo-file.c:1978 msgid " Use the pencil from cursor theme instead of a color dot (true/false)" msgstr " Utiliser le curseur crayon au lieu d'un point de couleur (true/false)" #: ../src/xo-file.c:1981 msgid " default pen color" msgstr " couleur du stylo par défaut" #: ../src/xo-file.c:1986 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " épaisseur du stylo par défaut (fin = 1, moyen = 2, épais = 3)" #: ../src/xo-file.c:1989 msgid " default pen is in ruler mode (true/false)" msgstr " stylo par défaut est en mode règle (true/false)" #: ../src/xo-file.c:1992 msgid " default pen is in shape recognizer mode (true/false)" msgstr " stylo par défaut est en mode détection de formes (true/false)" #: ../src/xo-file.c:1995 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " épaisseur de la gomme par défaut (fin = 1, moyen = 2, épais = 3)" #: ../src/xo-file.c:1998 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "" " mode de la gomme par défaut (standard = 0, blanc = 1, traits entiers = 2)" #: ../src/xo-file.c:2001 msgid " default highlighter color" msgstr " couleur du surligneur par défaut" #: ../src/xo-file.c:2006 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " épaisseur du surligneur par défaut (fin = 1, moyen = 2, épais = 3)" #: ../src/xo-file.c:2009 msgid " default highlighter is in ruler mode (true/false)" msgstr " surligneur par défaut est en mode règle (true/false)" #: ../src/xo-file.c:2012 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " surligneur par défaut est en mode détection de formes (true/false)" #: ../src/xo-file.c:2015 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " outil bouton 2 (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image)" #: ../src/xo-file.c:2018 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " outil bouton 2 lié à l'outil principal (true/false) (remplace tous les " "autres réglages)" #: ../src/xo-file.c:2021 msgid " button 2 brush color (for pen or highlighter only)" msgstr " couleur de brosse bouton 2 (stylo ou surligneur seulement)" #: ../src/xo-file.c:2028 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " épaisseur de brosse bouton 2 (stylo, gomme, surligneur seulement)" #: ../src/xo-file.c:2032 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " bouton 2 en mode règle (true/false) (stylo ou surligneur seulement)" #: ../src/xo-file.c:2036 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " bouton 2 en mode détection de formes (true/false) (stylo ou surligneur " "seulement)" #: ../src/xo-file.c:2040 msgid " button 2 eraser mode (eraser only)" msgstr " options de la gomme bouton 2 (gomme seulement)" #: ../src/xo-file.c:2043 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " outil bouton 3 (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image)" #: ../src/xo-file.c:2046 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " outil bouton 3 lié à l'outil principal (true/false) (remplace tous les " "autres réglages)" #: ../src/xo-file.c:2049 msgid " button 3 brush color (for pen or highlighter only)" msgstr " couleur de brosse bouton 3 (stylo ou surligneur seulement)" #: ../src/xo-file.c:2056 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " épaisseur de brosse bouton 3 (stylo, gomme, surligneur seulement)" #: ../src/xo-file.c:2060 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " bouton 3 en mode règle (true/false) (stylo ou surligneur seulement)" #: ../src/xo-file.c:2064 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " bouton 3 en mode détection de formes (true/false) (stylo ou surligneur " "seulement)" #: ../src/xo-file.c:2068 msgid " button 3 eraser mode (eraser only)" msgstr " options de la gomme bouton 3 (gomme seulement)" #: ../src/xo-file.c:2072 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " épaisseurs des divers stylos (en points, 1 pt = 1/72 pouce)" #: ../src/xo-file.c:2078 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " épaisseurs des diverses gommes (en points, 1 pt = 1/72 pouce)" #: ../src/xo-file.c:2083 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " épaisseurs des divers surligneurs (en points, 1 pt = 1/72 pouce)" #: ../src/xo-file.c:2088 msgid " name of the default font" msgstr " nom de la police par défaut" #: ../src/xo-file.c:2091 msgid " default font size" msgstr " taille de la police par défaut" #: ../src/xo-file.c:2269 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Fichier de configuration de Xournal.\n" " Ce fichier est généré automatiquement lors de l'enregistrement des " "préférences.\n" " La plus grande prudence est recommandée lors de l'édition manuelle de ce " "fichier.\n" #: ../src/xo-misc.c:656 msgid "Generating fontconfig library cache, please be patient..." msgstr "Préparation du cache fontconfig, veuillez patienter..." #: ../src/xo-misc.c:657 msgid "Generating fontconfig cache..." msgstr "Préparation du cache fontconfig..." #: ../src/xo-misc.c:1499 #, c-format msgid " of %d" msgstr " de %d" #: ../src/xo-misc.c:1504 msgid "Background" msgstr "Fond" #: ../src/xo-misc.c:1512 #, c-format msgid "Layer %d" msgstr "Calque %d" #: ../src/xo-misc.c:1637 #, c-format msgid "Xournal - %s" msgstr "" #: ../src/xo-misc.c:1893 #, c-format msgid "Save changes to '%s'?" msgstr "Enregistrer les modifications de '%s' ?" #: ../src/xo-misc.c:1894 msgid "Untitled" msgstr "Sans titre" #: ../src/xo-image.c:109 msgid "Insert Image" msgstr "Insérer une image" #: ../src/xo-image.c:120 msgid "Image files" msgstr "Fichiers images" #: ../src/xo-image.c:145 #, c-format msgid "Error opening image '%s'" msgstr "Erreur lors de l'ouverture de l'image «%s»" xournal-0.4.8/po/zh_CN.po0000664000175000017500000007124212003021421014613 0ustar aurouxauroux# Chinese translations for xournal package. # Copyright (C) 2012 THE xournal'S COPYRIGHT HOLDER # This file is distributed under the same license as the xournal package. # mutse , 2012. # msgid "" msgstr "" "Project-Id-Version: xournal 0.4.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2012-05-22 15:32-0700\n" "PO-Revision-Date: 2012-07-20 11:28+0800\n" "Last-Translator: mutse \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "æ— æ•ˆå‘½ä»¤è¡Œå‚æ•°ã€‚\n" "用法:%s[文件å.xoj]\n" #: ../src/main.c:306 #: ../src/xo-callbacks.c:121 #: ../src/xo-callbacks.c:172 #: ../src/xo-callbacks.c:3167 #, c-format msgid "Error opening file '%s'" msgstr "打开文件 '%s' 错误" #: ../src/xo-interface.c:350 #: ../src/xo-interface.c:2951 #: ../src/xo-misc.c:1425 msgid "Xournal" msgstr "Xournal" #: ../src/xo-interface.c:360 msgid "_File" msgstr "文件(_F)" #: ../src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "PD_F注释" #: ../src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "最近文档(_u)" #: ../src/xo-interface.c:403 msgid "0" msgstr "0" #: ../src/xo-interface.c:407 msgid "1" msgstr "1" #: ../src/xo-interface.c:411 msgid "2" msgstr "2" #: ../src/xo-interface.c:415 msgid "3" msgstr "3" #: ../src/xo-interface.c:419 msgid "4" msgstr "4" #: ../src/xo-interface.c:423 msgid "5" msgstr "5" #: ../src/xo-interface.c:427 msgid "6" msgstr "6" #: ../src/xo-interface.c:431 msgid "7" msgstr "7" #: ../src/xo-interface.c:440 msgid "Print Options" msgstr "打å°é€‰é¡¹" #: ../src/xo-interface.c:455 msgid "_Export to PDF" msgstr "导出PDF(_E)" #: ../src/xo-interface.c:471 msgid "_Edit" msgstr "编辑(_E)" #: ../src/xo-interface.c:516 msgid "_View" msgstr "视图(_V)" #: ../src/xo-interface.c:523 msgid "_Continuous" msgstr "ç»§ç»­(_C)" #: ../src/xo-interface.c:529 msgid "_One Page" msgstr "一页(_O)" #: ../src/xo-interface.c:540 msgid "Full Screen" msgstr "å…¨å±" #: ../src/xo-interface.c:552 msgid "_Zoom" msgstr "缩放(_Z)" #: ../src/xo-interface.c:580 msgid "Page _Width" msgstr "页宽(_W)" #: ../src/xo-interface.c:591 msgid "_Set Zoom" msgstr "设置缩放(_S)" #: ../src/xo-interface.c:600 msgid "_First Page" msgstr "首页(_F)" #: ../src/xo-interface.c:611 msgid "_Previous Page" msgstr "上一页(_P)" #: ../src/xo-interface.c:622 msgid "_Next Page" msgstr "下一页(_N)" #: ../src/xo-interface.c:633 msgid "_Last Page" msgstr "末页(_L)" #: ../src/xo-interface.c:649 msgid "_Show Layer" msgstr "显示层(_S)" #: ../src/xo-interface.c:657 msgid "_Hide Layer" msgstr "éšè—层(_H)" #: ../src/xo-interface.c:665 msgid "_Page" msgstr "页é¢(_P)" #: ../src/xo-interface.c:672 msgid "New Page _Before" msgstr "新建å‰ä¸€é¡µ(_B)" #: ../src/xo-interface.c:676 msgid "New Page _After" msgstr "新建åŽä¸€é¡µ(_A)" #: ../src/xo-interface.c:680 msgid "New Page At _End" msgstr "新建尾页(_E)" #: ../src/xo-interface.c:684 msgid "_Delete Page" msgstr "删除页(_D)" #: ../src/xo-interface.c:693 msgid "_New Layer" msgstr "新建层(_N)" #: ../src/xo-interface.c:697 msgid "Delete La_yer" msgstr "删除层(_y)" #: ../src/xo-interface.c:701 msgid "_Flatten" msgstr "展开(_F)" #: ../src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "页é¢å¤§å°(_z)" #: ../src/xo-interface.c:714 msgid "Paper _Color" msgstr "页é¢é¢œè‰²(_C)" #: ../src/xo-interface.c:721 msgid "_white paper" msgstr "白色纸(_w)" #: ../src/xo-interface.c:727 msgid "_yellow paper" msgstr "黄色纸(_y)" #: ../src/xo-interface.c:733 msgid "_pink paper" msgstr "粉红色纸(_p)" #: ../src/xo-interface.c:739 msgid "_orange paper" msgstr "橙色纸(_o)" #: ../src/xo-interface.c:745 msgid "_blue paper" msgstr "è“色纸(_b)" #: ../src/xo-interface.c:751 msgid "_green paper" msgstr "绿色纸(_g)" #: ../src/xo-interface.c:757 #: ../src/xo-interface.c:1025 msgid "other..." msgstr "其它..." #: ../src/xo-interface.c:761 #: ../src/xo-interface.c:797 #: ../src/xo-interface.c:1029 #: ../src/xo-interface.c:1270 #: ../src/xo-interface.c:1346 msgid "NA" msgstr "ä¸é€‚用" #: ../src/xo-interface.c:766 msgid "Paper _Style" msgstr "页é¢é£Žæ ¼(_S)" #: ../src/xo-interface.c:773 msgid "_plain" msgstr "简易(_p)" #: ../src/xo-interface.c:779 msgid "_lined" msgstr "æ¡çº¹(_l)" #: ../src/xo-interface.c:785 msgid "_ruled" msgstr "画线(_r)" #: ../src/xo-interface.c:791 msgid "_graph" msgstr "图形(_g)" #: ../src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "应用所有页(_T)" #: ../src/xo-interface.c:811 msgid "_Load Background" msgstr "加载背景(_L)" #: ../src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "背景截图(_h)" #: ../src/xo-interface.c:828 msgid "Default _Paper" msgstr "默认页(_P)" #: ../src/xo-interface.c:832 msgid "Set As De_fault" msgstr "默认设置(_f)" #: ../src/xo-interface.c:836 msgid "_Tools" msgstr "工具(_T)" #: ../src/xo-interface.c:843 #: ../src/xo-interface.c:1206 #: ../src/xo-interface.c:1282 msgid "_Pen" msgstr "笔(_P)" #: ../src/xo-interface.c:852 #: ../src/xo-interface.c:1212 #: ../src/xo-interface.c:1288 msgid "_Eraser" msgstr "橡皮擦(_E)" #: ../src/xo-interface.c:861 #: ../src/xo-interface.c:1218 #: ../src/xo-interface.c:1294 msgid "_Highlighter" msgstr "高亮(_H)" #: ../src/xo-interface.c:870 #: ../src/xo-interface.c:1224 #: ../src/xo-interface.c:1300 msgid "_Text" msgstr "文本(_T)" #: ../src/xo-interface.c:883 #: ../src/xo-interface.c:1243 #: ../src/xo-interface.c:1617 msgid "_Image" msgstr "图åƒ" #: ../src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "图形识别(_S)" #: ../src/xo-interface.c:891 msgid "Ru_ler" msgstr "规则(_l)" #: ../src/xo-interface.c:903 #: ../src/xo-interface.c:1230 #: ../src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "选择区域(_g)" #: ../src/xo-interface.c:912 #: ../src/xo-interface.c:1236 #: ../src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "选择矩形(_R)" #: ../src/xo-interface.c:921 #: ../src/xo-interface.c:1242 #: ../src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "垂直间è·(_V)" #: ../src/xo-interface.c:930 #: ../src/xo-interface.c:1248 #: ../src/xo-interface.c:1324 msgid "H_and Tool" msgstr "手形工具(_a)" #: ../src/xo-interface.c:943 msgid "_Color" msgstr "颜色(_C)" #: ../src/xo-interface.c:954 msgid "blac_k" msgstr "黑色(_k)" #: ../src/xo-interface.c:960 msgid "_blue" msgstr "è“色(_b)" #: ../src/xo-interface.c:966 msgid "_red" msgstr "红色(_r)" #: ../src/xo-interface.c:972 msgid "_green" msgstr "绿色(_g)" #: ../src/xo-interface.c:978 msgid "gr_ay" msgstr "ç°è‰²(_a)" #: ../src/xo-interface.c:989 msgid "light bl_ue" msgstr "æµ…è“(_u)" #: ../src/xo-interface.c:995 msgid "light gr_een" msgstr "浅绿(_e)" #: ../src/xo-interface.c:1001 msgid "_magenta" msgstr "红紫色(_m)" #: ../src/xo-interface.c:1007 msgid "_orange" msgstr "橙色(_o)" #: ../src/xo-interface.c:1013 msgid "_yellow" msgstr "黄色(_y)" #: ../src/xo-interface.c:1019 msgid "_white" msgstr "白色(_w)" #: ../src/xo-interface.c:1034 msgid "Pen _Options" msgstr "笔选项(_O)" #: ../src/xo-interface.c:1041 msgid "_very fine" msgstr "很细å°(_v)" #: ../src/xo-interface.c:1047 #: ../src/xo-interface.c:1078 #: ../src/xo-interface.c:1126 msgid "_fine" msgstr "细å°(_f)" #: ../src/xo-interface.c:1053 #: ../src/xo-interface.c:1084 #: ../src/xo-interface.c:1132 msgid "_medium" msgstr "中等(_m)" #: ../src/xo-interface.c:1059 #: ../src/xo-interface.c:1090 #: ../src/xo-interface.c:1138 msgid "_thick" msgstr "粗线(_t)" #: ../src/xo-interface.c:1065 msgid "ver_y thick" msgstr "很粗(_y)" #: ../src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "橡皮选项(_n)" #: ../src/xo-interface.c:1101 msgid "_standard" msgstr "标准(_s)" #: ../src/xo-interface.c:1107 msgid "_whiteout" msgstr "乳白(_w)" #: ../src/xo-interface.c:1113 msgid "_delete strokes" msgstr "删除笔划(_d)" #: ../src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "高亮选项(_i)" #: ../src/xo-interface.c:1144 msgid "Text _Font..." msgstr "文本字体...(_F)" #: ../src/xo-interface.c:1160 msgid "_Default Pen" msgstr "默认笔(_D)" #: ../src/xo-interface.c:1164 msgid "Default Eraser" msgstr "默认橡皮擦" #: ../src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "默认高亮" #: ../src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "默认文本" #: ../src/xo-interface.c:1176 msgid "Set As Default" msgstr "默认设置" #: ../src/xo-interface.c:1180 msgid "_Options" msgstr "选项" #: ../src/xo-interface.c:1187 msgid "Use _XInput" msgstr "使用_XInput" #: ../src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "橡皮擦技巧(_E)" #: ../src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "åŽ‹åŠ›æ•æ„Ÿæ€§(_P)" #: ../src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "按钮_2映射" #: ../src/xo-interface.c:1258 #: ../src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "连接主刷(_L)" #: ../src/xo-interface.c:1264 #: ../src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "å¤åˆ¶å½“å‰åˆ·(_C)" #: ../src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "按钮_3映射" #: ../src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "按钮开关éšå°„" #: ../src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "æ¸è¿›çš„背景(_P)" #: ../src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "打å°é¡µé¢è§„则(_R)" #: ../src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "自动加载pdf.xoj" #: ../src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "左侧滚动æ¡" #: ../src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "缩短èœå•(_M)" #: ../src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "自动ä¿å­˜é¦–选项(_u)" #: ../src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "ä¿å­˜é¦–选项(_S)" #: ../src/xo-interface.c:1393 msgid "_Help" msgstr "帮助(_H)" #: ../src/xo-interface.c:1404 msgid "_About" msgstr "关于(_A)" #: ../src/xo-interface.c:1417 msgid "Save" msgstr "ä¿å­˜" #: ../src/xo-interface.c:1422 msgid "New" msgstr "新建" #: ../src/xo-interface.c:1427 msgid "Open" msgstr "打开" #: ../src/xo-interface.c:1440 msgid "Cut" msgstr "剪切" #: ../src/xo-interface.c:1445 msgid "Copy" msgstr "å¤åˆ¶" #: ../src/xo-interface.c:1450 msgid "Paste" msgstr "粘贴" #: ../src/xo-interface.c:1463 msgid "Undo" msgstr "å–æ¶ˆ" #: ../src/xo-interface.c:1468 msgid "Redo" msgstr "é‡å¤" #: ../src/xo-interface.c:1481 msgid "First Page" msgstr "首页" #: ../src/xo-interface.c:1486 msgid "Previous Page" msgstr "上一页" #: ../src/xo-interface.c:1491 msgid "Next Page" msgstr "下一页" #: ../src/xo-interface.c:1496 msgid "Last Page" msgstr "末页" #: ../src/xo-interface.c:1509 msgid "Zoom Out" msgstr "缩å°" #: ../src/xo-interface.c:1514 #: ../src/xo-interface.c:3045 msgid "Page Width" msgstr "页宽" #: ../src/xo-interface.c:1520 msgid "Zoom In" msgstr "放大" #: ../src/xo-interface.c:1525 msgid "Normal Size" msgstr "一般尺寸" #: ../src/xo-interface.c:1530 #: ../src/xo-interface.c:3004 msgid "Set Zoom" msgstr "缩放设置" #: ../src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "å…¨å±åˆ‡æ¢" #: ../src/xo-interface.c:1548 msgid "Pencil" msgstr "铅笔" #: ../src/xo-interface.c:1554 msgid "Pen" msgstr "笔" #: ../src/xo-interface.c:1559 #: ../src/xo-interface.c:1565 msgid "Eraser" msgstr "橡皮擦" #: ../src/xo-interface.c:1570 #: ../src/xo-interface.c:1576 msgid "Highlighter" msgstr "高亮" #: ../src/xo-interface.c:1581 #: ../src/xo-interface.c:1587 msgid "Text" msgstr "文本" #: ../src/xo-interface.c:1592 #: ../src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "图形识别" #: ../src/xo-interface.c:1601 #: ../src/xo-interface.c:1607 msgid "Ruler" msgstr "å°ºå­" #: ../src/xo-interface.c:1618 #: ../src/xo-interface.c:1624 msgid "Select Region" msgstr "选择区域" #: ../src/xo-interface.c:1629 #: ../src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "选择矩形" #: ../src/xo-interface.c:1640 #: ../src/xo-interface.c:1646 msgid "Vertical Space" msgstr "垂直间è·" #: ../src/xo-interface.c:1651 msgid "Hand Tool" msgstr "手形工具" #: ../src/xo-interface.c:1670 #: ../src/xo-interface.c:1674 msgid "Default" msgstr "默认" #: ../src/xo-interface.c:1678 #: ../src/xo-interface.c:1681 msgid "Default Pen" msgstr "默认笔" #: ../src/xo-interface.c:1692 #: ../src/xo-interface.c:1700 msgid "Fine" msgstr "细å°" #: ../src/xo-interface.c:1705 #: ../src/xo-interface.c:1713 msgid "Medium" msgstr "中等" #: ../src/xo-interface.c:1718 #: ../src/xo-interface.c:1726 msgid "Thick" msgstr "ç²—çš„" #: ../src/xo-interface.c:1745 #: ../src/xo-interface.c:1752 msgid "Black" msgstr "黑色" #: ../src/xo-interface.c:1757 #: ../src/xo-interface.c:1764 msgid "Blue" msgstr "è“色" #: ../src/xo-interface.c:1769 #: ../src/xo-interface.c:1776 msgid "Red" msgstr "红色" #: ../src/xo-interface.c:1781 #: ../src/xo-interface.c:1788 msgid "Green" msgstr "绿色" #: ../src/xo-interface.c:1793 #: ../src/xo-interface.c:1800 msgid "Gray" msgstr "ç°è‰²" #: ../src/xo-interface.c:1805 #: ../src/xo-interface.c:1812 msgid "Light Blue" msgstr "æµ…è“" #: ../src/xo-interface.c:1817 #: ../src/xo-interface.c:1824 msgid "Light Green" msgstr "浅绿" #: ../src/xo-interface.c:1829 #: ../src/xo-interface.c:1836 msgid "Magenta" msgstr "红紫色" #: ../src/xo-interface.c:1841 #: ../src/xo-interface.c:1848 msgid "Orange" msgstr "橙色" #: ../src/xo-interface.c:1853 #: ../src/xo-interface.c:1860 msgid "Yellow" msgstr "黄色" #: ../src/xo-interface.c:1865 #: ../src/xo-interface.c:1872 msgid "White" msgstr "白色" #: ../src/xo-interface.c:1919 msgid " Page " msgstr "页ç " #: ../src/xo-interface.c:1927 msgid "Set page number" msgstr "设置页ç å·" #: ../src/xo-interface.c:1931 msgid " of n" msgstr "of n" #: ../src/xo-interface.c:1939 msgid " Layer: " msgstr " 层: " #: ../src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "设置页é¢å¤§å°" #: ../src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "标准页é¢å¤§å°:" #: ../src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: ../src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4(风景)" #: ../src/xo-interface.c:2848 msgid "US Letter" msgstr "US ä¿¡ä»¶" #: ../src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "US ä¿¡ä»¶(风景)" #: ../src/xo-interface.c:2850 msgid "Custom" msgstr "自定义" #: ../src/xo-interface.c:2856 msgid "Width:" msgstr "宽:" #: ../src/xo-interface.c:2865 msgid "Height:" msgstr "高:" #: ../src/xo-interface.c:2877 msgid "cm" msgstr "厘米" #: ../src/xo-interface.c:2878 msgid "in" msgstr "英寸" #: ../src/xo-interface.c:2879 msgid "pixels" msgstr "åƒç´ " #: ../src/xo-interface.c:2880 msgid "points" msgstr "点" #: ../src/xo-interface.c:2940 msgid "About Xournal" msgstr "关于 Xournal" #: ../src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " #: ../src/xo-interface.c:3020 msgid "Zoom: " msgstr "缩放" #: ../src/xo-interface.c:3033 msgid "%" msgstr "%" #: ../src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "一般大å°(100%)" #: ../src/xo-interface.c:3052 msgid "Page Height" msgstr "页é¢é«˜åº¦" #. user aborted on save confirmation #: ../src/xo-callbacks.c:67 #: ../src/xo-file.c:691 msgid "Open PDF" msgstr "打开PDF" #: ../src/xo-callbacks.c:75 #: ../src/xo-callbacks.c:148 #: ../src/xo-callbacks.c:247 #: ../src/xo-callbacks.c:401 #: ../src/xo-callbacks.c:1460 #: ../src/xo-file.c:699 msgid "All files" msgstr "所有文件" #: ../src/xo-callbacks.c:78 #: ../src/xo-callbacks.c:404 #: ../src/xo-file.c:702 msgid "PDF files" msgstr "PDF文件" #: ../src/xo-callbacks.c:86 #: ../src/xo-callbacks.c:1483 msgid "Attach file to the journal" msgstr "在日志上附加文件" #. user aborted on save confirmation #: ../src/xo-callbacks.c:140 msgid "Open Journal" msgstr "打开日志" #: ../src/xo-callbacks.c:151 #: ../src/xo-callbacks.c:250 msgid "Xournal files" msgstr "Xournal文件" #: ../src/xo-callbacks.c:200 #: ../src/xo-callbacks.c:295 #, c-format msgid "Error saving file '%s'" msgstr "ä¿å­˜æ–‡ä»¶ '%s' 错误" #: ../src/xo-callbacks.c:219 msgid "Save Journal" msgstr "ä¿å­˜æ—¥å¿—" #: ../src/xo-callbacks.c:276 #: ../src/xo-callbacks.c:422 #, c-format msgid "Should the file %s be overwritten?" msgstr "文件 %s 是å¦è¢«è¦†ç›–?" #: ../src/xo-callbacks.c:375 msgid "Export to PDF" msgstr "导出PDF" #: ../src/xo-callbacks.c:435 #, c-format msgid "Error creating file '%s'" msgstr "新建文件 '%s' 错误" #: ../src/xo-callbacks.c:1387 msgid "Pick a Paper Color" msgstr "挑选页é¢è‰²å½©" #: ../src/xo-callbacks.c:1452 msgid "Open Background" msgstr "打开背景" #: ../src/xo-callbacks.c:1468 msgid "Bitmap files" msgstr "ä½å›¾æ–‡ä»¶" #: ../src/xo-callbacks.c:1476 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDF 文件(作ä½å›¾)" #: ../src/xo-callbacks.c:1506 #, c-format msgid "Error opening background '%s'" msgstr "打开背景 '%s' 错误" #: ../src/xo-callbacks.c:2052 msgid "Select Font" msgstr "选择字体" #: ../src/xo-callbacks.c:2452 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "背景层ä¸å…许绘图。\n" "请切æ¢è‡³ç¬¬1层。" #: ../src/xo-support.c:90 #: ../src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "无法找到åƒç´ æ˜ å°„文件: %s" #: ../src/xo-file.c:140 #: ../src/xo-file.c:172 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "无法写入背景 '%s'。无论如何继续。" #: ../src/xo-file.c:278 #, c-format msgid "Invalid file contents" msgstr "无效文件内容" #: ../src/xo-file.c:428 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "无法打开背景 '%s',并设置背景为白色。" #: ../src/xo-file.c:686 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "无法打开背景 '%s'。\n" "请选择其它文件" #: ../src/xo-file.c:832 #, c-format msgid "Could not open background '%s'." msgstr "无法打开背景文件 '%s'" #: ../src/xo-file.c:1081 msgid "Unable to render one or more PDF pages." msgstr "无法给一页或多页PDFç€è‰²" #: ../src/xo-file.c:1488 msgid " the display resolution, in pixels per inch" msgstr "显示器分辨率,åƒç´ ç‚¹/英寸" #: ../src/xo-file.c:1491 msgid " the initial zoom level, in percent" msgstr "åˆå§‹åŒ–当å‰ç¼©æ”¾çº§åˆ«" #: ../src/xo-file.c:1494 msgid " maximize the window at startup (true/false)" msgstr "ä»¥çª—å£æœ€å¤§åŒ–å¯åЍ(是/å¦)" #: ../src/xo-file.c:1497 msgid " start in full screen mode (true/false)" msgstr "以免屿¨¡å¼å¯åЍ(是/å¦)" #: ../src/xo-file.c:1500 msgid " the window width in pixels (when not maximized)" msgstr "窗å£å®½åº¦åƒç´ (éžæœ€å¤§åŒ–)" #: ../src/xo-file.c:1503 msgid " the window height in pixels" msgstr "窗å£é«˜åº¦åƒç´ " #: ../src/xo-file.c:1506 msgid " scrollbar step increment (in pixels)" msgstr "滚动æ¡å¢žé‡(åƒç´ )" #: ../src/xo-file.c:1509 msgid " the step increment in the zoom dialog box" msgstr "ç¼©æ”¾å¯¹è¯æ¡†å¢žé‡" #: ../src/xo-file.c:1512 msgid " the multiplicative factor for zoom in/out" msgstr "放大/缩å°å€æ•°å› å­" #: ../src/xo-file.c:1515 msgid " document view (true = continuous, false = single page)" msgstr "文档视图(true=连续,false=å•页)" #: ../src/xo-file.c:1518 msgid " use XInput extensions (true/false)" msgstr "使用XInput扩展(是/å¦)" #: ../src/xo-file.c:1521 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr "丢弃XInput模å¼ä¸‹æ ¸å¿ƒæŒ‡é’ˆäº‹ä»¶(是/å¦)" #: ../src/xo-file.c:1524 msgid " always map eraser tip to eraser (true/false)" msgstr "总是将橡皮擦æç¤ºæ˜ å°„到橡皮擦(是/å¦)" #: ../src/xo-file.c:1527 msgid " buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)" msgstr "按钮2å’Œ3åˆ‡æ¢æ˜ å°„替代绘图(对于一些笔记是有用的)(是/å¦)" #: ../src/xo-file.c:1530 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "自动加载 文件å.pdf.xoj 替代 文件å.pdf (是/å¦)" #: ../src/xo-file.c:1533 msgid " default path for open/save (leave blank for current directory)" msgstr "打开/ä¿å­˜é»˜è®¤è·¯å¾„(当å‰ç›®å½•ä¿ç•™ç©ºç™½)" #: ../src/xo-file.c:1536 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "ä½¿ç”¨åŽ‹åŠ›æ•æ„Ÿåº¦æ¥æŽ§åˆ¶ç¬”划宽度(是/å¦)" #: ../src/xo-file.c:1539 msgid " minimum width multiplier" msgstr "最å°å®½åº¦å€å¢ž" #: ../src/xo-file.c:1542 msgid " maximum width multiplier" msgstr "最大宽度å€å¢ž" #: ../src/xo-file.c:1545 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" "从上至下接å£ç»„ä»¶\n" "有效值:drawarea menu main_toolbar pen_toolbar statusbar" #: ../src/xo-file.c:1548 msgid " interface components in fullscreen mode, from top to bottom" msgstr "免屿¨¡å¼ä¸‹ä»Žä¸Šè‡³ä¸‹æŽ¥å£ç»„ä»¶" #: ../src/xo-file.c:1551 msgid " interface has left-handed scrollbar (true/false)" msgstr "左侧有滚动æ¡çš„æŽ¥å£(是/å¦)" #: ../src/xo-file.c:1554 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "éšè—一些ä¸éœ€è¦çš„èœå•项或工具æ¡é¡¹(是/å¦)" #: ../src/xo-file.c:1557 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" "éšè—接å£é¡¹(自定义自己的风险ï¼)\n" "查看æºç æ–‡ä»¶xo-interface.c 找项目å列表" #: ../src/xo-file.c:1560 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" "高亮ä¸é€æ˜Žåº¦(0 修改 1,默认0.5)\n" "警告:ä¸é€æ˜Žåº¦çº§åˆ«ä¸ä¼šä¿å­˜åˆ°xoj文件中ï¼" #: ../src/xo-file.c:1563 msgid " auto-save preferences on exit (true/false)" msgstr "退出自动ä¿å­˜é¦–选项(是/å¦)" #: ../src/xo-file.c:1566 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr "强制通过cairo进行PDFç€è‰²(缓慢而细致)(是/å¦)" #: ../src/xo-file.c:1570 msgid " the default page width, in points (1/72 in)" msgstr "默认页é¢å®½åº¦ï¼Œç”¨ç‚¹è¡¨ç¤º(1/72 in)" #: ../src/xo-file.c:1573 msgid " the default page height, in points (1/72 in)" msgstr "默认页é¢é«˜åº¦ï¼Œç”¨ç‚¹è¡¨ç¤º(1/72 in)" #: ../src/xo-file.c:1576 msgid " the default paper color" msgstr "默认页é¢é¢œè‰²" #: ../src/xo-file.c:1581 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "默认页é¢é£Žæ ¼(ç®€æ˜“ã€æ¡çº¹ã€åˆ’线或图形)" #: ../src/xo-file.c:1584 msgid " apply paper style changes to all pages (true/false)" msgstr "将页é¢é£Žæ ¼æ›´æ”¹åº”用到所有页(是/å¦)" #: ../src/xo-file.c:1587 msgid " preferred unit (cm, in, px, pt)" msgstr "首选å•ä½(cm, in, px, pt)" #: ../src/xo-file.c:1590 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "æ‰“å°æˆ–导出PDF文件时包å«é¡µé¢è§„则(是/å¦)" #: ../src/xo-file.c:1593 msgid " just-in-time update of page backgrounds (true/false)" msgstr "åŠæ—¶æ›´æ–°é¡µé¢èƒŒæ™¯(是/å¦)" #: ../src/xo-file.c:1596 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "PS/PDF背景ä½å›¾åˆ†è¾¨çއç€è‰²ä½¿ç”¨ghostscript脚本(dpi)" #: ../src/xo-file.c:1599 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "使用libgnomeprintæ‰“å°æ—¶PDF背景ä½å›¾åˆ†è¾¨çއ(dpi)" #: ../src/xo-file.c:1603 msgid " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand)" msgstr "å¯åŠ¨æ—¶å·²é€‰å·¥å…·(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)" #: ../src/xo-file.c:1606 msgid " default pen color" msgstr "默认笔颜色" #: ../src/xo-file.c:1611 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr "默认笔厚度(细å°=1,中等=2,粗的=3)" #: ../src/xo-file.c:1614 msgid " default pen is in ruler mode (true/false)" msgstr "标尺模å¼ä¸‹é»˜è®¤ç¬”(是/å¦)" #: ../src/xo-file.c:1617 msgid " default pen is in shape recognizer mode (true/false)" msgstr "图形识别模å¼ä¸‹é»˜è®¤ç¬”(是/å¦)" #: ../src/xo-file.c:1620 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr "默认橡皮厚度(细å°=1,中等=2,粗的=3)" #: ../src/xo-file.c:1623 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "默认橡皮模å¼(标准=0,乳白=1,笔划=2)" #: ../src/xo-file.c:1626 msgid " default highlighter color" msgstr "默认高亮颜色" #: ../src/xo-file.c:1631 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr "默认高亮厚度(细å°=1,中等=2,粗的=3)" #: ../src/xo-file.c:1634 msgid " default highlighter is in ruler mode (true/false)" msgstr "标尺模å¼ä¸‹é»˜è®¤é«˜äº®(是/å¦)" #: ../src/xo-file.c:1637 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "图形识别模å¼ä¸‹é»˜è®¤é«˜äº®(是/å¦)" #: ../src/xo-file.c:1640 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "按钮2 工具(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)" #: ../src/xo-file.c:1643 msgid " button 2 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "将按钮2刷å­è¿žæŽ¥è‡³ä¸»åˆ·(是/å¦)(é‡è½½æ‰€æœ‰è®¾ç½®)" #: ../src/xo-file.c:1646 msgid " button 2 brush color (for pen or highlighter only)" msgstr "按钮2刷å­è‰²å½©(仅针对笔或高亮)" #: ../src/xo-file.c:1653 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "按钮2刷å­åŽšåº¦(ä»…é’ˆå¯¹ç¬”ã€æ©¡çš®æˆ–高亮)" #: ../src/xo-file.c:1657 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "标尺模å¼ä¸‹æŒ‰é’®2(是/å¦)(仅针对笔或高亮)" #: ../src/xo-file.c:1661 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "图形识别模å¼ä¸‹æŒ‰é’®2(是/å¦)(仅针对笔或高亮)" #: ../src/xo-file.c:1665 msgid " button 2 eraser mode (eraser only)" msgstr "按钮2擦除模å¼(仅针对橡皮)" #: ../src/xo-file.c:1668 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "按钮3工具(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)" #: ../src/xo-file.c:1671 msgid " button 3 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "将按钮3刷å­è¿žæŽ¥åˆ°ä¸»åˆ·(是/å¦)(é‡è½½æ‰€æœ‰è®¾ç½®)" #: ../src/xo-file.c:1674 msgid " button 3 brush color (for pen or highlighter only)" msgstr "按钮3刷å­è‰²å½©(仅针对笔或高亮)" #: ../src/xo-file.c:1681 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "按钮3刷å­åŽšåº¦(ä»…é’ˆå¯¹ç¬”ã€æ©¡çš®æˆ–高亮)" #: ../src/xo-file.c:1685 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "标尺模å¼ä¸‹æŒ‰é’®3(仅针对笔或高亮)" #: ../src/xo-file.c:1689 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "图形识别模å¼ä¸‹æŒ‰é’®3(是/å¦)(仅针对笔或高亮)" #: ../src/xo-file.c:1693 msgid " button 3 eraser mode (eraser only)" msgstr "按钮3擦除模å¼(仅擦除)" #: ../src/xo-file.c:1697 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr "ä¸åŒç¬”的厚度(用点表示,1pt = 1/72 in)" #: ../src/xo-file.c:1703 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr "ä¸åŒæ©¡çš®çš„厚度(用点表示,1pt = 1/72 in)" #: ../src/xo-file.c:1708 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr "ä¸åŒé«˜äº®çš„厚度(用点表示,1pt = 1/72 in)" #: ../src/xo-file.c:1713 msgid " name of the default font" msgstr "默认字体å" #: ../src/xo-file.c:1716 msgid " default font size" msgstr "默认字体大å°" #: ../src/xo-file.c:1894 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" "Xournal é…置文件。\n" "在ä¿å­˜é¦–选项中设置åŽè‡ªåŠ¨ç”Ÿæˆæ­¤é…置文件。\n" #: ../src/xo-misc.c:1294 #, c-format msgid " of %d" msgstr "of %d" #: ../src/xo-misc.c:1299 msgid "Background" msgstr "背景" #: ../src/xo-misc.c:1307 #, c-format msgid "Layer %d" msgstr "第 %d 层" #: ../src/xo-misc.c:1431 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: ../src/xo-misc.c:1683 #, c-format msgid "Save changes to '%s'?" msgstr "更改ä¿å­˜ä¸º '%s'" #: ../src/xo-misc.c:1684 msgid "Untitled" msgstr "未使用" xournal-0.4.8/po/zh_TW.gmo0000664000175000017500000004732312112734607015036 0ustar aurouxaurouxÞ•ô{̸ ¹ÄŠÍ-X4†+»IçL1I~3ÈSü<P#?±FñL83…S¹< #J?nF®LõZB>;Ü+2F=y@·?ø8*K5v8¬8å7 6V ] Dë h0!<™!1Ö!o"5x",®"Û"õ"#)#0# 6#%W#Q}#'Ï#-÷#,%$R$8k$+¤$#Ð$*ô$*%J%0g%=˜%BÖ%:&#T&Bx&»&½&¿&Á&Ã&Å&Ç&É&Ë&Í&Ð&ß& ö& ' ''0'K' \'g' ~'‹'‘'–'¨'º'Ò'×'4÷'<,(3i((»(Â(Æ(Î(Ý( ñ( ý( ) )F()o)v)†)Ÿ)½)Õ) ì)ú) ÿ) *** !* ,*6* >*J*:_*š* °*º*Ã* Ù* ä*ð*ø*ÿ*+++'+ 8+ B+N+a+f+ v+ƒ+Œ+ “++ ·+ Ã+ Î+ Ú+ æ+ ó+,, ,,, 1, ?,M,a,s,w,|,ƒ,‰, Ž,›, ±,½,Ì, Ý,ë,ý, --+-4-D-U-"d-‡-- ¢-°-¶- È-Ò-'è-.. .*.9.?.\F.£. «. ¸.Æ.Í.Õ.Þ.å.ì. ó.ÿ. / #/0/6/ >/J/Y/ _/k/t/ z/ †/“/ œ/§/¾/ Ï/ Ú/ å/ï/ø/ý/0"0;0 M0W0 i0u0{0‚0’0˜0ž0 ¤0°0À0Æ0Í0 Ô0á0è0ñ0ù0 1 11"1'1 .181 ?1J1 Q1 ^1h1 p1~1…1ˆ1Ž1 ‘1 1ª1³1º1 Á1~Í1 L3 Y3zd32ß324,E4?r4B²4Cõ4795Sq5@Å5+6A26Gt6d¼67!7SY7@­7+î7A8G\8d¤8V 9;`92œ9Ï9æ9,:5-:5c:D™:Þ:&ò:/;/I;7y;7±;;é;d%<7Š<dÂ<1'=/Y=v‰=#>)$>N>h>‚> ™> ¤>4®>(ã>a ?)n?3˜?3Ì?@7@.L@({@#¤@%È@î@1 AD=AG‚AAÊA% B52BhBjBlBnBpBrBtBvBxBzB }B‰B¦B µB ÂBÎBèBþBCC1CACHCOC`CqC„C‹C6©C5àC8DODmDtD{D‚D’D ¥D²DÃDÔD<åD "E,E#@E#dE#ˆE#¬E ÐEÞEâE éEóEúE F F F #F0F5GF}F“F šF¤F½FÄFËFÒF ÖFãFêFGG/G 6GCGWG ^G kG xGƒG ŠG•G µG ÂGÏGàGñGHHH!H2H9HLH SH`HwHŽH•H œH§H®H µHÂH ÝHêH ûH II&I:IJI ]I jIwI‡I›I¸IÎIÕIéIíI ýIJ&JAJ HJRJ aJnJ uJYJÙJ áJîJýJK K K K 'K2KCK]KnK K ŠK˜K¬K ¾K ÉK ÔK âKíKþK L L%L?L PL ^LiL zL …LL ¤L¯LÃLÚLëLÿL M M&M 7M BM MMXMiMzM ‚M M˜M ©M ´M¿M ÇMÒMãM ôM ÿM N N N (N 3N>N ON ZNeN vNN ˆN“N šN ¥N °NºNÁN ÈNå%Aúx×À#&8ë ¤ìVÿ ³ûÙIka.cJKL NO,B«’`»ø!b”¦>ÌTÈp~§ç2‡Å‰æ(žXñE'6èGM|wµP£Qd›Y°­g‚Á"z[Ðþô÷¿Z)©?—¸ºÑ¥–ïÒˆ_·í\4;€WÉ‘áDÞŒH®jÎ t¶Ý™¾CŽ 5=߆ä…ðüÆ„œl꯴¢¼0ƒuõ]ÛË3UÏf:eÕ±hÍö$ Sr}¡âÖ¨7 mÚ ^ʽÜéòqnîÔ/*o“ùÓFý<¹Ÿ+²ó-Rãv9ÄàÇi@ªsˬ1 { šy ؘŠ•  Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Journal_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.5 Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: 2011-05-24 12:23+0800 Last-Translator: Wei-Lun Chao Language-Team: Chinese (traditional) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; 圖層: é é¢ Xournal 組態檔案。 儲存å好設定時就會自動產生這個檔案。 手動編輯這個檔案時請å°å¿ƒã€‚ 自動映射橡皮擦尖端到橡皮擦 (真/å‡) 套用紙張樣å¼è®Šæ›´åˆ°æ‰€æœ‰é é¢ (真/å‡) 離開時自動儲存å好設定 (真/å‡) 自動載入 filename.pdf.xoj 以代替 filename.pdf (真/å‡) 以 libgnomeprint åˆ—å° PDF 背景時的點陣圖解æžåº¦ (dpi) 使用 ghostscript 潤算 PS/PDF 背景的點陣圖解æžåº¦ (dpi) 按鈕 2 筆刷é¡è‰² (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示) 按鈕 2 筆刷éˆçµåˆ°ä¸»è¦ç­†åˆ· (真/å‡) (強制變更所有其他設定值) 按鈕 2 筆刷粗細 (åªé™ç•«ç­†ã€æ©¡ç𮿓¦æˆ–å白顯示) 按鈕 2 æ©¡çš®æ“¦æ¨¡å¼ (åªé™æ©¡ç𮿓¦) 按鈕 2 ç›´å°ºæ¨¡å¼ (真/å‡) (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示) 按鈕 2 å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) (åªé™ç•«ç­†æˆ–å白顯示) 按鈕 2 工具 (ç•«ç­†ã€æ©¡ç𮿓¦ã€åç™½é¡¯ç¤ºã€æ–‡å­—ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•) 按鈕 3 筆刷é¡è‰² (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示) 按鈕 3 筆刷éˆçµåˆ°ä¸»è¦ç­†åˆ· (真/å‡) (強制變更所有其他設定值) 按鈕 3 筆刷粗細 (åªé™ç•«ç­†ã€æ©¡ç𮿓¦æˆ–å白顯示) 按鈕 3 æ©¡çš®æ“¦æ¨¡å¼ (åªé™æ©¡ç𮿓¦) 按鈕 3 ç›´å°ºæ¨¡å¼ (真/å‡) (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示) 按鈕 3 å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) (åªé™ç•«ç­†æˆ–å白顯示) 按鈕 3 工具 (ç•«ç­†ã€æ©¡ç𮿓¦ã€åç™½é¡¯ç¤ºã€æ–‡å­—ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•) 按鈕 2 å’Œ 3 åˆ‡æ›æ˜ å°„以代替繪圖 (å°æ–¼æŸäº›å¹³æ¿é›»è…¦æœ‰æ•ˆ) (真/å‡) é è¨­æ©¡ç𮿓¦æ¨¡å¼ (標準 = 0, 白化 = 1, 筆畫 = 2) é è¨­æ©¡ç𮿓¦ç²—ç´° (ç´° = 1, 中 = 2, ç²— = 3) é è¨­çš„å­—åž‹å¤§å° é è¨­å白顯示é¡è‰² é è¨­åç™½é¡¯ç¤ºæ–¼ç›´å°ºæ¨¡å¼ (真/å‡) é è¨­åç™½é¡¯ç¤ºæ–¼å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) é è¨­å白顯示粗細 (ç´° = 1, 中 = 2, ç²— = 3) é è¨­ç”¨æ–¼é–‹å•Ÿ/儲存的路徑 (ä¿ç•™ç©ºç™½è¡¨ç¤ºç›®å‰ç›®éŒ„) é è¨­ç•«ç­†é¡è‰² é è¨­ç•«ç­†æ–¼ç›´å°ºæ¨¡å¼ (真/å‡) é è¨­ç•«ç­†æ–¼å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) é è¨­ç•«ç­†ç²—ç´° (ç´° = 1, 中 = 2, ç²— = 3) 在 XInput 模å¼ä¸­æ¨æ£„核心指標事件 (真/å‡) 文件檢視 (真 = 連續é é¢ï¼Œå‡ = 單一é é¢) éš±è—æŸäº›ä¸æƒ³è¦çš„é¸å–®æˆ–工具列項目 (真/å‡) å白顯示æ¿åº¦ (0 到 1,é è¨­ç‚º 0.5) 警告:æ¿åº¦ç­‰ç´šæœªè¢«å„²å­˜åœ¨ xoj æª”æ¡ˆä¸­ï¼ åˆ—å°æˆ–匯出至 PDF 時包å«ç´™å¼µåˆ»åº¦ (真/å‡) 介é¢çµ„æˆç”±ä¸Šåˆ°ä¸‹ æœ‰æ•ˆå€¼ç‚ºï¼šç¹ªåœ–å€ é¸å–® 主è¦å·¥å…·åˆ— 畫筆工具列 狀態列 å…¨èž¢å¹•æ¨¡å¼æ™‚的介é¢çµ„æˆï¼Œç”±ä¸Šåˆ°ä¸‹ 介é¢å…·å‚™æ…£ç”¨å·¦æ‰‹çš„æ²å‹•è»¸ (真/å‡) å¯éš±è—的介é¢é …ç›® (自訂時風險自負ï¼) åƒçœ‹åŽŸå§‹ç¢¼æª”æ¡ˆ xo-interface.c 以ç²å¾—é …ç›®å稱列表 é é¢èƒŒæ™¯åŠæ™‚æ›´æ–° (真/å‡) 啟動時將視窗放到最大 (真/å‡) 寬度å€å¢žå™¨æœ€å¤§å€¼ 寬度å€å¢žå™¨æœ€å°å€¼ é è¨­å­—型的å稱 之於 %d 之於 n 首é¸çš„å–®ä½ (公分ã€è‹±å‹ã€åƒç´ ã€åƒé»ž) æ²å‹•è»¸é€æ­¥éžå¢ž (以åƒç´ è¨ˆé‡) 啟動時已é¸å·¥å…· (ç•«ç­†ã€æ©¡ç𮿓¦ã€å白顯示ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•) å•Ÿå‹•æ™‚é€²å…¥å…¨èž¢å¹•æ¨¡å¼ (真/å‡) é è¨­é é¢é«˜åº¦ï¼Œä»¥åƒé»žè¨ˆé‡ (1/72 英å‹) é è¨­é é¢å¯¬åº¦ï¼Œä»¥åƒé»žè¨ˆé‡ (1/72 英å‹) é è¨­ç´™å¼µé¡è‰² é è¨­ç´™å¼µæ¨£å¼ (普通ã€åŠƒç·šã€åˆ»åº¦æˆ–座標) 顯示解æžåº¦ï¼Œä»¥æ¯è‹±å‹çš„åƒç´ è¨ˆé‡ åˆå§‹ç¸®æ”¾ç­‰ç´šï¼Œä»¥ç™¾åˆ†æ¯”è¨ˆé‡ ç”¨æ–¼æ”¾å¤§/縮å°çš„倿•¸å› å­ 在縮放å°è©±æ–¹å¡Šä¸­é€æ­¥éžå¢ž 視窗高度以åƒç´ è¨ˆé‡ 視窗寬度以åƒç´ è¨ˆé‡ (未放到最大時) å„種橡皮擦的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹) å„種å白顯示的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹) å„種畫筆的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹) 使用 XInput 延伸功能 (真/å‡) ä½¿ç”¨å£“åŠ›éˆæ•度以控制畫筆寬度 (真/å‡)%01234567A4A4 (æ©«å°)自動儲存å好設定(_U)關於 Xournal所有檔案註解 PD_F套用到所有é é¢(_T)附加檔案到日誌自動載入 pdf.xoj背景背景螢幕快照(_H)點陣圖檔案黑色è—色按鈕 _2 映射按鈕 _3 æ˜ å°„æŒ‰éˆ•åˆ‡æ›æ˜ å°„複製無法開啟背景「%sã€ã€‚無法開啟背景「%sã€ã€‚ é¸å–å¦ä¸€å€‹æª”案?無法開啟背景「%sã€ã€‚設定背景為白色。無法寫入背景「%sã€ã€‚無論如何還是繼續。找ä¸åˆ°åƒç´ åœ–檔案:%s自訂剪下é è¨­é è¨­æ©¡ç𮿓¦é è¨­å白顯示é è¨­ç•«ç­†é è¨­æ–‡å­—(_X)é è¨­ç´™å¼µ(_P)刪除圖層(_Y)ä¸å…許在背景圖層上繪圖。 請切æ›åˆ°åœ–層 1。橡皮擦橡皮擦é¸é …(_N)建立檔案「%sã€æ™‚發生錯誤開啟背景「%sã€æ™‚發生錯誤開啟檔案「%sã€æ™‚發生錯誤儲存檔案「%sã€æ™‚發生錯誤匯出至 PDF細首é å…¨èž¢å¹•ç°è‰²ç¶ è‰²æ‰‹å·¥å…·(_A)手工具高度:å白顯示å白顯示é¸é …(_I)ç„¡æ•ˆçš„å‘½ä»¤åˆ—åƒæ•¸ã€‚ 用法:%s [檔å.xoj] 無效的檔案內容末é åœ–層 %d慣用左手的æ²å‹•è»¸æ·ºè—æ·ºç¶ æ´‹ç´…中無法æä¾›æ–°å¢žæ–°é é¢æ–¼çµæŸ(_E)æ–°é é¢æ–¼ä¹‹å¾Œ(_A)æ–°é é¢æ–¼ä¹‹å‰(_B)䏋頿­£å¸¸å¤§å°æ­£å¸¸å¤§å° (100%)開啟開啟背景開啟日誌開啟 PDF橙色PDF 檔案PS/PDF 檔案 (點陣圖格å¼)é é¢é«˜åº¦é é¢å¯¬åº¦é é¢å¯¬åº¦(_W)紙張大å°(_Z)紙張é¡è‰²(_C)紙張樣å¼(_S)貼上畫筆畫筆é¸é …(_O)鉛筆æ€å–紙張é¡è‰²ä¸Šé åˆ—å°é¸é …列å°ç´™å¼µåŠƒç·š(_R)最近使用文件(_U)紅色é‡åšç›´å°º(_L)直尺儲存儲存日誌儲存變更為「%sã€ï¼Ÿé¸å–å­—åž‹é¸å–å€åŸŸ(_G)é¸å–矩形é¸å–å€åŸŸé¸å–矩形(_R)設æˆé è¨­å€¼(_F)設æˆé è¨­å€¼è¨­å®šç´™å¼µå¤§å°è¨­å®šç¸®æ”¾è¨­å®šé ç¢¼å½¢ç‹€è¾¨è­˜å™¨ç¸®çŸ­çš„é¸å–®(_M)檔案 %s 應該被覆寫?標準紙張大å°ï¼šæ–‡å­—文字字型(_F)…粗切æ›å…¨èž¢å¹•US LetterUS Letter (æ©«å°)無法潤算一或多個 PDF é é¢ã€‚復原無標題使用 _XInput垂直空格白色寬度:由 Denis Auroux 編寫 以åŠå…¶ä»–è²¢ç»è€… http://xournal.sourceforge.net/ XournalXournal - %sXournal 檔案黃色放大縮å°ç¸®æ”¾ï¼šé—œæ–¼(_A)é¡è‰²(_C)連續é é¢(_C)複製目å‰çš„筆刷(_C)é è¨­ç•«ç­†(_D)刪除é é¢(_D)編輯(_E)橡皮擦(_E)橡皮擦尖端(_E)匯出至 PDF(_E)檔案(_F)首é (_F)å¹³é¢åŒ–(_F)求助(_H)éš±è—圖層(_H)å白顯示(_H)日誌(_J)末é (_L)連çµåˆ°ä¸»è¦ç­†åˆ·(_L)載入背景(_L)新圖層(_N)下é (_N)單一é é¢(_O)é¸é …(_O)ç•«ç­†(_P)å£“åŠ›éˆæ•度(_P)上é (_P)漸進å¼èƒŒæ™¯(_P)儲存å好設定(_S)設定縮放(_S)形狀辨識器(_S)顯示圖層(_S)文字(_T)工具(_T)垂直空格(_V)檢視(_V)縮放(_Z)è—色(_B)è—色紙張(_B)刪除筆畫(_D)ç´°(_F)座標(_G)綠色(_G)綠色紙張(_G)劃線(_L)æ´‹ç´…(_M)中(_M)橙色(_O)橙色紙張(_O)粉紅紙張(_P)普通(_P)紅色(_R)刻度(_R)標準(_S)ç²—(_T)很細(_V)白色(_W)白色紙張(_W)白化(_W)黃色(_Y)黃色紙張(_Y)黑色(_K)公分ç°è‰²(_A)è‹±å‹æ·ºè—(_U)淺綠(_E)其他…åƒç´ åƒé»žå¾ˆç²—(_Y)xournal-0.4.8/po/ca.po0000664000175000017500000006113611773660334014227 0ustar aurouxauroux# Catalan translations for xournal package # Traduccions al català del paquet «xournal». # Copyright (C) 2009 THE xournal'S COPYRIGHT HOLDER # This file is distributed under the same license as the xournal package. # David Planella , 2009. # msgid "" msgstr "" "Project-Id-Version: xournal 0.4.2.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: 2009-05-09 21:36+0200\n" "Last-Translator: David Planella \n" "Language-Team: Catalan\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" #: src/main.c:291 src/xo-callbacks.c:105 src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "S'ha produït un error en obrir el fitxer «%s»" #: src/xo-interface.c:350 src/xo-interface.c:2951 src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_Fitxer" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Fes notes a un fitxer PD_F" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Doc_uments recents" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Opcions d'impressió" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Exporta a PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "_Edita" #: src/xo-interface.c:516 msgid "_View" msgstr "_Visualitza" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Continu" #: src/xo-interface.c:529 msgid "_One Page" msgstr "Pàgina ú_nica" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "Pantalla completa" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "_Ampliació" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "Amplada de la _pàgina" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "_Defineix l'ampliació" #: src/xo-interface.c:600 msgid "_First Page" msgstr "Pàgina _inicial" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "Pàgina an_terior" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "Pàgina _següent" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "Pàgina _final" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "_Mostra la capa" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Oculta la capa" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Pàgina" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Pàgina nova a_bans" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Pàgina nova _després" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Pàgina nova al _final" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "_Suprimeix la pàgina" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "_Capa nova" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "Suprimeix la ca_pa" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "A_plana" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "Mida del _paper" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Color del paper" #: src/xo-interface.c:721 msgid "_white paper" msgstr "paper _blanc" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "paper _groc" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "paper _rosa" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "paper _taronja" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "paper _blau" #: src/xo-interface.c:751 msgid "_green paper" msgstr "paper _verd" #: src/xo-interface.c:757 src/xo-interface.c:1025 msgid "other..." msgstr "un altre..." #: src/xo-interface.c:761 src/xo-interface.c:797 src/xo-interface.c:1029 #: src/xo-interface.c:1270 src/xo-interface.c:1346 msgid "NA" msgstr "" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "E_stil del paper" #: src/xo-interface.c:773 msgid "_plain" msgstr "_llis" #: src/xo-interface.c:779 msgid "_lined" msgstr "_pautat" #: src/xo-interface.c:785 msgid "_ruled" msgstr "_reglat" #: src/xo-interface.c:791 msgid "_graph" msgstr "_quadriculat" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Apli_ca a totes les pàgines" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "_Carrega un fons" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Ca_ptura de pantalla del fons" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "Paper p_redeterminat" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Defineix com a _predeterminat" #: src/xo-interface.c:836 msgid "_Tools" msgstr "Ei_nes" #: src/xo-interface.c:843 src/xo-interface.c:1206 src/xo-interface.c:1282 msgid "_Pen" msgstr "_Llapis" #: src/xo-interface.c:852 src/xo-interface.c:1212 src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Esborrador" #: src/xo-interface.c:861 src/xo-interface.c:1218 src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Marcador fluorescent" #: src/xo-interface.c:870 src/xo-interface.c:1224 src/xo-interface.c:1300 msgid "_Text" msgstr "_Text" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "_Reconeixedor de formes" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "Reg_le" #: src/xo-interface.c:903 src/xo-interface.c:1230 src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "Selecciona una re_gió" #: src/xo-interface.c:912 src/xo-interface.c:1236 src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "Selecciona un _rectangle" #: src/xo-interface.c:921 src/xo-interface.c:1242 src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "Espai _vertical" #: src/xo-interface.c:930 src/xo-interface.c:1248 src/xo-interface.c:1324 msgid "H_and Tool" msgstr "_Eina de mà" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Color" #: src/xo-interface.c:954 msgid "blac_k" msgstr "_negre" #: src/xo-interface.c:960 msgid "_blue" msgstr "_blau" #: src/xo-interface.c:966 msgid "_red" msgstr "_vermell" #: src/xo-interface.c:972 msgid "_green" msgstr "v_erd" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "gri_s" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "blau _cel" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "ve_rd clar" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_magenta" #: src/xo-interface.c:1007 msgid "_orange" msgstr "taron_ja" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "gro_c" #: src/xo-interface.c:1019 msgid "_white" msgstr "b_lanc" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "_Opcions del llapis" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "mol_t prim" #: src/xo-interface.c:1047 src/xo-interface.c:1078 src/xo-interface.c:1126 msgid "_fine" msgstr "_prim" #: src/xo-interface.c:1053 src/xo-interface.c:1084 src/xo-interface.c:1132 msgid "_medium" msgstr "_mitjà" #: src/xo-interface.c:1059 src/xo-interface.c:1090 src/xo-interface.c:1138 msgid "_thick" msgstr "_gruixut" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "_molt gruixut" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Opcions de l'_esborrador" #: src/xo-interface.c:1101 msgid "_standard" msgstr "e_stàndard" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "nete_ja" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "su_primeix els traços" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Opc_ions del marcador fluorescent" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "_Tipus de lletra del text..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "_Llapis predeterminat" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Esborrador predeterminat" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Marcador fluorescent predeterminat" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Te_xt predeterminat" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Defineix-lo com a predeterminat" #: src/xo-interface.c:1180 msgid "_Options" msgstr "_Opcions" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Utilitza l'_XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Utilitza la goma del _llapis" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "Sensibilitat de la _pressió" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Mapatge del botó _2" #: src/xo-interface.c:1258 src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "_Vincula al pinzell primari" #: src/xo-interface.c:1264 src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Copia el pinzell actual" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Mapatge del botó _3" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "Fons _progressius" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "Imprimeix les _línies del paper" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "Barra de desplaçament per a esquerrans" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "Escurça els _menús" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Desa les preferències a_utomàticament" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "_Desa les preferències" #: src/xo-interface.c:1393 msgid "_Help" msgstr "A_juda" #: src/xo-interface.c:1404 msgid "_About" msgstr "_Quant a" #: src/xo-interface.c:1417 msgid "Save" msgstr "Desa" #: src/xo-interface.c:1422 msgid "New" msgstr "Nova" #: src/xo-interface.c:1427 msgid "Open" msgstr "Obre" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Retalla" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Copia" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Enganxa" #: src/xo-interface.c:1463 msgid "Undo" msgstr "Desfés" #: src/xo-interface.c:1468 msgid "Redo" msgstr "Refés" #: src/xo-interface.c:1481 msgid "First Page" msgstr "Primera pàgina" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "Pàgina anterior" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Pàgina següent" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Pàgina final" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Redueix" #: src/xo-interface.c:1514 src/xo-interface.c:3045 msgid "Page Width" msgstr "Amplada de la pàgina" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "Amplia" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Mida normal" #: src/xo-interface.c:1530 src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Definiu l'ampliació" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "Commuta la pantalla completa" #: src/xo-interface.c:1548 #, fuzzy msgid "Pencil" msgstr "Llapis" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Llapis" #: src/xo-interface.c:1559 src/xo-interface.c:1565 msgid "Eraser" msgstr "Esborrador" #: src/xo-interface.c:1570 src/xo-interface.c:1576 msgid "Highlighter" msgstr "Marcador fluorescent" #: src/xo-interface.c:1581 src/xo-interface.c:1587 msgid "Text" msgstr "Text" #: src/xo-interface.c:1592 src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Reconeixedor de formes" #: src/xo-interface.c:1601 src/xo-interface.c:1607 msgid "Ruler" msgstr "Regle" #: src/xo-interface.c:1618 src/xo-interface.c:1624 msgid "Select Region" msgstr "Selecciona una regió" #: src/xo-interface.c:1629 src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Selecciona un rectangle" #: src/xo-interface.c:1640 src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Espai vertical" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Eina de mà" #: src/xo-interface.c:1670 src/xo-interface.c:1674 msgid "Default" msgstr "Predeterminat" #: src/xo-interface.c:1678 src/xo-interface.c:1681 msgid "Default Pen" msgstr "Llapis predeterminat" #: src/xo-interface.c:1692 src/xo-interface.c:1700 msgid "Fine" msgstr "Prim" #: src/xo-interface.c:1705 src/xo-interface.c:1713 msgid "Medium" msgstr "Mitjà" #: src/xo-interface.c:1718 src/xo-interface.c:1726 msgid "Thick" msgstr "Gruixut" #: src/xo-interface.c:1745 src/xo-interface.c:1752 msgid "Black" msgstr "Negre" #: src/xo-interface.c:1757 src/xo-interface.c:1764 msgid "Blue" msgstr "Blau" #: src/xo-interface.c:1769 src/xo-interface.c:1776 msgid "Red" msgstr "Vermell" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Green" msgstr "Verd" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Gray" msgstr "Gris" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Light Blue" msgstr "Blau cel" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Light Green" msgstr "Verd clar" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Magenta" msgstr "Magenta" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Orange" msgstr "Taronja" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Yellow" msgstr "Groc" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "White" msgstr "Blanc" #: src/xo-interface.c:1919 msgid " Page " msgstr " Pàgina " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Defineix el número de pàgina" #: src/xo-interface.c:1931 msgid " of n" msgstr " de n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Capa: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Estableix la mida del paper" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Mides de paper estàndard:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (apaïsat)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "Carta nord-americana" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "Carta nord-americana (apaïsat)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Personalitzada" #: src/xo-interface.c:2856 #, fuzzy msgid "Width:" msgstr "Amplada de la pàgina" #: src/xo-interface.c:2865 #, fuzzy msgid "Height:" msgstr "Alçada de la pàgina" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "in" #: src/xo-interface.c:2879 msgid "pixels" msgstr "píxels" #: src/xo-interface.c:2880 msgid "points" msgstr "punts" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "Quant al Xournal" #: src/xo-interface.c:2956 #, fuzzy msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Creat per Denis Auroux\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "Ampliació: " #: src/xo-interface.c:3033 msgid "%" msgstr "" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Mida normal (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Alçada de la pàgina" #. user aborted on save confirmation #: src/xo-callbacks.c:51 src/xo-file.c:665 msgid "Open PDF" msgstr "Obre un fitxer PDF" #: src/xo-callbacks.c:59 src/xo-callbacks.c:132 src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 src/xo-callbacks.c:1444 src/xo-file.c:673 msgid "All files" msgstr "Tots els fitxers" #: src/xo-callbacks.c:62 src/xo-callbacks.c:388 src/xo-file.c:676 msgid "PDF files" msgstr "Fitxers PDF" #: src/xo-callbacks.c:70 src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "Adjunta el fitxer al diari" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Obre un diari" #: src/xo-callbacks.c:135 src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Fitxers del Xournal" #: src/xo-callbacks.c:184 src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "S'ha produït un error en desar el fitxer «%s»" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Desa el diari" #: src/xo-callbacks.c:260 src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Voleu sobreescriure el fitxer %s?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Exporta a PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "S'ha produït un error en crear el fitxer «%s»" #: src/xo-callbacks.c:1371 #, fuzzy msgid "Pick a Paper Color" msgstr "_Color del paper" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Obre un fons" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "Fitxers de mapa de bits" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "Fitxers PS/PDF (com a mapes de bits)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "S'ha produït un error en obrir el fons «%s»" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Seleccioneu el tipus de lletra" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "No es pot dibuixar a la capa de fons.\n" " Es commutarà a la capa 1." #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No s'ha trobat el fitxer de mapa de píxels: %s" #: src/xo-file.c:122 src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "" #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "Els continguts del fitxer no són vàlids" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "" #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "" #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "" #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr "" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr "" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr "" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr "" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr "" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr "" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr "" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr "" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr "" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr "" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr "" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr "" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr "" #: src/xo-file.c:1478 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" #: src/xo-file.c:1481 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr "" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr "" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr "" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr "" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr "" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr "" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr "" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr "" #: src/xo-file.c:1524 msgid " the default paper color" msgstr "" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr "" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr "" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr "" #: src/xo-file.c:1544 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" #: src/xo-file.c:1547 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" #: src/xo-file.c:1551 msgid "" " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, " "hand)" msgstr "" #: src/xo-file.c:1554 msgid " default pen color" msgstr "" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr "" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr "" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr "" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr "" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "" #: src/xo-file.c:1588 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" #: src/xo-file.c:1591 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr "" #: src/xo-file.c:1616 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" #: src/xo-file.c:1619 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr "" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1661 msgid " name of the default font" msgstr "" #: src/xo-file.c:1664 msgid " default font size" msgstr "" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " de %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Fons" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Capa %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "Voleu desar els canvis al fitxer «%s»?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Sense títol" #~ msgid "Discard _Core Events" #~ msgstr "Descarta els esdeveniments _primaris" xournal-0.4.8/po/ca.gmo0000664000175000017500000002400611772715212014361 0ustar aurouxaurouxÞ•Éd ¬ à áìõü  $ ; I Sau › ²¿ÅÊÜîó$3 G Sa pF~ÅÌÜõ+ BP U `lq w ‚ Œ˜­ ÃÍÖ ì ÷ '7 H R^qv †“œ £­ Ç Ó Þ ê ö   ' 5CWimry „‘ §³Â Óáó!*:K"Z}“ ˜¦¬ ¾ÈÞã ìø   "07?HOV ]i € š  ¨´Ã ÉÕÞ ä ð ý 0 ; FPY_dz‰¢ ´¾ ÐÜâéùÿ '-4 ;HOX` h v‚‰Ž •Ÿ ¦± ¸ ÅÏ ×åìïõ ø ! (84 m wƒŠ’”–˜šœž  £'±Ùêû3NSq‰”©¾/Äô "2Uj~“A¦ èó0 .=0l0 ÎÜáñ  &!;)] ‡•'Å ÎØàçì  . ? K ^ c p ~ ‘ ™ $¥ Ê à ö  !!.!?!G!N!b!s! ˆ!©!¼!Ä!Ë!Ò!Ø! Ý!(ë!"3"J"b"x"‘"¯"Ï"ë"##6#!K#m#ˆ##ª#²#Ï#ä#$ $$,$;$A$ I$V$j$o$v$ ~$‹$”$›$¤$½$Ó$é$ ð$ü$%(%0%A%I%P%`%v%…%¡% ²%½%Ï%ß%è%ñ%ù%&(&:&R&i&&‘&—&ž& ®& º&Æ& Ì&Ø&ï& õ&' '''%'-'6' E'Q'W'`' h't' }'ˆ' 'œ'¤' ª'¶'½'À'Æ' É' Ó' Þ'ê'ò' ø'³k¢PRƒn;mÅ´[Â]Ä›Ž!µ‡.8™ ,£ÃÉ5 hÀ¥¿t+ˆ_j`º'vNOÇ9{wT *fZ¬¡|d˜•#±J>?€(\ž6@KpaC©¼–by†}X‘®x<¤zuE‰:^V&Y»¨s·…B½²¦)ši”Á“¯„1’%ŒoS­0=È"œqF¶Æ2ª¹ŠM‹Ÿ—l3$-Wg°G¾«‚Q¸/LHrD§A7Ue~I4c Layer: Page of %d of n01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingCopyCouldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHighlighterHighlighter Opt_ionsInvalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)UndoUntitledUse _XInputVertical SpaceWhiteXournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.2.1 Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: 2009-05-09 21:36+0200 Last-Translator: David Planella Language-Team: Catalan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Capa: Pàgina de %d de n01234567A4A4 (apaïsat)Desa les preferències a_utomàticamentQuant al XournalTots els fitxersFes notes a un fitxer PD_FApli_ca a totes les pàginesAdjunta el fitxer al diariFonsCa_ptura de pantalla del fonsFitxers de mapa de bitsNegreBlauMapatge del botó _2Mapatge del botó _3CopiaNo s'ha trobat el fitxer de mapa de píxels: %sPersonalitzadaRetallaPredeterminatEsborrador predeterminatMarcador fluorescent predeterminatLlapis predeterminatTe_xt predeterminatPaper p_redeterminatSuprimeix la ca_paNo es pot dibuixar a la capa de fons. Es commutarà a la capa 1.EsborradorOpcions de l'_esborradorS'ha produït un error en crear el fitxer «%s»S'ha produït un error en obrir el fons «%s»S'ha produït un error en obrir el fitxer «%s»S'ha produït un error en desar el fitxer «%s»Exporta a PDFPrimPrimera pàginaPantalla completaGrisVerd_Eina de màEina de màMarcador fluorescentOpc_ions del marcador fluorescentEls continguts del fitxer no són vàlidsPàgina finalCapa %dBarra de desplaçament per a esquerransBlau celVerd clarMagentaMitjàNovaPàgina nova al _finalPàgina nova _desprésPàgina nova a_bansPàgina següentMida normalMida normal (100%)ObreObre un fonsObre un diariObre un fitxer PDFTaronjaFitxers PDFFitxers PS/PDF (com a mapes de bits)Alçada de la pàginaAmplada de la pàginaAmplada de la _pàginaMida del _paper_Color del paperE_stil del paperEnganxaLlapis_Opcions del llapisPàgina anteriorOpcions d'impressióImprimeix les _línies del paperDoc_uments recentsVermellRefésReg_leRegleDesaDesa el diariVoleu desar els canvis al fitxer «%s»?Seleccioneu el tipus de lletraSelecciona una re_gióSelecciona un rectangleSelecciona una regióSelecciona un _rectangleDefineix com a _predeterminatDefineix-lo com a predeterminatEstableix la mida del paperDefiniu l'ampliacióDefineix el número de pàginaReconeixedor de formesEscurça els _menúsVoleu sobreescriure el fitxer %s?Mides de paper estàndard:Text_Tipus de lletra del text...GruixutCommuta la pantalla completaCarta nord-americanaCarta nord-americana (apaïsat)DesfésSense títolUtilitza l'_XInputEspai verticalBlancXournalXournal - %sFitxers del XournalGrocAmpliaRedueixAmpliació: _Quant a_Color_Continu_Copia el pinzell actual_Llapis predeterminat_Suprimeix la pàgina_Edita_EsborradorUtilitza la goma del _llapis_Exporta a PDF_FitxerPàgina _inicialA_planaA_juda_Oculta la capa_Marcador fluorescentPàgina _final_Vincula al pinzell primari_Carrega un fons_Capa novaPàgina _següentPàgina ú_nica_Opcions_Pàgina_LlapisSensibilitat de la _pressióPàgina an_teriorFons _progressius_Desa les preferències_Defineix l'ampliació_Reconeixedor de formes_Mostra la capa_TextEi_nesEspai _vertical_Visualitza_Ampliació_blaupaper _blausu_primeix els traços_prim_quadriculatv_erdpaper _verd_pautat_magenta_mitjàtaron_japaper _taronjapaper _rosa_llis_vermell_reglate_stàndard_gruixutmol_t primb_lancpaper _blancnete_jagro_cpaper _groc_negrecmgri_sinblau _celve_rd clarun altre...píxelspunts_molt gruixutxournal-0.4.8/po/LINGUAS0000644000175000017500000000005512243723112014303 0ustar aurouxaurouxca cs de es fr ja it nl pl pt_BR zh_CN zh_TW xournal-0.4.8/po/nl.gmo0000664000175000017500000002605111772715212014411 0ustar aurouxaurouxÞ•×Ô%Œ  !,5<BDFHJLNPRTWf } ‹ •£·Ò ãî /AY^4~<³3ð$BIMUd x „’ ¡F¯öý &D\ s † ‘¢ ¨ ³½ ÅÑ:æ! 7AJ ` kw†‰ž® ¿ ÉÕèí ý  $ > J U a m z‡ ‘ž¥ ¸ ÆÔèúþ  " 8DS dr„”£²»ËÜ"ë$ )7= OY'o—œ ¥±ÀÆ\Í* 2 ?MT\els z†  ª·½ ÅÑà æòû   %< M X cmv|—¦ ¸Â Ôàæíý  +18 ?LS\d l z†’ ™£ ªµ ¼ ÉÓ Ûéðóù ü % ,`8™ ¨¯¶¸º¼¾ÀÂÄÆÉ ÌÙ ù$@^ x!„¦·½ÃÜ"ô  $! EF GŒ $Ô 'ù !!(! 0!:! R! s!€!š!¬!A¾!" "*"+;"(g")"º"Í" Ñ"ß"ï"õ"û"# # ##B3#v##ž#¦# À# Ë#Ö#Þ#æ#í#ó# $$$:$J$Z$q$x$$ ž$©$ °$¾$ Ü$ é$÷$% % "%.%6% :%F%N% c% q%~%š%®% ³%À%É%Ñ%Ù%?é%)&;&N&c&u&‹&¤&Â&Ú&é&''&"'I'c'i'‚'†' £'­'0Á'ò'((%(6(:(UC(™( ¡(®(À(Å( Î(Ø( Þ(ì( ó(ÿ(),) @)J)O)g){)„)“)¦)¬) ¼)Ê)Ú)î) ** * ,*8*@*E*W*f*z*Š*›*«* ²*¿*Ñ* Ø*â* é*÷* +++ + .+8+A+J+R+ a+n+t+z+”++ ¢+¬+ ±+½+Å+ Ë+Ø+ß+â+é+ î+ ú+ ,,, ,TнH {»­×Å%r¦‘²K¶s0™z-º5R œL Í„›¼Æf<,EvÕš:¹9§žtÐ¥!3o†«'=ª¨(¯Ç2•ƒcU”/]4i|¸yAÃOµ–Ÿm}gj©‚hX+ÄMËÔÁ;B"¢^Œ“—)eaÏVÒwÀÎ#~n*7$F1q€Ž@®‰I[ÊÓÑ’CZÖÌp8´ÈP`6.¿É±u…£lW¾YS&·b¬>?¡‡³Âx‹dG¤N°_DQ˜\ˆkJ Layer: Page of %d of n%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: Xournal-0.4.5 Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: Last-Translator: Timo Kluck Language-Team: Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: 2 X-Poedit-Language: Dutch X-Poedit-Country: NETHERLANDS Laag; Paginavan %d van n%01234cc cA4A4 (liggend)Voorkeuren a_utomatisch opslaanOver XournalAlle bestandenPD_F annoterenOp alle pagina's _toepassenBestand aan schrift toevoegenpdf.xoj automatisch ladenAchtergrondSchermafbeelding van ac_htergrondBitmap-bestandenZwartBlauw_Tweede muisknop/penknopDe_rde muisknop/penknopMuisknoppen/penknoppen verwisselenKopiërenKan de achtergrond '%s' niet openen.Kan de achtergrond '%s' niet openen. Wilt u een ander bestand kiezen?Kan de achtergrond '%s' niet openen. De achtergrond wordt op wit gezet.Kan achtergrond '%s' niet schrijven.Kan het bitmap-bestand '%s' niet vindenAndersKnippenStandaardGum met standaardoptiesMarkeerstift met standaardoptiesStandaardpenTekst met standaardoptiesStandaard _papierLaa_g verwijderenU kunt niet op de achtergrond-laag tekenen. Laag 1 wordt gekozen.GumGu_m-optiesFout bij het aanmaken van het bestand '%s'Fout bij het openen van de achtergrond '%s'Fout bij het openen van het bestand '%s'Fout bij het opslaan van het bestand '%s'Exporteren als PDFDunEerste paginaVolledig schermGrijsGroenH_andjeHandjeHoogte:MarkeerstiftMarkeerstift-optiesOngeldige opties in opdrachtregel. Gebruik: %s [bestandsnaam.xoj] Ongeldige bestandsinhoudLaatste paginaLaag %dScrollbalk aan linkerkantLichtblauwLichtgroenMagentaNormaaln.v.t.NieuwNieuwe pagina aan _eindeNieuwe pagina er_achterNieuwe _pagina ervoorVolgende paginaNormale grootteNormale grootte (100%)OpenenEen achtergrond openenSchrift openenPDF openenOranjePDF bestandenPS/PDF-bestanden (als bitmap)PaginahoogtePaginabreedtePagina_breedtePapierformaa_tPapier_kleurPapiersoortPlakkenPenPen-_optiesPotloodKies een papierkleurVorige paginaAfdrukoptiesLijntjes/ruitjes afd_rukkenRecente doc_umentenRoodOpnieuw doen_LineaalLineaalOpslaanSchrift opslaanHet bestand '%s' is gewijzigd. Wilt u de veranderingen opslaan?Lettertype kiezen_Gebied selecterenRechthoek selecterenGebied selecteren_Rechthoek selecterenInstellen als _standaardAls standaardopties instellenPapierformaat instellenZoom instellenPaginanummer instellenVormen herkennen_Menu's inkortenWilt u het bestand '%s' overschrijven?Standaard papierformaten:TekstLettertype voor tekst...DikVolledig schermmodus aan/uitUS LetterUS Letter (liggend)Kan één of meerdere pdf-pagina's niet tekenen.Ongedaan makenNaamloos document_XInput gebruikenVerticale ruimteWitBreedte:Geschreven door Denis Auroux en anderen http://xournal.sourceforge.net/ XournalXournal - %sXournal-bestandenGEelInzoomenUitzoomenZoom:_Over Xournal_Kleur_Doorlopend_Huidige gereedschapPen met standaardoptiesPagina _verwijderenBe_werken_GumGum-uit_einde gebruiken_Exporteren als PDF_BestandEerste _paginaLagen _samenvoegen_Help_Laag verbergen_Markeerstift_Laatste paginaEerste _gereedschapAchtergrond _laden_Nieuwe laagVo_lgende pagina_Eén pagina_Voorkeuren_Pagina_Pen_Drukgevoeligheid_Vorige paginaVoorkeuren op_slaanZoom in_stellen_VormenherkennerLaag _weergeven_Tekst_Gereedschap_Verticale ruimteBeel_dIn_zoomen_Blauw_Blauw papier_Hele lijnen wissen_Dun_Ruitjes_Groen_Groen papier_Lijntjes_Magenta_Normaal_Oranje_Oranje papier_Roze papier_Leeg_RoodLijntjes (geen _kantlijn)_Normaal_Dik_Zeer dun_Wit_Wit papier_Tip-exGee_l_Geel papier_ZwartcmGr_ijsduimLichtbl_auwLichtgro_enanders...pixelspunten_Zeer d_ikxournal-0.4.8/po/pt_BR.po0000644000175000017500000007340512047114212014632 0ustar aurouxauroux# Brazilian Portuguese translations for xournal package # This file is distributed under the same license as the xournal package. # # Maio, 2010. msgid "" msgstr "" "Project-Id-Version: xournal 0.4.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: 2010-05-09 08:59-0300\n" "Last-Translator: Marco A B Souza \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-Country: BRAZIL\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "Parâmetros da linha de comando inválidos.\n" "Uso: %s [arquivo.xoj]\n" #: src/main.c:291 #: src/xo-callbacks.c:105 #: src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "Ocorreu um erro ao abrir o arquivo «%s»" #: src/xo-interface.c:350 #: src/xo-interface.c:2951 #: src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_Arquivo" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Abrir arquivo PD_F" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Documentos _recentes" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Opções de impressão" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Exportar para PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "_Editar" #: src/xo-interface.c:516 msgid "_View" msgstr "_Ver" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Contínuo" #: src/xo-interface.c:529 msgid "_One Page" msgstr "_Uma página" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "_Tela cheia" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "_Zoom" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "Largura da _página" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "_Definir zoom" #: src/xo-interface.c:600 msgid "_First Page" msgstr "_Primeira página" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "_Início" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "Próxima _página" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "_Final" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "_Mostrar camada" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Ocultar camada" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Página" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Nova página _antes" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Nova página _depois" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Nova página no _final" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "_Excluir página" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "_Nova camada" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "E_xcluir camada" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "A_chatar" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "Ta_manho do papel" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Cor do papel" #: src/xo-interface.c:721 msgid "_white paper" msgstr "papel _branco" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "papel _amarelo" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "papel _rosa" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "papel _laranja" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "papel a_zul" #: src/xo-interface.c:751 msgid "_green paper" msgstr "papel _verde" #: src/xo-interface.c:757 #: src/xo-interface.c:1025 msgid "other..." msgstr "_outro..." #: src/xo-interface.c:761 #: src/xo-interface.c:797 #: src/xo-interface.c:1029 #: src/xo-interface.c:1270 #: src/xo-interface.c:1346 msgid "NA" msgstr "NA" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "E_stilo do papel" #: src/xo-interface.c:773 msgid "_plain" msgstr "_liso" #: src/xo-interface.c:779 msgid "_lined" msgstr "_pautado" #: src/xo-interface.c:785 msgid "_ruled" msgstr "_regrado" #: src/xo-interface.c:791 msgid "_graph" msgstr "_quadriculado" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Aplicar a _todas as páginas" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "Ca_rregar pano de fundo" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Capt_urar pano de fundo" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "_Papel padrão" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Def_inir como padrão" #: src/xo-interface.c:836 msgid "_Tools" msgstr "_Ferramentas" #: src/xo-interface.c:843 #: src/xo-interface.c:1206 #: src/xo-interface.c:1282 msgid "_Pen" msgstr "_Lápis" #: src/xo-interface.c:852 #: src/xo-interface.c:1212 #: src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Borracha" #: src/xo-interface.c:861 #: src/xo-interface.c:1218 #: src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Marca-texto" #: src/xo-interface.c:870 #: src/xo-interface.c:1224 #: src/xo-interface.c:1300 msgid "_Text" msgstr "_Texto" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "Reconhecimento de _formas" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "_Régua" #: src/xo-interface.c:903 #: src/xo-interface.c:1230 #: src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "Selecionar uma regiã_o" #: src/xo-interface.c:912 #: src/xo-interface.c:1236 #: src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "Selecionar um r_etângulo" #: src/xo-interface.c:921 #: src/xo-interface.c:1242 #: src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "Espaço _vertical" #: src/xo-interface.c:930 #: src/xo-interface.c:1248 #: src/xo-interface.c:1324 msgid "H_and Tool" msgstr "_Ferramenta de mão" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Cor" #: src/xo-interface.c:954 msgid "blac_k" msgstr "_preto" #: src/xo-interface.c:960 msgid "_blue" msgstr "a_zul" #: src/xo-interface.c:966 msgid "_red" msgstr "_vermelho" #: src/xo-interface.c:972 msgid "_green" msgstr "_verde" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "_cinza" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "az_ul claro" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "v_erde claro" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_magenta" #: src/xo-interface.c:1007 msgid "_orange" msgstr "laran_ja" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "amare_lo" #: src/xo-interface.c:1019 msgid "_white" msgstr "_branco" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "O_pções do lápis" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "mui_to fino" #: src/xo-interface.c:1047 #: src/xo-interface.c:1078 #: src/xo-interface.c:1126 msgid "_fine" msgstr "_fino" #: src/xo-interface.c:1053 #: src/xo-interface.c:1084 #: src/xo-interface.c:1132 msgid "_medium" msgstr "_médio" #: src/xo-interface.c:1059 #: src/xo-interface.c:1090 #: src/xo-interface.c:1138 msgid "_thick" msgstr "_grosso" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "m_uito grosso" msgid "Pencil Cursor" msgstr "Cursor de lápis" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Opções da borracha" #: src/xo-interface.c:1101 msgid "_standard" msgstr "_padrão" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "_corretor líquido" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_suprimir os traços" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Opções do marca-texto" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "Fonte do te_xto..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "Lápi_s padrão" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Borr_acha padrão" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Marca-texto pa_drão" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Text_o padrão" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Tor_nar padrão" #: src/xo-interface.c:1180 msgid "_Options" msgstr "_Opções" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Utilizar _XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Utilizar a _borracha do lápis" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "Sensibilidade à _pressão" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Mapeamento do botão _2" #: src/xo-interface.c:1258 #: src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "Vincular ao pincel _primário" #: src/xo-interface.c:1264 #: src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Copia do pincel atual" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Mapeamento do botão _3" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "_Troca de mapeamento dos botões" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "_Fundos progresivos" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "_Imprimir as linhas do papel" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "Carregar _automáticamente pdf.xoj" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "_Barra de rolagem para canhotos" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "_Menus curtos" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Au_to-salvar as preferências" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "Sal_var as preferências" #: src/xo-interface.c:1393 msgid "_Help" msgstr "Aj_uda" #: src/xo-interface.c:1404 msgid "_About" msgstr "_Sobre" #: src/xo-interface.c:1417 msgid "Save" msgstr "Salvar" #: src/xo-interface.c:1422 msgid "New" msgstr "Novo" #: src/xo-interface.c:1427 msgid "Open" msgstr "Abrir" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Cortar" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Copiar" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Colar" #: src/xo-interface.c:1463 msgid "Undo" msgstr "Desfazer" #: src/xo-interface.c:1468 msgid "Redo" msgstr "Refazer" #: src/xo-interface.c:1481 msgid "First Page" msgstr "Primeira página" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "Página anterior" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Página siguiente" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Última página" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Reduzir zoom" #: src/xo-interface.c:1514 #: src/xo-interface.c:3045 msgid "Page Width" msgstr "Largura da página" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "Ampliar zoom" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Tamanho normal" #: src/xo-interface.c:1530 #: src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Definir o zoom" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "Comutar tela cheia" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "Lápis" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Lápis" #: src/xo-interface.c:1559 #: src/xo-interface.c:1565 msgid "Eraser" msgstr "Borracha" #: src/xo-interface.c:1570 #: src/xo-interface.c:1576 msgid "Highlighter" msgstr "Marca-texto" #: src/xo-interface.c:1581 #: src/xo-interface.c:1587 msgid "Text" msgstr "Texto" #: src/xo-interface.c:1592 #: src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Reconhecimento de formas" #: src/xo-interface.c:1601 #: src/xo-interface.c:1607 msgid "Ruler" msgstr "Régua" #: src/xo-interface.c:1618 #: src/xo-interface.c:1624 msgid "Select Region" msgstr "Selecionar uma região" #: src/xo-interface.c:1629 #: src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Selecionar um retângulo" #: src/xo-interface.c:1640 #: src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Espaço vertical" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Ferramenta de mão" #: src/xo-interface.c:1670 #: src/xo-interface.c:1674 msgid "Default" msgstr "Padrão" #: src/xo-interface.c:1678 #: src/xo-interface.c:1681 msgid "Default Pen" msgstr "Lápis padrão" #: src/xo-interface.c:1692 #: src/xo-interface.c:1700 msgid "Fine" msgstr "Fino" #: src/xo-interface.c:1705 #: src/xo-interface.c:1713 msgid "Medium" msgstr "Mediano" #: src/xo-interface.c:1718 #: src/xo-interface.c:1726 msgid "Thick" msgstr "Grosso" #: src/xo-interface.c:1745 #: src/xo-interface.c:1752 msgid "Black" msgstr "Preto" #: src/xo-interface.c:1757 #: src/xo-interface.c:1764 msgid "Blue" msgstr "Azul" #: src/xo-interface.c:1769 #: src/xo-interface.c:1776 msgid "Red" msgstr "Vermelho" #: src/xo-interface.c:1781 #: src/xo-interface.c:1788 msgid "Green" msgstr "Verde" #: src/xo-interface.c:1793 #: src/xo-interface.c:1800 msgid "Gray" msgstr "Cinza" #: src/xo-interface.c:1805 #: src/xo-interface.c:1812 msgid "Light Blue" msgstr "Azul claro" #: src/xo-interface.c:1817 #: src/xo-interface.c:1824 msgid "Light Green" msgstr "Verde claro" #: src/xo-interface.c:1829 #: src/xo-interface.c:1836 msgid "Magenta" msgstr "Magenta" #: src/xo-interface.c:1841 #: src/xo-interface.c:1848 msgid "Orange" msgstr "Laranja" #: src/xo-interface.c:1853 #: src/xo-interface.c:1860 msgid "Yellow" msgstr "Amarelo" #: src/xo-interface.c:1865 #: src/xo-interface.c:1872 msgid "White" msgstr "Branco" #: src/xo-interface.c:1919 msgid " Page " msgstr " Página " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Definir o número de página" #: src/xo-interface.c:1931 msgid " of n" msgstr " de n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Camada: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Establecer o tamanho do papel" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Tamanhos de papel padrão:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (paisagem)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "Carta" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "Carta (paisagem)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Personalizada" #: src/xo-interface.c:2856 msgid "Width:" msgstr "Largura:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "Altura:" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "in" #: src/xo-interface.c:2879 msgid "pixels" msgstr "píxels" #: src/xo-interface.c:2880 msgid "points" msgstr "pontos" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "Acerca de Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Criado por Denis Auroux\n" "e outros colaboradores\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "Zoom: " #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Tamanho normal (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Altura da página" #. user aborted on save confirmation #: src/xo-callbacks.c:51 #: src/xo-file.c:665 msgid "Open PDF" msgstr "Abrir um arquivo PDF" #: src/xo-callbacks.c:59 #: src/xo-callbacks.c:132 #: src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 #: src/xo-callbacks.c:1444 #: src/xo-file.c:673 msgid "All files" msgstr "Todos os arquivos" #: src/xo-callbacks.c:62 #: src/xo-callbacks.c:388 #: src/xo-file.c:676 msgid "PDF files" msgstr "Arquivos PDF" #: src/xo-callbacks.c:70 #: src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "Anexar o arquivo ao diário" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Abrir um diário" #: src/xo-callbacks.c:135 #: src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Arquivos de Xournal" #: src/xo-callbacks.c:184 #: src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "Ocorreu um erro ao salvar o arquivo «%s»" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Salvar o diário" #: src/xo-callbacks.c:260 #: src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Desea sobreescribir o arquivo «%s»?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Exportar a PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Ocorreu um erro ao criar o arquivo «%s»" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "Cor do papel" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Abrir um fundo" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "Arquivos de mapa de bits" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "Arquivos PS/PDF (como mapas de bits)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "Ocorreu um erro ao abrir o fundo «%s»" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Selecionar fonte" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "Não é possível desenhar na camada de fundo.\n" " Se conmutará a a capa 1." #: src/xo-support.c:90 #: src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Não foi encontrado o arquivo de mapa de píxels «%s»" #: src/xo-file.c:122 #: src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Não foi possível salvar o fundo «%s». Continuando assim mesmo." #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "O conteúdo do arquivo não é válido" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "Não foi possível abrir o fundo «%s». Será usado um fundo em branco." #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Não foi possível abrir o fundo «%s».\n" "Selecionar outro?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "Não foi possível abrir o fundo «%s»." #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "Não foi possível processar uma ou mais páginas do arquivo PDF." #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr " a resolução da tela, em píxels por polegada" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr " o nivel inicial de zoom, em porcentagem" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr " maximizar a janela ao início (true/false)" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr " iniciar em modo tela cheia (true/false)" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr " a largura da janela em píxels (cuando no está maximizada)" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr " a altura da janela em píxels" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr " incremento unitario da barra de rolagem (em píxels)" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr " incremento unitario do quadro de diálogo de zoom" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr " fator multiplicativo para aumentar/diminuir o zoom" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr " vista do documento (true = continua, false = uma sola página)" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr " usar extensões de XInput (true/false)" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " descartar eventos do ponteiro principal em modo XInput (true/false)" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr " sempre associar a ponta de borracha à borracha (true/false)" #: src/xo-file.c:1478 msgid " buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)" msgstr " os botões 2 e 3 trocam a função do botão principal em lugar de desenhar (útil para alguns tablets) (true/false)" #: src/xo-file.c:1481 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " carregar automáticamente arquivo.pdf.xoj em vez de arquivo.pdf (true/false)" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr " caminho padrão para abrir/salvar (deixar em branco para o diretório atual)" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr " usar informação de pressão para controlar espessura dos traços do lápis (true/false)" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr " multiplicador da largura mínima (o traço mais fino é x vezes o traço normal)" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr " multiplicador da largura máxima (o traço mais grosso é x vezes o traço normal)" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " componentes da interface, de abajo arriba\n" " valores válidos: drawarea menu main_toolbar pen_toolbar statusbar\n" " que correspondem à área de desenho, ao menú, a barra principal, a barra de ferramentas e a barra de status respectivamente" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr " componentes da interface em modo de tela cheia" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr " a interface tem barra de rolagem para canhotos (true/false)" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " ocultar alguns itens de menu ou da barra de ferramentas pouco (true/false)" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " itens da interface a ocultar (editar por sua conta e risco)\n" " veja no arquivo xo-interface.c do código fonte, a lista de nomes dos itens" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " transparência do marca-texto (0 a 1, valor padrão 0.5)\n" " aviso: o nivel de transparência não é salvo nos arquivos .xoj" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr " auto-salvar preferências a a salida (true/false)" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr " largura padrão da página em pontos (1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr " altura padrão da página em pontos (1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1524 msgid " the default paper color" msgstr " cor padrão do papel" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " estilo padrão do papel (liso, pautado, regrado ou quadriculado)" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr " aplicar alterações de estilo do papel a todas as páginas (true/false)" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr " unidade preferida (cm, in, px, pt)" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr " incluir as linhas do papel ao imprimir ou exportar um PDF (true/false)" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr " atualização em tempo real dos fundos de página (true/false)" #: src/xo-file.c:1544 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr " resolução dos mapas de bits dos fundos PS/PDF gerados com ghostscript (pontos por polegada)" #: src/xo-file.c:1547 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr " resolução dos mapas de bits dos fundos PDF ao imprimir com libgnomeprint (pontos por polegada)" #: src/xo-file.c:1551 msgid " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand)" msgstr " ferramenta selecionada ao iniciar (lápis, borracha, marca-texto, selecionar retângulo, espaço vertical, mão)" #: src/xo-file.c:1554 msgid " default pen color" msgstr " color padrão do lápis" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " espessura padrão do lápis (fino = 1, médio = 2, grosso = 3)" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr " lápis padrão está em modo régua (true/false)" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr " lápis padrão está em modo reconhecimento de formas (true/false)" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " espessura padrão da borracha (fino = 1, médio = 2, grosso = 3)" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " modo padrão da borracha (padrão = 0, líquido corretor = 1, apagar traços = 2)" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr " color padrão do marca-texto" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " espessura padrão do marca-texto (fino = 1, médio = 2, grosso = 3)" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr " marca-texto padrão está em modo régua (true/false)" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " marca-texto padrão está em modo reconhecimento de formas (true/false)" #: src/xo-file.c:1588 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " ferramenta do botão 2 (lápis, borracha, marca-texto, texto, selecionar retângulo, espaço vertical, mão)" #: src/xo-file.c:1591 msgid " button 2 brush linked to primary brush (true/false) (overrides all other settings)" msgstr " o pincel do botão 2 está vinculado ao pincel primário (true/false) (invalida as outras opções)" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr " color do pincel do botão 2 (somente para lápis ou marca-texto)" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " espessura do pincel do botão 2 (somente para lápis, borracha ou marca-texto)" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " modo de régua do botão 2 (true/false) (somente para lápis ou marca-texto)" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " modo de reconhecimento de formas do botão 2 (true/false) (somente para lápis ou marca-texto)" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr " modo de borracha do botão 2 (somente para borracha)" #: src/xo-file.c:1616 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " ferramenta do botão 3 (lápis, borracha, marca-texto, texto, selecionar retângulo, espaço vertical, mão)" #: src/xo-file.c:1619 msgid " button 3 brush linked to primary brush (true/false) (overrides all other settings)" msgstr " o pincel do botão 3 está vinculado ao pincel primário (true/false) (invalida as outras opções)" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr " cor do pincel do botão 3 (somente para lápis ou marca-texto)" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " espessura do pincel do botão 3 (somente para lápis, borracha ou marca-texto)" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " modo de régua do botão 3 (true/false) (somente para lápis ou marca-texto)" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " modo de reconhecimento de formas do botão 3 (true/false) (somente para lápis ou marca-texto)" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr " modo de borracha do botão 3 (somente para borracha)" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " espessura dos lápis (em pontos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " espessura das borrachas (em pontos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " espessura dos marca-textos (em pontos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1661 msgid " name of the default font" msgstr " nome da fonte padrão" #: src/xo-file.c:1664 msgid " default font size" msgstr " tamanho de fonte padrão" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Arquivo de configuración de Xournal.\n" " Este arquivo se genera automáticamente ao salvar as preferências.\n" " Tenga cuidado ao editar este arquivo manualmente.\n" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " de %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Fundo" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Camada %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "Deseja salvar as alterações no arquivo «%s»?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Sem título" #~ msgid "Discard _Core Events" #~ msgstr "Descartar os sucesos _primários" xournal-0.4.8/po/de.po0000664000175000017500000007224012007610765014224 0ustar aurouxauroux# German translations for xournal package # This file is distributed under the same license as the xournal package. # Stefan Lembach , 2009. # msgid "" msgstr "" "Project-Id-Version: xournal 0.4.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-08-04 13:51+0200\n" "PO-Revision-Date: 2009-09-27 21:04-0700\n" "Last-Translator: Stefan Holtzhauer \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" #: src/main.c:306 src/xo-callbacks.c:122 src/xo-callbacks.c:173 #: src/xo-callbacks.c:3222 #, c-format msgid "Error opening file '%s'" msgstr "Fehler beim Öffnen der Datei '%s'" #: src/xo-interface.c:354 src/xo-interface.c:3003 src/xo-misc.c:1501 msgid "Xournal" msgstr "" #: src/xo-interface.c:364 msgid "_File" msgstr "_Datei" #: src/xo-interface.c:375 msgid "Annotate PD_F" msgstr "_PDF annotieren" #: src/xo-interface.c:400 msgid "Recent Doc_uments" msgstr "_Letzte Dokumente" #: src/xo-interface.c:407 msgid "0" msgstr "" #: src/xo-interface.c:411 msgid "1" msgstr "" #: src/xo-interface.c:415 msgid "2" msgstr "" #: src/xo-interface.c:419 msgid "3" msgstr "" #: src/xo-interface.c:423 msgid "4" msgstr "" #: src/xo-interface.c:427 msgid "5" msgstr "" #: src/xo-interface.c:431 msgid "6" msgstr "" #: src/xo-interface.c:435 msgid "7" msgstr "" #: src/xo-interface.c:444 msgid "Print Options" msgstr "Druckoptionen" #: src/xo-interface.c:459 msgid "_Export to PDF" msgstr "Als PDF _exportieren" #: src/xo-interface.c:475 msgid "_Edit" msgstr "_Bearbeiten" #: src/xo-interface.c:520 msgid "_View" msgstr "_Ansicht" #: src/xo-interface.c:527 msgid "_Continuous" msgstr "_Fortlaufend" #: src/xo-interface.c:533 msgid "_One Page" msgstr "_Eine Seite" #: src/xo-interface.c:544 msgid "Full Screen" msgstr "Vollbild" #: src/xo-interface.c:556 msgid "_Zoom" msgstr "" #: src/xo-interface.c:584 msgid "Page _Width" msgstr "_Seitenbreite" #: src/xo-interface.c:595 msgid "_Set Zoom" msgstr "Vergrößerung _anpassen" #: src/xo-interface.c:604 msgid "_First Page" msgstr "_Erste Seite" #: src/xo-interface.c:615 msgid "_Previous Page" msgstr "_Vorige Seite" #: src/xo-interface.c:626 msgid "_Next Page" msgstr "_Nächste Seite" #: src/xo-interface.c:637 msgid "_Last Page" msgstr "_Letzte Seite" #: src/xo-interface.c:653 msgid "_Show Layer" msgstr "Ebene _anzeigen" #: src/xo-interface.c:661 msgid "_Hide Layer" msgstr "Ebene _verbergen" #: src/xo-interface.c:669 msgid "_Page" msgstr "_Seite" #: src/xo-interface.c:676 msgid "New Page _Before" msgstr "Neue Seite _davor" #: src/xo-interface.c:680 msgid "New Page _After" msgstr "Neue Seite da_nach" #: src/xo-interface.c:684 msgid "New Page At _End" msgstr "Neue Seite am _Ende" #: src/xo-interface.c:688 msgid "_Delete Page" msgstr "Seite _löschen" #: src/xo-interface.c:697 msgid "_New Layer" msgstr "_Neue Ebene" #: src/xo-interface.c:701 msgid "Delete La_yer" msgstr "Ebene _löschen" #: src/xo-interface.c:705 msgid "_Flatten" msgstr "Ebenen _zusammenführen" #: src/xo-interface.c:714 msgid "Paper Si_ze" msgstr "Papier_format" #: src/xo-interface.c:718 msgid "Paper _Color" msgstr "Papierfarbe" #: src/xo-interface.c:725 msgid "_white paper" msgstr "_weißes Papier" #: src/xo-interface.c:731 msgid "_yellow paper" msgstr "_gelbes Papier" #: src/xo-interface.c:737 msgid "_pink paper" msgstr "_pinkes Papier" #: src/xo-interface.c:743 msgid "_orange paper" msgstr "_orangenes Papier" #: src/xo-interface.c:749 msgid "_blue paper" msgstr "_blaues Papier" #: src/xo-interface.c:755 msgid "_green paper" msgstr "g_rünes Papier" #: src/xo-interface.c:761 src/xo-interface.c:1038 msgid "other..." msgstr "andere Farbe..." #: src/xo-interface.c:765 src/xo-interface.c:801 src/xo-interface.c:1042 #: src/xo-interface.c:1289 src/xo-interface.c:1371 msgid "NA" msgstr "" #: src/xo-interface.c:770 msgid "Paper _Style" msgstr "Papier_art" #: src/xo-interface.c:777 msgid "_plain" msgstr "_blanko" #: src/xo-interface.c:783 msgid "_lined" msgstr "liniert mit _Rand" #: src/xo-interface.c:789 msgid "_ruled" msgstr "_liniert" #: src/xo-interface.c:795 msgid "_graph" msgstr "_kariert" #: src/xo-interface.c:806 msgid "Apply _To All Pages" msgstr "Auf alle Seiten anwenden" #: src/xo-interface.c:815 msgid "_Load Background" msgstr "Hintergrund _laden" #: src/xo-interface.c:823 msgid "Background Screens_hot" msgstr "Hintergrund-Screenshot" #: src/xo-interface.c:832 msgid "Default _Paper" msgstr "Standardpapier" #: src/xo-interface.c:836 msgid "Set As De_fault" msgstr "Als Standard setzen" #: src/xo-interface.c:840 msgid "_Tools" msgstr "_Werkzeuge" #: src/xo-interface.c:847 src/xo-interface.c:1219 src/xo-interface.c:1301 msgid "_Pen" msgstr "_Stift" #: src/xo-interface.c:856 src/xo-interface.c:1225 src/xo-interface.c:1307 msgid "_Eraser" msgstr "_Radierer" #: src/xo-interface.c:865 src/xo-interface.c:1231 src/xo-interface.c:1313 msgid "_Highlighter" msgstr "Text_marker" #: src/xo-interface.c:874 src/xo-interface.c:1237 src/xo-interface.c:1319 msgid "_Text" msgstr "" #: src/xo-interface.c:883 src/xo-interface.c:1243 src/xo-interface.c:1325 msgid "_Image" msgstr "Graf_ik" #: src/xo-interface.c:897 msgid "_Shape Recognizer" msgstr "_Umrisserkennung" #: src/xo-interface.c:904 msgid "Ru_ler" msgstr "_Lineal" #: src/xo-interface.c:916 src/xo-interface.c:1249 src/xo-interface.c:1331 msgid "Select Re_gion" msgstr "_Bereich auswählen" #: src/xo-interface.c:925 src/xo-interface.c:1255 src/xo-interface.c:1337 msgid "Select _Rectangle" msgstr "Rechtec_k auswählen" #: src/xo-interface.c:934 src/xo-interface.c:1261 src/xo-interface.c:1343 msgid "_Vertical Space" msgstr "_Vertikaler Abstand" #: src/xo-interface.c:943 src/xo-interface.c:1267 src/xo-interface.c:1349 msgid "H_and Tool" msgstr "_Hand-Werkzeug" #: src/xo-interface.c:956 msgid "_Color" msgstr "_Farbe" #: src/xo-interface.c:967 msgid "blac_k" msgstr "_schwarz" #: src/xo-interface.c:973 msgid "_blue" msgstr "_blau" #: src/xo-interface.c:979 msgid "_red" msgstr "_rot" #: src/xo-interface.c:985 msgid "_green" msgstr "g_rün" #: src/xo-interface.c:991 msgid "gr_ay" msgstr "grau" #: src/xo-interface.c:1002 msgid "light bl_ue" msgstr "_hellblau" #: src/xo-interface.c:1008 msgid "light gr_een" msgstr "he_llgrün" #: src/xo-interface.c:1014 msgid "_magenta" msgstr "_magenta" #: src/xo-interface.c:1020 msgid "_orange" msgstr "" #: src/xo-interface.c:1026 msgid "_yellow" msgstr "_gelb" #: src/xo-interface.c:1032 msgid "_white" msgstr "_weiß" #: src/xo-interface.c:1047 msgid "Pen _Options" msgstr "Stift_optionen" #: src/xo-interface.c:1054 msgid "_very fine" msgstr "_sehr fein" #: src/xo-interface.c:1060 src/xo-interface.c:1091 src/xo-interface.c:1139 msgid "_fine" msgstr "_fein" #: src/xo-interface.c:1066 src/xo-interface.c:1097 src/xo-interface.c:1145 msgid "_medium" msgstr "_mittel" #: src/xo-interface.c:1072 src/xo-interface.c:1103 src/xo-interface.c:1151 msgid "_thick" msgstr "_dick" #: src/xo-interface.c:1078 msgid "ver_y thick" msgstr "seh_r dick" #: src/xo-interface.c:1084 msgid "Eraser Optio_ns" msgstr "Radiereroptio_nen" #: src/xo-interface.c:1114 msgid "_standard" msgstr "_normal" #: src/xo-interface.c:1120 msgid "_whiteout" msgstr "_weiß" #: src/xo-interface.c:1126 msgid "_delete strokes" msgstr "ganze Linien entfernen" #: src/xo-interface.c:1132 msgid "Highlighter Opt_ions" msgstr "Textmarker Opt_ionen" #: src/xo-interface.c:1157 msgid "Text _Font..." msgstr "Schrift_art" #: src/xo-interface.c:1173 msgid "_Default Pen" msgstr "Standard-Stift" #: src/xo-interface.c:1177 msgid "Default Eraser" msgstr "Standard-Radierer" #: src/xo-interface.c:1181 msgid "Default Highlighter" msgstr "Standard-Textmarker" #: src/xo-interface.c:1185 msgid "Default Te_xt" msgstr "Standard-Text" #: src/xo-interface.c:1189 msgid "Set As Default" msgstr "Werkzeug als Standard setzen" #: src/xo-interface.c:1193 msgid "_Options" msgstr "O_ptionen" #: src/xo-interface.c:1200 msgid "Use _XInput" msgstr "_XInput verwenden" #: src/xo-interface.c:1204 msgid "_Eraser Tip" msgstr "_Radiererspitze" #: src/xo-interface.c:1208 msgid "_Pressure sensitivity" msgstr "_Drucksensitivität" #: src/xo-interface.c:1212 msgid "Button _2 Mapping" msgstr "Belegung der Taste _2" #: src/xo-interface.c:1277 src/xo-interface.c:1359 msgid "_Link to Primary Brush" msgstr "_Verknüpfung mit dem Hauptpinsel" #: src/xo-interface.c:1283 src/xo-interface.c:1365 msgid "_Copy of Current Brush" msgstr "_Kopie des aktuellen Pinsels" #: src/xo-interface.c:1294 msgid "Button _3 Mapping" msgstr "Belegung der Taste _3" #: src/xo-interface.c:1376 msgid "Buttons Switch Mappings" msgstr "_Tasten wechseln Werkzeuge" #: src/xo-interface.c:1385 msgid "_Progressive Backgrounds" msgstr "Progressive _Hintergründe" #: src/xo-interface.c:1389 msgid "Print Paper _Ruling" msgstr "_Papiermuster drucken" #: src/xo-interface.c:1393 msgid "Autoload pdf.xoj" msgstr "pdf.xoj _automatisch öffnen" #: src/xo-interface.c:1397 msgid "Left-Handed Scrollbar" msgstr "Scrollbar _links" #: src/xo-interface.c:1401 msgid "Shorten _Menus" msgstr "_Menüs verkürzen" #: src/xo-interface.c:1410 msgid "A_uto-Save Preferences" msgstr "_Einstellungen automatisch speichern" #: src/xo-interface.c:1414 msgid "_Save Preferences" msgstr "Einstellungen _speichern" #: src/xo-interface.c:1418 msgid "_Help" msgstr "_Hilfe" #: src/xo-interface.c:1429 msgid "_About" msgstr "Ü_ber" #: src/xo-interface.c:1442 msgid "Save" msgstr "Speichern" #: src/xo-interface.c:1447 msgid "New" msgstr "Neu" #: src/xo-interface.c:1452 msgid "Open" msgstr "Öffnen" #: src/xo-interface.c:1465 msgid "Cut" msgstr "Ausschneiden" #: src/xo-interface.c:1470 msgid "Copy" msgstr "Kopieren" #: src/xo-interface.c:1475 msgid "Paste" msgstr "Einfügen" #: src/xo-interface.c:1488 msgid "Undo" msgstr "Rückgängig" #: src/xo-interface.c:1493 msgid "Redo" msgstr "Wiederholen" #: src/xo-interface.c:1506 msgid "First Page" msgstr "Erste Seite" #: src/xo-interface.c:1511 msgid "Previous Page" msgstr "Vorige Seite" #: src/xo-interface.c:1516 msgid "Next Page" msgstr "Nächste Seite" #: src/xo-interface.c:1521 msgid "Last Page" msgstr "Letzte Seite" #: src/xo-interface.c:1534 msgid "Zoom Out" msgstr "Verkleinern" #: src/xo-interface.c:1539 src/xo-interface.c:3097 msgid "Page Width" msgstr "Seitenbreite" #: src/xo-interface.c:1545 msgid "Zoom In" msgstr "Vergrößern" #: src/xo-interface.c:1550 msgid "Normal Size" msgstr "Originalgröße" #: src/xo-interface.c:1555 src/xo-interface.c:3056 msgid "Set Zoom" msgstr "Vergrößerung anpassen" #: src/xo-interface.c:1564 msgid "Toggle Fullscreen" msgstr "Vollbild" #: src/xo-interface.c:1573 msgid "Pencil" msgstr "Stift" #: src/xo-interface.c:1579 msgid "Pen" msgstr "Stift" #: src/xo-interface.c:1584 src/xo-interface.c:1590 msgid "Eraser" msgstr "Radierer" #: src/xo-interface.c:1595 src/xo-interface.c:1601 msgid "Highlighter" msgstr "Textmarker" #: src/xo-interface.c:1606 src/xo-interface.c:1612 msgid "Text" msgstr "Text" #: src/xo-interface.c:1617 src/xo-interface.c:1623 msgid "Image" msgstr "Grafik" #: src/xo-interface.c:1628 src/xo-interface.c:1634 msgid "Shape Recognizer" msgstr "Umrisserkennung" #: src/xo-interface.c:1637 src/xo-interface.c:1643 msgid "Ruler" msgstr "Lineal" #: src/xo-interface.c:1654 src/xo-interface.c:1660 msgid "Select Region" msgstr "Bereich auswählen" #: src/xo-interface.c:1665 src/xo-interface.c:1671 msgid "Select Rectangle" msgstr "Rechteck auswählen" #: src/xo-interface.c:1676 src/xo-interface.c:1682 msgid "Vertical Space" msgstr "Vertikaler Abstand" #: src/xo-interface.c:1687 msgid "Hand Tool" msgstr "Hand-Werkzeug" #: src/xo-interface.c:1706 src/xo-interface.c:1710 msgid "Default" msgstr "Standard" #: src/xo-interface.c:1714 src/xo-interface.c:1717 msgid "Default Pen" msgstr "Standard-Stift" #: src/xo-interface.c:1728 src/xo-interface.c:1736 msgid "Fine" msgstr "fein" #: src/xo-interface.c:1741 src/xo-interface.c:1749 msgid "Medium" msgstr "mittel" #: src/xo-interface.c:1754 src/xo-interface.c:1762 msgid "Thick" msgstr "dick" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Black" msgstr "schwarz" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Blue" msgstr "blau" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Red" msgstr "rot" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Green" msgstr "grün" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Gray" msgstr "grau" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Light Blue" msgstr "hellblau" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Light Green" msgstr "hellgrün" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "Magenta" msgstr "magenta" #: src/xo-interface.c:1877 src/xo-interface.c:1884 msgid "Orange" msgstr "orange" #: src/xo-interface.c:1889 src/xo-interface.c:1896 msgid "Yellow" msgstr "gelb" #: src/xo-interface.c:1901 src/xo-interface.c:1908 msgid "White" msgstr "weiß" #: src/xo-interface.c:1955 msgid " Page " msgstr " Seite " #: src/xo-interface.c:1963 msgid "Set page number" msgstr "Seitennummer ändern" #: src/xo-interface.c:1967 msgid " of n" msgstr " von n" #: src/xo-interface.c:1975 msgid " Layer: " msgstr " Ebene: " #: src/xo-interface.c:2878 msgid "Set Paper Size" msgstr "Papierformat ändern" #: src/xo-interface.c:2890 msgid "Standard paper sizes:" msgstr "Standard-Papierformate:" #: src/xo-interface.c:2898 msgid "A4" msgstr "" #: src/xo-interface.c:2899 msgid "A4 (landscape)" msgstr "A4 (Querformat)" #: src/xo-interface.c:2900 msgid "US Letter" msgstr "" #: src/xo-interface.c:2901 msgid "US Letter (landscape)" msgstr "US Letter (Querformat)" #: src/xo-interface.c:2902 msgid "Custom" msgstr "Benutzerdefiniert" #: src/xo-interface.c:2908 msgid "Width:" msgstr "Breite:" #: src/xo-interface.c:2917 msgid "Height:" msgstr "Höhe:" #: src/xo-interface.c:2929 msgid "cm" msgstr "" #: src/xo-interface.c:2930 msgid "in" msgstr "" #: src/xo-interface.c:2931 msgid "pixels" msgstr "Pixel" #: src/xo-interface.c:2932 msgid "points" msgstr "Punkte" #: src/xo-interface.c:2992 msgid "About Xournal" msgstr "Über Xournal" #: src/xo-interface.c:3008 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Geschrieben von Denis Auroux\n" "und weiteren Entwicklern\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3072 msgid "Zoom: " msgstr "Vergrößerung" #: src/xo-interface.c:3085 msgid "%" msgstr "" #: src/xo-interface.c:3090 msgid "Normal size (100%)" msgstr "Originalgröße (100%)" #: src/xo-interface.c:3104 msgid "Page Height" msgstr "Seitenhöhe" #. user aborted on save confirmation #: src/xo-callbacks.c:68 src/xo-file.c:799 msgid "Open PDF" msgstr "PDF öffnen" #: src/xo-callbacks.c:76 src/xo-callbacks.c:149 src/xo-callbacks.c:248 #: src/xo-callbacks.c:402 src/xo-callbacks.c:1471 src/xo-file.c:807 msgid "All files" msgstr "Alle Dateien" #: src/xo-callbacks.c:79 src/xo-callbacks.c:405 src/xo-file.c:810 msgid "PDF files" msgstr "PDF-Dateien" #: src/xo-callbacks.c:87 src/xo-callbacks.c:1494 msgid "Attach file to the journal" msgstr "Datei an das Journal anhängen" #. user aborted on save confirmation #: src/xo-callbacks.c:141 msgid "Open Journal" msgstr "Journal öffnen" #: src/xo-callbacks.c:152 src/xo-callbacks.c:251 msgid "Xournal files" msgstr "Xournal-Dateien" #: src/xo-callbacks.c:201 src/xo-callbacks.c:296 #, c-format msgid "Error saving file '%s'" msgstr "Fehler beim Speichern der Datei '%s'" #: src/xo-callbacks.c:220 msgid "Save Journal" msgstr "Journal speichern" #: src/xo-callbacks.c:277 src/xo-callbacks.c:423 #, c-format msgid "Should the file %s be overwritten?" msgstr "Soll die Datei %s überschrieben werden?" #: src/xo-callbacks.c:376 msgid "Export to PDF" msgstr "Als PDF exportieren" #: src/xo-callbacks.c:436 #, c-format msgid "Error creating file '%s'" msgstr "Fehler beim Anlegen der Datei '%s'" #: src/xo-callbacks.c:1398 msgid "Pick a Paper Color" msgstr "Wählen Sie eine Papierfarbe" #: src/xo-callbacks.c:1463 msgid "Open Background" msgstr "Hintergrund öffnen" #: src/xo-callbacks.c:1479 msgid "Bitmap files" msgstr "Bitmap-Dateien" #: src/xo-callbacks.c:1487 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDF-Dateien (als Bitmaps)" #: src/xo-callbacks.c:1517 #, c-format msgid "Error opening background '%s'" msgstr "Fehler beim Öffnen des Hintergrundes '%s'" #: src/xo-callbacks.c:2110 msgid "Select Font" msgstr "Schriftart auswählen" #: src/xo-callbacks.c:2492 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "Zeichnen ist auf dem Hintergrund nicht erlaubt.\n" " Wechsle zu Ebene 1." #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Konnte Pixmap-Datei nicht finden: %s" #: src/xo-file.c:182 src/xo-file.c:214 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Konnte Hintergrund '%s' nicht schreiben. Fahre trotzdem fort." #: src/xo-file.c:326 #, c-format msgid "Invalid file contents" msgstr "Ungültiger Dateiinhalt" #: src/xo-file.c:476 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "" "Konnte den Hintergrund '%s' nicht öffnen. Verwende einen weißen Hintergrund." #: src/xo-file.c:794 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Konnte den Hintergrund '%s' nicht öffnen.\n" "Eine andere Datei auswählen?" #: src/xo-file.c:940 #, c-format msgid "Could not open background '%s'." msgstr "Konnte den Hintergrund '%s' nicht öffnen." #: src/xo-file.c:1189 msgid "Unable to render one or more PDF pages." msgstr "Eine oder mehrere PDF-Seiten können nicht dargestellt werden." #: src/xo-file.c:1597 msgid " the display resolution, in pixels per inch" msgstr " die Bildschirmauflösung, in Pixel pro Inch" #: src/xo-file.c:1600 msgid " the initial zoom level, in percent" msgstr " die anfängliche Vergrößerungsstufe, in %" #: src/xo-file.c:1603 msgid " maximize the window at startup (true/false)" msgstr " Das Fenster beim Starten maximieren (true/false)" #: src/xo-file.c:1606 msgid " start in full screen mode (true/false)" msgstr " im Vollbild-Modus starten (true/false)" #: src/xo-file.c:1609 msgid " the window width in pixels (when not maximized)" msgstr " Fensterbreite in Pixeln (wenn nicht maximiert)" #: src/xo-file.c:1612 msgid " the window height in pixels" msgstr " Fensterhöhe in Pixeln" #: src/xo-file.c:1615 msgid " scrollbar step increment (in pixels)" msgstr " Zunahme der Scrollbar-Schritte (in Pixeln)" #: src/xo-file.c:1618 msgid " the step increment in the zoom dialog box" msgstr " Zunahme der Schritte im Vergrößerungsdialog" #: src/xo-file.c:1621 msgid " the multiplicative factor for zoom in/out" msgstr " Multiplikator für die Vergrößerung/Verkleinerung" #: src/xo-file.c:1624 msgid " document view (true = continuous, false = single page)" msgstr " Seitenansicht (true = fortlaufend, false = einzelne Seite)" #: src/xo-file.c:1627 msgid " use XInput extensions (true/false)" msgstr " XInput-Erweiterungen verwenden (true/false)" #: src/xo-file.c:1630 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " Mausbewegungen unterdrücken im XInput-Modus (true/false)" #: src/xo-file.c:1633 msgid " always map eraser tip to eraser (true/false)" msgstr " die Radiererspitze immer als Radierer verwenden (true/false)" #: src/xo-file.c:1636 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " die Tasten 2 und 3 wechseln das Werkzeug statt zu zeichnen (hilfreich für " "bestimmte Grafiktabletts) (true/false)" #: src/xo-file.c:1639 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " automatisch datei.pdf.xoj statt datei.pdf laden (true/false)" #: src/xo-file.c:1642 msgid " default path for open/save (leave blank for current directory)" msgstr "" " Standardverzeichnis für Öffnen/Speichern (frei lassen für aktuelles " "Verzeichnis)" #: src/xo-file.c:1645 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" " Drucksensitivität zur Kontrolle der Linienstärke verwenden (true/false)" #: src/xo-file.c:1648 msgid " minimum width multiplier" msgstr " minimaler Breitenmultiplikator" #: src/xo-file.c:1651 msgid " maximum width multiplier" msgstr " maximaler Breitenmultiplikator" #: src/xo-file.c:1654 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " Bedienelemente von oben nach unten\n" " Zulässige Werte: drawarea menu main_toolbar pen_toolbar statusbar" #: src/xo-file.c:1657 msgid " interface components in fullscreen mode, from top to bottom" msgstr " Bedienelemente im Vollbild-Modus, von oben nach unten" #: src/xo-file.c:1660 msgid " interface has left-handed scrollbar (true/false)" msgstr " Scrollbar auf der linken Seite (true/false)" #: src/xo-file.c:1663 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "" " unerwünschte Elemente der Menü- oder Werkzeugleiste ausblenden (true/false)" #: src/xo-file.c:1666 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " auszublendende Bedienelemente (anpassen auf eigene Gefahr!)\n" " siehe Quellcode-Datei xo-interface.c für eine Liste der Bezeichnungen" #: src/xo-file.c:1669 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " Textmarker-Durchsichtigkeit (zwischen 0 und 1, Standard 0.5)\n" " Vorsichtig: Durchsichtigkeitslevel wird nicht in xoj-Dateien gespeichert!" #: src/xo-file.c:1672 msgid " auto-save preferences on exit (true/false)" msgstr " Einstellungen beim Beenden automatisch speichern (true/false)" #: src/xo-file.c:1675 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr "" #: src/xo-file.c:1679 msgid " the default page width, in points (1/72 in)" msgstr " Standard-Seitenbreite, in Punkten (1/72 in)" #: src/xo-file.c:1682 msgid " the default page height, in points (1/72 in)" msgstr " Standard-Seitenhöhe, in Punkten (1/72 in)" #: src/xo-file.c:1685 msgid " the default paper color" msgstr " Standard-Papierfarbe" #: src/xo-file.c:1690 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " Standard-Papierart (blanko, liniert mit Rand, liniert oder kariert)" #: src/xo-file.c:1693 msgid " apply paper style changes to all pages (true/false)" msgstr " Änderungen der Papierart auf alle Seiten anwenden (true/false)" #: src/xo-file.c:1696 msgid " preferred unit (cm, in, px, pt)" msgstr " bevorzugte Einheit (cm, in, px, pt)" #: src/xo-file.c:1699 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" " Papiermuster beim Drucken oder PDF-Export berücksichtigen (true/false)" #: src/xo-file.c:1702 msgid " just-in-time update of page backgrounds (true/false)" msgstr " Hintergrundbilder in Echtzeit aktualisieren (true/false)" #: src/xo-file.c:1705 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" " Bitmap-Auflösung der mit ghostscript dargestellten PS/PDF-Hintergründe (dpi)" #: src/xo-file.c:1708 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" " Bitmap-Auflösung der PDF-Hintergründe beim Drucken mit libgnomeprint (dpi)" #: src/xo-file.c:1712 msgid "" " selected tool at startup (pen, eraser, highlighter, selectregion, " "selectrect, vertspace, hand, image)" msgstr "" " ausgewähltes Werkzeug nach dem Start (pen, eraser, highlighter, selectrect, " "vertspace, hand)" #: src/xo-file.c:1715 msgid " default pen color" msgstr " Standard Stiftfarbe" #: src/xo-file.c:1720 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " Standard Stiftdicke (fein = 1, mittel = 2, dick = 3)" #: src/xo-file.c:1723 msgid " default pen is in ruler mode (true/false)" msgstr " Stift ist standardmäßig im Lineal-Modus (true/false)" #: src/xo-file.c:1726 msgid " default pen is in shape recognizer mode (true/false)" msgstr " Stift ist standardmäßig im Umrisserkennungsmodus (true/false)" #: src/xo-file.c:1729 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " Standard Radiererdicke (fein = 1, mittel = 2, dick = 3)" #: src/xo-file.c:1732 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " Standard Radierermodus (normal = 0, weiß = 1, ganze Linien = 2)" #: src/xo-file.c:1735 msgid " default highlighter color" msgstr " Standard Textmarkerfarbe" #: src/xo-file.c:1740 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " Standard Textmarkerdicke (fein = 1, mittel = 2, dick = 3)" #: src/xo-file.c:1743 msgid " default highlighter is in ruler mode (true/false)" msgstr " Textmarker ist standardmäßig im Lineal-Modus (true/false)" #: src/xo-file.c:1746 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " Textmarker ist standardmäßig im Umrisserkennungsmodus (true/false)" #: src/xo-file.c:1749 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " Werkzeug auf Taste 2 (pen, eraser, highlighter, text, selectrect, vertspace, " "hand)" #: src/xo-file.c:1752 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " Werkzeug auf Taste 2 ist mit Hauptpinsel verknüpft (true/false) (überschreibt " "alle anderen Einstellungen)" #: src/xo-file.c:1755 msgid " button 2 brush color (for pen or highlighter only)" msgstr " Taste 2 Pinselfarbe (nur für Stift oder Textmarker)" #: src/xo-file.c:1762 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " Taste 2 Pinseldicke (nur Stift, Radierer oder Textmarker)" #: src/xo-file.c:1766 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " Taste 2 Lineal-Modus (true/false) (nur für Stift oder Textmarker)" #: src/xo-file.c:1770 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " Taste 2 Umrisserkennungsmodus (true/false) (nur Stift oder Textmarker)" #: src/xo-file.c:1774 msgid " button 2 eraser mode (eraser only)" msgstr " Taste 2 Radierermodus (nur Radierer)" #: src/xo-file.c:1777 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " Werkzeug auf Taste 3 (pen, eraser, highlighter, text, selectrect, vertspace, " "hand)" #: src/xo-file.c:1780 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " Werkzeug auf Taste 3 ist mit Hauptpinsel verknüpft (true/false) (überschreibt " "alle anderen Einstellungen)" #: src/xo-file.c:1783 msgid " button 3 brush color (for pen or highlighter only)" msgstr " Taste 3 Pinselfarbe (nur für Stift oder Textmarker)" #: src/xo-file.c:1790 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " Taste 3 Pinseldicke (nur Stift, Radierer oder Textmarker)" #: src/xo-file.c:1794 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " Taste 3 Lineal-Modus (true/false) (nur für Stift oder Textmarker)" #: src/xo-file.c:1798 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" " Taste 3 Umrisserkennungsmodus (true/false) (nur Stift oder Textmarker)" #: src/xo-file.c:1802 msgid " button 3 eraser mode (eraser only)" msgstr " Taste 3 Radierermodus (nur Radierer)" #: src/xo-file.c:1806 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " Dicke der verschiedenen Stifte (in Punkten, 1 pt = 1/72 in)" #: src/xo-file.c:1812 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " Dicke der verschiedenen Radierer (in Punkten, 1 pt = 1/72 in)" #: src/xo-file.c:1817 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " Dicke der verschiedenen Textmarker (in Punkten, 1 pt = 1/72 in)" #: src/xo-file.c:1822 msgid " name of the default font" msgstr " Standard-Schriftart" #: src/xo-file.c:1825 msgid " default font size" msgstr " Standard-Schriftgröße" #: src/xo-file.c:2003 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Xournal-Konfigurationsdatei.\n" " Diese Datei wird automatisch beim Speichern der Einstellungen erstellt.\n" " Seien Sie vorsichtig, wenn Sie diese Datei manuell editieren!\n" #: src/xo-misc.c:1370 #, c-format msgid " of %d" msgstr " von %d" #: src/xo-misc.c:1375 msgid "Background" msgstr "Hintergrund" #: src/xo-misc.c:1383 #, c-format msgid "Layer %d" msgstr "Ebene %d" #: src/xo-misc.c:1507 #, c-format msgid "Xournal - %s" msgstr "" #: src/xo-misc.c:1763 #, c-format msgid "Save changes to '%s'?" msgstr "Änderungen an '%s' speichern?" #: src/xo-misc.c:1764 msgid "Untitled" msgstr "Unbenannt" #~ msgid "Discard _Core Events" #~ msgstr "Mausbewegungen ignorieren" #: ../src/xo-image.c:109 msgid "Insert Image" msgstr "Grafik einfügen" #: ../src/xo-image.c:120 msgid "Image files" msgstr "Grafik-Dateien" #: ../src/xo-image.c:145 #, c-format msgid "Error opening image '%s'" msgstr "Fehler beim Öffnen der Grafik '%s'" xournal-0.4.8/po/cs.gmo0000664000175000017500000005157211772715212014413 0ustar aurouxaurouxÞ•ô{̸ ¹ÄŠÍ-X4†+»IçL1I~3ÈSü<P#?±FñL83…S¹< #J?nF®LõZB>;Ü+2F=y@·?ø8*K5v8¬8å7 6V ] Dë h0!<™!1Ö!o"5x",®"Û"õ"#)#0# 6#%W#Q}#'Ï#-÷#,%$R$8k$+¤$#Ð$*ô$*%J%0g%=˜%BÖ%:&#T&Bx&»&½&¿&Á&Ã&Å&Ç&É&Ë&Í&Ð&ß& ö& ' ''0'K' \'g' ~'‹'‘'–'¨'º'Ò'×'4÷'<,(3i((»(Â(Æ(Î(Ý( ñ( ý( ) )F()o)v)†)Ÿ)½)Õ) ì)ú) ÿ) *** !* ,*6* >*J*:_*š* °*º*Ã* Ù* ä*ð*ø*ÿ*+++'+ 8+ B+N+a+f+ v+ƒ+Œ+ “++ ·+ Ã+ Î+ Ú+ æ+ ó+,, ,,, 1, ?,M,a,s,w,|,ƒ,‰, Ž,›, ±,½,Ì, Ý,ë,ý, --+-4-D-U-"d-‡-- ¢-°-¶- È-Ò-'è-.. .*.9.?.\F.£. «. ¸.Æ.Í.Õ.Þ.å.ì. ó.ÿ. / #/0/6/ >/J/Y/ _/k/t/ z/ †/ “/ž/µ/ Æ/ Ñ/ Ü/æ/ï/õ/ú/0080 J0T0 f0r0x000•0›0 ¡0­0½0Ã0Ê0 Ñ0Þ0å0î0ö0 þ0 111$1 +151 <1G1 N1 [1e1 m1{1‚1…1‹1 Ž1 š1§1°1·1 ¾1¥Ê1 p3 z3‘…394>Q4=4HÎ4L5Qd5B¶5mù5Pg6;¸6Zô6gO7T·7B 8mO8P½8;9ZJ9g¥9T :hb:CË:G;W; r;=“;JÑ;N<Yk<Å<3Û<@=CP==”=?Ò==>{P>IÌ>i?;€?*¼? ç?7ˆ@/À@ ð@ A2AMASA'XA+€AY¬A2B.9B/hB˜B1±B)ãB/ C%=C)cCC7¦C9ÞCAD4ZD-DJ½DE E EEEEEEEEE .EOEbE sEE E»EÙEáEFFF#FHFH$[H%€H$¦H#ËHïHIII(I/I7IOIfIoI~IHšIãIùI JJ &J4JCJ LJ VJ`JfJJ J¾JÖJêJ KK"K 3K AK LKXKvK‡K™K¬K¾K ÍKÛKãKèKùKLL*L;LYL nLxL L ŠL”LœL«L ÃLÑLâLöLMM4MLMfM~M˜M¯MÂMàMÿMNN N >NHN6`N—N N©N¼NÐN ×N\áN>O FOSOdO lOyO‚O “OŸO ¦O°OÎOÞOïOøOPP'P/P @P KPWPfPvP ŠP«P ½PËPäP ôP Q QQ#Q9QSQgQ€Q˜Q©Q ¯QºQ ÏQÛQëQóQRRR,R5RER [R eR pR|RR¡R ªR µR ÁRÌR ÕRãRëR úRS SS&S)S1S4SCS SS]SeSkS%Aìx×À#&8ê ¤ëVÿ ³ûÙIka.cJKL NO,B«’`»ø!b”¦>ÌTÈp~§æ2‡Å‰å(žXñE'6çGM|wµP£Qd›Y°­g‚Á"z[Ðþô÷¿Z)©?—¸ºÑ¥–ïÒˆ_·í\4;€WÉ‘áDÞŒH®jÎ t¶Ý™¾CŽ 5=߆ä…ðüÆ„œl鯴¢¼0ƒuõ]ÛË3UÏf:eÕ±úhÍö$ Sr}¡âÖ¨7 mÚ ^ʽÜèòqnîÔ/*o“ùÓFý<¹Ÿ+²ó-Rãv9ÄàÇi@ªsˬ1 { šy ؘŠ•  Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: 2010-08-01 22:54+0200 Last-Translator: David Kolibac Language-Team: Czech MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.0 Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; Vrstva: Stránka KonfiguraÄní soubor Xournalu. Tento soubor je generován automaticky po uložení nastavení. PÅ™i ruÄních úpravách buÄte obezÅ™etní. vždy nastavit Å¡piÄku zmizíku na zmizík (true/false) použít nastavení papíru na vÅ¡echny stránky (true/false) pÅ™i ukonÄení automaticky ukládat nastavení (true/false) automaticky naÄítat filename.pdf.xoj místo filename.pdf (true/false) rozliÅ¡ení bitmapových pozadí PDF pÅ™i tisku pomocí libgnomeprint (dpi) rozliÅ¡ení bitmapových pozadí PS/PDF vykreslených pomocí ghostscriptu (dpi) barva nástroje tlaÄítka 2 (pouze pro pero nebo zvýrazňovaÄ) navázat nástroj tlaÄítka 2 na primární nástroj (true/false) (pÅ™epíše vÅ¡echna ostatní nastavení) tloušťka nástroje tlaÄítka 2 (pouze pro pero, zmizík nebo zvýrazňovaÄ) režim zmizíku nástroje tlaÄítka 2 (pouze pro zmizík) režim pravítka nástroje tlaÄítka 2 (true/false) (pouze pro pero nebo zvýrazňovaÄ) režim rozpoznávání tvarů nástroje tlaÄítka 2 (true/false) (pouze pro pero nebo zvýrazňovaÄ) nástroj tlaÄítka 2 (pen, eraser, highlighter, text, selectrect, vertspace, hand) barva nástroje tlaÄítka 3 (pouze pro pero nebo zvýrazňovaÄ) navázat nástroj tlaÄítka 3 na primární nástroj (true/false) (pÅ™epíše vÅ¡echna ostatní nastavení) tloušťka nástroje tlaÄítka 3 (pouze pro pero, zmizík nebo zvýrazňovaÄ) režim zmizíku nástroje tlaÄítka 3 (pouze pro zmizík) režim pravítka nástroje tlaÄítka 3 (true/false) (pouze pro pero nebo zvýrazňovaÄ) režim rozpoznávání tvarů nástroje tlaÄítka 3 (true/false) (pouze pro pero nebo zvýrazňovaÄ) nástroj tlaÄítka 3 (pen, eraser, highlighter, text, selectrect, vertspace, hand) zamÄ›nit nastavení tlaÄítek 2 a 3 místo kreslení (užiteÄné pro nÄ›které tablety) (true/false) výchozí režim zmizíku (normální = 0, bÄ›lení = 1, tahy = 2) výchozí tloušťka zmizíku (tenké = 1, stÅ™ední = 2, tlusté = 3) výchozí velikost písma výchozí barva zvýrazňovaÄe výchozí zvýrazňovaÄ je v režimu pravítka (true/false) výchozí zvýrazňovaÄ je v režimu rozpoznávání tvarů (true/false) výchozí tloušťka zvýrazňovaÄe (tenké = 1, stÅ™ední = 2, tlusté = 3) výchozí cesta pro otevírání/ukládání (nechte prázdné pro aktuální adresář) výchozí barva pera výchozí pero je v režimu pravítka (true/false) výchozí pero je v režimu rozpoznávání tvarů (true/false) výchozí tloušťka pera (tenké = 1, stÅ™ední = 2, tlusté = 3) zruÅ¡it události Core Pointer v režimu XInput (true/false) zobrazení dokumentu (true = plynulé, false = jedna stránka) skrýt nechtÄ›né položky nabídek nebo liÅ¡ty (true/false) průhlednost zvýrazňovaÄe (0 až 1, výchozí 0.5) upozornÄ›ní: míra průhlednosti není ukládána v souborech xoj! zahrnout linkování papíru pÅ™i tisku nebo exportu do PDF (true/false) komponenty rozhraní shora dolů přípustné hodnoty: drawarea menu main_toolbar pen_toolbar statusbar komponenty rozhraní v režimu celé obrazovky shora dolů posuvník rozhraní je vlevo (true/false) položky rozhraní, které se mají skrývat (upravujte na vlastní nebezpeÄí!) seznam názvů položek najdete ve zdrojovém kódu v souboru xo-interface.c průběžná aktualizace pozadí stránek (true/false) maximalizovat okno po spuÅ¡tÄ›ní (true/false) maximální násobitel šířky minimální násobitel šířky název výchozího písma z %d z n preferované jednotky (cm, in, px, pt) velikost posunu na posuvníku (v pixelech) nástroj vybraný po spuÅ¡tÄ›ní (pen, eraser, highlighter, selectrect, vertspace, hand) spouÅ¡tÄ›t v režimu celé obrazovky (true/false) výchozí výška stránky v bodech (1/72 in) výchozí šířka stránky v bodech (1/72 in) výchozí barva papíru výchozí papír (plain, lined, ruled, or graph) rozliÅ¡ení displeje v pixelech na palec výchozí úroveň pÅ™iblížení v procentech násobitel pÅ™iblížení/oddálení velikost posunu v dialogu pÅ™iblížení výška okna v pixelech šířka okna v pixelech (když není maximalizováno) tloušťka různých zmizíku (v bodech, 1 pt = 1/72 in) tloušťka různých zvýrazňovaÄů (v bodech, 1 pt = 1/72 in) tloušťka různých per (v bodech, 1 pt = 1/72 in) používat rozšíření XInput (true/false) používat citlivost na tlak k urÄení tloušťky tahu pera (true/false)%01234567A4A4 (na šířku)A_utomaticky ukládat nastaveníO aplikaci XournalVÅ¡echny souboryAnotovat PD_FP_oužít na vÅ¡echny stránkyPÅ™ipojit soubor k deníkuAutomaticky naÄítat pdf.xojPozadíSním_ek obrazovky jako pozadíBitmapové souboryÄŒernáModráNastavení tlaÄítka _2Nastavení tlaÄítka _3ZamÄ›nit mapování tlaÄítekKopírovatNelze otevřít pozadí '%s'.Nelze otevřít pozadí '%s'. Vybrat jiný soubor?Nelze otevřít pozadí '%s'. Pozadí se nastaví na bílé.Nelze zapsat pozadí '%s'. PÅ™esto se bude pokraÄovat.Nelze najít soubor s mapou pixelů: %sVlastníVyjmoutVýchozíVýchozí _zmizíkVýchozí z_výrazňovaÄVýchozí peroVýchozí _textVýc_hozí papírSmazat v_rstvuKreslení není povoleno ve vrstvÄ› pozadí. PÅ™epíná se na Vrstvu 1.Zmizík_Nastavení zmizíkuChyba pÅ™i vytváření souboru '%s'Chyba pÅ™i otevírání pozadí: '%s'Chyba pÅ™i otevírání souboru '%s'Chyba pÅ™i ukládání souboru '%s'Exportovat do PDFTenkáPrvní stránkaCelá obrazovkaÅ edáZelená_Nástroj prohlíženíNástroj prohlíženíVýška:ZvýrazňovaÄNa_stavení zvýrazňovaÄeNeplatné parametry v příkazovém řádku. Použití: %s [soubor.xoj] Chybný obsah souboruPoslední stránkaVrstva %dPosuvník vlevoBledÄ› modráBledÄ› zelenáFialováStÅ™edníNeznámýNovýNová stránka na _konecNová stránka _za aktuálníNová stránka _pÅ™ed aktuálníNásledující stránkaNormální velikostNormální velikost (100 %)OtevřítOtevřít pozadíOtevřít deníkOtevřít PDFOranžováSoubory PDFSoubory PS/PDF (jako bitmapy)Výška stránkyŠířka stránkyŠířka _stránky_Velikost papíru_Barva papíru_Druh papíruVložitPeroN_astavení peraTužkaVybrat barvu papíruPÅ™edchozí stránkaNastavení tisku_Tisknout linkování papíruPoslední dok_umentyÄŒervenáVpÅ™edPr_avítkoPravítkoUložitUložit deníkUložit zmÄ›ny do '%s'?Vybrat písmoVýbÄ›r _oblastiVýbÄ›r obdélníkuVýbÄ›r oblastiVýbÄ›r ob_délníkuNastavit _jako výchozíNastavit jako výchozíNastavit velikost papíruNastavit pÅ™iblíženíNastavit Äíslo stránkyRozpoznávání tvarůZkrátit _nabídkyMá být soubor %s pÅ™epsán?Standardní velikosti papíru:Text_Písmo textu...TlustáPÅ™epnout režim celé obrazovkyUS LetterUS Letter (na šířku)Není možné vykreslit jednu nebo více stránek PDF.ZpÄ›tBez titulkuPoužívat _XInputVertikální místoBíláŠířka:Napsal Denis Auroux s dalšími pÅ™ispÄ›vateli http://xournal.sourceforge.net/ XournalXournal - %sSoubory XournaluŽlutáPÅ™iblížitOddálitPÅ™iblížení: _O programu_Barva_Plynulý_Kopie aktuálního nástrojeVýchozí _pero_Smazat stránku_Upravit_ZmizíkÅ piÄka _zmizíku_Exportovat do PDF_SouborP_rvní stránkaZp_loÅ¡titNápo_vÄ›daS_krýt vrstvuZ_výrazňovaÄPos_lední stránka_Navázat na primární nástrojN_aÄíst pozadí_Nová vrstva_Následující stránka_Jedna stránkaNastav_ení_Stránka_Pero_Citlivost na tlak_PÅ™edchozí stránka_Posouvající se pozadí_Uložit nastaveníNa_stavit pÅ™iblížení_Rozpoznávání tvarůZobrazit vr_stvu_Text_NástrojeVert_ikální místo_Zobrazení_PÅ™iblížení_modrá_modrý papír_mazání tahů_tenkéÄ_tvereÄkovaný_zelená_zelený papír_linkovaný s okrajem_fialová_stÅ™ední_oranžová_oranžový papír_růžový papírÄi_stýÄ_ervenál_inkovaný_výchozít_lusté_velmi tenké_bílá_bílý papír_bÄ›lenížl_utáž_lutý papírÄe_rnácmÅ¡e_dáinb_ledÄ› modrábledÄ› zele_ná_jiná...pixelůbodův_elmi tlustéxournal-0.4.8/po/zh_TW.po0000664000175000017500000007003612112734302014657 0ustar aurouxauroux# Traditional Chinese Messages for xournal. # Copyright (C) 2011 The xournal Project (msgids) # This file is distributed under the same license as the xournal package. # Wei-Lun Chao , 2011. # msgid "" msgstr "" "Project-Id-Version: xournal 0.4.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: 2011-05-24 12:23+0800\n" "Last-Translator: Wei-Lun Chao \n" "Language-Team: Chinese (traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "ç„¡æ•ˆçš„å‘½ä»¤åˆ—åƒæ•¸ã€‚\n" "用法:%s [檔å.xoj]\n" #: src/main.c:291 src/xo-callbacks.c:105 src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "開啟檔案「%sã€æ™‚發生錯誤" #: src/xo-interface.c:350 src/xo-interface.c:2951 src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "檔案(_F)" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "註解 PD_F" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "最近使用文件(_U)" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "列å°é¸é …" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "匯出至 PDF(_E)" #: src/xo-interface.c:471 msgid "_Edit" msgstr "編輯(_E)" #: src/xo-interface.c:516 msgid "_View" msgstr "檢視(_V)" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "連續é é¢(_C)" #: src/xo-interface.c:529 msgid "_One Page" msgstr "單一é é¢(_O)" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "全螢幕" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "縮放(_Z)" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "é é¢å¯¬åº¦(_W)" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "設定縮放(_S)" #: src/xo-interface.c:600 msgid "_First Page" msgstr "首é (_F)" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "上é (_P)" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "下é (_N)" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "末é (_L)" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "顯示圖層(_S)" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "éš±è—圖層(_H)" #: src/xo-interface.c:665 msgid "_Journal" msgstr "日誌(_J)" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "æ–°é é¢æ–¼ä¹‹å‰(_B)" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "æ–°é é¢æ–¼ä¹‹å¾Œ(_A)" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "æ–°é é¢æ–¼çµæŸ(_E)" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "刪除é é¢(_D)" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "新圖層(_N)" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "刪除圖層(_Y)" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "å¹³é¢åŒ–(_F)" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "紙張大å°(_Z)" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "紙張é¡è‰²(_C)" #: src/xo-interface.c:721 msgid "_white paper" msgstr "白色紙張(_W)" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "黃色紙張(_Y)" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "粉紅紙張(_P)" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "橙色紙張(_O)" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "è—色紙張(_B)" #: src/xo-interface.c:751 msgid "_green paper" msgstr "綠色紙張(_G)" #: src/xo-interface.c:757 src/xo-interface.c:1025 msgid "other..." msgstr "其他…" #: src/xo-interface.c:761 src/xo-interface.c:797 src/xo-interface.c:1029 #: src/xo-interface.c:1270 src/xo-interface.c:1346 msgid "NA" msgstr "無法æä¾›" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "紙張樣å¼(_S)" #: src/xo-interface.c:773 msgid "_plain" msgstr "普通(_P)" #: src/xo-interface.c:779 msgid "_lined" msgstr "劃線(_L)" #: src/xo-interface.c:785 msgid "_ruled" msgstr "刻度(_R)" #: src/xo-interface.c:791 msgid "_graph" msgstr "座標(_G)" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "套用到所有é é¢(_T)" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "載入背景(_L)" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "背景螢幕快照(_H)" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "é è¨­ç´™å¼µ(_P)" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "設æˆé è¨­å€¼(_F)" #: src/xo-interface.c:836 msgid "_Tools" msgstr "工具(_T)" #: src/xo-interface.c:843 src/xo-interface.c:1206 src/xo-interface.c:1282 msgid "_Pen" msgstr "ç•«ç­†(_P)" #: src/xo-interface.c:852 src/xo-interface.c:1212 src/xo-interface.c:1288 msgid "_Eraser" msgstr "橡皮擦(_E)" #: src/xo-interface.c:861 src/xo-interface.c:1218 src/xo-interface.c:1294 msgid "_Highlighter" msgstr "å白顯示(_H)" #: src/xo-interface.c:870 src/xo-interface.c:1224 src/xo-interface.c:1300 msgid "_Text" msgstr "文字(_T)" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "形狀辨識器(_S)" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "ç›´å°º(_L)" #: src/xo-interface.c:903 src/xo-interface.c:1230 src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "é¸å–å€åŸŸ(_G)" #: src/xo-interface.c:912 src/xo-interface.c:1236 src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "é¸å–矩形(_R)" #: src/xo-interface.c:921 src/xo-interface.c:1242 src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "垂直空格(_V)" #: src/xo-interface.c:930 src/xo-interface.c:1248 src/xo-interface.c:1324 msgid "H_and Tool" msgstr "手工具(_A)" #: src/xo-interface.c:943 msgid "_Color" msgstr "é¡è‰²(_C)" #: src/xo-interface.c:954 msgid "blac_k" msgstr "黑色(_K)" #: src/xo-interface.c:960 msgid "_blue" msgstr "è—色(_B)" #: src/xo-interface.c:966 msgid "_red" msgstr "紅色(_R)" #: src/xo-interface.c:972 msgid "_green" msgstr "綠色(_G)" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "ç°è‰²(_A)" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "æ·ºè—(_U)" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "淺綠(_E)" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "æ´‹ç´…(_M)" #: src/xo-interface.c:1007 msgid "_orange" msgstr "橙色(_O)" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "黃色(_Y)" #: src/xo-interface.c:1019 msgid "_white" msgstr "白色(_W)" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "ç•«ç­†é¸é …(_O)" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "很細(_V)" #: src/xo-interface.c:1047 src/xo-interface.c:1078 src/xo-interface.c:1126 msgid "_fine" msgstr "ç´°(_F)" #: src/xo-interface.c:1053 src/xo-interface.c:1084 src/xo-interface.c:1132 msgid "_medium" msgstr "中(_M)" #: src/xo-interface.c:1059 src/xo-interface.c:1090 src/xo-interface.c:1138 msgid "_thick" msgstr "ç²—(_T)" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "很粗(_Y)" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "橡皮擦é¸é …(_N)" #: src/xo-interface.c:1101 msgid "_standard" msgstr "標準(_S)" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "白化(_W)" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "刪除筆畫(_D)" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "å白顯示é¸é …(_I)" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "文字字型(_F)…" #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "é è¨­ç•«ç­†(_D)" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "é è¨­æ©¡ç𮿓¦" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "é è¨­å白顯示" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "é è¨­æ–‡å­—(_X)" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "設æˆé è¨­å€¼" #: src/xo-interface.c:1180 msgid "_Options" msgstr "é¸é …(_O)" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "使用 _XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "橡皮擦尖端(_E)" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "å£“åŠ›éˆæ•度(_P)" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "按鈕 _2 映射" #: src/xo-interface.c:1258 src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "連çµåˆ°ä¸»è¦ç­†åˆ·(_L)" #: src/xo-interface.c:1264 src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "複製目å‰çš„筆刷(_C)" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "按鈕 _3 映射" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "æŒ‰éˆ•åˆ‡æ›æ˜ å°„" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "漸進å¼èƒŒæ™¯(_P)" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "列å°ç´™å¼µåŠƒç·š(_R)" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "自動載入 pdf.xoj" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "慣用左手的æ²å‹•軸" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "縮短的é¸å–®(_M)" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "自動儲存å好設定(_U)" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "儲存å好設定(_S)" #: src/xo-interface.c:1393 msgid "_Help" msgstr "求助(_H)" #: src/xo-interface.c:1404 msgid "_About" msgstr "關於(_A)" #: src/xo-interface.c:1417 msgid "Save" msgstr "儲存" #: src/xo-interface.c:1422 msgid "New" msgstr "新增" #: src/xo-interface.c:1427 msgid "Open" msgstr "開啟" #: src/xo-interface.c:1440 msgid "Cut" msgstr "剪下" #: src/xo-interface.c:1445 msgid "Copy" msgstr "複製" #: src/xo-interface.c:1450 msgid "Paste" msgstr "貼上" #: src/xo-interface.c:1463 msgid "Undo" msgstr "復原" #: src/xo-interface.c:1468 msgid "Redo" msgstr "é‡åš" #: src/xo-interface.c:1481 msgid "First Page" msgstr "首é " #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "上é " #: src/xo-interface.c:1491 msgid "Next Page" msgstr "下é " #: src/xo-interface.c:1496 msgid "Last Page" msgstr "末é " #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "縮å°" #: src/xo-interface.c:1514 src/xo-interface.c:3045 msgid "Page Width" msgstr "é é¢å¯¬åº¦" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "放大" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "正常大å°" #: src/xo-interface.c:1530 src/xo-interface.c:3004 msgid "Set Zoom" msgstr "設定縮放" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "切æ›å…¨èž¢å¹•" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "鉛筆" #: src/xo-interface.c:1554 msgid "Pen" msgstr "ç•«ç­†" #: src/xo-interface.c:1559 src/xo-interface.c:1565 msgid "Eraser" msgstr "橡皮擦" #: src/xo-interface.c:1570 src/xo-interface.c:1576 msgid "Highlighter" msgstr "å白顯示" #: src/xo-interface.c:1581 src/xo-interface.c:1587 msgid "Text" msgstr "文字" #: src/xo-interface.c:1592 src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "形狀辨識器" #: src/xo-interface.c:1601 src/xo-interface.c:1607 msgid "Ruler" msgstr "ç›´å°º" #: src/xo-interface.c:1618 src/xo-interface.c:1624 msgid "Select Region" msgstr "é¸å–å€åŸŸ" #: src/xo-interface.c:1629 src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "é¸å–矩形" #: src/xo-interface.c:1640 src/xo-interface.c:1646 msgid "Vertical Space" msgstr "垂直空格" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "手工具" #: src/xo-interface.c:1670 src/xo-interface.c:1674 msgid "Default" msgstr "é è¨­" #: src/xo-interface.c:1678 src/xo-interface.c:1681 msgid "Default Pen" msgstr "é è¨­ç•«ç­†" #: src/xo-interface.c:1692 src/xo-interface.c:1700 msgid "Fine" msgstr "ç´°" #: src/xo-interface.c:1705 src/xo-interface.c:1713 msgid "Medium" msgstr "中" #: src/xo-interface.c:1718 src/xo-interface.c:1726 msgid "Thick" msgstr "ç²—" #: src/xo-interface.c:1745 src/xo-interface.c:1752 msgid "Black" msgstr "黑色" #: src/xo-interface.c:1757 src/xo-interface.c:1764 msgid "Blue" msgstr "è—色" #: src/xo-interface.c:1769 src/xo-interface.c:1776 msgid "Red" msgstr "紅色" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Green" msgstr "綠色" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Gray" msgstr "ç°è‰²" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Light Blue" msgstr "æ·ºè—" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Light Green" msgstr "淺綠" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Magenta" msgstr "æ´‹ç´…" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Orange" msgstr "橙色" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Yellow" msgstr "黃色" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "White" msgstr "白色" #: src/xo-interface.c:1919 msgid " Page " msgstr " é é¢ " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "設定é ç¢¼" #: src/xo-interface.c:1931 msgid " of n" msgstr " 之於 n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " 圖層: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "設定紙張大å°" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "標準紙張大å°ï¼š" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (æ©«å°)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "US Letter" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "US Letter (æ©«å°)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "自訂" #: src/xo-interface.c:2856 msgid "Width:" msgstr "寬度:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "高度:" #: src/xo-interface.c:2877 msgid "cm" msgstr "公分" #: src/xo-interface.c:2878 msgid "in" msgstr "英å‹" #: src/xo-interface.c:2879 msgid "pixels" msgstr "åƒç´ " #: src/xo-interface.c:2880 msgid "points" msgstr "åƒé»ž" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "關於 Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "ç”± Denis Auroux 編寫\n" "以åŠå…¶ä»–è²¢ç»è€…\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "縮放:" #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "æ­£å¸¸å¤§å° (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "é é¢é«˜åº¦" #. user aborted on save confirmation #: src/xo-callbacks.c:51 src/xo-file.c:665 msgid "Open PDF" msgstr "開啟 PDF" #: src/xo-callbacks.c:59 src/xo-callbacks.c:132 src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 src/xo-callbacks.c:1444 src/xo-file.c:673 msgid "All files" msgstr "所有檔案" #: src/xo-callbacks.c:62 src/xo-callbacks.c:388 src/xo-file.c:676 msgid "PDF files" msgstr "PDF 檔案" #: src/xo-callbacks.c:70 src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "附加檔案到日誌" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "開啟日誌" #: src/xo-callbacks.c:135 src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Xournal 檔案" #: src/xo-callbacks.c:184 src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "儲存檔案「%sã€æ™‚發生錯誤" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "儲存日誌" #: src/xo-callbacks.c:260 src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "檔案 %s 應該被覆寫?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "匯出至 PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "建立檔案「%sã€æ™‚發生錯誤" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "æ€å–紙張é¡è‰²" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "開啟背景" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "點陣圖檔案" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDF 檔案 (點陣圖格å¼)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "開啟背景「%sã€æ™‚發生錯誤" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "é¸å–å­—åž‹" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "ä¸å…許在背景圖層上繪圖。\n" "請切æ›åˆ°åœ–層 1。" #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "找ä¸åˆ°åƒç´ åœ–檔案:%s" #: src/xo-file.c:122 src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "無法寫入背景「%sã€ã€‚無論如何還是繼續。" #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "無效的檔案內容" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "無法開啟背景「%sã€ã€‚設定背景為白色。" #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "無法開啟背景「%sã€ã€‚\n" "é¸å–å¦ä¸€å€‹æª”案?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "無法開啟背景「%sã€ã€‚" #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "無法潤算一或多個 PDF é é¢ã€‚" #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr " 顯示解æžåº¦ï¼Œä»¥æ¯è‹±å‹çš„åƒç´ è¨ˆé‡" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr " åˆå§‹ç¸®æ”¾ç­‰ç´šï¼Œä»¥ç™¾åˆ†æ¯”計é‡" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr " 啟動時將視窗放到最大 (真/å‡)" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr " å•Ÿå‹•æ™‚é€²å…¥å…¨èž¢å¹•æ¨¡å¼ (真/å‡)" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr " 視窗寬度以åƒç´ è¨ˆé‡ (未放到最大時)" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr " 視窗高度以åƒç´ è¨ˆé‡" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr " æ²å‹•è»¸é€æ­¥éžå¢ž (以åƒç´ è¨ˆé‡)" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr " 在縮放å°è©±æ–¹å¡Šä¸­é€æ­¥éžå¢ž" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr " 用於放大/縮å°çš„倿•¸å› å­" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr " 文件檢視 (真 = 連續é é¢ï¼Œå‡ = 單一é é¢)" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr " 使用 XInput 延伸功能 (真/å‡)" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " 在 XInput 模å¼ä¸­æ¨æ£„核心指標事件 (真/å‡)" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr " 自動映射橡皮擦尖端到橡皮擦 (真/å‡)" #: src/xo-file.c:1478 msgid " buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)" msgstr " 按鈕 2 å’Œ 3 åˆ‡æ›æ˜ å°„以代替繪圖 (å°æ–¼æŸäº›å¹³æ¿é›»è…¦æœ‰æ•ˆ) (真/å‡)" #: src/xo-file.c:1481 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " 自動載入 filename.pdf.xoj 以代替 filename.pdf (真/å‡)" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr " é è¨­ç”¨æ–¼é–‹å•Ÿ/儲存的路徑 (ä¿ç•™ç©ºç™½è¡¨ç¤ºç›®å‰ç›®éŒ„)" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr " ä½¿ç”¨å£“åŠ›éˆæ•度以控制畫筆寬度 (真/å‡)" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr " 寬度å€å¢žå™¨æœ€å°å€¼" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr " 寬度å€å¢žå™¨æœ€å¤§å€¼" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " 介é¢çµ„æˆç”±ä¸Šåˆ°ä¸‹\n" " æœ‰æ•ˆå€¼ç‚ºï¼šç¹ªåœ–å€ é¸å–® 主è¦å·¥å…·åˆ— 畫筆工具列 狀態列" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr " å…¨èž¢å¹•æ¨¡å¼æ™‚的介é¢çµ„æˆï¼Œç”±ä¸Šåˆ°ä¸‹" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr " 介é¢å…·å‚™æ…£ç”¨å·¦æ‰‹çš„æ²å‹•è»¸ (真/å‡)" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " éš±è—æŸäº›ä¸æƒ³è¦çš„é¸å–®æˆ–工具列項目 (真/å‡)" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " å¯éš±è—的介é¢é …ç›® (自訂時風險自負ï¼)\n" " åƒçœ‹åŽŸå§‹ç¢¼æª”æ¡ˆ xo-interface.c 以ç²å¾—é …ç›®å稱列表" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " å白顯示æ¿åº¦ (0 到 1,é è¨­ç‚º 0.5)\n" " 警告:æ¿åº¦ç­‰ç´šæœªè¢«å„²å­˜åœ¨ xoj 檔案中ï¼" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr " 離開時自動儲存å好設定 (真/å‡)" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr " é è¨­é é¢å¯¬åº¦ï¼Œä»¥åƒé»žè¨ˆé‡ (1/72 英å‹)" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr " é è¨­é é¢é«˜åº¦ï¼Œä»¥åƒé»žè¨ˆé‡ (1/72 英å‹)" #: src/xo-file.c:1524 msgid " the default paper color" msgstr " é è¨­ç´™å¼µé¡è‰²" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " é è¨­ç´™å¼µæ¨£å¼ (普通ã€åŠƒç·šã€åˆ»åº¦æˆ–座標)" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr " 套用紙張樣å¼è®Šæ›´åˆ°æ‰€æœ‰é é¢ (真/å‡)" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr " 首é¸çš„å–®ä½ (公分ã€è‹±å‹ã€åƒç´ ã€åƒé»ž)" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr " åˆ—å°æˆ–匯出至 PDF 時包å«ç´™å¼µåˆ»åº¦ (真/å‡)" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr " é é¢èƒŒæ™¯åŠæ™‚æ›´æ–° (真/å‡)" #: src/xo-file.c:1544 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr " 使用 ghostscript 潤算 PS/PDF 背景的點陣圖解æžåº¦ (dpi)" #: src/xo-file.c:1547 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr " 以 libgnomeprint åˆ—å° PDF 背景時的點陣圖解æžåº¦ (dpi)" #: src/xo-file.c:1551 msgid " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand)" msgstr " 啟動時已é¸å·¥å…· (ç•«ç­†ã€æ©¡ç𮿓¦ã€å白顯示ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•)" #: src/xo-file.c:1554 msgid " default pen color" msgstr " é è¨­ç•«ç­†é¡è‰²" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " é è¨­ç•«ç­†ç²—ç´° (ç´° = 1, 中 = 2, ç²— = 3)" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr " é è¨­ç•«ç­†æ–¼ç›´å°ºæ¨¡å¼ (真/å‡)" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr " é è¨­ç•«ç­†æ–¼å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡)" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " é è¨­æ©¡ç𮿓¦ç²—ç´° (ç´° = 1, 中 = 2, ç²— = 3)" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " é è¨­æ©¡ç𮿓¦æ¨¡å¼ (標準 = 0, 白化 = 1, 筆畫 = 2)" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr " é è¨­å白顯示é¡è‰²" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " é è¨­å白顯示粗細 (ç´° = 1, 中 = 2, ç²— = 3)" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr " é è¨­åç™½é¡¯ç¤ºæ–¼ç›´å°ºæ¨¡å¼ (真/å‡)" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " é è¨­åç™½é¡¯ç¤ºæ–¼å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡)" #: src/xo-file.c:1588 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " 按鈕 2 工具 (ç•«ç­†ã€æ©¡ç𮿓¦ã€åç™½é¡¯ç¤ºã€æ–‡å­—ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•)" #: src/xo-file.c:1591 msgid " button 2 brush linked to primary brush (true/false) (overrides all other settings)" msgstr " 按鈕 2 筆刷éˆçµåˆ°ä¸»è¦ç­†åˆ· (真/å‡) (強制變更所有其他設定值)" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr " 按鈕 2 筆刷é¡è‰² (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " 按鈕 2 筆刷粗細 (åªé™ç•«ç­†ã€æ©¡ç𮿓¦æˆ–å白顯示)" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " 按鈕 2 ç›´å°ºæ¨¡å¼ (真/å‡) (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " 按鈕 2 å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) (åªé™ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr " 按鈕 2 æ©¡çš®æ“¦æ¨¡å¼ (åªé™æ©¡ç𮿓¦)" #: src/xo-file.c:1616 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " 按鈕 3 工具 (ç•«ç­†ã€æ©¡ç𮿓¦ã€åç™½é¡¯ç¤ºã€æ–‡å­—ã€çŸ©å½¢é¸å–ã€åž‚ç›´ç©ºæ ¼ã€æ‰‹å‹•)" #: src/xo-file.c:1619 msgid " button 3 brush linked to primary brush (true/false) (overrides all other settings)" msgstr " 按鈕 3 筆刷éˆçµåˆ°ä¸»è¦ç­†åˆ· (真/å‡) (強制變更所有其他設定值)" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr " 按鈕 3 筆刷é¡è‰² (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " 按鈕 3 筆刷粗細 (åªé™ç•«ç­†ã€æ©¡ç𮿓¦æˆ–å白顯示)" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " 按鈕 3 ç›´å°ºæ¨¡å¼ (真/å‡) (åªç”¨æ–¼ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " 按鈕 3 å½¢ç‹€è¾¨è­˜å™¨æ¨¡å¼ (真/å‡) (åªé™ç•«ç­†æˆ–å白顯示)" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr " 按鈕 3 æ©¡çš®æ“¦æ¨¡å¼ (åªé™æ©¡ç𮿓¦)" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " å„種畫筆的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹)" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " å„種橡皮擦的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹)" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " å„種å白顯示的粗細 (以åƒé»žè¨ˆé‡ï¼Œ1 åƒé»ž = 1/72 英å‹)" #: src/xo-file.c:1661 msgid " name of the default font" msgstr " é è¨­å­—型的å稱" #: src/xo-file.c:1664 msgid " default font size" msgstr " é è¨­çš„字型大å°" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Xournal 組態檔案。\n" " 儲存å好設定時就會自動產生這個檔案。\n" " 手動編輯這個檔案時請å°å¿ƒã€‚\n" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " 之於 %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "背景" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "圖層 %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "儲存變更為「%sã€ï¼Ÿ" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "無標題" xournal-0.4.8/po/de.gmo0000664000175000017500000004755212007611015014365 0ustar aurouxaurouxÞ• |gÜx y„Š-4F+{I§LñI>3ˆS¼<#M?qF±aø3ZSŽ<â#?CFƒaÊZ,>‡;Æ20=c@¡?â"*55`8–8Ï76@]wDÕh <ƒ 1À oò 5b!,˜!Å!ß!ù!"" "%A"fg"'Î"-ö",$#Q#8j#+£##Ï#*ó#*$I$0f$=—$BÕ$:%#S%Bw%º%É% à% î% ø%&&5& F&Q& h&u&{&€&’&¤&¼&Á&4á&<'3S'‡'¥'¬'°'¸'Ç' Û' ç'õ' (F(Y(`(p(‰(§(¿(Ø( ï(ý( ) ))) $) /)9) A)M)b) h) t)) —)¡)ª) À) Ë)×)ß)æ)ê)û) * * &*2*E*J* Z*g*p* w** ›* §* ²* ¾* Ê* ×*ä*ê* î*û*+ + #+1+E+W+[+`+g+m+ r++ •+¡+°+ Á+Ï+á+ñ+,,,(,9,"H,k,, †,”,š,¬,'Â,ê,ï, ø,---\ - }-‹-’-š-£-ª-±- ¸-Ä- Û- è-õ-û- ... $.0.9. ?. K.X. _.j.. ’. . ¨.².».Á.Æ.Ü.ë./ / / 2/>/E/U/[/ a/m/}/ƒ/Š/ ‘/ž/¥/®/ ¶/ Ä/Ð/×/Ü/ ã/í/ ô/ÿ/ 0 00 %030:0 @0 L0Y0b0i0 p07|0 ´1 ¿1¦É1=p2@®2>ï2=.3Ml3Oº35 4m@4:®4%é4C5GS5S›55ï5m%6:“6%Î6Cô6G87S€7rÔ7AG88‰8Â8Û8<õ8E29:x9T³9:7:@U:5–::Ì:;;NC;ˆ’;H<gd<6Ì<,=„0=9µ=1ï=!>A>a>v>~>$…>+ª>^Ö>'5?+]?,‰?¶?DÌ?,@,>@4k@. @Ï@/ç@>A@VA<—A,ÔAJBLB$\B B BœB¬BÅBäB C C$C3C;C@CVClC‡C*CH»CND=SD$‘D¶D ÈDÕDÞDðDE E!E0ED@E…EŽE" E*ÃE"îE#F$5FZFnF sFFˆFF“F ¢F°F ·FÂF×FÞFíFþF G#G,G=G FGPGXG_GcGwGŠGœG«G»GÒGÚGîG þG H HH :H FH SH aH oH {H †HH–H¥H«H ÈH ÕHãHùH I II#I *I4IFIeI{II£I¶IËIßIüIJ)J>JNJ(aJŠJ¢J §J³J¸JÁJ>ØJ K $K.K@KSKYKcaKÅKÕK ÚK çKóKL L LL:LIL YL eLoLL”L ›L¨LÀLÇL ØLäL ìL!úLM /M;M KM WMaMhMoM ƒM‘M¬MÅMÞMïM ÿM NN'N-Nü“ ÕÌÊ'q‚dIÇZUOfµaÐ]¡w3Û §¨’¹J½~9ún7嘿:›s)±Ú¥ »emˆYÏŸL{àîi#ƒ}·¦¶û÷¸©-zN Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error opening image '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsImageImage filesInsert ImageInvalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ Xournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Image_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Tools_Vertical Space_View_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kgr_aylight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2012-08-04 13:51+0200 PO-Revision-Date: 2009-09-27 21:04-0700 Last-Translator: Stefan Holtzhauer Language-Team: German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ebene: Seite Xournal-Konfigurationsdatei. Diese Datei wird automatisch beim Speichern der Einstellungen erstellt. Seien Sie vorsichtig, wenn Sie diese Datei manuell editieren! die Radiererspitze immer als Radierer verwenden (true/false) Änderungen der Papierart auf alle Seiten anwenden (true/false) Einstellungen beim Beenden automatisch speichern (true/false) automatisch datei.pdf.xoj statt datei.pdf laden (true/false) Bitmap-Auflösung der PDF-Hintergründe beim Drucken mit libgnomeprint (dpi) Bitmap-Auflösung der mit ghostscript dargestellten PS/PDF-Hintergründe (dpi) Taste 2 Pinselfarbe (nur für Stift oder Textmarker) Werkzeug auf Taste 2 ist mit Hauptpinsel verknüpft (true/false) (überschreibt alle anderen Einstellungen) Taste 2 Pinseldicke (nur Stift, Radierer oder Textmarker) Taste 2 Radierermodus (nur Radierer) Taste 2 Lineal-Modus (true/false) (nur für Stift oder Textmarker) Taste 2 Umrisserkennungsmodus (true/false) (nur Stift oder Textmarker) Werkzeug auf Taste 2 (pen, eraser, highlighter, text, selectrect, vertspace, hand) Taste 3 Pinselfarbe (nur für Stift oder Textmarker) Werkzeug auf Taste 3 ist mit Hauptpinsel verknüpft (true/false) (überschreibt alle anderen Einstellungen) Taste 3 Pinseldicke (nur Stift, Radierer oder Textmarker) Taste 3 Radierermodus (nur Radierer) Taste 3 Lineal-Modus (true/false) (nur für Stift oder Textmarker) Taste 3 Umrisserkennungsmodus (true/false) (nur Stift oder Textmarker) Werkzeug auf Taste 3 (pen, eraser, highlighter, text, selectrect, vertspace, hand) die Tasten 2 und 3 wechseln das Werkzeug statt zu zeichnen (hilfreich für bestimmte Grafiktabletts) (true/false) Standard Radierermodus (normal = 0, weiß = 1, ganze Linien = 2) Standard Radiererdicke (fein = 1, mittel = 2, dick = 3) Standard-Schriftgröße Standard Textmarkerfarbe Textmarker ist standardmäßig im Lineal-Modus (true/false) Textmarker ist standardmäßig im Umrisserkennungsmodus (true/false) Standard Textmarkerdicke (fein = 1, mittel = 2, dick = 3) Standardverzeichnis für Öffnen/Speichern (frei lassen für aktuelles Verzeichnis) Standard Stiftfarbe Stift ist standardmäßig im Lineal-Modus (true/false) Stift ist standardmäßig im Umrisserkennungsmodus (true/false) Standard Stiftdicke (fein = 1, mittel = 2, dick = 3) Mausbewegungen unterdrücken im XInput-Modus (true/false) Seitenansicht (true = fortlaufend, false = einzelne Seite) unerwünschte Elemente der Menü- oder Werkzeugleiste ausblenden (true/false) Textmarker-Durchsichtigkeit (zwischen 0 und 1, Standard 0.5) Vorsichtig: Durchsichtigkeitslevel wird nicht in xoj-Dateien gespeichert! Papiermuster beim Drucken oder PDF-Export berücksichtigen (true/false) Bedienelemente von oben nach unten Zulässige Werte: drawarea menu main_toolbar pen_toolbar statusbar Bedienelemente im Vollbild-Modus, von oben nach unten Scrollbar auf der linken Seite (true/false) auszublendende Bedienelemente (anpassen auf eigene Gefahr!) siehe Quellcode-Datei xo-interface.c für eine Liste der Bezeichnungen Hintergrundbilder in Echtzeit aktualisieren (true/false) Das Fenster beim Starten maximieren (true/false) maximaler Breitenmultiplikator minimaler Breitenmultiplikator Standard-Schriftart von %d von n bevorzugte Einheit (cm, in, px, pt) Zunahme der Scrollbar-Schritte (in Pixeln) ausgewähltes Werkzeug nach dem Start (pen, eraser, highlighter, selectrect, vertspace, hand) im Vollbild-Modus starten (true/false) Standard-Seitenhöhe, in Punkten (1/72 in) Standard-Seitenbreite, in Punkten (1/72 in) Standard-Papierfarbe Standard-Papierart (blanko, liniert mit Rand, liniert oder kariert) die Bildschirmauflösung, in Pixel pro Inch die anfängliche Vergrößerungsstufe, in % Multiplikator für die Vergrößerung/Verkleinerung Zunahme der Schritte im Vergrößerungsdialog Fensterhöhe in Pixeln Fensterbreite in Pixeln (wenn nicht maximiert) Dicke der verschiedenen Radierer (in Punkten, 1 pt = 1/72 in) Dicke der verschiedenen Textmarker (in Punkten, 1 pt = 1/72 in) Dicke der verschiedenen Stifte (in Punkten, 1 pt = 1/72 in) XInput-Erweiterungen verwenden (true/false) Drucksensitivität zur Kontrolle der Linienstärke verwenden (true/false)A4 (Querformat)_Einstellungen automatisch speichernÜber XournalAlle Dateien_PDF annotierenAuf alle Seiten anwendenDatei an das Journal anhängenpdf.xoj _automatisch öffnenHintergrundHintergrund-ScreenshotBitmap-DateienschwarzblauBelegung der Taste _2Belegung der Taste _3_Tasten wechseln WerkzeugeKopierenKonnte den Hintergrund '%s' nicht öffnen.Konnte den Hintergrund '%s' nicht öffnen. Eine andere Datei auswählen?Konnte den Hintergrund '%s' nicht öffnen. Verwende einen weißen Hintergrund.Konnte Hintergrund '%s' nicht schreiben. Fahre trotzdem fort.Konnte Pixmap-Datei nicht finden: %sBenutzerdefiniertAusschneidenStandardStandard-RadiererStandard-TextmarkerStandard-StiftStandard-TextStandardpapierEbene _löschenZeichnen ist auf dem Hintergrund nicht erlaubt. Wechsle zu Ebene 1.RadiererRadiereroptio_nenFehler beim Anlegen der Datei '%s'Fehler beim Öffnen des Hintergrundes '%s'Fehler beim Öffnen der Datei '%s'Fehler beim Öffnen der Grafik '%s'Fehler beim Speichern der Datei '%s'Als PDF exportierenfeinErste SeiteVollbildgraugrün_Hand-WerkzeugHand-WerkzeugHöhe:TextmarkerTextmarker Opt_ionenGrafikGrafik-DateienGrafik einfügenUngültiger DateiinhaltLetzte SeiteEbene %dScrollbar _linkshellblauhellgrünmagentamittelNeuNeue Seite am _EndeNeue Seite da_nachNeue Seite _davorNächste SeiteOriginalgrößeOriginalgröße (100%)ÖffnenHintergrund öffnenJournal öffnenPDF öffnenorangePDF-DateienPS/PDF-Dateien (als Bitmaps)SeitenhöheSeitenbreite_SeitenbreitePapier_formatPapierfarbePapier_artEinfügenStiftStift_optionenStiftWählen Sie eine PapierfarbeVorige SeiteDruckoptionen_Papiermuster drucken_Letzte DokumenterotWiederholen_LinealLinealSpeichernJournal speichernÄnderungen an '%s' speichern?Schriftart auswählen_Bereich auswählenRechteck auswählenBereich auswählenRechtec_k auswählenAls Standard setzenWerkzeug als Standard setzenPapierformat ändernVergrößerung anpassenSeitennummer ändernUmrisserkennung_Menüs verkürzenSoll die Datei %s überschrieben werden?Standard-Papierformate:TextSchrift_artdickVollbildUS Letter (Querformat)Eine oder mehrere PDF-Seiten können nicht dargestellt werden.RückgängigUnbenannt_XInput verwendenVertikaler AbstandweißBreite:Geschrieben von Denis Auroux und weiteren Entwicklern http://xournal.sourceforge.net/ Xournal-DateiengelbVergrößernVerkleinernVergrößerungÜ_ber_Farbe_Fortlaufend_Kopie des aktuellen PinselsStandard-StiftSeite _löschen_Bearbeiten_Radierer_RadiererspitzeAls PDF _exportieren_Datei_Erste SeiteEbenen _zusammenführen_HilfeEbene _verbergenText_markerGraf_ik_Letzte Seite_Verknüpfung mit dem HauptpinselHintergrund _laden_Neue Ebene_Nächste Seite_Eine SeiteO_ptionen_Seite_Stift_Drucksensitivität_Vorige SeiteProgressive _HintergründeEinstellungen _speichernVergrößerung _anpassen_UmrisserkennungEbene _anzeigen_Werkzeuge_Vertikaler Abstand_Ansicht_blau_blaues Papierganze Linien entfernen_fein_kariertg_rüng_rünes Papierliniert mit _Rand_magenta_mittel_orangenes Papier_pinkes Papier_blanko_rot_liniert_normal_dick_sehr fein_weiß_weißes Papier_weiß_gelb_gelbes Papier_schwarzgrau_hellblauhe_llgrünandere Farbe...PixelPunkteseh_r dickxournal-0.4.8/po/pl.po0000664000175000017500000007161212013275656014254 0ustar aurouxauroux# Polish translations for PACKAGE package. # Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # MiÅ› Uszatek , 2012. # msgid "" msgstr "" "Project-Id-Version: xournal-0.4.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2012-05-22 15:32-0700\n" "PO-Revision-Date: 2012-08-16 22:42+0100\n" "Last-Translator: MiÅ› Uszatek \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "NieprawidÅ‚owy parametr wiersza poleceÅ„.\n" "Użyj: %s [nazwa pliku.xoj]\n" #: ../src/main.c:306 #: ../src/xo-callbacks.c:121 #: ../src/xo-callbacks.c:172 #: ../src/xo-callbacks.c:3167 #, c-format msgid "Error opening file '%s'" msgstr "Błąd otwierania pliku '%s'" #: ../src/xo-interface.c:350 #: ../src/xo-interface.c:2951 #: ../src/xo-misc.c:1425 msgid "Xournal" msgstr "Xournal" #: ../src/xo-interface.c:360 msgid "_File" msgstr "_Plik" #: ../src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Adnotacja PD_F" #: ../src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Ostatnie Dok_umenty" #: ../src/xo-interface.c:403 msgid "0" msgstr "0" #: ../src/xo-interface.c:407 msgid "1" msgstr "1" #: ../src/xo-interface.c:411 msgid "2" msgstr "2" #: ../src/xo-interface.c:415 msgid "3" msgstr "3" #: ../src/xo-interface.c:419 msgid "4" msgstr "4" #: ../src/xo-interface.c:423 msgid "5" msgstr "5" #: ../src/xo-interface.c:427 msgid "6" msgstr "6" #: ../src/xo-interface.c:431 msgid "7" msgstr "7" #: ../src/xo-interface.c:440 msgid "Print Options" msgstr "Opcje drukowania" #: ../src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Eksportuj do formatu PDF" #: ../src/xo-interface.c:471 msgid "_Edit" msgstr "_Edycja" #: ../src/xo-interface.c:516 msgid "_View" msgstr "_Widok" #: ../src/xo-interface.c:523 msgid "_Continuous" msgstr "_CiÄ…gÅ‚y" #: ../src/xo-interface.c:529 msgid "_One Page" msgstr "_Jedna strona" #: ../src/xo-interface.c:540 msgid "Full Screen" msgstr "PeÅ‚ny ekran" #: ../src/xo-interface.c:552 msgid "_Zoom" msgstr "_PowiÄ™ksz" #: ../src/xo-interface.c:580 msgid "Page _Width" msgstr "Szerokość _strony" #: ../src/xo-interface.c:591 msgid "_Set Zoom" msgstr "_Ustaw PowiÄ™kszenie" #: ../src/xo-interface.c:600 msgid "_First Page" msgstr "_Pierwsza strona" #: ../src/xo-interface.c:611 msgid "_Previous Page" msgstr "_Poprzednia strona" #: ../src/xo-interface.c:622 msgid "_Next Page" msgstr "_NastÄ™pna strona" #: ../src/xo-interface.c:633 msgid "_Last Page" msgstr "_Ostatnia strona" #: ../src/xo-interface.c:649 msgid "_Show Layer" msgstr "_Pokaż warstwÄ™" #: ../src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Ukryj warstwÄ™" #: ../src/xo-interface.c:665 msgid "_Journal" msgstr "_Dziennik" #: ../src/xo-interface.c:672 msgid "New Page _Before" msgstr "Nowa strona _Przed" #: ../src/xo-interface.c:676 msgid "New Page _After" msgstr "Nowa strona _Po" #: ../src/xo-interface.c:680 msgid "New Page At _End" msgstr "Nowa strona na _koÅ„cu" #: ../src/xo-interface.c:684 msgid "_Delete Page" msgstr "_UsuÅ„ stronÄ™" #: ../src/xo-interface.c:693 msgid "_New Layer" msgstr "_Nowa warstwa" #: ../src/xo-interface.c:697 msgid "Delete La_yer" msgstr "UsuÅ„ wa_rstwÄ™" #: ../src/xo-interface.c:701 msgid "_Flatten" msgstr "_SpÅ‚aszcz" #: ../src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "Ro_zmiar papieru" #: ../src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Kolor papieru" #: ../src/xo-interface.c:721 msgid "_white paper" msgstr "_biaÅ‚y papier" #: ../src/xo-interface.c:727 msgid "_yellow paper" msgstr "_żółty papier" #: ../src/xo-interface.c:733 msgid "_pink paper" msgstr "_różowy papier" #: ../src/xo-interface.c:739 msgid "_orange paper" msgstr "_pomaraÅ„czowy papier " #: ../src/xo-interface.c:745 msgid "_blue paper" msgstr "_niebieski papier" #: ../src/xo-interface.c:751 msgid "_green paper" msgstr "_zielony papier" #: ../src/xo-interface.c:757 #: ../src/xo-interface.c:1025 msgid "other..." msgstr "inny..." #: ../src/xo-interface.c:761 #: ../src/xo-interface.c:797 #: ../src/xo-interface.c:1029 #: ../src/xo-interface.c:1270 #: ../src/xo-interface.c:1346 msgid "NA" msgstr "" #: ../src/xo-interface.c:766 msgid "Paper _Style" msgstr "_Styl papieru" #: ../src/xo-interface.c:773 msgid "_plain" msgstr "_zwykÅ‚y" #: ../src/xo-interface.c:779 msgid "_lined" msgstr "w linie _z marginesem" #: ../src/xo-interface.c:785 msgid "_ruled" msgstr "w linie _bez marginesu" #: ../src/xo-interface.c:791 msgid "_graph" msgstr "_w kratkÄ™" #: ../src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Zastosuj _do wszystkich stron" #: ../src/xo-interface.c:811 msgid "_Load Background" msgstr "_ZaÅ‚aduj tÅ‚o" #: ../src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "TÅ‚o z zrzutu ekr_anu" #: ../src/xo-interface.c:828 msgid "Default _Paper" msgstr "DomyÅ›lny _papier" #: ../src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Ustaw jako domyÅ›lny" #: ../src/xo-interface.c:836 msgid "_Tools" msgstr "_NarzÄ™dzia" #: ../src/xo-interface.c:843 #: ../src/xo-interface.c:1206 #: ../src/xo-interface.c:1282 msgid "_Pen" msgstr "_DÅ‚ugopis" #: ../src/xo-interface.c:852 #: ../src/xo-interface.c:1212 #: ../src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Gumka" #: ../src/xo-interface.c:861 #: ../src/xo-interface.c:1218 #: ../src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Marker" #: ../src/xo-interface.c:870 #: ../src/xo-interface.c:1224 #: ../src/xo-interface.c:1300 msgid "_Text" msgstr "_Tekst" #: ../src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "_Rozpoznanie KsztaÅ‚tu" #: ../src/xo-interface.c:891 msgid "Ru_ler" msgstr "Linijka" #: ../src/xo-interface.c:903 #: ../src/xo-interface.c:1230 #: ../src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "Wybierz re_gion" #: ../src/xo-interface.c:912 #: ../src/xo-interface.c:1236 #: ../src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "Wybierz _ProstokÄ…t" #: ../src/xo-interface.c:921 #: ../src/xo-interface.c:1242 #: ../src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "_Pionowy odstÄ™p" #: ../src/xo-interface.c:930 #: ../src/xo-interface.c:1248 #: ../src/xo-interface.c:1324 msgid "H_and Tool" msgstr "N_arzÄ™dzie rÄ™czne" #: ../src/xo-interface.c:943 msgid "_Color" msgstr "_Kolor" #: ../src/xo-interface.c:954 msgid "blac_k" msgstr "czarn_y" #: ../src/xo-interface.c:960 msgid "_blue" msgstr "_niebieski" #: ../src/xo-interface.c:966 msgid "_red" msgstr "_czerwony" #: ../src/xo-interface.c:972 msgid "_green" msgstr "_zielony" #: ../src/xo-interface.c:978 msgid "gr_ay" msgstr "_sz_ary" #: ../src/xo-interface.c:989 msgid "light bl_ue" msgstr "jasnonie_bieski" #: ../src/xo-interface.c:995 msgid "light gr_een" msgstr "jasnozi_elony" #: ../src/xo-interface.c:1001 msgid "_magenta" msgstr "_purpurowy" #: ../src/xo-interface.c:1007 msgid "_orange" msgstr "_pomaraÅ„czowy" #: ../src/xo-interface.c:1013 msgid "_yellow" msgstr "_żółty" #: ../src/xo-interface.c:1019 msgid "_white" msgstr "_biaÅ‚y" #: ../src/xo-interface.c:1034 msgid "Pen _Options" msgstr "_Opcje DÅ‚ugopisu" #: ../src/xo-interface.c:1041 msgid "_very fine" msgstr "_bardzo drobno" #: ../src/xo-interface.c:1047 #: ../src/xo-interface.c:1078 #: ../src/xo-interface.c:1126 msgid "_fine" msgstr "_drobno" #: ../src/xo-interface.c:1053 #: ../src/xo-interface.c:1084 #: ../src/xo-interface.c:1132 msgid "_medium" msgstr "_Å›redni" #: ../src/xo-interface.c:1059 #: ../src/xo-interface.c:1090 #: ../src/xo-interface.c:1138 msgid "_thick" msgstr "_gruby" #: ../src/xo-interface.c:1065 msgid "ver_y thick" msgstr "bar_dzo gruby" #: ../src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Opc_je gumki" #: ../src/xo-interface.c:1101 msgid "_standard" msgstr "_standardowy" #: ../src/xo-interface.c:1107 msgid "_whiteout" msgstr "_zamieć" #: ../src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_usuÅ„ uderzeniem" #: ../src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Opcje markera" #: ../src/xo-interface.c:1144 msgid "Text _Font..." msgstr "_Czcionka tekstu..." #: ../src/xo-interface.c:1160 msgid "_Default Pen" msgstr "_DomyÅ›lny dÅ‚ugopis" #: ../src/xo-interface.c:1164 msgid "Default Eraser" msgstr "DomyÅ›lna gumka " #: ../src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "DomyÅ›lny marker" #: ../src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "DomyÅ›lny tekst " #: ../src/xo-interface.c:1176 msgid "Set As Default" msgstr "Ustaw jako domyÅ›lny" #: ../src/xo-interface.c:1180 msgid "_Options" msgstr "_Opcje" #: ../src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Użyj _XInput" #: ../src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "" #: ../src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "_CzuÅ‚ość nacisku" #: ../src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Przycisk _2 Mapowanie" #: ../src/xo-interface.c:1258 #: ../src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "" #: ../src/xo-interface.c:1264 #: ../src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Kopia aktywnego pÄ™dzla" #: ../src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Przycisk _3 Mapowanie" #: ../src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "Przycisk przełącza mapowanie" #: ../src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "" #: ../src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "" #: ../src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "Auto-Åadowanie pdf.xoj" #: ../src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "Z lewej pasek przewijania" #: ../src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "Skróć _menu" #: ../src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Auto-Zapis ustawieÅ„" #: ../src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "_Zapisz ustawienia" #: ../src/xo-interface.c:1393 msgid "_Help" msgstr "_Pomoc" #: ../src/xo-interface.c:1404 msgid "_About" msgstr "_O programie" #: ../src/xo-interface.c:1417 msgid "Save" msgstr "Zapisz" #: ../src/xo-interface.c:1422 msgid "New" msgstr "Nowy" #: ../src/xo-interface.c:1427 msgid "Open" msgstr "Otwórz" #: ../src/xo-interface.c:1440 msgid "Cut" msgstr "Wytnij" #: ../src/xo-interface.c:1445 msgid "Copy" msgstr "Skopiuj" #: ../src/xo-interface.c:1450 msgid "Paste" msgstr "Wklej" #: ../src/xo-interface.c:1463 msgid "Undo" msgstr "Cofnij" #: ../src/xo-interface.c:1468 msgid "Redo" msgstr "Ponów" #: ../src/xo-interface.c:1481 msgid "First Page" msgstr "Pierwsza strona" #: ../src/xo-interface.c:1486 msgid "Previous Page" msgstr "Poprzednia strona" #: ../src/xo-interface.c:1491 msgid "Next Page" msgstr "NastÄ™pna strona" #: ../src/xo-interface.c:1496 msgid "Last Page" msgstr "Ostatnia strona" #: ../src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Pomniejsz" #: ../src/xo-interface.c:1514 #: ../src/xo-interface.c:3045 msgid "Page Width" msgstr "Szerokość strony" #: ../src/xo-interface.c:1520 msgid "Zoom In" msgstr "PowiÄ™ksz" #: ../src/xo-interface.c:1525 msgid "Normal Size" msgstr "Normalny rozmiar" #: ../src/xo-interface.c:1530 #: ../src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Ustaw powiÄ™kszenie" #: ../src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "Przełącza na peÅ‚ny ekran" #: ../src/xo-interface.c:1548 msgid "Pencil" msgstr "Ołówek" #: ../src/xo-interface.c:1554 msgid "Pen" msgstr "DÅ‚ugopis" #: ../src/xo-interface.c:1559 #: ../src/xo-interface.c:1565 msgid "Eraser" msgstr "Gumka" #: ../src/xo-interface.c:1570 #: ../src/xo-interface.c:1576 msgid "Highlighter" msgstr "Marker" #: ../src/xo-interface.c:1581 #: ../src/xo-interface.c:1587 msgid "Text" msgstr "Tekst" #: ../src/xo-interface.c:1592 #: ../src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Rozpoznanie KsztaÅ‚tu" #: ../src/xo-interface.c:1601 #: ../src/xo-interface.c:1607 msgid "Ruler" msgstr "Linijka" #: ../src/xo-interface.c:1618 #: ../src/xo-interface.c:1624 msgid "Select Region" msgstr "Wybierz region" #: ../src/xo-interface.c:1629 #: ../src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Wybierz ProstokÄ…t" #: ../src/xo-interface.c:1640 #: ../src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Pionowy odstÄ™p" #: ../src/xo-interface.c:1651 msgid "Hand Tool" msgstr "NarzÄ™dzie rÄ™czne" #: ../src/xo-interface.c:1670 #: ../src/xo-interface.c:1674 msgid "Default" msgstr "DomyÅ›lny" #: ../src/xo-interface.c:1678 #: ../src/xo-interface.c:1681 msgid "Default Pen" msgstr "DomyÅ›lny dÅ‚ugopis" #: ../src/xo-interface.c:1692 #: ../src/xo-interface.c:1700 msgid "Fine" msgstr "Drobno" #: ../src/xo-interface.c:1705 #: ../src/xo-interface.c:1713 msgid "Medium" msgstr "Åšredni" #: ../src/xo-interface.c:1718 #: ../src/xo-interface.c:1726 msgid "Thick" msgstr "Gruby" #: ../src/xo-interface.c:1745 #: ../src/xo-interface.c:1752 msgid "Black" msgstr "Czarny" #: ../src/xo-interface.c:1757 #: ../src/xo-interface.c:1764 msgid "Blue" msgstr "Niebieski" #: ../src/xo-interface.c:1769 #: ../src/xo-interface.c:1776 msgid "Red" msgstr "Czerwony" #: ../src/xo-interface.c:1781 #: ../src/xo-interface.c:1788 msgid "Green" msgstr "Zielony" #: ../src/xo-interface.c:1793 #: ../src/xo-interface.c:1800 msgid "Gray" msgstr "Szary" #: ../src/xo-interface.c:1805 #: ../src/xo-interface.c:1812 msgid "Light Blue" msgstr "Jasnoniebieski" #: ../src/xo-interface.c:1817 #: ../src/xo-interface.c:1824 msgid "Light Green" msgstr "Jasnozielony" #: ../src/xo-interface.c:1829 #: ../src/xo-interface.c:1836 msgid "Magenta" msgstr "Purpurowy" #: ../src/xo-interface.c:1841 #: ../src/xo-interface.c:1848 msgid "Orange" msgstr "PomaraÅ„czowy" #: ../src/xo-interface.c:1853 #: ../src/xo-interface.c:1860 msgid "Yellow" msgstr "Żółty" #: ../src/xo-interface.c:1865 #: ../src/xo-interface.c:1872 msgid "White" msgstr "BiaÅ‚y" #: ../src/xo-interface.c:1919 msgid " Page " msgstr " Strona" #: ../src/xo-interface.c:1927 msgid "Set page number" msgstr "Ustaw numer strony" #: ../src/xo-interface.c:1931 msgid " of n" msgstr "" #: ../src/xo-interface.c:1939 msgid " Layer: " msgstr " Warstwa:" #: ../src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Ustaw rozmiar papieru" #: ../src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Standardowy rozmiar papieru:" #: ../src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: ../src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (poziomo)" #: ../src/xo-interface.c:2848 msgid "US Letter" msgstr "" #: ../src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "" #: ../src/xo-interface.c:2850 msgid "Custom" msgstr "Niestandardowy" #: ../src/xo-interface.c:2856 msgid "Width:" msgstr "Szerokość:" #: ../src/xo-interface.c:2865 msgid "Height:" msgstr "Wysokość:" #: ../src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: ../src/xo-interface.c:2878 msgid "in" msgstr "w" #: ../src/xo-interface.c:2879 msgid "pixels" msgstr "pikseli" #: ../src/xo-interface.c:2880 msgid "points" msgstr "punktów" #: ../src/xo-interface.c:2940 msgid "About Xournal" msgstr "O Xournal" #: ../src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Napisany przez Denis Auroux\n" "oraz innych współpracowników\n" " http://xournal.sourceforge.net/" #: ../src/xo-interface.c:3020 msgid "Zoom: " msgstr "PowiÄ™ksz:" #: ../src/xo-interface.c:3033 msgid "%" msgstr "%" #: ../src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Normalny rozmiar (100%)" #: ../src/xo-interface.c:3052 msgid "Page Height" msgstr "Wysokość strony" #. user aborted on save confirmation #: ../src/xo-callbacks.c:67 #: ../src/xo-file.c:691 msgid "Open PDF" msgstr "Otwórz PDF" #: ../src/xo-callbacks.c:75 #: ../src/xo-callbacks.c:148 #: ../src/xo-callbacks.c:247 #: ../src/xo-callbacks.c:401 #: ../src/xo-callbacks.c:1460 #: ../src/xo-file.c:699 msgid "All files" msgstr "Wszystkie pliki" #: ../src/xo-callbacks.c:78 #: ../src/xo-callbacks.c:404 #: ../src/xo-file.c:702 msgid "PDF files" msgstr "Pliki PDF" #: ../src/xo-callbacks.c:86 #: ../src/xo-callbacks.c:1483 msgid "Attach file to the journal" msgstr "Dołącz plik do dziennika" #. user aborted on save confirmation #: ../src/xo-callbacks.c:140 msgid "Open Journal" msgstr "Otwórz dziennik" #: ../src/xo-callbacks.c:151 #: ../src/xo-callbacks.c:250 msgid "Xournal files" msgstr "Pliki Xournal" #: ../src/xo-callbacks.c:200 #: ../src/xo-callbacks.c:295 #, c-format msgid "Error saving file '%s'" msgstr "Błąd zapisywania pliku '%s'" #: ../src/xo-callbacks.c:219 msgid "Save Journal" msgstr "Zapisz dziennik" #: ../src/xo-callbacks.c:276 #: ../src/xo-callbacks.c:422 #, c-format msgid "Should the file %s be overwritten?" msgstr "" #: ../src/xo-callbacks.c:375 msgid "Export to PDF" msgstr "Eksportuj do PDF" #: ../src/xo-callbacks.c:435 #, c-format msgid "Error creating file '%s'" msgstr "Błąd tworzenia pliku '%s'" #: ../src/xo-callbacks.c:1387 msgid "Pick a Paper Color" msgstr "Wybierz kolor papieru" #: ../src/xo-callbacks.c:1452 msgid "Open Background" msgstr "Otwórz tÅ‚o" #: ../src/xo-callbacks.c:1468 msgid "Bitmap files" msgstr "Pliki bitmapowe" #: ../src/xo-callbacks.c:1476 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDF pliki (jako mapy bitowe)" #: ../src/xo-callbacks.c:1506 #, c-format msgid "Error opening background '%s'" msgstr "Błąd otwarcia tÅ‚a '%s'" #: ../src/xo-callbacks.c:2052 msgid "Select Font" msgstr "Wybierz czcionkÄ™" #: ../src/xo-callbacks.c:2452 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" #: ../src/xo-support.c:90 #: ../src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nie można odnaleźć pliku pixmap: %s" #: ../src/xo-file.c:140 #: ../src/xo-file.c:172 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Nie można zapisać tÅ‚a '%s'. Kontynuacja mimo wszystko." #: ../src/xo-file.c:278 #, c-format msgid "Invalid file contents" msgstr "NieprawidÅ‚owa zawartość pliku" #: ../src/xo-file.c:428 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "Nie można otworzyć tÅ‚a '%s'. Ustawienie tÅ‚a na biaÅ‚o." #: ../src/xo-file.c:686 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Nie można otworzyć tÅ‚a '%s'.\n" "Wybierz inny plik?" #: ../src/xo-file.c:832 #, c-format msgid "Could not open background '%s'." msgstr "Nie można otworzyć tÅ‚a '%s'." #: ../src/xo-file.c:1081 msgid "Unable to render one or more PDF pages." msgstr "" #: ../src/xo-file.c:1488 msgid " the display resolution, in pixels per inch" msgstr " rozdzielczość ekranu w pikselach na cal" #: ../src/xo-file.c:1491 msgid " the initial zoom level, in percent" msgstr " poczÄ…tkowy poziom powiÄ™kszenia w procentach" #: ../src/xo-file.c:1494 msgid " maximize the window at startup (true/false)" msgstr " zmaksymalizować okno na starcie (prawda/faÅ‚sz)" #: ../src/xo-file.c:1497 msgid " start in full screen mode (true/false)" msgstr " uruchomić w trybie peÅ‚noekranowym (prawda/faÅ‚sz)" #: ../src/xo-file.c:1500 msgid " the window width in pixels (when not maximized)" msgstr " szerokość okna w pikselach (jeÅ›li nie zmaksymalizowano)" #: ../src/xo-file.c:1503 msgid " the window height in pixels" msgstr " wysokość okna w pikselach" #: ../src/xo-file.c:1506 msgid " scrollbar step increment (in pixels)" msgstr " wielkość skroku paska przewijania (w pikselach)" #: ../src/xo-file.c:1509 msgid " the step increment in the zoom dialog box" msgstr "" #: ../src/xo-file.c:1512 msgid " the multiplicative factor for zoom in/out" msgstr "" #: ../src/xo-file.c:1515 msgid " document view (true = continuous, false = single page)" msgstr " widok dokumentu (prawda = ciÄ…gÅ‚y, faÅ‚sz = jedna strona)" #: ../src/xo-file.c:1518 msgid " use XInput extensions (true/false)" msgstr " użyć rozszerzeÅ„ XInput (prawda/faÅ‚sz)" #: ../src/xo-file.c:1521 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " odrzuć zdarzenia bÄ™dÄ…ce wskaźnikiem podstawowym w trybie XInput (prawda/faÅ‚sz)" #: ../src/xo-file.c:1524 msgid " always map eraser tip to eraser (true/false)" msgstr "" #: ../src/xo-file.c:1527 msgid " buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)" msgstr "" #: ../src/xo-file.c:1530 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " automatycznie zaÅ‚adować plik.pdf.xoj zamiast plik.pdf (prawda/faÅ‚sz)" #: ../src/xo-file.c:1533 msgid " default path for open/save (leave blank for current directory)" msgstr " domyÅ›lna Å›cieżka do otwórz/zapisz (zostaw puste dla bieżącego katalogu)" #: ../src/xo-file.c:1536 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" #: ../src/xo-file.c:1539 msgid " minimum width multiplier" msgstr " minimalny mnożnik szerokość" #: ../src/xo-file.c:1542 msgid " maximum width multiplier" msgstr " maksymalny mnożnik szerokość" #: ../src/xo-file.c:1545 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" #: ../src/xo-file.c:1548 msgid " interface components in fullscreen mode, from top to bottom" msgstr " interfejs komponentów w trybie peÅ‚noekranowym, od góry do doÅ‚u" #: ../src/xo-file.c:1551 msgid " interface has left-handed scrollbar (true/false)" msgstr "" #: ../src/xo-file.c:1554 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " ukryć niektóre niechciane menu lub paski narzÄ™dzi (prawda/faÅ‚sz)" #: ../src/xo-file.c:1557 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" #: ../src/xo-file.c:1560 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " krycie markera (0 do 1, domyÅ›lnie 0,5)\n" " Ostrzeżenie: poziom krycia nie jest zapisywany w plikach xoj!" #: ../src/xo-file.c:1563 msgid " auto-save preferences on exit (true/false)" msgstr " automatyczne zapisywanie preferencji przy wyjÅ›ciu (prawda/faÅ‚sz)" #: ../src/xo-file.c:1566 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr "" #: ../src/xo-file.c:1570 msgid " the default page width, in points (1/72 in)" msgstr " domyÅ›lna szerokość strony , w punktach (1/72 in)" #: ../src/xo-file.c:1573 msgid " the default page height, in points (1/72 in)" msgstr " domyÅ›lna wysokość strony , w punktach (1/72 in)" #: ../src/xo-file.c:1576 msgid " the default paper color" msgstr " domyÅ›lny kolor papieru " #: ../src/xo-file.c:1581 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " domyÅ›lny styl papieru (zwykÅ‚y, w liniÄ™ z marginesem, w liniÄ™, w kratkÄ™)" #: ../src/xo-file.c:1584 msgid " apply paper style changes to all pages (true/false)" msgstr " zastosować zmian w stylu papieru do wszystkich stron (prawda/faÅ‚sz)" #: ../src/xo-file.c:1587 msgid " preferred unit (cm, in, px, pt)" msgstr " preferowana jednostka (cm, in, px, pt)" #: ../src/xo-file.c:1590 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" #: ../src/xo-file.c:1593 msgid " just-in-time update of page backgrounds (true/false)" msgstr "" #: ../src/xo-file.c:1596 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" #: ../src/xo-file.c:1599 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" #: ../src/xo-file.c:1603 msgid " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand)" msgstr " wybrane narzÄ™dzia na starcie (dÅ‚ugopis, gumka, marker, selectrect, vertspace, rÄ™cznie)" #: ../src/xo-file.c:1606 msgid " default pen color" msgstr " domyÅ›lny kolor dÅ‚ugopisu " #: ../src/xo-file.c:1611 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " domyÅ›lna grubość dÅ‚ugopisu (drobno = 1, Å›rednio = 2, grubo = 3)" #: ../src/xo-file.c:1614 msgid " default pen is in ruler mode (true/false)" msgstr " domyÅ›lny dÅ‚ugopis w trybie linijki (prawda/faÅ‚sz)" #: ../src/xo-file.c:1617 msgid " default pen is in shape recognizer mode (true/false)" msgstr " domyÅ›lny dÅ‚ugopis w trybie rozpoznawania ksztaÅ‚tu (prawda/faÅ‚sz)" #: ../src/xo-file.c:1620 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " domyÅ›lna grubość gumki (drobno = 1, Å›rednio = 2, grubo = 3)" #: ../src/xo-file.c:1623 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " domyÅ›lny tryb gumki (standardowy = 0, zamieć = 1, uderzeÅ„ = 2)" #: ../src/xo-file.c:1626 msgid " default highlighter color" msgstr " domyÅ›lny kolor markera" #: ../src/xo-file.c:1631 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " domyÅ›lna grubość markera (drobno = 1, Å›rednio = 2, grubo = 3)" #: ../src/xo-file.c:1634 msgid " default highlighter is in ruler mode (true/false)" msgstr " domyÅ›lny marker w trybie linijki (prawda/faÅ‚sz)" #: ../src/xo-file.c:1637 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "" #: ../src/xo-file.c:1640 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " przycisk 2 narzÄ™dzi (dÅ‚ugopis, gumka, marker, tekst, selectrect, vertspace, rÄ™cznie)" #: ../src/xo-file.c:1643 msgid " button 2 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "" #: ../src/xo-file.c:1646 msgid " button 2 brush color (for pen or highlighter only)" msgstr " przycisk 2 kolor pÄ™dzla (tylko dla pióra lub markera)" #: ../src/xo-file.c:1653 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " przycisk 2 grubość pÄ™dzela (tylko dÅ‚ugopis, gumka, lub marker)" #: ../src/xo-file.c:1657 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " przycisk 2 tryb linijki (prawda/faÅ‚sz) (tylko dla dÅ‚ugopisu lub markera)" #: ../src/xo-file.c:1661 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " przycisk 2 tryb rozpoznawania ksztaÅ‚tu (prawda/faÅ‚sz) (tylko dÅ‚ugopis lub marker)" #: ../src/xo-file.c:1665 msgid " button 2 eraser mode (eraser only)" msgstr " przycisk 2 tryb gumki (gumki tylko)" #: ../src/xo-file.c:1668 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr " przycisk 3 narzÄ™dzi (dÅ‚ugopis, gumka, marker, tekst, selectrect, vertspace, rÄ™cznie)" #: ../src/xo-file.c:1671 msgid " button 3 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "" #: ../src/xo-file.c:1674 msgid " button 3 brush color (for pen or highlighter only)" msgstr " przycisk 3 kolor pÄ™dzla (tylko dla dÅ‚ugopisu lub markera)" #: ../src/xo-file.c:1681 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " przycisk 3 grubość pÄ™dzla (tylko dÅ‚ugopis, gumka, lub marker)" #: ../src/xo-file.c:1685 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " przycisk 3 tryb linijki (prawda/faÅ‚sz) (tylko dla dÅ‚ugopisu lub markera)" #: ../src/xo-file.c:1689 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " przycisk 3 tryb rozpoznawywania ksztaÅ‚tu (prawda/faÅ‚sz) (tylko dÅ‚ugopis lub marker)" #: ../src/xo-file.c:1693 msgid " button 3 eraser mode (eraser only)" msgstr " przycisk 3 tryb gumka (gumki tylko)" #: ../src/xo-file.c:1697 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " grubość poszczególnych dÅ‚ugopisów (w punktach, 1 pt = 1/72 in)" #: ../src/xo-file.c:1703 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " grubość poszczególnych gumek (w punktach, 1 pt = 1/72 in)" #: ../src/xo-file.c:1708 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " grubość poszczególnych markerów (w punktach, 1 pt = 1/72 w)" #: ../src/xo-file.c:1713 msgid " name of the default font" msgstr " nazwa domyÅ›lnej czcionki" #: ../src/xo-file.c:1716 msgid " default font size" msgstr " domyÅ›lny rozmiar czcionki" #: ../src/xo-file.c:1894 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Plik konfiguracyjny Xournal.\n" " Plik ten jest generowany automatycznie podczas zapisywania preferencji.\n" " Należy zachować ostrożność podczas edycji tego pliku rÄ™cznie.\n" #: ../src/xo-misc.c:1294 #, c-format msgid " of %d" msgstr " z %d" #: ../src/xo-misc.c:1299 msgid "Background" msgstr "TÅ‚o" #: ../src/xo-misc.c:1307 #, c-format msgid "Layer %d" msgstr "Warstwa %d" #: ../src/xo-misc.c:1431 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: ../src/xo-misc.c:1683 #, c-format msgid "Save changes to '%s'?" msgstr "Zapisać zmiany w '%s'?" #: ../src/xo-misc.c:1684 msgid "Untitled" msgstr "NiezatytuÅ‚owany" xournal-0.4.8/po/ja.gmo0000644000175000017500000005346512243723425014400 0ustar aurouxaurouxÞ•Üuœp q|E…ŠË-V4„+¹IåL/I|3ÆSú<N#‹?¯Fïa63˜SÌ< #]?FÁaZj>Å;@S2n=¡@ß? `*s5ž8Ô8 7F B~ 6Á ]ø <V!D“!hØ!<A"1~"o°"5 #,V#ƒ##·#Ñ#Ø# Þ#%ÿ#f%$'Œ$-´$,â$%8(%+a%#%*±%*Ü%&0$&=U&B“&:Ö&#'B5'x'{'Š' ¡' ¯' ¹'Ç'Û'ö'( (+(1(6(H(Z(r(w(4—(<Ì(3 )=)[)b)f)n)}) ‘) )«) º)FÈ)**&*?*]*u*Ž* ¥*³* ¸* Ã*Ï*Ô* Ú* å*ï* ÷*++ + *+:7+r+ ˆ+’+ ¨+ ³+¿+Ç+Î+Ñ+Õ+æ+ö+ , ,,0,5, E,R,[, b,l, †, ’, , ©, µ, Â,Ï,Õ, Ù,æ, í,û, - -*->-P-T-Y-`-f- k-x- Ž-š-©- º-È-Ú-ê-ù-..!.2."A.d.z. ..“. ¥.¯.'Å.í.ò. û.///#/ +/ 8/F/M/U/^/e/l/ s// –/ £/°/¶/ ¾/Ê/Ù/ ß/ë/ô/ ú/ 00 0%0<0 M0 X0 c0m0v0|00—0¦0¿0 Ñ0Û0 í0ù0ÿ0111"1 (141D1J1Q1 X1e1l1u1}1 …1 “1Ÿ1¦1«1 ²1¼1 Ã1Î1 Õ1 â1ì1 ô12 2 22 2 !2.272>2 E2AQ2 “3 ¡3F«3¬ò3IŸ4Ié4435Ph5C¹5Dý57B6mz6Gè6407Fe7L¬7cù77]8m•8G94K9F€9LÇ9c:kx:Lä:41;f;ƒ;=;CÛ;7<UW<­<4¾<:ó<..=I]=P§=;ø=I4>‰~>O?FX?yŸ?T@4n@’£@16A"hA.‹A.ºAéAB B# B?1BwqB4éBICFhC¯C5ÉC4ÿC4DTD@rD9³D6íDI$ELnEC»E"ÿEL"FoFrF"zFF±FÊFçF-G5G1RG„G£G§G«GÃG'ÛG H( HN6HC…HCÉH1 I ?I LIYIiI|I ’IŸI¶IÓIYóI MJZJ%qJ1—J"ÉJ(ìJ%K;KTKXKkKK…K‰K K³K»KËKåKìKÿKgL'wLŸL²LÎLÕL ÜLéLíLôL"ûL"M"AMdMtM‡MM¤MºM ÓM àMíM/ýM!-NON"nN‘N ¢N°N ÇNÔNÛNìNóNO(O 8OEO%YOO ƒO O›O¢O©O%ÂOèOþO P P)P%:P!`P‚P˜P®P ÇPÔPñPQ &Q3QJQNQ mQwQB†Q ÉQÖQéQýQRRR !R.RBRFRMR TR_RwRR+“R¿RÐR çRòR.S2SOS`SwS ‹S™S¹S ÍSØS7ïS'TAT^TrT†T šT ¨T³TÍT"áTUU2UCU`U qUU –U ¡U¯U·U¿UÜU äUïU÷UÿUV'V/V@V QV _VjV rV }VˆV V›V£V «V¹VÁVÉV ÑVÛV ãV íV øV W W W *WÕYÌ‘l™Á@µ¹÷\mÂæJ=¯1pÇ5j›Ýgºñs r?…áÖî·.Xý#ûoÅ–‹Dâÿþ6 šnˆS§dW*ÍÙ Œ å¼Ü~ÆEcÒË`»ðž !ü”¬V,¶9©xôÞ±’—Ãw¢]óT €|bFÄQÊ&äÈv/¤e‰ù•Ÿík“£UM"†yÐÀƒ 3 Ï­ç°2ׂë¿)ï„AØKBèhìŠÎ{®Žã(ò‡¥P¾Z$¦atzÑêÔiÚõI´öÛ-ßO>œ³Ó;7N¸ %[4 ú^¨_< ª¡H}àéL½øqRG«0'C² :u+˜8Éf Layer: Page Use the pencil from cursor theme instead of a color dot (true/false) Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) force PDF rendering through cairo (slower but nicer) (true/false) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! ignore events from other devices while drawing (true/false) include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error opening image '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsImageImage filesInsert ImageInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPencil CursorPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Image_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: Xournal 0.4.7 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-08-02 22:58+0900 PO-Revision-Date: 2013-08-04 13:03+0900 Last-Translator: Hiroshi Saito Language-Team: Japanese Language: ja_JP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit レイヤー:ページ カーソルを色ã¤ãã®ç‚¹ã§ã¯ãªã鉛筆ã«ã™ã‚‹(true/false) Xournal設定ファイル ã“ã®ãƒ•ァイルã¯è¨­å®šã‚’ä¿å­˜ã™ã‚‹éš›ã«è‡ªå‹•çš„ã«ä½œæˆã•れã¾ã™ã€‚ 手動ã§ã®å¤‰æ›´ã¯æ³¨æ„ã—ã¦è¡Œãªã£ã¦ãã ã•ã„。 常ã«ãƒ†ãƒ¼ãƒ«ã‚¹ã‚¤ãƒƒãƒã‚’消ã—ゴムã«å¯¾å¿œã•ã›ã‚‹(true/false) 用紙スタイルã®å¤‰æ›´ã‚’ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã«é©ç”¨(true/false) 終了時ã«è¨­å®šã‚’自動ä¿å­˜ã™ã‚‹(true/false) filename.pdfã§ã¯ãªãfilename.pdf.xojを自動的ã«èª­ã¿è¾¼ã‚€(true/false) libgnomeprintã«æ¸¡ã™èƒŒæ™¯PDFã®ãƒ“ットマップ解åƒåº¦(dpi) ghostscriptã«æ¸¡ã™èƒŒæ™¯PS/PDFã®ãƒ“ットマップ解åƒåº¦(dpi) ボタン2ブラシ色(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン2ã®ãƒ–ラシをメインブラシã¨åŒã˜ã«ã™ã‚‹(true/false)(ä»–ã®è¨­å®šã‚’上書ãã—ã¾ã™) ボタン2ブラシ太ã•(ペン, 消ã—ゴム, ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン2消ã—ゴムモード(消ã—ゴムã®ã¿) ボタン2定è¦ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン2図形èªè­˜ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン2割当(pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) ボタン3ブラシ色(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン3ã®ãƒ–ラシをメインブラシã¨åŒã˜ã«ã™ã‚‹(true/false)(ä»–ã®è¨­å®šã‚’上書ãã—ã¾ã™) ボタン3ブラシ太ã•(ペン, 消ã—ゴム, ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン3消ã—ゴムモード(消ã—ゴムã®ã¿) ボタン3定è¦ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン3図形èªè­˜ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿) ボタン3割当(pen, eraser, highlighter, text, selectregion, selectrect, vertspace, hand, image) ボタン2ã¨3をマッピング切り替ãˆã«ä½¿ã†(ã„ãã¤ã‹ã®ã‚¿ãƒ–ãƒ¬ãƒƒãƒˆã§æœ‰ç”¨)(true/false) 標準消ã—ゴムモード(標準 = 0, 修正液 = 1, ストローク = 2) 標準消ã—ゴム太ã•(ç´° = 1, 中 = 2, 太 = 3) 標準フォントサイズ 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆè‰² 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’定è¦ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false) 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’図形èªè­˜ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false) 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆå¤ªã•(ç´° = 1, 中 = 2, 太 = 3) é–‹ã/ä¿å­˜ã®éš›ã®ãƒ‡ãƒ•ォルトパス(空欄ã§ã‚«ãƒ¬ãƒ³ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª) 標準ペン色 標準ペンを定è¦ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false) 標準ペンを図形èªè­˜ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false) 標準ペン太ã•(ç´° = 1, 中 = 2, 太 = 3) XInputモードã§ã®Core Pointerイベントを無視ã™ã‚‹(true/false) ドキュメント表示方法(true = 連続ページ, false = å˜ä¸€ãƒšãƒ¼ã‚¸) cairoã§PDFã‚’æç”»ã™ã‚‹(é…ã„ãŒé«˜å“質)(true/false) ä¸å¿…è¦ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚„ツールãƒãƒ¼ã®é …目を隠ã™(true/false) ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ä¸é€æ˜Žåº¦(0 ã‹ã‚‰ 1, デフォルト㯠0.5) 注æ„: ä¸é€æ˜Žåº¦ã¯ xoj ファイルã«ã¯ä¿å­˜ã•れã¾ã›ã‚“! æç”»ä¸­ã¯ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’無視ã™ã‚‹(true/false) å°åˆ·ã¨PDFエクスãƒãƒ¼ãƒˆã®æ™‚ã€ç½«ç·šã‚’å«ã‚ã‚‹(true/false) 表示ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(上ã‹ã‚‰ä¸‹ã«) 使用ã§ãる値: drawarea menu main_toolbar pen_toolbar statusbar フルスクリーンモードã§è¡¨ç¤ºã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(上ã‹ã‚‰ä¸‹ã«) スクロールãƒãƒ¼ã‚’å·¦å´ã«ã™ã‚‹(true/false) éš ã™é …ç›®(自己責任ã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã—ã¦ãã ã•ã„!) é …ç›®åã®ãƒªã‚¹ãƒˆã¯xo-interface.cã®ã‚½ãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„ èƒŒæ™¯ã®æ›´æ–°ã‚’漸進的ã«è¡Œã†(true/false) èµ·å‹•æ™‚ã«æœ€å¤§åŒ–(true/false) 最大筆圧ã§ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å¹…ã®å€çއ 最å°ç­†åœ§ã§ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å¹…ã®å€çއ 標準フォントã®åå‰/%d/n 使用ã™ã‚‹å˜ä½(cm, in, px, pt) スクロールãƒãƒ¼ã®ä¸€ã‚¹ãƒ†ãƒƒãƒ—増加é‡(ピクセル) 起動時ã«é¸æŠžã•れã¦ã„るツール(pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image) フルスクリーンモードã§èµ·å‹•(true/false) 標準ページ高ã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ) 標準ページ幅(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ) 標準ページ背景色 標準用紙スタイル(plain, lined, ruled, graph) ディスプレイ解åƒåº¦(ピクセル/インãƒ) 起動時ズームレベル(%) 拡大/縮å°ã®å¤‰åŒ–å€çއ ズームダイアログボックスã®ä¸€ã‚¹ãƒ†ãƒƒãƒ—å¢—åŠ é‡ éžæœ€å¤§åŒ–時ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®é«˜ã•(ピクセル) éžæœ€å¤§åŒ–時ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å¹…(ピクセル) 消ã—ゴムã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ) ãƒã‚¤ãƒ©ã‚¤ãƒˆã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ) ペンã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ) XInput拡張を使ã†(true/false) 筆圧感知を用ã„ã¦ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®å¤ªã•を制御ã™ã‚‹(true/false)A4A4(横)設定を自動ã§ä¿å­˜ã™ã‚‹(_u)Xournalã«ã¤ã„ã¦ã™ã¹ã¦ã®ãƒ•ァイルPDFã«æ³¨é‡ˆã‚’付ã‘ã‚‹(_F)å…¨ã¦ã®ãƒšãƒ¼ã‚¸ã«é©ç”¨(_T)ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ã«æ·»ä»˜ã™ã‚‹pdf.xojを自動読ã¿è¾¼ã¿ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã‚’背景ã«ã™ã‚‹(_h)ビットマップファイル黒é’ボタン2ã®è¨­å®š(_2)ボタン3ã®è¨­å®š(_3)マッピング切り替ãˆã‚’有効化コピー背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ 別ã®ãƒ•ァイルを開ãã¾ã™ã‹?背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚背景を白ã«ã—ã¾ã™ã€‚背景'%s'を書ãè¾¼ã‚ã¾ã›ã‚“ãŒã€å‡¦ç†ã‚’続行ã—ã¾ã™ã€‚pixmapファイル'%s'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。カスタム切りå–ã‚Šæ¨™æº–ã«æˆ»ã™æ¨™æº–消ã—ゴム標準ãƒã‚¤ãƒ©ã‚¤ãƒˆæ¨™æº–ペン標準テキスト(_x)標準ã®ç”¨ç´™ã«ã™ã‚‹(_P)ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ã‚’削除(_y)背景レイヤã¸ã®æ›¸ãè¾¼ã¿ã¯ã§ãã¾ã›ã‚“。 レイヤ1ã¸åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚消ã—ゴム消ã—ゴム設定(_n)'%s'ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚背景'%s'ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ç”»åƒ'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚'%s'ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚PDFã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆç´°æœ€åˆã®ãƒšãƒ¼ã‚¸ãƒ•ルスクリーンç°ç·‘ãƒãƒ³ãƒ‰ãƒ„ール(_a)ãƒãƒ³ãƒ‰ãƒ„ール高ã•:ãƒã‚¤ãƒ©ã‚¤ãƒˆãƒã‚¤ãƒ©ã‚¤ãƒˆè¨­å®š(_i)ç”»åƒç”»åƒãƒ•ァイル画åƒã‚’æŒ¿å…¥ä¸æ­£ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³å¼•æ•°ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚ 使用方法: %s [ファイルå.xoj] ファイルã®å†…容ãŒä¸æ­£ã§ã™ã€‚最後ã®ãƒšãƒ¼ã‚¸å·¦å´ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼è–„é’é»„ç·‘ãƒžã‚¼ãƒ³ã‚¿ä¸­ç„¡åŠ¹æ–°è¦æœ€å¾Œã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_E)ç›´å¾Œã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_A)ç›´å‰ã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_B)次ã®ãƒšãƒ¼ã‚¸æ¨™æº–ã®ã‚µã‚¤ã‚ºæ¨™æº–サイズ(100%)é–‹ã背景ã®èª­ã¿è¾¼ã¿ã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ã‚’é–‹ãPDFã‚’é–‹ãオレンジPDFファイルPS/PDFファイル(ビットマップã¨ã—ã¦)ページã®é«˜ã•ã‚’åˆã‚ã›ã‚‹ãƒšãƒ¼ã‚¸ã®å¹…ã‚’åˆã‚ã›ã‚‹ãƒšãƒ¼ã‚¸ã®å¹…ã‚’åˆã‚ã›ã‚‹(_W)用紙設定(_z)背景色(_C)用紙スタイル(_S)貼り付ã‘ペンペン設定(_O)鉛筆カーソルを鉛筆ã«ã™ã‚‹ç”¨ç´™ã®è‰²ã‚’é¸ã¶å‰ã®ãƒšãƒ¼ã‚¸å°åˆ·è¨­å®šç½«ç·šã®å°åˆ·(_R)最近開ã„ãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ(_u)赤やり直ã—定è¦(_l)定è¦ä¿å­˜ã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ã‚’ä¿å­˜å¤‰æ›´ã‚’'%s'ã«ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿãƒ•ォントã®é¸æŠžé ˜åŸŸé¸æŠž(_g)çŸ©å½¢é¸æŠžé ˜åŸŸé¸æŠžçŸ©å½¢é¸æŠž(_R)ç¾åœ¨ã®è¨­å®šã‚’標準ã«ã™ã‚‹(_f)ç¾åœ¨ã®è¨­å®šã‚’標準ã«ã™ã‚‹ç”¨ç´™ã‚µã‚¤ã‚ºè¨­å®šå€çŽ‡ã‚’æŒ‡å®šã™ã‚‹ãƒšãƒ¼ã‚¸ç•ªå·ã‚’指定図形èªè­˜ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ç°¡ç•¥åŒ–(_M)'%s'を上書ãã—ã¾ã™ã‹?標準用紙サイズ:テキストフォント設定(_F)太フルスクリーンモードレターレター(横)ã„ãã¤ã‹ã®PDFã®ãƒšãƒ¼ã‚¸ã‚’æç”»ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚å…ƒã«æˆ»ã™ã‚¿ã‚¤ãƒˆãƒ«ãªã—XInputを使ã†(_X)行間を変ãˆã‚‹ç™½å¹…:XournalXournal - %sXournalファイル黄拡大縮å°ã‚ºãƒ¼ãƒ :Xournalã«ã¤ã„ã¦(_A)色(_C)連続ページ(_C)ç¾åœ¨ã®ãƒ–ラシをä¿å­˜ã—ã¦ä½¿ã†(_C)標準ペン(_D)ページを削除(_D)編集(_E)消ã—ゴム(_E)ãƒ†ãƒ¼ãƒ«ã‚¹ã‚¤ãƒƒãƒæ¶ˆã—ゴムを使ã†(_E)PDFã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ(_E)ファイル(_F)最åˆã®ãƒšãƒ¼ã‚¸(_F)平らã«ã™ã‚‹(_F)ヘルプ(_H)ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ã‚’éš ã™(_H)ãƒã‚¤ãƒ©ã‚¤ãƒˆ(_H)ç”»åƒ(_I)最後ã®ãƒšãƒ¼ã‚¸(_L)常ã«ãƒ¡ã‚¤ãƒ³ãƒ–ラシã¨åŒã˜ãƒ–ラシを使ã†(_L)背景を読ã¿è¾¼ã‚€(_L)æ–°è¦ãƒ¬ã‚¤ãƒ¤ã‚’作æˆ(_N)次ã®ãƒšãƒ¼ã‚¸(_N)å˜ä¸€ãƒšãƒ¼ã‚¸(_O)オプション(_O)ページ(_P)ペン(_P)筆圧感知を使ã†(_P)å‰ã®ãƒšãƒ¼ã‚¸(_P)背景を漸進的ã«å†æç”»(_P)設定をä¿å­˜(_S)å€çŽ‡ã‚’æŒ‡å®šã™ã‚‹(_S)図形èªè­˜(_S)上ã®ãƒ¬ã‚¤ãƒ¤ã‚’表示(_S)テキスト(_T)ツール(_T)行間を変ãˆã‚‹(_V)表示(_V)ズーム(_Z)é’(_b)é’(_b)ストロークを削除(_d)ç´°(_f)方眼(_g)ç·‘(_g)ç·‘(_g)ç¸¦ç·šä»˜ãæ¨ªç½«(_l)マゼンタ(_m)中(_m)オレンジ(_o)オレンジ(_o)ピンク(_p)無地(_p)赤(_r)横罫(_r)標準(_s)太(_t)極細(_v)白(_w)白(_w)修正液(_w)黄(_y)黄(_y)é»’(_k)センãƒç°(_a)インãƒè–„é’(_u)黄緑(_e)ãã®ä»–...ピクセルãƒã‚¤ãƒ³ãƒˆæ¥µå¤ª(_y)xournal-0.4.8/po/es.po0000664000175000017500000007434211773660334014256 0ustar aurouxauroux# Spanish translations for xournal package # This file is distributed under the same license as the xournal package. # # Ãlvaro, 2010 # proofread and corrected by Borja Barriopedro Perona msgid "" msgstr "" "Project-Id-Version: xournal 0.4.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: 2010-08-08 17:29+0200\n" "Last-Translator: Ãlvaro\n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "Parámetros de línea de comando inválidos.\n" "Uso: %s [archivo.xoj]\n" #: src/main.c:291 src/xo-callbacks.c:105 src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "Se ha producido un error al abrir el archivo «%s»" #: src/xo-interface.c:350 src/xo-interface.c:2951 src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_Archivo" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "Anotar un archivo _PDF" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Documentos _Recientes" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "5" #: src/xo-interface.c:427 msgid "6" msgstr "6" #: src/xo-interface.c:431 msgid "7" msgstr "7" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Opciones de impresión" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Exportar a PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "_Editar" #: src/xo-interface.c:516 msgid "_View" msgstr "_Ver" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Continuo" #: src/xo-interface.c:529 msgid "_One Page" msgstr "_Una página" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "_Ver pantalla completa" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "_Zoom" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "Anchura de la _página" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "_Definir zoom" #: src/xo-interface.c:600 msgid "_First Page" msgstr "_Principio" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "Página _anterior" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "Página _siguiente" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "_Final" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "_Mostrar la capa" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Ocultar la capa" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Página" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Página nueva _antes" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Página nueva _después" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Página nueva al _final" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "_Eliminar página" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "_Nueva capa" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "Eli_minar capa" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "A_planar" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "_Tamaño del _papel" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "_Color del papel" #: src/xo-interface.c:721 msgid "_white paper" msgstr "papel _blanco" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "papel _amarillo" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "papel _rosa" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "papel _naranja" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "papel a_zul" #: src/xo-interface.c:751 msgid "_green paper" msgstr "papel _verde" #: src/xo-interface.c:757 src/xo-interface.c:1025 msgid "other..." msgstr "_otro..." #: src/xo-interface.c:761 src/xo-interface.c:797 src/xo-interface.c:1029 #: src/xo-interface.c:1270 src/xo-interface.c:1346 msgid "NA" msgstr "" #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "E_stilo del papel" #: src/xo-interface.c:773 msgid "_plain" msgstr "_liso" #: src/xo-interface.c:779 msgid "_lined" msgstr "_pautado" #: src/xo-interface.c:785 msgid "_ruled" msgstr "_reglado" #: src/xo-interface.c:791 msgid "_graph" msgstr "_cuadriculado" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Ap_lica a todas las páginas" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "Ca_rga un fondo" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Capt_ura de pantalla del fondo" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "_Papel predeterminado" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Def_inir como predeterminado" #: src/xo-interface.c:836 msgid "_Tools" msgstr "_Herramientas" #: src/xo-interface.c:843 src/xo-interface.c:1206 src/xo-interface.c:1282 msgid "_Pen" msgstr "_Lápiz" #: src/xo-interface.c:852 src/xo-interface.c:1212 src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Goma" #: src/xo-interface.c:861 src/xo-interface.c:1218 src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Subrayador fluorescente" #: src/xo-interface.c:870 src/xo-interface.c:1224 src/xo-interface.c:1300 msgid "_Text" msgstr "_Texto" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "Reconocimiento de _formas" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "_Regla" #: src/xo-interface.c:903 src/xo-interface.c:1230 src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "Seleccionar una regi_ón" #: src/xo-interface.c:912 src/xo-interface.c:1236 src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "Seleccionar un r_ectángulo" #: src/xo-interface.c:921 src/xo-interface.c:1242 src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "Espacio _vertical" #: src/xo-interface.c:930 src/xo-interface.c:1248 src/xo-interface.c:1324 msgid "H_and Tool" msgstr "Herramienta de _mano" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Color" #: src/xo-interface.c:954 msgid "blac_k" msgstr "_negro" #: src/xo-interface.c:960 msgid "_blue" msgstr "a_zul" #: src/xo-interface.c:966 msgid "_red" msgstr "_rojo" #: src/xo-interface.c:972 msgid "_green" msgstr "_verde" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "_gris" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "azul _cielo" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "v_erde claro" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_magenta" #: src/xo-interface.c:1007 msgid "_orange" msgstr "naran_ja" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "_amarillo" #: src/xo-interface.c:1019 msgid "_white" msgstr "_blanco" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "Opc_iones del lápiz" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "_muy fino" #: src/xo-interface.c:1047 src/xo-interface.c:1078 src/xo-interface.c:1126 msgid "_fine" msgstr "_fino" #: src/xo-interface.c:1053 src/xo-interface.c:1084 src/xo-interface.c:1132 msgid "_medium" msgstr "_mediano" #: src/xo-interface.c:1059 src/xo-interface.c:1090 src/xo-interface.c:1138 msgid "_thick" msgstr "_grueso" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "m_uy grueso" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Opcio_nes de la goma" #: src/xo-interface.c:1101 msgid "_standard" msgstr "_estándar" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "_corrector líquido" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_suprimir los trazos" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Opciones del subrayador fl_uorescente" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "Fuente del te_xto..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "Lápi_z predeterminado" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Gom_a predeterminada" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Su_brayador fluorescente predeterminado" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Text_o predeterminado" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Convertirlo en _predeterminado" #: src/xo-interface.c:1180 msgid "_Options" msgstr "_Opciones" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "Utilizar _XInput" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Utilizar la _goma del lápiz" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "Sensibilidad a la _presión" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "Mapeo del botón _2" #: src/xo-interface.c:1258 src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "Vincular al pincel _primario" #: src/xo-interface.c:1264 src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Copia del pincel actual" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "Mapeo del botón _3" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "Los botones _cambian el mapeo" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "_Fondos progresivos" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "_Imprimir las líneas del papel" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "Cargar _automáticamente pdf.xoj" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "_Barra de desplazamiento para zurdos" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "_Menús cortos" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Au_to-guardar las preferencias" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "G_uardar las preferencias" #: src/xo-interface.c:1393 msgid "_Help" msgstr "Ay_uda" #: src/xo-interface.c:1404 msgid "_About" msgstr "_Acerca de" #: src/xo-interface.c:1417 msgid "Save" msgstr "Guardar" #: src/xo-interface.c:1422 msgid "New" msgstr "Nuevo" #: src/xo-interface.c:1427 msgid "Open" msgstr "Abrir" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Cortar" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Copiar" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Pegar" #: src/xo-interface.c:1463 msgid "Undo" msgstr "Deshacer" #: src/xo-interface.c:1468 msgid "Redo" msgstr "Rehacer" #: src/xo-interface.c:1481 msgid "First Page" msgstr "Principio" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "Página anterior" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Página siguiente" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Final" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Alejar" #: src/xo-interface.c:1514 src/xo-interface.c:3045 msgid "Page Width" msgstr "Anchura de la página" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "Acercar" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Tamaño normal" #: src/xo-interface.c:1530 src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Definir el zoom" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "Conmutar la pantalla completa" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "Lápiz" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Lápiz" #: src/xo-interface.c:1559 src/xo-interface.c:1565 msgid "Eraser" msgstr "Goma" #: src/xo-interface.c:1570 src/xo-interface.c:1576 msgid "Highlighter" msgstr "Subrayador fluorescente" #: src/xo-interface.c:1581 src/xo-interface.c:1587 msgid "Text" msgstr "Texto" #: src/xo-interface.c:1592 src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Reconocimiento de formas" #: src/xo-interface.c:1601 src/xo-interface.c:1607 msgid "Ruler" msgstr "Regla" #: src/xo-interface.c:1618 src/xo-interface.c:1624 msgid "Select Region" msgstr "Seleccionar una región" #: src/xo-interface.c:1629 src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Seleccionar un rectángulo" #: src/xo-interface.c:1640 src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Espacio vertical" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Herramienta de mano" #: src/xo-interface.c:1670 src/xo-interface.c:1674 msgid "Default" msgstr "Predeterminado" #: src/xo-interface.c:1678 src/xo-interface.c:1681 msgid "Default Pen" msgstr "Lápiz predeterminado" #: src/xo-interface.c:1692 src/xo-interface.c:1700 msgid "Fine" msgstr "Fino" #: src/xo-interface.c:1705 src/xo-interface.c:1713 msgid "Medium" msgstr "Mediano" #: src/xo-interface.c:1718 src/xo-interface.c:1726 msgid "Thick" msgstr "Grueso" #: src/xo-interface.c:1745 src/xo-interface.c:1752 msgid "Black" msgstr "Negro" #: src/xo-interface.c:1757 src/xo-interface.c:1764 msgid "Blue" msgstr "Azul" #: src/xo-interface.c:1769 src/xo-interface.c:1776 msgid "Red" msgstr "Rojo" #: src/xo-interface.c:1781 src/xo-interface.c:1788 msgid "Green" msgstr "Verde" #: src/xo-interface.c:1793 src/xo-interface.c:1800 msgid "Gray" msgstr "Gris" #: src/xo-interface.c:1805 src/xo-interface.c:1812 msgid "Light Blue" msgstr "Azul cielo" #: src/xo-interface.c:1817 src/xo-interface.c:1824 msgid "Light Green" msgstr "Verde claro" #: src/xo-interface.c:1829 src/xo-interface.c:1836 msgid "Magenta" msgstr "Magenta" #: src/xo-interface.c:1841 src/xo-interface.c:1848 msgid "Orange" msgstr "Naranja" #: src/xo-interface.c:1853 src/xo-interface.c:1860 msgid "Yellow" msgstr "Amarillo" #: src/xo-interface.c:1865 src/xo-interface.c:1872 msgid "White" msgstr "Blanco" #: src/xo-interface.c:1919 msgid " Page " msgstr " Página " #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Definir el número de página" #: src/xo-interface.c:1931 msgid " of n" msgstr " de n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Capa: " #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Establecer el tamaño del papel" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Tamaños de papel estándar:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (apaisado)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "Carta norteamericana" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "Carta norteamericana (apaisada)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Personalizada" #: src/xo-interface.c:2856 msgid "Width:" msgstr "Anchura:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "Altura:" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "in" #: src/xo-interface.c:2879 msgid "pixels" msgstr "píxels" #: src/xo-interface.c:2880 msgid "points" msgstr "puntos" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "Acerca de Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Creado por Denis Auroux\n" "y otros colaboradores\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "Zoom: " #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Tamaño normal (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Altura de la página" #. user aborted on save confirmation #: src/xo-callbacks.c:51 src/xo-file.c:665 msgid "Open PDF" msgstr "Abrir un archivo PDF" #: src/xo-callbacks.c:59 src/xo-callbacks.c:132 src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 src/xo-callbacks.c:1444 src/xo-file.c:673 msgid "All files" msgstr "Todos los archivos" #: src/xo-callbacks.c:62 src/xo-callbacks.c:388 src/xo-file.c:676 msgid "PDF files" msgstr "Archivos PDF" #: src/xo-callbacks.c:70 src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "Adjuntar el archivo al diario" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Abrir un diario" #: src/xo-callbacks.c:135 src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Archivos de Xournal" #: src/xo-callbacks.c:184 src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "Se ha producido un error al guardar el archivo «%s»" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Guardar el diario" #: src/xo-callbacks.c:260 src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Desea sobreescribir el archivo «%s»?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Exportar a PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Se ha producido un error al crear el archivo «%s»" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "Color del papel" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Abrir un fondo" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "Archivos de mapa de bits" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "Archivos PS/PDF (como mapas de bits)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "Se ha producido un error al abrir el fondo «%s»" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Seleccionar fuente" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "No se puede dibujar en la capa de fondo.\n" " Se conmutará a la capa 1." #: src/xo-support.c:90 src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No se ha encontrado el archivo de mapa de píxels «%s»" #: src/xo-file.c:122 src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "No se ha podido guardar el fondo «%s». Continuando igualmente." #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "Los contenidos del archivo no son válidos" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "No se ha podido abrir el fondo «%s». Se usará fondo en blanco." #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "No se ha podido abrir el fondo «%s».\n" "¿Seleccionar otro?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "No se ha podido abrir el fondo «%s»." #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "No se ha podido procesar una o más páginas del archivo PDF." #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr " la resolución de la pantalla, en píxels por pulgada" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr " el nivel inicial de zoom, en porcentaje" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr " maximizar la ventana al inicio (true/false)" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr " iniciar en modo pantalla completa (true/false)" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr " la anchura de la ventana en píxels (cuando no está maximizada)" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr " la altura de la ventana en píxels" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr " incremento unitario de la barra de desplazamiento (en píxels)" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr " incremento unitario del cuadro de diálogo de zoom" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr " factor multiplicativo para acercar/alejar el zoom" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr " vista del documento (true = continua, false = una sola página)" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr " usar extensiones de XInput (true/false)" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " descartar sucesos del puntero principal en modo XInput (true/false)" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr " siempre asociar la punta de goma a la goma (true/false)" #: src/xo-file.c:1478 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " los botones 2 y 3 cambian la función del botón principal en lugar de" " dibujar (útil para algunas tabletas) (true/false)" #: src/xo-file.c:1481 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr " cargar automáticamente archivo.pdf.xoj en vez de archivo.pdf (true/false)" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr " ruta por defecto para abrir/guardar (dejar en blanco para el directorio actual)" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr " usar información de presión para controlar el grosor de los trazos de lápiz (true/false)" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr " multiplicador de la anchura mínima (el trazo más fino es x veces el trazo normal)" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr " multiplicador de la anchura máxima (el trazo más grueso es x veces el trazo normal)" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " componentes de la interfaz, de arriba a abajo\n" " valores válidos: drawarea menu main_toolbar pen_toolbar statusbar\n" " que corresponden al área de dibujo, el menú, la barra principal, la" " barra de herramientas y la barra de estado respectivamente" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr " componentes de la interfaz en modo de pantalla completa" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr " la interfaz tiene barra de desplazamiento para zurdos (true/false)" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " esconder algunos elementos poco usados del menú y la barra (true/false)" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " elementos de la interfaz que se esconderán (editar con cuidado)\n" " los nombres están disponibles en el archivo xo-interface.c del código fuente" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " opacidad del subrayador fluorescente (0 a 1, valor por defecto 0.5)\n" " precaución: el nivel de opacidad no se guarda en los archivos .xoj" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr " auto-guardar preferencias a la salida (true/false)" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr " anchura por defecto de la página en puntos (1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr " altura por defecto de la página en puntos (1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1524 msgid " the default paper color" msgstr " color por defecto del papel" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "" " estilo por defecto del papel (plain, lined, ruled o graph, que se" " corresponden con liso, pautado, reglado y cuadriculado)" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr " aplicar cambios de estilo de papel a todas las páginas (true/false)" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr " unidad preferida (cm, in, px, pt)" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr " incluir las líneas del papel al imprimir o exportar a PDF (true/false)" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr " actualización en tiempo real de los fondos de página (true/false)" #: src/xo-file.c:1544 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr " resolución de los mapas de bits de los fondos PS/PDF generados con ghostscript (puntos por pulgada)" #: src/xo-file.c:1547 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr " resolución de los mapas de bits de los fondos PDF al imprimir con libgnomeprint (puntos por pulgada)" #: src/xo-file.c:1551 msgid "" " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, " "hand)" msgstr "" " herramienta seleccionada al iniciar (pen, eraser, highlighter, selectrect," " vertspace, hand, que se corresponden con lápiz, goma, subrayador, seleccionar" " rectángulo, espacio vertical, mano)" #: src/xo-file.c:1554 msgid " default pen color" msgstr " color por defecto del lápiz" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " grosor por defecto del lápiz (fino = 1, mediano = 2, grueso = 3)" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr " lápiz por defecto está en modo regla (true/false)" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr " lápiz por defecto está en modo reconocimiento de formas (true/false)" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " grosor por defecto de la goma (fino = 1, mediano = 2, grueso = 3)" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " modo por defecto de la goma (estándar = 0, líquido corrector = 1, borrar trazos = 2)" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr " color por defecto del subrayador fluorescente" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " grosor por defecto del subrayador fluorescente (fino = 1, mediano = 2, grueso = 3)" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr " subrayador por defecto está en modo regla (true/false)" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " subrayador por defecto está en modo reconocimiento de formas (true/false)" #: src/xo-file.c:1588 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " herramienta del botón 2 (pen, eraser, highlighter, text, selectrect," " vertspace, hand, que se corresponden con lápiz, goma, subrayador, texto, seleccionar" " rectángulo, espacio vertical, mano)" #: src/xo-file.c:1591 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr " el pincel del botón 2 está vinculado al pincel primario (true/false) (invalida las otras opciones)" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr " color del pincel del botón 2 (solamente para lápiz o subrayador)" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " grosor del pincel del botón 2 (solamente para lápiz, goma o subrayador)" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " modo de regla del botón 2 (true/false) (solamente para lápiz o subrayador)" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " modo de reconocimiento de formas del botón 2 (true/false) (solamente para lápiz o subrayador)" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr " modo de goma del botón 2 (solamente para goma)" #: src/xo-file.c:1616 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" " herramienta del botón 3 (pen, eraser, highlighter, text, selectrect," " vertspace, hand, que se corresponden con lápiz, goma, subrayador, texto, seleccionar" " rectángulo, espacio vertical, mano)" #: src/xo-file.c:1619 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr " el pincel del botón 3 está vinculado al pincel primario (true/false) (invalida las otras opciones)" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr " color del pincel del botón 3 (solamente para lápiz o subrayador)" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " grosor del pincel del botón 3 (solamente para lápiz, goma o subrayador)" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " modo de regla del botón 3 (true/false) (solamente para lápiz o subrayador)" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " modo de reconocimiento de formas del botón 3 (true/false) (solamente para lápiz o subrayador)" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr " modo de goma del botón 3 (solamente para goma)" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " grosor de los lápices (en puntos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " grosor de las gomas (en puntos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " grosor de los subrayadores fluorescentes (en puntos, 1 pt = 1/72 in = 0,35 mm)" #: src/xo-file.c:1661 msgid " name of the default font" msgstr " nombre de la fuente por defecto" #: src/xo-file.c:1664 msgid " default font size" msgstr " tamaño de fuente por defecto" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Archivo de configuración de Xournal.\n" " Este archivo se genera automáticamente al guardar las preferencias.\n" " Tenga cuidado al editar este archivo manualmente.\n" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr " de %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Fondo" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Capa %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "¿Desea guardar los cambios al archivo «%s»?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Sin título" #~ msgid "Discard _Core Events" #~ msgstr "Descartar los sucesos _primarios" xournal-0.4.8/po/pt_BR.gmo0000664000175000017500000005230612112734570015005 0ustar aurouxaurouxÞ•ü{ÜÈ ÉÔŠÝ-h4–+ËI÷LAIŽ3ØS <`#?ÁFLH3•SÉ<#Z?~F¾LZR>­;ì(;2V=‰@Ç?H*[5†8¼8õ7. 6f ] Dû h@!<©!1æ!o"5ˆ",¾"ë"##9#@# F#%g#Q#'ß#-$,5$b$8{$+´$#à$*%*/%Z%0w%=¨%Bæ%:)&#d&Bˆ&Ë&Í&Ï&Ñ&Ó&Õ&×&Ù&Û&Ý&à&ï& ' ' ','@'[' l'w' Ž'›'¡'¦'¸'Ê'â'ç'4(<<(3y(­(Ë(Ò(Ö(Þ(í( ) )) *)F8))†)–)¯)Í)å) ü) * * *&*+* 1* <*F* N*Z*:o*ª* À*Ê*Ó* é* ô*+++++'+7+ H+ R+^+q+v+ †+“+œ+ £+­+ Ç+ Ó+ Þ+ ê+ ö+ ,,, ,', .,<, O, ],k,,‘,•,š,¡,§, ¬,¹, Ï,Û,ê, û, --+-:-I-R-b-s-"‚-¥-»- À-Î-Ô- æ-ð-'...3. <.H.W.].\d.Á. É. Ö.ä.ë.ó.ü./ / // 4/ A/N/T/ \/h/w/ }/‰/’/ ˜/ ¤/ ±/¼/Ó/ ä/ ï/ ú/0 000.0=0V0 h0r0 „00–00­0³0¹0 ¿0Ë0Û0á0è0 ï0ü01 11 1 *161=1B1 I1S1 Z1e1 l1 y1ƒ1 ‹1™1 1£1©1 ¬1 ¸1Å1Î1Õ1 Ü1¦è1 3 ›3Ÿ§3=G4I…42Ï4M5aP5^²5A6dS6O¸657M>7_Œ7mì7?Z8dš8Oÿ85O9M…9_Ó9m3:u¡:R;Aj;¬;Æ;6ä;H<Dd<M©<÷<1=CB=?†=DÆ=? >KK>{—>G?í[?/I@<y@‰¶@?@A+€AS¬AQBRBiBpB#vB5šBqÐB(BC?kC@«CìCAD/DD(tD3D2ÑDE<#E>`EAŸE;áE'FZEF F¢F¤F¦F¨FªF¬F®F°F²F µFÃFáFóFGG5G"QGtGzG’G«G±G¶GÎG æGH(H:7HHrHB»H7þH 6IDIKISIeIzI‰I˜I§II·IJ J)J'IJ)qJ*›JÆJÕJÚJ ëJ÷JýJKK*K 2K>KBVK&™KÀK ÐKÚK úK LLL!L$L)L@LULiL{LŠL L¦LµLÆLÛL ãL$ðLM'M:MNM `MnMM…MŒM M§M ¸MÅMÖMíM NN(N0N8N?NFN0WNˆN™N±NÊNáNûNO!O?ONOkO „O%’O¸OÓOÙOìOóOP PAP_P hPtP…P–PP\¦PQ QQ,Q 4Q AQNQUQ\Q aQlQƒQ“Q¤Q ¬Q¶QÕQèQñQR RR #R0R7RUR mRzR ŒR ™R£R¬R´RÏRØRìR SS-S=S DSQScShSnS tS€S•S ›S©S °S½SÆSÏS×SàS ïSûS T TTT %T1T 9TGTZTcTrTyT|TƒT †T ’T ŸT©T±T ¸T%AíxØÁ#&8ë ¤ìV ´üÚIka.cJKL NO,B¬’`¼ù!b”§>ÍTÉp~¨ç2‡Æ‰æ(žXòE'6èGM|w¶P£Qd›Y±®g‚Â"z[ÑÿõøÃÀZ)ª?—¹»Ò¥–ðÓˆ_¸î\4;€WÊ‘âDߌH¯jÏ t·Þ™¿CŽ 5=à†å…ñýÇ„œlê°µ¢½0ƒuö]ÜÅÄ‹3UÐf:eÖ²ûhÎ÷$ Sr}¡ãש7 mÛ ^˾ÝéóqnïÕ/*o“úÔFþ<ºŸ+³ô-Räv9¦áÈ i@«sÌ­1 { šy Ù˜Š• Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPencil CursorPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.5 Report-Msgid-Bugs-To: POT-Creation-Date: 2009-10-02 16:42-0700 PO-Revision-Date: 2010-05-09 08:59-0300 Last-Translator: Marco A B Souza Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.0 Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-Language: Portuguese X-Poedit-Country: BRAZIL Camada: Página Arquivo de configuración de Xournal. Este arquivo se genera automáticamente ao salvar as preferências. Tenga cuidado ao editar este arquivo manualmente. sempre associar a ponta de borracha à borracha (true/false) aplicar alterações de estilo do papel a todas as páginas (true/false) auto-salvar preferências a a salida (true/false) carregar automáticamente arquivo.pdf.xoj em vez de arquivo.pdf (true/false) resolução dos mapas de bits dos fundos PDF ao imprimir com libgnomeprint (pontos por polegada) resolução dos mapas de bits dos fundos PS/PDF gerados com ghostscript (pontos por polegada) color do pincel do botão 2 (somente para lápis ou marca-texto) o pincel do botão 2 está vinculado ao pincel primário (true/false) (invalida as outras opções) espessura do pincel do botão 2 (somente para lápis, borracha ou marca-texto) modo de borracha do botão 2 (somente para borracha) modo de régua do botão 2 (true/false) (somente para lápis ou marca-texto) modo de reconhecimento de formas do botão 2 (true/false) (somente para lápis ou marca-texto) ferramenta do botão 2 (lápis, borracha, marca-texto, texto, selecionar retângulo, espaço vertical, mão) cor do pincel do botão 3 (somente para lápis ou marca-texto) o pincel do botão 3 está vinculado ao pincel primário (true/false) (invalida as outras opções) espessura do pincel do botão 3 (somente para lápis, borracha ou marca-texto) modo de borracha do botão 3 (somente para borracha) modo de régua do botão 3 (true/false) (somente para lápis ou marca-texto) modo de reconhecimento de formas do botão 3 (true/false) (somente para lápis ou marca-texto) ferramenta do botão 3 (lápis, borracha, marca-texto, texto, selecionar retângulo, espaço vertical, mão) os botões 2 e 3 trocam a função do botão principal em lugar de desenhar (útil para alguns tablets) (true/false) modo padrão da borracha (padrão = 0, líquido corretor = 1, apagar traços = 2) espessura padrão da borracha (fino = 1, médio = 2, grosso = 3) tamanho de fonte padrão color padrão do marca-texto marca-texto padrão está em modo régua (true/false) marca-texto padrão está em modo reconhecimento de formas (true/false) espessura padrão do marca-texto (fino = 1, médio = 2, grosso = 3) caminho padrão para abrir/salvar (deixar em branco para o diretório atual) color padrão do lápis lápis padrão está em modo régua (true/false) lápis padrão está em modo reconhecimento de formas (true/false) espessura padrão do lápis (fino = 1, médio = 2, grosso = 3) descartar eventos do ponteiro principal em modo XInput (true/false) vista do documento (true = continua, false = uma sola página) ocultar alguns itens de menu ou da barra de ferramentas pouco (true/false) transparência do marca-texto (0 a 1, valor padrão 0.5) aviso: o nivel de transparência não é salvo nos arquivos .xoj incluir as linhas do papel ao imprimir ou exportar um PDF (true/false) componentes da interface, de abajo arriba valores válidos: drawarea menu main_toolbar pen_toolbar statusbar que correspondem à área de desenho, ao menú, a barra principal, a barra de ferramentas e a barra de status respectivamente componentes da interface em modo de tela cheia a interface tem barra de rolagem para canhotos (true/false) itens da interface a ocultar (editar por sua conta e risco) veja no arquivo xo-interface.c do código fonte, a lista de nomes dos itens atualização em tempo real dos fundos de página (true/false) maximizar a janela ao início (true/false) multiplicador da largura máxima (o traço mais grosso é x vezes o traço normal) multiplicador da largura mínima (o traço mais fino é x vezes o traço normal) nome da fonte padrão de %d de n unidade preferida (cm, in, px, pt) incremento unitario da barra de rolagem (em píxels) ferramenta selecionada ao iniciar (lápis, borracha, marca-texto, selecionar retângulo, espaço vertical, mão) iniciar em modo tela cheia (true/false) altura padrão da página em pontos (1 pt = 1/72 in = 0,35 mm) largura padrão da página em pontos (1 pt = 1/72 in = 0,35 mm) cor padrão do papel estilo padrão do papel (liso, pautado, regrado ou quadriculado) a resolução da tela, em píxels por polegada o nivel inicial de zoom, em porcentagem fator multiplicativo para aumentar/diminuir o zoom incremento unitario do quadro de diálogo de zoom a altura da janela em píxels a largura da janela em píxels (cuando no está maximizada) espessura das borrachas (em pontos, 1 pt = 1/72 in = 0,35 mm) espessura dos marca-textos (em pontos, 1 pt = 1/72 in = 0,35 mm) espessura dos lápis (em pontos, 1 pt = 1/72 in = 0,35 mm) usar extensões de XInput (true/false) usar informação de pressão para controlar espessura dos traços do lápis (true/false)%01234567A4A4 (paisagem)Au_to-salvar as preferênciasAcerca de XournalTodos os arquivosAbrir arquivo PD_FAplicar a _todas as páginasAnexar o arquivo ao diárioCarregar _automáticamente pdf.xojFundoCapt_urar pano de fundoArquivos de mapa de bitsPretoAzulMapeamento do botão _2Mapeamento do botão _3_Troca de mapeamento dos botõesCopiarNão foi possível abrir o fundo «%s».Não foi possível abrir o fundo «%s». Selecionar outro?Não foi possível abrir o fundo «%s». Será usado um fundo em branco.Não foi possível salvar o fundo «%s». Continuando assim mesmo.Não foi encontrado o arquivo de mapa de píxels «%s»PersonalizadaCortarPadrãoBorr_acha padrãoMarca-texto pa_drãoLápis padrãoText_o padrão_Papel padrãoE_xcluir camadaNão é possível desenhar na camada de fundo. Se conmutará a a capa 1.BorrachaOpções da borrachaOcorreu um erro ao criar o arquivo «%s»Ocorreu um erro ao abrir o fundo «%s»Ocorreu um erro ao abrir o arquivo «%s»Ocorreu um erro ao salvar o arquivo «%s»Exportar a PDFFinoPrimeira página_Tela cheiaCinzaVerde_Ferramenta de mãoFerramenta de mãoAltura:Marca-textoOpções do marca-textoParâmetros da linha de comando inválidos. Uso: %s [arquivo.xoj] O conteúdo do arquivo não é válidoÚltima páginaCamada %d_Barra de rolagem para canhotosAzul claroVerde claroMagentaMedianoNANovoNova página no _finalNova página _depoisNova página _antesPágina siguienteTamanho normalTamanho normal (100%)AbrirAbrir um fundoAbrir um diárioAbrir um arquivo PDFLaranjaArquivos PDFArquivos PS/PDF (como mapas de bits)Altura da páginaLargura da páginaLargura da _páginaTa_manho do papel_Cor do papelE_stilo do papelColarLápisO_pções do lápisLápisCursor de lápisCor do papelPágina anteriorOpções de impressão_Imprimir as linhas do papelDocumentos _recentesVermelhoRefazer_RéguaRéguaSalvarSalvar o diárioDeseja salvar as alterações no arquivo «%s»?Selecionar fonteSelecionar uma regiã_oSelecionar um retânguloSelecionar uma regiãoSelecionar um r_etânguloDef_inir como padrãoTor_nar padrãoEstablecer o tamanho do papelDefinir o zoomDefinir o número de páginaReconhecimento de formas_Menus curtosDesea sobreescribir o arquivo «%s»?Tamanhos de papel padrão:TextoFonte do te_xto...GrossoComutar tela cheiaCartaCarta (paisagem)Não foi possível processar uma ou mais páginas do arquivo PDF.DesfazerSem títuloUtilizar _XInputEspaço verticalBrancoLargura:Criado por Denis Auroux e outros colaboradores http://xournal.sourceforge.net/ XournalXournal - %sArquivos de XournalAmareloAmpliar zoomReduzir zoomZoom: _Sobre_Cor_Contínuo_Copia do pincel atualLápi_s padrão_Excluir página_Editar_BorrachaUtilizar a _borracha do lápis_Exportar para PDF_Arquivo_Primeira páginaA_chatarAj_uda_Ocultar camada_Marca-texto_FinalVincular ao pincel _primárioCa_rregar pano de fundo_Nova camadaPróxima _página_Uma página_Opções_Página_LápisSensibilidade à _pressão_Início_Fundos progresivosSal_var as preferências_Definir zoomReconhecimento de _formas_Mostrar camada_Texto_FerramentasEspaço _vertical_Ver_Zooma_zulpapel a_zul_suprimir os traços_fino_quadriculado_verdepapel _verde_pautado_magenta_médiolaran_japapel _laranjapapel _rosa_liso_vermelho_regrado_padrão_grossomui_to fino_brancopapel _branco_corretor líquidoamare_lopapel _amarelo_pretocm_cinzainaz_ul clarov_erde claro_outro...píxelspontosm_uito grossoxournal-0.4.8/po/nl.po0000664000175000017500000006106611773660334014257 0ustar aurouxaurouxmsgid "" msgstr "" "Project-Id-Version: Xournal-0.4.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-02 16:42-0700\n" "PO-Revision-Date: \n" "Last-Translator: Timo Kluck \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: 2\n" "X-Poedit-Language: Dutch\n" "X-Poedit-Country: NETHERLANDS\n" #: src/main.c:65 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "Ongeldige opties in opdrachtregel.\n" "Gebruik: %s [bestandsnaam.xoj]\n" #: src/main.c:291 #: src/xo-callbacks.c:105 #: src/xo-callbacks.c:156 #: src/xo-callbacks.c:3126 #, c-format msgid "Error opening file '%s'" msgstr "Fout bij het openen van het bestand '%s'" #: src/xo-interface.c:350 #: src/xo-interface.c:2951 #: src/xo-misc.c:1405 msgid "Xournal" msgstr "Xournal" #: src/xo-interface.c:360 msgid "_File" msgstr "_Bestand" #: src/xo-interface.c:371 msgid "Annotate PD_F" msgstr "PD_F annoteren" #: src/xo-interface.c:396 msgid "Recent Doc_uments" msgstr "Recente doc_umenten" #: src/xo-interface.c:403 msgid "0" msgstr "0" #: src/xo-interface.c:407 msgid "1" msgstr "1" #: src/xo-interface.c:411 msgid "2" msgstr "2" #: src/xo-interface.c:415 msgid "3" msgstr "3" #: src/xo-interface.c:419 msgid "4" msgstr "4" #: src/xo-interface.c:423 msgid "5" msgstr "c" #: src/xo-interface.c:427 msgid "6" msgstr "c" #: src/xo-interface.c:431 msgid "7" msgstr " c" #: src/xo-interface.c:440 msgid "Print Options" msgstr "Afdrukopties" #: src/xo-interface.c:455 msgid "_Export to PDF" msgstr "_Exporteren als PDF" #: src/xo-interface.c:471 msgid "_Edit" msgstr "Be_werken" #: src/xo-interface.c:516 msgid "_View" msgstr "Beel_d" #: src/xo-interface.c:523 msgid "_Continuous" msgstr "_Doorlopend" #: src/xo-interface.c:529 msgid "_One Page" msgstr "_Eén pagina" #: src/xo-interface.c:540 msgid "Full Screen" msgstr "Volledig scherm" #: src/xo-interface.c:552 msgid "_Zoom" msgstr "In_zoomen" #: src/xo-interface.c:580 msgid "Page _Width" msgstr "Pagina_breedte" #: src/xo-interface.c:591 msgid "_Set Zoom" msgstr "Zoom in_stellen" #: src/xo-interface.c:600 msgid "_First Page" msgstr "Eerste _pagina" #: src/xo-interface.c:611 msgid "_Previous Page" msgstr "_Vorige pagina" #: src/xo-interface.c:622 msgid "_Next Page" msgstr "Vo_lgende pagina" #: src/xo-interface.c:633 msgid "_Last Page" msgstr "_Laatste pagina" #: src/xo-interface.c:649 msgid "_Show Layer" msgstr "Laag _weergeven" #: src/xo-interface.c:657 msgid "_Hide Layer" msgstr "_Laag verbergen" #: src/xo-interface.c:665 msgid "_Page" msgstr "_Pagina" #: src/xo-interface.c:672 msgid "New Page _Before" msgstr "Nieuwe _pagina ervoor" #: src/xo-interface.c:676 msgid "New Page _After" msgstr "Nieuwe pagina er_achter" #: src/xo-interface.c:680 msgid "New Page At _End" msgstr "Nieuwe pagina aan _einde" #: src/xo-interface.c:684 msgid "_Delete Page" msgstr "Pagina _verwijderen" #: src/xo-interface.c:693 msgid "_New Layer" msgstr "_Nieuwe laag" #: src/xo-interface.c:697 msgid "Delete La_yer" msgstr "Laa_g verwijderen" #: src/xo-interface.c:701 msgid "_Flatten" msgstr "Lagen _samenvoegen" #: src/xo-interface.c:710 msgid "Paper Si_ze" msgstr "Papierformaa_t" #: src/xo-interface.c:714 msgid "Paper _Color" msgstr "Papier_kleur" #: src/xo-interface.c:721 msgid "_white paper" msgstr "_Wit papier" #: src/xo-interface.c:727 msgid "_yellow paper" msgstr "_Geel papier" #: src/xo-interface.c:733 msgid "_pink paper" msgstr "_Roze papier" #: src/xo-interface.c:739 msgid "_orange paper" msgstr "_Oranje papier" #: src/xo-interface.c:745 msgid "_blue paper" msgstr "_Blauw papier" #: src/xo-interface.c:751 msgid "_green paper" msgstr "_Groen papier" #: src/xo-interface.c:757 #: src/xo-interface.c:1025 msgid "other..." msgstr "anders..." #: src/xo-interface.c:761 #: src/xo-interface.c:797 #: src/xo-interface.c:1029 #: src/xo-interface.c:1270 #: src/xo-interface.c:1346 msgid "NA" msgstr "n.v.t." #: src/xo-interface.c:766 msgid "Paper _Style" msgstr "Papiersoort" #: src/xo-interface.c:773 msgid "_plain" msgstr "_Leeg" #: src/xo-interface.c:779 msgid "_lined" msgstr "_Lijntjes" #: src/xo-interface.c:785 msgid "_ruled" msgstr "Lijntjes (geen _kantlijn)" #: src/xo-interface.c:791 msgid "_graph" msgstr "_Ruitjes" #: src/xo-interface.c:802 msgid "Apply _To All Pages" msgstr "Op alle pagina's _toepassen" #: src/xo-interface.c:811 msgid "_Load Background" msgstr "Achtergrond _laden" #: src/xo-interface.c:819 msgid "Background Screens_hot" msgstr "Schermafbeelding van ac_htergrond" #: src/xo-interface.c:828 msgid "Default _Paper" msgstr "Standaard _papier" #: src/xo-interface.c:832 msgid "Set As De_fault" msgstr "Instellen als _standaard" #: src/xo-interface.c:836 msgid "_Tools" msgstr "_Gereedschap" #: src/xo-interface.c:843 #: src/xo-interface.c:1206 #: src/xo-interface.c:1282 msgid "_Pen" msgstr "_Pen" #: src/xo-interface.c:852 #: src/xo-interface.c:1212 #: src/xo-interface.c:1288 msgid "_Eraser" msgstr "_Gum" #: src/xo-interface.c:861 #: src/xo-interface.c:1218 #: src/xo-interface.c:1294 msgid "_Highlighter" msgstr "_Markeerstift" #: src/xo-interface.c:870 #: src/xo-interface.c:1224 #: src/xo-interface.c:1300 msgid "_Text" msgstr "_Tekst" #: src/xo-interface.c:884 msgid "_Shape Recognizer" msgstr "_Vormenherkenner" #: src/xo-interface.c:891 msgid "Ru_ler" msgstr "_Lineaal" #: src/xo-interface.c:903 #: src/xo-interface.c:1230 #: src/xo-interface.c:1306 msgid "Select Re_gion" msgstr "_Gebied selecteren" #: src/xo-interface.c:912 #: src/xo-interface.c:1236 #: src/xo-interface.c:1312 msgid "Select _Rectangle" msgstr "_Rechthoek selecteren" #: src/xo-interface.c:921 #: src/xo-interface.c:1242 #: src/xo-interface.c:1318 msgid "_Vertical Space" msgstr "_Verticale ruimte" #: src/xo-interface.c:930 #: src/xo-interface.c:1248 #: src/xo-interface.c:1324 msgid "H_and Tool" msgstr "H_andje" #: src/xo-interface.c:943 msgid "_Color" msgstr "_Kleur" #: src/xo-interface.c:954 msgid "blac_k" msgstr "_Zwart" #: src/xo-interface.c:960 msgid "_blue" msgstr "_Blauw" #: src/xo-interface.c:966 msgid "_red" msgstr "_Rood" #: src/xo-interface.c:972 msgid "_green" msgstr "_Groen" #: src/xo-interface.c:978 msgid "gr_ay" msgstr "Gr_ijs" #: src/xo-interface.c:989 msgid "light bl_ue" msgstr "Lichtbl_auw" #: src/xo-interface.c:995 msgid "light gr_een" msgstr "Lichtgro_en" #: src/xo-interface.c:1001 msgid "_magenta" msgstr "_Magenta" #: src/xo-interface.c:1007 msgid "_orange" msgstr "_Oranje" #: src/xo-interface.c:1013 msgid "_yellow" msgstr "Gee_l" #: src/xo-interface.c:1019 msgid "_white" msgstr "_Wit" #: src/xo-interface.c:1034 msgid "Pen _Options" msgstr "Pen-_opties" #: src/xo-interface.c:1041 msgid "_very fine" msgstr "_Zeer dun" #: src/xo-interface.c:1047 #: src/xo-interface.c:1078 #: src/xo-interface.c:1126 msgid "_fine" msgstr "_Dun" #: src/xo-interface.c:1053 #: src/xo-interface.c:1084 #: src/xo-interface.c:1132 msgid "_medium" msgstr "_Normaal" #: src/xo-interface.c:1059 #: src/xo-interface.c:1090 #: src/xo-interface.c:1138 msgid "_thick" msgstr "_Dik" #: src/xo-interface.c:1065 msgid "ver_y thick" msgstr "_Zeer d_ik" #: src/xo-interface.c:1071 msgid "Eraser Optio_ns" msgstr "Gu_m-opties" #: src/xo-interface.c:1101 msgid "_standard" msgstr "_Normaal" #: src/xo-interface.c:1107 msgid "_whiteout" msgstr "_Tip-ex" #: src/xo-interface.c:1113 msgid "_delete strokes" msgstr "_Hele lijnen wissen" #: src/xo-interface.c:1119 msgid "Highlighter Opt_ions" msgstr "Markeerstift-opties" #: src/xo-interface.c:1144 msgid "Text _Font..." msgstr "Lettertype voor tekst..." #: src/xo-interface.c:1160 msgid "_Default Pen" msgstr "Pen met standaardopties" #: src/xo-interface.c:1164 msgid "Default Eraser" msgstr "Gum met standaardopties" #: src/xo-interface.c:1168 msgid "Default Highlighter" msgstr "Markeerstift met standaardopties" #: src/xo-interface.c:1172 msgid "Default Te_xt" msgstr "Tekst met standaardopties" #: src/xo-interface.c:1176 msgid "Set As Default" msgstr "Als standaardopties instellen" #: src/xo-interface.c:1180 msgid "_Options" msgstr "_Voorkeuren" #: src/xo-interface.c:1187 msgid "Use _XInput" msgstr "_XInput gebruiken" #: src/xo-interface.c:1191 msgid "_Eraser Tip" msgstr "Gum-uit_einde gebruiken" #: src/xo-interface.c:1195 msgid "_Pressure sensitivity" msgstr "_Drukgevoeligheid" #: src/xo-interface.c:1199 msgid "Button _2 Mapping" msgstr "_Tweede muisknop/penknop" #: src/xo-interface.c:1258 #: src/xo-interface.c:1334 msgid "_Link to Primary Brush" msgstr "Eerste _gereedschap" #: src/xo-interface.c:1264 #: src/xo-interface.c:1340 msgid "_Copy of Current Brush" msgstr "_Huidige gereedschap" #: src/xo-interface.c:1275 msgid "Button _3 Mapping" msgstr "De_rde muisknop/penknop" #: src/xo-interface.c:1351 msgid "Buttons Switch Mappings" msgstr "Muisknoppen/penknoppen verwisselen" #: src/xo-interface.c:1360 msgid "_Progressive Backgrounds" msgstr "" #: src/xo-interface.c:1364 msgid "Print Paper _Ruling" msgstr "Lijntjes/ruitjes afd_rukken" #: src/xo-interface.c:1368 msgid "Autoload pdf.xoj" msgstr "pdf.xoj automatisch laden" #: src/xo-interface.c:1372 msgid "Left-Handed Scrollbar" msgstr "Scrollbalk aan linkerkant" #: src/xo-interface.c:1376 msgid "Shorten _Menus" msgstr "_Menu's inkorten" #: src/xo-interface.c:1385 msgid "A_uto-Save Preferences" msgstr "Voorkeuren a_utomatisch opslaan" #: src/xo-interface.c:1389 msgid "_Save Preferences" msgstr "Voorkeuren op_slaan" #: src/xo-interface.c:1393 msgid "_Help" msgstr "_Help" #: src/xo-interface.c:1404 msgid "_About" msgstr "_Over Xournal" #: src/xo-interface.c:1417 msgid "Save" msgstr "Opslaan" #: src/xo-interface.c:1422 msgid "New" msgstr "Nieuw" #: src/xo-interface.c:1427 msgid "Open" msgstr "Openen" #: src/xo-interface.c:1440 msgid "Cut" msgstr "Knippen" #: src/xo-interface.c:1445 msgid "Copy" msgstr "Kopiëren" #: src/xo-interface.c:1450 msgid "Paste" msgstr "Plakken" #: src/xo-interface.c:1463 msgid "Undo" msgstr "Ongedaan maken" #: src/xo-interface.c:1468 msgid "Redo" msgstr "Opnieuw doen" #: src/xo-interface.c:1481 msgid "First Page" msgstr "Eerste pagina" #: src/xo-interface.c:1486 msgid "Previous Page" msgstr "Vorige pagina" #: src/xo-interface.c:1491 msgid "Next Page" msgstr "Volgende pagina" #: src/xo-interface.c:1496 msgid "Last Page" msgstr "Laatste pagina" #: src/xo-interface.c:1509 msgid "Zoom Out" msgstr "Uitzoomen" #: src/xo-interface.c:1514 #: src/xo-interface.c:3045 msgid "Page Width" msgstr "Paginabreedte" #: src/xo-interface.c:1520 msgid "Zoom In" msgstr "Inzoomen" #: src/xo-interface.c:1525 msgid "Normal Size" msgstr "Normale grootte" #: src/xo-interface.c:1530 #: src/xo-interface.c:3004 msgid "Set Zoom" msgstr "Zoom instellen" #: src/xo-interface.c:1539 msgid "Toggle Fullscreen" msgstr "Volledig schermmodus aan/uit" #: src/xo-interface.c:1548 msgid "Pencil" msgstr "Potlood" #: src/xo-interface.c:1554 msgid "Pen" msgstr "Pen" #: src/xo-interface.c:1559 #: src/xo-interface.c:1565 msgid "Eraser" msgstr "Gum" #: src/xo-interface.c:1570 #: src/xo-interface.c:1576 msgid "Highlighter" msgstr "Markeerstift" #: src/xo-interface.c:1581 #: src/xo-interface.c:1587 msgid "Text" msgstr "Tekst" #: src/xo-interface.c:1592 #: src/xo-interface.c:1598 msgid "Shape Recognizer" msgstr "Vormen herkennen" #: src/xo-interface.c:1601 #: src/xo-interface.c:1607 msgid "Ruler" msgstr "Lineaal" #: src/xo-interface.c:1618 #: src/xo-interface.c:1624 msgid "Select Region" msgstr "Gebied selecteren" #: src/xo-interface.c:1629 #: src/xo-interface.c:1635 msgid "Select Rectangle" msgstr "Rechthoek selecteren" #: src/xo-interface.c:1640 #: src/xo-interface.c:1646 msgid "Vertical Space" msgstr "Verticale ruimte" #: src/xo-interface.c:1651 msgid "Hand Tool" msgstr "Handje" #: src/xo-interface.c:1670 #: src/xo-interface.c:1674 msgid "Default" msgstr "Standaard" #: src/xo-interface.c:1678 #: src/xo-interface.c:1681 msgid "Default Pen" msgstr "Standaardpen" #: src/xo-interface.c:1692 #: src/xo-interface.c:1700 msgid "Fine" msgstr "Dun" #: src/xo-interface.c:1705 #: src/xo-interface.c:1713 msgid "Medium" msgstr "Normaal" #: src/xo-interface.c:1718 #: src/xo-interface.c:1726 msgid "Thick" msgstr "Dik" #: src/xo-interface.c:1745 #: src/xo-interface.c:1752 msgid "Black" msgstr "Zwart" #: src/xo-interface.c:1757 #: src/xo-interface.c:1764 msgid "Blue" msgstr "Blauw" #: src/xo-interface.c:1769 #: src/xo-interface.c:1776 msgid "Red" msgstr "Rood" #: src/xo-interface.c:1781 #: src/xo-interface.c:1788 msgid "Green" msgstr "Groen" #: src/xo-interface.c:1793 #: src/xo-interface.c:1800 msgid "Gray" msgstr "Grijs" #: src/xo-interface.c:1805 #: src/xo-interface.c:1812 msgid "Light Blue" msgstr "Lichtblauw" #: src/xo-interface.c:1817 #: src/xo-interface.c:1824 msgid "Light Green" msgstr "Lichtgroen" #: src/xo-interface.c:1829 #: src/xo-interface.c:1836 msgid "Magenta" msgstr "Magenta" #: src/xo-interface.c:1841 #: src/xo-interface.c:1848 msgid "Orange" msgstr "Oranje" #: src/xo-interface.c:1853 #: src/xo-interface.c:1860 msgid "Yellow" msgstr "GEel" #: src/xo-interface.c:1865 #: src/xo-interface.c:1872 msgid "White" msgstr "Wit" #: src/xo-interface.c:1919 msgid " Page " msgstr " Pagina" #: src/xo-interface.c:1927 msgid "Set page number" msgstr "Paginanummer instellen" #: src/xo-interface.c:1931 msgid " of n" msgstr " van n" #: src/xo-interface.c:1939 msgid " Layer: " msgstr " Laag;" #: src/xo-interface.c:2826 msgid "Set Paper Size" msgstr "Papierformaat instellen" #: src/xo-interface.c:2838 msgid "Standard paper sizes:" msgstr "Standaard papierformaten:" #: src/xo-interface.c:2846 msgid "A4" msgstr "A4" #: src/xo-interface.c:2847 msgid "A4 (landscape)" msgstr "A4 (liggend)" #: src/xo-interface.c:2848 msgid "US Letter" msgstr "US Letter" #: src/xo-interface.c:2849 msgid "US Letter (landscape)" msgstr "US Letter (liggend)" #: src/xo-interface.c:2850 msgid "Custom" msgstr "Anders" #: src/xo-interface.c:2856 msgid "Width:" msgstr "Breedte:" #: src/xo-interface.c:2865 msgid "Height:" msgstr "Hoogte:" #: src/xo-interface.c:2877 msgid "cm" msgstr "cm" #: src/xo-interface.c:2878 msgid "in" msgstr "duim" #: src/xo-interface.c:2879 msgid "pixels" msgstr "pixels" #: src/xo-interface.c:2880 msgid "points" msgstr "punten" #: src/xo-interface.c:2940 msgid "About Xournal" msgstr "Over Xournal" #: src/xo-interface.c:2956 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" "Geschreven door Denis Auroux\n" "en anderen\n" " http://xournal.sourceforge.net/ " #: src/xo-interface.c:3020 msgid "Zoom: " msgstr "Zoom:" #: src/xo-interface.c:3033 msgid "%" msgstr "%" #: src/xo-interface.c:3038 msgid "Normal size (100%)" msgstr "Normale grootte (100%)" #: src/xo-interface.c:3052 msgid "Page Height" msgstr "Paginahoogte" #. user aborted on save confirmation #: src/xo-callbacks.c:51 #: src/xo-file.c:665 msgid "Open PDF" msgstr "PDF openen" #: src/xo-callbacks.c:59 #: src/xo-callbacks.c:132 #: src/xo-callbacks.c:231 #: src/xo-callbacks.c:385 #: src/xo-callbacks.c:1444 #: src/xo-file.c:673 msgid "All files" msgstr "Alle bestanden" #: src/xo-callbacks.c:62 #: src/xo-callbacks.c:388 #: src/xo-file.c:676 msgid "PDF files" msgstr "PDF bestanden" #: src/xo-callbacks.c:70 #: src/xo-callbacks.c:1467 msgid "Attach file to the journal" msgstr "Bestand aan schrift toevoegen" #. user aborted on save confirmation #: src/xo-callbacks.c:124 msgid "Open Journal" msgstr "Schrift openen" #: src/xo-callbacks.c:135 #: src/xo-callbacks.c:234 msgid "Xournal files" msgstr "Xournal-bestanden" #: src/xo-callbacks.c:184 #: src/xo-callbacks.c:279 #, c-format msgid "Error saving file '%s'" msgstr "Fout bij het opslaan van het bestand '%s'" #: src/xo-callbacks.c:203 msgid "Save Journal" msgstr "Schrift opslaan" #: src/xo-callbacks.c:260 #: src/xo-callbacks.c:406 #, c-format msgid "Should the file %s be overwritten?" msgstr "Wilt u het bestand '%s' overschrijven?" #: src/xo-callbacks.c:359 msgid "Export to PDF" msgstr "Exporteren als PDF" #: src/xo-callbacks.c:419 #, c-format msgid "Error creating file '%s'" msgstr "Fout bij het aanmaken van het bestand '%s'" #: src/xo-callbacks.c:1371 msgid "Pick a Paper Color" msgstr "Kies een papierkleur" #: src/xo-callbacks.c:1436 msgid "Open Background" msgstr "Een achtergrond openen" #: src/xo-callbacks.c:1452 msgid "Bitmap files" msgstr "Bitmap-bestanden" #: src/xo-callbacks.c:1460 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDF-bestanden (als bitmap)" #: src/xo-callbacks.c:1490 #, c-format msgid "Error opening background '%s'" msgstr "Fout bij het openen van de achtergrond '%s'" #: src/xo-callbacks.c:2036 msgid "Select Font" msgstr "Lettertype kiezen" #: src/xo-callbacks.c:2434 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "U kunt niet op de achtergrond-laag tekenen.\n" "Laag 1 wordt gekozen." #: src/xo-support.c:90 #: src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kan het bitmap-bestand '%s' niet vinden" #: src/xo-file.c:122 #: src/xo-file.c:154 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "Kan achtergrond '%s' niet schrijven." #: src/xo-file.c:252 #, c-format msgid "Invalid file contents" msgstr "Ongeldige bestandsinhoud" #: src/xo-file.c:402 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "Kan de achtergrond '%s' niet openen. De achtergrond wordt op wit gezet." #: src/xo-file.c:660 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "Kan de achtergrond '%s' niet openen.\n" "Wilt u een ander bestand kiezen?" #: src/xo-file.c:806 #, c-format msgid "Could not open background '%s'." msgstr "Kan de achtergrond '%s' niet openen." #: src/xo-file.c:1033 msgid "Unable to render one or more PDF pages." msgstr "Kan één of meerdere pdf-pagina's niet tekenen." #: src/xo-file.c:1439 msgid " the display resolution, in pixels per inch" msgstr "" #: src/xo-file.c:1442 msgid " the initial zoom level, in percent" msgstr "" #: src/xo-file.c:1445 msgid " maximize the window at startup (true/false)" msgstr "" #: src/xo-file.c:1448 msgid " start in full screen mode (true/false)" msgstr "" #: src/xo-file.c:1451 msgid " the window width in pixels (when not maximized)" msgstr "" #: src/xo-file.c:1454 msgid " the window height in pixels" msgstr "" #: src/xo-file.c:1457 msgid " scrollbar step increment (in pixels)" msgstr "" #: src/xo-file.c:1460 msgid " the step increment in the zoom dialog box" msgstr "" #: src/xo-file.c:1463 msgid " the multiplicative factor for zoom in/out" msgstr "" #: src/xo-file.c:1466 msgid " document view (true = continuous, false = single page)" msgstr "" #: src/xo-file.c:1469 msgid " use XInput extensions (true/false)" msgstr "" #: src/xo-file.c:1472 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr "" #: src/xo-file.c:1475 msgid " always map eraser tip to eraser (true/false)" msgstr "" #: src/xo-file.c:1478 msgid " buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false)" msgstr "" #: src/xo-file.c:1481 msgid " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" #: src/xo-file.c:1484 msgid " default path for open/save (leave blank for current directory)" msgstr "" #: src/xo-file.c:1487 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr "" #: src/xo-file.c:1490 msgid " minimum width multiplier" msgstr "" #: src/xo-file.c:1493 msgid " maximum width multiplier" msgstr "" #: src/xo-file.c:1496 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" #: src/xo-file.c:1499 msgid " interface components in fullscreen mode, from top to bottom" msgstr "" #: src/xo-file.c:1502 msgid " interface has left-handed scrollbar (true/false)" msgstr "" #: src/xo-file.c:1505 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr "" #: src/xo-file.c:1508 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" #: src/xo-file.c:1511 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" #: src/xo-file.c:1514 msgid " auto-save preferences on exit (true/false)" msgstr "" #: src/xo-file.c:1518 msgid " the default page width, in points (1/72 in)" msgstr "" #: src/xo-file.c:1521 msgid " the default page height, in points (1/72 in)" msgstr "" #: src/xo-file.c:1524 msgid " the default paper color" msgstr "" #: src/xo-file.c:1529 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr "" #: src/xo-file.c:1532 msgid " apply paper style changes to all pages (true/false)" msgstr "" #: src/xo-file.c:1535 msgid " preferred unit (cm, in, px, pt)" msgstr "" #: src/xo-file.c:1538 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr "" #: src/xo-file.c:1541 msgid " just-in-time update of page backgrounds (true/false)" msgstr "" #: src/xo-file.c:1544 msgid " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" #: src/xo-file.c:1547 msgid " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr "" #: src/xo-file.c:1551 msgid " selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand)" msgstr "" #: src/xo-file.c:1554 msgid " default pen color" msgstr "" #: src/xo-file.c:1559 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1562 msgid " default pen is in ruler mode (true/false)" msgstr "" #: src/xo-file.c:1565 msgid " default pen is in shape recognizer mode (true/false)" msgstr "" #: src/xo-file.c:1568 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1571 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr "" #: src/xo-file.c:1574 msgid " default highlighter color" msgstr "" #: src/xo-file.c:1579 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr "" #: src/xo-file.c:1582 msgid " default highlighter is in ruler mode (true/false)" msgstr "" #: src/xo-file.c:1585 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr "" #: src/xo-file.c:1588 msgid " button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" #: src/xo-file.c:1591 msgid " button 2 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "" #: src/xo-file.c:1594 msgid " button 2 brush color (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1601 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: src/xo-file.c:1605 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1609 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: src/xo-file.c:1613 msgid " button 2 eraser mode (eraser only)" msgstr "" #: src/xo-file.c:1616 msgid " button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand)" msgstr "" #: src/xo-file.c:1619 msgid " button 3 brush linked to primary brush (true/false) (overrides all other settings)" msgstr "" #: src/xo-file.c:1622 msgid " button 3 brush color (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1629 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr "" #: src/xo-file.c:1633 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr "" #: src/xo-file.c:1637 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr "" #: src/xo-file.c:1641 msgid " button 3 eraser mode (eraser only)" msgstr "" #: src/xo-file.c:1645 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1651 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1656 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr "" #: src/xo-file.c:1661 msgid " name of the default font" msgstr "" #: src/xo-file.c:1664 msgid " default font size" msgstr "" #: src/xo-file.c:1842 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" #: src/xo-misc.c:1274 #, c-format msgid " of %d" msgstr "van %d" #: src/xo-misc.c:1279 msgid "Background" msgstr "Achtergrond" #: src/xo-misc.c:1287 #, c-format msgid "Layer %d" msgstr "Laag %d" #: src/xo-misc.c:1411 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: src/xo-misc.c:1663 #, c-format msgid "Save changes to '%s'?" msgstr "" "Het bestand '%s' is gewijzigd.\n" "Wilt u de veranderingen opslaan?" #: src/xo-misc.c:1664 msgid "Untitled" msgstr "Naamloos document" xournal-0.4.8/po/pl.gmo0000664000175000017500000004257012013276040014405 0ustar aurouxaurouxÞ•$[,˜ ™¤Š­48+mI™3ã<#T?xF¸Lÿ3L<€#½?áF!Lh>µ;ô0C2^@‘?Ò*%5P8†8¿7ø60]g<Å,/Ic} „%¥QË'-E,s 8¹+ò#B0_=BÎ: #L p r t v x z | ~ € ‚ … ” « ¹ à Ñ å ! !! 3!@!F!K!]!o!‡!Œ!4¬!<á!3"R"p"w"{"ƒ"’" ¦" ²"À" Ï"Ý"ä"ô" #+#C# Z#h# m# x#„#‰# # š#¤# ¬#¸#:Í#$ $($1$ G$ R$^$f$m$q$‚$’$ £$ ­$¹$Ì$Ñ$ á$î$÷$ þ$% "% .% 9% E% Q% ^%k%q% u%‚%‰% œ% ª%¸%Ê%Î%Ó%Ú%à% å%ò% &&#& 4&B&T&d&s&‚&‹&›&¬&»&Ñ& Ö&ä&ê&ü&' ''%'+'\2'' —' ¤'²'¹'Á'Ê'Ñ'Ø' ß'ë' ( (("(*(9( ?(K(T( Z( f(s( |(‡( ˜( £( ®(¸(Á(Æ(Ü(ë( ý() )%)+)2)B)H)N) T)`)p)v)}) „)‘)˜)¡)©) ±) ¿)Ë)Ò)×) Þ)è) ï)ú) * ** *.*5*8*>* A* M*Z*c*j* q*ü}* z,…,®Ž,F=-C„-HÈ-8.CJ.$Ž.K³.Uÿ.XU/<®/Bë/$.0KS0WŸ0X÷0BP1A“1Õ1ñ12 2B=2N€2Ï25ì2E"3Eh3T®3;4E?4h…4Cî4125 d5…5¥5À5'Æ52î5Z!64|63±64å67M47*‚7.­7Ü7;ù7=58@s8D´8*ù8$9&9(9*9,9.909294969 99F9 [9e9u9„9¢9½9Õ9Ú9ð9: ::':=:\:d:2„::·:9ò:&,;S;b; i;s;„;•;©;º;Ì;Ü; â;ï; <%<B<`<q<x< ˆ<•<›<£<·< Ê<Ö< Ý<Fë< 2=S= c=n=ˆ= —= ¤=®=¶=»=Ò=â=õ=>>/> 7>D> U> a> o>y>™>«>¾>Ò>ã> ò>? ??"?+?A?S?d?x??ˆ??˜?Ÿ?¯?Ç?Ù?é?ü? @@4@I@_@s@†@ œ@ª@Ç@Í@á@ç@A A A)A9A @AeMA³A »A ÈAÖA ßA éA óA þA B BB5BJBYBaBhB‚BˆB ™B¤B«B»B ÃBÍBÞB íBûB CC "C-CACTCgC|C“C¤C «C·CÈC ÏC ÚCåC÷C D DD%D5D KDVD_DnD…D–D ŸD©D ÀDÍDÔDãDëDúD E EE&E)E1E3E CEQEYEaE jEôÛlÇç{œ¹ÙYWmëÌz¦ö³9isÅ&ý±:;<=>?@A%foص«¬ *»E¥Q—§(ƒ+Ýrh!Mï`$Sv”÷êà7ÓP­¶B1jaâû_}]¤ñ†"H²RÿºXtÉ©[…°Oî3'é.|/ð UD¿×½Iš5øèí6Š´ÖÍó‡8Ñ„\ËÄ,·C ®“4¢T ŽÁ‹F‰ú›VkZÒ #¡ÈÜ2‚£ üžÕeÏùŸ~)q¼LK¾ ÞªNyx-–ŒÐ’gþßn™pæÊdbä•å0ÔÚ€˜ÀòÆu^ì¨GJሯcãõwθ‘à Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) button 2 brush color (for pen or highlighter only) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! interface components in fullscreen mode, from top to bottom maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerEraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusStandard paper sizes:TextText _Font...ThickToggle FullscreenUndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Journal_Last Page_Load Background_New Layer_Next Page_One Page_Options_Pen_Pressure sensitivity_Previous Page_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal-0.4.7 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2012-05-22 15:32-0700 PO-Revision-Date: 2012-08-16 22:42+0100 Last-Translator: MiÅ› Uszatek Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Warstwa: Strona Plik konfiguracyjny Xournal. Plik ten jest generowany automatycznie podczas zapisywania preferencji. Należy zachować ostrożność podczas edycji tego pliku rÄ™cznie. zastosować zmian w stylu papieru do wszystkich stron (prawda/faÅ‚sz) automatyczne zapisywanie preferencji przy wyjÅ›ciu (prawda/faÅ‚sz) automatycznie zaÅ‚adować plik.pdf.xoj zamiast plik.pdf (prawda/faÅ‚sz) przycisk 2 kolor pÄ™dzla (tylko dla pióra lub markera) przycisk 2 grubość pÄ™dzela (tylko dÅ‚ugopis, gumka, lub marker) przycisk 2 tryb gumki (gumki tylko) przycisk 2 tryb linijki (prawda/faÅ‚sz) (tylko dla dÅ‚ugopisu lub markera) przycisk 2 tryb rozpoznawania ksztaÅ‚tu (prawda/faÅ‚sz) (tylko dÅ‚ugopis lub marker) przycisk 2 narzÄ™dzi (dÅ‚ugopis, gumka, marker, tekst, selectrect, vertspace, rÄ™cznie) przycisk 3 kolor pÄ™dzla (tylko dla dÅ‚ugopisu lub markera) przycisk 3 grubość pÄ™dzla (tylko dÅ‚ugopis, gumka, lub marker) przycisk 3 tryb gumka (gumki tylko) przycisk 3 tryb linijki (prawda/faÅ‚sz) (tylko dla dÅ‚ugopisu lub markera) przycisk 3 tryb rozpoznawywania ksztaÅ‚tu (prawda/faÅ‚sz) (tylko dÅ‚ugopis lub marker) przycisk 3 narzÄ™dzi (dÅ‚ugopis, gumka, marker, tekst, selectrect, vertspace, rÄ™cznie) domyÅ›lny tryb gumki (standardowy = 0, zamieć = 1, uderzeÅ„ = 2) domyÅ›lna grubość gumki (drobno = 1, Å›rednio = 2, grubo = 3) domyÅ›lny rozmiar czcionki domyÅ›lny kolor markera domyÅ›lny marker w trybie linijki (prawda/faÅ‚sz) domyÅ›lna grubość markera (drobno = 1, Å›rednio = 2, grubo = 3) domyÅ›lna Å›cieżka do otwórz/zapisz (zostaw puste dla bieżącego katalogu) domyÅ›lny kolor dÅ‚ugopisu domyÅ›lny dÅ‚ugopis w trybie linijki (prawda/faÅ‚sz) domyÅ›lny dÅ‚ugopis w trybie rozpoznawania ksztaÅ‚tu (prawda/faÅ‚sz) domyÅ›lna grubość dÅ‚ugopisu (drobno = 1, Å›rednio = 2, grubo = 3) odrzuć zdarzenia bÄ™dÄ…ce wskaźnikiem podstawowym w trybie XInput (prawda/faÅ‚sz) widok dokumentu (prawda = ciÄ…gÅ‚y, faÅ‚sz = jedna strona) ukryć niektóre niechciane menu lub paski narzÄ™dzi (prawda/faÅ‚sz) krycie markera (0 do 1, domyÅ›lnie 0,5) Ostrzeżenie: poziom krycia nie jest zapisywany w plikach xoj! interfejs komponentów w trybie peÅ‚noekranowym, od góry do doÅ‚u zmaksymalizować okno na starcie (prawda/faÅ‚sz) maksymalny mnożnik szerokość minimalny mnożnik szerokość nazwa domyÅ›lnej czcionki z %d preferowana jednostka (cm, in, px, pt) wielkość skroku paska przewijania (w pikselach) wybrane narzÄ™dzia na starcie (dÅ‚ugopis, gumka, marker, selectrect, vertspace, rÄ™cznie) uruchomić w trybie peÅ‚noekranowym (prawda/faÅ‚sz) domyÅ›lna wysokość strony , w punktach (1/72 in) domyÅ›lna szerokość strony , w punktach (1/72 in) domyÅ›lny kolor papieru domyÅ›lny styl papieru (zwykÅ‚y, w liniÄ™ z marginesem, w liniÄ™, w kratkÄ™) rozdzielczość ekranu w pikselach na cal poczÄ…tkowy poziom powiÄ™kszenia w procentach wysokość okna w pikselach szerokość okna w pikselach (jeÅ›li nie zmaksymalizowano) grubość poszczególnych gumek (w punktach, 1 pt = 1/72 in) grubość poszczególnych markerów (w punktach, 1 pt = 1/72 w) grubość poszczególnych dÅ‚ugopisów (w punktach, 1 pt = 1/72 in) użyć rozszerzeÅ„ XInput (prawda/faÅ‚sz)%01234567A4A4 (poziomo)Auto-Zapis ustawieÅ„O XournalWszystkie plikiAdnotacja PD_FZastosuj _do wszystkich stronDołącz plik do dziennikaAuto-Åadowanie pdf.xojTÅ‚oTÅ‚o z zrzutu ekr_anuPliki bitmapoweCzarnyNiebieskiPrzycisk _2 MapowaniePrzycisk _3 MapowaniePrzycisk przełącza mapowanieSkopiujNie można otworzyć tÅ‚a '%s'.Nie można otworzyć tÅ‚a '%s'. Wybierz inny plik?Nie można otworzyć tÅ‚a '%s'. Ustawienie tÅ‚a na biaÅ‚o.Nie można zapisać tÅ‚a '%s'. Kontynuacja mimo wszystko.Nie można odnaleźć pliku pixmap: %sNiestandardowyWytnijDomyÅ›lnyDomyÅ›lna gumka DomyÅ›lny markerDomyÅ›lny dÅ‚ugopisDomyÅ›lny tekst DomyÅ›lny _papierUsuÅ„ wa_rstwÄ™GumkaOpc_je gumkiBłąd tworzenia pliku '%s'Błąd otwarcia tÅ‚a '%s'Błąd otwierania pliku '%s'Błąd zapisywania pliku '%s'Eksportuj do PDFDrobnoPierwsza stronaPeÅ‚ny ekranSzaryZielonyN_arzÄ™dzie rÄ™czneNarzÄ™dzie rÄ™czneWysokość:MarkerOpcje markeraNieprawidÅ‚owy parametr wiersza poleceÅ„. Użyj: %s [nazwa pliku.xoj] NieprawidÅ‚owa zawartość plikuOstatnia stronaWarstwa %dZ lewej pasek przewijaniaJasnoniebieskiJasnozielonyPurpurowyÅšredniNowyNowa strona na _koÅ„cuNowa strona _PoNowa strona _PrzedNastÄ™pna stronaNormalny rozmiarNormalny rozmiar (100%)OtwórzOtwórz tÅ‚oOtwórz dziennikOtwórz PDFPomaraÅ„czowyPliki PDFPS/PDF pliki (jako mapy bitowe)Wysokość stronySzerokość stronySzerokość _stronyRo_zmiar papieru_Kolor papieru_Styl papieruWklejDÅ‚ugopis_Opcje DÅ‚ugopisuOłówekWybierz kolor papieruPoprzednia stronaOpcje drukowaniaOstatnie Dok_umentyCzerwonyPonówLinijkaLinijkaZapiszZapisz dziennikZapisać zmiany w '%s'?Wybierz czcionkÄ™Wybierz re_gionWybierz ProstokÄ…tWybierz regionWybierz _ProstokÄ…tUstaw jako domyÅ›lnyUstaw jako domyÅ›lnyUstaw rozmiar papieruUstaw powiÄ™kszenieUstaw numer stronyRozpoznanie KsztaÅ‚tuSkróć _menuStandardowy rozmiar papieru:Tekst_Czcionka tekstu...GrubyPrzełącza na peÅ‚ny ekranCofnijNiezatytuÅ‚owanyUżyj _XInputPionowy odstÄ™pBiaÅ‚ySzerokość:Napisany przez Denis Auroux oraz innych współpracowników http://xournal.sourceforge.net/XournalXournal - %sPliki XournalŻółtyPowiÄ™kszPomniejszPowiÄ™ksz:_O programie_Kolor_CiÄ…gÅ‚y_Kopia aktywnego pÄ™dzla_DomyÅ›lny dÅ‚ugopis_UsuÅ„ stronÄ™_Edycja_Gumka_Eksportuj do formatu PDF_Plik_Pierwsza strona_SpÅ‚aszcz_Pomoc_Ukryj warstwÄ™_Marker_Dziennik_Ostatnia strona_ZaÅ‚aduj tÅ‚o_Nowa warstwa_NastÄ™pna strona_Jedna strona_Opcje_DÅ‚ugopis_CzuÅ‚ość nacisku_Poprzednia strona_Zapisz ustawienia_Ustaw PowiÄ™kszenie_Rozpoznanie KsztaÅ‚tu_Pokaż warstwÄ™_Tekst_NarzÄ™dzia_Pionowy odstÄ™p_Widok_PowiÄ™ksz_niebieski_niebieski papier_usuÅ„ uderzeniem_drobno_w kratkÄ™_zielony_zielony papierw linie _z marginesem_purpurowy_Å›redni_pomaraÅ„czowy_pomaraÅ„czowy papier _różowy papier_zwykÅ‚y_czerwonyw linie _bez marginesu_standardowy_gruby_bardzo drobno_biaÅ‚y_biaÅ‚y papier_zamieć_żółty_żółty papierczarn_ycm_sz_arywjasnonie_bieskijasnozi_elonyinny...pikselipunktówbar_dzo grubyxournal-0.4.8/po/zh_CN.gmo0000664000175000017500000004577312003021741014776 0ustar aurouxaurouxÞ• ìè éôŠý-ˆ4¶+ëILaI®3øS,<€#½?áF!Lh3µSé<=#z?žFÞL%Zr>Í; H[2v=©@ç?(h*{5¦8Ü8 7N B† 6É ]!D^!h£!< "1I"o{"5ë",!#N#h#‚#œ#£# ©#%Ê#Qð#'B$-j$,˜$Å$8Þ$+%#C%*g%*’%½%0Ú%= &BI&:Œ&#Ç&Bë&.'0'2'4'6'8':'<'>'@'C'R' i' w' ''£'¾' Ï'Ú' ñ'þ'( ((-(E(J(4j(<Ÿ(3Ü().)5)9)A)P) d) p)~) )F›)â)é)ù)*0*H* _*m* r* }*‰*Ž* ”* Ÿ*©* ±*½*:Ò* + #+-+6+ L+ W+c+k+r+u+y+Š+š+ «+ µ+Á+Ô+Ù+ é+ö+ÿ+ ,, *, 6, A, M, Y, f,s,y, },Š,‘, ¤, ²,À,Ô,æ,ê,ï,ö,ü, -- $-0-?- P-^-p-€--ž-§-·-È-"×-ú-. .#.). ;.E.'[.ƒ.ˆ. ‘..¬.².\¹./ / +/9/@/H/Q/X/_/ f/r/ ‰/ –/£/©/ ±/½/Ì/ Ò/Þ/ç/ í/ ù/0 00/0 @0 K0 V0`0i0o0t0Š0™0²0 Ä0Î0 à0ì0ò0ù0 111 1'171=1D1 K1X1_1h1p1 x1 †1’1™1ž1 ¥1¯1 ¶1Á1 È1 Õ1ß1 ç1õ1ü1ÿ12 2 2!2*212 82ÐD244U#43y40­4$Þ4=59A5={5*¹5<ä53!6$U66z6<±6Lî6*;7<f73£7×7-ö7<$8Ka8L­82ú82-9`9s9$†9*«92Ö93 :=:!M:'o:/—:0Ç:(ø::!;9\;d–;6û;U2<'ˆ<$°<`Õ<!6=!X=z== =°=¶=»=Ø=Sð=D>*c>*Ž>¹>5Ì>%?(?D?^?t? ‡?3¨?3Ü?0@A@3]@‘@“@•@—@™@›@@Ÿ@¡@£@ ¦@±@Ë@ Ú@ ç@ò@AA3A:A KAXA_AfAuA„A—AžA0¼A5íA/#B"SB vB€B‡BŽB žB «B µB ÂB ÐB2ÞB CC,CEC^CwC CšC¡C¨C¯C¶C½C ÎCÛCâCéC4úC/DBD IDTDdDkD rD|D ƒDD”D¥D¹D ÍD ×DäD÷D þD E E"E )E3E LEYE `EkE|EEžE¥E ©E·E¾E ÑE ÛEèEÿEFF F)F0F 7FDF YFfF wF „F‘F¢F ³FÀF ÓFàF ðFýFG)G=GDGXG _G lGvG!ˆGªG ±G »G ÉGÖGÝGWäGåÄ6Ý¹Ž–—Å4ʾF÷\'˧ o,Ö l:À”¸ú2¨Ôª£ëÚ]ƒç3ºtýЫÜ8¢"¥-=Ié¤ÿG¶Œ¦€V‹æÓÕuó9UÒß“èŸg#©Eež{ä(T° C ’vþAö…d•û<œ²™fYáòøía@X‘)ñbÍ|Îàzj Øðp¡iSŠõǽs~›}0³  w*¼×­ ?¿;µ̯®kx[5ãü Layer: Page Xournal configuration file. This file is generated automatically upon saving preferences. Use caution when editing this file manually. always map eraser tip to eraser (true/false) apply paper style changes to all pages (true/false) auto-save preferences on exit (true/false) automatically load filename.pdf.xoj instead of filename.pdf (true/false) bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi) bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi) button 2 brush color (for pen or highlighter only) button 2 brush linked to primary brush (true/false) (overrides all other settings) button 2 brush thickness (pen, eraser, or highlighter only) button 2 eraser mode (eraser only) button 2 ruler mode (true/false) (for pen or highlighter only) button 2 shape recognizer mode (true/false) (pen or highlighter only) button 2 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) button 3 brush color (for pen or highlighter only) button 3 brush linked to primary brush (true/false) (overrides all other settings) button 3 brush thickness (pen, eraser, or highlighter only) button 3 eraser mode (eraser only) button 3 ruler mode (true/false) (for pen or highlighter only) button 3 shape recognizer mode (true/false) (pen or highlighter only) button 3 tool (pen, eraser, highlighter, text, selectrect, vertspace, hand) buttons 2 and 3 switch mappings instead of drawing (useful for some tablets) (true/false) default eraser mode (standard = 0, whiteout = 1, strokes = 2) default eraser thickness (fine = 1, medium = 2, thick = 3) default font size default highlighter color default highlighter is in ruler mode (true/false) default highlighter is in shape recognizer mode (true/false) default highlighter thickness (fine = 1, medium = 2, thick = 3) default path for open/save (leave blank for current directory) default pen color default pen is in ruler mode (true/false) default pen is in shape recognizer mode (true/false) default pen thickness (fine = 1, medium = 2, thick = 3) discard Core Pointer events in XInput mode (true/false) document view (true = continuous, false = single page) force PDF rendering through cairo (slower but nicer) (true/false) hide some unwanted menu or toolbar items (true/false) highlighter opacity (0 to 1, default 0.5) warning: opacity level is not saved in xoj files! include paper ruling when printing or exporting to PDF (true/false) interface components from top to bottom valid values: drawarea menu main_toolbar pen_toolbar statusbar interface components in fullscreen mode, from top to bottom interface has left-handed scrollbar (true/false) interface items to hide (customize at your own risk!) see source file xo-interface.c for a list of item names just-in-time update of page backgrounds (true/false) maximize the window at startup (true/false) maximum width multiplier minimum width multiplier name of the default font of %d of n preferred unit (cm, in, px, pt) scrollbar step increment (in pixels) selected tool at startup (pen, eraser, highlighter, selectrect, vertspace, hand) start in full screen mode (true/false) the default page height, in points (1/72 in) the default page width, in points (1/72 in) the default paper color the default paper style (plain, lined, ruled, or graph) the display resolution, in pixels per inch the initial zoom level, in percent the multiplicative factor for zoom in/out the step increment in the zoom dialog box the window height in pixels the window width in pixels (when not maximized) thickness of the various erasers (in points, 1 pt = 1/72 in) thickness of the various highlighters (in points, 1 pt = 1/72 in) thickness of the various pens (in points, 1 pt = 1/72 in) use XInput extensions (true/false) use pressure sensitivity to control pen stroke width (true/false)%01234567A4A4 (landscape)A_uto-Save PreferencesAbout XournalAll filesAnnotate PD_FApply _To All PagesAttach file to the journalAutoload pdf.xojBackgroundBackground Screens_hotBitmap filesBlackBlueButton _2 MappingButton _3 MappingButtons Switch MappingsCopyCould not open background '%s'.Could not open background '%s'. Select another file?Could not open background '%s'. Setting background to white.Could not write background '%s'. Continuing anyway.Couldn't find pixmap file: %sCustomCutDefaultDefault EraserDefault HighlighterDefault PenDefault Te_xtDefault _PaperDelete La_yerDrawing is not allowed on the background layer. Switching to Layer 1.EraserEraser Optio_nsError creating file '%s'Error opening background '%s'Error opening file '%s'Error saving file '%s'Export to PDFFineFirst PageFull ScreenGrayGreenH_and ToolHand ToolHeight:HighlighterHighlighter Opt_ionsInvalid command line parameters. Usage: %s [filename.xoj] Invalid file contentsLast PageLayer %dLeft-Handed ScrollbarLight BlueLight GreenMagentaMediumNANewNew Page At _EndNew Page _AfterNew Page _BeforeNext PageNormal SizeNormal size (100%)OpenOpen BackgroundOpen JournalOpen PDFOrangePDF filesPS/PDF files (as bitmaps)Page HeightPage WidthPage _WidthPaper Si_zePaper _ColorPaper _StylePastePenPen _OptionsPencilPick a Paper ColorPrevious PagePrint OptionsPrint Paper _RulingRecent Doc_umentsRedRedoRu_lerRulerSaveSave JournalSave changes to '%s'?Select FontSelect Re_gionSelect RectangleSelect RegionSelect _RectangleSet As De_faultSet As DefaultSet Paper SizeSet ZoomSet page numberShape RecognizerShorten _MenusShould the file %s be overwritten?Standard paper sizes:TextText _Font...ThickToggle FullscreenUS LetterUS Letter (landscape)Unable to render one or more PDF pages.UndoUntitledUse _XInputVertical SpaceWhiteWidth:Written by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal filesYellowZoom InZoom OutZoom: _About_Color_Continuous_Copy of Current Brush_Default Pen_Delete Page_Edit_Eraser_Eraser Tip_Export to PDF_File_First Page_Flatten_Help_Hide Layer_Highlighter_Image_Last Page_Link to Primary Brush_Load Background_New Layer_Next Page_One Page_Options_Page_Pen_Pressure sensitivity_Previous Page_Progressive Backgrounds_Save Preferences_Set Zoom_Shape Recognizer_Show Layer_Text_Tools_Vertical Space_View_Zoom_blue_blue paper_delete strokes_fine_graph_green_green paper_lined_magenta_medium_orange_orange paper_pink paper_plain_red_ruled_standard_thick_very fine_white_white paper_whiteout_yellow_yellow paperblac_kcmgr_ayinlight bl_uelight gr_eenother...pixelspointsver_y thickProject-Id-Version: xournal 0.4.7 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2012-05-22 15:32-0700 PO-Revision-Date: 2012-07-20 11:28+0800 Last-Translator: mutse Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit 层: 页ç Xournal é…置文件。 在ä¿å­˜é¦–选项中设置åŽè‡ªåŠ¨ç”Ÿæˆæ­¤é…置文件。 总是将橡皮擦æç¤ºæ˜ å°„到橡皮擦(是/å¦)将页é¢é£Žæ ¼æ›´æ”¹åº”用到所有页(是/å¦)退出自动ä¿å­˜é¦–选项(是/å¦)自动加载 文件å.pdf.xoj 替代 文件å.pdf (是/å¦)使用libgnomeprintæ‰“å°æ—¶PDF背景ä½å›¾åˆ†è¾¨çއ(dpi)PS/PDF背景ä½å›¾åˆ†è¾¨çއç€è‰²ä½¿ç”¨ghostscript脚本(dpi)按钮2刷å­è‰²å½©(仅针对笔或高亮)将按钮2刷å­è¿žæŽ¥è‡³ä¸»åˆ·(是/å¦)(é‡è½½æ‰€æœ‰è®¾ç½®)按钮2刷å­åŽšåº¦(ä»…é’ˆå¯¹ç¬”ã€æ©¡çš®æˆ–高亮)按钮2擦除模å¼(仅针对橡皮)标尺模å¼ä¸‹æŒ‰é’®2(是/å¦)(仅针对笔或高亮)图形识别模å¼ä¸‹æŒ‰é’®2(是/å¦)(仅针对笔或高亮)按钮2 工具(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)按钮3刷å­è‰²å½©(仅针对笔或高亮)将按钮3刷å­è¿žæŽ¥åˆ°ä¸»åˆ·(是/å¦)(é‡è½½æ‰€æœ‰è®¾ç½®)按钮3刷å­åŽšåº¦(ä»…é’ˆå¯¹ç¬”ã€æ©¡çš®æˆ–高亮)按钮3擦除模å¼(仅擦除)标尺模å¼ä¸‹æŒ‰é’®3(仅针对笔或高亮)图形识别模å¼ä¸‹æŒ‰é’®3(是/å¦)(仅针对笔或高亮)按钮3工具(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)按钮2å’Œ3åˆ‡æ¢æ˜ å°„替代绘图(对于一些笔记是有用的)(是/å¦)默认橡皮模å¼(标准=0,乳白=1,笔划=2)默认橡皮厚度(细å°=1,中等=2,粗的=3)默认字体大å°é»˜è®¤é«˜äº®é¢œè‰²æ ‡å°ºæ¨¡å¼ä¸‹é»˜è®¤é«˜äº®(是/å¦)图形识别模å¼ä¸‹é»˜è®¤é«˜äº®(是/å¦)默认高亮厚度(细å°=1,中等=2,粗的=3)打开/ä¿å­˜é»˜è®¤è·¯å¾„(当å‰ç›®å½•ä¿ç•™ç©ºç™½)默认笔颜色标尺模å¼ä¸‹é»˜è®¤ç¬”(是/å¦)图形识别模å¼ä¸‹é»˜è®¤ç¬”(是/å¦)默认笔厚度(细å°=1,中等=2,粗的=3)丢弃XInput模å¼ä¸‹æ ¸å¿ƒæŒ‡é’ˆäº‹ä»¶(是/å¦)文档视图(true=连续,false=å•页)强制通过cairo进行PDFç€è‰²(缓慢而细致)(是/å¦)éšè—一些ä¸éœ€è¦çš„èœå•项或工具æ¡é¡¹(是/å¦)高亮ä¸é€æ˜Žåº¦(0 修改 1,默认0.5) 警告:ä¸é€æ˜Žåº¦çº§åˆ«ä¸ä¼šä¿å­˜åˆ°xojæ–‡ä»¶ä¸­ï¼æ‰“å°æˆ–导出PDF文件时包å«é¡µé¢è§„则(是/å¦)从上至下接å£ç»„ä»¶ 有效值:drawarea menu main_toolbar pen_toolbar statusbar免屿¨¡å¼ä¸‹ä»Žä¸Šè‡³ä¸‹æŽ¥å£ç»„件左侧有滚动æ¡çš„æŽ¥å£(是/å¦)éšè—接å£é¡¹(自定义自己的风险ï¼) 查看æºç æ–‡ä»¶xo-interface.c 找项目ååˆ—è¡¨åŠæ—¶æ›´æ–°é¡µé¢èƒŒæ™¯(是/å¦)ä»¥çª—å£æœ€å¤§åŒ–å¯åЍ(是/å¦)最大宽度å€å¢žæœ€å°å®½åº¦å€å¢žé»˜è®¤å­—体åof %dof n首选å•ä½(cm, in, px, pt)滚动æ¡å¢žé‡(åƒç´ )å¯åŠ¨æ—¶å·²é€‰å·¥å…·(ç¬”ã€æ©¡çš®ã€é«˜äº®ã€é€‰æ‹©çŸ©å½¢ã€ç«–ç›´é—´è·ã€æ‰‹å½¢)以免屿¨¡å¼å¯åЍ(是/å¦)默认页é¢é«˜åº¦ï¼Œç”¨ç‚¹è¡¨ç¤º(1/72 in)默认页é¢å®½åº¦ï¼Œç”¨ç‚¹è¡¨ç¤º(1/72 in)默认页é¢é¢œè‰²é»˜è®¤é¡µé¢é£Žæ ¼(ç®€æ˜“ã€æ¡çº¹ã€åˆ’线或图形)显示器分辨率,åƒç´ ç‚¹/英寸åˆå§‹åŒ–当å‰ç¼©æ”¾çº§åˆ«æ”¾å¤§/缩å°å€æ•°å› å­ç¼©æ”¾å¯¹è¯æ¡†å¢žé‡çª—å£é«˜åº¦åƒç´ çª—å£å®½åº¦åƒç´ (éžæœ€å¤§åŒ–)ä¸åŒæ©¡çš®çš„厚度(用点表示,1pt = 1/72 in)ä¸åŒé«˜äº®çš„厚度(用点表示,1pt = 1/72 in)ä¸åŒç¬”的厚度(用点表示,1pt = 1/72 in)使用XInput扩展(是/å¦)ä½¿ç”¨åŽ‹åŠ›æ•æ„Ÿåº¦æ¥æŽ§åˆ¶ç¬”划宽度(是/å¦)%01234567A4A4(风景)自动ä¿å­˜é¦–选项(_u)关于 Xournal所有文件PD_F注释应用所有页(_T)在日志上附加文件自动加载pdf.xoj背景背景截图(_h)ä½å›¾æ–‡ä»¶é»‘色è“色按钮_2映射按钮_3映射按钮开关éšå°„å¤åˆ¶æ— æ³•打开背景文件 '%s'无法打开背景 '%s'。 请选择其它文件无法打开背景 '%s',并设置背景为白色。无法写入背景 '%s'。无论如何继续。无法找到åƒç´ æ˜ å°„文件: %s自定义剪切默认默认橡皮擦默认高亮默认笔默认文本默认页(_P)删除层(_y)背景层ä¸å…许绘图。 请切æ¢è‡³ç¬¬1层。橡皮擦橡皮选项(_n)新建文件 '%s' 错误打开背景 '%s' 错误打开文件 '%s' 错误ä¿å­˜æ–‡ä»¶ '%s' 错误导出PDF细å°é¦–页全å±ç°è‰²ç»¿è‰²æ‰‹å½¢å·¥å…·(_a)手形工具高:高亮高亮选项(_i)æ— æ•ˆå‘½ä»¤è¡Œå‚æ•°ã€‚ 用法:%s[文件å.xoj] 无效文件内容末页第 %d å±‚å·¦ä¾§æ»šåŠ¨æ¡æµ…è“æµ…绿红紫色中等ä¸é€‚用新建新建尾页(_E)新建åŽä¸€é¡µ(_A)新建å‰ä¸€é¡µ(_B)下一页一般尺寸一般大å°(100%)打开打开背景打开日志打开PDF橙色PDF文件PS/PDF 文件(作ä½å›¾)页é¢é«˜åº¦é¡µå®½é¡µå®½(_W)页é¢å¤§å°(_z)页é¢é¢œè‰²(_C)页é¢é£Žæ ¼(_S)粘贴笔笔选项(_O)铅笔挑选页é¢è‰²å½©ä¸Šä¸€é¡µæ‰“å°é€‰é¡¹æ‰“å°é¡µé¢è§„则(_R)最近文档(_u)红色é‡å¤è§„则(_l)å°ºå­ä¿å­˜ä¿å­˜æ—¥å¿—更改ä¿å­˜ä¸º '%s'选择字体选择区域(_g)选择矩形选择区域选择矩形(_R)默认设置(_f)默认设置设置页é¢å¤§å°ç¼©æ”¾è®¾ç½®è®¾ç½®é¡µç å·å›¾å½¢è¯†åˆ«ç¼©çŸ­èœå•(_M)文件 %s 是å¦è¢«è¦†ç›–?标准页é¢å¤§å°:文本文本字体...(_F)粗的全å±åˆ‡æ¢US ä¿¡ä»¶US ä¿¡ä»¶(风景)无法给一页或多页PDFç€è‰²å–消未使用使用_XInput垂直间è·ç™½è‰²å®½ï¼šWritten by Denis Auroux and other contributors http://xournal.sourceforge.net/ XournalXournal - %sXournal文件黄色放大缩å°ç¼©æ”¾å…³äºŽ(_A)颜色(_C)ç»§ç»­(_C)å¤åˆ¶å½“å‰åˆ·(_C)默认笔(_D)删除页(_D)编辑(_E)橡皮擦(_E)橡皮擦技巧(_E)导出PDF(_E)文件(_F)首页(_F)展开(_F)帮助(_H)éšè—层(_H)高亮(_H)å›¾åƒæœ«é¡µ(_L)连接主刷(_L)加载背景(_L)新建层(_N)下一页(_N)一页(_O)选项页é¢(_P)笔(_P)åŽ‹åŠ›æ•æ„Ÿæ€§(_P)上一页(_P)æ¸è¿›çš„背景(_P)ä¿å­˜é¦–选项(_S)设置缩放(_S)图形识别(_S)显示层(_S)文本(_T)工具(_T)垂直间è·(_V)视图(_V)缩放(_Z)è“色(_b)è“色纸(_b)删除笔划(_d)细å°(_f)图形(_g)绿色(_g)绿色纸(_g)æ¡çº¹(_l)红紫色(_m)中等(_m)橙色(_o)橙色纸(_o)粉红色纸(_p)简易(_p)红色(_r)画线(_r)标准(_s)粗线(_t)很细å°(_v)白色(_w)白色纸(_w)乳白(_w)黄色(_y)黄色纸(_y)黑色(_k)厘米ç°è‰²(_a)英寸浅è“(_u)浅绿(_e)其它...åƒç´ ç‚¹å¾ˆç²—(_y)xournal-0.4.8/po/ja.po0000644000175000017500000007776712243723035014244 0ustar aurouxauroux# Japanese translations for xournal package. # Copyright (C) 2013 THE xournal'S COPYRIGHT HOLDER # This file is distributed under the same license as the xournal package. # Hiroshi Saito , 2013. # msgid "" msgstr "" "Project-Id-Version: Xournal 0.4.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-08-02 22:58+0900\n" "PO-Revision-Date: 2013-08-04 13:03+0900\n" "Last-Translator: Hiroshi Saito \n" "Language-Team: Japanese\n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/main.c:80 #, c-format msgid "" "Invalid command line parameters.\n" "Usage: %s [filename.xoj]\n" msgstr "" "䏿­£ãªã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³å¼•æ•°ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚\n" "使用方法: %s [ファイルå.xoj]\n" #: ../src/main.c:309 ../src/xo-callbacks.c:122 ../src/xo-callbacks.c:173 #: ../src/xo-callbacks.c:3228 #, c-format msgid "Error opening file '%s'" msgstr "'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../src/xo-interface.c:355 ../src/xo-interface.c:3012 ../src/xo-misc.c:1501 msgid "Xournal" msgstr "Xournal" #: ../src/xo-interface.c:365 msgid "_File" msgstr "ファイル(_F)" #: ../src/xo-interface.c:376 msgid "Annotate PD_F" msgstr "PDFã«æ³¨é‡ˆã‚’付ã‘ã‚‹(_F)" #: ../src/xo-interface.c:401 msgid "Recent Doc_uments" msgstr "最近開ã„ãŸãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ(_u)" #: ../src/xo-interface.c:408 msgid "0" msgstr "" #: ../src/xo-interface.c:412 msgid "1" msgstr "" #: ../src/xo-interface.c:416 msgid "2" msgstr "" #: ../src/xo-interface.c:420 msgid "3" msgstr "" #: ../src/xo-interface.c:424 msgid "4" msgstr "" #: ../src/xo-interface.c:428 msgid "5" msgstr "" #: ../src/xo-interface.c:432 msgid "6" msgstr "" #: ../src/xo-interface.c:436 msgid "7" msgstr "" #: ../src/xo-interface.c:445 msgid "Print Options" msgstr "å°åˆ·è¨­å®š" #: ../src/xo-interface.c:460 msgid "_Export to PDF" msgstr "PDFã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ(_E)" #: ../src/xo-interface.c:476 msgid "_Edit" msgstr "編集(_E)" #: ../src/xo-interface.c:521 msgid "_View" msgstr "表示(_V)" #: ../src/xo-interface.c:528 msgid "_Continuous" msgstr "連続ページ(_C)" #: ../src/xo-interface.c:534 msgid "_One Page" msgstr "å˜ä¸€ãƒšãƒ¼ã‚¸(_O)" #: ../src/xo-interface.c:545 msgid "Full Screen" msgstr "フルスクリーン" #: ../src/xo-interface.c:557 msgid "_Zoom" msgstr "ズーム(_Z)" #: ../src/xo-interface.c:585 msgid "Page _Width" msgstr "ページã®å¹…ã‚’åˆã‚ã›ã‚‹(_W)" #: ../src/xo-interface.c:596 msgid "_Set Zoom" msgstr "å€çŽ‡ã‚’æŒ‡å®šã™ã‚‹(_S)" #: ../src/xo-interface.c:605 msgid "_First Page" msgstr "最åˆã®ãƒšãƒ¼ã‚¸(_F)" #: ../src/xo-interface.c:616 msgid "_Previous Page" msgstr "å‰ã®ãƒšãƒ¼ã‚¸(_P)" #: ../src/xo-interface.c:627 msgid "_Next Page" msgstr "次ã®ãƒšãƒ¼ã‚¸(_N)" #: ../src/xo-interface.c:638 msgid "_Last Page" msgstr "最後ã®ãƒšãƒ¼ã‚¸(_L)" #: ../src/xo-interface.c:654 msgid "_Show Layer" msgstr "上ã®ãƒ¬ã‚¤ãƒ¤ã‚’表示(_S)" #: ../src/xo-interface.c:662 msgid "_Hide Layer" msgstr "ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ã‚’éš ã™(_H)" #: ../src/xo-interface.c:670 msgid "_Page" msgstr "ページ(_P)" #: ../src/xo-interface.c:677 msgid "New Page _Before" msgstr "ç›´å‰ã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_B)" #: ../src/xo-interface.c:681 msgid "New Page _After" msgstr "ç›´å¾Œã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_A)" #: ../src/xo-interface.c:685 msgid "New Page At _End" msgstr "æœ€å¾Œã«æ–°è¦ãƒšãƒ¼ã‚¸æŒ¿å…¥(_E)" #: ../src/xo-interface.c:689 msgid "_Delete Page" msgstr "ページを削除(_D)" #: ../src/xo-interface.c:698 msgid "_New Layer" msgstr "æ–°è¦ãƒ¬ã‚¤ãƒ¤ã‚’作æˆ(_N)" #: ../src/xo-interface.c:702 msgid "Delete La_yer" msgstr "ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ã‚’削除(_y)" #: ../src/xo-interface.c:706 msgid "_Flatten" msgstr "平らã«ã™ã‚‹(_F)" #: ../src/xo-interface.c:715 msgid "Paper Si_ze" msgstr "用紙設定(_z)" #: ../src/xo-interface.c:719 msgid "Paper _Color" msgstr "背景色(_C)" #: ../src/xo-interface.c:726 msgid "_white paper" msgstr "白(_w)" #: ../src/xo-interface.c:732 msgid "_yellow paper" msgstr "黄(_y)" #: ../src/xo-interface.c:738 msgid "_pink paper" msgstr "ピンク(_p)" #: ../src/xo-interface.c:744 msgid "_orange paper" msgstr "オレンジ(_o)" #: ../src/xo-interface.c:750 msgid "_blue paper" msgstr "é’(_b)" #: ../src/xo-interface.c:756 msgid "_green paper" msgstr "ç·‘(_g)" #: ../src/xo-interface.c:762 ../src/xo-interface.c:1039 msgid "other..." msgstr "ãã®ä»–..." #: ../src/xo-interface.c:766 ../src/xo-interface.c:802 #: ../src/xo-interface.c:1043 ../src/xo-interface.c:1290 #: ../src/xo-interface.c:1372 msgid "NA" msgstr "無効" #: ../src/xo-interface.c:771 msgid "Paper _Style" msgstr "用紙スタイル(_S)" #: ../src/xo-interface.c:778 msgid "_plain" msgstr "無地(_p)" #: ../src/xo-interface.c:784 msgid "_lined" msgstr "ç¸¦ç·šä»˜ãæ¨ªç½«(_l)" #: ../src/xo-interface.c:790 msgid "_ruled" msgstr "横罫(_r)" #: ../src/xo-interface.c:796 msgid "_graph" msgstr "方眼(_g)" #: ../src/xo-interface.c:807 msgid "Apply _To All Pages" msgstr "å…¨ã¦ã®ãƒšãƒ¼ã‚¸ã«é©ç”¨(_T)" #: ../src/xo-interface.c:816 msgid "_Load Background" msgstr "背景を読ã¿è¾¼ã‚€(_L)" #: ../src/xo-interface.c:824 msgid "Background Screens_hot" msgstr "スクリーンショットを背景ã«ã™ã‚‹(_h)" #: ../src/xo-interface.c:833 msgid "Default _Paper" msgstr "標準ã®ç”¨ç´™ã«ã™ã‚‹(_P)" #: ../src/xo-interface.c:837 msgid "Set As De_fault" msgstr "ç¾åœ¨ã®è¨­å®šã‚’標準ã«ã™ã‚‹(_f)" #: ../src/xo-interface.c:841 msgid "_Tools" msgstr "ツール(_T)" #: ../src/xo-interface.c:848 ../src/xo-interface.c:1220 #: ../src/xo-interface.c:1302 msgid "_Pen" msgstr "ペン(_P)" #: ../src/xo-interface.c:857 ../src/xo-interface.c:1226 #: ../src/xo-interface.c:1308 msgid "_Eraser" msgstr "消ã—ゴム(_E)" #: ../src/xo-interface.c:866 ../src/xo-interface.c:1232 #: ../src/xo-interface.c:1314 msgid "_Highlighter" msgstr "ãƒã‚¤ãƒ©ã‚¤ãƒˆ(_H)" #: ../src/xo-interface.c:875 ../src/xo-interface.c:1238 #: ../src/xo-interface.c:1320 msgid "_Text" msgstr "テキスト(_T)" #: ../src/xo-interface.c:884 ../src/xo-interface.c:1244 #: ../src/xo-interface.c:1326 msgid "_Image" msgstr "ç”»åƒ(_I)" #: ../src/xo-interface.c:898 msgid "_Shape Recognizer" msgstr "図形èªè­˜(_S)" #: ../src/xo-interface.c:905 msgid "Ru_ler" msgstr "定è¦(_l)" #: ../src/xo-interface.c:917 ../src/xo-interface.c:1250 #: ../src/xo-interface.c:1332 msgid "Select Re_gion" msgstr "é ˜åŸŸé¸æŠž(_g)" #: ../src/xo-interface.c:926 ../src/xo-interface.c:1256 #: ../src/xo-interface.c:1338 msgid "Select _Rectangle" msgstr "çŸ©å½¢é¸æŠž(_R)" #: ../src/xo-interface.c:935 ../src/xo-interface.c:1262 #: ../src/xo-interface.c:1344 msgid "_Vertical Space" msgstr "行間を変ãˆã‚‹(_V)" #: ../src/xo-interface.c:944 ../src/xo-interface.c:1268 #: ../src/xo-interface.c:1350 msgid "H_and Tool" msgstr "ãƒãƒ³ãƒ‰ãƒ„ール(_a)" #: ../src/xo-interface.c:957 msgid "_Color" msgstr "色(_C)" #: ../src/xo-interface.c:968 msgid "blac_k" msgstr "é»’(_k)" #: ../src/xo-interface.c:974 msgid "_blue" msgstr "é’(_b)" #: ../src/xo-interface.c:980 msgid "_red" msgstr "赤(_r)" #: ../src/xo-interface.c:986 msgid "_green" msgstr "ç·‘(_g)" #: ../src/xo-interface.c:992 msgid "gr_ay" msgstr "ç°(_a)" #: ../src/xo-interface.c:1003 msgid "light bl_ue" msgstr "è–„é’(_u)" #: ../src/xo-interface.c:1009 msgid "light gr_een" msgstr "黄緑(_e)" #: ../src/xo-interface.c:1015 msgid "_magenta" msgstr "マゼンタ(_m)" #: ../src/xo-interface.c:1021 msgid "_orange" msgstr "オレンジ(_o)" #: ../src/xo-interface.c:1027 msgid "_yellow" msgstr "黄(_y)" #: ../src/xo-interface.c:1033 msgid "_white" msgstr "白(_w)" #: ../src/xo-interface.c:1048 msgid "Pen _Options" msgstr "ペン設定(_O)" #: ../src/xo-interface.c:1055 msgid "_very fine" msgstr "極細(_v)" #: ../src/xo-interface.c:1061 ../src/xo-interface.c:1092 #: ../src/xo-interface.c:1140 msgid "_fine" msgstr "ç´°(_f)" #: ../src/xo-interface.c:1067 ../src/xo-interface.c:1098 #: ../src/xo-interface.c:1146 msgid "_medium" msgstr "中(_m)" #: ../src/xo-interface.c:1073 ../src/xo-interface.c:1104 #: ../src/xo-interface.c:1152 msgid "_thick" msgstr "太(_t)" #: ../src/xo-interface.c:1079 msgid "ver_y thick" msgstr "極太(_y)" #: ../src/xo-interface.c:1085 msgid "Eraser Optio_ns" msgstr "消ã—ゴム設定(_n)" #: ../src/xo-interface.c:1115 msgid "_standard" msgstr "標準(_s)" #: ../src/xo-interface.c:1121 msgid "_whiteout" msgstr "修正液(_w)" #: ../src/xo-interface.c:1127 msgid "_delete strokes" msgstr "ストロークを削除(_d)" #: ../src/xo-interface.c:1133 msgid "Highlighter Opt_ions" msgstr "ãƒã‚¤ãƒ©ã‚¤ãƒˆè¨­å®š(_i)" #: ../src/xo-interface.c:1158 msgid "Text _Font..." msgstr "フォント設定(_F)" #: ../src/xo-interface.c:1174 msgid "_Default Pen" msgstr "標準ペン(_D)" #: ../src/xo-interface.c:1178 msgid "Default Eraser" msgstr "標準消ã—ゴム" #: ../src/xo-interface.c:1182 msgid "Default Highlighter" msgstr "標準ãƒã‚¤ãƒ©ã‚¤ãƒˆ" #: ../src/xo-interface.c:1186 msgid "Default Te_xt" msgstr "標準テキスト(_x)" #: ../src/xo-interface.c:1190 msgid "Set As Default" msgstr "ç¾åœ¨ã®è¨­å®šã‚’標準ã«ã™ã‚‹" #: ../src/xo-interface.c:1194 msgid "_Options" msgstr "オプション(_O)" #: ../src/xo-interface.c:1201 msgid "Use _XInput" msgstr "XInputを使ã†(_X)" #: ../src/xo-interface.c:1205 msgid "_Eraser Tip" msgstr "ãƒ†ãƒ¼ãƒ«ã‚¹ã‚¤ãƒƒãƒæ¶ˆã—ゴムを使ã†(_E)" #: ../src/xo-interface.c:1209 msgid "_Pressure sensitivity" msgstr "筆圧感知を使ã†(_P)" #: ../src/xo-interface.c:1213 msgid "Button _2 Mapping" msgstr "ボタン2ã®è¨­å®š(_2)" #: ../src/xo-interface.c:1278 ../src/xo-interface.c:1360 msgid "_Link to Primary Brush" msgstr "常ã«ãƒ¡ã‚¤ãƒ³ãƒ–ラシã¨åŒã˜ãƒ–ラシを使ã†(_L)" #: ../src/xo-interface.c:1284 ../src/xo-interface.c:1366 msgid "_Copy of Current Brush" msgstr "ç¾åœ¨ã®ãƒ–ラシをä¿å­˜ã—ã¦ä½¿ã†(_C)" #: ../src/xo-interface.c:1295 msgid "Button _3 Mapping" msgstr "ボタン3ã®è¨­å®š(_3)" #: ../src/xo-interface.c:1377 msgid "Buttons Switch Mappings" msgstr "マッピング切り替ãˆã‚’有効化" #: ../src/xo-interface.c:1386 msgid "_Progressive Backgrounds" msgstr "背景を漸進的ã«å†æç”»(_P)" #: ../src/xo-interface.c:1390 msgid "Print Paper _Ruling" msgstr "罫線ã®å°åˆ·(_R)" #: ../src/xo-interface.c:1394 msgid "Autoload pdf.xoj" msgstr "pdf.xojを自動読ã¿è¾¼ã¿" #: ../src/xo-interface.c:1398 msgid "Left-Handed Scrollbar" msgstr "å·¦å´ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼" #: ../src/xo-interface.c:1402 msgid "Shorten _Menus" msgstr "メニューã®ç°¡ç•¥åŒ–(_M)" #: ../src/xo-interface.c:1406 msgid "Pencil Cursor" msgstr "カーソルを鉛筆ã«ã™ã‚‹" #: ../src/xo-interface.c:1415 msgid "A_uto-Save Preferences" msgstr "設定を自動ã§ä¿å­˜ã™ã‚‹(_u)" #: ../src/xo-interface.c:1419 msgid "_Save Preferences" msgstr "設定をä¿å­˜(_S)" #: ../src/xo-interface.c:1423 msgid "_Help" msgstr "ヘルプ(_H)" #: ../src/xo-interface.c:1434 msgid "_About" msgstr "Xournalã«ã¤ã„ã¦(_A)" #: ../src/xo-interface.c:1447 msgid "Save" msgstr "ä¿å­˜" #: ../src/xo-interface.c:1452 msgid "New" msgstr "æ–°è¦" #: ../src/xo-interface.c:1457 msgid "Open" msgstr "é–‹ã" #: ../src/xo-interface.c:1470 msgid "Cut" msgstr "切りå–り" #: ../src/xo-interface.c:1475 msgid "Copy" msgstr "コピー" #: ../src/xo-interface.c:1480 msgid "Paste" msgstr "貼り付ã‘" #: ../src/xo-interface.c:1493 msgid "Undo" msgstr "å…ƒã«æˆ»ã™" #: ../src/xo-interface.c:1498 msgid "Redo" msgstr "やり直ã—" #: ../src/xo-interface.c:1511 msgid "First Page" msgstr "最åˆã®ãƒšãƒ¼ã‚¸" #: ../src/xo-interface.c:1516 msgid "Previous Page" msgstr "å‰ã®ãƒšãƒ¼ã‚¸" #: ../src/xo-interface.c:1521 msgid "Next Page" msgstr "次ã®ãƒšãƒ¼ã‚¸" #: ../src/xo-interface.c:1526 msgid "Last Page" msgstr "最後ã®ãƒšãƒ¼ã‚¸" #: ../src/xo-interface.c:1539 msgid "Zoom Out" msgstr "縮å°" #: ../src/xo-interface.c:1544 ../src/xo-interface.c:3106 msgid "Page Width" msgstr "ページã®å¹…ã‚’åˆã‚ã›ã‚‹" #: ../src/xo-interface.c:1550 msgid "Zoom In" msgstr "拡大" #: ../src/xo-interface.c:1555 msgid "Normal Size" msgstr "標準ã®ã‚µã‚¤ã‚º" #: ../src/xo-interface.c:1560 ../src/xo-interface.c:3065 msgid "Set Zoom" msgstr "å€çŽ‡ã‚’æŒ‡å®šã™ã‚‹" #: ../src/xo-interface.c:1569 msgid "Toggle Fullscreen" msgstr "フルスクリーンモード" #: ../src/xo-interface.c:1578 msgid "Pencil" msgstr "鉛筆" #: ../src/xo-interface.c:1584 msgid "Pen" msgstr "ペン" #: ../src/xo-interface.c:1589 ../src/xo-interface.c:1595 msgid "Eraser" msgstr "消ã—ゴム" #: ../src/xo-interface.c:1600 ../src/xo-interface.c:1606 msgid "Highlighter" msgstr "ãƒã‚¤ãƒ©ã‚¤ãƒˆ" #: ../src/xo-interface.c:1611 ../src/xo-interface.c:1617 msgid "Text" msgstr "テキスト" #: ../src/xo-interface.c:1622 ../src/xo-interface.c:1628 msgid "Image" msgstr "ç”»åƒ" #: ../src/xo-interface.c:1633 ../src/xo-interface.c:1639 msgid "Shape Recognizer" msgstr "図形èªè­˜" #: ../src/xo-interface.c:1642 ../src/xo-interface.c:1648 msgid "Ruler" msgstr "定è¦" #: ../src/xo-interface.c:1659 ../src/xo-interface.c:1665 msgid "Select Region" msgstr "é ˜åŸŸé¸æŠž" #: ../src/xo-interface.c:1670 ../src/xo-interface.c:1676 msgid "Select Rectangle" msgstr "çŸ©å½¢é¸æŠž" #: ../src/xo-interface.c:1681 ../src/xo-interface.c:1687 msgid "Vertical Space" msgstr "行間を変ãˆã‚‹" #: ../src/xo-interface.c:1692 msgid "Hand Tool" msgstr "ãƒãƒ³ãƒ‰ãƒ„ール" #: ../src/xo-interface.c:1711 ../src/xo-interface.c:1715 msgid "Default" msgstr "æ¨™æº–ã«æˆ»ã™" #: ../src/xo-interface.c:1719 ../src/xo-interface.c:1722 msgid "Default Pen" msgstr "標準ペン" #: ../src/xo-interface.c:1733 ../src/xo-interface.c:1741 msgid "Fine" msgstr "ç´°" #: ../src/xo-interface.c:1746 ../src/xo-interface.c:1754 msgid "Medium" msgstr "中" #: ../src/xo-interface.c:1759 ../src/xo-interface.c:1767 msgid "Thick" msgstr "太" #: ../src/xo-interface.c:1786 ../src/xo-interface.c:1793 msgid "Black" msgstr "é»’" #: ../src/xo-interface.c:1798 ../src/xo-interface.c:1805 msgid "Blue" msgstr "é’" #: ../src/xo-interface.c:1810 ../src/xo-interface.c:1817 msgid "Red" msgstr "赤" #: ../src/xo-interface.c:1822 ../src/xo-interface.c:1829 msgid "Green" msgstr "ç·‘" #: ../src/xo-interface.c:1834 ../src/xo-interface.c:1841 msgid "Gray" msgstr "ç°" #: ../src/xo-interface.c:1846 ../src/xo-interface.c:1853 msgid "Light Blue" msgstr "è–„é’" #: ../src/xo-interface.c:1858 ../src/xo-interface.c:1865 msgid "Light Green" msgstr "黄緑" #: ../src/xo-interface.c:1870 ../src/xo-interface.c:1877 msgid "Magenta" msgstr "マゼンタ" #: ../src/xo-interface.c:1882 ../src/xo-interface.c:1889 msgid "Orange" msgstr "オレンジ" #: ../src/xo-interface.c:1894 ../src/xo-interface.c:1901 msgid "Yellow" msgstr "黄" #: ../src/xo-interface.c:1906 ../src/xo-interface.c:1913 msgid "White" msgstr "白" #: ../src/xo-interface.c:1960 msgid " Page " msgstr "ページ" #: ../src/xo-interface.c:1968 msgid "Set page number" msgstr "ページ番å·ã‚’指定" #: ../src/xo-interface.c:1972 msgid " of n" msgstr "/n" #: ../src/xo-interface.c:1980 msgid " Layer: " msgstr "レイヤー:" #: ../src/xo-interface.c:2887 msgid "Set Paper Size" msgstr "用紙サイズ設定" #: ../src/xo-interface.c:2899 msgid "Standard paper sizes:" msgstr "標準用紙サイズ:" #: ../src/xo-interface.c:2907 msgid "A4" msgstr "A4" #: ../src/xo-interface.c:2908 msgid "A4 (landscape)" msgstr "A4(横)" #: ../src/xo-interface.c:2909 msgid "US Letter" msgstr "レター" #: ../src/xo-interface.c:2910 msgid "US Letter (landscape)" msgstr "レター(横)" #: ../src/xo-interface.c:2911 msgid "Custom" msgstr "カスタム" #: ../src/xo-interface.c:2917 msgid "Width:" msgstr "å¹…:" #: ../src/xo-interface.c:2926 msgid "Height:" msgstr "高ã•:" #: ../src/xo-interface.c:2938 msgid "cm" msgstr "センãƒ" #: ../src/xo-interface.c:2939 msgid "in" msgstr "インãƒ" #: ../src/xo-interface.c:2940 msgid "pixels" msgstr "ピクセル" #: ../src/xo-interface.c:2941 msgid "points" msgstr "ãƒã‚¤ãƒ³ãƒˆ" #: ../src/xo-interface.c:3001 msgid "About Xournal" msgstr "Xournalã«ã¤ã„ã¦" #: ../src/xo-interface.c:3017 msgid "" "Written by Denis Auroux\n" "and other contributors\n" " http://xournal.sourceforge.net/ " msgstr "" #: ../src/xo-interface.c:3081 msgid "Zoom: " msgstr "ズーム:" #: ../src/xo-interface.c:3094 msgid "%" msgstr "" #: ../src/xo-interface.c:3099 msgid "Normal size (100%)" msgstr "標準サイズ(100%)" #: ../src/xo-interface.c:3113 msgid "Page Height" msgstr "ページã®é«˜ã•ã‚’åˆã‚ã›ã‚‹" #. user aborted on save confirmation #: ../src/xo-callbacks.c:68 ../src/xo-file.c:799 msgid "Open PDF" msgstr "PDFã‚’é–‹ã" #: ../src/xo-callbacks.c:76 ../src/xo-callbacks.c:149 #: ../src/xo-callbacks.c:248 ../src/xo-callbacks.c:402 #: ../src/xo-callbacks.c:1471 ../src/xo-file.c:807 ../src/xo-image.c:117 msgid "All files" msgstr "ã™ã¹ã¦ã®ãƒ•ァイル" #: ../src/xo-callbacks.c:79 ../src/xo-callbacks.c:405 ../src/xo-file.c:810 msgid "PDF files" msgstr "PDFファイル" #: ../src/xo-callbacks.c:87 ../src/xo-callbacks.c:1494 msgid "Attach file to the journal" msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ã«æ·»ä»˜ã™ã‚‹" #. user aborted on save confirmation #: ../src/xo-callbacks.c:141 msgid "Open Journal" msgstr "ジャーナルを開ã" #: ../src/xo-callbacks.c:152 ../src/xo-callbacks.c:251 msgid "Xournal files" msgstr "Xournalファイル" #: ../src/xo-callbacks.c:201 ../src/xo-callbacks.c:296 #, c-format msgid "Error saving file '%s'" msgstr "'%s'ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../src/xo-callbacks.c:220 msgid "Save Journal" msgstr "ジャーナルをä¿å­˜" #: ../src/xo-callbacks.c:277 ../src/xo-callbacks.c:423 #, c-format msgid "Should the file %s be overwritten?" msgstr "'%s'を上書ãã—ã¾ã™ã‹?" #: ../src/xo-callbacks.c:376 msgid "Export to PDF" msgstr "PDFã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: ../src/xo-callbacks.c:436 #, c-format msgid "Error creating file '%s'" msgstr "'%s'ã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../src/xo-callbacks.c:1398 msgid "Pick a Paper Color" msgstr "用紙ã®è‰²ã‚’é¸ã¶" #: ../src/xo-callbacks.c:1463 msgid "Open Background" msgstr "背景ã®èª­ã¿è¾¼ã¿" #: ../src/xo-callbacks.c:1479 msgid "Bitmap files" msgstr "ビットマップファイル" #: ../src/xo-callbacks.c:1487 msgid "PS/PDF files (as bitmaps)" msgstr "PS/PDFファイル(ビットマップã¨ã—ã¦)" #: ../src/xo-callbacks.c:1517 #, c-format msgid "Error opening background '%s'" msgstr "背景'%s'ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" #: ../src/xo-callbacks.c:2110 msgid "Select Font" msgstr "フォントã®é¸æŠž" #: ../src/xo-callbacks.c:2493 msgid "" "Drawing is not allowed on the background layer.\n" " Switching to Layer 1." msgstr "" "背景レイヤã¸ã®æ›¸ãè¾¼ã¿ã¯ã§ãã¾ã›ã‚“。\n" "レイヤ1ã¸åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚" #: ../src/xo-support.c:90 ../src/xo-support.c:114 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "pixmapファイル'%s'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: ../src/xo-file.c:182 ../src/xo-file.c:214 #, c-format msgid "Could not write background '%s'. Continuing anyway." msgstr "背景'%s'を書ãè¾¼ã‚ã¾ã›ã‚“ãŒã€å‡¦ç†ã‚’続行ã—ã¾ã™ã€‚" #: ../src/xo-file.c:326 #, c-format msgid "Invalid file contents" msgstr "ファイルã®å†…容ãŒä¸æ­£ã§ã™ã€‚" #: ../src/xo-file.c:476 #, c-format msgid "Could not open background '%s'. Setting background to white." msgstr "背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚背景を白ã«ã—ã¾ã™ã€‚" #: ../src/xo-file.c:794 #, c-format msgid "" "Could not open background '%s'.\n" "Select another file?" msgstr "" "背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚\n" "別ã®ãƒ•ァイルを開ãã¾ã™ã‹?" #: ../src/xo-file.c:940 #, c-format msgid "Could not open background '%s'." msgstr "背景'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../src/xo-file.c:1189 msgid "Unable to render one or more PDF pages." msgstr "ã„ãã¤ã‹ã®PDFã®ãƒšãƒ¼ã‚¸ã‚’æç”»ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../src/xo-file.c:1599 msgid " the display resolution, in pixels per inch" msgstr " ディスプレイ解åƒåº¦(ピクセル/インãƒ)" #: ../src/xo-file.c:1602 msgid " the initial zoom level, in percent" msgstr " 起動時ズームレベル(%)" #: ../src/xo-file.c:1605 msgid " maximize the window at startup (true/false)" msgstr " èµ·å‹•æ™‚ã«æœ€å¤§åŒ–(true/false)" #: ../src/xo-file.c:1608 msgid " start in full screen mode (true/false)" msgstr " フルスクリーンモードã§èµ·å‹•(true/false)" #: ../src/xo-file.c:1611 msgid " the window width in pixels (when not maximized)" msgstr " éžæœ€å¤§åŒ–時ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å¹…(ピクセル)" #: ../src/xo-file.c:1614 msgid " the window height in pixels" msgstr " éžæœ€å¤§åŒ–時ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®é«˜ã•(ピクセル)" #: ../src/xo-file.c:1617 msgid " scrollbar step increment (in pixels)" msgstr " スクロールãƒãƒ¼ã®ä¸€ã‚¹ãƒ†ãƒƒãƒ—増加é‡(ピクセル)" #: ../src/xo-file.c:1620 msgid " the step increment in the zoom dialog box" msgstr " ズームダイアログボックスã®ä¸€ã‚¹ãƒ†ãƒƒãƒ—増加é‡" #: ../src/xo-file.c:1623 msgid " the multiplicative factor for zoom in/out" msgstr " 拡大/縮å°ã®å¤‰åŒ–å€çއ" #: ../src/xo-file.c:1626 msgid " document view (true = continuous, false = single page)" msgstr " ドキュメント表示方法(true = 連続ページ, false = å˜ä¸€ãƒšãƒ¼ã‚¸)" #: ../src/xo-file.c:1629 msgid " use XInput extensions (true/false)" msgstr " XInput拡張を使ã†(true/false)" #: ../src/xo-file.c:1632 msgid " discard Core Pointer events in XInput mode (true/false)" msgstr " XInputモードã§ã®Core Pointerイベントを無視ã™ã‚‹(true/false)" #: ../src/xo-file.c:1635 msgid " ignore events from other devices while drawing (true/false)" msgstr " æç”»ä¸­ã¯ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’無視ã™ã‚‹(true/false)" #: ../src/xo-file.c:1638 msgid " always map eraser tip to eraser (true/false)" msgstr " 常ã«ãƒ†ãƒ¼ãƒ«ã‚¹ã‚¤ãƒƒãƒã‚’消ã—ゴムã«å¯¾å¿œã•ã›ã‚‹(true/false)" #: ../src/xo-file.c:1641 msgid "" " buttons 2 and 3 switch mappings instead of drawing (useful for some " "tablets) (true/false)" msgstr "" " ボタン2ã¨3をマッピング切り替ãˆã«ä½¿ã†(ã„ãã¤ã‹ã®" "ã‚¿ãƒ–ãƒ¬ãƒƒãƒˆã§æœ‰ç”¨)(true/false)" #: ../src/xo-file.c:1644 msgid "" " automatically load filename.pdf.xoj instead of filename.pdf (true/false)" msgstr "" " filename.pdfã§ã¯ãªãfilename.pdf.xojを自動的ã«èª­ã¿è¾¼ã‚€(true/false)" #: ../src/xo-file.c:1647 msgid " default path for open/save (leave blank for current directory)" msgstr " é–‹ã/ä¿å­˜ã®éš›ã®ãƒ‡ãƒ•ォルトパス(空欄ã§ã‚«ãƒ¬ãƒ³ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª)" #: ../src/xo-file.c:1650 msgid " use pressure sensitivity to control pen stroke width (true/false)" msgstr " 筆圧感知を用ã„ã¦ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®å¤ªã•を制御ã™ã‚‹(true/false)" #: ../src/xo-file.c:1653 msgid " minimum width multiplier" msgstr " 最å°ç­†åœ§ã§ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å¹…ã®å€çއ" #: ../src/xo-file.c:1656 msgid " maximum width multiplier" msgstr " 最大筆圧ã§ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å¹…ã®å€çއ" #: ../src/xo-file.c:1659 msgid "" " interface components from top to bottom\n" " valid values: drawarea menu main_toolbar pen_toolbar statusbar" msgstr "" " 表示ã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(上ã‹ã‚‰ä¸‹ã«)\n" " 使用ã§ãる値: drawarea menu main_toolbar pen_toolbar statusbar" #: ../src/xo-file.c:1662 msgid " interface components in fullscreen mode, from top to bottom" msgstr " フルスクリーンモードã§è¡¨ç¤ºã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ(上ã‹ã‚‰ä¸‹ã«)" #: ../src/xo-file.c:1665 msgid " interface has left-handed scrollbar (true/false)" msgstr " スクロールãƒãƒ¼ã‚’å·¦å´ã«ã™ã‚‹(true/false)" #: ../src/xo-file.c:1668 msgid " hide some unwanted menu or toolbar items (true/false)" msgstr " ä¸å¿…è¦ãªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚„ツールãƒãƒ¼ã®é …目を隠ã™(true/false)" #: ../src/xo-file.c:1671 msgid "" " interface items to hide (customize at your own risk!)\n" " see source file xo-interface.c for a list of item names" msgstr "" " éš ã™é …ç›®(自己責任ã§ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã—ã¦ãã ã•ã„!)\n" " é …ç›®åã®ãƒªã‚¹ãƒˆã¯xo-interface.cã®ã‚½ãƒ¼ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„" #: ../src/xo-file.c:1674 msgid "" " highlighter opacity (0 to 1, default 0.5)\n" " warning: opacity level is not saved in xoj files!" msgstr "" " ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ä¸é€æ˜Žåº¦(0 ã‹ã‚‰ 1, デフォルト㯠0.5)\n" " 注æ„: ä¸é€æ˜Žåº¦ã¯ xoj ファイルã«ã¯ä¿å­˜ã•れã¾ã›ã‚“!" #: ../src/xo-file.c:1677 msgid " auto-save preferences on exit (true/false)" msgstr " 終了時ã«è¨­å®šã‚’自動ä¿å­˜ã™ã‚‹(true/false)" #: ../src/xo-file.c:1680 msgid " force PDF rendering through cairo (slower but nicer) (true/false)" msgstr " cairoã§PDFã‚’æç”»ã™ã‚‹(é…ã„ãŒé«˜å“質)(true/false)" #: ../src/xo-file.c:1684 msgid " the default page width, in points (1/72 in)" msgstr " 標準ページ幅(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ)" #: ../src/xo-file.c:1687 msgid " the default page height, in points (1/72 in)" msgstr " 標準ページ高ã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ)" #: ../src/xo-file.c:1690 msgid " the default paper color" msgstr " 標準ページ背景色" #: ../src/xo-file.c:1695 msgid " the default paper style (plain, lined, ruled, or graph)" msgstr " 標準用紙スタイル(plain, lined, ruled, graph)" #: ../src/xo-file.c:1698 msgid " apply paper style changes to all pages (true/false)" msgstr " 用紙スタイルã®å¤‰æ›´ã‚’ã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸ã«é©ç”¨(true/false)" #: ../src/xo-file.c:1701 msgid " preferred unit (cm, in, px, pt)" msgstr " 使用ã™ã‚‹å˜ä½(cm, in, px, pt)" #: ../src/xo-file.c:1704 msgid " include paper ruling when printing or exporting to PDF (true/false)" msgstr " å°åˆ·ã¨PDFエクスãƒãƒ¼ãƒˆã®æ™‚ã€ç½«ç·šã‚’å«ã‚ã‚‹(true/false)" #: ../src/xo-file.c:1707 msgid " just-in-time update of page backgrounds (true/false)" msgstr " èƒŒæ™¯ã®æ›´æ–°ã‚’漸進的ã«è¡Œã†(true/false)" #: ../src/xo-file.c:1710 msgid "" " bitmap resolution of PS/PDF backgrounds rendered using ghostscript (dpi)" msgstr "" " ghostscriptã«æ¸¡ã™èƒŒæ™¯PS/PDFã®ãƒ“ットマップ解åƒåº¦(dpi)" #: ../src/xo-file.c:1713 msgid "" " bitmap resolution of PDF backgrounds when printing with libgnomeprint (dpi)" msgstr " libgnomeprintã«æ¸¡ã™èƒŒæ™¯PDFã®ãƒ“ットマップ解åƒåº¦(dpi)" #: ../src/xo-file.c:1717 msgid "" " selected tool at startup (pen, eraser, highlighter, selectregion, " "selectrect, vertspace, hand, image)" msgstr "" " 起動時ã«é¸æŠžã•れã¦ã„るツール(pen, eraser, highlighter, selectregion, " "selectrect, vertspace, hand, image)" #: ../src/xo-file.c:1720 msgid " Use the pencil from cursor theme instead of a color dot (true/false)" msgstr " カーソルを色ã¤ãã®ç‚¹ã§ã¯ãªã鉛筆ã«ã™ã‚‹(true/false)" #: ../src/xo-file.c:1723 msgid " default pen color" msgstr " 標準ペン色" #: ../src/xo-file.c:1728 msgid " default pen thickness (fine = 1, medium = 2, thick = 3)" msgstr " 標準ペン太ã•(ç´° = 1, 中 = 2, 太 = 3)" #: ../src/xo-file.c:1731 msgid " default pen is in ruler mode (true/false)" msgstr " 標準ペンを定è¦ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false)" #: ../src/xo-file.c:1734 msgid " default pen is in shape recognizer mode (true/false)" msgstr " 標準ペンを図形èªè­˜ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false)" #: ../src/xo-file.c:1737 msgid " default eraser thickness (fine = 1, medium = 2, thick = 3)" msgstr " 標準消ã—ゴム太ã•(ç´° = 1, 中 = 2, 太 = 3)" #: ../src/xo-file.c:1740 msgid " default eraser mode (standard = 0, whiteout = 1, strokes = 2)" msgstr " 標準消ã—ゴムモード(標準 = 0, 修正液 = 1, ストローク = 2)" #: ../src/xo-file.c:1743 msgid " default highlighter color" msgstr " 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆè‰²" #: ../src/xo-file.c:1748 msgid " default highlighter thickness (fine = 1, medium = 2, thick = 3)" msgstr " 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆå¤ªã•(ç´° = 1, 中 = 2, 太 = 3)" #: ../src/xo-file.c:1751 msgid " default highlighter is in ruler mode (true/false)" msgstr " 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’定è¦ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false)" #: ../src/xo-file.c:1754 msgid " default highlighter is in shape recognizer mode (true/false)" msgstr " 標準ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚’図形èªè­˜ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ã†(true/false)" #: ../src/xo-file.c:1757 msgid "" " button 2 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " ボタン2割当(pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" #: ../src/xo-file.c:1760 msgid "" " button 2 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " ボタン2ã®ãƒ–ラシをメインブラシã¨åŒã˜ã«ã™ã‚‹(true/false)(ä»–ã®è¨­å®šã‚’上書ãã—ã¾ã™)" #: ../src/xo-file.c:1763 msgid " button 2 brush color (for pen or highlighter only)" msgstr " ボタン2ブラシ色(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1770 msgid " button 2 brush thickness (pen, eraser, or highlighter only)" msgstr " ボタン2ブラシ太ã•(ペン, 消ã—ゴム, ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1774 msgid " button 2 ruler mode (true/false) (for pen or highlighter only)" msgstr " ボタン2定è¦ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1778 msgid " button 2 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " ボタン2図形èªè­˜ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1782 msgid " button 2 eraser mode (eraser only)" msgstr " ボタン2消ã—ゴムモード(消ã—ゴムã®ã¿)" #: ../src/xo-file.c:1785 msgid "" " button 3 tool (pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" msgstr "" " ボタン3割当(pen, eraser, highlighter, text, selectregion, selectrect, " "vertspace, hand, image)" #: ../src/xo-file.c:1788 msgid "" " button 3 brush linked to primary brush (true/false) (overrides all other " "settings)" msgstr "" " ボタン3ã®ãƒ–ラシをメインブラシã¨åŒã˜ã«ã™ã‚‹(true/false)(ä»–ã®è¨­å®šã‚’上書ãã—ã¾ã™)" #: ../src/xo-file.c:1791 msgid " button 3 brush color (for pen or highlighter only)" msgstr " ボタン3ブラシ色(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1798 msgid " button 3 brush thickness (pen, eraser, or highlighter only)" msgstr " ボタン3ブラシ太ã•(ペン, 消ã—ゴム, ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1802 msgid " button 3 ruler mode (true/false) (for pen or highlighter only)" msgstr " ボタン3定è¦ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1806 msgid " button 3 shape recognizer mode (true/false) (pen or highlighter only)" msgstr " ボタン3図形èªè­˜ãƒ¢ãƒ¼ãƒ‰(true/false)(ペンã¨ãƒã‚¤ãƒ©ã‚¤ãƒˆã®ã¿)" #: ../src/xo-file.c:1810 msgid " button 3 eraser mode (eraser only)" msgstr " ボタン3消ã—ゴムモード(消ã—ゴムã®ã¿)" #: ../src/xo-file.c:1814 msgid " thickness of the various pens (in points, 1 pt = 1/72 in)" msgstr " ペンã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ)" #: ../src/xo-file.c:1820 msgid " thickness of the various erasers (in points, 1 pt = 1/72 in)" msgstr " 消ã—ゴムã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ)" #: ../src/xo-file.c:1825 msgid " thickness of the various highlighters (in points, 1 pt = 1/72 in)" msgstr " ãƒã‚¤ãƒ©ã‚¤ãƒˆã®å¤ªã•(ãƒã‚¤ãƒ³ãƒˆæŒ‡å®š, 1ãƒã‚¤ãƒ³ãƒˆ = 1/72インãƒ)" #: ../src/xo-file.c:1830 msgid " name of the default font" msgstr " 標準フォントã®åå‰" #: ../src/xo-file.c:1833 msgid " default font size" msgstr " 標準フォントサイズ" #: ../src/xo-file.c:2011 msgid "" " Xournal configuration file.\n" " This file is generated automatically upon saving preferences.\n" " Use caution when editing this file manually.\n" msgstr "" " Xournal設定ファイル\n" " ã“ã®ãƒ•ァイルã¯è¨­å®šã‚’ä¿å­˜ã™ã‚‹éš›ã«è‡ªå‹•çš„ã«ä½œæˆã•れã¾ã™ã€‚\n" " 手動ã§ã®å¤‰æ›´ã¯æ³¨æ„ã—ã¦è¡Œãªã£ã¦ãã ã•ã„。\n" #: ../src/xo-misc.c:1370 #, c-format msgid " of %d" msgstr "/%d" #: ../src/xo-misc.c:1375 msgid "Background" msgstr "" #: ../src/xo-misc.c:1383 #, c-format msgid "Layer %d" msgstr "" #: ../src/xo-misc.c:1507 #, c-format msgid "Xournal - %s" msgstr "Xournal - %s" #: ../src/xo-misc.c:1763 #, c-format msgid "Save changes to '%s'?" msgstr "変更を'%s'ã«ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ" #: ../src/xo-misc.c:1764 msgid "Untitled" msgstr "タイトルãªã—" #: ../src/xo-image.c:109 msgid "Insert Image" msgstr "ç”»åƒã‚’挿入" #: ../src/xo-image.c:120 msgid "Image files" msgstr "ç”»åƒãƒ•ァイル" #: ../src/xo-image.c:145 #, c-format msgid "Error opening image '%s'" msgstr "ç”»åƒ'%s'ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚" xournal-0.4.8/INSTALL0000644000175000017500000000220612353733410013675 0ustar aurouxaurouxXournal Installation instructions ================================= (see also BUILD-NOTES.win32 for Win32 packaging/installation instructions) Dependencies: ------------- Required packages and libraries: * TO COMPILE xournal: - autoconf, automake (to generate the makefiles) - gtk+ 2.10 or later development packages (package gtk2-devel and its dependencies) - libgnomecanvas 2.4 or later development packages (package libgnomecanvas-devel and its dependencies) - poppler-glib 0.5.4 or later development packages (package poppler-glib-devel and dependencies) * TO RUN xournal: - gtk+ 2.10 or later (package gtk2 and dependencies) - libgnomecanvas 2.4 or later (package libgnomecanvas and dependencies) - poppler-glib 0.5.4 or later (package poppler-glib and dependencies) * OTHER: - ghostscript (optional: used to import PS/PDF files as bitmap backgrounds) Compilation and installation: ----------------------------- Installation in /usr/local: ./autogen.sh make (as root) make install (as root) make desktop-install Installation in $HOME: ./autogen.sh ./configure --prefix=$HOME make make install make home-desktop-install xournal-0.4.8/missing0000755000175000017500000001533112177675036014263 0ustar aurouxauroux#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: